Index: sys/compat/linux/linux_time.c =================================================================== --- sys/compat/linux/linux_time.c +++ sys/compat/linux/linux_time.c @@ -212,6 +212,12 @@ case LINUX_CLOCK_BOOTTIME: *n = CLOCK_UPTIME; break; + case LINUX_CLOCK_PROCESS_CPUTIME_ID: + *n = CLOCK_PROCESS_CPUTIME_ID; + break; + case LINUX_CLOCK_THREAD_CPUTIME_ID: + *n = CLOCK_THREAD_CPUTIME_ID; + break; case LINUX_CLOCK_MONOTONIC_RAW: case LINUX_CLOCK_REALTIME_ALARM: case LINUX_CLOCK_BOOTTIME_ALARM: @@ -252,10 +258,11 @@ struct rusage ru; struct thread *targettd; struct proc *p; - int error, clockwhich; + int error; + int clockwhich = LINUX_CPUCLOCK_SCHED; clockid_t nwhich = 0; /* XXX: GCC */ - pid_t pid; - lwpid_t tid; + pid_t pid = 0; + lwpid_t tid = 0; LIN_SDT_PROBE2(time, linux_clock_gettime, entry, args->which, args->tp); @@ -269,8 +276,10 @@ switch (nwhich) { case CLOCK_PROCESS_CPUTIME_ID: - clockwhich = LINUX_CPUCLOCK_WHICH(args->which); - pid = LINUX_CPUCLOCK_ID(args->which); + if (args->which < 0) { + clockwhich = LINUX_CPUCLOCK_WHICH(args->which); + pid = LINUX_CPUCLOCK_ID(args->which); + } if (pid == 0) { p = td->td_proc; PROC_LOCK(p); @@ -311,9 +320,11 @@ break; case CLOCK_THREAD_CPUTIME_ID: - clockwhich = LINUX_CPUCLOCK_WHICH(args->which); + if (args->which < 0) { + clockwhich = LINUX_CPUCLOCK_WHICH(args->which); + tid = LINUX_CPUCLOCK_ID(args->which); + } p = td->td_proc; - tid = LINUX_CPUCLOCK_ID(args->which); if (tid == 0) { targettd = td; PROC_LOCK(p); @@ -421,10 +432,11 @@ struct proc *p; struct timespec ts; struct l_timespec lts; - int error, clockwhich; + int error; + int clockwhich = LINUX_CPUCLOCK_SCHED; clockid_t nwhich = 0; /* XXX: GCC */ - pid_t pid; - lwpid_t tid; + pid_t pid = 0; + lwpid_t tid = 0; LIN_SDT_PROBE2(time, linux_clock_getres, entry, args->which, args->tp); @@ -442,7 +454,8 @@ */ switch (nwhich) { case CLOCK_THREAD_CPUTIME_ID: - tid = LINUX_CPUCLOCK_ID(args->which); + if (args->which < 0) + tid = LINUX_CPUCLOCK_ID(args->which); if (tid != 0) { p = td->td_proc; if (tdfind(tid, p->p_pid) == NULL) @@ -451,7 +464,8 @@ } break; case CLOCK_PROCESS_CPUTIME_ID: - pid = LINUX_CPUCLOCK_ID(args->which); + if (args->which < 0) + pid = LINUX_CPUCLOCK_ID(args->which); if (pid != 0) { error = pget(pid, PGET_CANSEE, &p); if (error != 0) @@ -470,7 +484,8 @@ switch (nwhich) { case CLOCK_THREAD_CPUTIME_ID: case CLOCK_PROCESS_CPUTIME_ID: - clockwhich = LINUX_CPUCLOCK_WHICH(args->which); + if (args->which < 0) + clockwhich = LINUX_CPUCLOCK_WHICH(args->which); switch (clockwhich) { case LINUX_CPUCLOCK_PROF: nwhich = CLOCK_PROF;