timer: add fsleep for flexible sleeping
Sleeping for a certain amount of time requires use of different functions, depending on the time period. Documentation/timers/timers-howto.rst explains when to use which function, and also checkpatch checks for some potentially problematic cases. So let's create a helper that automatically chooses the appropriate sleep function -> fsleep(), for flexible sleeping If the delay is a constant, then the compiler should be able to ensure that the new helper doesn't create overhead. If the delay is not constant, then the new helper can save some code. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
969c54646a
Коммит
c6af13d334
|
@ -110,3 +110,6 @@ NON-ATOMIC CONTEXT:
|
|||
short, the difference is whether the sleep can be ended
|
||||
early by a signal. In general, just use msleep unless
|
||||
you know you have a need for the interruptible variant.
|
||||
|
||||
FLEXIBLE SLEEPING (any delay, uninterruptible)
|
||||
* Use fsleep
|
||||
|
|
|
@ -65,4 +65,15 @@ static inline void ssleep(unsigned int seconds)
|
|||
msleep(seconds * 1000);
|
||||
}
|
||||
|
||||
/* see Documentation/timers/timers-howto.rst for the thresholds */
|
||||
static inline void fsleep(unsigned long usecs)
|
||||
{
|
||||
if (usecs <= 10)
|
||||
udelay(usecs);
|
||||
else if (usecs <= 20000)
|
||||
usleep_range(usecs, 2 * usecs);
|
||||
else
|
||||
msleep(DIV_ROUND_UP(usecs, 1000));
|
||||
}
|
||||
|
||||
#endif /* defined(_LINUX_DELAY_H) */
|
||||
|
|
Загрузка…
Ссылка в новой задаче