On Wed, Jun 13, 2018 at 1:19 AM Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> wrote: > > On Tue, Jun 12, 2018 at 01:52:48PM -0700, Andrey Smirnov wrote: > > Move delay and timeout functions to lib/ in order to share them with > > PBL. Currently only the most trivial implementation of get_time_ns() > > usefull to implement never-expiring timeouts is provided. More work is > > needed to allow board specific overrides. > > > > Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> > > --- > > common/clock.c | 52 ------------------------------------ > > lib/Makefile | 1 + > > lib/clock.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++ > > 3 files changed, 73 insertions(+), 52 deletions(-) > > create mode 100644 lib/clock.c > > > > +#if defined(__PBL__) > > +/* > > + * Poller infrastructure is not available in PBL, so we just define > > + * is_timeout to be a synonym for is_timeout_non_interruptible > > + */ > > +int is_timeout(uint64_t start_ns, uint64_t time_offset_ns) > > + __alias(is_timeout_non_interruptible); > > +#else > > +#include <poller.h> > > + > > +int is_timeout(uint64_t start_ns, uint64_t time_offset_ns) > > +{ > > + > > + if (time_offset_ns >= 100 * USECOND) > > + poller_call(); > > + > > + return is_timeout_non_interruptible(start_ns, time_offset_ns); > > +} > > +#endif > > +EXPORT_SYMBOL(is_timeout); > > + > > +void ndelay(unsigned long nsecs) > > +{ > > + uint64_t start = get_time_ns(); > > + > > + while(!is_timeout_non_interruptible(start, nsecs)); > > +} > > +EXPORT_SYMBOL(ndelay); > > + > > +void udelay(unsigned long usecs) > > +{ > > + uint64_t start = get_time_ns(); > > + > > + while(!is_timeout(start, usecs * USECOND)); > > +} > > +EXPORT_SYMBOL(udelay); > > + > > +void mdelay(unsigned long msecs) > > +{ > > + uint64_t start = get_time_ns(); > > + > > + while(!is_timeout(start, msecs * MSECOND)); > > +} > > +EXPORT_SYMBOL(mdelay); > > + > > +void mdelay_non_interruptible(unsigned long msecs) > > +{ > > + uint64_t start = get_time_ns(); > > + > > + while (!is_timeout_non_interruptible(start, msecs * MSECOND)) > > + ; > > +} > > +EXPORT_SYMBOL(mdelay_non_interruptible); > > + > > +__weak uint64_t get_time_ns(void) > > +{ > > + return 0; > > +} > > So in PBL we now have [num]delay functions which will lockup the system > forever when called. This is not good. > > Given that you only need is_timeout() to implement the iopoll.h functions > and this patch is only a complicated way to shortcircuit the timeout, I > think it would be better to just put a #ifndef __PBL__ around the call > to is_timeout() in readx_poll_timeout(). This would at least make it > clearer to the reader that there actually is no timeout in the PBL > case. > OK, sure, will do in v6. Thanks, Andrey Smirnov _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox