Module Name: src Committed By: pgoyette Date: Wed Mar 28 04:18:25 UTC 2018
Modified Files: src/distrib/sets/lists/modules [pgoyette-compat]: mi src/sys/compat/common [pgoyette-compat]: Makefile.sysio compat_mod.c compat_mod.h files.common kern_time_30.c uipc_syscalls_30.c vfs_syscalls_30.c src/sys/dev [pgoyette-compat]: bio.c src/sys/kern [pgoyette-compat]: compat_stub.c src/sys/modules [pgoyette-compat]: Makefile src/sys/sys [pgoyette-compat]: compat_stub.h Added Files: src/sys/compat/common [pgoyette-compat]: bio_30.c compat_30_mod.c src/sys/modules/compat_30 [pgoyette-compat]: Makefile Log Message: Initial pass at a compat_30 module. Still needs some work for dev/vnd and various dev/usb/* To generate a diff of this commit: cvs rdiff -u -r1.114.2.7 -r1.114.2.8 src/distrib/sets/lists/modules/mi cvs rdiff -u -r1.7.18.16 -r1.7.18.17 src/sys/compat/common/Makefile.sysio cvs rdiff -u -r0 -r1.1.2.1 src/sys/compat/common/bio_30.c \ src/sys/compat/common/compat_30_mod.c cvs rdiff -u -r1.24.14.21 -r1.24.14.22 src/sys/compat/common/compat_mod.c cvs rdiff -u -r1.1.42.9 -r1.1.42.10 src/sys/compat/common/compat_mod.h cvs rdiff -u -r1.1.2.19 -r1.1.2.20 src/sys/compat/common/files.common cvs rdiff -u -r1.5 -r1.5.14.1 src/sys/compat/common/kern_time_30.c cvs rdiff -u -r1.3 -r1.3.96.1 src/sys/compat/common/uipc_syscalls_30.c cvs rdiff -u -r1.36 -r1.36.18.1 src/sys/compat/common/vfs_syscalls_30.c cvs rdiff -u -r1.13 -r1.13.16.1 src/sys/dev/bio.c cvs rdiff -u -r1.1.2.8 -r1.1.2.9 src/sys/kern/compat_stub.c cvs rdiff -u -r1.202.2.11 -r1.202.2.12 src/sys/modules/Makefile cvs rdiff -u -r0 -r1.1.2.1 src/sys/modules/compat_30/Makefile cvs rdiff -u -r1.1.2.8 -r1.1.2.9 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/distrib/sets/lists/modules/mi diff -u src/distrib/sets/lists/modules/mi:1.114.2.7 src/distrib/sets/lists/modules/mi:1.114.2.8 --- src/distrib/sets/lists/modules/mi:1.114.2.7 Tue Mar 27 07:29:43 2018 +++ src/distrib/sets/lists/modules/mi Wed Mar 28 04:18:24 2018 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.114.2.7 2018/03/27 07:29:43 pgoyette Exp $ +# $NetBSD: mi,v 1.114.2.8 2018/03/28 04:18:24 pgoyette Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -68,6 +68,8 @@ ./@MODULEDIR@/coda5/coda5.kmod base-kernel-modules kmod ./@MODULEDIR@/compat base-kernel-modules kmod ./@MODULEDIR@/compat/compat.kmod base-kernel-modules kmod +./@MODULEDIR@/compat_30 base-kernel-modules kmod +./@MODULEDIR@/compat_30/compat_30.kmod base-kernel-modules kmod ./@MODULEDIR@/compat_40 base-kernel-modules kmod ./@MODULEDIR@/compat_40/compat_40.kmod base-kernel-modules kmod ./@MODULEDIR@/compat_50 base-kernel-modules kmod Index: src/sys/compat/common/Makefile.sysio diff -u src/sys/compat/common/Makefile.sysio:1.7.18.16 src/sys/compat/common/Makefile.sysio:1.7.18.17 --- src/sys/compat/common/Makefile.sysio:1.7.18.16 Sun Mar 25 21:27:51 2018 +++ src/sys/compat/common/Makefile.sysio Wed Mar 28 04:18:24 2018 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.sysio,v 1.7.18.16 2018/03/25 21:27:51 pgoyette Exp $ +# $NetBSD: Makefile.sysio,v 1.7.18.17 2018/03/28 04:18:24 pgoyette Exp $ # Sources for syscall and ioctl compatibility across the versions. @@ -28,7 +28,7 @@ SRCS+= rtsock_14.c SRCS+= vfs_syscalls_20.c # Compatibility code for NetBSD 3.0 -SRCS+= kern_time_30.c vfs_syscalls_30.c uipc_syscalls_30.c +SRCS+= kern_time_30.c vfs_syscalls_30.c uipc_syscalls_30.c bio_30.c # Compatibility code for NetBSD 4.0 SRCS+= vfs_syscalls_40.c uipc_syscalls_40.c Index: src/sys/compat/common/compat_mod.c diff -u src/sys/compat/common/compat_mod.c:1.24.14.21 src/sys/compat/common/compat_mod.c:1.24.14.22 --- src/sys/compat/common/compat_mod.c:1.24.14.21 Tue Mar 27 07:29:43 2018 +++ src/sys/compat/common/compat_mod.c Wed Mar 28 04:18:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_mod.c,v 1.24.14.21 2018/03/27 07:29:43 pgoyette Exp $ */ +/* $NetBSD: compat_mod.c,v 1.24.14.22 2018/03/28 04:18:24 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.24.14.21 2018/03/27 07:29:43 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.24.14.22 2018/03/28 04:18:24 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -172,19 +172,6 @@ static const struct syscall_package comp { SYS_compat_20_getfsstat, 0, (sy_call_t *)compat_20_sys_getfsstat }, { SYS_compat_20_statfs, 0, (sy_call_t *)compat_20_sys_statfs }, #endif - -#if defined(COMPAT_30) - { SYS_compat_30___fhstat30, 0, (sy_call_t *)compat_30_sys___fhstat30 }, - { SYS_compat_30___fstat13, 0, (sy_call_t *)compat_30_sys___fstat13 }, - { SYS_compat_30___lstat13, 0, (sy_call_t *)compat_30_sys___lstat13 }, - { SYS_compat_30___stat13, 0, (sy_call_t *)compat_30_sys___stat13 }, - { SYS_compat_30_fhopen, 0, (sy_call_t *)compat_30_sys_fhopen }, - { SYS_compat_30_fhstat, 0, (sy_call_t *)compat_30_sys_fhstat }, - { SYS_compat_30_fhstatvfs1, 0, (sy_call_t *)compat_30_sys_fhstatvfs1 }, - { SYS_compat_30_getdents, 0, (sy_call_t *)compat_30_sys_getdents }, - { SYS_compat_30_getfh, 0, (sy_call_t *)compat_30_sys_getfh }, - { SYS_compat_30_socket, 0, (sy_call_t *)compat_30_sys_socket }, -#endif { 0, 0, NULL }, }; @@ -204,10 +191,10 @@ struct compat_init_fini { #ifdef COMPAT_40 { compat_40_init, compat_40_fini }, #endif -#if 0 /* NOT YET */ #ifdef COMPAT_30 { compat_30_init, compat_30_fini }, #endif +#if 0 /* NOT YET */ #ifdef COMPAT_20 { compat_20_init, compat_20_fini }, #endif Index: src/sys/compat/common/compat_mod.h diff -u src/sys/compat/common/compat_mod.h:1.1.42.9 src/sys/compat/common/compat_mod.h:1.1.42.10 --- src/sys/compat/common/compat_mod.h:1.1.42.9 Tue Mar 27 07:29:44 2018 +++ src/sys/compat/common/compat_mod.h Wed Mar 28 04:18:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_mod.h,v 1.1.42.9 2018/03/27 07:29:44 pgoyette Exp $ */ +/* $NetBSD: compat_mod.h,v 1.1.42.10 2018/03/28 04:18:24 pgoyette Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -88,4 +88,17 @@ void sysmon_power_40_init(void); void sysmon_power_40_fini(void); #endif +#ifdef COMPAT_30 +int compat_30_init(void); +int compat_30_fini(void); +int kern_time_30_init(void); +int kern_time_30_fini(void); +int vfs_syscalls_30_init(void); +int vfs_syscalls_30_fini(void); +int uipc_syscalls_30_init(void); +int uipc_syscalls_30_fini(void); +void bio_30_init(void); +void bio_30_fini(void); +#endif + #endif /* !_COMPAT_MOD_H_ */ Index: src/sys/compat/common/files.common diff -u src/sys/compat/common/files.common:1.1.2.19 src/sys/compat/common/files.common:1.1.2.20 --- src/sys/compat/common/files.common:1.1.2.19 Tue Mar 27 07:29:44 2018 +++ src/sys/compat/common/files.common Wed Mar 28 04:18:24 2018 @@ -1,4 +1,4 @@ -# $NetBSD: files.common,v 1.1.2.19 2018/03/27 07:29:44 pgoyette Exp $ +# $NetBSD: files.common,v 1.1.2.20 2018/03/28 04:18:24 pgoyette Exp $ # # Generic files, used by all compat options. @@ -47,9 +47,11 @@ file compat/common/kern_sig_16.c compat file compat/common/vfs_syscalls_20.c compat_20 # Compatibility code for NetBSD 3.0 +file compat/common/compat_30_mod.c compat_30 file compat/common/kern_time_30.c compat_30 file compat/common/vfs_syscalls_30.c compat_30 file compat/common/uipc_syscalls_30.c compat_30 +file compat/common/bio_30.c compat_30 # Compatibility code for NetBSD 4.0 file compat/common/compat_40_mod.c compat_40 Index: src/sys/compat/common/kern_time_30.c diff -u src/sys/compat/common/kern_time_30.c:1.5 src/sys/compat/common/kern_time_30.c:1.5.14.1 --- src/sys/compat/common/kern_time_30.c:1.5 Thu Nov 3 03:37:06 2016 +++ src/sys/compat/common/kern_time_30.c Wed Mar 28 04:18:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_time_30.c,v 1.5 2016/11/03 03:37:06 riastradh Exp $ */ +/* $NetBSD: kern_time_30.c,v 1.5.14.1 2018/03/28 04:18:24 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_time_30.c,v 1.5 2016/11/03 03:37:06 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_time_30.c,v 1.5.14.1 2018/03/28 04:18:24 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_ntp.h" @@ -46,18 +46,26 @@ __KERNEL_RCSID(0, "$NetBSD: kern_time_30 #include <sys/systm.h> #include <sys/time.h> #include <sys/timex.h> +#include <sys/syscall.h> +#include <sys/syscallvar.h> +#include <sys/syscallargs.h> +#include <sys/compat_stub.h> +#include <compat/common/compat_mod.h> #include <compat/common/compat_util.h> #include <compat/sys/time.h> #include <compat/sys/timex.h> -#include <sys/syscallargs.h> +static const struct syscall_package kern_time_30_syscalls[] = { + { SYS_compat_30_ntp_gettime, 0, + (sy_call_t *)compat_30_sys_ntp_gettime }, + { 0, 0, NULL } +}; int compat_30_sys_ntp_gettime(struct lwp *l, const struct compat_30_sys_ntp_gettime_args *uap, register_t *retval) { -#ifdef NTP /* { syscallarg(struct ntptimeval30 *) ontvp; } */ @@ -66,8 +74,11 @@ compat_30_sys_ntp_gettime(struct lwp *l, struct timeval tv; int error; + if (vec_ntp_gettime == NULL) + return ENOSYS; + if (SCARG(uap, ntvp)) { - ntp_gettime(&ntv); + (*vec_ntp_gettime)(&ntv); TIMESPEC_TO_TIMEVAL(&tv, &ntv.time); timeval_to_timeval50(&tv, &ntv30.time); ntv30.maxerror = ntv.maxerror; @@ -77,9 +88,20 @@ compat_30_sys_ntp_gettime(struct lwp *l, if (error) return error; } - *retval = ntp_timestatus(); + *retval = (*vec_ntp_timestatus)(); return 0; -#else - return ENOSYS; -#endif +} + +int +kern_time_30_init(void) +{ + + return syscall_establish(NULL, kern_time_30_syscalls); +} + +int +kern_time_30_fini(void) +{ + + return syscall_disestablish(NULL, kern_time_30_syscalls); } Index: src/sys/compat/common/uipc_syscalls_30.c diff -u src/sys/compat/common/uipc_syscalls_30.c:1.3 src/sys/compat/common/uipc_syscalls_30.c:1.3.96.1 --- src/sys/compat/common/uipc_syscalls_30.c:1.3 Thu Dec 20 23:02:45 2007 +++ src/sys/compat/common/uipc_syscalls_30.c Wed Mar 28 04:18:24 2018 @@ -1,9 +1,9 @@ -/* $NetBSD: uipc_syscalls_30.c,v 1.3 2007/12/20 23:02:45 dsl Exp $ */ +/* $NetBSD: uipc_syscalls_30.c,v 1.3.96.1 2018/03/28 04:18:24 pgoyette Exp $ */ /* written by Pavel Cahyna, 2006. Public domain. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls_30.c,v 1.3 2007/12/20 23:02:45 dsl Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls_30.c,v 1.3.96.1 2018/03/28 04:18:24 pgoyette Exp $"); /* * System call interface to the socket abstraction. @@ -14,11 +14,21 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_syscall #include <sys/msg.h> #include <sys/sysctl.h> #include <sys/mount.h> +#include <sys/syscall.h> +#include <sys/syscallvar.h> #include <sys/syscallargs.h> #include <sys/errno.h> +#include <compat/common/compat_mod.h> + +static const struct syscall_package uipc_syscalls_30_syscalls[] = { + { SYS_compat_30_socket, 0, (sy_call_t *)compat_30_sys_socket }, + { 0, 0, NULL} +}; + int -compat_30_sys_socket(struct lwp *l, const struct compat_30_sys_socket_args *uap, register_t *retval) +compat_30_sys_socket(struct lwp *l, + const struct compat_30_sys_socket_args *uap, register_t *retval) { int error; @@ -28,3 +38,17 @@ compat_30_sys_socket(struct lwp *l, cons return (error); } + +int +uipc_syscalls_30_init(void) +{ + + return syscall_establish(NULL, uipc_syscalls_30_syscalls); +} + +int +uipc_syscalls_30_fini(void) +{ + + return syscall_disestablish(NULL, uipc_syscalls_30_syscalls); +} Index: src/sys/compat/common/vfs_syscalls_30.c diff -u src/sys/compat/common/vfs_syscalls_30.c:1.36 src/sys/compat/common/vfs_syscalls_30.c:1.36.18.1 --- src/sys/compat/common/vfs_syscalls_30.c:1.36 Mon Oct 20 11:58:01 2014 +++ src/sys/compat/common/vfs_syscalls_30.c Wed Mar 28 04:18:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_syscalls_30.c,v 1.36 2014/10/20 11:58:01 christos Exp $ */ +/* $NetBSD: vfs_syscalls_30.c,v 1.36.18.1 2018/03/28 04:18:24 pgoyette Exp $ */ /*- * Copyright (c) 2005, 2008 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_30.c,v 1.36 2014/10/20 11:58:01 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_30.c,v 1.36.18.1 2018/03/28 04:18:24 pgoyette Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -47,9 +47,11 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls #include <sys/malloc.h> #include <sys/kauth.h> #include <sys/vfs_syscalls.h> - +#include <sys/syscall.h> +#include <sys/syscallvar.h> #include <sys/syscallargs.h> +#include <compat/common/compat_mod.h> #include <compat/common/compat_util.h> #include <compat/sys/stat.h> #include <compat/sys/dirent.h> @@ -57,6 +59,19 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls static void cvtstat(struct stat13 *, const struct stat *); +static const struct syscall_package vfs_syscalls_30_syscalls[] = { + { SYS_compat_30___fhstat30, 0, (sy_call_t *)compat_30_sys___fhstat30 }, + { SYS_compat_30___fstat13, 0, (sy_call_t *)compat_30_sys___fstat13 }, + { SYS_compat_30___lstat13, 0, (sy_call_t *)compat_30_sys___lstat13 }, + { SYS_compat_30___stat13, 0, (sy_call_t *)compat_30_sys___stat13 }, + { SYS_compat_30_fhopen, 0, (sy_call_t *)compat_30_sys_fhopen }, + { SYS_compat_30_fhstat, 0, (sy_call_t *)compat_30_sys_fhstat }, + { SYS_compat_30_fhstatvfs1, 0, (sy_call_t *)compat_30_sys_fhstatvfs1 }, + { SYS_compat_30_getdents, 0, (sy_call_t *)compat_30_sys_getdents }, + { SYS_compat_30_getfh, 0, (sy_call_t *)compat_30_sys_getfh }, + { 0,0, NULL } +}; + /* * Convert from a new to an old stat structure. */ @@ -87,7 +102,8 @@ cvtstat(struct stat13 *ost, const struct */ /* ARGSUSED */ int -compat_30_sys___stat13(struct lwp *l, const struct compat_30_sys___stat13_args *uap, register_t *retval) +compat_30_sys___stat13(struct lwp *l, + const struct compat_30_sys___stat13_args *uap, register_t *retval) { /* { syscallarg(const char *) path; @@ -111,7 +127,8 @@ compat_30_sys___stat13(struct lwp *l, co */ /* ARGSUSED */ int -compat_30_sys___lstat13(struct lwp *l, const struct compat_30_sys___lstat13_args *uap, register_t *retval) +compat_30_sys___lstat13(struct lwp *l, + const struct compat_30_sys___lstat13_args *uap, register_t *retval) { /* { syscallarg(const char *) path; @@ -131,7 +148,8 @@ compat_30_sys___lstat13(struct lwp *l, c /* ARGSUSED */ int -compat_30_sys_fhstat(struct lwp *l, const struct compat_30_sys_fhstat_args *uap, register_t *retval) +compat_30_sys_fhstat(struct lwp *l, + const struct compat_30_sys_fhstat_args *uap, register_t *retval) { /* { syscallarg(const struct compat_30_fhandle *) fhp; @@ -174,7 +192,8 @@ compat_30_sys_fhstat(struct lwp *l, cons */ /* ARGSUSED */ int -compat_30_sys___fstat13(struct lwp *l, const struct compat_30_sys___fstat13_args *uap, register_t *retval) +compat_30_sys___fstat13(struct lwp *l, + const struct compat_30_sys___fstat13_args *uap, register_t *retval) { /* { syscallarg(int) fd; @@ -196,7 +215,8 @@ compat_30_sys___fstat13(struct lwp *l, c * Read a block of directory entries in a file system independent format. */ int -compat_30_sys_getdents(struct lwp *l, const struct compat_30_sys_getdents_args *uap, register_t *retval) +compat_30_sys_getdents(struct lwp *l, + const struct compat_30_sys_getdents_args *uap, register_t *retval) { /* { syscallarg(int) fd; @@ -329,7 +349,8 @@ out1: * Get file handle system call */ int -compat_30_sys_getfh(struct lwp *l, const struct compat_30_sys_getfh_args *uap, register_t *retval) +compat_30_sys_getfh(struct lwp *l, const struct compat_30_sys_getfh_args *uap, + register_t *retval) { /* { syscallarg(char *) fname; @@ -380,7 +401,8 @@ compat_30_sys_getfh(struct lwp *l, const * and call the device open routine if any. */ int -compat_30_sys_fhopen(struct lwp *l, const struct compat_30_sys_fhopen_args *uap, register_t *retval) +compat_30_sys_fhopen(struct lwp *l, + const struct compat_30_sys_fhopen_args *uap, register_t *retval) { /* { syscallarg(const fhandle_t *) fhp; @@ -393,7 +415,8 @@ compat_30_sys_fhopen(struct lwp *l, cons /* ARGSUSED */ int -compat_30_sys___fhstat30(struct lwp *l, const struct compat_30_sys___fhstat30_args *uap_30, register_t *retval) +compat_30_sys___fhstat30(struct lwp *l, + const struct compat_30_sys___fhstat30_args *uap_30, register_t *retval) { /* { syscallarg(const fhandle_t *) fhp; @@ -413,7 +436,8 @@ compat_30_sys___fhstat30(struct lwp *l, /* ARGSUSED */ int -compat_30_sys_fhstatvfs1(struct lwp *l, const struct compat_30_sys_fhstatvfs1_args *uap_30, register_t *retval) +compat_30_sys_fhstatvfs1(struct lwp *l, + const struct compat_30_sys_fhstatvfs1_args *uap_30, register_t *retval) { /* { syscallarg(const fhandle_t *) fhp; @@ -429,3 +453,17 @@ compat_30_sys_fhstatvfs1(struct lwp *l, return sys___fhstatvfs140(l, &uap, retval); } + +int +vfs_syscalls_30_init(void) +{ + + return syscall_establish(NULL, vfs_syscalls_30_syscalls); +} + +int +vfs_syscalls_30_fini(void) +{ + + return syscall_disestablish(NULL, vfs_syscalls_30_syscalls); +} Index: src/sys/dev/bio.c diff -u src/sys/dev/bio.c:1.13 src/sys/dev/bio.c:1.13.16.1 --- src/sys/dev/bio.c:1.13 Thu Aug 20 14:40:17 2015 +++ src/sys/dev/bio.c Wed Mar 28 04:18:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bio.c,v 1.13 2015/08/20 14:40:17 christos Exp $ */ +/* $NetBSD: bio.c,v 1.13.16.1 2018/03/28 04:18:24 pgoyette Exp $ */ /* $OpenBSD: bio.c,v 1.9 2007/03/20 02:35:55 marco Exp $ */ /* @@ -28,7 +28,7 @@ /* A device controller ioctl tunnelling device. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.13 2015/08/20 14:40:17 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.13.16.1 2018/03/28 04:18:24 pgoyette Exp $"); #include "opt_compat_netbsd.h" @@ -43,6 +43,7 @@ __KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.13 #include <sys/mutex.h> #include <sys/proc.h> #include <sys/kauth.h> +#include <sys/compat_stub.h> #include <dev/biovar.h> #include <dev/sysmon/sysmonvar.h> @@ -127,10 +128,8 @@ bioioctl(dev_t dev, u_long cmd, void *ad case BIOCDISK: case BIOCDISK_NOVOL: case BIOCVOL: -#ifdef COMPAT_30 case OBIOCDISK: case OBIOCVOL: -#endif error = kauth_authorize_device_passthru(l->l_cred, dev, KAUTH_REQ_DEVICE_RAWIO_PASSTHRU_READCONF, addr); if (error) @@ -190,43 +189,11 @@ bioioctl(dev_t dev, u_long cmd, void *ad return ENOENT; } mutex_exit(&bio_lock); -#ifdef COMPAT_30 - switch (cmd) { - case OBIOCDISK: { - struct bioc_disk *bd = - malloc(sizeof(*bd), M_DEVBUF, M_WAITOK|M_ZERO); - - (void)memcpy(bd, addr, sizeof(struct obioc_disk)); - error = bio_delegate_ioctl(common->bc_cookie, - BIOCDISK, bd); - if (error) { - free(bd, M_DEVBUF); - return error; - } - - (void)memcpy(addr, bd, sizeof(struct obioc_disk)); - free(bd, M_DEVBUF); - return 0; - } - case OBIOCVOL: { - struct bioc_vol *bv = - malloc(sizeof(*bv), M_DEVBUF, M_WAITOK|M_ZERO); - - (void)memcpy(bv, addr, sizeof(struct obioc_vol)); - error = bio_delegate_ioctl(common->bc_cookie, - BIOCVOL, bv); - if (error) { - free(bv, M_DEVBUF); - return error; - } - - (void)memcpy(addr, bv, sizeof(struct obioc_vol)); - free(bv, M_DEVBUF); - return 0; - } - } -#endif - error = bio_delegate_ioctl(common->bc_cookie, cmd, addr); + error = (*compat_bio_30)(common->bc_cookie, cmd, addr, + bio_delegate_ioctl); + if (error == ENOSYS) + error = bio_delegate_ioctl(common->bc_cookie, cmd, + addr); return error; } return 0; Index: src/sys/kern/compat_stub.c diff -u src/sys/kern/compat_stub.c:1.1.2.8 src/sys/kern/compat_stub.c:1.1.2.9 --- src/sys/kern/compat_stub.c:1.1.2.8 Tue Mar 27 07:29:44 2018 +++ src/sys/kern/compat_stub.c Wed Mar 28 04:18:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_stub.c,v 1.1.2.8 2018/03/27 07:29:44 pgoyette Exp $ */ +/* $NetBSD: compat_stub.c,v 1.1.2.9 2018/03/28 04:18:24 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -99,3 +99,10 @@ int (*wsevent_50_copyout_events)(const s */ void (*compat_sysmon_power_40)(struct power_event *, struct sysmon_pswitch *, int) = (void *)voidop; + +/* + * bio compatability + */ + +int (*compat_bio_30)(void *, u_long, void *, int(*)(void *, u_long, void *)) = + (void *)enosys; Index: src/sys/modules/Makefile diff -u src/sys/modules/Makefile:1.202.2.11 src/sys/modules/Makefile:1.202.2.12 --- src/sys/modules/Makefile:1.202.2.11 Tue Mar 27 07:29:44 2018 +++ src/sys/modules/Makefile Wed Mar 28 04:18:25 2018 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.202.2.11 2018/03/27 07:29:44 pgoyette Exp $ +# $NetBSD: Makefile,v 1.202.2.12 2018/03/28 04:18:25 pgoyette Exp $ .include <bsd.own.mk> @@ -7,7 +7,7 @@ # Modules for compatability with earlier versions of NetBSD SUBDIR+= compat compat_80 compat_70 compat_60 compat_50 -SUBDIR+= compat_40 #compat_30 compat_20 compat_16 compat_14 +SUBDIR+= compat_40 compat_30 #compat_20 compat_16 compat_14 #SUBDIR+= compat_13 compat_12 compat_10 compat_09 SUBDIR+= compat_ossaudio SUBDIR+= compat_sysv Index: src/sys/sys/compat_stub.h diff -u src/sys/sys/compat_stub.h:1.1.2.8 src/sys/sys/compat_stub.h:1.1.2.9 --- src/sys/sys/compat_stub.h:1.1.2.8 Tue Mar 27 07:29:44 2018 +++ src/sys/sys/compat_stub.h Wed Mar 28 04:18:25 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_stub.h,v 1.1.2.8 2018/03/27 07:29:44 pgoyette Exp $ */ +/* $NetBSD: compat_stub.h,v 1.1.2.9 2018/03/28 04:18:25 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -107,7 +107,13 @@ extern int (*wsevent_50_copyout_events)( struct power_event; struct sysmon_pswitch; -extern void (*compat_sysmon_power_40)(struct power_event - *, struct sysmon_pswitch *, int); +extern void (*compat_sysmon_power_40)(struct power_event *, + struct sysmon_pswitch *, int); + +/* + * compat_30 indirect function pointer + */ +extern int (*compat_bio_30)(void *, u_long, void *, + int(*)(void *, u_long, void *)); #endif /* _SYS_COMPAT_STUB_H */ Added files: Index: src/sys/compat/common/bio_30.c diff -u /dev/null src/sys/compat/common/bio_30.c:1.1.2.1 --- /dev/null Wed Mar 28 04:18:25 2018 +++ src/sys/compat/common/bio_30.c Wed Mar 28 04:18:24 2018 @@ -0,0 +1,103 @@ +/* $NetBSD: bio_30.c,v 1.1.2.1 2018/03/28 04:18:24 pgoyette Exp $ */ +/* $OpenBSD: bio.c,v 1.9 2007/03/20 02:35:55 marco Exp $ */ + +/* + * Copyright (c) 2002 Niklas Hallqvist. 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. + * + * 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: bio_30.c,v 1.1.2.1 2018/03/28 04:18:24 pgoyette Exp $"); + +#include <sys/param.h> +#include <sys/conf.h> +#include <sys/device.h> +#include <sys/event.h> +#include <sys/ioctl.h> +#include <sys/malloc.h> +#include <sys/queue.h> +#include <sys/systm.h> +#include <sys/mutex.h> +#include <sys/proc.h> +#include <sys/kauth.h> +#include <sys/compat_stub.h> + +#include <dev/biovar.h> +#include <dev/sysmon/sysmonvar.h> + +#include <compat/common/compat_mod.h> + +static int +compat_30_bio(void *cookie, u_long cmd, void *addr, + int (*delegate)(void *, u_long, void *)) +{ + int error; + + switch (cmd) { + case OBIOCDISK: { + struct bioc_disk *bd = + malloc(sizeof(*bd), M_DEVBUF, M_WAITOK|M_ZERO); + + (void)memcpy(bd, addr, sizeof(struct obioc_disk)); + error = (*delegate)(cookie, BIOCDISK, bd); + if (error) { + free(bd, M_DEVBUF); + return error; + } + + (void)memcpy(addr, bd, sizeof(struct obioc_disk)); + free(bd, M_DEVBUF); + return 0; + } + case OBIOCVOL: { + struct bioc_vol *bv = + malloc(sizeof(*bv), M_DEVBUF, M_WAITOK|M_ZERO); + + (void)memcpy(bv, addr, sizeof(struct obioc_vol)); + error = (*delegate)(cookie, BIOCVOL, bv); + if (error) { + free(bv, M_DEVBUF); + return error; + } + + (void)memcpy(addr, bv, sizeof(struct obioc_vol)); + free(bv, M_DEVBUF); + return 0; + } + default: + return ENOSYS; + } +} + +void +bio_30_init(void) +{ + + compat_bio_30 = compat_30_bio; +} + +void +bio_30_fini(void) +{ + + compat_bio_30 = (void *)enosys; +} Index: src/sys/compat/common/compat_30_mod.c diff -u /dev/null src/sys/compat/common/compat_30_mod.c:1.1.2.1 --- /dev/null Wed Mar 28 04:18:25 2018 +++ src/sys/compat/common/compat_30_mod.c Wed Mar 28 04:18:24 2018 @@ -0,0 +1,112 @@ +/* $NetBSD: compat_30_mod.c,v 1.1.2.1 2018/03/28 04:18:24 pgoyette Exp $ */ + +/*- + * Copyright (c) 2018 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software developed for The NetBSD Foundation + * by Paul Goyette + * + * 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. + * + * 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. + */ + +/* + * Linkage for the compat module: spaghetti. + */ + +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: compat_30_mod.c,v 1.1.2.1 2018/03/28 04:18:24 pgoyette Exp $"); + +#include <sys/systm.h> +#include <sys/module.h> +#include <sys/sysctl.h> +#include <sys/syscall.h> +#include <sys/syscallvar.h> +#include <sys/syscallargs.h> + +#include <dev/biovar.h> + +#include <compat/common/compat_util.h> +#include <compat/common/compat_mod.h> + +int +compat_30_init(void) +{ + int error = 0; + + error = vfs_syscalls_30_init(); + if (error != 0) + return error; + + error = kern_time_30_init(); + if (error != 0) { + vfs_syscalls_30_fini(); + return error; + } + bio_30_init(); + + return error; +} + +int +compat_30_fini(void) +{ + int error = 0; + + bio_30_fini(); + + error = kern_time_30_fini(); + if (error != 0) { + bio_30_init(); + return error; + } + + error = vfs_syscalls_30_fini(); + if (error != 0) { + bio_30_init(); + kern_time_30_init(); + return error; + } + + return error; +} + +#ifdef _MODULE + +#define REQD_30 "compat_80,compat_70,compat_60,compat_50,compat_40" + +MODULE(MODULE_CLASS_EXEC, compat_30, REQD_30); + +static int +compat_30_modcmd(modcmd_t cmd, void *arg) +{ + + switch (cmd) { + case MODULE_CMD_INIT: + return compat_30_init(); + case MODULE_CMD_FINI: + return compat_30_init(); + default: + return ENOTTY; + } +} +#endif Index: src/sys/modules/compat_30/Makefile diff -u /dev/null src/sys/modules/compat_30/Makefile:1.1.2.1 --- /dev/null Wed Mar 28 04:18:25 2018 +++ src/sys/modules/compat_30/Makefile Wed Mar 28 04:18:25 2018 @@ -0,0 +1,15 @@ +# $NetBSD: Makefile,v 1.1.2.1 2018/03/28 04:18:25 pgoyette Exp $ + +.include "../Makefile.inc" + +.PATH: ${S}/compat/common + +KMOD= compat_30 + +CPPFLAGS+= -DCOMPAT_30 +CPPFLAGS+= -DCOMPAT_40 -DCOMPAT_50 -DCOMPAT_60 -DCOMPAT_70 -DCOMPAT_80 + +SRCS+= compat_30_mod.c +SRCS+= vfs_syscalls_30.c uipc_syscalls_30.c kern_time_30.c bio_30.c + +.include <bsd.kmodule.mk>