Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 24 May 2015 15:51:19 +0000 (UTC)
From:      Dmitry Chagin <dchagin@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r283421 - in head/sys: amd64/linux32 compat/linprocfs compat/linsysfs compat/linux conf i386/linux modules modules/linprocfs modules/linsysfs modules/linux modules/linux_common
Message-ID:  <201505241551.t4OFpJEa065599@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dchagin
Date: Sun May 24 15:51:18 2015
New Revision: 283421
URL: https://svnweb.freebsd.org/changeset/base/283421

Log:
  Introduce a new module linux_common.ko which is intended for the
  following primary purposes:
  
  1. Remove the dependency of linsysfs and linprocfs modules from linux.ko,
  which will be architecture specific on amd64.
  
  2. Incorporate into linux_common.ko general code for platforms on which
  we'll support two Linuxulator modules (for both instruction set - 32 & 64 bit).
  
  3. Move malloc(9) declaration to linux_common.ko, to enable getting memory
  usage statistics properly.
  
  Currently linux_common.ko incorporates a code from linux_mib.c and linux_util.c
  and linprocfs, linsysfs and linux kernel modules depend on linux_common.ko.
  
  Temporarily remove dtrace garbage from linux_mib.c and linux_util.c
  
  Differential Revision:	https://reviews.freebsd.org/D1072
  In collaboration with:	Vassilis Laganakos.
  
  Reviewed by:	trasz

Added:
  head/sys/compat/linux/linux_common.c   (contents, props changed)
  head/sys/modules/linux_common/
  head/sys/modules/linux_common/Makefile   (contents, props changed)
Modified:
  head/sys/amd64/linux32/linux.h
  head/sys/amd64/linux32/linux32_sysvec.c
  head/sys/compat/linprocfs/linprocfs.c
  head/sys/compat/linsysfs/linsysfs.c
  head/sys/compat/linux/linux_ioctl.c
  head/sys/compat/linux/linux_ioctl.h
  head/sys/compat/linux/linux_mib.c
  head/sys/compat/linux/linux_mib.h
  head/sys/compat/linux/linux_misc.c
  head/sys/compat/linux/linux_misc.h
  head/sys/compat/linux/linux_util.c
  head/sys/compat/linux/linux_util.h
  head/sys/conf/files.amd64
  head/sys/i386/linux/linux.h
  head/sys/i386/linux/linux_sysvec.c
  head/sys/modules/Makefile
  head/sys/modules/linprocfs/Makefile
  head/sys/modules/linsysfs/Makefile
  head/sys/modules/linux/Makefile

Modified: head/sys/amd64/linux32/linux.h
==============================================================================
--- head/sys/amd64/linux32/linux.h	Sun May 24 15:48:34 2015	(r283420)
+++ head/sys/amd64/linux32/linux.h	Sun May 24 15:51:18 2015	(r283421)
@@ -46,10 +46,6 @@ extern u_char linux_debug_map[];
 			(long)td->td_proc->p_pid, (long)td->td_tid
 #define	LINUX_DTRACE	linuxulator32
 
-#ifdef MALLOC_DECLARE
-MALLOC_DECLARE(M_LINUX);
-#endif
-
 #define	LINUX32_MAXUSER		((1ul << 32) - PAGE_SIZE)
 #define	LINUX32_SHAREDPAGE	(LINUX32_MAXUSER - PAGE_SIZE)
 #define	LINUX32_USRSTACK	LINUX32_SHAREDPAGE

Modified: head/sys/amd64/linux32/linux32_sysvec.c
==============================================================================
--- head/sys/amd64/linux32/linux32_sysvec.c	Sun May 24 15:48:34 2015	(r283420)
+++ head/sys/amd64/linux32/linux32_sysvec.c	Sun May 24 15:51:18 2015	(r283421)
@@ -87,8 +87,6 @@ __FBSDID("$FreeBSD$");
 
 MODULE_VERSION(linux, 1);
 
