mirror of
https://github.com/torvalds/linux.git
synced 2025-11-01 09:09:47 +02:00
Currently xe's intel_frontbuffer implementation forgets to
hold a reference on the bo. This makes the entire thing
extremely fragile as the cleanup order now depends on bo
references held by other things
(namely intel_fb_bo_framebuffer_fini()).
Move the bo refcounting to intel_frontbuffer_{get,release}()
so that both i915 and xe do this the same way.
I first tried to fix this by having xe do the refcounting
from its intel_bo_set_frontbuffer() implementation
(which is what i915 does currently), but turns out xe's
drm_gem_object_free() can sleep and thus drm_gem_object_put()
isn't safe to call while we hold fb_tracking.lock.
Fixes:
|
||
|---|---|---|
| .. | ||
| selftests | ||
| i915_gem_busy.c | ||
| i915_gem_clflush.c | ||
| i915_gem_clflush.h | ||
| i915_gem_context.c | ||
| i915_gem_context.h | ||
| i915_gem_context_types.h | ||
| i915_gem_create.c | ||
| i915_gem_create.h | ||
| i915_gem_dmabuf.c | ||
| i915_gem_dmabuf.h | ||
| i915_gem_domain.c | ||
| i915_gem_domain.h | ||
| i915_gem_execbuffer.c | ||
| i915_gem_internal.c | ||
| i915_gem_internal.h | ||
| i915_gem_ioctls.h | ||
| i915_gem_lmem.c | ||
| i915_gem_lmem.h | ||
| i915_gem_mman.c | ||
| i915_gem_mman.h | ||
| i915_gem_object.c | ||
| i915_gem_object.h | ||
| i915_gem_object_frontbuffer.h | ||
| i915_gem_object_types.h | ||
| i915_gem_pages.c | ||
| i915_gem_phys.c | ||
| i915_gem_pm.c | ||
| i915_gem_pm.h | ||
| i915_gem_region.c | ||
| i915_gem_region.h | ||
| i915_gem_shmem.c | ||
| i915_gem_shrinker.c | ||
| i915_gem_shrinker.h | ||
| i915_gem_stolen.c | ||
| i915_gem_stolen.h | ||
| i915_gem_throttle.c | ||
| i915_gem_tiling.c | ||
| i915_gem_tiling.h | ||
| i915_gem_ttm.c | ||
| i915_gem_ttm.h | ||
| i915_gem_ttm_move.c | ||
| i915_gem_ttm_move.h | ||
| i915_gem_ttm_pm.c | ||
| i915_gem_ttm_pm.h | ||
| i915_gem_userptr.c | ||
| i915_gem_wait.c | ||
| i915_gemfs.c | ||
| i915_gemfs.h | ||