Re: [PATCH v5 32/54] common/clock: Move delay and timeout functions to lib/

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux