Detecting that a PRIME dma-buf being imported was exported by the same
DRM device is a pattern currently open-coded in many drivers (compare
dma_buf->ops against the driver's own ops, check obj->dev == dev, then
return the GEM object with an extra reference). This series adds generic
helpers for it and converts several drivers to use them.
Patch 1 adds drm_gem_prime_self_import(dev, dma_buf, ops): for a dma-buf
self-exported via the given ops, it returns the backing GEM object with
a reference, letting a driver short-circuit the generic PRIME import and
skip the extra dma-buf file reference. Patch 2 converts Xe to it.
Patch 3 adds drm_gem_prime_dma_buf_to_gem(), a thin wrapper that uses the
core PRIME ops, and replaces the drm_gem_is_prime_exported_dma_buf() bool
predicate with it so the shmem importer resolves the object directly
(the sole caller already wanted the referenced object).
Patches 4-12 updates various drivers to use drm_gem_prime_self_import(),
removing the duplicated open-coded checks.
No intended functional change.
v2: Add patches 4-6
v3: Move drm_gem_prime_self_import() to drm_gem.h as a static inline
helper routine
v4: Add patches 7-12
Assisted-by: GitHub-Copilot:claude-opus-4.8
Signed-off-by: Niranjana Vishwanathapura <[email protected]>
Farah Kassabri (2):
drm/gem: add helper to detect self-imported PRIME dma-bufs
drm/xe/dma-buf: Use drm helper to detect dma-buf self-import
Niranjana Vishwanathapura (10):
drm/gem: add drm_gem_prime_dma_buf_to_gem() self-import helper
drm/panthor: use drm_gem_prime_self_import() helper
drm/panfrost: use drm_gem_prime_self_import() helper
drm/amdgpu: use drm_gem_prime_self_import() helper
drm/armada: use drm_gem_prime_self_import() helper
drm/omapdrm: use drm_gem_prime_self_import() helper
drm/tegra: use drm_gem_prime_self_import() helper
drm/msm: use drm_gem_prime_self_import() helper
drm/virtio: use drm_gem_prime_self_import() helper
drm/i915: use drm_gem_prime_self_import() helper
drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 14 ++-----
drivers/gpu/drm/armada/armada_gem.c | 15 ++------
drivers/gpu/drm/drm_gem_shmem_helper.c | 14 +++----
drivers/gpu/drm/drm_prime.c | 36 +++++++++---------
drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c | 21 +++++------
drivers/gpu/drm/msm/msm_gem_prime.c | 16 +++-----
drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 14 ++-----
drivers/gpu/drm/panfrost/panfrost_gem.c | 10 ++---
drivers/gpu/drm/panthor/panthor_gem.c | 10 ++---
drivers/gpu/drm/tegra/gem.c | 12 ++----
drivers/gpu/drm/virtio/virtgpu_prime.c | 14 ++-----
drivers/gpu/drm/xe/xe_dma_buf.c | 23 ++++++-----
drivers/gpu/drm/xe/xe_dma_buf.h | 2 +
include/drm/drm_gem.h | 42 +++++++++++++++++++++
include/drm/drm_prime.h | 4 +-
15 files changed, 119 insertions(+), 128 deletions(-)
--
2.43.0