Module Name: src Committed By: pgoyette Date: Wed Mar 21 04:48:32 UTC 2018
Modified Files: src/sys/compat/common [pgoyette-compat]: Makefile.sysio compat_50_mod.c files.common src/sys/compat/sys [pgoyette-compat]: clockctl.h src/sys/dev [pgoyette-compat]: clockctl.c src/sys/kern [pgoyette-compat]: compat_stub.c src/sys/modules/clockctl [pgoyette-compat]: Makefile src/sys/modules/compat_50 [pgoyette-compat]: Makefile src/sys/sys [pgoyette-compat]: compat_stub.h Added Files: src/sys/compat/common [pgoyette-compat]: clockctl_50.c Log Message: Split the compat_50 code out from the dev/clockctl driver and include it in the compat_50 and compat modules. To generate a diff of this commit: cvs rdiff -u -r1.7.18.5 -r1.7.18.6 src/sys/compat/common/Makefile.sysio cvs rdiff -u -r0 -r1.1.2.1 src/sys/compat/common/clockctl_50.c cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/compat/common/compat_50_mod.c cvs rdiff -u -r1.1.2.14 -r1.1.2.15 src/sys/compat/common/files.common cvs rdiff -u -r1.4 -r1.4.16.1 src/sys/compat/sys/clockctl.h cvs rdiff -u -r1.35 -r1.35.14.1 src/sys/dev/clockctl.c cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/kern/compat_stub.c cvs rdiff -u -r1.1 -r1.1.20.1 src/sys/modules/clockctl/Makefile cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/modules/compat_50/Makefile cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/sys/compat_stub.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/common/Makefile.sysio diff -u src/sys/compat/common/Makefile.sysio:1.7.18.5 src/sys/compat/common/Makefile.sysio:1.7.18.6 --- src/sys/compat/common/Makefile.sysio:1.7.18.5 Sun Mar 18 21:41:31 2018 +++ src/sys/compat/common/Makefile.sysio Wed Mar 21 04:48:31 2018 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.sysio,v 1.7.18.5 2018/03/18 21:41:31 pgoyette Exp $ +# $NetBSD: Makefile.sysio,v 1.7.18.6 2018/03/21 04:48:31 pgoyette Exp $ # Sources for syscall and ioctl compatibility across the versions. @@ -35,7 +35,7 @@ SRCS+= vfs_syscalls_40.c uipc_syscalls_4 # Compatibility code for NetBSD 5.0 SRCS+= kern_50.c kern_time_50.c kern_select_50.c rndpseudo_50.c rtsock_50.c \ - vfs_syscalls_50.c uipc_syscalls_50.c uvm_50.c + vfs_syscalls_50.c uipc_syscalls_50.c uvm_50.c clockctl_50.c # Compatibility code for NetBSD 6.0 SRCS+= kern_sa_60.c tty_60.c kern_time_60.c kern_cpu_60.c ccd_60.c Index: src/sys/compat/common/compat_50_mod.c diff -u src/sys/compat/common/compat_50_mod.c:1.1.2.1 src/sys/compat/common/compat_50_mod.c:1.1.2.2 --- src/sys/compat/common/compat_50_mod.c:1.1.2.1 Mon Mar 19 21:54:43 2018 +++ src/sys/compat/common/compat_50_mod.c Wed Mar 21 04:48:31 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_50_mod.c,v 1.1.2.1 2018/03/19 21:54:43 pgoyette Exp $ */ +/* $NetBSD: compat_50_mod.c,v 1.1.2.2 2018/03/21 04:48:31 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: compat_50_mod.c,v 1.1.2.1 2018/03/19 21:54:43 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_50_mod.c,v 1.1.2.2 2018/03/21 04:48:31 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -48,6 +48,8 @@ __KERNEL_RCSID(0, "$NetBSD: compat_50_mo #include <sys/syscallvar.h> #include <sys/syscallargs.h> +#include <compat/sys/clockctl.h> + #include <compat/common/compat_util.h> #include <compat/common/compat_mod.h> @@ -74,6 +76,7 @@ compat_50_init(void) uvm_50_init(); if_50_init(); + clockctl_50_init(); return error; @@ -94,6 +97,7 @@ compat_50_fini(void) { int error = 0; + clockctl_50_fini(); if_50_fini(); uvm_50_fini(); @@ -125,6 +129,7 @@ compat_50_fini(void) err1: uvm_50_init(); if_50_init(); + clockctl_50_init(); return error; } Index: src/sys/compat/common/files.common diff -u src/sys/compat/common/files.common:1.1.2.14 src/sys/compat/common/files.common:1.1.2.15 --- src/sys/compat/common/files.common:1.1.2.14 Mon Mar 19 21:54:43 2018 +++ src/sys/compat/common/files.common Wed Mar 21 04:48:31 2018 @@ -1,4 +1,4 @@ -# $NetBSD: files.common,v 1.1.2.14 2018/03/19 21:54:43 pgoyette Exp $ +# $NetBSD: files.common,v 1.1.2.15 2018/03/21 04:48:31 pgoyette Exp $ # # Generic files, used by all compat options. @@ -64,6 +64,7 @@ file compat/common/rndpseudo_50.c compa file compat/common/rtsock_50.c compat_50 file compat/common/vfs_syscalls_50.c compat_50 file compat/common/uipc_syscalls_50.c compat_50 +file compat/common/clockctl_50.c compat_50 & clockctl file compat/common/uvm_50.c compat_50 # Compatibility code for NetBSD 6.0 @@ -72,7 +73,7 @@ file compat/common/kern_sa_60.c compat_ file compat/common/tty_60.c compat_60 file compat/common/kern_time_60.c compat_60 file compat/common/kern_cpu_60.c compat_60 -file compat/common/ccd_60.c compat_60 +file compat/common/ccd_60.c compat_60 & ccd # Compatibility code for NetBSD 7.0 file compat/common/compat_70_mod.c compat_70 Index: src/sys/compat/sys/clockctl.h diff -u src/sys/compat/sys/clockctl.h:1.4 src/sys/compat/sys/clockctl.h:1.4.16.1 --- src/sys/compat/sys/clockctl.h:1.4 Sun Sep 6 06:00:59 2015 +++ src/sys/compat/sys/clockctl.h Wed Mar 21 04:48:31 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: clockctl.h,v 1.4 2015/09/06 06:00:59 dholland Exp $ */ +/* $NetBSD: clockctl.h,v 1.4.16.1 2018/03/21 04:48:31 pgoyette Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -70,6 +70,9 @@ struct clockctl50_ntp_adjtime { #ifdef _KERNEL struct lwp; int compat50_clockctlioctl(dev_t, u_long, void *, int, struct lwp *); + +void clockctl_50_init(void); +void clockctl_50_fini(void); #endif #endif /* _COMPAT_SYS_CLOCKCTL_H_ */ Index: src/sys/dev/clockctl.c diff -u src/sys/dev/clockctl.c:1.35 src/sys/dev/clockctl.c:1.35.14.1 --- src/sys/dev/clockctl.c:1.35 Mon Nov 21 03:53:59 2016 +++ src/sys/dev/clockctl.c Wed Mar 21 04:48:32 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: clockctl.c,v 1.35 2016/11/21 03:53:59 rin Exp $ */ +/* $NetBSD: clockctl.c,v 1.35.14.1 2018/03/21 04:48:32 pgoyette Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.35 2016/11/21 03:53:59 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.35.14.1 2018/03/21 04:48:32 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_ntp.h" @@ -52,12 +52,12 @@ __KERNEL_RCSID(0, "$NetBSD: clockctl.c,v #include <sys/kauth.h> #include <sys/module.h> #include <sys/mutex.h> +#include <sys/compat_stub.h> #include <sys/clockctl.h> -#ifdef COMPAT_50 #include <compat/sys/clockctl.h> #include <compat/sys/time_types.h> -#endif + kmutex_t clockctl_mtx; int clockctl_refcnt; @@ -263,83 +263,10 @@ clockctlioctl( } #endif /* NTP */ default: -#ifdef COMPAT_50 - error = compat50_clockctlioctl(dev, cmd, data, flags, l); -#else - error = ENOTTY; -#endif - } - - return (error); -} - -#ifdef COMPAT_50 -int -compat50_clockctlioctl(dev_t dev, u_long cmd, void *data, int flags, - struct lwp *l) -{ - int error = 0; - const struct cdevsw *cd = cdevsw_lookup(dev); - - if (cd == NULL || cd->d_ioctl == NULL) - return ENXIO; - - switch (cmd) { - case CLOCKCTL_OSETTIMEOFDAY: { - struct timeval50 tv50; - struct timeval tv; - struct clockctl50_settimeofday *args = data; - - error = copyin(args->tv, &tv50, sizeof(tv50)); - if (error) - return (error); - timeval50_to_timeval(&tv50, &tv); - error = settimeofday1(&tv, false, args->tzp, l, false); - break; - } - case CLOCKCTL_OADJTIME: { - struct timeval atv, oldatv; - struct timeval50 atv50; - struct clockctl50_adjtime *args = data; - - if (args->delta) { - error = copyin(args->delta, &atv50, sizeof(atv50)); - if (error) - return (error); - timeval50_to_timeval(&atv50, &atv); - } - adjtime1(args->delta ? &atv : NULL, - args->olddelta ? &oldatv : NULL, l->l_proc); - if (args->olddelta) { - timeval_to_timeval50(&oldatv, &atv50); - error = copyout(&atv50, args->olddelta, sizeof(atv50)); - } - break; - } - case CLOCKCTL_OCLOCK_SETTIME: { - struct timespec50 tp50; - struct timespec tp; - struct clockctl50_clock_settime *args = data; - - error = copyin(args->tp, &tp50, sizeof(tp50)); - if (error) - return (error); - timespec50_to_timespec(&tp50, &tp); - error = clock_settime1(l->l_proc, args->clock_id, &tp, true); - break; - } -#ifdef NTP - case CLOCKCTL_ONTP_ADJTIME: { - /* The ioctl number changed but the data did not change. */ - error = (cd->d_ioctl)(dev, CLOCKCTL_NTP_ADJTIME, - data, flags, l); - break; - } -#endif - default: - error = ENOTTY; + error = (*compat_clockctl_ioctl_50)(dev, cmd, data, flags, l); + if (error == ENOSYS) + error = ENOTTY; } return (error); } -#endif Index: src/sys/kern/compat_stub.c diff -u src/sys/kern/compat_stub.c:1.1.2.1 src/sys/kern/compat_stub.c:1.1.2.2 --- src/sys/kern/compat_stub.c:1.1.2.1 Tue Mar 20 08:11:25 2018 +++ src/sys/kern/compat_stub.c Wed Mar 21 04:48:32 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_stub.c,v 1.1.2.1 2018/03/20 08:11:25 pgoyette Exp $ */ +/* $NetBSD: compat_stub.c,v 1.1.2.2 2018/03/21 04:48:32 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -50,6 +50,16 @@ void (*vec_ntp_gettime)(struct ntptimeva int (*vec_ntp_timestatus)(void) = NULL; #endif +/* + * ccd device compatability ioctl + */ int (*compat_ccd_ioctl_60)(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l, int (*f)(dev_t, u_long, void *, int, struct lwp *)) = (void *)enosys; + +/* + * clockctl device compatability ioctl + */ +int (*compat_clockctl_ioctl_50)(dev_t dev, u_long cmd, void *data, int flag, + struct lwp *l) = (void *)enosys; + Index: src/sys/modules/clockctl/Makefile diff -u src/sys/modules/clockctl/Makefile:1.1 src/sys/modules/clockctl/Makefile:1.1.20.1 --- src/sys/modules/clockctl/Makefile:1.1 Mon Dec 7 03:25:57 2015 +++ src/sys/modules/clockctl/Makefile Wed Mar 21 04:48:32 2018 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1 2015/12/07 03:25:57 pgoyette Exp $ +# $NetBSD: Makefile,v 1.1.20.1 2018/03/21 04:48:32 pgoyette Exp $ .include "../Makefile.inc" @@ -8,6 +8,4 @@ KMOD= clockctl IOCONF= clockctl.ioconf SRCS= clockctl.c -CPPFLAGS+= -DNTP -DCOMPAT_50 - .include <bsd.kmodule.mk> Index: src/sys/modules/compat_50/Makefile diff -u src/sys/modules/compat_50/Makefile:1.1.2.1 src/sys/modules/compat_50/Makefile:1.1.2.2 --- src/sys/modules/compat_50/Makefile:1.1.2.1 Mon Mar 19 21:54:43 2018 +++ src/sys/modules/compat_50/Makefile Wed Mar 21 04:48:32 2018 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1.2.1 2018/03/19 21:54:43 pgoyette Exp $ +# $NetBSD: Makefile,v 1.1.2.2 2018/03/21 04:48:32 pgoyette Exp $ .include "../Makefile.inc" @@ -11,6 +11,7 @@ CPPFLAGS+= -DCOMPAT_50 -DCOMPAT_60 -DCOM SRCS+= compat_50_mod.c SRCS+= kern_50.c kern_time_50.c kern_select_50.c SRCS+= vfs_syscalls_50.c uipc_syscalls_50.c uvm_50.c -#SRCS+= rndpseudo_50.c rtsock_50.c +SRCS+= rndpseudo_50.c clockctl_50.c +#SRCS+= rtsock_50.c .include <bsd.kmodule.mk> Index: src/sys/sys/compat_stub.h diff -u src/sys/sys/compat_stub.h:1.1.2.1 src/sys/sys/compat_stub.h:1.1.2.2 --- src/sys/sys/compat_stub.h:1.1.2.1 Tue Mar 20 08:11:26 2018 +++ src/sys/sys/compat_stub.h Wed Mar 21 04:48:32 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_stub.h,v 1.1.2.1 2018/03/20 08:11:26 pgoyette Exp $ */ +/* $NetBSD: compat_stub.h,v 1.1.2.2 2018/03/21 04:48:32 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -49,4 +49,10 @@ extern int (*vec_ntp_timestatus)(void); extern int (*compat_ccd_ioctl_60)(dev_t, u_long, void *, int, struct lwp *, int (*f)(dev_t, u_long, void *, int, struct lwp *)); +/* + * Routine vector for dev/clockctl ioctl() + */ + +extern int (*compat_clockctl_ioctl_50)(dev_t, u_long, void *, int, + struct lwp *); #endif /* _SYS_COMPAT_STUB_H */ Added files: Index: src/sys/compat/common/clockctl_50.c diff -u /dev/null src/sys/compat/common/clockctl_50.c:1.1.2.1 --- /dev/null Wed Mar 21 04:48:32 2018 +++ src/sys/compat/common/clockctl_50.c Wed Mar 21 04:48:31 2018 @@ -0,0 +1,137 @@ +/* $NetBSD: clockctl_50.c,v 1.1.2.1 2018/03/21 04:48:31 pgoyette Exp $ */ + +/*- + * Copyright (c) 2001 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Emmanuel Dreyfus. + * + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + */ + +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: clockctl_50.c,v 1.1.2.1 2018/03/21 04:48:31 pgoyette Exp $"); + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/proc.h> +#include <sys/errno.h> +#include <sys/ioctl.h> +#include <sys/device.h> +#include <sys/time.h> +#include <sys/conf.h> +#include <sys/timex.h> +#include <sys/kauth.h> +#include <sys/module.h> +#include <sys/mutex.h> +#include <sys/compat_stub.h> + +#include <sys/clockctl.h> +#include <compat/sys/clockctl.h> +#include <compat/sys/time_types.h> + +int +compat50_clockctlioctl(dev_t dev, u_long cmd, void *data, int flags, + struct lwp *l) +{ + int error = 0; + const struct cdevsw *cd = cdevsw_lookup(dev); + + if (cd == NULL || cd->d_ioctl == NULL) + return ENXIO; + + switch (cmd) { + case CLOCKCTL_OSETTIMEOFDAY: { + struct timeval50 tv50; + struct timeval tv; + struct clockctl50_settimeofday *args = data; + + error = copyin(args->tv, &tv50, sizeof(tv50)); + if (error) + return (error); + timeval50_to_timeval(&tv50, &tv); + error = settimeofday1(&tv, false, args->tzp, l, false); + break; + } + case CLOCKCTL_OADJTIME: { + struct timeval atv, oldatv; + struct timeval50 atv50; + struct clockctl50_adjtime *args = data; + + if (args->delta) { + error = copyin(args->delta, &atv50, sizeof(atv50)); + if (error) + return (error); + timeval50_to_timeval(&atv50, &atv); + } + adjtime1(args->delta ? &atv : NULL, + args->olddelta ? &oldatv : NULL, l->l_proc); + if (args->olddelta) { + timeval_to_timeval50(&oldatv, &atv50); + error = copyout(&atv50, args->olddelta, sizeof(atv50)); + } + break; + } + case CLOCKCTL_OCLOCK_SETTIME: { + struct timespec50 tp50; + struct timespec tp; + struct clockctl50_clock_settime *args = data; + + error = copyin(args->tp, &tp50, sizeof(tp50)); + if (error) + return (error); + timespec50_to_timespec(&tp50, &tp); + error = clock_settime1(l->l_proc, args->clock_id, &tp, true); + break; + } + case CLOCKCTL_ONTP_ADJTIME: { + if (vec_ntp_timestatus == NULL) { + error = ENOTTY; + break; + } + /* The ioctl number changed but the data did not change. */ + error = (cd->d_ioctl)(dev, CLOCKCTL_NTP_ADJTIME, + data, flags, l); + break; + } + default: + error = ENOTTY; + } + + return (error); +} + +void +clockctl_50_init(void) +{ + + compat_clockctl_ioctl_50 = compat50_clockctlioctl; +} + +void +clockctl_50_fini(void) +{ + + compat_clockctl_ioctl_50 = (void *)enosys; +}