mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 07:01:23 +00:00
timer: Added usleep[_range] timer
usleep[_range] are finer precision implementations of msleep and are designed to be drop-in replacements for udelay where a precise sleep / busy-wait is unnecessary. They also allow an easy interface to specify slack when a precise (ish) wakeup is unnecessary to help minimize wakeups Signed-off-by: Patrick Pannuto <ppannuto@codeaurora.org> Cc: akinobu.mita@gmail.com Cc: sboyd@codeaurora.org Acked-by: Arjan van de Ven <arjan@linux.intel.com> LKML-Reference: <4C44CDD2.1070708@codeaurora.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
866e26115c
commit
22b8f15c2f
2 changed files with 28 additions and 0 deletions
|
@ -45,6 +45,12 @@ extern unsigned long lpj_fine;
|
||||||
void calibrate_delay(void);
|
void calibrate_delay(void);
|
||||||
void msleep(unsigned int msecs);
|
void msleep(unsigned int msecs);
|
||||||
unsigned long msleep_interruptible(unsigned int msecs);
|
unsigned long msleep_interruptible(unsigned int msecs);
|
||||||
|
void usleep_range(unsigned long min, unsigned long max);
|
||||||
|
|
||||||
|
static inline void usleep(unsigned long usecs)
|
||||||
|
{
|
||||||
|
usleep_range(usecs, usecs);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void ssleep(unsigned int seconds)
|
static inline void ssleep(unsigned int seconds)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1755,3 +1755,25 @@ unsigned long msleep_interruptible(unsigned int msecs)
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(msleep_interruptible);
|
EXPORT_SYMBOL(msleep_interruptible);
|
||||||
|
|
||||||
|
static int __sched do_usleep_range(unsigned long min, unsigned long max)
|
||||||
|
{
|
||||||
|
ktime_t kmin;
|
||||||
|
unsigned long delta;
|
||||||
|
|
||||||
|
kmin = ktime_set(0, min * NSEC_PER_USEC);
|
||||||
|
delta = max - min;
|
||||||
|
return schedule_hrtimeout_range(&kmin, delta, HRTIMER_MODE_REL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* usleep_range - Drop in replacement for udelay where wakeup is flexible
|
||||||
|
* @min: Minimum time in usecs to sleep
|
||||||
|
* @max: Maximum time in usecs to sleep
|
||||||
|
*/
|
||||||
|
void usleep_range(unsigned long min, unsigned long max)
|
||||||
|
{
|
||||||
|
__set_current_state(TASK_UNINTERRUPTIBLE);
|
||||||
|
do_usleep_range(min, max);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(usleep_range);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue