Message ID | 20190218211128.1869-1-adhemerval.zanella@linaro.org |
---|---|
State | Accepted |
Commit | 38cc11daa43b11b12a7774405accee1007de1adf |
Headers | show |
Series | [v2,1/6] nptl: Remove pthread_clock_gettime pthread_clock_settime | expand |
Ping. On 18/02/2019 18:11, Adhemerval Zanella wrote: > This patch removes CLOCK_THREAD_CPUTIME_ID and CLOCK_PROCESS_CPUTIME_ID support > from clock_gettime and clock_settime generic implementation. For Linux, kernel > already provides supports through the syscall and Hurd HTL lacks > __pthread_clock_gettime and __pthread_clock_settime internal implementation. > > As described in clock_gettime man-page [1] on 'Historical note for SMP > system', implementing CLOCK_{THREAD,PROCESS}_CPUTIME_ID with timer registers > is error-prone and susceptible to timing and accurary issues that the libc > can not deal without kernel support. > > This allows removes unused code which, however, still incur in some runtime > overhead in thread creation (the struct pthread cpuclock_offset > initialization). > > If hurd eventually wants to support them it should either either implement as > a kernel facility (or something related due its architecture) or in system > specific implementation. > > Checked on aarch64-linux-gnu, x86_64-linux-gnu, and i686-linux-gnu. I also > checked on a i686-gnu build. > > * nptl/Makefile (libpthread-routines): Remove pthread_clock_gettime and > pthread_clock_settime. > * nptl/pthreadP.h (__find_thread_by_id): Remove prototype. > * elf/dl-support.c [!HP_TIMING_NOAVAIL] (_dl_cpuclock_offset): Remove. > (_dl_non_dynamic_init): Remove _dl_cpuclock_offset setting. > * elf/rtld.c (_dl_start_final): Likewise. > * nptl/allocatestack.c (__find_thread_by_id): Remove function. > * sysdeps/generic/ldsodefs.h [!HP_TIMING_NOAVAIL] (_dl_cpuclock_offset): > Remove. > * sysdeps/mach/hurd/dl-sysdep.c [!HP_TIMING_NOAVAIL] > (_dl_cpuclock_offset): Remove. > * nptl/descr.h (struct pthread): Rename cpuclock_offset to > cpuclock_offset_ununsed. > * nptl/nptl-init.c (__pthread_initialize_minimal_internal): Remove > cpuclock_offset set. > * nptl/pthread_create.c (START_THREAD_DEFN): Likewise. > * sysdeps/nptl/fork.c (__libc_fork): Likewise. > * nptl/pthread_clock_gettime.c: Remove file. > * nptl/pthread_clock_settime.c: Likewise. > * sysdeps/unix/clock_gettime.c (hp_timing_gettime): Remove function. > [HP_TIMING_AVAIL] (realtime_gettime): Remove CLOCK_THREAD_CPUTIME_ID > and CLOCK_PROCESS_CPUTIME_ID support. > * sysdeps/unix/clock_settime.c (hp_timing_gettime): Likewise. > [HP_TIMING_AVAIL] (realtime_gettime): Likewise. > * sysdeps/posix/clock_getres.c (hp_timing_getres): Likewise. > [HP_TIMING_AVAIL] (__clock_getres): Likewise. > * sysdeps/unix/clock_nanosleep.c (CPUCLOCK_P, INVALID_CLOCK_P): > Likewise. > (__clock_nanosleep): Remove CPUCLOCK_P and INVALID_CLOCK_P usage. > > [1] http://man7.org/linux/man-pages/man2/clock_gettime.2.html > --- > elf/dl-support.c | 8 ---- > elf/rtld.c | 2 - > nptl/Makefile | 1 - > nptl/allocatestack.c | 48 ------------------------ > nptl/descr.h | 3 +- > nptl/nptl-init.c | 3 -- > nptl/pthreadP.h | 10 ----- > nptl/pthread_clock_gettime.c | 67 ---------------------------------- > nptl/pthread_clock_settime.c | 54 --------------------------- > nptl/pthread_create.c | 7 ---- > sysdeps/generic/ldsodefs.h | 5 --- > sysdeps/mach/hurd/dl-sysdep.c | 8 ---- > sysdeps/nptl/fork.c | 8 ---- > sysdeps/posix/clock_getres.c | 46 +---------------------- > sysdeps/unix/clock_gettime.c | 65 +-------------------------------- > sysdeps/unix/clock_nanosleep.c | 30 ++------------- > sysdeps/unix/clock_settime.c | 61 +------------------------------ > 17 files changed, 9 insertions(+), 417 deletions(-) > delete mode 100644 nptl/pthread_clock_gettime.c > delete mode 100644 nptl/pthread_clock_settime.c > > diff --git a/elf/dl-support.c b/elf/dl-support.c > index 42c350c75d..0a8b636d02 100644 > --- a/elf/dl-support.c > +++ b/elf/dl-support.c > @@ -129,11 +129,6 @@ void *_dl_random; > #include <dl-procruntime.c> > #include <dl-procinfo.c> > > -/* Initial value of the CPU clock. */ > -#ifndef HP_TIMING_NONAVAIL > -hp_timing_t _dl_cpuclock_offset; > -#endif > - > void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls; > > size_t _dl_pagesize = EXEC_PAGESIZE; > @@ -314,9 +309,6 @@ _dl_non_dynamic_init (void) > _dl_main_map.l_phdr = GL(dl_phdr); > _dl_main_map.l_phnum = GL(dl_phnum); > > - if (HP_SMALL_TIMING_AVAIL) > - HP_TIMING_NOW (_dl_cpuclock_offset); > - > _dl_verbose = *(getenv ("LD_WARN") ?: "") == '\0' ? 0 : 1; > > /* Set up the data structures for the system-supplied DSO early, > diff --git a/elf/rtld.c b/elf/rtld.c > index c1cc1b01f2..1f124b31fc 100644 > --- a/elf/rtld.c > +++ b/elf/rtld.c > @@ -403,8 +403,6 @@ _dl_start_final (void *arg, struct dl_start_final_info *info) > # endif > #endif > > - HP_TIMING_NOW (GL(dl_cpuclock_offset)); > - > /* Initialize the stack end variable. */ > __libc_stack_end = __builtin_frame_address (0); > > diff --git a/nptl/Makefile b/nptl/Makefile > index 5acfdcceff..f9bc5cc887 100644 > --- a/nptl/Makefile > +++ b/nptl/Makefile > @@ -109,7 +109,6 @@ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \ > pthread_once \ > old_pthread_atfork \ > pthread_getcpuclockid \ > - pthread_clock_gettime pthread_clock_settime \ > shm-directory \ > sem_init sem_destroy \ > sem_open sem_close sem_unlink \ > diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c > index d8e8570a7d..fcbc46f0d7 100644 > --- a/nptl/allocatestack.c > +++ b/nptl/allocatestack.c > @@ -963,54 +963,6 @@ __reclaim_stacks (void) > } > > > -#if HP_TIMING_AVAIL > -# undef __find_thread_by_id > -/* Find a thread given the thread ID. */ > -attribute_hidden > -struct pthread * > -__find_thread_by_id (pid_t tid) > -{ > - struct pthread *result = NULL; > - > - lll_lock (stack_cache_lock, LLL_PRIVATE); > - > - /* Iterate over the list with system-allocated threads first. */ > - list_t *runp; > - list_for_each (runp, &stack_used) > - { > - struct pthread *curp; > - > - curp = list_entry (runp, struct pthread, list); > - > - if (curp->tid == tid) > - { > - result = curp; > - goto out; > - } > - } > - > - /* Now the list with threads using user-allocated stacks. */ > - list_for_each (runp, &__stack_user) > - { > - struct pthread *curp; > - > - curp = list_entry (runp, struct pthread, list); > - > - if (curp->tid == tid) > - { > - result = curp; > - goto out; > - } > - } > - > - out: > - lll_unlock (stack_cache_lock, LLL_PRIVATE); > - > - return result; > -} > -#endif > - > - > #ifdef SIGSETXID > static void > setxid_mark_thread (struct xid_command *cmdp, struct pthread *t) > diff --git a/nptl/descr.h b/nptl/descr.h > index 4ef33ae465..cb7d4c2282 100644 > --- a/nptl/descr.h > +++ b/nptl/descr.h > @@ -343,8 +343,7 @@ struct pthread > unsigned int setxid_futex; > > #if HP_TIMING_AVAIL > - /* Offset of the CPU clock at start thread start time. */ > - hp_timing_t cpuclock_offset; > + hp_timing_t cpuclock_offset_ununsed; > #endif > > /* If the thread waits to join another one the ID of the latter is > diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c > index b5895fabf3..6691211e4e 100644 > --- a/nptl/nptl-init.c > +++ b/nptl/nptl-init.c > @@ -276,9 +276,6 @@ __pthread_initialize_minimal_internal (void) > THREAD_SETMEM (pd, user_stack, true); > if (LLL_LOCK_INITIALIZER != 0) > THREAD_SETMEM (pd, lock, LLL_LOCK_INITIALIZER); > -#if HP_TIMING_AVAIL > - THREAD_SETMEM (pd, cpuclock_offset, GL(dl_cpuclock_offset)); > -#endif > > /* Initialize the robust mutex data. */ > { > diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h > index 626bd4b096..f0facfdb7d 100644 > --- a/nptl/pthreadP.h > +++ b/nptl/pthreadP.h > @@ -401,16 +401,6 @@ extern int __pthread_multiple_threads attribute_hidden; > extern int *__libc_multiple_threads_ptr attribute_hidden; > #endif > > -/* Find a thread given its TID. */ > -extern struct pthread *__find_thread_by_id (pid_t tid) attribute_hidden > -#ifdef SHARED > -; > -#else > -weak_function; > -#define __find_thread_by_id(tid) \ > - (__find_thread_by_id ? (__find_thread_by_id) (tid) : (struct pthread *) NULL) > -#endif > - > extern void __pthread_init_static_tls (struct link_map *) attribute_hidden; > > extern size_t __pthread_get_minstack (const pthread_attr_t *attr); > diff --git a/nptl/pthread_clock_gettime.c b/nptl/pthread_clock_gettime.c > deleted file mode 100644 > index f1d9104b24..0000000000 > --- a/nptl/pthread_clock_gettime.c > +++ /dev/null > @@ -1,67 +0,0 @@ > -/* Copyright (C) 2001-2019 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public License as > - published by the Free Software Foundation; either version 2.1 of the > - License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; see the file COPYING.LIB. If > - not, see <http://www.gnu.org/licenses/>. */ > - > -#include <errno.h> > -#include <stdlib.h> > -#include <time.h> > -#include "pthreadP.h" > - > - > -#if HP_TIMING_AVAIL > -int > -__pthread_clock_gettime (clockid_t clock_id, hp_timing_t freq, > - struct timespec *tp) > -{ > - hp_timing_t tsc; > - > - /* Get the current counter. */ > - HP_TIMING_NOW (tsc); > - > - /* This is the ID of the thread we are looking for. */ > - pid_t tid = ((unsigned int) clock_id) >> CLOCK_IDFIELD_SIZE; > - > - /* Compute the offset since the start time of the process. */ > - if (tid == 0 || tid == THREAD_GETMEM (THREAD_SELF, tid)) > - /* Our own clock. */ > - tsc -= THREAD_GETMEM (THREAD_SELF, cpuclock_offset); > - else > - { > - /* This is more complicated. We have to locate the thread based > - on the ID. This means walking the list of existing > - threads. */ > - struct pthread *thread = __find_thread_by_id (tid); > - if (thread == NULL) > - { > - __set_errno (EINVAL); > - return -1; > - } > - > - /* There is a race here. The thread might terminate and the stack > - become unusable. But this is the user's problem. */ > - tsc -= thread->cpuclock_offset; > - } > - > - /* Compute the seconds. */ > - tp->tv_sec = tsc / freq; > - > - /* And the nanoseconds. This computation should be stable until > - we get machines with about 16GHz frequency. */ > - tp->tv_nsec = ((tsc % freq) * 1000000000ull) / freq; > - > - return 0; > -} > -#endif > diff --git a/nptl/pthread_clock_settime.c b/nptl/pthread_clock_settime.c > deleted file mode 100644 > index 0fe6482f78..0000000000 > --- a/nptl/pthread_clock_settime.c > +++ /dev/null > @@ -1,54 +0,0 @@ > -/* Copyright (C) 2001-2019 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public License as > - published by the Free Software Foundation; either version 2.1 of the > - License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; see the file COPYING.LIB. If > - not, see <http://www.gnu.org/licenses/>. */ > - > -#include <errno.h> > -#include <stdlib.h> > -#include <time.h> > -#include "pthreadP.h" > - > - > -#if HP_TIMING_AVAIL > -int > -__pthread_clock_settime (clockid_t clock_id, hp_timing_t offset) > -{ > - /* This is the ID of the thread we are looking for. */ > - pid_t tid = ((unsigned int) clock_id) >> CLOCK_IDFIELD_SIZE; > - > - /* Compute the offset since the start time of the process. */ > - if (tid == 0 || tid == THREAD_GETMEM (THREAD_SELF, tid)) > - /* Our own clock. */ > - THREAD_SETMEM (THREAD_SELF, cpuclock_offset, offset); > - else > - { > - /* This is more complicated. We have to locate the thread based > - on the ID. This means walking the list of existing > - threads. */ > - struct pthread *thread = __find_thread_by_id (tid); > - if (thread == NULL) > - { > - __set_errno (EINVAL); > - return -1; > - } > - > - /* There is a race here. The thread might terminate and the stack > - become unusable. But this is the user's problem. */ > - thread->cpuclock_offset = offset; > - } > - > - return 0; > -} > -#endif > diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c > index 2bd2b10727..18b7bbe765 100644 > --- a/nptl/pthread_create.c > +++ b/nptl/pthread_create.c > @@ -379,13 +379,6 @@ START_THREAD_DEFN > { > struct pthread *pd = START_THREAD_SELF; > > -#if HP_TIMING_AVAIL > - /* Remember the time when the thread was started. */ > - hp_timing_t now; > - HP_TIMING_NOW (now); > - THREAD_SETMEM (pd, cpuclock_offset, now); > -#endif > - > /* Initialize resolver state pointer. */ > __resp = &pd->res; > > diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h > index 37cab6f06b..346bbb812d 100644 > --- a/sysdeps/generic/ldsodefs.h > +++ b/sysdeps/generic/ldsodefs.h > @@ -352,11 +352,6 @@ struct rtld_global > /* The object to be initialized first. */ > EXTERN struct link_map *_dl_initfirst; > > -#if HP_SMALL_TIMING_AVAIL > - /* Start time on CPU clock. */ > - EXTERN hp_timing_t _dl_cpuclock_offset; > -#endif > - > /* Map of shared object to be profiled. */ > EXTERN struct link_map *_dl_profile_map; > > diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c > index a58338c930..72c80a8a46 100644 > --- a/sysdeps/mach/hurd/dl-sysdep.c > +++ b/sysdeps/mach/hurd/dl-sysdep.c > @@ -62,10 +62,6 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion > void *__libc_stack_end = NULL; > rtld_hidden_data_def(__libc_stack_end) > > -#if HP_TIMING_AVAIL > -hp_timing_t _dl_cpuclock_offset; > -#endif > - > /* TODO: Initialize. */ > void *_dl_random attribute_relro = NULL; > > @@ -246,10 +242,6 @@ unfmh(); /* XXX */ > /* Initialize frequently used global variable. */ > GLRO(dl_pagesize) = __getpagesize (); > > -#if HP_TIMING_AVAIL > - HP_TIMING_NOW (_dl_cpuclock_offset); > -#endif > - > fmh(); /* XXX */ > > /* See hurd/hurdstartup.c; this deals with getting information > diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c > index 14b69a6f89..3f357665bd 100644 > --- a/sysdeps/nptl/fork.c > +++ b/sysdeps/nptl/fork.c > @@ -83,14 +83,6 @@ __libc_fork (void) > if (__fork_generation_pointer != NULL) > *__fork_generation_pointer += __PTHREAD_ONCE_FORK_GEN_INCR; > > -#if HP_TIMING_AVAIL > - /* The CPU clock of the thread and process have to be set to zero. */ > - hp_timing_t now; > - HP_TIMING_NOW (now); > - THREAD_SETMEM (self, cpuclock_offset, now); > - GL(dl_cpuclock_offset) = now; > -#endif > - > #ifdef __NR_set_robust_list > /* Initialize the robust mutex list setting in the kernel which has > been reset during the fork. We do not check for errors because if > diff --git a/sysdeps/posix/clock_getres.c b/sysdeps/posix/clock_getres.c > index dac4761fcc..01024a3f55 100644 > --- a/sysdeps/posix/clock_getres.c > +++ b/sysdeps/posix/clock_getres.c > @@ -24,37 +24,6 @@ > #include <libc-internal.h> > > > -#if HP_TIMING_AVAIL > -static long int nsec; /* Clock frequency of the processor. */ > - > -static int > -hp_timing_getres (struct timespec *res) > -{ > - if (__glibc_unlikely (nsec == 0)) > - { > - hp_timing_t freq; > - > - /* This can only happen if we haven't initialized the `nsec' > - variable yet. Do this now. We don't have to protect this > - code against multiple execution since all of them should > - lead to the same result. */ > - freq = __get_clockfreq (); > - if (__glibc_unlikely (freq == 0)) > - /* Something went wrong. */ > - return -1; > - > - nsec = MAX (UINT64_C (1000000000) / freq, 1); > - } > - > - /* Fill in the values. > - The seconds are always zero (unless we have a 1Hz machine). */ > - res->tv_sec = 0; > - res->tv_nsec = nsec; > - > - return 0; > -} > -#endif > - > static inline int > realtime_getres (struct timespec *res) > { > @@ -87,21 +56,8 @@ __clock_getres (clockid_t clock_id, struct timespec *res) > break; > > default: > -#if HP_TIMING_AVAIL > - if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1)) > - == CLOCK_THREAD_CPUTIME_ID) > - retval = hp_timing_getres (res); > - else > -#endif > - __set_errno (EINVAL); > - break; > - > -#if HP_TIMING_AVAIL > - case CLOCK_PROCESS_CPUTIME_ID: > - case CLOCK_THREAD_CPUTIME_ID: > - retval = hp_timing_getres (res); > + __set_errno (EINVAL); > break; > -#endif > } > > return retval; > diff --git a/sysdeps/unix/clock_gettime.c b/sysdeps/unix/clock_gettime.c > index 33a1f3335c..10a6c96d9d 100644 > --- a/sysdeps/unix/clock_gettime.c > +++ b/sysdeps/unix/clock_gettime.c > @@ -24,57 +24,6 @@ > #include <ldsodefs.h> > > > -#if HP_TIMING_AVAIL > -/* Clock frequency of the processor. We make it a 64-bit variable > - because some jokers are already playing with processors with more > - than 4GHz. */ > -static hp_timing_t freq; > - > - > -/* This function is defined in the thread library. */ > -extern int __pthread_clock_gettime (clockid_t clock_id, hp_timing_t freq, > - struct timespec *tp) > - __attribute__ ((__weak__)); > - > -static int > -hp_timing_gettime (clockid_t clock_id, struct timespec *tp) > -{ > - hp_timing_t tsc; > - > - if (__glibc_unlikely (freq == 0)) > - { > - /* This can only happen if we haven't initialized the `freq' > - variable yet. Do this now. We don't have to protect this > - code against multiple execution since all of them should > - lead to the same result. */ > - freq = __get_clockfreq (); > - if (__glibc_unlikely (freq == 0)) > - /* Something went wrong. */ > - return -1; > - } > - > - if (clock_id != CLOCK_PROCESS_CPUTIME_ID > - && __pthread_clock_gettime != NULL) > - return __pthread_clock_gettime (clock_id, freq, tp); > - > - /* Get the current counter. */ > - HP_TIMING_NOW (tsc); > - > - /* Compute the offset since the start time of the process. */ > - tsc -= GL(dl_cpuclock_offset); > - > - /* Compute the seconds. */ > - tp->tv_sec = tsc / freq; > - > - /* And the nanoseconds. This computation should be stable until > - we get machines with about 16GHz frequency. */ > - tp->tv_nsec = ((tsc % freq) * UINT64_C (1000000000)) / freq; > - > - return 0; > -} > -#endif > - > - > static inline int > realtime_gettime (struct timespec *tp) > { > @@ -105,20 +54,8 @@ __clock_gettime (clockid_t clock_id, struct timespec *tp) > break; > > default: > -#if HP_TIMING_AVAIL > - if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1)) > - == CLOCK_THREAD_CPUTIME_ID) > - retval = hp_timing_gettime (clock_id, tp); > - else > -#endif > - __set_errno (EINVAL); > - break; > - > -#if HP_TIMING_AVAIL > - case CLOCK_PROCESS_CPUTIME_ID: > - retval = hp_timing_gettime (clock_id, tp); > + __set_errno (EINVAL); > break; > -#endif > } > > return retval; > diff --git a/sysdeps/unix/clock_nanosleep.c b/sysdeps/unix/clock_nanosleep.c > index 7722d1111c..b27608570c 100644 > --- a/sysdeps/unix/clock_nanosleep.c > +++ b/sysdeps/unix/clock_nanosleep.c > @@ -19,23 +19,8 @@ > #include <assert.h> > #include <errno.h> > #include <time.h> > -#include <hp-timing.h> > #include <sysdep-cancel.h> > > -#if HP_TIMING_AVAIL > -# define CPUCLOCK_P(clock) \ > - ((clock) == CLOCK_PROCESS_CPUTIME_ID \ > - || ((clock) & ((1 << CLOCK_IDFIELD_SIZE) - 1)) == CLOCK_THREAD_CPUTIME_ID) > -#else > -# define CPUCLOCK_P(clock) 0 > -#endif > - > -#ifndef INVALID_CLOCK_P > -# define INVALID_CLOCK_P(cl) \ > - ((cl) < CLOCK_REALTIME || (cl) > CLOCK_THREAD_CPUTIME_ID) > -#endif > - > - > /* This implementation assumes that these is only a `nanosleep' system > call. So we have to remap all other activities. */ > int > @@ -51,14 +36,7 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, > if (clock_id == CLOCK_THREAD_CPUTIME_ID) > return EINVAL; /* POSIX specifies EINVAL for this case. */ > > -#ifdef SYSDEP_NANOSLEEP > - SYSDEP_NANOSLEEP; > -#endif > - > - if (CPUCLOCK_P (clock_id)) > - return ENOTSUP; > - > - if (INVALID_CLOCK_P (clock_id)) > + if (clock_id < CLOCK_REALTIME || clock_id > CLOCK_THREAD_CPUTIME_ID) > return EINVAL; > > /* If we got an absolute time, remap it. */ > @@ -71,7 +49,7 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, > assert (sizeof (sec) >= sizeof (now.tv_sec)); > > /* Get the current time for this clock. */ > - if (__builtin_expect (__clock_gettime (clock_id, &now), 0) != 0) > + if (__clock_gettime (clock_id, &now) != 0) > return errno; > > /* Compute the difference. */ > @@ -90,12 +68,12 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, > /* Make sure we are not modifying the struct pointed to by REM. */ > rem = NULL; > } > - else if (__builtin_expect (flags, 0) != 0) > + else if (flags != 0) > return EINVAL; > else if (clock_id != CLOCK_REALTIME) > /* Not supported. */ > return ENOTSUP; > > - return __builtin_expect (__nanosleep (req, rem), 0) ? errno : 0; > + return __nanosleep (req, rem), 0 ? errno : 0; > } > weak_alias (__clock_nanosleep, clock_nanosleep) > diff --git a/sysdeps/unix/clock_settime.c b/sysdeps/unix/clock_settime.c > index dcf9ff660a..109a1ad872 100644 > --- a/sysdeps/unix/clock_settime.c > +++ b/sysdeps/unix/clock_settime.c > @@ -21,59 +21,11 @@ > #include <ldsodefs.h> > > > -#if HP_TIMING_AVAIL > -/* Clock frequency of the processor. We make it a 64-bit variable > - because some jokers are already playing with processors with more > - than 4GHz. */ > -static hp_timing_t freq; > - > - > -/* This function is defined in the thread library. */ > -extern void __pthread_clock_settime (clockid_t clock_id, hp_timing_t offset) > - __attribute__ ((__weak__)); > - > - > -static int > -hp_timing_settime (clockid_t clock_id, const struct timespec *tp) > -{ > - hp_timing_t tsc; > - hp_timing_t usertime; > - > - /* First thing is to get the current time. */ > - HP_TIMING_NOW (tsc); > - > - if (__glibc_unlikely (freq == 0)) > - { > - /* This can only happen if we haven't initialized the `freq' > - variable yet. Do this now. We don't have to protect this > - code against multiple execution since all of them should lead > - to the same result. */ > - freq = __get_clockfreq (); > - if (__glibc_unlikely (freq == 0)) > - /* Something went wrong. */ > - return -1; > - } > - > - /* Convert the user-provided time into CPU ticks. */ > - usertime = tp->tv_sec * freq + (tp->tv_nsec * freq) / 1000000000ull; > - > - /* Determine the offset and use it as the new base value. */ > - if (clock_id == CLOCK_PROCESS_CPUTIME_ID > - || __pthread_clock_settime == NULL) > - GL(dl_cpuclock_offset) = tsc - usertime; > - else > - __pthread_clock_settime (clock_id, tsc - usertime); > - > - return 0; > -} > -#endif > - > - > /* Set CLOCK to value TP. */ > int > __clock_settime (clockid_t clock_id, const struct timespec *tp) > { > - int retval; > + int retval = -1; > > /* Make sure the time cvalue is OK. */ > if (tp->tv_nsec < 0 || tp->tv_nsec >= 1000000000) > @@ -93,16 +45,7 @@ __clock_settime (clockid_t clock_id, const struct timespec *tp) > break; > > default: > -# if HP_TIMING_AVAIL > - if (CPUCLOCK_WHICH (clock_id) == CLOCK_PROCESS_CPUTIME_ID > - || CPUCLOCK_WHICH (clock_id) == CLOCK_THREAD_CPUTIME_ID) > - retval = hp_timing_settime (clock_id, tp); > - else > -# endif > - { > - __set_errno (EINVAL); > - retval = -1; > - } > + __set_errno (EINVAL); > break; > } > >
On Feb 18 2019, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > * nptl/Makefile (libpthread-routines): Remove pthread_clock_gettime and > pthread_clock_settime. > * nptl/pthreadP.h (__find_thread_by_id): Remove prototype. > * elf/dl-support.c [!HP_TIMING_NOAVAIL] (_dl_cpuclock_offset): Remove. > (_dl_non_dynamic_init): Remove _dl_cpuclock_offset setting. > * elf/rtld.c (_dl_start_final): Likewise. > * nptl/allocatestack.c (__find_thread_by_id): Remove function. > * sysdeps/generic/ldsodefs.h [!HP_TIMING_NOAVAIL] (_dl_cpuclock_offset): > Remove. > * sysdeps/mach/hurd/dl-sysdep.c [!HP_TIMING_NOAVAIL] > (_dl_cpuclock_offset): Remove. > * nptl/descr.h (struct pthread): Rename cpuclock_offset to > cpuclock_offset_ununsed. > * nptl/nptl-init.c (__pthread_initialize_minimal_internal): Remove > cpuclock_offset set. > * nptl/pthread_create.c (START_THREAD_DEFN): Likewise. > * sysdeps/nptl/fork.c (__libc_fork): Likewise. > * nptl/pthread_clock_gettime.c: Remove file. > * nptl/pthread_clock_settime.c: Likewise. > * sysdeps/unix/clock_gettime.c (hp_timing_gettime): Remove function. > [HP_TIMING_AVAIL] (realtime_gettime): Remove CLOCK_THREAD_CPUTIME_ID > and CLOCK_PROCESS_CPUTIME_ID support. > * sysdeps/unix/clock_settime.c (hp_timing_gettime): Likewise. > [HP_TIMING_AVAIL] (realtime_gettime): Likewise. > * sysdeps/posix/clock_getres.c (hp_timing_getres): Likewise. > [HP_TIMING_AVAIL] (__clock_getres): Likewise. > * sysdeps/unix/clock_nanosleep.c (CPUCLOCK_P, INVALID_CLOCK_P): > Likewise. > (__clock_nanosleep): Remove CPUCLOCK_P and INVALID_CLOCK_P usage. Ok. Andreas. -- Andreas Schwab, SUSE Labs, schwab@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different."
diff --git a/elf/dl-support.c b/elf/dl-support.c index 42c350c75d..0a8b636d02 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -129,11 +129,6 @@ void *_dl_random; #include <dl-procruntime.c> #include <dl-procinfo.c> -/* Initial value of the CPU clock. */ -#ifndef HP_TIMING_NONAVAIL -hp_timing_t _dl_cpuclock_offset; -#endif - void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls; size_t _dl_pagesize = EXEC_PAGESIZE; @@ -314,9 +309,6 @@ _dl_non_dynamic_init (void) _dl_main_map.l_phdr = GL(dl_phdr); _dl_main_map.l_phnum = GL(dl_phnum); - if (HP_SMALL_TIMING_AVAIL) - HP_TIMING_NOW (_dl_cpuclock_offset); - _dl_verbose = *(getenv ("LD_WARN") ?: "") == '\0' ? 0 : 1; /* Set up the data structures for the system-supplied DSO early, diff --git a/elf/rtld.c b/elf/rtld.c index c1cc1b01f2..1f124b31fc 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -403,8 +403,6 @@ _dl_start_final (void *arg, struct dl_start_final_info *info) # endif #endif - HP_TIMING_NOW (GL(dl_cpuclock_offset)); - /* Initialize the stack end variable. */ __libc_stack_end = __builtin_frame_address (0); diff --git a/nptl/Makefile b/nptl/Makefile index 5acfdcceff..f9bc5cc887 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -109,7 +109,6 @@ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \ pthread_once \ old_pthread_atfork \ pthread_getcpuclockid \ - pthread_clock_gettime pthread_clock_settime \ shm-directory \ sem_init sem_destroy \ sem_open sem_close sem_unlink \ diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index d8e8570a7d..fcbc46f0d7 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -963,54 +963,6 @@ __reclaim_stacks (void) } -#if HP_TIMING_AVAIL -# undef __find_thread_by_id -/* Find a thread given the thread ID. */ -attribute_hidden -struct pthread * -__find_thread_by_id (pid_t tid) -{ - struct pthread *result = NULL; - - lll_lock (stack_cache_lock, LLL_PRIVATE); - - /* Iterate over the list with system-allocated threads first. */ - list_t *runp; - list_for_each (runp, &stack_used) - { - struct pthread *curp; - - curp = list_entry (runp, struct pthread, list); - - if (curp->tid == tid) - { - result = curp; - goto out; - } - } - - /* Now the list with threads using user-allocated stacks. */ - list_for_each (runp, &__stack_user) - { - struct pthread *curp; - - curp = list_entry (runp, struct pthread, list); - - if (curp->tid == tid) - { - result = curp; - goto out; - } - } - - out: - lll_unlock (stack_cache_lock, LLL_PRIVATE); - - return result; -} -#endif - - #ifdef SIGSETXID static void setxid_mark_thread (struct xid_command *cmdp, struct pthread *t) diff --git a/nptl/descr.h b/nptl/descr.h index 4ef33ae465..cb7d4c2282 100644 --- a/nptl/descr.h +++ b/nptl/descr.h @@ -343,8 +343,7 @@ struct pthread unsigned int setxid_futex; #if HP_TIMING_AVAIL - /* Offset of the CPU clock at start thread start time. */ - hp_timing_t cpuclock_offset; + hp_timing_t cpuclock_offset_ununsed; #endif /* If the thread waits to join another one the ID of the latter is diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c index b5895fabf3..6691211e4e 100644 --- a/nptl/nptl-init.c +++ b/nptl/nptl-init.c @@ -276,9 +276,6 @@ __pthread_initialize_minimal_internal (void) THREAD_SETMEM (pd, user_stack, true); if (LLL_LOCK_INITIALIZER != 0) THREAD_SETMEM (pd, lock, LLL_LOCK_INITIALIZER); -#if HP_TIMING_AVAIL - THREAD_SETMEM (pd, cpuclock_offset, GL(dl_cpuclock_offset)); -#endif /* Initialize the robust mutex data. */ { diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h index 626bd4b096..f0facfdb7d 100644 --- a/nptl/pthreadP.h +++ b/nptl/pthreadP.h @@ -401,16 +401,6 @@ extern int __pthread_multiple_threads attribute_hidden; extern int *__libc_multiple_threads_ptr attribute_hidden; #endif -/* Find a thread given its TID. */ -extern struct pthread *__find_thread_by_id (pid_t tid) attribute_hidden -#ifdef SHARED -; -#else -weak_function; -#define __find_thread_by_id(tid) \ - (__find_thread_by_id ? (__find_thread_by_id) (tid) : (struct pthread *) NULL) -#endif - extern void __pthread_init_static_tls (struct link_map *) attribute_hidden; extern size_t __pthread_get_minstack (const pthread_attr_t *attr); diff --git a/nptl/pthread_clock_gettime.c b/nptl/pthread_clock_gettime.c deleted file mode 100644 index f1d9104b24..0000000000 --- a/nptl/pthread_clock_gettime.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2001-2019 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <stdlib.h> -#include <time.h> -#include "pthreadP.h" - - -#if HP_TIMING_AVAIL -int -__pthread_clock_gettime (clockid_t clock_id, hp_timing_t freq, - struct timespec *tp) -{ - hp_timing_t tsc; - - /* Get the current counter. */ - HP_TIMING_NOW (tsc); - - /* This is the ID of the thread we are looking for. */ - pid_t tid = ((unsigned int) clock_id) >> CLOCK_IDFIELD_SIZE; - - /* Compute the offset since the start time of the process. */ - if (tid == 0 || tid == THREAD_GETMEM (THREAD_SELF, tid)) - /* Our own clock. */ - tsc -= THREAD_GETMEM (THREAD_SELF, cpuclock_offset); - else - { - /* This is more complicated. We have to locate the thread based - on the ID. This means walking the list of existing - threads. */ - struct pthread *thread = __find_thread_by_id (tid); - if (thread == NULL) - { - __set_errno (EINVAL); - return -1; - } - - /* There is a race here. The thread might terminate and the stack - become unusable. But this is the user's problem. */ - tsc -= thread->cpuclock_offset; - } - - /* Compute the seconds. */ - tp->tv_sec = tsc / freq; - - /* And the nanoseconds. This computation should be stable until - we get machines with about 16GHz frequency. */ - tp->tv_nsec = ((tsc % freq) * 1000000000ull) / freq; - - return 0; -} -#endif diff --git a/nptl/pthread_clock_settime.c b/nptl/pthread_clock_settime.c deleted file mode 100644 index 0fe6482f78..0000000000 --- a/nptl/pthread_clock_settime.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2001-2019 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <stdlib.h> -#include <time.h> -#include "pthreadP.h" - - -#if HP_TIMING_AVAIL -int -__pthread_clock_settime (clockid_t clock_id, hp_timing_t offset) -{ - /* This is the ID of the thread we are looking for. */ - pid_t tid = ((unsigned int) clock_id) >> CLOCK_IDFIELD_SIZE; - - /* Compute the offset since the start time of the process. */ - if (tid == 0 || tid == THREAD_GETMEM (THREAD_SELF, tid)) - /* Our own clock. */ - THREAD_SETMEM (THREAD_SELF, cpuclock_offset, offset); - else - { - /* This is more complicated. We have to locate the thread based - on the ID. This means walking the list of existing - threads. */ - struct pthread *thread = __find_thread_by_id (tid); - if (thread == NULL) - { - __set_errno (EINVAL); - return -1; - } - - /* There is a race here. The thread might terminate and the stack - become unusable. But this is the user's problem. */ - thread->cpuclock_offset = offset; - } - - return 0; -} -#endif diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index 2bd2b10727..18b7bbe765 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -379,13 +379,6 @@ START_THREAD_DEFN { struct pthread *pd = START_THREAD_SELF; -#if HP_TIMING_AVAIL - /* Remember the time when the thread was started. */ - hp_timing_t now; - HP_TIMING_NOW (now); - THREAD_SETMEM (pd, cpuclock_offset, now); -#endif - /* Initialize resolver state pointer. */ __resp = &pd->res; diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 37cab6f06b..346bbb812d 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -352,11 +352,6 @@ struct rtld_global /* The object to be initialized first. */ EXTERN struct link_map *_dl_initfirst; -#if HP_SMALL_TIMING_AVAIL - /* Start time on CPU clock. */ - EXTERN hp_timing_t _dl_cpuclock_offset; -#endif - /* Map of shared object to be profiled. */ EXTERN struct link_map *_dl_profile_map; diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index a58338c930..72c80a8a46 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -62,10 +62,6 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion void *__libc_stack_end = NULL; rtld_hidden_data_def(__libc_stack_end) -#if HP_TIMING_AVAIL -hp_timing_t _dl_cpuclock_offset; -#endif - /* TODO: Initialize. */ void *_dl_random attribute_relro = NULL; @@ -246,10 +242,6 @@ unfmh(); /* XXX */ /* Initialize frequently used global variable. */ GLRO(dl_pagesize) = __getpagesize (); -#if HP_TIMING_AVAIL - HP_TIMING_NOW (_dl_cpuclock_offset); -#endif - fmh(); /* XXX */ /* See hurd/hurdstartup.c; this deals with getting information diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c index 14b69a6f89..3f357665bd 100644 --- a/sysdeps/nptl/fork.c +++ b/sysdeps/nptl/fork.c @@ -83,14 +83,6 @@ __libc_fork (void) if (__fork_generation_pointer != NULL) *__fork_generation_pointer += __PTHREAD_ONCE_FORK_GEN_INCR; -#if HP_TIMING_AVAIL - /* The CPU clock of the thread and process have to be set to zero. */ - hp_timing_t now; - HP_TIMING_NOW (now); - THREAD_SETMEM (self, cpuclock_offset, now); - GL(dl_cpuclock_offset) = now; -#endif - #ifdef __NR_set_robust_list /* Initialize the robust mutex list setting in the kernel which has been reset during the fork. We do not check for errors because if diff --git a/sysdeps/posix/clock_getres.c b/sysdeps/posix/clock_getres.c index dac4761fcc..01024a3f55 100644 --- a/sysdeps/posix/clock_getres.c +++ b/sysdeps/posix/clock_getres.c @@ -24,37 +24,6 @@ #include <libc-internal.h> -#if HP_TIMING_AVAIL -static long int nsec; /* Clock frequency of the processor. */ - -static int -hp_timing_getres (struct timespec *res) -{ - if (__glibc_unlikely (nsec == 0)) - { - hp_timing_t freq; - - /* This can only happen if we haven't initialized the `nsec' - variable yet. Do this now. We don't have to protect this - code against multiple execution since all of them should - lead to the same result. */ - freq = __get_clockfreq (); - if (__glibc_unlikely (freq == 0)) - /* Something went wrong. */ - return -1; - - nsec = MAX (UINT64_C (1000000000) / freq, 1); - } - - /* Fill in the values. - The seconds are always zero (unless we have a 1Hz machine). */ - res->tv_sec = 0; - res->tv_nsec = nsec; - - return 0; -} -#endif - static inline int realtime_getres (struct timespec *res) { @@ -87,21 +56,8 @@ __clock_getres (clockid_t clock_id, struct timespec *res) break; default: -#if HP_TIMING_AVAIL - if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1)) - == CLOCK_THREAD_CPUTIME_ID) - retval = hp_timing_getres (res); - else -#endif - __set_errno (EINVAL); - break; - -#if HP_TIMING_AVAIL - case CLOCK_PROCESS_CPUTIME_ID: - case CLOCK_THREAD_CPUTIME_ID: - retval = hp_timing_getres (res); + __set_errno (EINVAL); break; -#endif } return retval; diff --git a/sysdeps/unix/clock_gettime.c b/sysdeps/unix/clock_gettime.c index 33a1f3335c..10a6c96d9d 100644 --- a/sysdeps/unix/clock_gettime.c +++ b/sysdeps/unix/clock_gettime.c @@ -24,57 +24,6 @@ #include <ldsodefs.h> -#if HP_TIMING_AVAIL -/* Clock frequency of the processor. We make it a 64-bit variable - because some jokers are already playing with processors with more - than 4GHz. */ -static hp_timing_t freq; - - -/* This function is defined in the thread library. */ -extern int __pthread_clock_gettime (clockid_t clock_id, hp_timing_t freq, - struct timespec *tp) - __attribute__ ((__weak__)); - -static int -hp_timing_gettime (clockid_t clock_id, struct timespec *tp) -{ - hp_timing_t tsc; - - if (__glibc_unlikely (freq == 0)) - { - /* This can only happen if we haven't initialized the `freq' - variable yet. Do this now. We don't have to protect this - code against multiple execution since all of them should - lead to the same result. */ - freq = __get_clockfreq (); - if (__glibc_unlikely (freq == 0)) - /* Something went wrong. */ - return -1; - } - - if (clock_id != CLOCK_PROCESS_CPUTIME_ID - && __pthread_clock_gettime != NULL) - return __pthread_clock_gettime (clock_id, freq, tp); - - /* Get the current counter. */ - HP_TIMING_NOW (tsc); - - /* Compute the offset since the start time of the process. */ - tsc -= GL(dl_cpuclock_offset); - - /* Compute the seconds. */ - tp->tv_sec = tsc / freq; - - /* And the nanoseconds. This computation should be stable until - we get machines with about 16GHz frequency. */ - tp->tv_nsec = ((tsc % freq) * UINT64_C (1000000000)) / freq; - - return 0; -} -#endif - - static inline int realtime_gettime (struct timespec *tp) { @@ -105,20 +54,8 @@ __clock_gettime (clockid_t clock_id, struct timespec *tp) break; default: -#if HP_TIMING_AVAIL - if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1)) - == CLOCK_THREAD_CPUTIME_ID) - retval = hp_timing_gettime (clock_id, tp); - else -#endif - __set_errno (EINVAL); - break; - -#if HP_TIMING_AVAIL - case CLOCK_PROCESS_CPUTIME_ID: - retval = hp_timing_gettime (clock_id, tp); + __set_errno (EINVAL); break; -#endif } return retval; diff --git a/sysdeps/unix/clock_nanosleep.c b/sysdeps/unix/clock_nanosleep.c index 7722d1111c..b27608570c 100644 --- a/sysdeps/unix/clock_nanosleep.c +++ b/sysdeps/unix/clock_nanosleep.c @@ -19,23 +19,8 @@ #include <assert.h> #include <errno.h> #include <time.h> -#include <hp-timing.h> #include <sysdep-cancel.h> -#if HP_TIMING_AVAIL -# define CPUCLOCK_P(clock) \ - ((clock) == CLOCK_PROCESS_CPUTIME_ID \ - || ((clock) & ((1 << CLOCK_IDFIELD_SIZE) - 1)) == CLOCK_THREAD_CPUTIME_ID) -#else -# define CPUCLOCK_P(clock) 0 -#endif - -#ifndef INVALID_CLOCK_P -# define INVALID_CLOCK_P(cl) \ - ((cl) < CLOCK_REALTIME || (cl) > CLOCK_THREAD_CPUTIME_ID) -#endif - - /* This implementation assumes that these is only a `nanosleep' system call. So we have to remap all other activities. */ int @@ -51,14 +36,7 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, if (clock_id == CLOCK_THREAD_CPUTIME_ID) return EINVAL; /* POSIX specifies EINVAL for this case. */ -#ifdef SYSDEP_NANOSLEEP - SYSDEP_NANOSLEEP; -#endif - - if (CPUCLOCK_P (clock_id)) - return ENOTSUP; - - if (INVALID_CLOCK_P (clock_id)) + if (clock_id < CLOCK_REALTIME || clock_id > CLOCK_THREAD_CPUTIME_ID) return EINVAL; /* If we got an absolute time, remap it. */ @@ -71,7 +49,7 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, assert (sizeof (sec) >= sizeof (now.tv_sec)); /* Get the current time for this clock. */ - if (__builtin_expect (__clock_gettime (clock_id, &now), 0) != 0) + if (__clock_gettime (clock_id, &now) != 0) return errno; /* Compute the difference. */ @@ -90,12 +68,12 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, /* Make sure we are not modifying the struct pointed to by REM. */ rem = NULL; } - else if (__builtin_expect (flags, 0) != 0) + else if (flags != 0) return EINVAL; else if (clock_id != CLOCK_REALTIME) /* Not supported. */ return ENOTSUP; - return __builtin_expect (__nanosleep (req, rem), 0) ? errno : 0; + return __nanosleep (req, rem), 0 ? errno : 0; } weak_alias (__clock_nanosleep, clock_nanosleep) diff --git a/sysdeps/unix/clock_settime.c b/sysdeps/unix/clock_settime.c index dcf9ff660a..109a1ad872 100644 --- a/sysdeps/unix/clock_settime.c +++ b/sysdeps/unix/clock_settime.c @@ -21,59 +21,11 @@ #include <ldsodefs.h> -#if HP_TIMING_AVAIL -/* Clock frequency of the processor. We make it a 64-bit variable - because some jokers are already playing with processors with more - than 4GHz. */ -static hp_timing_t freq; - - -/* This function is defined in the thread library. */ -extern void __pthread_clock_settime (clockid_t clock_id, hp_timing_t offset) - __attribute__ ((__weak__)); - - -static int -hp_timing_settime (clockid_t clock_id, const struct timespec *tp) -{ - hp_timing_t tsc; - hp_timing_t usertime; - - /* First thing is to get the current time. */ - HP_TIMING_NOW (tsc); - - if (__glibc_unlikely (freq == 0)) - { - /* This can only happen if we haven't initialized the `freq' - variable yet. Do this now. We don't have to protect this - code against multiple execution since all of them should lead - to the same result. */ - freq = __get_clockfreq (); - if (__glibc_unlikely (freq == 0)) - /* Something went wrong. */ - return -1; - } - - /* Convert the user-provided time into CPU ticks. */ - usertime = tp->tv_sec * freq + (tp->tv_nsec * freq) / 1000000000ull; - - /* Determine the offset and use it as the new base value. */ - if (clock_id == CLOCK_PROCESS_CPUTIME_ID - || __pthread_clock_settime == NULL) - GL(dl_cpuclock_offset) = tsc - usertime; - else - __pthread_clock_settime (clock_id, tsc - usertime); - - return 0; -} -#endif - - /* Set CLOCK to value TP. */ int __clock_settime (clockid_t clock_id, const struct timespec *tp) { - int retval; + int retval = -1; /* Make sure the time cvalue is OK. */ if (tp->tv_nsec < 0 || tp->tv_nsec >= 1000000000) @@ -93,16 +45,7 @@ __clock_settime (clockid_t clock_id, const struct timespec *tp) break; default: -# if HP_TIMING_AVAIL - if (CPUCLOCK_WHICH (clock_id) == CLOCK_PROCESS_CPUTIME_ID - || CPUCLOCK_WHICH (clock_id) == CLOCK_THREAD_CPUTIME_ID) - retval = hp_timing_settime (clock_id, tp); - else -# endif - { - __set_errno (EINVAL); - retval = -1; - } + __set_errno (EINVAL); break; }