aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_time.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2013-07-20 13:39:41 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2013-07-20 13:39:41 +0000
commitd31e4b3a5875901c606b5b95829a425e8b3fb645 (patch)
treed12367b3f2f85d553f4b7f85302bd00bec301df0 /sys/kern/kern_time.c
parent88a95b1f25b60b94acb513c9186cb5c9262a170e (diff)
downloadsrc-d31e4b3a5875901c606b5b95829a425e8b3fb645.tar.gz
src-d31e4b3a5875901c606b5b95829a425e8b3fb645.zip
id_t is 64bit, provide the compat32 wrapper for clock_getcpuclockid2(2).
Reported and tested by: Petr Salinger <Petr.Salinger@seznam.cz> PR: threads/180652 Sponsored by: The FreeBSD Foundation
Notes
Notes: svn path=/head/; revision=253494
Diffstat (limited to 'sys/kern/kern_time.c')
-rw-r--r--sys/kern/kern_time.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c
index 9e0cc0687785..6b908a095d47 100644
--- a/sys/kern/kern_time.c
+++ b/sys/kern/kern_time.c
@@ -183,38 +183,46 @@ int
sys_clock_getcpuclockid2(struct thread *td, struct clock_getcpuclockid2_args *uap)
{
clockid_t clk_id;
+ int error;
+
+ error = kern_clock_getcpuclockid2(td, uap->id, uap->which, &clk_id);
+ if (error == 0)
+ error = copyout(&clk_id, uap->clock_id, sizeof(clockid_t));
+ return (error);
+}
+
+int
+kern_clock_getcpuclockid2(struct thread *td, id_t id, int which,
+ clockid_t *clk_id)
+{
struct proc *p;
pid_t pid;
lwpid_t tid;
int error;
- switch(uap->which) {
+ switch (which) {
case CPUCLOCK_WHICH_PID:
- if (uap->id != 0) {
- p = pfind(uap->id);
+ if (id != 0) {
+ p = pfind(id);
if (p == NULL)
return (ESRCH);
error = p_cansee(td, p);
PROC_UNLOCK(p);
- if (error)
+ if (error != 0)
return (error);
- pid = uap->id;
+ pid = id;
} else {
pid = td->td_proc->p_pid;
}
- clk_id = MAKE_PROCESS_CPUCLOCK(pid);
- break;
+ *clk_id = MAKE_PROCESS_CPUCLOCK(pid);
+ return (0);
case CPUCLOCK_WHICH_TID:
- if (uap->id == 0)
- tid = td->td_tid;
- else
- tid = uap->id;
- clk_id = MAKE_THREAD_CPUCLOCK(tid);
- break;
+ tid = id == 0 ? td->td_tid : id;
+ *clk_id = MAKE_THREAD_CPUCLOCK(tid);
+ return (0);
default:
return (EINVAL);
}
- return (copyout(&clk_id, uap->clock_id, sizeof(clockid_t)));
}
#ifndef _SYS_SYSPROTO_H_