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 */