]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Move exponential sleep logic to helper
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Tue, 27 Jan 2026 19:37:22 +0000 (20:37 +0100)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Mon, 2 Feb 2026 21:35:42 +0000 (22:35 +0100)
We want to reuse the same increased sleep logic in other places.
To avoid code duplication, move it to the helper.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/20260127193727.601-3-michal.wajdeczko@intel.com
drivers/gpu/drm/xe/xe_guc_submit.c
drivers/gpu/drm/xe/xe_sleep.h

index bab930ca62e3f2c20e9056f48334fe792dfc438a..de716c1fb18e0d33743f9a1acdc24840d031153a 100644 (file)
@@ -1049,10 +1049,7 @@ try_again:
                                return -ENODEV;
                        }
 
-                       msleep(sleep_period_ms);
-                       sleep_total_ms += sleep_period_ms;
-                       if (sleep_period_ms < 64)
-                               sleep_period_ms <<= 1;
+                       sleep_total_ms += xe_sleep_exponential_ms(&sleep_period_ms, 64);
                        goto try_again;
                }
        }
index a772f1a37395f4258b65a4f5ab0b84ec2c5078d2..2bc3f4c0ee0b3b82144cfbc19774145e8bc1e7f9 100644 (file)
@@ -33,4 +33,25 @@ static inline void xe_sleep_relaxed_ms(unsigned int delay_ms)
        usleep_range(min_us, max_us);
 }
 
+/**
+ * xe_sleep_exponential_ms() - Sleep for a exponentially increased time.
+ * @sleep_period_ms: current time in msec to sleep
+ * @max_sleep_ms: maximum time in msec to sleep
+ *
+ * Sleep for the @sleep_period_ms and exponentially increase this time for the
+ * next loop, unless reaching the @max_sleep_ms limit.
+ *
+ * Return: approximate time in msec the task was delayed.
+ */
+static inline unsigned int xe_sleep_exponential_ms(unsigned int *sleep_period_ms,
+                                                  unsigned int max_sleep_ms)
+{
+       unsigned int delay_ms = *sleep_period_ms;
+       unsigned int next_delay_ms = 2 * delay_ms;
+
+       xe_sleep_relaxed_ms(delay_ms);
+       *sleep_period_ms = min(next_delay_ms, max_sleep_ms);
+       return delay_ms;
+}
+
 #endif