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.

Reply via email to