Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38315878 authored by Hugh Dickins's avatar Hugh Dickins Committed by Dave Airlie
Browse files

drm: fix DRM_CONSISTENT mapping



This patch got lost in the DRM git tree for ages, bring it back to life.

Signed-off-by: default avatarDave Airlie <airlied@linux.ie>
parent d7d8aac7
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -175,8 +175,7 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,

	offset = address - vma->vm_start;
	i = (unsigned long)map->handle + offset;
	page = (map->type == _DRM_CONSISTENT) ?
		virt_to_page((void *)i) : vmalloc_to_page((void *)i);
	page = vmalloc_to_page((void *)i);
	if (!page)
		return NOPAGE_SIGBUS;
	get_page(page);
@@ -651,10 +650,15 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
			  vma->vm_start, vma->vm_end, map->offset + offset);
		vma->vm_ops = &drm_vm_ops;
		break;
	case _DRM_SHM:
	case _DRM_CONSISTENT:
		/* Consistent memory is really like shared memory. It's only
		 * allocate in a different way */
		/* Consistent memory is really like shared memory. But
		 * it's allocated in a different way, so avoid nopage */
		if (remap_pfn_range(vma, vma->vm_start,
		    page_to_pfn(virt_to_page(map->handle)),
		    vma->vm_end - vma->vm_start, vma->vm_page_prot))
			return -EAGAIN;
	/* fall through to _DRM_SHM */
	case _DRM_SHM:
		vma->vm_ops = &drm_vm_shm_ops;
		vma->vm_private_data = (void *)map;
		/* Don't let this area swap.  Change when