[PATCH v2] drm/gem: Fix mmap fake offset handling for drm_gem_object_funcs.mmap
kraxel at redhat.com
Fri Oct 25 05:34:07 UTC 2019
On Thu, Oct 24, 2019 at 02:18:59PM -0500, Rob Herring wrote:
> Commit c40069cb7bd6 ("drm: add mmap() to drm_gem_object_funcs")
> introduced a GEM object mmap() hook which is expected to subtract the
> fake offset from vm_pgoff. However, for mmap() on dmabufs, there is not
> a fake offset.
> To fix this, let's always call mmap() object callback with an offset of 0,
> and leave it up to drm_gem_mmap_obj() to remove the fake offset.
> TTM still needs the fake offset, so we have to add it back until that's
Fixing ttm looks easy, there are not many calls to drm_vma_node_start()
the ttm code. Can look into this when I'm back from kvm forum @ lyon.
> int ttm_bo_mmap_obj(struct vm_area_struct *vma, struct ttm_buffer_object *bo)
> + /*
> + * FIXME: &drm_gem_object_funcs.mmap is called with the fake offset
> + * removed. Add it back here until the rest of TTM works without it.
> + */
> + vma->vm_pgoff += drm_vma_node_start(&bo->base.vma_node);
> ttm_bo_mmap_vma_setup(bo, vma);
> return 0;
Yes, that should keep ttm happy for now. Survived a quick smoke test
with qemu and bochs.
Acked-by: Gerd Hoffmann <kraxel at redhat.com>
More information about the dri-devel