From 15341aece26fc8b52c1b1033b64d1302e8bbd5d7 Mon Sep 17 00:00:00 2001 From: Sebastian Andrzej Siewior Date: Tue, 3 Oct 2023 21:37:21 +0200 Subject: [PATCH 167/204] drm/i915/guc: Consider also RCU depth in busy loop. 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" Signed-off-by: Sebastian Andrzej Siewior --- drivers/gpu/drm/i915/gt/uc/intel_guc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: linux-6.6.58-rt45/drivers/gpu/drm/i915/gt/uc/intel_guc.h =================================================================== --- linux-6.6.58-rt45.orig/drivers/gpu/drm/i915/gt/uc/intel_guc.h +++ linux-6.6.58-rt45/drivers/gpu/drm/i915/gt/uc/intel_guc.h @@ -317,7 +317,7 @@ static inline int intel_guc_send_busy_lo { 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