diff options
Diffstat (limited to 'drivers/xen/gntdev.c')
| -rw-r--r-- | drivers/xen/gntdev.c | 36 | 
1 files changed, 19 insertions, 17 deletions
diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c index 610bfc6be17..2e22df2f7a3 100644 --- a/drivers/xen/gntdev.c +++ b/drivers/xen/gntdev.c @@ -105,6 +105,21 @@ static void gntdev_print_maps(struct gntdev_priv *priv,  #endif  } +static void gntdev_free_map(struct grant_map *map) +{ +	if (map == NULL) +		return; + +	if (map->pages) +		free_xenballooned_pages(map->count, map->pages); +	kfree(map->pages); +	kfree(map->grants); +	kfree(map->map_ops); +	kfree(map->unmap_ops); +	kfree(map->kmap_ops); +	kfree(map); +} +  static struct grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count)  {  	struct grant_map *add; @@ -142,12 +157,7 @@ static struct grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count)  	return add;  err: -	kfree(add->pages); -	kfree(add->grants); -	kfree(add->map_ops); -	kfree(add->unmap_ops); -	kfree(add->kmap_ops); -	kfree(add); +	gntdev_free_map(add);  	return NULL;  } @@ -198,17 +208,9 @@ static void gntdev_put_map(struct grant_map *map)  		evtchn_put(map->notify.event);  	} -	if (map->pages) { -		if (!use_ptemod) -			unmap_grant_pages(map, 0, map->count); - -		free_xenballooned_pages(map->count, map->pages); -	} -	kfree(map->pages); -	kfree(map->grants); -	kfree(map->map_ops); -	kfree(map->unmap_ops); -	kfree(map); +	if (map->pages && !use_ptemod) +		unmap_grant_pages(map, 0, map->count); +	gntdev_free_map(map);  }  /* ------------------------------------------------------------------ */  |