mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
CHROMIUM: drm/rockchip: Respect page offset in IOMMU mmap
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. BUG=chrome-os-partner:56615 TEST=graphics_GLBench Change-Id: Iec83e720b24ddd35a92f3df8312015bc5af798f0 Signed-off-by: rjan Eide <orjan.eide@arm.com> Signed-off-by: Tomasz Figa <tfiga@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/386477 Reviewed-by: Daniel Kurtz <djkurtz@chromium.org> Signed-off-by: Randy Li <randy.li@rock-chips.com>
This commit is contained in:
@@ -218,12 +218,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;
|
||||
|
||||
Reference in New Issue
Block a user