History

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

Patrick Pannuto committed 16 years ago

Commit 22b8f151 parent 866e2612 files · +28 −0Browse files

Unified · Split

2 files
  1. include/linux/delay.h +6 −0
  2. kernel/timer.c +22 −0
include/linux/delay.h+6−0
@@ -45,6 +45,12 @@ extern unsigned long lpj_fine; · 44 unmodified lines
45void calibrate_delay(void);45void calibrate_delay(void);
46void msleep(unsigned int msecs);46void msleep(unsigned int msecs);
47unsigned long msleep_interruptible(unsigned int msecs);47unsigned long msleep_interruptible(unsigned int msecs);
48void usleep_range(unsigned long min, unsigned long max);
49
50static inline void usleep(unsigned long usecs)
51{
52 usleep_range(usecs, usecs);
53}
48 54
49static inline void ssleep(unsigned int seconds)55static inline void ssleep(unsigned int seconds)
50{56{
kernel/timer.c+22−0
@@ -1755,3 +1755,25 @@ unsigned long msleep_interruptible(unsigned int msecs) · 1754 unmodified lines
1755}1755}
1756 1756
1757EXPORT_SYMBOL(msleep_interruptible);1757EXPORT_SYMBOL(msleep_interruptible);
1758
1759static int __sched do_usleep_range(unsigned long min, unsigned long max)
1760{
1761 ktime_t kmin;
1762 unsigned long delta;
1763
1764 kmin = ktime_set(0, min * NSEC_PER_USEC);
1765 delta = max - min;
1766 return schedule_hrtimeout_range(&kmin, delta, HRTIMER_MODE_REL);
1767}
1768
1769/**
1770 * usleep_range - Drop in replacement for udelay where wakeup is flexible
1771 * @min: Minimum time in usecs to sleep
1772 * @max: Maximum time in usecs to sleep
1773 */
1774void usleep_range(unsigned long min, unsigned long max)
1775{
1776 __set_current_state(TASK_UNINTERRUPTIBLE);
1777 do_usleep_range(min, max);
1778}
1779EXPORT_SYMBOL(usleep_range);