Module Name:    src
Committed By:   pgoyette
Date:           Mon Oct 15 22:06:16 UTC 2018

Modified Files:
        src/sys/compat/common [pgoyette-compat]: compat_sysv_50_mod.c
            compat_sysv_mod.h
        src/sys/kern [pgoyette-compat]: compat_stub.c sysv_ipc.c
        src/sys/sys [pgoyette-compat]: compat_stub.h

Log Message:
Convert the final non-MP-safe "vectored" compat routine to use the
MP-safe mechanism.


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/compat/common/compat_sysv_50_mod.c \
    src/sys/compat/common/compat_sysv_mod.h
cvs rdiff -u -r1.1.2.31 -r1.1.2.32 src/sys/kern/compat_stub.c
cvs rdiff -u -r1.32.16.5 -r1.32.16.6 src/sys/kern/sysv_ipc.c
cvs rdiff -u -r1.1.2.43 -r1.1.2.44 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/compat_sysv_50_mod.c
diff -u src/sys/compat/common/compat_sysv_50_mod.c:1.1.2.1 src/sys/compat/common/compat_sysv_50_mod.c:1.1.2.2
--- src/sys/compat/common/compat_sysv_50_mod.c:1.1.2.1	Tue Apr 17 23:06:11 2018
+++ src/sys/compat/common/compat_sysv_50_mod.c	Mon Oct 15 22:06:16 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_sysv_50_mod.c,v 1.1.2.1 2018/04/17 23:06:11 pgoyette Exp $	*/
+/*	$NetBSD: compat_sysv_50_mod.c,v 1.1.2.2 2018/10/15 22:06:16 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: compat_sysv_50_mod.c,v 1.1.2.1 2018/04/17 23:06:11 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_sysv_50_mod.c,v 1.1.2.2 2018/10/15 22:06:16 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -43,6 +43,7 @@ __KERNEL_RCSID(0, "$NetBSD: compat_sysv_
 #include <sys/syscallargs.h>
 #include <sys/syscallvar.h>
 #include <sys/sysctl.h>
+#include <sys/compat_stub.h>
 
 #include <compat/common/compat_sysv_mod.h>
 
@@ -63,11 +64,12 @@ static const struct syscall_package comp
 	{ 0, 0, NULL }
 };
 
+MODULE_SET_HOOK(sysvipc50_sysctl_hook, "sysv50", sysctl_kern_sysvipc50);
+MODULE_UNSET_HOOK(sysvipc50_sysctl_hook);
+
 static int
 compat_sysv_50_modcmd(modcmd_t cmd, void *arg)
 {
-	static int (*orig_sysvipc50_sysctl)(SYSCTLFN_PROTO);
-
 	int error = 0;
 
 	switch (cmd) {
@@ -76,16 +78,15 @@ compat_sysv_50_modcmd(modcmd_t cmd, void
 		if (error != 0) {
 			break;
 		}
-		orig_sysvipc50_sysctl = vec_sysvipc50_sysctl;
-		vec_sysvipc50_sysctl = sysctl_kern_sysvipc50;
+		sysvipc50_sysctl_hook_set();
 		break;
 
 	case MODULE_CMD_FINI:
-		vec_sysvipc50_sysctl = orig_sysvipc50_sysctl;
 		error = syscall_disestablish(NULL, compat_sysv_50_syscalls);
 		if (error != 0) {
 			break;
 		}
+		sysvipc50_sysctl_hook_unset();
 		break;
 
 	default:
Index: src/sys/compat/common/compat_sysv_mod.h
diff -u src/sys/compat/common/compat_sysv_mod.h:1.1.2.1 src/sys/compat/common/compat_sysv_mod.h:1.1.2.2
--- src/sys/compat/common/compat_sysv_mod.h:1.1.2.1	Tue Apr 17 21:59:27 2018
+++ src/sys/compat/common/compat_sysv_mod.h	Mon Oct 15 22:06:16 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_sysv_mod.h,v 1.1.2.1 2018/04/17 21:59:27 pgoyette Exp $	*/
+/*	$NetBSD: compat_sysv_mod.h,v 1.1.2.2 2018/10/15 22:06:16 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -34,8 +34,6 @@
 
 #include <sys/sysctl.h>
 
-extern int (*vec_sysvipc50_sysctl)(SYSCTLFN_PROTO);
-
 int sysctl_kern_sysvipc50(SYSCTLFN_PROTO);
 
 #endif /* _COMPAT_COMMON_SYSV_IPC_MOD_H_ */

