From: Alexander Bluhm Subject: Re: sysctl(2): unlock KERN_BOOTTIME To: Vitaliy Makkoveev Cc: tech@openbsd.org Date: Mon, 5 Aug 2024 19:37:04 +0200 On Mon, Aug 05, 2024 at 08:04:56PM +0300, Vitaliy Makkoveev wrote: > microboottime() and following binboottime() are mp-safe and `mb' is > local data. OK bluhm@ > Index: sys/kern/kern_sysctl.c > =================================================================== > RCS file: /cvs/src/sys/kern/kern_sysctl.c,v > diff -u -p -r1.432 kern_sysctl.c > --- sys/kern/kern_sysctl.c 5 Aug 2024 15:43:58 -0000 1.432 > +++ sys/kern/kern_sysctl.c 5 Aug 2024 17:00:11 -0000 > @@ -507,6 +507,12 @@ kern_sysctl(int *name, u_int namelen, vo > return (sysctl_rdstring(oldp, oldlenp, newp, version)); > case KERN_NUMVNODES: /* XXX numvnodes is a long */ > return (sysctl_rdint(oldp, oldlenp, newp, numvnodes)); > + case KERN_BOOTTIME: { > + struct timeval bt; > + memset(&bt, 0, sizeof bt); > + microboottime(&bt); > + return (sysctl_rdstruct(oldp, oldlenp, newp, &bt, sizeof bt)); > + } > case KERN_MBSTAT: { > extern struct cpumem *mbstat; > uint64_t counters[MBSTAT_COUNT]; > @@ -610,12 +616,6 @@ kern_sysctl_locked(int *name, u_int name > return (error); > case KERN_CLOCKRATE: > return (sysctl_clockrate(oldp, oldlenp, newp)); > - case KERN_BOOTTIME: { > - struct timeval bt; > - memset(&bt, 0, sizeof bt); > - microboottime(&bt); > - return (sysctl_rdstruct(oldp, oldlenp, newp, &bt, sizeof bt)); > - } > case KERN_MSGBUFSIZE: > case KERN_CONSBUFSIZE: { > struct msgbuf *mp;