Module Name: src Committed By: pgoyette Date: Fri Mar 16 01:16:29 UTC 2018
Modified Files: src/sys/compat/common [pgoyette-compat]: compat_60_mod.c compat_70_mod.c compat_mod.c compat_mod.h kern_sa_60.c src/sys/kern [pgoyette-compat]: kern_cpu.c systrace_args.c Log Message: Initial pass at setting up the compat_60 module. XXX needs some work to properly handle cpu_ucode stuff. While here, move details of compat_70 init/fini routines into the module itself. To generate a diff of this commit: cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/compat/common/compat_60_mod.c cvs rdiff -u -r1.1.2.2 -r1.1.2.3 src/sys/compat/common/compat_70_mod.c cvs rdiff -u -r1.24.14.11 -r1.24.14.12 src/sys/compat/common/compat_mod.c cvs rdiff -u -r1.1 -r1.1.42.1 src/sys/compat/common/compat_mod.h \ src/sys/compat/common/kern_sa_60.c cvs rdiff -u -r1.71 -r1.71.16.1 src/sys/kern/kern_cpu.c cvs rdiff -u -r1.29.2.2 -r1.29.2.3 src/sys/kern/systrace_args.c 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/compat_60_mod.c diff -u src/sys/compat/common/compat_60_mod.c:1.1.2.1 src/sys/compat/common/compat_60_mod.c:1.1.2.2 --- src/sys/compat/common/compat_60_mod.c:1.1.2.1 Thu Mar 15 23:23:36 2018 +++ src/sys/compat/common/compat_60_mod.c Fri Mar 16 01:16:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_60_mod.c,v 1.1.2.1 2018/03/15 23:23:36 pgoyette Exp $ */ +/* $NetBSD: compat_60_mod.c,v 1.1.2.2 2018/03/16 01:16:29 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: compat_60_mod.c,v 1.1.2.1 2018/03/15 23:23:36 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_60_mod.c,v 1.1.2.2 2018/03/16 01:16:29 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -51,21 +51,49 @@ __KERNEL_RCSID(0, "$NetBSD: compat_60_mo #include <compat/common/compat_util.h> #include <compat/common/compat_mod.h> +static const struct syscall_package compat_60_syscalls[] = { + { SYS_compat_60_lwp_park, 0, (sy_call_t *)compat_60_sys__lwp_park }, + { NULL, 0, NULL } +}; + #define REQUIRED_60 "compat_70" /* XXX No compat_80 yet */ MODULE(MODULE_CLASS_EXEC, compat_60, REQUIRED_60); +#ifdef CPU_UCODE +int (*orig_compat_6_cpu_ucode)(struct compat6_cpu_ucode *); +int (*orig_compat6_cpu_ucode_apply)(const struct compat6_cpu_ucode *); +#endif + static int compat_60_modcmd(modcmd_t cmd, void *arg) { + int error; switch (cmd) { case MODULE_CMD_INIT: + error = syscall_establish(NULL, compat_60_syscalls); + if (error != 0) + return error; +#ifdef CPU_UCODE + orig_get_version = vec_compat6_cpu_ucode_get_version; + *vec_compat6_cpu_ucode_get_version = + compat6_cpu_ucode_get_version; + orig_apply = vec_compat6_cpu_ucode_apply; + *vec_compat6_cpu_ucode_apply = compat6_cpu_ucode_apply; +#endif return 0; case MODULE_CMD_FINI: + *vec_compat6_cpu_ucode_get_version = orig_get_version; + *vec_compat6_cpu_ucode_apply = orig_apply; + error = syscall_disestablish(NULL, compat_60_syscalls); + if (error != 0) + return error; return 0; default: return ENOTTY; } } + + Index: src/sys/compat/common/compat_70_mod.c diff -u src/sys/compat/common/compat_70_mod.c:1.1.2.2 src/sys/compat/common/compat_70_mod.c:1.1.2.3 --- src/sys/compat/common/compat_70_mod.c:1.1.2.2 Thu Mar 15 23:14:21 2018 +++ src/sys/compat/common/compat_70_mod.c Fri Mar 16 01:16:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_70_mod.c,v 1.1.2.2 2018/03/15 23:14:21 pgoyette Exp $ */ +/* $NetBSD: compat_70_mod.c,v 1.1.2.3 2018/03/16 01:16:29 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: compat_70_mod.c,v 1.1.2.2 2018/03/15 23:14:21 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_70_mod.c,v 1.1.2.3 2018/03/16 01:16:29 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -56,19 +56,31 @@ __KERNEL_RCSID(0, "$NetBSD: compat_70_mo MODULE(MODULE_CLASS_EXEC, compat_70, NULL); /* XXX No compat_80 yet */ +void compat_70_init(void) +{ + + vec_ocreds_valid = true; + rtsock_70_init(); +} + +void compat_70_fini(void) +{ + + rtsock_70_fini(); + vec_ocreds_valid = false; +} + static int compat_70_modcmd(modcmd_t cmd, void *arg) { switch (cmd) { case MODULE_CMD_INIT: - vec_ocreds_valid = true; - rtsock_70_init(); + compat_70_init(); return 0; case MODULE_CMD_FINI: - rtsock_70_fini(); - vec_ocreds_valid = false; + compat_70_fini(); return 0; default: Index: src/sys/compat/common/compat_mod.c diff -u src/sys/compat/common/compat_mod.c:1.24.14.11 src/sys/compat/common/compat_mod.c:1.24.14.12 --- src/sys/compat/common/compat_mod.c:1.24.14.11 Thu Mar 15 23:34:53 2018 +++ src/sys/compat/common/compat_mod.c Fri Mar 16 01:16:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_mod.c,v 1.24.14.11 2018/03/15 23:34:53 pgoyette Exp $ */ +/* $NetBSD: compat_mod.c,v 1.24.14.12 2018/03/16 01:16:29 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.11 2018/03/15 23:34:53 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.24.14.12 2018/03/16 01:16:29 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -236,9 +236,6 @@ static const struct syscall_package comp { SYS_compat_50_aio_suspend, 0, (sy_call_t *)compat_50_sys_aio_suspend }, { SYS_compat_50_quotactl, 0, (sy_call_t *)compat_50_sys_quotactl }, #endif -#if defined(COMPAT_60) - { SYS_compat_60__lwp_park, 0, (sy_call_t *)compat_60_sys__lwp_park }, -#endif { 0, 0, NULL }, }; @@ -287,16 +284,20 @@ compat_modcmd(modcmd_t cmd, void *arg) uvm_50_init(); if_50_init(); #endif +#ifdef COMPAT_60 + compat_60_init(); +#endif #ifdef COMPAT_70 - vec_ocreds_valid = true; - rtsock_70_init(); + compat_70_init(); #endif return 0; case MODULE_CMD_FINI: #ifdef COMPAT_70 - rtsock_70_fini(); - vec_ocreds_valid = false; + compat_70_fini(); +#endif +#ifdef COMPAT_60 + compat_60_fini(); #endif #ifdef COMPAT_10 vfs_syscalls_10_fini(); Index: src/sys/compat/common/compat_mod.h diff -u src/sys/compat/common/compat_mod.h:1.1 src/sys/compat/common/compat_mod.h:1.1.42.1 --- src/sys/compat/common/compat_mod.h:1.1 Thu Feb 21 01:39:54 2013 +++ src/sys/compat/common/compat_mod.h Fri Mar 16 01:16:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_mod.h,v 1.1 2013/02/21 01:39:54 pgoyette Exp $ */ +/* $NetBSD: compat_mod.h,v 1.1.42.1 2018/03/16 01:16:29 pgoyette Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -38,4 +38,10 @@ void compat_sysctl_fini(void); void compat_sysctl_time(struct sysctllog **); void compat_sysctl_vfs(struct sysctllog **); +void compat_70_init(void); +void compat_70_fini(void); + +void compat_60_init(void); +void compat_60_fini(void); + #endif /* !_COMPAT_MOD_H_ */ Index: src/sys/compat/common/kern_sa_60.c diff -u src/sys/compat/common/kern_sa_60.c:1.1 src/sys/compat/common/kern_sa_60.c:1.1.42.1 --- src/sys/compat/common/kern_sa_60.c:1.1 Sun Feb 19 17:40:46 2012 +++ src/sys/compat/common/kern_sa_60.c Fri Mar 16 01:16:29 2018 @@ -29,7 +29,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: kern_sa_60.c,v 1.1 2012/02/19 17:40:46 matt Exp $"); +__KERNEL_RCSID(1, "$NetBSD: kern_sa_60.c,v 1.1.42.1 2018/03/16 01:16:29 pgoyette Exp $"); #include <sys/systm.h> #include <sys/syscall.h> @@ -82,3 +82,23 @@ compat_60_sys_sa_preempt(lwp_t *l, { return sys_nosys(l, uap, retval); } + +static const struct syscall_package compat__60_syscalls[] = { + { SYS_compat_60_sa_register, 0, + (sy_call_t *)compat_60_sys_sa_register }, + { SYS_compat_60_sa_stacks, 0, (sy_call_t *)compat_60_sys_sa_stacks }, + { SYS_compat_60_sa_enable, 0, (sy_call_t *)compat_60_sys_sa_enable }, + { SYS_compat_60_sa_setconcurrency, 0, + (sy_call_t *)compat_60_sys_sa_setconcurrency }, + { SYS_compat_60_sa_yield, 0, (sy_call_t *)compat_60_sys_sa_yield }, + { SYS_compat_60_sa_preempt, 0, (sy_call_t *)compat_60_sys_sa_preempt }, + { SYS_compat_60_lwp_park, 0, (sy_call_t *) + + +62 COMPAT_43 MODULAR compat \ + { int|sys||fstat(int fd, struct stat43 *sb); } fstat43 + + { SYS_compat_43_fstat43, 0, (sy_call_t *)compat_43_sys_fstat }, + + + Index: src/sys/kern/kern_cpu.c diff -u src/sys/kern/kern_cpu.c:1.71 src/sys/kern/kern_cpu.c:1.71.16.1 --- src/sys/kern/kern_cpu.c:1.71 Sat Aug 29 12:24:00 2015 +++ src/sys/kern/kern_cpu.c Fri Mar 16 01:16:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_cpu.c,v 1.71 2015/08/29 12:24:00 maxv Exp $ */ +/* $NetBSD: kern_cpu.c,v 1.71.16.1 2018/03/16 01:16:29 pgoyette Exp $ */ /*- * Copyright (c) 2007, 2008, 2009, 2010, 2012 The NetBSD Foundation, Inc. @@ -56,7 +56,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_cpu.c,v 1.71 2015/08/29 12:24:00 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_cpu.c,v 1.71.16.1 2018/03/16 01:16:29 pgoyette Exp $"); #include "opt_cpu_ucode.h" #include "opt_compat_netbsd.h" @@ -132,6 +132,19 @@ kcpuset_t * kcpuset_running __read_most static char cpu_model[128]; /* + * routine vectors for compat code + */ +static int stub_compat_6_cpu_ucode(const struct compat6_cpu_ucode *ucode) +{ + + return ENOTTY; +} +int (*vec_compat6_cpu_ucode_get_version)(struct compat6_cpu_ucode *) = + stub_compat_6_cpu_ucode; +int (*vec_compat6_cpu_ucode_apply(const struct compat6_cpu_ucode *) = + stub_compat_6_cpu_ucode; + +/* * mi_cpu_init: early initialisation of MI CPU related structures. * * Note: may not block and memory allocator is not yet available. @@ -285,11 +298,10 @@ cpuctl_ioctl(dev_t dev, u_long cmd, void error = cpu_ucode_get_version((struct cpu_ucode_version *)data); break; -#ifdef COMPAT_60 case OIOC_CPU_UCODE_GET_VERSION: - error = compat6_cpu_ucode_get_version((struct compat6_cpu_ucode *)data); + error = (*vec_compat6_cpu_ucode_get_version)( + (struct compat6_cpu_ucode *)data); break; -#endif case IOC_CPU_UCODE_APPLY: error = kauth_authorize_machdep(l->l_cred, @@ -300,17 +312,16 @@ cpuctl_ioctl(dev_t dev, u_long cmd, void error = cpu_ucode_apply((const struct cpu_ucode *)data); break; -#ifdef COMPAT_60 case OIOC_CPU_UCODE_APPLY: error = kauth_authorize_machdep(l->l_cred, KAUTH_MACHDEP_CPU_UCODE_APPLY, NULL, NULL, NULL, NULL); if (error != 0) break; - error = compat6_cpu_ucode_apply((const struct compat6_cpu_ucode *)data); + error = (*vec_compat6_cpu_ucode_apply( + (const struct compat6_cpu_ucode *)data); break; #endif -#endif default: error = ENOTTY; Index: src/sys/kern/systrace_args.c diff -u src/sys/kern/systrace_args.c:1.29.2.2 src/sys/kern/systrace_args.c:1.29.2.3 --- src/sys/kern/systrace_args.c:1.29.2.2 Thu Mar 15 23:07:56 2018 +++ src/sys/kern/systrace_args.c Fri Mar 16 01:16:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: systrace_args.c,v 1.29.2.2 2018/03/15 23:07:56 pgoyette Exp $ */ +/* $NetBSD: systrace_args.c,v 1.29.2.3 2018/03/16 01:16:29 pgoyette Exp $ */ /* * System call argument to DTrace register array converstion.