lkml.org 
[lkml]   [2010]   [Jul]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] timer: Added usleep[_range] timer
    On Mon, 19 Jul 2010 15:12:34 -0700
    Patrick Pannuto <ppannuto@codeaurora.org> wrote:

    > Respun without interruptible...
    >

    And without all the nice changelog info. Oh well.

    > 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>
    > ---
    > include/linux/delay.h | 6 ++++++
    > kernel/timer.c | 22 ++++++++++++++++++++++
    > 2 files changed, 28 insertions(+), 0 deletions(-)
    >
    > diff --git a/include/linux/delay.h b/include/linux/delay.h
    > index fd832c6..0e303d1 100644
    > --- a/include/linux/delay.h
    > +++ b/include/linux/delay.h
    > @@ -45,6 +45,12 @@ extern unsigned long lpj_fine;
    > void calibrate_delay(void);
    > void msleep(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)
    > {
    > diff --git a/kernel/timer.c b/kernel/timer.c
    > index ee305c8..4e6746f 100644
    > --- a/kernel/timer.c
    > +++ b/kernel/timer.c
    > @@ -1750,3 +1750,25 @@ unsigned long msleep_interruptible(unsigned int msecs)
    > }
    >
    > 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);

    Fair enough, I guess. People can go over and look at the
    schedule_hrtimeout_range() documentation to work out why on earth they
    should specify a "range".

    Of course, nobody will actually think to _use_ this thing. Someone
    owes me a "usleep_range is preferred over usleep" checkpatch rule!



    \
     
     \ /
      Last update: 2010-07-23 01:19    [W:0.027 / U:89.788 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site