• Thomas Hellström's avatar
    drm/i915/gem: Correct the locking and pin pattern for dma-buf (v8) · d7b2cb38
    Thomas Hellström authored
    If our exported dma-bufs are imported by another instance of our driver,
    that instance will typically have the imported dma-bufs locked during
    dma_buf_map_attachment(). But the exporter also locks the same reservation
    object in the map_dma_buf() callback, which leads to recursive locking.
    
    So taking the lock inside _pin_pages_unlocked() is incorrect.
    
    Additionally, the current pinning code path is contrary to the defined
    way that pinning should occur.
    
    Remove the explicit pin/unpin from the map/umap functions and move them
    to the attach/detach allowing correct locking to occur, and to match
    the static dma-buf drm_prime pattern.
    
    Add a live selftest to exercise both dynamic and non-dynamic
    exports.
    
    v2:
    - Extend the selftest with a fake dynamic importer.
    - Provide real pin and unpin callbacks to not abuse the interface.
    v3: (ruhl)
    - Remove the dynamic export support and move the pinning into the
      attach/detach path.
    v4: (ruhl)
    - Put pages does not need to assert on the dma-resv
    v5: (jason)
    - Lock around dma_buf_unmap_attachment() when emulating a dynamic
      importer in the subtests.
    - Use pin_pages_unlocked
    v6: (jason)
    - Use dma_buf_attach instead of dma_buf_attach_dynamic in the selftests
    v7: (mauld)
    - Use __i915_gem_object_get_pages (2 __underscores) instead of the
      4 ____underscore version in the selftests
    v8: (mauld)
    - Drop the kernel doc from the static i915_gem_dmabuf_attach function
    - Add missing "err = PTR_ERR()" to a bunch of selftest error cases
    Reported-by: default avatarMichael J. Ruhl <michael.j.ruhl@intel.com>
    Signed-off-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
    Signed-off-by: default avatarMichael J. Ruhl <michael.j.ruhl@intel.com>
    Signed-off-by: default avatarJason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: default avatarJason Ekstrand <jason@jlekstrand.net>
    Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210723172142.3273510-8-jason@jlekstrand.net
    d7b2cb38
i915_gem_dmabuf.c 7.54 KB