summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorcheloha <cheloha@cvs.openbsd.org>2019-05-09 20:30:23 +0000
committercheloha <cheloha@cvs.openbsd.org>2019-05-09 20:30:23 +0000
commit981fa52553b64e69aacd11d8358fc3540f1492d2 (patch)
tree65a840426318f74dfccedee05efd2fc37d14c3f7 /sys
parent802429ace9513505fe7970ec1de6a5d044a0884c (diff)
Unlock adjfreq(2), adjtime(2), clock_settime(2), and settimeofday(2).
clock_settime(2)/settimeofday(2) still need KERNEL_LOCK for a moment when resetting the RTC, as that's done periodically from a task under KERNEL_LOCK. Not quite sure how to approach that one yet. ok visa@ mpi@, "good stuff" tedu@, "please wait until after [tree] unlock" deraadt@
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/init_sysent.c10
-rw-r--r--sys/kern/kern_time.c4
-rw-r--r--sys/kern/syscalls.c2
-rw-r--r--sys/kern/syscalls.master10
4 files changed, 14 insertions, 12 deletions
diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c
index 7ffb55b3e9c..79933937915 100644
--- a/sys/kern/init_sysent.c
+++ b/sys/kern/init_sysent.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: init_sysent.c,v 1.200 2019/01/11 18:52:41 deraadt Exp $ */
+/* $OpenBSD: init_sysent.c,v 1.201 2019/05/09 20:30:22 cheloha Exp $ */
/*
* System call switch table.
@@ -168,7 +168,7 @@ struct sysent sysent[] = {
sys_vfork }, /* 66 = vfork */
{ 2, s(struct sys_gettimeofday_args), SY_NOLOCK | 0,
sys_gettimeofday }, /* 67 = gettimeofday */
- { 2, s(struct sys_settimeofday_args), 0,
+ { 2, s(struct sys_settimeofday_args), SY_NOLOCK | 0,
sys_settimeofday }, /* 68 = settimeofday */
{ 3, s(struct sys_setitimer_args), 0,
sys_setitimer }, /* 69 = setitimer */
@@ -208,7 +208,7 @@ struct sysent sysent[] = {
sys_kbind }, /* 86 = kbind */
{ 2, s(struct sys_clock_gettime_args), SY_NOLOCK | 0,
sys_clock_gettime }, /* 87 = clock_gettime */
- { 2, s(struct sys_clock_settime_args), 0,
+ { 2, s(struct sys_clock_settime_args), SY_NOLOCK | 0,
sys_clock_settime }, /* 88 = clock_settime */
{ 2, s(struct sys_clock_getres_args), SY_NOLOCK | 0,
sys_clock_getres }, /* 89 = clock_getres */
@@ -312,7 +312,7 @@ struct sysent sysent[] = {
sys_nosys }, /* 138 = obsolete t32_utimes */
{ 0, 0, 0,
sys_nosys }, /* 139 = obsolete 4.2 sigreturn */
- { 2, s(struct sys_adjtime_args), 0,
+ { 2, s(struct sys_adjtime_args), SY_NOLOCK | 0,
sys_adjtime }, /* 140 = adjtime */
{ 2, s(struct sys_getlogin_r_args), 0,
sys_getlogin_r }, /* 141 = getlogin_r */
@@ -699,7 +699,7 @@ struct sysent sysent[] = {
sys___thrsigdivert }, /* 303 = __thrsigdivert */
{ 2, s(struct sys___getcwd_args), 0,
sys___getcwd }, /* 304 = __getcwd */
- { 2, s(struct sys_adjfreq_args), 0,
+ { 2, s(struct sys_adjfreq_args), SY_NOLOCK | 0,
sys_adjfreq }, /* 305 = adjfreq */
{ 0, 0, 0,
sys_nosys }, /* 306 = obsolete getfsstat53 */
diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c
index 65d2d8021ef..f054b874623 100644
--- a/sys/kern/kern_time.c
+++ b/sys/kern/kern_time.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_time.c,v 1.114 2019/03/26 16:43:56 cheloha Exp $ */
+/* $OpenBSD: kern_time.c,v 1.115 2019/05/09 20:30:21 cheloha Exp $ */
/* $NetBSD: kern_time.c,v 1.20 1996/02/18 11:57:06 fvdl Exp $ */
/*
@@ -96,7 +96,9 @@ settime(const struct timespec *ts)
}
tc_setrealtimeclock(ts);
+ KERNEL_LOCK();
resettodr();
+ KERNEL_UNLOCK();
return (0);
}
diff --git a/sys/kern/syscalls.c b/sys/kern/syscalls.c
index 0fa2955ecf6..2acf552dfc5 100644
--- a/sys/kern/syscalls.c
+++ b/sys/kern/syscalls.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: syscalls.c,v 1.199 2019/01/11 18:52:41 deraadt Exp $ */
+/* $OpenBSD: syscalls.c,v 1.200 2019/05/09 20:30:22 cheloha Exp $ */
/*
* System call names.
diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master
index 6456e383c1d..8474448d844 100644
--- a/sys/kern/syscalls.master
+++ b/sys/kern/syscalls.master
@@ -1,4 +1,4 @@
-; $OpenBSD: syscalls.master,v 1.189 2019/01/11 18:46:30 deraadt Exp $
+; $OpenBSD: syscalls.master,v 1.190 2019/05/09 20:30:22 cheloha Exp $
; $NetBSD: syscalls.master,v 1.32 1996/04/23 10:24:21 mycroft Exp $
; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
@@ -157,7 +157,7 @@
66 STD { int sys_vfork(void); }
67 STD NOLOCK { int sys_gettimeofday(struct timeval *tp, \
struct timezone *tzp); }
-68 STD { int sys_settimeofday(const struct timeval *tv, \
+68 STD NOLOCK { int sys_settimeofday(const struct timeval *tv, \
const struct timezone *tzp); }
69 STD { int sys_setitimer(int which, \
const struct itimerval *itv, \
@@ -196,7 +196,7 @@
size_t psize, int64_t proc_cookie); }
87 STD NOLOCK { int sys_clock_gettime(clockid_t clock_id, \
struct timespec *tp); }
-88 STD { int sys_clock_settime(clockid_t clock_id, \
+88 STD NOLOCK { int sys_clock_settime(clockid_t clock_id, \
const struct timespec *tp); }
89 STD NOLOCK { int sys_clock_getres(clockid_t clock_id, \
struct timespec *tp); }
@@ -271,7 +271,7 @@
137 STD { int sys_rmdir(const char *path); }
138 OBSOL t32_utimes
139 OBSOL 4.2 sigreturn
-140 STD { int sys_adjtime(const struct timeval *delta, \
+140 STD NOLOCK { int sys_adjtime(const struct timeval *delta, \
struct timeval *olddelta); }
141 STD { int sys_getlogin_r(char *namebuf, u_int namelen); }
142 OBSOL ogethostid
@@ -526,7 +526,7 @@
303 STD { int sys___thrsigdivert(sigset_t sigmask, \
siginfo_t *info, const struct timespec *timeout); }
304 STD { int sys___getcwd(char *buf, size_t len); }
-305 STD { int sys_adjfreq(const int64_t *freq, \
+305 STD NOLOCK { int sys_adjfreq(const int64_t *freq, \
int64_t *oldfreq); }
306 OBSOL getfsstat53
307 OBSOL statfs53