Message ID | 1486456749-19142-1-git-send-email-mark.yao@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Feb 07, 2017 at 04:39:09PM +0800, Mark Yao wrote: > From: Ørjan Eide <orjan.eide@arm.com> > > When mapping buffers through the PRIME DMA-buf mmap path we might be > given an offset which has to be respected. The DRM GEM mmap path already > takes care of zeroing out the fake mmap offset, so we can just make the > IOMMU mmap implementation always respect the offset. > > TEST=graphics_GLBench This is useless in an upstream context, please remove. Thierry
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c index 1daa531..1769146 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -221,12 +221,16 @@ static int rockchip_drm_gem_object_mmap_iommu(struct drm_gem_object *obj, unsigned int i, count = obj->size >> PAGE_SHIFT; unsigned long user_count = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; unsigned long uaddr = vma->vm_start; + unsigned long offset = vma->vm_pgoff; + unsigned long end = user_count + offset; int ret; - if (user_count == 0 || user_count > count) + if (user_count == 0) + return -ENXIO; + if (end > count) return -ENXIO; - for (i = 0; i < user_count; i++) { + for (i = offset; i < end; i++) { ret = vm_insert_page(vma, uaddr, rk_obj->pages[i]); if (ret) return ret;