Skip to content

Commit 22ca8a4

Browse files
committed
drm/i915/gt: Wait for RCUs frees before asserting idle on unload
During driver unload, we have many asserts that we have released our bookkeeping structs and are idle. In some cases, these struct are protected by RCU and we do not release them until after an RCU grace period. Reported-by: Maarten Lankhorst <[email protected]> Fixes: 130a95e ("drm/i915/gem: Consolidate ctx->engines[] release") Signed-off-by: Chris Wilson <[email protected]> Cc: Tvrtko Ursulin <[email protected]> Cc: Mika Kuoppala <[email protected]> Reviewed-by: Tvrtko Ursulin <[email protected]> Reviewed-by: Mika Kuoppala <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent c46c320 commit 22ca8a4

File tree

2 files changed

+4
-0
lines changed

2 files changed

+4
-0
lines changed

drivers/gpu/drm/i915/gem/i915_gem_context.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,7 @@ void i915_gem_init__contexts(struct drm_i915_private *i915)
903903
void i915_gem_driver_release__contexts(struct drm_i915_private *i915)
904904
{
905905
flush_work(&i915->gem.contexts.free_work);
906+
rcu_barrier(); /* and flush the left over RCU frees */
906907
}
907908

908909
static int gem_context_register(struct i915_gem_context *ctx,

drivers/gpu/drm/i915/gt/intel_gt.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,9 @@ void intel_gt_driver_release(struct intel_gt *gt)
667667

668668
void intel_gt_driver_late_release(struct intel_gt *gt)
669669
{
670+
/* We need to wait for inflight RCU frees to release their grip */
671+
rcu_barrier();
672+
670673
intel_uc_driver_late_release(&gt->uc);
671674
intel_gt_fini_requests(gt);
672675
intel_gt_fini_reset(gt);

0 commit comments

Comments
 (0)