diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/memusage.h | 16 | ||||
-rw-r--r-- | sysdeps/mach/hurd/getitimer.c | 11 | ||||
-rw-r--r-- | sysdeps/mach/hurd/setitimer.c | 13 | ||||
-rw-r--r-- | sysdeps/mach/hurd/times.c | 7 | ||||
-rw-r--r-- | sysdeps/mach/nanosleep.c | 36 | ||||
-rw-r--r-- | sysdeps/mach/usleep.c | 5 | ||||
-rw-r--r-- | sysdeps/posix/tempname.c | 9 | ||||
-rw-r--r-- | sysdeps/posix/timespec_get.c | 14 | ||||
-rw-r--r-- | sysdeps/pthread/aio_misc.c | 6 | ||||
-rw-r--r-- | sysdeps/pthread/aio_suspend.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/make-syscalls.sh | 2 |
11 files changed, 64 insertions, 61 deletions
diff --git a/sysdeps/generic/memusage.h b/sysdeps/generic/memusage.h index 400fe23..88b291e 100644 --- a/sysdeps/generic/memusage.h +++ b/sysdeps/generic/memusage.h @@ -26,14 +26,14 @@ #endif #ifndef GETTIME -# define GETTIME(low,high) \ - { \ - struct timeval tval; \ - uint64_t usecs; \ - gettimeofday (&tval, NULL); \ - usecs = (uint64_t) tval.tv_usec + (uint64_t) tval.tv_usec * 1000000; \ - low = usecs & 0xffffffff; \ - high = usecs >> 32; \ +# define GETTIME(low,high) \ + { \ + struct timespec now; \ + uint64_t usecs; \ + clock_gettime (CLOCK_REALTIME, &now); \ + usecs = (uint64_t)now.tv_nsec / 1000 + (uint64_t)now.tv_sec * 1000000; \ + low = usecs & 0xffffffff; \ + high = usecs >> 32; \ } #endif diff --git a/sysdeps/mach/hurd/getitimer.c b/sysdeps/mach/hurd/getitimer.c index f332f0e..0982357 100644 --- a/sysdeps/mach/hurd/getitimer.c +++ b/sysdeps/mach/hurd/getitimer.c @@ -19,8 +19,9 @@ #include <errno.h> #include <sys/time.h> #include <hurd.h> +#include <mach.h> -/* XXX Temporary cheezoid implementation; see __setitmr.c. */ +/* XXX Temporary cheezoid implementation; see setitimer.c. */ /* These are defined in __setitmr.c. */ extern spin_lock_t _hurd_itimer_lock; @@ -61,8 +62,12 @@ __getitimer (enum __itimer_which which, struct itimerval *value) } /* Get the time now. */ - if (__gettimeofday (&elapsed, NULL) < 0) - return -1; + { + time_value_t tv; + __host_get_time (__mach_host_self (), &tv); + elapsed.tv_sec = tv.seconds; + elapsed.tv_usec = tv.microseconds; + } /* Extract the current timer setting; and the time it was set, so we can calculate the time elapsed so far. */ diff --git a/sysdeps/mach/hurd/setitimer.c b/sysdeps/mach/hurd/setitimer.c index 34b4339..2aab365 100644 --- a/sysdeps/mach/hurd/setitimer.c +++ b/sysdeps/mach/hurd/setitimer.c @@ -23,6 +23,7 @@ #include <hurd/signal.h> #include <hurd/sigpreempt.h> #include <hurd/msg_request.h> +#include <mach.h> #include <mach/message.h> /* XXX Temporary cheezoid implementation of ITIMER_REAL/SIGALRM. */ @@ -243,12 +244,12 @@ setitimer_locked (const struct itimerval *new, struct itimerval *old, if ((newval.it_value.tv_sec | newval.it_value.tv_usec) != 0 || old != NULL) { /* Calculate how much time is remaining for the pending alarm. */ - if (__gettimeofday (&now, NULL) < 0) - { - __spin_unlock (&_hurd_itimer_lock); - _hurd_critical_section_unlock (crit); - return -1; - } + { + time_value_t tv; + __host_get_time (__mach_host_self (), &tv); + now.tv_sec = tv.seconds; + now.tv_usec = tv.microseconds; + } elapsed = now; subtract_timeval (&elapsed, &_hurd_itimer_started); remaining = _hurd_itimerval.it_value; diff --git a/sysdeps/mach/hurd/times.c b/sysdeps/mach/hurd/times.c index 3aac803..56a0062 100644 --- a/sysdeps/mach/hurd/times.c +++ b/sysdeps/mach/hurd/times.c @@ -42,7 +42,7 @@ __times (struct tms *tms) struct task_basic_info bi; struct task_thread_times_info tti; mach_msg_type_number_t count; - union { time_value_t tvt; struct timeval tv; } now; + time_value_t now; error_t err; count = TASK_BASIC_INFO_COUNT; @@ -65,10 +65,9 @@ __times (struct tms *tms) /* XXX This can't be implemented until getrusage(RUSAGE_CHILDREN) can be. */ tms->tms_cutime = tms->tms_cstime = 0; - if (__gettimeofday (&now.tv, NULL) < 0) - return -1; + __host_get_time (__mach_host_self (), &now); - return (clock_from_time_value (&now.tvt) + return (clock_from_time_value (&now) - clock_from_time_value (&bi.creation_time)); } weak_alias (__times, times) diff --git a/sysdeps/mach/nanosleep.c b/sysdeps/mach/nanosleep.c index 555251f..b60a217 100644 --- a/sysdeps/mach/nanosleep.c +++ b/sysdeps/mach/nanosleep.c @@ -18,16 +18,26 @@ #include <errno.h> #include <mach.h> -#include <sys/time.h> #include <time.h> #include <unistd.h> +# define timespec_sub(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ + (result)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec; \ + if ((result)->tv_nsec < 0) { \ + --(result)->tv_sec; \ + (result)->tv_nsec += 1000000000; \ + } \ + } while (0) + int __libc_nanosleep (const struct timespec *requested_time, - struct timespec *remaining) + struct timespec *remaining) { mach_port_t recv; - struct timeval before, after; + struct timespec before; + error_t err; if (requested_time->tv_sec < 0 || ! valid_nanoseconds (requested_time->tv_nsec)) @@ -42,20 +52,20 @@ __libc_nanosleep (const struct timespec *requested_time, recv = __mach_reply_port (); - if (remaining && __gettimeofday (&before, NULL) < 0) - return -1; - error_t err = __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT, - 0, 0, recv, ms, MACH_PORT_NULL); + if (remaining != 0) + __clock_gettime (CLOCK_REALTIME, &before); + + err = __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT, + 0, 0, recv, ms, MACH_PORT_NULL); __mach_port_destroy (mach_task_self (), recv); if (err == EMACH_RCV_INTERRUPTED) { - if (remaining && __gettimeofday (&after, NULL) >= 0) + if (remaining != 0) { - struct timeval req_time, elapsed, rem; - TIMESPEC_TO_TIMEVAL (&req_time, requested_time); - timersub (&after, &before, &elapsed); - timersub (&req_time, &elapsed, &rem); - TIMEVAL_TO_TIMESPEC (&rem, remaining); + struct timespec after, elapsed; + __clock_gettime (CLOCK_REALTIME, &after); + timespec_sub (&after, &before, &elapsed); + timespec_sub (requested_time, &elapsed, remaining); } errno = EINTR; diff --git a/sysdeps/mach/usleep.c b/sysdeps/mach/usleep.c index 3b79857..578540d 100644 --- a/sysdeps/mach/usleep.c +++ b/sysdeps/mach/usleep.c @@ -25,17 +25,12 @@ int usleep (useconds_t useconds) { mach_port_t recv; - struct timeval before, after; recv = __mach_reply_port (); - if (__gettimeofday (&before, NULL) < 0) - return -1; (void) __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT, 0, 0, recv, (useconds + 999) / 1000, MACH_PORT_NULL); __mach_port_destroy (mach_task_self (), recv); - if (__gettimeofday (&after, NULL) < 0) - return -1; return 0; } diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c index a248472..692c336 100644 --- a/sysdeps/posix/tempname.c +++ b/sysdeps/posix/tempname.c @@ -50,7 +50,7 @@ #include <string.h> #include <fcntl.h> -#include <sys/time.h> +#include <time.h> #include <stdint.h> #include <unistd.h> @@ -63,7 +63,6 @@ # define struct_stat64 struct stat # define __gen_tempname gen_tempname # define __getpid getpid -# define __gettimeofday gettimeofday # define __mkdir mkdir # define __open open # define __lxstat64(version, file, buf) lstat (file, buf) @@ -76,9 +75,9 @@ # else # define RANDOM_BITS(Var) \ { \ - struct timeval tv; \ - __gettimeofday (&tv, NULL); \ - (Var) = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \ + struct timespec ts; \ + clock_gettime (CLOCK_REALTIME, &ts); \ + (Var) = ((uint64_t) tv.tv_nsec << 16) ^ tv.tv_sec; \ } #endif diff --git a/sysdeps/posix/timespec_get.c b/sysdeps/posix/timespec_get.c index 1fc18ac..e3146da 100644 --- a/sysdeps/posix/timespec_get.c +++ b/sysdeps/posix/timespec_get.c @@ -23,16 +23,10 @@ int timespec_get (struct timespec *ts, int base) { - switch (base) + if (base == TIME_UTC) { - case TIME_UTC: - if (__clock_gettime (CLOCK_REALTIME, ts) < 0) - return 0; - break; - - default: - return 0; + __clock_gettime (CLOCK_REALTIME, ts); + return base; } - - return base; + return 0; } diff --git a/sysdeps/pthread/aio_misc.c b/sysdeps/pthread/aio_misc.c index 6ff0132..65b4b1a 100644 --- a/sysdeps/pthread/aio_misc.c +++ b/sysdeps/pthread/aio_misc.c @@ -614,13 +614,13 @@ handle_fildes_io (void *arg) something to arrive in it. */ if (runp == NULL && optim.aio_idle_time >= 0) { - struct timeval now; + struct timespec now; struct timespec wakeup_time; ++idle_thread_count; - __gettimeofday (&now, NULL); + __clock_gettime (CLOCK_REALTIME, &now); wakeup_time.tv_sec = now.tv_sec + optim.aio_idle_time; - wakeup_time.tv_nsec = now.tv_usec * 1000; + wakeup_time.tv_nsec = now.tv_nsec; if (wakeup_time.tv_nsec >= 1000000000) { wakeup_time.tv_nsec -= 1000000000; diff --git a/sysdeps/pthread/aio_suspend.c b/sysdeps/pthread/aio_suspend.c index ad654e1..bb324a5 100644 --- a/sysdeps/pthread/aio_suspend.c +++ b/sysdeps/pthread/aio_suspend.c @@ -183,11 +183,11 @@ aio_suspend (const struct aiocb *const list[], int nent, { /* We have to convert the relative timeout value into an absolute time value with pthread_cond_timedwait expects. */ - struct timeval now; + struct timespec now; struct timespec abstime; - __gettimeofday (&now, NULL); - abstime.tv_nsec = timeout->tv_nsec + now.tv_usec * 1000; + __clock_gettime (CLOCK_REALTIME, &now); + abstime.tv_nsec = timeout->tv_nsec + now.tv_nsec; abstime.tv_sec = timeout->tv_sec + now.tv_sec; if (abstime.tv_nsec >= 1000000000) { diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh index b49e6b6..fe24bbc 100644 --- a/sysdeps/unix/make-syscalls.sh +++ b/sysdeps/unix/make-syscalls.sh @@ -27,7 +27,7 @@ # n: scalar buffer length (e.g., 3rd arg to read) # N: pointer to value/return scalar buffer length (e.g., 6th arg to recvfrom) # p: non-NULL pointer to typed object (e.g., any non-void* arg) -# P: optionally-NULL pointer to typed object (e.g., 2nd argument to gettimeofday) +# P: optionally-NULL pointer to typed object (e.g., 3rd argument to sigaction) # s: non-NULL string (e.g., 1st arg to open) # S: optionally-NULL string (e.g., 1st arg to acct) # v: vararg scalar (e.g., optional 3rd arg to open) |