Module Name: src Committed By: pgoyette Date: Tue Sep 18 10:35:04 UTC 2018
Modified Files: src/sys/compat/netbsd32 [pgoyette-compat]: netbsd32.h netbsd32_compat_80.c netbsd32_mod.c netbsd32_module.c Log Message: Use the MP-safe compat hooks for netbsd32_compat_80.c's modctl To generate a diff of this commit: cvs rdiff -u -r1.116.2.7 -r1.116.2.8 src/sys/compat/netbsd32/netbsd32.h cvs rdiff -u -r1.1.2.3 -r1.1.2.4 src/sys/compat/netbsd32/netbsd32_compat_80.c cvs rdiff -u -r1.13.16.11 -r1.13.16.12 src/sys/compat/netbsd32/netbsd32_mod.c cvs rdiff -u -r1.6.2.6 -r1.6.2.7 src/sys/compat/netbsd32/netbsd32_module.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/netbsd32/netbsd32.h diff -u src/sys/compat/netbsd32/netbsd32.h:1.116.2.7 src/sys/compat/netbsd32/netbsd32.h:1.116.2.8 --- src/sys/compat/netbsd32/netbsd32.h:1.116.2.7 Fri Sep 14 09:21:33 2018 +++ src/sys/compat/netbsd32/netbsd32.h Tue Sep 18 10:35:04 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32.h,v 1.116.2.7 2018/09/14 09:21:33 pgoyette Exp $ */ +/* $NetBSD: netbsd32.h,v 1.116.2.8 2018/09/18 10:35:04 pgoyette Exp $ */ /* * Copyright (c) 1998, 2001, 2008, 2015 Matthew R. Green @@ -46,6 +46,7 @@ #include <sys/shm.h> #include <sys/ucontext.h> #include <sys/ucred.h> +#include <sys/compat_hook.h> #include <compat/sys/ucontext.h> #include <compat/sys/mount.h> #include <compat/sys/signal.h> @@ -1176,8 +1177,8 @@ extern const char * const netbsd32_sysca extern struct sysctlnode netbsd32_sysctl_root; struct netbsd32_modctl_args; -extern int (*vec_compat32_80_modctl)(struct lwp *, - const struct netbsd32_modctl_args *, register_t *); +COMPAT_HOOK(compat32_80_modctl_hook, + (struct lwp *, const struct netbsd32_modctl_args *, register_t *)); /* * Finally, declare emul_netbsd32 as this is needed in lots of Index: src/sys/compat/netbsd32/netbsd32_compat_80.c diff -u src/sys/compat/netbsd32/netbsd32_compat_80.c:1.1.2.3 src/sys/compat/netbsd32/netbsd32_compat_80.c:1.1.2.4 --- src/sys/compat/netbsd32/netbsd32_compat_80.c:1.1.2.3 Tue Sep 11 09:22:51 2018 +++ src/sys/compat/netbsd32/netbsd32_compat_80.c Tue Sep 18 10:35:04 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_compat_80.c,v 1.1.2.3 2018/09/11 09:22:51 pgoyette Exp $ */ +/* $NetBSD: netbsd32_compat_80.c,v 1.1.2.4 2018/09/18 10:35:04 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_80.c,v 1.1.2.3 2018/09/11 09:22:51 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_80.c,v 1.1.2.4 2018/09/18 10:35:04 pgoyette Exp $"); #include <sys/param.h> #include <sys/dirent.h> @@ -175,22 +175,22 @@ netbsd32_80_modctl(struct lwp *lwp, cons return error; } +COMPAT_SET_HOOK(compat32_80_modctl_hook, "nb32_modctl_80", netbsd32_80_modctl); +COMPAT_UNSET_HOOK(compat32_80_modctl_hook); + MODULE(MODULE_CLASS_EXEC, compat_netbsd32_80, "compat_netbsd32,compat_80"); static int compat_netbsd32_80_modcmd(modcmd_t cmd, void *arg) { -static int (*orig_netbsd32_80_modctl)(struct lwp *, - const struct netbsd32_modctl_args *, register_t *); switch (cmd) { case MODULE_CMD_INIT: - orig_netbsd32_80_modctl = vec_compat32_80_modctl; - vec_compat32_80_modctl = netbsd32_80_modctl; + compat32_80_modctl_hook_set(); return 0; case MODULE_CMD_FINI: - vec_compat32_80_modctl = orig_netbsd32_80_modctl; + compat32_80_modctl_hook_unset(); return 0; default: Index: src/sys/compat/netbsd32/netbsd32_mod.c diff -u src/sys/compat/netbsd32/netbsd32_mod.c:1.13.16.11 src/sys/compat/netbsd32/netbsd32_mod.c:1.13.16.12 --- src/sys/compat/netbsd32/netbsd32_mod.c:1.13.16.11 Fri Sep 14 08:38:37 2018 +++ src/sys/compat/netbsd32/netbsd32_mod.c Tue Sep 18 10:35:04 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_mod.c,v 1.13.16.11 2018/09/14 08:38:37 pgoyette Exp $ */ +/* $NetBSD: netbsd32_mod.c,v 1.13.16.12 2018/09/18 10:35:04 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_mod.c,v 1.13.16.11 2018/09/14 08:38:37 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_mod.c,v 1.13.16.12 2018/09/18 10:35:04 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_execfmt.h" @@ -44,6 +44,7 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_mod #include <sys/module.h> #include <sys/exec.h> #include <sys/exec_elf.h> +#include <sys/compat_hook.h> #include <compat/netbsd32/netbsd32_sysctl.h> #include <compat/netbsd32/netbsd32_exec.h> @@ -51,11 +52,7 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_mod #define ELF32_AUXSIZE (howmany(ELF_AUX_ENTRIES * sizeof(Aux32Info), \ sizeof(Elf32_Addr)) + MAXPATHLEN + ALIGN(1)) -int compat32_80_modctl_compat_stub(struct lwp *, - const struct netbsd32_modctl_args *, register_t *); - -int (*vec_compat32_80_modctl)(struct lwp *, - const struct netbsd32_modctl_args *, register_t *); +struct compat32_80_modctl_hook_t compat32_80_modctl_hook; # define DEPS1 "ksem,coredump,compat_util" @@ -113,21 +110,18 @@ compat_netbsd32_modcmd(modcmd_t cmd, voi __arraycount(netbsd32_execsw)); if (error == 0) { netbsd32_sysctl_init(); - vec_compat32_80_modctl = compat32_80_modctl_compat_stub; netbsd32_machdep_md_init(); } return error; case MODULE_CMD_FINI: netbsd32_machdep_md_fini(); - vec_compat32_80_modctl = (void *)enosys; netbsd32_sysctl_fini(); error = exec_remove(netbsd32_execsw, __arraycount(netbsd32_execsw)); if (error) { netbsd32_sysctl_init(); - vec_compat32_80_modctl = compat32_80_modctl_compat_stub; netbsd32_machdep_md_init(); } return error; Index: src/sys/compat/netbsd32/netbsd32_module.c diff -u src/sys/compat/netbsd32/netbsd32_module.c:1.6.2.6 src/sys/compat/netbsd32/netbsd32_module.c:1.6.2.7 --- src/sys/compat/netbsd32/netbsd32_module.c:1.6.2.6 Fri Sep 14 08:53:22 2018 +++ src/sys/compat/netbsd32/netbsd32_module.c Tue Sep 18 10:35:04 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_module.c,v 1.6.2.6 2018/09/14 08:53:22 pgoyette Exp $ */ +/* $NetBSD: netbsd32_module.c,v 1.6.2.7 2018/09/18 10:35:04 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_module.c,v 1.6.2.6 2018/09/14 08:53:22 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_module.c,v 1.6.2.7 2018/09/18 10:35:04 pgoyette Exp $"); #include <sys/param.h> #include <sys/dirent.h> @@ -200,6 +200,18 @@ compat32_80_modctl_compat_stub(struct lw return EPASSTHROUGH; } +/* Module hook for netbsd32_80_modctl */ +COMPAT_CALL_HOOK_DECL(compat32_80_modctl_hook, f, + (struct lwp *lwp, const struct netbsd32_modctl_args *uap, + register_t *result), + (lwp, uap, result), + enosys()); +COMPAT_CALL_HOOK(compat32_80_modctl_hook, f, + (struct lwp *lwp, const struct netbsd32_modctl_args *uap, + register_t *result), + (lwp, uap, result), + enosys()); + int netbsd32_modctl(struct lwp *lwp, const struct netbsd32_modctl_args *uap, register_t *result) @@ -219,8 +231,8 @@ netbsd32_modctl(struct lwp *lwp, const s arg = SCARG_P32(uap, arg); - error = (*vec_compat32_80_modctl)(lwp, uap, result); - if (error != EPASSTHROUGH) + error = compat32_80_modctl_hook_f_call(lwp, uap, result); + if (error != EPASSTHROUGH && error != ENOSYS) return error; switch (SCARG(uap, cmd)) {