Make ntp, pmc, reboot, sysarch, time syscalls MPSAFE.
This commit is contained in:
parent
45e89afb6f
commit
a2249ef75c
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: plcom.c,v 1.25 2008/01/05 12:40:34 ad Exp $ */
|
||||
/* $NetBSD: plcom.c,v 1.26 2008/04/21 12:56:30 ad Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2001 ARM Ltd
|
||||
@ -101,7 +101,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: plcom.c,v 1.25 2008/01/05 12:40:34 ad Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: plcom.c,v 1.26 2008/04/21 12:56:30 ad Exp $");
|
||||
|
||||
#include "opt_plcom.h"
|
||||
#include "opt_ddb.h"
|
||||
@ -557,8 +557,10 @@ plcom_shutdown(struct plcom_softc *sc)
|
||||
plcom_break(sc, 0);
|
||||
|
||||
/* Turn off PPS capture on last close. */
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
sc->sc_ppsmask = 0;
|
||||
sc->ppsparam.mode = 0;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
|
||||
/*
|
||||
* Hang up if necessary. Wait a bit, so the other side has time to
|
||||
@ -659,8 +661,11 @@ plcomopen(dev_t dev, int flag, int mode, struct lwp *l)
|
||||
sc->sc_msr = bus_space_read_1(sc->sc_iot, sc->sc_ioh, plcom_fr);
|
||||
|
||||
/* Clear PPS capture state on first open. */
|
||||
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
sc->sc_ppsmask = 0;
|
||||
sc->ppsparam.mode = 0;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
|
||||
PLCOM_UNLOCK(sc);
|
||||
splx(s2);
|
||||
@ -889,7 +894,9 @@ plcomioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
case PPS_IOC_GETPARAMS: {
|
||||
pps_params_t *pp;
|
||||
pp = (pps_params_t *)data;
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
*pp = sc->ppsparam;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -897,8 +904,10 @@ plcomioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
pps_params_t *pp;
|
||||
int mode;
|
||||
pp = (pps_params_t *)data;
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
if (pp->mode & ~ppscap) {
|
||||
error = EINVAL;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
break;
|
||||
}
|
||||
sc->ppsparam = *pp;
|
||||
@ -943,6 +952,7 @@ plcomioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -953,7 +963,9 @@ plcomioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
case PPS_IOC_FETCH: {
|
||||
pps_info_t *pi;
|
||||
pi = (pps_info_t *)data;
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
*pi = sc->ppsinfo;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -963,6 +975,7 @@ plcomioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
* rising edge as the on-the-second signal.
|
||||
* The old API has no way to specify PPS polarity.
|
||||
*/
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
sc->sc_ppsmask = MSR_DCD;
|
||||
#ifndef PPS_TRAILING_EDGE
|
||||
sc->sc_ppsassert = MSR_DCD;
|
||||
@ -975,6 +988,7 @@ plcomioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
TIMESPEC_TO_TIMEVAL((struct timeval *)data,
|
||||
&sc->ppsinfo.clear_timestamp);
|
||||
#endif
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1813,6 +1827,7 @@ plcomintr(void *arg)
|
||||
*/
|
||||
if (delta & sc->sc_ppsmask) {
|
||||
struct timeval tv;
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
if ((msr & sc->sc_ppsmask) == sc->sc_ppsassert) {
|
||||
/* XXX nanotime() */
|
||||
microtime(&tv);
|
||||
@ -1849,6 +1864,7 @@ plcomintr(void *arg)
|
||||
sc->ppsinfo.clear_sequence++;
|
||||
sc->ppsinfo.current_mode = sc->ppsparam.mode;
|
||||
}
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: sys_machdep.c,v 1.11 2008/01/28 19:57:43 ad Exp $ */
|
||||
/* $NetBSD: sys_machdep.c,v 1.12 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2007 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.11 2008/01/28 19:57:43 ad Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.12 2008/04/21 12:56:31 ad Exp $");
|
||||
|
||||
#include "opt_compat_netbsd.h"
|
||||
#include "opt_mtrr.h"
|
||||
@ -585,7 +585,9 @@ x86_get_mtrr(struct lwp *l, void *args, register_t *retval)
|
||||
if (error != 0)
|
||||
return error;
|
||||
|
||||
KERNEL_LOCK(1, NULL);
|
||||
error = mtrr_get(ua.mtrrp, &n, l->l_proc, MTRR_GETSET_USER);
|
||||
KERNEL_UNLOCK_ONE(NULL);
|
||||
|
||||
copyout(&n, ua.n, sizeof (int));
|
||||
|
||||
@ -618,9 +620,11 @@ x86_set_mtrr(struct lwp *l, void *args, register_t *retval)
|
||||
if (error != 0)
|
||||
return error;
|
||||
|
||||
KERNEL_LOCK(1, NULL);
|
||||
error = mtrr_set(ua.mtrrp, &n, l->l_proc, MTRR_GETSET_USER);
|
||||
if (n != 0)
|
||||
mtrr_commit();
|
||||
KERNEL_UNLOCK_ONE(NULL);
|
||||
|
||||
copyout(&n, ua.n, sizeof n);
|
||||
|
||||
@ -744,15 +748,21 @@ sys_sysarch(struct lwp *l, const struct sys_sysarch_args *uap, register_t *retva
|
||||
|
||||
#ifdef PERFCTRS
|
||||
case X86_PMC_INFO:
|
||||
KERNEL_LOCK(1, NULL);
|
||||
error = pmc_info(l, SCARG(uap, parms), retval);
|
||||
KERNEL_UNLOCK_ONE(NULL);
|
||||
break;
|
||||
|
||||
case X86_PMC_STARTSTOP:
|
||||
KERNEL_LOCK(1, NULL);
|
||||
error = pmc_startstop(l, SCARG(uap, parms), retval);
|
||||
KERNEL_UNLOCK_ONE(NULL);
|
||||
break;
|
||||
|
||||
case X86_PMC_READ:
|
||||
KERNEL_LOCK(1, NULL);
|
||||
error = pmc_read(l, SCARG(uap, parms), retval);
|
||||
KERNEL_UNLOCK_ONE(NULL);
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: com.c,v 1.278 2008/04/11 12:45:08 tsutsui Exp $ */
|
||||
/* $NetBSD: com.c,v 1.279 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 1999, 2004, 2008 The NetBSD Foundation, Inc.
|
||||
@ -73,7 +73,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.278 2008/04/11 12:45:08 tsutsui Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.279 2008/04/21 12:56:31 ad Exp $");
|
||||
|
||||
#include "opt_com.h"
|
||||
#include "opt_ddb.h"
|
||||
@ -788,9 +788,11 @@ comopen(dev_t dev, int flag, int mode, struct lwp *l)
|
||||
sc->sc_msr = CSR_READ_1(&sc->sc_regs, COM_REG_MSR);
|
||||
|
||||
/* Clear PPS capture state on first open. */
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
memset(&sc->sc_pps_state, 0, sizeof(sc->sc_pps_state));
|
||||
sc->sc_pps_state.ppscap = PPS_CAPTUREASSERT | PPS_CAPTURECLEAR;
|
||||
pps_init(&sc->sc_pps_state);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
|
||||
mutex_spin_exit(&sc->sc_lock);
|
||||
|
||||
@ -1032,10 +1034,13 @@ comioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
#ifdef PPS_SYNC
|
||||
case PPS_IOC_KCBIND:
|
||||
#endif
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
error = pps_ioctl(cmd, data, &sc->sc_pps_state);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
break;
|
||||
|
||||
case TIOCDCDTIMESTAMP: /* XXX old, overloaded API used by xntpd v3 */
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
#ifndef PPS_TRAILING_EDGE
|
||||
TIMESPEC_TO_TIMEVAL((struct timeval *)data,
|
||||
&sc->sc_pps_state.ppsinfo.assert_timestamp);
|
||||
@ -1043,6 +1048,7 @@ comioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
TIMESPEC_TO_TIMEVAL((struct timeval *)data,
|
||||
&sc->sc_pps_state.ppsinfo.clear_timestamp);
|
||||
#endif
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1908,11 +1914,13 @@ again: do {
|
||||
sc->sc_msr = msr;
|
||||
if ((sc->sc_pps_state.ppsparam.mode & PPS_CAPTUREBOTH) &&
|
||||
(delta & MSR_DCD)) {
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
pps_capture(&sc->sc_pps_state);
|
||||
pps_event(&sc->sc_pps_state,
|
||||
(msr & MSR_DCD) ?
|
||||
PPS_CAPTUREASSERT :
|
||||
PPS_CAPTURECLEAR);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: z8530tty.c,v 1.122 2008/03/29 19:15:36 tsutsui Exp $ */
|
||||
/* $NetBSD: z8530tty.c,v 1.123 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999
|
||||
@ -137,7 +137,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: z8530tty.c,v 1.122 2008/03/29 19:15:36 tsutsui Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: z8530tty.c,v 1.123 2008/04/21 12:56:31 ad Exp $");
|
||||
|
||||
#include "opt_kgdb.h"
|
||||
#include "opt_ntp.h"
|
||||
@ -600,11 +600,13 @@ zsopen(dev_t dev, int flags, int mode, struct lwp *l)
|
||||
SET(cs->cs_preg[1], ZSWR1_RIE | ZSWR1_SIE);
|
||||
|
||||
/* Clear PPS capture state on first open. */
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
zst->zst_ppsmask = 0;
|
||||
memset(&zst->zst_pps_state, 0, sizeof(zst->zst_pps_state));
|
||||
zst->zst_pps_state.ppscap =
|
||||
PPS_CAPTUREASSERT | PPS_CAPTURECLEAR;
|
||||
pps_init(&zst->zst_pps_state);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
|
||||
mutex_spin_exit(&cs->cs_lock);
|
||||
|
||||
@ -821,11 +823,13 @@ zsioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
#ifdef PPS_SYNC
|
||||
case PPS_IOC_KCBIND:
|
||||
#endif
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
error = pps_ioctl(cmd, data, &zst->zst_pps_state);
|
||||
if (zst->zst_pps_state.ppsparam.mode & PPS_CAPTUREBOTH)
|
||||
zst->zst_ppsmask = ZSRR0_DCD;
|
||||
else
|
||||
zst->zst_ppsmask = 0;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
break;
|
||||
|
||||
case TIOCDCDTIMESTAMP: /* XXX old, overloaded API used by xntpd v3 */
|
||||
@ -833,6 +837,7 @@ zsioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
#ifndef PPS_TRAILING_EDGE
|
||||
TIMESPEC_TO_TIMEVAL((struct timeval *)data,
|
||||
&zst->zst_pps_state.ppsinfo.assert_timestamp);
|
||||
@ -840,6 +845,7 @@ zsioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
||||
TIMESPEC_TO_TIMEVAL((struct timeval *)data,
|
||||
&zst->zst_pps_state.ppsinfo.clear_timestamp);
|
||||
#endif
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
/*
|
||||
* Now update interrupts.
|
||||
*/
|
||||
@ -1484,11 +1490,13 @@ zstty_stint(struct zs_chanstate *cs, int force)
|
||||
if (ISSET(delta, zst->zst_ppsmask)) {
|
||||
if (zst->zst_pps_state.ppsparam.mode &
|
||||
PPS_CAPTUREBOTH) {
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
pps_capture(&zst->zst_pps_state);
|
||||
pps_event(&zst->zst_pps_state,
|
||||
(ISSET(cs->cs_rr0, zst->zst_ppsmask))
|
||||
? PPS_CAPTUREASSERT
|
||||
: PPS_CAPTURECLEAR);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pps_ppbus.c,v 1.12 2008/04/16 09:39:01 cegger Exp $ */
|
||||
/* $NetBSD: pps_ppbus.c,v 1.13 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*
|
||||
* ported to timecounters by Frank Kardel 2006
|
||||
@ -29,7 +29,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: pps_ppbus.c,v 1.12 2008/04/16 09:39:01 cegger Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pps_ppbus.c,v 1.13 2008/04/21 12:56:31 ad Exp $");
|
||||
|
||||
#include "opt_ntp.h"
|
||||
|
||||
@ -122,11 +122,14 @@ ppsopen(dev_t dev, int flags, int fmt, struct lwp *l)
|
||||
ppbus_set_mode(sc->ppbus, PPBUS_PS2, 0);
|
||||
ppbus_wctr(sc->ppbus, IRQENABLE | PCD | nINIT | SELECTIN);
|
||||
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
memset((void *)&sc->pps_state, 0, sizeof(sc->pps_state));
|
||||
sc->pps_state.ppscap = PPS_CAPTUREASSERT;
|
||||
pps_init(&sc->pps_state);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
|
||||
sc->busy = 1;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -137,7 +140,9 @@ ppsclose(dev_t dev, int flags, int fmt, struct lwp *l)
|
||||
device_t ppbus = sc->ppbus;
|
||||
|
||||
sc->busy = 0;
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
sc->pps_state.ppsparam.mode = 0;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
|
||||
ppbus_wdtr(ppbus, 0);
|
||||
ppbus_wctr(ppbus, 0);
|
||||
@ -154,18 +159,18 @@ ppsintr(void *arg)
|
||||
struct pps_softc *sc = arg;
|
||||
device_t ppbus = sc->ppbus;
|
||||
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
pps_capture(&sc->pps_state);
|
||||
|
||||
if (!(ppbus_rstr(ppbus) & nACK))
|
||||
if (!(ppbus_rstr(ppbus) & nACK)) {
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
return;
|
||||
|
||||
}
|
||||
if (sc->pps_state.ppsparam.mode & PPS_ECHOASSERT)
|
||||
ppbus_wctr(ppbus, IRQENABLE | AUTOFEED);
|
||||
|
||||
pps_event(&sc->pps_state, PPS_CAPTUREASSERT);
|
||||
|
||||
if (sc->pps_state.ppsparam.mode & PPS_ECHOASSERT)
|
||||
ppbus_wctr(ppbus, IRQENABLE);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -184,7 +189,9 @@ ppsioctl(dev_t dev, u_long cmd, void *data, int flags, struct lwp *l)
|
||||
#ifdef PPS_SYNC
|
||||
case PPS_IOC_KCBIND:
|
||||
#endif
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
error = pps_ioctl(cmd, data, &sc->pps_state);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -1,4 +1,37 @@
|
||||
/* $NetBSD: kern_ntptime.c,v 1.47 2008/02/27 19:55:59 matt Exp $ */
|
||||
/* $NetBSD: kern_ntptime.c,v 1.48 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2008 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the NetBSD
|
||||
* Foundation, Inc. and its contributors.
|
||||
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*-
|
||||
***********************************************************************
|
||||
@ -34,7 +67,7 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/sys/kern/kern_ntptime.c,v 1.59 2005/05/28 14:34:41 rwatson Exp $"); */
|
||||
__KERNEL_RCSID(0, "$NetBSD: kern_ntptime.c,v 1.47 2008/02/27 19:55:59 matt Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: kern_ntptime.c,v 1.48 2008/04/21 12:56:31 ad Exp $");
|
||||
|
||||
#include "opt_ntp.h"
|
||||
#include "opt_compat_netbsd.h"
|
||||
@ -46,16 +79,15 @@ __KERNEL_RCSID(0, "$NetBSD: kern_ntptime.c,v 1.47 2008/02/27 19:55:59 matt Exp $
|
||||
#include <sys/proc.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/timex.h>
|
||||
#include <sys/vnode.h>
|
||||
#include <sys/kauth.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/syscallargs.h>
|
||||
#include <sys/cpu.h>
|
||||
|
||||
#ifdef COMPAT_30
|
||||
#include <compat/sys/timex.h>
|
||||
#endif
|
||||
#include <sys/vnode.h>
|
||||
#include <sys/kauth.h>
|
||||
|
||||
#include <sys/mount.h>
|
||||
#include <sys/syscallargs.h>
|
||||
|
||||
#include <sys/cpu.h>
|
||||
|
||||
/*
|
||||
* Single-precision macros for 64-bit machines
|
||||
@ -215,11 +247,14 @@ static void hardupdate(long offset);
|
||||
void
|
||||
ntp_gettime(struct ntptimeval *ntv)
|
||||
{
|
||||
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
nanotime(&ntv->time);
|
||||
ntv->maxerror = time_maxerror;
|
||||
ntv->esterror = time_esterror;
|
||||
ntv->tai = time_tai;
|
||||
ntv->time_state = time_state;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
@ -258,7 +293,6 @@ ntp_adjtime1(struct timex *ntv)
|
||||
{
|
||||
long freq;
|
||||
int modes;
|
||||
int s;
|
||||
|
||||
/*
|
||||
* Update selected clock variables - only the superuser can
|
||||
@ -269,11 +303,11 @@ ntp_adjtime1(struct timex *ntv)
|
||||
* the STA_PLL bit in the status word is cleared, the state and
|
||||
* status words are reset to the initial values at boot.
|
||||
*/
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
modes = ntv->modes;
|
||||
if (modes != 0)
|
||||
/* We need to save the system time during shutdown */
|
||||
time_adjusted |= 2;
|
||||
s = splclock();
|
||||
if (modes & MOD_MAXERROR)
|
||||
time_maxerror = ntv->maxerror;
|
||||
if (modes & MOD_ESTERROR)
|
||||
@ -374,7 +408,7 @@ ntp_adjtime1(struct timex *ntv)
|
||||
ntv->jitcnt = pps_jitcnt;
|
||||
ntv->stbcnt = pps_stbcnt;
|
||||
#endif /* PPS_SYNC */
|
||||
splx(s);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
}
|
||||
#endif /* NTP */
|
||||
|
||||
@ -392,6 +426,8 @@ ntp_update_second(int64_t *adjustment, time_t *newsec)
|
||||
int tickrate;
|
||||
l_fp ftemp; /* 32/64-bit temporary */
|
||||
|
||||
KASSERT(mutex_owned(&timecounter_lock));
|
||||
|
||||
#ifdef NTP
|
||||
|
||||
/*
|
||||
@ -584,6 +620,8 @@ hardupdate(long offset)
|
||||
long mtemp;
|
||||
l_fp ftemp;
|
||||
|
||||
KASSERT(mutex_owned(&timecounter_lock));
|
||||
|
||||
/*
|
||||
* Select how the phase is to be controlled and from which
|
||||
* source. If the PPS signal is present and enabled to
|
||||
@ -666,6 +704,8 @@ hardpps(struct timespec *tsp, /* time at PPS */
|
||||
long u_sec, u_nsec, v_nsec; /* temps */
|
||||
l_fp ftemp;
|
||||
|
||||
KASSERT(mutex_owned(&timecounter_lock));
|
||||
|
||||
/*
|
||||
* The signal is first processed by a range gate and frequency
|
||||
* discriminator. The range gate rejects noise spikes outside
|
||||
@ -849,6 +889,8 @@ hardpps(struct timespec *tsp, /* time at PPS */
|
||||
int
|
||||
ntp_timestatus(void)
|
||||
{
|
||||
int rv;
|
||||
|
||||
/*
|
||||
* Status word error decode. If any of these conditions
|
||||
* occur, an error is returned, instead of the status
|
||||
@ -858,6 +900,7 @@ ntp_timestatus(void)
|
||||
*
|
||||
* Hardware or software error
|
||||
*/
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
if ((time_status & (STA_UNSYNC | STA_CLOCKERR)) ||
|
||||
|
||||
/*
|
||||
@ -880,9 +923,12 @@ ntp_timestatus(void)
|
||||
*/
|
||||
(time_status & STA_PPSFREQ &&
|
||||
time_status & (STA_PPSWANDER | STA_PPSERROR)))
|
||||
return (TIME_ERROR);
|
||||
rv = TIME_ERROR;
|
||||
else
|
||||
return (time_state);
|
||||
rv = time_state;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
|
@ -1,4 +1,37 @@
|
||||
/* $NetBSD: kern_tc.c,v 1.32 2008/02/10 13:56:17 ad Exp $ */
|
||||
/* $NetBSD: kern_tc.c,v 1.33 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2008 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the NetBSD
|
||||
* Foundation, Inc. and its contributors.
|
||||
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*-
|
||||
* ----------------------------------------------------------------------------
|
||||
@ -11,7 +44,7 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/sys/kern/kern_tc.c,v 1.166 2005/09/19 22:16:31 andre Exp $"); */
|
||||
__KERNEL_RCSID(0, "$NetBSD: kern_tc.c,v 1.32 2008/02/10 13:56:17 ad Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: kern_tc.c,v 1.33 2008/04/21 12:56:31 ad Exp $");
|
||||
|
||||
#include "opt_ntp.h"
|
||||
|
||||
@ -99,7 +132,7 @@ static struct bintime timebasebin;
|
||||
static int timestepwarnings;
|
||||
|
||||
extern kmutex_t time_lock;
|
||||
static kmutex_t tc_windup_lock;
|
||||
kmutex_t timecounter_lock;
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
SYSCTL_INT(_kern_timecounter, OID_AUTO, stepwarnings, CTLFLAG_RW,
|
||||
@ -448,7 +481,7 @@ tc_init(struct timecounter *tc)
|
||||
}
|
||||
|
||||
mutex_enter(&time_lock);
|
||||
mutex_spin_enter(&tc_windup_lock);
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
tc->tc_next = timecounters;
|
||||
timecounters = tc;
|
||||
/*
|
||||
@ -464,7 +497,7 @@ tc_init(struct timecounter *tc)
|
||||
timecounter = tc;
|
||||
tc_windup();
|
||||
}
|
||||
mutex_spin_exit(&tc_windup_lock);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
mutex_exit(&time_lock);
|
||||
}
|
||||
|
||||
@ -502,12 +535,12 @@ tc_detach(struct timecounter *target)
|
||||
else if (tc->tc_frequency > best->tc_frequency)
|
||||
best = tc;
|
||||
}
|
||||
mutex_spin_enter(&tc_windup_lock);
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
(void)best->tc_get_timecount(best);
|
||||
(void)best->tc_get_timecount(best);
|
||||
timecounter = best;
|
||||
tc_windup();
|
||||
mutex_spin_exit(&tc_windup_lock);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
out:
|
||||
mutex_exit(&time_lock);
|
||||
return rc;
|
||||
@ -531,7 +564,7 @@ tc_setclock(struct timespec *ts)
|
||||
struct timespec ts2;
|
||||
struct bintime bt, bt2;
|
||||
|
||||
mutex_spin_enter(&tc_windup_lock);
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
TC_COUNT(nsetclock);
|
||||
binuptime(&bt2);
|
||||
timespec2bintime(ts, &bt);
|
||||
@ -539,7 +572,7 @@ tc_setclock(struct timespec *ts)
|
||||
bintime_add(&bt2, &timebasebin);
|
||||
timebasebin = bt;
|
||||
tc_windup();
|
||||
mutex_spin_exit(&tc_windup_lock);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
|
||||
if (timestepwarnings) {
|
||||
bintime2timespec(&bt2, &ts2);
|
||||
@ -564,7 +597,7 @@ tc_windup(void)
|
||||
int i, s_update;
|
||||
time_t t;
|
||||
|
||||
KASSERT(mutex_owned(&tc_windup_lock));
|
||||
KASSERT(mutex_owned(&timecounter_lock));
|
||||
|
||||
s_update = 0;
|
||||
|
||||
@ -714,6 +747,8 @@ pps_ioctl(u_long cmd, void *data, struct pps_state *pps)
|
||||
int *epi;
|
||||
#endif
|
||||
|
||||
KASSERT(mutex_owned(&timecounter_lock));
|
||||
|
||||
KASSERT(pps != NULL); /* XXX ("NULL pps pointer in pps_ioctl") */
|
||||
switch (cmd) {
|
||||
case PPS_IOC_CREATE:
|
||||
@ -758,6 +793,9 @@ pps_ioctl(u_long cmd, void *data, struct pps_state *pps)
|
||||
void
|
||||
pps_init(struct pps_state *pps)
|
||||
{
|
||||
|
||||
KASSERT(mutex_owned(&timecounter_lock));
|
||||
|
||||
pps->ppscap |= PPS_TSFMT_TSPEC;
|
||||
if (pps->ppscap & PPS_CAPTUREASSERT)
|
||||
pps->ppscap |= PPS_OFFSETASSERT;
|
||||
@ -770,7 +808,9 @@ pps_capture(struct pps_state *pps)
|
||||
{
|
||||
struct timehands *th;
|
||||
|
||||
KASSERT(pps != NULL); /* XXX ("NULL pps pointer in pps_capture") */
|
||||
KASSERT(mutex_owned(&timecounter_lock));
|
||||
KASSERT(pps != NULL);
|
||||
|
||||
th = timehands;
|
||||
pps->capgen = th->th_generation;
|
||||
pps->capth = th;
|
||||
@ -788,6 +828,8 @@ pps_event(struct pps_state *pps, int event)
|
||||
int foff, fhard;
|
||||
pps_seq_t *pseq;
|
||||
|
||||
KASSERT(mutex_owned(&timecounter_lock));
|
||||
|
||||
KASSERT(pps != NULL); /* XXX ("NULL pps pointer in pps_event") */
|
||||
/* If the timecounter was wound up underneath us, bail out. */
|
||||
if (pps->capgen == 0 || pps->capgen != pps->capth->th_generation)
|
||||
@ -885,9 +927,9 @@ tc_ticktock(void)
|
||||
if (++count < tc_tick)
|
||||
return;
|
||||
count = 0;
|
||||
mutex_spin_enter(&tc_windup_lock);
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
tc_windup();
|
||||
mutex_spin_exit(&tc_windup_lock);
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
}
|
||||
|
||||
void
|
||||
@ -895,7 +937,7 @@ inittimecounter(void)
|
||||
{
|
||||
u_int p;
|
||||
|
||||
mutex_init(&tc_windup_lock, MUTEX_DEFAULT, IPL_SCHED);
|
||||
mutex_init(&timecounter_lock, MUTEX_DEFAULT, IPL_SCHED);
|
||||
|
||||
/*
|
||||
* Set the initial timeout to
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: kern_time.c,v 1.142 2008/04/21 00:13:46 ad Exp $ */
|
||||
/* $NetBSD: kern_time.c,v 1.143 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2000, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
@ -68,7 +68,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.142 2008/04/21 00:13:46 ad Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.143 2008/04/21 12:56:31 ad Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/resourcevar.h>
|
||||
@ -79,15 +79,14 @@ __KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.142 2008/04/21 00:13:46 ad Exp $");
|
||||
#include <sys/signalvar.h>
|
||||
#include <sys/syslog.h>
|
||||
#include <sys/timetc.h>
|
||||
#include <sys/timex.h>
|
||||
#include <sys/kauth.h>
|
||||
|
||||
#include <sys/mount.h>
|
||||
#include <sys/syscallargs.h>
|
||||
#include <sys/cpu.h>
|
||||
|
||||
#include <uvm/uvm_extern.h>
|
||||
|
||||
#include <sys/cpu.h>
|
||||
|
||||
static void timer_intr(void *);
|
||||
static void itimerfire(struct ptimer *);
|
||||
static void itimerfree(struct ptimers *, int);
|
||||
@ -464,8 +463,10 @@ adjtime1(const struct timeval *delta, struct timeval *olddelta, struct proc *p)
|
||||
extern int64_t time_adjtime; /* in kern_ntptime.c */
|
||||
|
||||
if (olddelta) {
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
atv.tv_sec = time_adjtime / 1000000;
|
||||
atv.tv_usec = time_adjtime % 1000000;
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
if (atv.tv_usec < 0) {
|
||||
atv.tv_usec += 1000000;
|
||||
atv.tv_sec--;
|
||||
@ -480,12 +481,14 @@ adjtime1(const struct timeval *delta, struct timeval *olddelta, struct proc *p)
|
||||
if (error)
|
||||
return (error);
|
||||
|
||||
mutex_spin_enter(&timecounter_lock);
|
||||
time_adjtime = (int64_t)atv.tv_sec * 1000000 +
|
||||
atv.tv_usec;
|
||||
|
||||
if (time_adjtime)
|
||||
if (time_adjtime) {
|
||||
/* We need to save the system time during shutdown */
|
||||
time_adjusted |= 1;
|
||||
}
|
||||
mutex_spin_exit(&timecounter_lock);
|
||||
}
|
||||
|
||||
return error;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: kern_xxx.c,v 1.68 2008/01/05 12:30:47 dsl Exp $ */
|
||||
/* $NetBSD: kern_xxx.c,v 1.69 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1993
|
||||
@ -32,7 +32,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: kern_xxx.c,v 1.68 2008/01/05 12:30:47 dsl Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: kern_xxx.c,v 1.69 2008/04/21 12:56:31 ad Exp $");
|
||||
|
||||
#include "opt_syscall_debug.h"
|
||||
|
||||
@ -74,7 +74,9 @@ sys_reboot(struct lwp *l, const struct sys_reboot_args *uap, register_t *retval)
|
||||
/*
|
||||
* Not all ports use the bootstr currently.
|
||||
*/
|
||||
KERNEL_LOCK(1, NULL);
|
||||
cpu_reboot(SCARG(uap, opt), bootstr);
|
||||
KERNEL_UNLOCK_ONE(NULL);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: sys_pmc.c,v 1.9 2007/12/20 23:03:11 dsl Exp $ */
|
||||
/* $NetBSD: sys_pmc.c,v 1.10 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002 Wasabi Systems, Inc.
|
||||
@ -36,7 +36,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: sys_pmc.c,v 1.9 2007/12/20 23:03:11 dsl Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: sys_pmc.c,v 1.10 2008/04/21 12:56:31 ad Exp $");
|
||||
|
||||
#include "opt_perfctrs.h"
|
||||
|
||||
@ -73,25 +73,23 @@ sys_pmc_control(struct lwp *l, const struct sys_pmc_control_args *uap, register_
|
||||
ctr = SCARG(uap, ctr);
|
||||
operation = SCARG(uap, op);
|
||||
|
||||
KERNEL_LOCK(1, NULL);
|
||||
switch (operation) {
|
||||
case PMC_OP_START:
|
||||
if (!pmc_counter_isconfigured(l->l_proc, ctr)) {
|
||||
return ENXIO;
|
||||
error = ENXIO;
|
||||
} else if (pmc_counter_isrunning(l->l_proc, ctr)) {
|
||||
error = EINPROGRESS;
|
||||
} else {
|
||||
pmc_enable_counter(l->l_proc, ctr);
|
||||
}
|
||||
if (pmc_counter_isrunning(l->l_proc, ctr)) {
|
||||
return EINPROGRESS;
|
||||
}
|
||||
pmc_enable_counter(l->l_proc, ctr);
|
||||
break;
|
||||
case PMC_OP_STOP:
|
||||
if (!pmc_counter_isconfigured(l->l_proc, ctr)) {
|
||||
return ENXIO;
|
||||
error = ENXIO;
|
||||
} else if (pmc_counter_isrunning(l->l_proc, ctr)) {
|
||||
pmc_disable_counter(l->l_proc, ctr);
|
||||
}
|
||||
if (!pmc_counter_isrunning(l->l_proc, ctr)) {
|
||||
/* Nothing to do */
|
||||
return 0;
|
||||
}
|
||||
pmc_disable_counter(l->l_proc, ctr);
|
||||
break;
|
||||
case PMC_OP_CONFIGURE:
|
||||
args = SCARG(uap, args);
|
||||
@ -119,6 +117,7 @@ sys_pmc_control(struct lwp *l, const struct sys_pmc_control_args *uap, register_
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
KERNEL_UNLOCK_ONE(NULL);
|
||||
return error;
|
||||
#endif
|
||||
}
|
||||
@ -142,8 +141,8 @@ sys_pmc_get_info(struct lwp *l, const struct sys_pmc_get_info_args *uap, registe
|
||||
request = SCARG(uap, op);
|
||||
args = SCARG(uap, args);
|
||||
|
||||
KERNEL_LOCK(1, NULL);
|
||||
nctrs = pmc_get_num_counters();
|
||||
|
||||
switch (request) {
|
||||
case PMC_INFO_NCOUNTERS: /* args should be (int *) */
|
||||
error = copyout(&nctrs, args, sizeof(int));
|
||||
@ -159,7 +158,8 @@ sys_pmc_get_info(struct lwp *l, const struct sys_pmc_get_info_args *uap, registe
|
||||
/*FALLTHROUGH*/
|
||||
case PMC_INFO_COUNTER_VALUE:
|
||||
if (ctr < 0 || ctr >= nctrs) {
|
||||
return EINVAL;
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
error = pmc_get_counter_value(l->l_proc, ctr, flags, &val);
|
||||
if (error == 0) {
|
||||
@ -170,6 +170,7 @@ sys_pmc_get_info(struct lwp *l, const struct sys_pmc_get_info_args *uap, registe
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
KERNEL_UNLOCK_ONE(NULL);
|
||||
return error;
|
||||
#endif
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
$NetBSD: syscalls.master,v 1.198 2008/04/21 11:45:34 ad Exp $
|
||||
$NetBSD: syscalls.master,v 1.199 2008/04/21 12:56:31 ad Exp $
|
||||
|
||||
; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
|
||||
|
||||
@ -158,7 +158,7 @@
|
||||
struct sigaltstack13 *oss); } sigaltstack13
|
||||
54 STD MPSAFE { int sys_ioctl(int fd, \
|
||||
u_long com, ... void *data); }
|
||||
55 COMPAT_12 { int sys_reboot(int opt); } oreboot
|
||||
55 COMPAT_12 MPSAFE { int sys_reboot(int opt); } oreboot
|
||||
56 STD MPSAFE { int sys_revoke(const char *path); }
|
||||
57 STD MPSAFE RUMP { int sys_symlink(const char *path, \
|
||||
const char *link); }
|
||||
@ -283,7 +283,7 @@
|
||||
138 STD MPSAFE { int sys_utimes(const char *path, \
|
||||
const struct timeval *tptr); }
|
||||
139 OBSOL 4.2 sigreturn
|
||||
140 STD { int sys_adjtime(const struct timeval *delta, \
|
||||
140 STD MPSAFE { int sys_adjtime(const struct timeval *delta, \
|
||||
struct timeval *olddelta); }
|
||||
141 COMPAT_43 { int sys_getpeername(int fdes, void *asa, \
|
||||
int *alen); } ogetpeername
|
||||
@ -328,7 +328,7 @@
|
||||
163 COMPAT_09 MPSAFE { int sys_setdomainname(char *domainname, int len); } \
|
||||
osetdomainname
|
||||
164 COMPAT_09 MPSAFE { int sys_uname(struct outsname *name); } ouname
|
||||
165 STD { int sys_sysarch(int op, void *parms); }
|
||||
165 STD MPSAFE { int sys_sysarch(int op, void *parms); }
|
||||
166 UNIMPL
|
||||
167 UNIMPL
|
||||
168 UNIMPL
|
||||
@ -359,9 +359,9 @@
|
||||
174 STD MPSAFE { ssize_t sys_pwrite(int fd, const void *buf, \
|
||||
size_t nbyte, int pad, off_t offset); }
|
||||
; For some reason, ntp_gettime doesn't want to raise SIGSYS when it's excluded.
|
||||
175 COMPAT_30 { int sys_ntp_gettime(struct ntptimeval30 *ntvp); }
|
||||
175 COMPAT_30 MPSAFE { int sys_ntp_gettime(struct ntptimeval30 *ntvp); }
|
||||
#if defined(NTP) || !defined(_KERNEL)
|
||||
176 STD { int sys_ntp_adjtime(struct timex *tp); }
|
||||
176 STD MPSAFE { int sys_ntp_adjtime(struct timex *tp); }
|
||||
#else
|
||||
176 EXCL ntp_adjtime
|
||||
#endif
|
||||
@ -420,7 +420,7 @@
|
||||
206 STD MPSAFE { int sys_futimes(int fd, \
|
||||
const struct timeval *tptr); }
|
||||
207 STD MPSAFE { pid_t sys_getpgid(pid_t pid); }
|
||||
208 STD { int sys_reboot(int opt, char *bootstr); }
|
||||
208 STD MPSAFE { int sys_reboot(int opt, char *bootstr); }
|
||||
209 STD MPSAFE { int sys_poll(struct pollfd *fds, u_int nfds, \
|
||||
int timeout); }
|
||||
;
|
||||
@ -688,8 +688,8 @@
|
||||
const struct sigaction *nsa, \
|
||||
struct sigaction *osa, \
|
||||
const void *tramp, int vers); }
|
||||
341 STD { int sys_pmc_get_info(int ctr, int op, void *args); }
|
||||
342 STD { int sys_pmc_control(int ctr, int op, void *args); }
|
||||
341 STD MPSAFE { int sys_pmc_get_info(int ctr, int op, void *args); }
|
||||
342 STD MPSAFE { int sys_pmc_control(int ctr, int op, void *args); }
|
||||
343 STD MPSAFE { int sys_rasctl(void *addr, size_t len, int op); }
|
||||
344 STD MPSAFE { int sys_kqueue(void); }
|
||||
345 STD MPSAFE { int sys_kevent(int fd, \
|
||||
@ -794,7 +794,7 @@
|
||||
391 IGNORED old posix_fadvise
|
||||
392 COMPAT_30 MPSAFE { int sys___fhstat30(const struct compat_30_fhandle \
|
||||
*fhp, struct stat *sb); }
|
||||
393 STD { int sys___ntp_gettime30(struct ntptimeval *ntvp); }
|
||||
393 STD MPSAFE { int sys___ntp_gettime30(struct ntptimeval *ntvp); }
|
||||
394 STD { int sys___socket30(int domain, int type, int protocol); }
|
||||
395 STD MPSAFE { int sys___getfh30(const char *fname, void *fhp, \
|
||||
size_t *fh_size); }
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: timepps.h,v 1.17 2008/01/20 18:09:13 joerg Exp $ */
|
||||
/* $NetBSD: timepps.h,v 1.18 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Jonathan Stone
|
||||
@ -131,6 +131,10 @@ typedef struct {
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
#include <sys/mutex.h>
|
||||
|
||||
extern kmutex_t timecounter_lock;
|
||||
|
||||
struct pps_state {
|
||||
/* Capture information. */
|
||||
struct timehands *capth;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: timex.h,v 1.13 2008/01/20 18:09:13 joerg Exp $ */
|
||||
/* $NetBSD: timex.h,v 1.14 2008/04/21 12:56:31 ad Exp $ */
|
||||
|
||||
/*-
|
||||
***********************************************************************
|
||||
@ -95,13 +95,12 @@
|
||||
* STA_NANO bit in the status word. See the description below for
|
||||
* further information.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TIMEX_H_
|
||||
#define _SYS_TIMEX_H_ 1
|
||||
#define NTP_API 4 /* NTP API version */
|
||||
|
||||
#ifndef MSDOS /* Microsoft specific */
|
||||
#include <sys/syscall.h>
|
||||
#endif /* MSDOS */
|
||||
|
||||
/*
|
||||
* The following defines establish the performance envelope of the
|
||||
@ -220,30 +219,24 @@ struct timex {
|
||||
long stbcnt; /* stability limit exceeded (ro) */
|
||||
};
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__NetBSD__)
|
||||
|
||||
#ifdef _KERNEL
|
||||
#include <sys/mutex.h>
|
||||
|
||||
void ntp_update_second(int64_t *adjustment, time_t *newsec);
|
||||
#ifdef __NetBSD__
|
||||
void ntp_adjtime1(struct timex *);
|
||||
void ntp_gettime(struct ntptimeval *);
|
||||
int ntp_timestatus(void);
|
||||
#endif /* __NetBSD__ */
|
||||
|
||||
extern kmutex_t timecounter_lock;
|
||||
#else /* !_KERNEL */
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
#ifdef __NetBSD__
|
||||
#ifndef __LIBC12_SOURCE__
|
||||
int ntp_gettime(struct ntptimeval *) __RENAME(__ntp_gettime30);
|
||||
#endif
|
||||
#else
|
||||
int ntp_gettime(struct ntptimeval *);
|
||||
#endif
|
||||
int ntp_adjtime(struct timex *);
|
||||
__END_DECLS
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* __FreeBSD__ || __NetBSD__ */
|
||||
|
||||
#endif /* _SYS_TIMEX_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user