• Daniel Vetter's avatar
    drm/shmem-helper: Switch to vmf_insert_pfn · 8b93d1d7
    Daniel Vetter authored
    We want to stop gup, which isn't the case if we use vmf_insert_page
    and VM_MIXEDMAP, because that does not set pte_special.
    
    The motivation here is to stop get_user_pages from working on buffer
    object mmaps in general. Quoting some discussion with Thomas:
    
    On Thu, Jul 22, 2021 at 08:22:43PM +0200, Thomas Zimmermann wrote:
    > Am 13.07.21 um 22:51 schrieb Daniel Vetter:
    > > We want to stop gup, which isn't the case if we use vmf_insert_page
    >
    > What is gup?
    
    get_user_pages. It pins memory wherever it is, which badly wreaks at least
    ttm and could also cause trouble with cma allocations. In both cases
    becaue we can't move/reuse these pages anymore.
    
    Now get_user_pages fails when the memory isn't considered "normal", like
    with VM_PFNMAP and using vm_insert_pfn. For consistency across all dma-buf
    I'm trying (together with Christian König) to roll this out everywhere,
    for fewer surprises.
    
    E.g. for 5.14 iirc we merged a patch to do the same for ttm, where it
    closes an actual bug (ttm gets really badly confused when there's suddenly
    pinned pages where it thought it can move them).
    
    cma allcoations already use VM_PFNMAP (because that's what dma_mmap is
    using underneath), as is anything that's using remap_pfn_range. Worst case
    we have to revert this patch for shmem helpers if it breaks something, but
    I hope that's not the case. On the ttm side we've also had some fallout
    that we needed to paper over with clever tricks.
    v2: With this shmem gem helpers now definitely need CONFIG_MMU (0day)
    
    v3: add more depends on MMU. For usb drivers this is a bit awkward,
    but really it's correct: To be able to provide a contig mapping of
    buffers to userspace on !MMU platforms we'd need to use the cma
    helpers for these drivers on those platforms. As-is this wont work.
    
    Also not exactly sure why vm_insert_page doesn't go boom, because that
    definitely wont fly in practice since the pages are non-contig to
    begin with.
    
    v4: Explain the entire motivation a lot more (Thomas)
    Acked-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Maxime Ripard <mripard@kernel.org>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: David Airlie <airlied@linux.ie>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210812131412.2487363-2-daniel.vetter@ffwll.ch
    8b93d1d7
Kconfig 5 KB