summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_time.c
diff options
context:
space:
mode:
authorotto <otto@openbsd.org>2006-10-30 20:19:33 +0000
committerotto <otto@openbsd.org>2006-10-30 20:19:33 +0000
commit17f73788f4b90223b05bd58e4618ff240d795f9c (patch)
tree074f5ff8f822e71d589530dc11b1c4ea844e49c5 /sys/kern/kern_time.c
parentFix dynamic tuning of the radio sensitivity I broke when moving from (diff)
downloadwireguard-openbsd-17f73788f4b90223b05bd58e4618ff240d795f9c.tar.xz
wireguard-openbsd-17f73788f4b90223b05bd58e4618ff240d795f9c.zip
Timecounter based implementation of adjfreq(2). Largely from art@
Tested by various using not (yet) committed amd64 timecounter code. ok deraadt@
Diffstat (limited to 'sys/kern/kern_time.c')
-rw-r--r--sys/kern/kern_time.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c
index 3f1e10b57dd..a0933e65577 100644
--- a/sys/kern/kern_time.c
+++ b/sys/kern/kern_time.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_time.c,v 1.59 2006/06/29 19:52:47 kettenis Exp $ */
+/* $OpenBSD: kern_time.c,v 1.60 2006/10/30 20:19:33 otto Exp $ */
/* $NetBSD: kern_time.c,v 1.20 1996/02/18 11:57:06 fvdl Exp $ */
/*
@@ -389,9 +389,17 @@ sys_adjfreq(struct proc *p, void *v, register_t *retval)
}
#else
if (SCARG(uap, oldfreq)) {
- f = 0;
- if ((error = copyout((void *)&f, (void *)SCARG(uap, oldfreq),
- sizeof(int64_t))))
+ if ((error = tc_adjfreq(&f, NULL)) != 0)
+ return (error);
+ if ((error = copyout(&f, SCARG(uap, oldfreq), sizeof(f))) != 0)
+ return (error);
+ }
+ if (SCARG(uap, freq)) {
+ if ((error = suser(p, 0)))
+ return (error);
+ if ((error = copyin(SCARG(uap, freq), &f, sizeof(f))) != 0)
+ return (error);
+ if ((error = tc_adjfreq(NULL, &f)) != 0)
return (error);
}
#endif