diff options
-rw-r--r-- | ChangeLog | 23 | ||||
-rw-r--r-- | nptl/ChangeLog | 8 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c | 53 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/clock_getcpuclockid.c | 56 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/clock_getres.c | 86 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/clock_gettime.c | 94 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/clock_settime.c | 54 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/kernel-features.h | 3 |
8 files changed, 54 insertions, 323 deletions
diff --git a/ChangeLog b/ChangeLog index bd896ba6cb..bb5de85029 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,26 @@ +2012-09-01 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/kernel-features.h + (__ASSUME_POSIX_CPU_TIMERS): Remove. + * sysdeps/unix/sysv/linux/clock_getcpuclockid.c + [__NR_clock_getres]: Make code unconditional. + [!__ASSUME_POSIX_CPU_TIMERS]: Remoce conditional code. + (clock_getcpuclockid): Remove code left unreachable by removal of + conditionals. + * sysdeps/unix/sysv/linux/clock_getres.c [__NR_clock_getres]: Make + code unconditional. + [__ASSUME_POSIX_CPU_TIMERS]: Likewise. + [!__ASSUME_POSIX_CPU_TIMERS]: Remove conditional code. + * sysdeps/unix/sysv/linux/clock_gettime.c [__NR_clock_gettime]: + Make code unconditional. + [__ASSUME_POSIX_CPU_TIMERS]: Likewise. + [!__ASSUME_POSIX_CPU_TIMERS]: Remove conditional code. + * sysdeps/unix/sysv/linux/clock_settime.c + [__ASSUME_POSIX_CPU_TIMERS <= 0 && __NR_clock_settime]: Remove + conditional code. + [__ASSUME_POSIX_CPU_TIMERS]: Make code unconditional. + [!__ASSUME_POSIX_CPU_TIMERS]: Remove conditional code. + 2012-08-29 H.J. Lu <hongjiu.lu@intel.com> [BZ #14476] diff --git a/nptl/ChangeLog b/nptl/ChangeLog index f59c3d720e..f4b7ff358f 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,11 @@ +2012-09-01 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/pthread_getcpuclockid.c + [!__ASSUME_POSIX_CPU_TIMERS]: Remove conditional code. + [__NR_clock_getres]: Make code unconditional. + (pthread_getcpuclockid): Remove code left unreachable by removal + of conditionals. + 2012-08-31 Joseph Myers <joseph@codesourcery.com> [BZ #14532] diff --git a/nptl/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c b/nptl/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c index 7d7287b4b8..368f2c4605 100644 --- a/nptl/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c +++ b/nptl/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c @@ -24,10 +24,6 @@ #include <kernel-posix-cpu-timers.h> -#if !(__ASSUME_POSIX_CPU_TIMERS > 0) -int __libc_missing_posix_cpu_timers attribute_hidden; -#endif - int pthread_getcpuclockid (threadid, clockid) pthread_t threadid; @@ -40,55 +36,10 @@ pthread_getcpuclockid (threadid, clockid) /* Not a valid thread handle. */ return ESRCH; -#ifdef __NR_clock_getres - /* The clockid_t value is a simple computation from the TID. - But we do a clock_getres call to validate it if we aren't - yet sure we have the kernel support. */ + /* The clockid_t value is a simple computation from the TID. */ const clockid_t tidclock = MAKE_THREAD_CPUCLOCK (pd->tid, CPUCLOCK_SCHED); -# if !(__ASSUME_POSIX_CPU_TIMERS > 0) - if (!__libc_missing_posix_cpu_timers) - { - INTERNAL_SYSCALL_DECL (err); - int r = INTERNAL_SYSCALL (clock_getres, err, 2, tidclock, NULL); - if (!INTERNAL_SYSCALL_ERROR_P (r, err)) -# endif - { - *clockid = tidclock; - return 0; - } - -# if !(__ASSUME_POSIX_CPU_TIMERS > 0) - if (INTERNAL_SYSCALL_ERRNO (r, err) == EINVAL) - { - /* The kernel doesn't support these clocks at all. */ - __libc_missing_posix_cpu_timers = 1; - } - else - return INTERNAL_SYSCALL_ERRNO (r, err); - } -# endif -#endif - -#ifdef CLOCK_THREAD_CPUTIME_ID - /* We need to store the thread ID in the CLOCKID variable together - with a number identifying the clock. We reserve the low 3 bits - for the clock ID and the rest for the thread ID. This is - problematic if the thread ID is too large. But 29 bits should be - fine. - - If some day more clock IDs are needed the ID part can be - enlarged. The IDs are entirely internal. */ - if (pd->tid >= 1 << (8 * sizeof (*clockid) - CLOCK_IDFIELD_SIZE)) - return ERANGE; - - /* Store the number. */ - *clockid = CLOCK_THREAD_CPUTIME_ID | (pd->tid << CLOCK_IDFIELD_SIZE); - + *clockid = tidclock; return 0; -#else - /* We don't have a timer for that. */ - return ENOENT; -#endif } diff --git a/sysdeps/unix/sysv/linux/clock_getcpuclockid.c b/sysdeps/unix/sysv/linux/clock_getcpuclockid.c index 1cfdf3489b..8700354a92 100644 --- a/sysdeps/unix/sysv/linux/clock_getcpuclockid.c +++ b/sysdeps/unix/sysv/linux/clock_getcpuclockid.c @@ -29,60 +29,24 @@ int clock_getcpuclockid (pid_t pid, clockid_t *clock_id) { -#ifdef __NR_clock_getres /* The clockid_t value is a simple computation from the PID. But we do a clock_getres call to validate it. */ const clockid_t pidclock = MAKE_PROCESS_CPUCLOCK (pid, CPUCLOCK_SCHED); -# if !(__ASSUME_POSIX_CPU_TIMERS > 0) - extern int __libc_missing_posix_cpu_timers attribute_hidden; - if (!__libc_missing_posix_cpu_timers) -# endif + INTERNAL_SYSCALL_DECL (err); + int r = INTERNAL_SYSCALL (clock_getres, err, 2, pidclock, NULL); + if (!INTERNAL_SYSCALL_ERROR_P (r, err)) { - INTERNAL_SYSCALL_DECL (err); - int r = INTERNAL_SYSCALL (clock_getres, err, 2, pidclock, NULL); - if (!INTERNAL_SYSCALL_ERROR_P (r, err)) - { - *clock_id = pidclock; - return 0; - } - - if (INTERNAL_SYSCALL_ERRNO (r, err) == EINVAL) - { -# if !(__ASSUME_POSIX_CPU_TIMERS > 0) - if (pidclock == MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED) - || INTERNAL_SYSCALL_ERROR_P (INTERNAL_SYSCALL - (clock_getres, err, 2, - MAKE_PROCESS_CPUCLOCK - (0, CPUCLOCK_SCHED), NULL), - err)) - /* The kernel doesn't support these clocks at all. */ - __libc_missing_posix_cpu_timers = 1; - else -# endif - /* The clock_getres system call checked the PID for us. */ - return ESRCH; - } - else - return INTERNAL_SYSCALL_ERRNO (r, err); + *clock_id = pidclock; + return 0; } -#endif - - /* We don't allow any process ID but our own. */ - if (pid != 0 && pid != getpid ()) - return EPERM; -#ifdef CLOCK_PROCESS_CPUTIME_ID - if (HAS_CPUCLOCK) + if (INTERNAL_SYSCALL_ERRNO (r, err) == EINVAL) { - /* Store the number. */ - *clock_id = CLOCK_PROCESS_CPUTIME_ID; - - return 0; + /* The clock_getres system call checked the PID for us. */ + return ESRCH; } -#endif - - /* We don't have a timer for that. */ - return ENOENT; + else + return INTERNAL_SYSCALL_ERRNO (r, err); } diff --git a/sysdeps/unix/sysv/linux/clock_getres.c b/sysdeps/unix/sysv/linux/clock_getres.c index 2bada33b40..1e87dd9a8d 100644 --- a/sysdeps/unix/sysv/linux/clock_getres.c +++ b/sysdeps/unix/sysv/linux/clock_getres.c @@ -46,89 +46,11 @@ case CLOCK_MONOTONIC_COARSE: \ SYSCALL_GETRES -#ifdef __NR_clock_getres /* We handled the REALTIME clock here. */ -# define HANDLED_REALTIME 1 -# define HANDLED_CPUTIME 1 +#define HANDLED_REALTIME 1 +#define HANDLED_CPUTIME 1 -# if __ASSUME_POSIX_CPU_TIMERS > 0 - -# define SYSDEP_GETRES_CPU SYSCALL_GETRES -# define SYSDEP_GETRES_CPUTIME /* Default catches them too. */ - -# else - -extern int __libc_missing_posix_cpu_timers attribute_hidden; - -static int -maybe_syscall_getres_cpu (clockid_t clock_id, struct timespec *res) -{ - int e = EINVAL; - - if (!__libc_missing_posix_cpu_timers) - { - INTERNAL_SYSCALL_DECL (err); - int r = INTERNAL_VSYSCALL (clock_getres, err, 2, clock_id, res); - if (!INTERNAL_SYSCALL_ERROR_P (r, err)) - return 0; - - e = INTERNAL_SYSCALL_ERRNO (r, err); - if (e == EINVAL) - { - /* Check whether the kernel supports CPU clocks at all. - If not, record it for the future. */ - r = INTERNAL_VSYSCALL (clock_getres, err, 2, - MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), - NULL); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - __libc_missing_posix_cpu_timers = 1; - } - } - - return e; -} - -# define SYSDEP_GETRES_CPU \ - retval = maybe_syscall_getres_cpu (clock_id, res); \ - if (retval == 0) \ - break; \ - if (retval != EINVAL || !__libc_missing_posix_cpu_timers) \ - { \ - __set_errno (retval); \ - retval = -1; \ - break; \ - } \ - retval = -1 /* Otherwise continue on to the HP_TIMING version. */; - -static inline int -maybe_syscall_getres_cputime (clockid_t clock_id, struct timespec *res) -{ - return maybe_syscall_getres_cpu - (clock_id == CLOCK_THREAD_CPUTIME_ID - ? MAKE_THREAD_CPUCLOCK (0, CPUCLOCK_SCHED) - : MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), - res); -} - -# define SYSDEP_GETRES_CPUTIME \ - case CLOCK_PROCESS_CPUTIME_ID: \ - case CLOCK_THREAD_CPUTIME_ID: \ - retval = maybe_syscall_getres_cputime (clock_id, res); \ - if (retval == 0) \ - break; \ - if (retval != EINVAL || !__libc_missing_posix_cpu_timers) \ - { \ - __set_errno (retval); \ - retval = -1; \ - break; \ - } \ - retval = hp_timing_getres (res); \ - break; -# if !HP_TIMING_AVAIL -# define hp_timing_getres(res) (__set_errno (EINVAL), -1) -# endif - -# endif -#endif +#define SYSDEP_GETRES_CPU SYSCALL_GETRES +#define SYSDEP_GETRES_CPUTIME /* Default catches them too. */ #include <sysdeps/posix/clock_getres.c> diff --git a/sysdeps/unix/sysv/linux/clock_gettime.c b/sysdeps/unix/sysv/linux/clock_gettime.c index e333d8d9e8..05dfb9d099 100644 --- a/sysdeps/unix/sysv/linux/clock_gettime.c +++ b/sysdeps/unix/sysv/linux/clock_gettime.c @@ -49,99 +49,13 @@ retval = SYSCALL_GETTIME (clock_id, tp); \ break -#ifdef __NR_clock_gettime /* We handled the REALTIME clock here. */ -# define HANDLED_REALTIME 1 -# define HANDLED_CPUTIME 1 +#define HANDLED_REALTIME 1 +#define HANDLED_CPUTIME 1 -# if __ASSUME_POSIX_CPU_TIMERS > 0 - -# define SYSDEP_GETTIME_CPU(clock_id, tp) \ +#define SYSDEP_GETTIME_CPU(clock_id, tp) \ retval = SYSCALL_GETTIME (clock_id, tp); \ break -# define SYSDEP_GETTIME_CPUTIME /* Default catches them too. */ - -# else - -int __libc_missing_posix_cpu_timers attribute_hidden; - -static int -maybe_syscall_gettime_cpu (clockid_t clock_id, struct timespec *tp) -{ - int e = EINVAL; - - if (!__libc_missing_posix_cpu_timers) - { - INTERNAL_SYSCALL_DECL (err); - int r = INTERNAL_GETTIME (clock_id, tp); - if (!INTERNAL_SYSCALL_ERROR_P (r, err)) - return 0; - - e = INTERNAL_SYSCALL_ERRNO (r, err); - if (e == EINVAL) - { -# ifdef HAVE_CLOCK_GETRES_VSYSCALL - /* Check whether the kernel supports CPU clocks at all. - If not, record it for the future. */ - r = INTERNAL_VSYSCALL (clock_getres, err, 2, - MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), - NULL); -# else - /* Check whether the kernel supports CPU clocks at all. - If not, record it for the future. */ - r = INTERNAL_SYSCALL (clock_getres, err, 2, - MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), - NULL); -# endif - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - __libc_missing_posix_cpu_timers = 1; - } - } - - return e; -} - -# define SYSDEP_GETTIME_CPU(clock_id, tp) \ - retval = maybe_syscall_gettime_cpu (clock_id, tp); \ - if (retval == 0) \ - break; \ - if (retval != EINVAL || !__libc_missing_posix_cpu_timers) \ - { \ - __set_errno (retval); \ - retval = -1; \ - break; \ - } \ - retval = -1 /* Otherwise continue on to the HP_TIMING version. */; - -static inline int -maybe_syscall_gettime_cputime (clockid_t clock_id, struct timespec *tp) -{ - return maybe_syscall_gettime_cpu - (clock_id == CLOCK_THREAD_CPUTIME_ID - ? MAKE_THREAD_CPUCLOCK (0, CPUCLOCK_SCHED) - : MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), - tp); -} - -# define SYSDEP_GETTIME_CPUTIME \ - case CLOCK_PROCESS_CPUTIME_ID: \ - case CLOCK_THREAD_CPUTIME_ID: \ - retval = maybe_syscall_gettime_cputime (clock_id, tp); \ - if (retval == 0) \ - break; \ - if (retval != EINVAL || !__libc_missing_posix_cpu_timers) \ - { \ - __set_errno (retval); \ - retval = -1; \ - break; \ - } \ - retval = hp_timing_gettime (clock_id, tp); \ - break -# if !HP_TIMING_AVAIL -# define hp_timing_gettime(clock_id, tp) (__set_errno (EINVAL), -1) -# endif - -# endif -#endif +#define SYSDEP_GETTIME_CPUTIME /* Default catches them too. */ #include <sysdeps/unix/clock_gettime.c> diff --git a/sysdeps/unix/sysv/linux/clock_settime.c b/sysdeps/unix/sysv/linux/clock_settime.c index f75ceca249..fde662177b 100644 --- a/sysdeps/unix/sysv/linux/clock_settime.c +++ b/sysdeps/unix/sysv/linux/clock_settime.c @@ -31,38 +31,6 @@ # include <bits/libc-vdso.h> #endif -#if __ASSUME_POSIX_CPU_TIMERS <= 0 && defined __NR_clock_settime -extern int __libc_missing_posix_cpu_timers attribute_hidden; - -static int -maybe_syscall_settime_cpu (clockid_t clock_id, const struct timespec *tp) -{ - int e = EINVAL; - - if (!__libc_missing_posix_cpu_timers) - { - INTERNAL_SYSCALL_DECL (err); - int r = INTERNAL_SYSCALL (clock_settime, err, 2, clock_id, tp); - if (!INTERNAL_SYSCALL_ERROR_P (r, err)) - return 0; - - e = INTERNAL_SYSCALL_ERRNO (r, err); - if (e == EINVAL) - { - /* Check whether the kernel supports CPU clocks at all. - If not, record it for the future. */ - r = INTERNAL_VSYSCALL (clock_getres, err, 2, - MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), - NULL); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - __libc_missing_posix_cpu_timers = 1; - } - } - - return e; -} -#endif - /* The REALTIME clock is definitely supported in the kernel. */ #define SYSDEP_SETTIME \ @@ -70,27 +38,11 @@ maybe_syscall_settime_cpu (clockid_t clock_id, const struct timespec *tp) retval = INLINE_SYSCALL (clock_settime, 2, clock_id, tp); \ break -#ifdef __NR_clock_settime /* We handled the REALTIME clock here. */ -# define HANDLED_REALTIME 1 -#endif +#define HANDLED_REALTIME 1 -#if __ASSUME_POSIX_CPU_TIMERS > 0 -# define HANDLED_CPUTIME 1 -# define SYSDEP_SETTIME_CPU \ +#define HANDLED_CPUTIME 1 +#define SYSDEP_SETTIME_CPU \ retval = INLINE_SYSCALL (clock_settime, 2, clock_id, tp) -#elif defined __NR_clock_settime -# define SYSDEP_SETTIME_CPU \ - retval = maybe_syscall_settime_cpu (clock_id, tp); \ - if (retval == 0) \ - break; \ - if (retval != EINVAL || !__libc_missing_posix_cpu_timers) \ - { \ - __set_errno (retval); \ - retval = -1; \ - break; \ - } \ - do { } while (0) -#endif #include <sysdeps/unix/clock_settime.c> diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 33fca5c4f6..61bf32d1b2 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -57,9 +57,6 @@ MIPS n32). */ #define __ASSUME_GETDENTS64_SYSCALL 1 -/* Beginning with 2.6.12 the clock and timer supports CPU clocks. */ -#define __ASSUME_POSIX_CPU_TIMERS 1 - /* The statfs64 syscalls are available in 2.5.74 (but not for alpha). */ #define __ASSUME_STATFS64 1 |