aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/xen/gntdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/xen/gntdev.c')
-rw-r--r--drivers/xen/gntdev.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
index d96d311b858..687761f65e5 100644
--- a/drivers/xen/gntdev.c
+++ b/drivers/xen/gntdev.c
@@ -358,17 +358,26 @@ static int unmap_grant_pages(struct grant_map *map, int offset, int pages)
358 358
359/* ------------------------------------------------------------------ */ 359/* ------------------------------------------------------------------ */
360 360
361static void gntdev_vma_open(struct vm_area_struct *vma)
362{
363 struct grant_map *map = vma->vm_private_data;
364
365 pr_debug("gntdev_vma_open %p\n", vma);
366 atomic_inc(&map->users);
367}
368
361static void gntdev_vma_close(struct vm_area_struct *vma) 369static void gntdev_vma_close(struct vm_area_struct *vma)
362{ 370{
363 struct grant_map *map = vma->vm_private_data; 371 struct grant_map *map = vma->vm_private_data;
364 372
365 pr_debug("close %p\n", vma); 373 pr_debug("gntdev_vma_close %p\n", vma);
366 map->vma = NULL; 374 map->vma = NULL;
367 vma->vm_private_data = NULL; 375 vma->vm_private_data = NULL;
368 gntdev_put_map(map); 376 gntdev_put_map(map);
369} 377}
370 378
371static struct vm_operations_struct gntdev_vmops = { 379static struct vm_operations_struct gntdev_vmops = {
380 .open = gntdev_vma_open,
372 .close = gntdev_vma_close, 381 .close = gntdev_vma_close,
373}; 382};
374 383
@@ -680,7 +689,10 @@ static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma)
680 689
681 vma->vm_ops = &gntdev_vmops; 690 vma->vm_ops = &gntdev_vmops;
682 691
683 vma->vm_flags |= VM_RESERVED|VM_DONTCOPY|VM_DONTEXPAND|VM_PFNMAP; 692 vma->vm_flags |= VM_RESERVED|VM_DONTEXPAND;
693
694 if (use_ptemod)
695 vma->vm_flags |= VM_DONTCOPY|VM_PFNMAP;
684 696
685 vma->vm_private_data = map; 697 vma->vm_private_data = map;
686 698