Index: src/sys/kern/compat_stub.c
diff -u src/sys/kern/compat_stub.c:1.1.2.31 src/sys/kern/compat_stub.c:1.1.2.32
--- src/sys/kern/compat_stub.c:1.1.2.31	Mon Oct 15 11:57:05 2018
+++ src/sys/kern/compat_stub.c	Mon Oct 15 22:06:16 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.c,v 1.1.2.31 2018/10/15 11:57:05 pgoyette Exp $	*/
+/* $NetBSD: compat_stub.c,v 1.1.2.32 2018/10/15 22:06:16 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -203,3 +203,8 @@ struct compat_10_openat_hook_t compat_10
  */
 struct compat_70_unp_hook_t compat_70_unp_hook;
 
+/*
+ * Hook for sysvipc50_sysctl
+ */
+struct sysvipc50_sysctl_hook_t sysvipc50_sysctl_hook;
+

Index: src/sys/kern/sysv_ipc.c
diff -u src/sys/kern/sysv_ipc.c:1.32.16.5 src/sys/kern/sysv_ipc.c:1.32.16.6
--- src/sys/kern/sysv_ipc.c:1.32.16.5	Thu Sep  6 06:56:42 2018
+++ src/sys/kern/sysv_ipc.c	Mon Oct 15 22:06:16 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysv_ipc.c,v 1.32.16.5 2018/09/06 06:56:42 pgoyette Exp $	*/
+/*	$NetBSD: sysv_ipc.c,v 1.32.16.6 2018/10/15 22:06:16 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v 1.32.16.5 2018/09/06 06:56:42 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v 1.32.16.6 2018/10/15 22:06:16 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sysv.h"
@@ -61,11 +61,10 @@ __KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v
 #include <sys/stat.h>
 #include <sys/sysctl.h>
 #include <sys/kauth.h>
+#include <sys/compat_stub.h>
 
 #include <compat/common/compat_sysv_mod.h>	/* for sysctl routine vector */
 
-int (*vec_sysvipc50_sysctl)(SYSCTLFN_PROTO);
-
 /*
  * Values in support of System V compatible shared memory.	XXX
  * (originally located in sys/conf/param.c)
@@ -342,17 +341,16 @@ sysvipcinit(void)
 	    sysvipc_listener_cb, NULL);
 }
 
-/* Vector the old 50 sysctl stuff */
- 
-static int stub_sysvipc50_sysctl(SYSCTLFN_PROTO);
-int (*vec_sysvipc50_sysctl)(SYSCTLFN_PROTO) = stub_sysvipc50_sysctl;
-
 static int
 stub_sysvipc50_sysctl(SYSCTLFN_ARGS)
 {
 	return EPASSTHROUGH;
 }
 
+MODULE_CALL_HOOK_DECL(sysvipc50_sysctl_hook, f, (SYSCTLFN_PROTO));
+MODULE_CALL_HOOK(sysvipc50_sysctl_hook, f, (SYSCTLFN_ARGS),
+    (SYSCTLFN_CALL(rnode)), stub_sysvipc50_sysctl(SYSCTLFN_CALL(rnode)));
+
 static int
 sysctl_kern_sysvipc(SYSCTLFN_ARGS)
 {
@@ -379,7 +377,7 @@ sysctl_kern_sysvipc(SYSCTLFN_ARGS)
  * to the non-compat sysctl code.
  */
 
-	error = (*vec_sysvipc50_sysctl)(SYSCTLFN_CALL(rnode));
+	error = sysvipc50_sysctl_hook_f_call(SYSCTLFN_CALL(rnode));
 	if (error != EPASSTHROUGH)
 		return error;
 

Index: src/sys/sys/compat_stub.h
diff -u src/sys/sys/compat_stub.h:1.1.2.43 src/sys/sys/compat_stub.h:1.1.2.44
--- src/sys/sys/compat_stub.h:1.1.2.43	Mon Oct 15 11:57:05 2018
+++ src/sys/sys/compat_stub.h	Mon Oct 15 22:06:16 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.h,v 1.1.2.43 2018/10/15 11:57:05 pgoyette Exp $	*/
+/* $NetBSD: compat_stub.h,v 1.1.2.44 2018/10/15 22:06:16 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -257,4 +257,10 @@ MODULE_HOOK(compat_10_openat_hook, (stru
 struct mbuf;
 MODULE_HOOK(compat_70_unp_hook, (struct mbuf **, struct lwp *, struct mbuf *));
 
+/*
+ * Hook for sysvipc50 sysctl
+ */
+#include <sys/sysctl.h>
+MODULE_HOOK(sysvipc50_sysctl_hook, (SYSCTLFN_PROTO));
+
 #endif	/* _SYS_COMPAT_STUB_H */

Reply via email to