drm/i915/guc: Consider also RCU depth in busy loop.
BugLink: https://bugs.launchpad.net/bugs/2060704 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" <jwyatt@redhat.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Kevin Becker <kevin.becker@canonical.com>
This commit is contained in:
committed by
Kevin Becker
parent
166c33a748
commit
6ad794652c
@@ -364,7 +364,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
|
||||
|
||||
Reference in New Issue
Block a user