]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 16 Oct 2025 18:54:07 +0000 (21:54 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 7 Nov 2025 15:38:48 +0000 (17:38 +0200)
commit965930962a41cdb24a4b0e1c2f580b20b139bacb
tree5c2c6dd6df7d2b5cc689ac47d0170b9c0c072039
parent8f1ddb0251452c9de35a96ac5f7c4f5e87a37266
drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling

The current attempted split between xe/i915 vs. display
for intel_frontbuffer is a mess:
- the i915 rcu leaks through the interface to the display side
- the obj->frontbuffer write-side is now protected by a display
  specific spinlock even though the actual obj->framebuffer
  pointer lives in a i915 specific structure
- the kref is getting poked directly from both sides
- i915_active is still on the display side

Clean up the mess by moving everything about the frontbuffer
lifetime management to the i915/xe side:
- the rcu usage is now completely contained in i915
- frontbuffer_lock is moved into i915
- kref is on the i915/xe side (xe needs the refcount as well
  due to intel_frontbuffer_queue_flush()->intel_frontbuffer_ref())
- the bo (and its refcounting) is no longer on the display side
- i915_active is contained in i915

I was pondering whether we could do this in some kind of smaller
steps, and perhaps we could, but it would probably have to start
with a bunch of reverts (which for sure won't go cleanly anymore).
So not convinced it's worth the hassle.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patch.msgid.link/20251016185408.22735-10-ville.syrjala@linux.intel.com
16 files changed:
drivers/gpu/drm/i915/Makefile
drivers/gpu/drm/i915/display/intel_bo.c
drivers/gpu/drm/i915/display/intel_bo.h
drivers/gpu/drm/i915/display/intel_display_core.h
drivers/gpu/drm/i915/display/intel_display_driver.c
drivers/gpu/drm/i915/display/intel_frontbuffer.c
drivers/gpu/drm/i915/display/intel_frontbuffer.h
drivers/gpu/drm/i915/gem/i915_gem_object.c
drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c [new file with mode: 0644]
drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
drivers/gpu/drm/i915/gem/i915_gem_object_types.h
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_vma.c
drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
drivers/gpu/drm/xe/display/intel_bo.c