From: Ørjan Eide Date: Mon, 5 Sep 2016 11:49:12 +0000 (+0200) Subject: CHROMIUM: drm/rockchip: Respect page offset for PRIME mmap calls X-Git-Tag: firefly_0821_release~1138 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=4edac39a91be426ad550e4d75d55e249c8000a53;p=firefly-linux-kernel-4.4.55.git CHROMIUM: drm/rockchip: Respect page offset for PRIME mmap calls When mapping external DMA-bufs through the PRIME mmap call, we might be given an offset which has to be respected. However for the internal DRM GEM mmap path, we have to ignore the fake mmap offset used to identify the buffer only. Currently the code always zeroes out vma->vm_pgoff, which breaks the former. This patch fixes the problem by moving the vm_pgoff assignment to a function that is used only for GEM mmap path, so that the PRIME path retains the original offset. BUG=chrome-os-partner:56615 TEST=graphics_GLBench Change-Id: Iec6e996707b0fe7e95a019423a944d98c80beaab Signed-off-by: rjan Eide Signed-off-by: Tomasz Figa Reviewed-on: https://chromium-review.googlesource.com/381332 Reviewed-by: Daniel Kurtz Signed-off-by: Randy Li --- diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c index c1cf3dff8e24..dc7ec1de3b06 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -254,7 +254,6 @@ static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj, * VM_PFNMAP flag that was set by drm_gem_mmap_obj()/drm_gem_mmap(). */ vma->vm_flags &= ~VM_PFNMAP; - vma->vm_pgoff = 0; if (rk_obj->pages) ret = rockchip_drm_gem_object_mmap_iommu(obj, vma); @@ -289,6 +288,12 @@ int rockchip_gem_mmap(struct file *filp, struct vm_area_struct *vma) if (ret) return ret; + /* + * Set vm_pgoff (used as a fake buffer offset by DRM) to 0 and map the + * whole buffer from the start. + */ + vma->vm_pgoff = 0; + obj = vma->vm_private_data; return rockchip_drm_gem_object_mmap(obj, vma);