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)) {

Reply via email to