about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/clock_getcpuclockid.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/clock_getcpuclockid.c')
-rw-r--r--sysdeps/unix/sysv/linux/clock_getcpuclockid.c56
1 files changed, 10 insertions, 46 deletions
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);
 }