Messages in this thread | | | Subject | Re: [PATCH v2] add function spin_event_timeout() | From | Peter Zijlstra <> | Date | Mon, 09 Mar 2009 17:06:15 +0100 |
| |
On Mon, 2009-03-09 at 10:18 -0500, Timur Tabi wrote: > The function spin_event_timeout() takes a condition and timeout value > (in jiffies) as parameters. It spins until either the condition is true > or the timeout expires. It returns non-zero if the condition is true, > zero otherwise.
This changelog utterly fails to justify this interface. And to me it seems a rather bad one. Why would we ever be wanting to spin in order of jiffies?
> Signed-off-by: Timur Tabi <timur@freescale.com> > --- > > v2: changes based on feedback > > include/linux/delay.h | 22 ++++++++++++++++++++++ > 1 files changed, 22 insertions(+), 0 deletions(-) > > diff --git a/include/linux/delay.h b/include/linux/delay.h > index fd832c6..235ca25 100644 > --- a/include/linux/delay.h > +++ b/include/linux/delay.h > @@ -51,4 +51,26 @@ static inline void ssleep(unsigned int seconds) > msleep(seconds * 1000); > } > > +/** > + * spin_event_timeout - spin until a condition gets true or a timeout elapses > + * @condition: a C expression for the event to wait for > + * @timeout: timeout, in jiffies > + * > + * The process spins until the @condition evaluates to true or the @timeout > + * elapses. > + * > + * The function returns non-zero if the @condition evaluated to true, or > + * zero if the @timeout elapsed. If both occurs (e.g. the loop was > + * pre-empted and the @condition became true in the meantime, but when the > + * loop resumed the @timeout had already elapsed), then non-zero will be > + * returned. > + */ > +#define spin_event_timeout(condition, timeout) \ > +({ \ > + unsigned long __timeout = jiffies + (timeout); \ > + while (!(condition) && time_before(jiffies, __timeout)) \ > + cpu_relax(); \ > + (condition); \ > +}) > + > #endif /* defined(_LINUX_DELAY_H) */
| |