Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 57 lines 1.3 kB view raw
1/* SPDX-License-Identifier: MIT */ 2/* 3 * Copyright © 2026 Intel Corporation 4 */ 5 6#ifndef _XE_SLEEP_H_ 7#define _XE_SLEEP_H_ 8 9#include <linux/delay.h> 10#include <linux/math64.h> 11 12/** 13 * xe_sleep_relaxed_ms() - Sleep for an approximate time. 14 * @delay_ms: time in msec to sleep 15 * 16 * For smaller timeouts, sleep with 0.5ms accuracy. 17 */ 18static inline void xe_sleep_relaxed_ms(unsigned int delay_ms) 19{ 20 unsigned long min_us, max_us; 21 22 if (!delay_ms) 23 return; 24 25 if (delay_ms > 20) { 26 msleep(delay_ms); 27 return; 28 } 29 30 min_us = mul_u32_u32(delay_ms, 1000); 31 max_us = min_us + 500; 32 33 usleep_range(min_us, max_us); 34} 35 36/** 37 * xe_sleep_exponential_ms() - Sleep for a exponentially increased time. 38 * @sleep_period_ms: current time in msec to sleep 39 * @max_sleep_ms: maximum time in msec to sleep 40 * 41 * Sleep for the @sleep_period_ms and exponentially increase this time for the 42 * next loop, unless reaching the @max_sleep_ms limit. 43 * 44 * Return: approximate time in msec the task was delayed. 45 */ 46static inline unsigned int xe_sleep_exponential_ms(unsigned int *sleep_period_ms, 47 unsigned int max_sleep_ms) 48{ 49 unsigned int delay_ms = *sleep_period_ms; 50 unsigned int next_delay_ms = 2 * delay_ms; 51 52 xe_sleep_relaxed_ms(delay_ms); 53 *sleep_period_ms = min(next_delay_ms, max_sleep_ms); 54 return delay_ms; 55} 56 57#endif