[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [PATCH 10/11] xen gntdev: use gnttab_map_refs and gnttab_unmap_refs
On Wed, Dec 15, 2010 at 01:40:45PM +0000, stefano.stabellini@xxxxxxxxxxxxx wrote: > From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > > Use gnttab_map_refs and gnttab_unmap_refs to map and unmap the grant > ref, so that we can have a corresponding struct page. > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx> > --- > drivers/xen/gntdev.c | 37 ++++++++++++++++++++++++++++++------- > 1 files changed, 30 insertions(+), 7 deletions(-) > > diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c > index fc5e420..35de6bb 100644 > --- a/drivers/xen/gntdev.c > +++ b/drivers/xen/gntdev.c > @@ -68,6 +68,7 @@ struct grant_map { > struct ioctl_gntdev_grant_ref *grants; > struct gnttab_map_grant_ref *map_ops; > struct gnttab_unmap_grant_ref *unmap_ops; > + struct page **pages; > }; > > /* ------------------------------------------------------------------ */ > @@ -88,6 +89,7 @@ static void gntdev_print_maps(struct gntdev_priv *priv, > static struct grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int > count) > { > struct grant_map *add; > + int i; So 'int' here. > > add = kzalloc(sizeof(struct grant_map), GFP_KERNEL); > if (NULL == add) > @@ -96,11 +98,19 @@ static struct grant_map *gntdev_alloc_map(struct > gntdev_priv *priv, int count) > add->grants = kzalloc(sizeof(add->grants[0]) * count, GFP_KERNEL); > add->map_ops = kzalloc(sizeof(add->map_ops[0]) * count, GFP_KERNEL); > add->unmap_ops = kzalloc(sizeof(add->unmap_ops[0]) * count, GFP_KERNEL); > - if (NULL == add->grants || > - NULL == add->map_ops || > - NULL == add->unmap_ops) > + add->pages = kzalloc(sizeof(add->pages[0]) * count, GFP_KERNEL); > + if (NULL == add->grants || > + NULL == add->map_ops || > + NULL == add->unmap_ops || > + NULL == add->pages) > goto err; > > + for (i = 0; i < count; i++) { > + add->pages[i] = alloc_page(GFP_KERNEL | __GFP_HIGHMEM); > + if (add->pages[i] == NULL) > + goto err; > + } > + > add->index = 0; > add->count = count; > add->priv = priv; > @@ -111,6 +121,12 @@ static struct grant_map *gntdev_alloc_map(struct > gntdev_priv *priv, int count) > return add; > > err: > + if (add->pages) > + for (i = 0; i < count; i++) { > + if (add->pages[i]) > + __free_page(add->pages[i]); > + } > + kfree(add->pages); > kfree(add->grants); > kfree(add->map_ops); > kfree(add->unmap_ops); > @@ -186,8 +202,17 @@ static int gntdev_del_map(struct grant_map *map) > > static void gntdev_free_map(struct grant_map *map) > { > + unsigned i; But 'unsigned' here? > + > if (!map) > return; > + > + if (map->pages) > + for (i = 0; i < map->count; i++) { > + if (map->pages[i]) > + __free_page(map->pages[i]); > + } > + kfree(map->pages); > kfree(map->grants); > kfree(map->map_ops); > kfree(map->unmap_ops); > @@ -221,8 +246,7 @@ static int map_grant_pages(struct grant_map *map) > > if (debug) > printk("%s: map %d+%d\n", __FUNCTION__, map->index, map->count); > - err = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, > - map->map_ops, map->count); > + err = gnttab_map_refs(map->map_ops, map->pages, map->count); > if (WARN_ON(err)) > return err; > > @@ -241,8 +265,7 @@ static int unmap_grant_pages(struct grant_map *map, int > offset, int pages) > if (debug) > printk("%s: map %d+%d [%d+%d]\n", __FUNCTION__, > map->index, map->count, offset, pages); > - err = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, > - map->unmap_ops + offset, pages); > + err = gnttab_unmap_refs(map->unmap_ops + offset, map->pages, pages); > if (WARN_ON(err)) > return err; > > -- > 1.5.6.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |