| commit 38cc11daa43b11b12a7774405accee1007de1adf |
| Author: Adhemerval Zanella <adhemerval.zanella@linaro.org> |
| Date: Wed Jan 16 16:22:29 2019 +0000 |
| |
| nptl: Remove pthread_clock_gettime pthread_clock_settime |
| |
| 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 |
| |
| Conflicts: |
| nptl/pthread_clock_gettime.c |
| nptl/pthread_clock_settime.c |
| (Removal after copyright year update upstream.) |
| |
| diff --git a/elf/dl-support.c b/elf/dl-support.c |
| index c8439fcc53d126f3..ef5455b91c17ca30 100644 |
| |
| |
| @@ -127,11 +127,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; |
| @@ -312,9 +307,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 0aa1a2a19f649e16..e107bd14f9478a90 100644 |
| |
| |
| @@ -401,8 +401,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 447dce0590295c9c..d6b37b6efd3b7d78 100644 |
| |
| |
| @@ -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 d0971a97fdbe098e..5fa45b19987717e1 100644 |
| |
| |
| @@ -964,54 +964,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 9c01e1b9863b178c..c3b81d8b27839502 100644 |
| |
| |
| @@ -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 907411d5bca2af79..098bc059f4771ef2 100644 |
| |
| |
| @@ -275,9 +275,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 19efe1e35feed5be..00be8f92793e8710 100644 |
| |
| |
| @@ -406,16 +406,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 6bc75cfe3f1ff856..0000000000000000 |
| |
| |
| @@ -1,67 +0,0 @@ |
| -/* Copyright (C) 2001-2018 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 29d35c64cfa817a3..0000000000000000 |
| |
| |
| @@ -1,54 +0,0 @@ |
| -/* Copyright (C) 2001-2018 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 fe75d04113b8aa3f..f58a15cd1c7bbb6f 100644 |
| |
| |
| @@ -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 c6b7e61badbfd513..f0185ce0d16c0f69 100644 |
| |
| |
| @@ -359,11 +359,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 b72913d3baaed1d9..7bd1d70c96c229e0 100644 |
| |
| |
| @@ -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 1a9429b579cd346e..37db30f3d1e846b6 100644 |
| |
| |
| @@ -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 43228c381e6a73f1..5b0d8eb8a1a0593e 100644 |
| |
| |
| @@ -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 f19fdf7e5f310973..f3ebbe15ccc2e95e 100644 |
| |
| |
| @@ -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 97b3d6b6ab9e4581..13dd0f4b905ec631 100644 |
| |
| |
| @@ -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 9d5857e61b966b44..4f5640f67047cef6 100644 |
| |
| |
| @@ -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; |
| } |
| |