[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 Dafna, Your changes should also go to the newlib glue code. This file (time.c) was taken from there. As a suggestion, maybe we should find a better solution for replicating the changes there (e.g. a symbolic link in the newlib glue code referencing this file in nolibc). Cheers, Costin 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; > } > _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |