diff options
Diffstat (limited to 'drivers/xen/gntdev.c')
| -rw-r--r-- | drivers/xen/gntdev.c | 19 | 
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c index 7cf9c51318aa..469dfbd6cf90 100644 --- a/drivers/xen/gntdev.c +++ b/drivers/xen/gntdev.c @@ -526,20 +526,20 @@ static int mn_invl_range_start(struct mmu_notifier *mn,  	struct gntdev_grant_map *map;  	int ret = 0; -	if (range->blockable) +	if (mmu_notifier_range_blockable(range))  		mutex_lock(&priv->lock);  	else if (!mutex_trylock(&priv->lock))  		return -EAGAIN;  	list_for_each_entry(map, &priv->maps, next) {  		ret = unmap_if_in_range(map, range->start, range->end, -					range->blockable); +					mmu_notifier_range_blockable(range));  		if (ret)  			goto out_unlock;  	}  	list_for_each_entry(map, &priv->freeable_maps, next) {  		ret = unmap_if_in_range(map, range->start, range->end, -					range->blockable); +					mmu_notifier_range_blockable(range));  		if (ret)  			goto out_unlock;  	} @@ -852,7 +852,7 @@ static int gntdev_get_page(struct gntdev_copy_batch *batch, void __user *virt,  	unsigned long xen_pfn;  	int ret; -	ret = get_user_pages_fast(addr, 1, writeable, &page); +	ret = get_user_pages_fast(addr, 1, writeable ? FOLL_WRITE : 0, &page);  	if (ret < 0)  		return ret; @@ -1084,7 +1084,7 @@ static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma)  	int index = vma->vm_pgoff;  	int count = vma_pages(vma);  	struct gntdev_grant_map *map; -	int i, err = -EINVAL; +	int err = -EINVAL;  	if ((vma->vm_flags & VM_WRITE) && !(vma->vm_flags & VM_SHARED))  		return -EINVAL; @@ -1145,12 +1145,9 @@ static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma)  		goto out_put_map;  	if (!use_ptemod) { -		for (i = 0; i < count; i++) { -			err = vm_insert_page(vma, vma->vm_start + i*PAGE_SIZE, -				map->pages[i]); -			if (err) -				goto out_put_map; -		} +		err = vm_map_pages(vma, map->pages, map->count); +		if (err) +			goto out_put_map;  	} else {  #ifdef CONFIG_X86  		/*  |