[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Minios-devel] [UNIKRAFT PATCH v2] lib/nolibc: Fix remaining time in nanosleep
Hi, Yes, Ill have a look, I should supply the same patch to the newlibc?
Dafna
Reviewed-by: Florian Schmidt <florian.schmidt@xxxxxxxxx>
Thank you for the patch! Do you want to look into the newlib glue code,
as Costin mentioned? It's basically a very similar patch updating the
glue function for nanosleep() there. Otherwise one of us will do it
soon(tm).
Cheers,
Florian
On 09/04/2018 10:36 PM, Dafna Hirschfeld wrote:
> Calculate the remaining time to sleep and update
> the rem parameter if it is given.
> If the remaining time is larger than 0, it means that
> the thread was waken up explicitly and nanosleep returns -1
> to indicate that. Otherwise nanosleep returns 0
>
> Signed-off-by: Dafna Hirschfeld <dafna3@xxxxxxxxx>
> ---
> lib/nolibc/time.c | 22 ++++++++++++++++++----
> 1 file changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/lib/nolibc/time.c b/lib/nolibc/time.c
> index 1c058ae..9e3e24e 100644
> --- a/lib/nolibc/time.c
> +++ b/lib/nolibc/time.c
> @@ -59,9 +59,16 @@ static void __spin_wait(__nsec nsec)
>
> int nanosleep(const struct timespec *req, struct timespec *rem)
> {
> - __nsec nsec = (__nsec) req->tv_sec * 1000000000L;
> + __nsec before, after, diff, nsec;
>
> + if (!req || req->tv_nsec < 0 || req->tv_nsec > 999999999) {
> + errno = EINVAL;
> + return -1;
> + }
> +
> + nsec = (__nsec) req->tv_sec * 1000000000L;
> nsec += req->tv_nsec;
> + before = ukplat_monotonic_clock();
>
> #if CONFIG_HAVE_SCHED
> uk_sched_thread_sleep(nsec);
> @@ -69,9 +76,16 @@ int nanosleep(const struct timespec *req, struct timespec *rem)
> __spin_wait(nsec);
> #endif
>
> - if (rem) {
> - rem->tv_sec = 0;
> - rem->tv_nsec = 0;
> + after = ukplat_monotonic_clock();
> + diff = after - before;
> +
> + if (diff < nsec) {
> + if (rem) {
> + rem->tv_sec = ukarch_time_nsec_to_sec(nsec - diff);
> + rem->tv_nsec = ukarch_time_subsec(nsec - diff);
> + }
> + errno = EINTR;
> + return -1;
> }
> return 0;
> }
>
--
Dr. Florian Schmidt
フローリアン・シュミット
Research Scientist,
Systems and Machine Learning Group
NEC Laboratories Europe
Kurfürsten-Anlage 36, D-69115 Heidelberg
Tel. +49 (0)6221 4342-265
Fax: +49 (0)6221 4342-155
e-mail: florian.schmidt@xxxxxxxxx
============================================================
Registered at Amtsgericht Mannheim, Germany, HRB728558
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|