-MALLOC_DEFINE(M_LINUX, "linux", "Linux mode structures");
-
 #define	AUXARGS_ENTRY_32(pos, id, val)	\
 	do {				\
 		suword32(pos++, id);	\
@@ -120,7 +118,6 @@ extern char _binary_linux32_locore_o_end
 extern struct sysent linux_sysent[LINUX_SYS_MAXSYSCALL];
 
 SET_DECLARE(linux_ioctl_handler_set, struct linux_ioctl_handler);
-SET_DECLARE(linux_device_handler_set, struct linux_device_handler);
 
 static int	elf_linux_fixup(register_t **stack_base,
 		    struct image_params *iparams);
@@ -976,6 +973,13 @@ static u_long	linux32_maxvmem = LINUX32_
 SYSCTL_ULONG(_compat_linux32, OID_AUTO, maxvmem, CTLFLAG_RW,
     &linux32_maxvmem, 0, "");
 
+#if defined(DEBUG)
+SYSCTL_PROC(_compat_linux32, OID_AUTO, debug,
+            CTLTYPE_STRING | CTLFLAG_RW,
+            0, 0, linux_sysctl_debug, "A",
+            "Linux debugging control");
+#endif
+
 static void
 linux32_fixlimit(struct rlimit *rl, int which)
 {
@@ -1152,7 +1156,6 @@ linux_elf_modevent(module_t mod, int typ
 	Elf32_Brandinfo **brandinfo;
 	int error;
 	struct linux_ioctl_handler **lihp;
-	struct linux_device_handler **ldhp;
 
 	error = 0;
 
@@ -1165,8 +1168,6 @@ linux_elf_modevent(module_t mod, int typ
 		if (error == 0) {
 			SET_FOREACH(lihp, linux_ioctl_handler_set)
 				linux_ioctl_register_handler(*lihp);
-			SET_FOREACH(ldhp, linux_device_handler_set)
-				linux_device_register_handler(*ldhp);
 			LIST_INIT(&futex_list);
 			mtx_init(&futex_mtx, "ftllk", NULL, MTX_DEF);
 			linux_exit_tag = EVENTHANDLER_REGISTER(process_exit,
@@ -1175,7 +1176,6 @@ linux_elf_modevent(module_t mod, int typ
 			    linux_proc_exec, NULL, 1000);
 			linux_thread_dtor_tag = EVENTHANDLER_REGISTER(thread_dtor,
 			    linux_thread_dtor, NULL, EVENTHANDLER_PRI_ANY);
-			linux_osd_jail_register();
 			stclohz = (stathz ? stathz : hz);
 			if (bootverbose)
 				printf("Linux ELF exec handler installed\n");
@@ -1196,13 +1196,10 @@ linux_elf_modevent(module_t mod, int typ
 		if (error == 0) {
 			SET_FOREACH(lihp, linux_ioctl_handler_set)
 				linux_ioctl_unregister_handler(*lihp);
-			SET_FOREACH(ldhp, linux_device_handler_set)
-				linux_device_unregister_handler(*ldhp);
 			mtx_destroy(&futex_mtx);
 			EVENTHANDLER_DEREGISTER(process_exit, linux_exit_tag);
 			EVENTHANDLER_DEREGISTER(process_exec, linux_exec_tag);
 			EVENTHANDLER_DEREGISTER(thread_dtor, linux_thread_dtor_tag);
-			linux_osd_jail_deregister();
 			if (bootverbose)
 				printf("Linux ELF exec handler removed\n");
 		} else
@@ -1221,3 +1218,4 @@ static moduledata_t linux_elf_mod = {
 };
 
 DECLARE_MODULE_TIED(linuxelf, linux_elf_mod, SI_SUB_EXEC, SI_ORDER_ANY);
+MODULE_DEPEND(linuxelf, linux_common, 1, 1, 1);

Modified: head/sys/compat/linprocfs/linprocfs.c
==============================================================================
--- head/sys/compat/linprocfs/linprocfs.c	Sun May 24 15:48:34 2015	(r283420)
+++ head/sys/compat/linprocfs/linprocfs.c	Sun May 24 15:51:18 2015	(r283421)
@@ -39,8 +39,6 @@
  *	@(#)procfs_status.c	8.4 (Berkeley) 6/15/94
  */
 
-#include "opt_compat.h"
-
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
@@ -69,6 +67,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/socket.h>
 #include <sys/syscallsubr.h>
 #include <sys/sysctl.h>
+#include <sys/sysent.h>
 #include <sys/systm.h>
 #include <sys/time.h>
 #include <sys/tty.h>
@@ -80,7 +79,7 @@ __FBSDID("$FreeBSD$");
 
 #include <net/if.h>
 #include <net/if_var.h>
-#include <net/vnet.h>
+#include <net/if_types.h>
 
 #include <vm/vm.h>
 #include <vm/vm_extern.h>
@@ -100,11 +99,6 @@ __FBSDID("$FreeBSD$");
 #include <machine/md_var.h>
 #endif /* __i386__ || __amd64__ */
 
-#ifdef COMPAT_FREEBSD32
-#include <compat/freebsd32/freebsd32_util.h>
-#endif
-
-#include <compat/linux/linux_ioctl.h>
 #include <compat/linux/linux_mib.h>
 #include <compat/linux/linux_misc.h>
 #include <compat/linux/linux_util.h>
@@ -1114,6 +1108,35 @@ linprocfs_doprocmaps(PFS_FILL_ARGS)
 }
 
 /*
+ * Criteria for interface name translation
+ */
+#define IFP_IS_ETH(ifp) (ifp->if_type == IFT_ETHER)
+
+static int
+linux_ifname(struct ifnet *ifp, char *buffer, size_t buflen)
+{
+	struct ifnet *ifscan;
+	int ethno;
+
+	IFNET_RLOCK_ASSERT();
+
+	/* Short-circuit non ethernet interfaces */
+	if (!IFP_IS_ETH(ifp))
+		return (strlcpy(buffer, ifp->if_xname, buflen));
+
+	/* Determine the (relative) unit number for ethernet interfaces */
+	ethno = 0;
+	TAILQ_FOREACH(ifscan, &V_ifnet, if_link) {
+		if (ifscan == ifp)
+			return (snprintf(buffer, buflen, "eth%d", ethno));
+		if (IFP_IS_ETH(ifscan))
+			ethno++;
+	}
+
+	return (0);
+}
+
+/*
  * Filler function for proc/net/dev
  */
 static int
@@ -1261,8 +1284,6 @@ linprocfs_doscsiscsi(PFS_FILL_ARGS)
 	return (0);
 }
 
-extern struct cdevsw *cdevsw[];
-
 /*
  * Filler function for proc/devices
  */
@@ -1477,7 +1498,11 @@ linprocfs_uninit(PFS_INIT_ARGS)
 }
 
 PSEUDOFS(linprocfs, 1, 0);
+#if defined(__amd64__)
+MODULE_DEPEND(linprocfs, linux_common, 1, 1, 1);
+#else
 MODULE_DEPEND(linprocfs, linux, 1, 1, 1);
+#endif
 MODULE_DEPEND(linprocfs, procfs, 1, 1, 1);
 MODULE_DEPEND(linprocfs, sysvmsg, 1, 1, 1);
 MODULE_DEPEND(linprocfs, sysvsem, 1, 1, 1);

Modified: head/sys/compat/linsysfs/linsysfs.c
==============================================================================
--- head/sys/compat/linsysfs/linsysfs.c	Sun May 24 15:48:34 2015	(r283420)
+++ head/sys/compat/linsysfs/linsysfs.c	Sun May 24 15:51:18 2015	(r283421)
@@ -62,12 +62,6 @@ __FBSDID("$FreeBSD$");
 
 #include <machine/bus.h>
 
-#include "opt_compat.h"
-#ifdef COMPAT_LINUX32				/* XXX */
-#include <machine/../linux32/linux.h>
-#else
-#include <machine/../linux/linux.h>
-#endif
 #include <compat/linux/linux_ioctl.h>
 #include <compat/linux/linux_mib.h>
 #include <compat/linux/linux_util.h>
@@ -282,4 +276,8 @@ linsysfs_uninit(PFS_INIT_ARGS)
 }
 
 PSEUDOFS(linsysfs, 1, 0);
+#if defined(__amd64__)
+MODULE_DEPEND(linsysfs, linux_common, 1, 1, 1);
+#else
 MODULE_DEPEND(linsysfs, linux, 1, 1, 1);
+#endif

Added: head/sys/compat/linux/linux_common.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/compat/linux/linux_common.c	Sun May 24 15:51:18 2015	(r283421)
@@ -0,0 +1,74 @@
+/*-
+ * Copyright (c) 2014 Vassilis Laganakos
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/module.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+#include <sys/types.h>
+#include <sys/kernel.h>
+#include <sys/proc.h>
+
+#include <compat/linux/linux_mib.h>
+#include <compat/linux/linux_util.h>
+
+MODULE_VERSION(linux_common, 1);
+
+SET_DECLARE(linux_device_handler_set, struct linux_device_handler);
+
+
+static int
+linux_common_modevent(module_t mod, int type, void *data)
+{
+	struct linux_device_handler **ldhp;
+
+	switch(type) {
+	case MOD_LOAD:
+		linux_osd_jail_register();
+		SET_FOREACH(ldhp, linux_device_handler_set)
+			linux_device_register_handler(*ldhp);
+		break;
+	case MOD_UNLOAD:
+		linux_osd_jail_deregister();
+		SET_FOREACH(ldhp, linux_device_handler_set)
+			linux_device_unregister_handler(*ldhp);
+		break;
+	default:
+		return (EOPNOTSUPP);
+	}
+	return (0);
+}
+
+static moduledata_t linux_common_mod = {
+	"linuxcommon",
+	linux_common_modevent,
+	0
+};
+
+DECLARE_MODULE(linuxcommon, linux_common_mod, SI_SUB_EXEC, SI_ORDER_ANY);

Modified: head/sys/compat/linux/linux_ioctl.c
==============================================================================
--- head/sys/compat/linux/linux_ioctl.c	Sun May 24 15:48:34 2015	(r283420)
+++ head/sys/compat/linux/linux_ioctl.c	Sun May 24 15:51:18 2015	(r283421)
@@ -69,7 +69,6 @@ __FBSDID("$FreeBSD$");
 #include <net/if_var.h>
 #include <net/if_dl.h>
 #include <net/if_types.h>
-#include <net/vnet.h>
 
 #include <dev/usb/usb_ioctl.h>
 
@@ -2109,34 +2108,6 @@ linux_ioctl_console(struct thread *td, s
 #define IFP_IS_ETH(ifp) (ifp->if_type == IFT_ETHER)
 
 /*
- * Interface function used by linprocfs (at the time of writing). It's not
- * used by the Linuxulator itself.
- */
-int
-linux_ifname(struct ifnet *ifp, char *buffer, size_t buflen)
-{
-	struct ifnet *ifscan;
-	int ethno;
-
-	IFNET_RLOCK_ASSERT();
-
-	/* Short-circuit non ethernet interfaces */
-	if (!IFP_IS_ETH(ifp))
-		return (strlcpy(buffer, ifp->if_xname, buflen));
-
-	/* Determine the (relative) unit number for ethernet interfaces */
-	ethno = 0;
-	TAILQ_FOREACH(ifscan, &V_ifnet, if_link) {
-		if (ifscan == ifp)
-			return (snprintf(buffer, buflen, "eth%d", ethno));
-		if (IFP_IS_ETH(ifscan))
-			ethno++;
-	}
-
-	return (0);
-}
-
-/*
  * Translate a Linux interface name to a FreeBSD interface name,
  * and return the associated ifnet structure
  * bsdname and lxname need to be least IFNAMSIZ bytes long, but

Modified: head/sys/compat/linux/linux_ioctl.h
==============================================================================
--- head/sys/compat/linux/linux_ioctl.h	Sun May 24 15:48:34 2015	(r283420)
+++ head/sys/compat/linux/linux_ioctl.h	Sun May 24 15:51:18 2015	(r283421)
@@ -581,13 +581,6 @@
 #define	LINUX_IOCTL_DRM_MAX	0x64ff
 
 /*
- * This doesn't really belong here, but I can't think of a better
- * place to put it.
- */
-struct ifnet;
-int		 linux_ifname(struct ifnet *, char *, size_t);
-
-/*
  * video
  */
 #define LINUX_VIDIOCGCAP		0x7601

Modified: head/sys/compat/linux/linux_mib.c
==============================================================================
--- head/sys/compat/linux/linux_mib.c	Sun May 24 15:48:34 2015	(r283420)
+++ head/sys/compat/linux/linux_mib.c	Sun May 24 15:51:18 2015	(r283421)
@@ -29,8 +29,6 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "opt_compat.h"
-
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/sdt.h>
@@ -41,85 +39,11 @@ __FBSDID("$FreeBSD$");
 #include <sys/mount.h>
 #include <sys/jail.h>
 #include <sys/lock.h>
-#include <sys/mutex.h>
 #include <sys/sx.h>
 
-#ifdef COMPAT_LINUX32
-#include <machine/../linux32/linux.h>
-#else
-#include <machine/../linux/linux.h>
-#endif
-#include <compat/linux/linux_dtrace.h>
 #include <compat/linux/linux_mib.h>
 #include <compat/linux/linux_misc.h>
 
-/* DTrace init */
-LIN_SDT_PROVIDER_DECLARE(LINUX_DTRACE);
-
-/**
- * DTrace probes in this module.
- */
-LIN_SDT_PROBE_DEFINE0(mib, linux_sysctl_osname, entry);
-LIN_SDT_PROBE_DEFINE1(mib, linux_sysctl_osname, sysctl_string_error, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_sysctl_osname, return, "int");
-
-LIN_SDT_PROBE_DEFINE0(mib, linux_sysctl_osrelease, entry);
-LIN_SDT_PROBE_DEFINE1(mib, linux_sysctl_osrelease, sysctl_string_error, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_sysctl_osrelease, return, "int");
-LIN_SDT_PROBE_DEFINE0(mib, linux_sysctl_oss_version, entry);
-LIN_SDT_PROBE_DEFINE1(mib, linux_sysctl_oss_version, sysctl_string_error,
-    "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_sysctl_oss_version, return, "int");
-LIN_SDT_PROBE_DEFINE2(mib, linux_map_osrel, entry, "char *", "int *");
-LIN_SDT_PROBE_DEFINE1(mib, linux_map_osrel, return, "int");
-LIN_SDT_PROBE_DEFINE2(mib, linux_get_prison, entry, "struct prison *",
-    "struct prison **");
-LIN_SDT_PROBE_DEFINE1(mib, linux_get_prison, return, "struct linux_prison *");
-LIN_SDT_PROBE_DEFINE2(mib, linux_alloc_prison, entry, "struct prison *",
-    "struct linux_prison **");
-LIN_SDT_PROBE_DEFINE1(mib, linux_alloc_prison, return, "int");
-LIN_SDT_PROBE_DEFINE2(mib, linux_prison_create, entry, "void *", "void *");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_create, vfs_copyopt_error, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_create, return, "int");
-LIN_SDT_PROBE_DEFINE2(mib, linux_prison_check, entry, "void *", "void *");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_check, vfs_copyopt_error, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_check, vfs_getopt_error, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_check, return, "int");
-LIN_SDT_PROBE_DEFINE2(mib, linux_prison_set, entry, "void *", "void *");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_set, vfs_copyopt_error, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_set, vfs_getopt_error, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_set, return, "int");
-LIN_SDT_PROBE_DEFINE2(mib, linux_prison_get, entry, "void *", "void *");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_get, vfs_setopt_error, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_get, vfs_setopts_error, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_get, return, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_prison_destructor, entry, "void *");
-LIN_SDT_PROBE_DEFINE0(mib, linux_prison_destructor, return);
-LIN_SDT_PROBE_DEFINE0(mib, linux_osd_jail_register, entry);
-LIN_SDT_PROBE_DEFINE0(mib, linux_osd_jail_register, return);
-LIN_SDT_PROBE_DEFINE0(mib, linux_osd_jail_deregister, entry);
-LIN_SDT_PROBE_DEFINE0(mib, linux_osd_jail_deregister, return);
-LIN_SDT_PROBE_DEFINE2(mib, linux_get_osname, entry, "struct thread *",
-    "char *");
-LIN_SDT_PROBE_DEFINE0(mib, linux_get_osname, return);
-LIN_SDT_PROBE_DEFINE2(mib, linux_set_osname, entry, "struct thread *",
-    "char *");
-LIN_SDT_PROBE_DEFINE1(mib, linux_set_osname, return, "int");
-LIN_SDT_PROBE_DEFINE2(mib, linux_get_osrelease, entry, "struct thread *",
-    "char *");
-LIN_SDT_PROBE_DEFINE0(mib, linux_get_osrelease, return);
-LIN_SDT_PROBE_DEFINE1(mib, linux_kernver, entry, "struct thread *");
-LIN_SDT_PROBE_DEFINE1(mib, linux_kernver, return, "int");
-LIN_SDT_PROBE_DEFINE2(mib, linux_set_osrelease, entry, "struct thread *",
-    "char *");
-LIN_SDT_PROBE_DEFINE1(mib, linux_set_osrelease, return, "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_get_oss_version, entry, "struct thread *");
-LIN_SDT_PROBE_DEFINE1(mib, linux_get_oss_version, return, "int");
-
-LIN_SDT_PROBE_DEFINE2(mib, linux_set_oss_version, entry, "struct thread *",
-    "int");
-LIN_SDT_PROBE_DEFINE1(mib, linux_set_oss_version, return, "int");
-
 struct linux_prison {
 	char	pr_osname[LINUX_MAX_UTSNAME];
 	char	pr_osrelease[LINUX_MAX_UTSNAME];
@@ -136,8 +60,7 @@ static struct linux_prison lprison0 = {
 
 static unsigned linux_osd_jail_slot;
 
-static SYSCTL_NODE(_compat, OID_AUTO, linux, CTLFLAG_RW, 0,
-	    "Linux mode");
+SYSCTL_NODE(_compat, OID_AUTO, linux, CTLFLAG_RW, 0, "Linux mode");
 
 static int	linux_set_osname(struct thread *td, char *osname);
 static int	linux_set_osrelease(struct thread *td, char *osrelease);
@@ -149,19 +72,12 @@ linux_sysctl_osname(SYSCTL_HANDLER_ARGS)
 	char osname[LINUX_MAX_UTSNAME];
 	int error;
 
-	LIN_SDT_PROBE0(mib, linux_sysctl_osname, entry);
-
 	linux_get_osname(req->td, osname);
 	error = sysctl_handle_string(oidp, osname, LINUX_MAX_UTSNAME, req);
-	if (error != 0 || req->newptr == NULL) {
-		LIN_SDT_PROBE1(mib, linux_sysctl_osname, sysctl_string_error,
-		    error);
-		LIN_SDT_PROBE1(mib, linux_sysctl_osname, return, error);
+	if (error != 0 || req->newptr == NULL)
 		return (error);
-	}
 	error = linux_set_osname(req->td, osname);
 
-	LIN_SDT_PROBE1(mib, linux_sysctl_osname, return, error);
 	return (error);
 }
 
@@ -176,19 +92,12 @@ linux_sysctl_osrelease(SYSCTL_HANDLER_AR
 	char osrelease[LINUX_MAX_UTSNAME];
 	int error;
 
-	LIN_SDT_PROBE0(mib, linux_sysctl_osrelease, entry);
-
 	linux_get_osrelease(req->td, osrelease);
 	error = sysctl_handle_string(oidp, osrelease, LINUX_MAX_UTSNAME, req);
-	if (error != 0 || req->newptr == NULL) {
-		LIN_SDT_PROBE1(mib, linux_sysctl_osrelease, sysctl_string_error,
-		    error);
-		LIN_SDT_PROBE1(mib, linux_sysctl_osrelease, return, error);
+	if (error != 0 || req->newptr == NULL)
 		return (error);
-	}
 	error = linux_set_osrelease(req->td, osrelease);
 
-	LIN_SDT_PROBE1(mib, linux_sysctl_osrelease, return, error);
 	return (error);
 }
 
@@ -203,19 +112,12 @@ linux_sysctl_oss_version(SYSCTL_HANDLER_
 	int oss_version;
 	int error;
 
-	LIN_SDT_PROBE0(mib, linux_sysctl_oss_version, entry);
-
 	oss_version = linux_get_oss_version(req->td);
 	error = sysctl_handle_int(oidp, &oss_version, 0, req);
-	if (error != 0 || req->newptr == NULL) {
-		LIN_SDT_PROBE1(mib, linux_sysctl_oss_version,
-		    sysctl_string_error, error);
-		LIN_SDT_PROBE1(mib, linux_sysctl_oss_version, return, error);
+	if (error != 0 || req->newptr == NULL)
 		return (error);
-	}
 	error = linux_set_oss_version(req->td, oss_version);
 
-	LIN_SDT_PROBE1(mib, linux_sysctl_oss_version, return, error);
 	return (error);
 }
 
@@ -233,37 +135,26 @@ linux_map_osrel(char *osrelease, int *os
 	char *sep, *eosrelease;
 	int len, v0, v1, v2, v;
 
-	LIN_SDT_PROBE2(mib, linux_map_osrel, entry, osrelease, osrel);
-
 	len = strlen(osrelease);
 	eosrelease = osrelease + len;
 	v0 = strtol(osrelease, &sep, 10);
-	if (osrelease == sep || sep + 1 >= eosrelease || *sep != '.') {
-		LIN_SDT_PROBE1(mib, linux_map_osrel, return, EINVAL);
+	if (osrelease == sep || sep + 1 >= eosrelease || *sep != '.')
 		return (EINVAL);
-	}
 	osrelease = sep + 1;
 	v1 = strtol(osrelease, &sep, 10);
-	if (osrelease == sep || sep + 1 >= eosrelease || *sep != '.') {
-		LIN_SDT_PROBE1(mib, linux_map_osrel, return, EINVAL);
+	if (osrelease == sep || sep + 1 >= eosrelease || *sep != '.')
 		return (EINVAL);
-	}
 	osrelease = sep + 1;
 	v2 = strtol(osrelease, &sep, 10);
-	if (osrelease == sep || sep != eosrelease) {
-		LIN_SDT_PROBE1(mib, linux_map_osrel, return, EINVAL);
+	if (osrelease == sep || sep != eosrelease)
 		return (EINVAL);
-	}
 
 	v = v0 * 1000000 + v1 * 1000 + v2;
-	if (v < 1000000) {
-		LIN_SDT_PROBE1(mib, linux_map_osrel, return, EINVAL);
+	if (v < 1000000)
 		return (EINVAL);
-	}
 
 	*osrel = v;
 
-	LIN_SDT_PROBE1(mib, linux_map_osrel, return, 0);
 	return (0);
 }
 
@@ -277,8 +168,6 @@ linux_find_prison(struct prison *spr, st
 	struct prison *pr;
 	struct linux_prison *lpr;
 
-	LIN_SDT_PROBE2(mib, linux_get_prison, entry, spr, prp);
-
 	if (!linux_osd_jail_slot)
 		/* In case osd_register failed. */
 		spr = &prison0;
@@ -293,7 +182,6 @@ linux_find_prison(struct prison *spr, st
 	}
 	*prp = pr;
 
-	LIN_SDT_PROBE1(mib, linux_get_prison, return, lpr);
 	return (lpr);
 }
 
@@ -308,8 +196,6 @@ linux_alloc_prison(struct prison *pr, st
 	struct linux_prison *lpr, *nlpr;
 	int error;
 
-	LIN_SDT_PROBE2(mib, linux_alloc_prison, entry, pr, lprp);
-
 	/* If this prison already has Linux info, return that. */
 	error = 0;
 	lpr = linux_find_prison(pr, &ppr);
@@ -343,7 +229,6 @@ linux_alloc_prison(struct prison *pr, st
 	else
 		mtx_unlock(&pr->pr_mtx);
 
-	LIN_SDT_PROBE1(mib, linux_alloc_prison, return, error);
 	return (error);
 }
 
@@ -355,26 +240,16 @@ linux_prison_create(void *obj, void *dat
 {
 	struct prison *pr = obj;
 	struct vfsoptlist *opts = data;
-	int jsys, error;
-
-	LIN_SDT_PROBE2(mib, linux_prison_create, entry, obj, data);
+	int jsys;
 
-	error = vfs_copyopt(opts, "linux", &jsys, sizeof(jsys));
-	if (error != 0) {
-		LIN_SDT_PROBE1(mib, linux_prison_create, vfs_copyopt_error,
-		    error);
-	} else if (jsys == JAIL_SYS_INHERIT) {
-		LIN_SDT_PROBE1(mib, linux_prison_create, return, 0);
+	if (vfs_copyopt(opts, "linux", &jsys, sizeof(jsys)) == 0 &&
+	    jsys == JAIL_SYS_INHERIT)
 		return (0);
-	}
 	/*
 	 * Inherit a prison's initial values from its parent
 	 * (different from JAIL_SYS_INHERIT which also inherits changes).
 	 */
-	error = linux_alloc_prison(pr, NULL);
-
-	LIN_SDT_PROBE1(mib, linux_prison_create, return, error);
-	return (error);
+	return (linux_alloc_prison(pr, NULL));
 }
 
 static int
@@ -384,80 +259,46 @@ linux_prison_check(void *obj __unused, v
 	char *osname, *osrelease;
 	int error, jsys, len, osrel, oss_version;
 
-	LIN_SDT_PROBE2(mib, linux_prison_check, entry, obj, data);
-
 	/* Check that the parameters are correct. */
 	error = vfs_copyopt(opts, "linux", &jsys, sizeof(jsys));
-	if (error != 0) {
-		LIN_SDT_PROBE1(mib, linux_prison_check, vfs_copyopt_error,
-		    error);
-	}
 	if (error != ENOENT) {
-		if (error != 0) {
-			LIN_SDT_PROBE1(mib, linux_prison_check, return, error);
+		if (error != 0)
 			return (error);
-		}
-		if (jsys != JAIL_SYS_NEW && jsys != JAIL_SYS_INHERIT) {
-			LIN_SDT_PROBE1(mib, linux_prison_check, return, EINVAL);
+		if (jsys != JAIL_SYS_NEW && jsys != JAIL_SYS_INHERIT)
 			return (EINVAL);
-		}
 	}
 	error = vfs_getopt(opts, "linux.osname", (void **)&osname, &len);
-	if (error != 0) {
-		LIN_SDT_PROBE1(mib, linux_prison_check, vfs_getopt_error,
-		    error);
-	}
 	if (error != ENOENT) {
-		if (error != 0) {
-			LIN_SDT_PROBE1(mib, linux_prison_check, return, error);
+		if (error != 0)
 			return (error);
-		}
-		if (len == 0 || osname[len - 1] != '\0') {
-			LIN_SDT_PROBE1(mib, linux_prison_check, return, EINVAL);
+		if (len == 0 || osname[len - 1] != '\0')
 			return (EINVAL);
-		}
 		if (len > LINUX_MAX_UTSNAME) {
 			vfs_opterror(opts, "linux.osname too long");
-			LIN_SDT_PROBE1(mib, linux_prison_check, return,
-			    ENAMETOOLONG);
 			return (ENAMETOOLONG);
 		}
 	}
 	error = vfs_getopt(opts, "linux.osrelease", (void **)&osrelease, &len);
-	if (error != 0) {
-		LIN_SDT_PROBE1(mib, linux_prison_check, vfs_getopt_error,
-		    error);
-	}
 	if (error != ENOENT) {
-		if (error != 0) {
-			LIN_SDT_PROBE1(mib, linux_prison_check, return, error);
+		if (error != 0)
 			return (error);
-		}
-		if (len == 0 || osrelease[len - 1] != '\0') {
-			LIN_SDT_PROBE1(mib, linux_prison_check, return, EINVAL);
+		if (len == 0 || osrelease[len - 1] != '\0')
 			return (EINVAL);
-		}
 		if (len > LINUX_MAX_UTSNAME) {
 			vfs_opterror(opts, "linux.osrelease too long");
-			LIN_SDT_PROBE1(mib, linux_prison_check, return,
-			    ENAMETOOLONG);
 			return (ENAMETOOLONG);
 		}
 		error = linux_map_osrel(osrelease, &osrel);
 		if (error != 0) {
 			vfs_opterror(opts, "linux.osrelease format error");
-			LIN_SDT_PROBE1(mib, linux_prison_check, return, error);
 			return (error);
 		}
 	}
 	error = vfs_copyopt(opts, "linux.oss_version", &oss_version,
 	    sizeof(oss_version));
-	if (error != 0)
-	    LIN_SDT_PROBE1(mib, linux_prison_check, vfs_copyopt_error, error);
 
 	if (error == ENOENT)
 		error = 0;
-	LIN_SDT_PROBE1(mib, linux_prison_check, return, error);
 	return (error);
 }
 
@@ -470,32 +311,22 @@ linux_prison_set(void *obj, void *data)
 	char *osname, *osrelease;
 	int error, gotversion, jsys, len, oss_version;
 
-	LIN_SDT_PROBE2(mib, linux_prison_set, entry, obj, data);
-
 	/* Set the parameters, which should be correct. */
 	error = vfs_copyopt(opts, "linux", &jsys, sizeof(jsys));
-	if (error != 0)
-		LIN_SDT_PROBE1(mib, linux_prison_set, vfs_copyopt_error, error);
 	if (error == ENOENT)
 		jsys = -1;
 	error = vfs_getopt(opts, "linux.osname", (void **)&osname, &len);
-	if (error != 0)
-		LIN_SDT_PROBE1(mib, linux_prison_set, vfs_getopt_error, error);
 	if (error == ENOENT)
 		osname = NULL;
 	else
 		jsys = JAIL_SYS_NEW;
 	error = vfs_getopt(opts, "linux.osrelease", (void **)&osrelease, &len);
-	if (error != 0)
-		LIN_SDT_PROBE1(mib, linux_prison_set, vfs_getopt_error, error);
 	if (error == ENOENT)
 		osrelease = NULL;
 	else
 		jsys = JAIL_SYS_NEW;
 	error = vfs_copyopt(opts, "linux.oss_version", &oss_version,
 	    sizeof(oss_version));
-	if (error != 0)
-		LIN_SDT_PROBE1(mib, linux_prison_set, vfs_copyopt_error, error);
 	if (error == ENOENT)
 		gotversion = 0;
 	else {
@@ -517,15 +348,12 @@ linux_prison_set(void *obj, void *data)
 		error = linux_alloc_prison(pr, &lpr);
 		if (error) {
 			mtx_unlock(&pr->pr_mtx);
-			LIN_SDT_PROBE1(mib, linux_prison_set, return, error);
 			return (error);
 		}
 		if (osrelease) {
 			error = linux_map_osrel(osrelease, &lpr->pr_osrel);
 			if (error) {
 				mtx_unlock(&pr->pr_mtx);
-				LIN_SDT_PROBE1(mib, linux_prison_set, return,
-				    error);
 				return (error);
 			}
 			strlcpy(lpr->pr_osrelease, osrelease,
@@ -538,7 +366,6 @@ linux_prison_set(void *obj, void *data)
 		mtx_unlock(&pr->pr_mtx);
 	}
 
-	LIN_SDT_PROBE1(mib, linux_prison_set, return, 0);
 	return (0);
 }
 
@@ -561,74 +388,44 @@ linux_prison_get(void *obj, void *data)
 
 	static int version0;
 
-	LIN_SDT_PROBE2(mib, linux_prison_get, entry, obj, data);
-
 	/* See if this prison is the one with the Linux info. */
 	lpr = linux_find_prison(pr, &ppr);
 	i = (ppr == pr) ? JAIL_SYS_NEW : JAIL_SYS_INHERIT;
 	error = vfs_setopt(opts, "linux", &i, sizeof(i));
-	if (error != 0) {
-		LIN_SDT_PROBE1(mib, linux_prison_get, vfs_setopt_error, error);
-		if (error != ENOENT)
-			goto done;
-	}
+	if (error != 0 && error != ENOENT)
+		goto done;
 	if (i) {
 		error = vfs_setopts(opts, "linux.osname", lpr->pr_osname);
-		if (error != 0) {
-			LIN_SDT_PROBE1(mib, linux_prison_get, vfs_setopts_error,
-			    error);
-			if (error != ENOENT)
-				goto done;
-		}
+		if (error != 0 && error != ENOENT)
+			goto done;
 		error = vfs_setopts(opts, "linux.osrelease", lpr->pr_osrelease);
-		if (error != 0) {
-			LIN_SDT_PROBE1(mib, linux_prison_get, vfs_setopts_error,
-			    error);
-			if (error != ENOENT)
-				goto done;
-		}
+		if (error != 0 && error != ENOENT)
+			goto done;
 		error = vfs_setopt(opts, "linux.oss_version",
 		    &lpr->pr_oss_version, sizeof(lpr->pr_oss_version));
-		if (error != 0) {
-			LIN_SDT_PROBE1(mib, linux_prison_get, vfs_setopt_error,
-			    error);
-			if(error != ENOENT)
-				goto done;
-		}
+		if (error != 0 && error != ENOENT)
+			goto done;
 	} else {
 		/*
 		 * If this prison is inheriting its Linux info, report
 		 * empty/zero parameters.
 		 */
 		error = vfs_setopts(opts, "linux.osname", "");
-		if (error != 0) {
-			LIN_SDT_PROBE1(mib, linux_prison_get, vfs_setopts_error,
-			    error);
-			if(error != ENOENT)
-				goto done;
-		}
+		if (error != 0 && error != ENOENT)
+			goto done;
 		error = vfs_setopts(opts, "linux.osrelease", "");
-		if (error != 0) {
-			LIN_SDT_PROBE1(mib, linux_prison_get, vfs_setopts_error,
-			    error);
-			if(error != ENOENT)
-				goto done;
-		}
+		if (error != 0 && error != ENOENT)
+			goto done;
 		error = vfs_setopt(opts, "linux.oss_version", &version0,
 		    sizeof(lpr->pr_oss_version));
-		if (error != 0) {
-			LIN_SDT_PROBE1(mib, linux_prison_get, vfs_setopt_error,
-			    error);
-			if(error != ENOENT)
-				goto done;
-		}
+		if (error != 0 && error != ENOENT)
+			goto done;
 	}
 	error = 0;
 
  done:
 	mtx_unlock(&ppr->pr_mtx);
 
-	LIN_SDT_PROBE1(mib, linux_prison_get, return, error);
 	return (error);
 }
 
@@ -636,9 +433,7 @@ static void
 linux_prison_destructor(void *data)
 {
 
-	LIN_SDT_PROBE1(mib, linux_prison_destructor, entry, data);
 	free(data, M_PRISON);
-	LIN_SDT_PROBE0(mib, linux_prison_destructor, return);
 }
 
 void
@@ -652,8 +447,6 @@ linux_osd_jail_register(void)
 	    [PR_METHOD_CHECK] =		linux_prison_check
 	};
 
-	LIN_SDT_PROBE0(mib, linux_osd_jail_register, entry);
-
 	linux_osd_jail_slot =
 	    osd_jail_register(linux_prison_destructor, methods);
 	if (linux_osd_jail_slot > 0) {
@@ -663,20 +456,14 @@ linux_osd_jail_register(void)
 			(void)linux_alloc_prison(pr, NULL);
 		sx_xunlock(&allprison_lock);
 	}
-
-	LIN_SDT_PROBE0(mib, linux_osd_jail_register, return);
 }
 
 void
 linux_osd_jail_deregister(void)
 {
 
-	LIN_SDT_PROBE0(mib, linux_osd_jail_register, entry);
-
 	if (linux_osd_jail_slot)
 		osd_jail_deregister(linux_osd_jail_slot);
-
-	LIN_SDT_PROBE0(mib, linux_osd_jail_register, return);
 }
 
 void
@@ -685,13 +472,9 @@ linux_get_osname(struct thread *td, char
 	struct prison *pr;
 	struct linux_prison *lpr;
 
-	LIN_SDT_PROBE2(mib, linux_get_osname, entry, td, dst);
-
 	lpr = linux_find_prison(td->td_ucred->cr_prison, &pr);
 	bcopy(lpr->pr_osname, dst, LINUX_MAX_UTSNAME);
 	mtx_unlock(&pr->pr_mtx);
-
-	LIN_SDT_PROBE0(mib, linux_get_osname, return);
 }
 
 static int
@@ -700,13 +483,10 @@ linux_set_osname(struct thread *td, char
 	struct prison *pr;
 	struct linux_prison *lpr;
 
-	LIN_SDT_PROBE2(mib, linux_set_osname, entry, td, osname);
-
 	lpr = linux_find_prison(td->td_ucred->cr_prison, &pr);
 	strlcpy(lpr->pr_osname, osname, LINUX_MAX_UTSNAME);
 	mtx_unlock(&pr->pr_mtx);
 
-	LIN_SDT_PROBE1(mib, linux_set_osname, return, 0);
 	return (0);
 }
 
@@ -716,13 +496,9 @@ linux_get_osrelease(struct thread *td, c
 	struct prison *pr;
 	struct linux_prison *lpr;
 
-	LIN_SDT_PROBE2(mib, linux_get_osrelease, entry, td, dst);
-
 	lpr = linux_find_prison(td->td_ucred->cr_prison, &pr);
 	bcopy(lpr->pr_osrelease, dst, LINUX_MAX_UTSNAME);
 	mtx_unlock(&pr->pr_mtx);
-
-	LIN_SDT_PROBE0(mib, linux_get_osrelease, return);
 }
 
 int
@@ -732,13 +508,10 @@ linux_kernver(struct thread *td)
 	struct linux_prison *lpr;
 	int osrel;
 
-	LIN_SDT_PROBE1(mib, linux_kernver, entry, td);
-
 	lpr = linux_find_prison(td->td_ucred->cr_prison, &pr);
 	osrel = lpr->pr_osrel;
 	mtx_unlock(&pr->pr_mtx);
 
-	LIN_SDT_PROBE1(mib, linux_kernver, return, osrel);
 	return (osrel);
 }
 
@@ -749,15 +522,12 @@ linux_set_osrelease(struct thread *td, c
 	struct linux_prison *lpr;
 	int error;
 
-	LIN_SDT_PROBE2(mib, linux_set_osrelease, entry, td, osrelease);
-
 	lpr = linux_find_prison(td->td_ucred->cr_prison, &pr);
 	error = linux_map_osrel(osrelease, &lpr->pr_osrel);
 	if (error == 0)
 		strlcpy(lpr->pr_osrelease, osrelease, LINUX_MAX_UTSNAME);
 	mtx_unlock(&pr->pr_mtx);
 
-	LIN_SDT_PROBE1(mib, linux_set_osrelease, return, error);
 	return (error);
 }
 
@@ -768,13 +538,10 @@ linux_get_oss_version(struct thread *td)
 	struct linux_prison *lpr;
 	int version;
 
-	LIN_SDT_PROBE1(mib, linux_get_oss_version, entry, td);
-
 	lpr = linux_find_prison(td->td_ucred->cr_prison, &pr);
 	version = lpr->pr_oss_version;
 	mtx_unlock(&pr->pr_mtx);
 
-	LIN_SDT_PROBE1(mib, linux_get_oss_version, return, version);
 	return (version);
 }
 
@@ -784,74 +551,9 @@ linux_set_oss_version(struct thread *td,
 	struct prison *pr;
 	struct linux_prison *lpr;
 
-	LIN_SDT_PROBE2(mib, linux_set_oss_version, entry, td, oss_version);
-
 	lpr = linux_find_prison(td->td_ucred->cr_prison, &pr);
 	lpr->pr_oss_version = oss_version;
 	mtx_unlock(&pr->pr_mtx);
 
-	LIN_SDT_PROBE1(mib, linux_set_oss_version, return, 0);
-	return (0);
-}
-
-#if defined(DEBUG) || defined(KTR)

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201505241551.t4OFpJEa065599>