From: Michal Wajdeczko Date: Tue, 27 Jan 2026 19:37:22 +0000 (+0100) Subject: drm/xe: Move exponential sleep logic to helper X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eec43f368466e0de9a4aaa4d09ac23815186d2a6;p=thirdparty%2Fkernel%2Flinux.git drm/xe: Move exponential sleep logic to helper 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 Reviewed-by: Matthew Brost Link: https://patch.msgid.link/20260127193727.601-3-michal.wajdeczko@intel.com --- diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c index bab930ca62e3f..de716c1fb18e0 100644 --- a/drivers/gpu/drm/xe/xe_guc_submit.c +++ b/drivers/gpu/drm/xe/xe_guc_submit.c @@ -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; } } diff --git a/drivers/gpu/drm/xe/xe_sleep.h b/drivers/gpu/drm/xe/xe_sleep.h index a772f1a37395f..2bc3f4c0ee0b3 100644 --- a/drivers/gpu/drm/xe/xe_sleep.h +++ b/drivers/gpu/drm/xe/xe_sleep.h @@ -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