[PATCH] drm/i915/slpc: Avoid negative num_waiters to ensure correct waitboost behavior

sk.anirban at intel.com sk.anirban at intel.com
Mon Apr 21 09:59:58 UTC 2025


From: Sk Anirban <sk.anirban at intel.com>

In SLPC, the num_waiters atomic variable can become negative if a request
retires without a proper frequency boost. This issue prevents the
frequency boost from being triggered in subsequent boost iterations.
This check stops the counter from going negative to ensures the
correct behavior of the waitboost mechanism.

Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13598
Signed-off-by: Sk Anirban <sk.anirban at intel.com>
---
 drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
index d5ee6e5e1443..80d7de8c1a25 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
@@ -840,8 +840,10 @@ void intel_guc_slpc_dec_waiters(struct intel_guc_slpc *slpc)
 	 * set_param fails.
 	 */
 	mutex_lock(&slpc->lock);
-	if (atomic_dec_and_test(&slpc->num_waiters))
-		slpc_force_min_freq(slpc, slpc->min_freq_softlimit);
+	if (atomic_read(&slpc->num_waiters) > 0)
+		if (atomic_dec_and_test(&slpc->num_waiters))
+			slpc_force_min_freq(slpc, slpc->min_freq_softlimit);
+
 	mutex_unlock(&slpc->lock);
 }
 
-- 
2.34.1



More information about the Intel-gfx mailing list