From: Sebastian Andrzej Siewior <bige...@linutronix.de> intel_guc_send_busy_loop() looks at in_atomic() and irqs_disabled() to decide if it should busy-spin while waiting or if it may sleep. Both checks will report false on PREEMPT_RT if sleeping spinlocks are acquired leading to RCU splats while the function sleeps.
Check also if RCU has been disabled. Reported-by: John B. Wyatt IV <jwy...@redhat.com> Reviewed-by: Rodrigo Vivi <rodrigo.v...@intel.com> Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de> Link: https://lore.kernel.org/r/20250714153954.629393-8-bige...@linutronix.de Signed-off-by: Maarten Lankhorst <d...@lankhorst.se> --- drivers/gpu/drm/i915/gt/uc/intel_guc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.h b/drivers/gpu/drm/i915/gt/uc/intel_guc.h index 053780f562c1a..b25fa8f4dc4bd 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.h +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.h @@ -362,7 +362,7 @@ static inline int intel_guc_send_busy_loop(struct intel_guc *guc, { int err; unsigned int sleep_period_ms = 1; - bool not_atomic = !in_atomic() && !irqs_disabled(); + bool not_atomic = !in_atomic() && !irqs_disabled() && !rcu_preempt_depth(); /* * FIXME: Have caller pass in if we are in an atomic context to avoid -- 2.45.2