On 7/1/20 6:29 PM, Anastasiia Lukianenko wrote:
> From: Oleksandr Andrushchenko <oleksandr_andrushche...@epam.com>
>
> Add  wait_event_timeout - sleep until a condition gets true or a
> timeout elapses.
>
> This is a stripped version of the same from Linux kernel with the
> following u-boot specific modifications:
> - no wait queues supported
> - use u-boot timer to detect timeouts
> - check for Ctrl-C pressed during wait
>
> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushche...@epam.com>
> Signed-off-by: Anastasiia Lukianenko <anastasiia_lukiane...@epam.com>
> ---
>  include/linux/compat.h | 45 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 45 insertions(+)
>
> diff --git a/include/linux/compat.h b/include/linux/compat.h
> index 712eeaef4e..5375b7d3b8 100644
> --- a/include/linux/compat.h
> +++ b/include/linux/compat.h
> @@ -1,12 +1,20 @@
>  #ifndef _LINUX_COMPAT_H_
>  #define _LINUX_COMPAT_H_
>
> +#include <console.h>
>  #include <log.h>
>  #include <malloc.h>
> +
> +#include <asm/processor.h>
> +
>  #include <linux/types.h>
>  #include <linux/err.h>
>  #include <linux/kernel.h>
>
> +#ifdef CONFIG_XEN
> +#include <xen/events.h>
> +#endif
> +
>  struct unused {};
>  typedef struct unused unused_t;
>
> @@ -122,6 +130,43 @@ static inline void kmem_cache_destroy(struct kmem_cache 
> *cachep)
>  #define add_wait_queue(...)  do { } while (0)
>  #define remove_wait_queue(...)       do { } while (0)
>
> +#ifndef CONFIG_XEN
> +#define eventchn_poll()
> +#endif
> +
> +#define __wait_event_timeout(condition, timeout, ret)                \
> +({                                                           \
> +     ulong __ret = ret; /* explicit shadow */                \
> +     ulong start = get_timer(0);                             \
> +     for (;;) {                                              \
> +             eventchn_poll();                                \
> +             if (condition) {                                \
> +                     __ret = 1;                              \
> +                     break;                                  \
> +     }                                                       \
> +     if ((get_timer(start) > timeout) || ctrlc()) {          \
> +             __ret = 0;                                      \
> +             break;                                          \
> +     }                                                       \
> +     cpu_relax();                                            \
> +     }                                                       \
> +     __ret;                                                  \
> +})
> +
> +/*
> + * 0 if the @condition evaluated to %false after the @timeout elapsed,
> + * 1 if the @condition evaluated to %true
> + */

Please, document all arguments. Use Sphinx style as in

https://www.kernel.org/doc/html/latest/doc-guide/kernel-doc.html#function-documentation.

Best regards

Heinrich.

> +#define wait_event_timeout(wq_head, condition, timeout)                      
> \
> +({                                                                   \
> +     ulong __ret;                                                    \
> +     if (condition)                                                  \
> +             __ret = 1;                                              \
> +     else                                                            \
> +             __ret = __wait_event_timeout(condition, timeout, __ret);\
> +     __ret;                                                          \
> +})
> +
>  #define KERNEL_VERSION(a,b,c)        (((a) << 16) + ((b) << 8) + (c))
>
>  /* This is also defined in ARMv8's mmu.h */
>

Reply via email to