Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Mar 2018 14:46:54 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r331294 - head/sys/kern
Message-ID:  <201803211446.w2LEkst9091771@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Wed Mar 21 14:46:54 2018
New Revision: 331294
URL: https://svnweb.freebsd.org/changeset/base/331294

Log:
  Remove Giant from init creation and vfs_mountroot.
  
  Sponsored by: Netflix
  Discussed with: kib@, mckusick@
  Differential Review: https://reviews.freebsd.org/D14712

Modified:
  head/sys/kern/init_main.c
  head/sys/kern/kern_shutdown.c
  head/sys/kern/vfs_mountroot.c

Modified: head/sys/kern/init_main.c
==============================================================================
--- head/sys/kern/init_main.c	Wed Mar 21 14:37:04 2018	(r331293)
+++ head/sys/kern/init_main.c	Wed Mar 21 14:46:54 2018	(r331294)
@@ -703,10 +703,6 @@ start_init(void *dummy)
 	struct thread *td;
 	struct proc *p;
 
-	mtx_lock(&Giant);
-
-	GIANT_REQUIRED;
-
 	TSENTER();	/* Here so we don't overlap with mi_startup. */
 
 	td = curthread;
@@ -801,7 +797,6 @@ start_init(void *dummy)
 		 * to user mode as init!
 		 */
 		if ((error = sys_execve(td, &args)) == EJUSTRETURN) {
-			mtx_unlock(&Giant);
 			TSEXIT();
 			return;
 		}

Modified: head/sys/kern/kern_shutdown.c
==============================================================================
--- head/sys/kern/kern_shutdown.c	Wed Mar 21 14:37:04 2018	(r331293)
+++ head/sys/kern/kern_shutdown.c	Wed Mar 21 14:46:54 2018	(r331294)
@@ -268,13 +268,10 @@ sys_reboot(struct thread *td, struct reboot_args *uap)
 	if (error == 0)
 		error = priv_check(td, PRIV_REBOOT);
 	if (error == 0) {
-		if (uap->opt & RB_REROOT) {
+		if (uap->opt & RB_REROOT)
 			error = kern_reroot();
-		} else {
-			mtx_lock(&Giant);
+		else
 			kern_reboot(uap->opt);
-			mtx_unlock(&Giant);
-		}
 	}
 	return (error);
 }

Modified: head/sys/kern/vfs_mountroot.c
==============================================================================
--- head/sys/kern/vfs_mountroot.c	Wed Mar 21 14:37:04 2018	(r331293)
+++ head/sys/kern/vfs_mountroot.c	Wed Mar 21 14:46:54 2018	(r331294)
@@ -579,9 +579,7 @@ parse_dir_md(char **conf)
 
 	if (root_mount_mddev != -1) {
 		mdio->md_unit = root_mount_mddev;
-		DROP_GIANT();
 		error = kern_ioctl(td, fd, MDIOCDETACH, (void *)mdio);
-		PICKUP_GIANT();
 		/* Ignore errors. We don't care. */
 		root_mount_mddev = -1;
 	}
@@ -590,9 +588,7 @@ parse_dir_md(char **conf)
 	mdio->md_options = MD_AUTOUNIT | MD_READONLY;
 	mdio->md_mediasize = sb.st_size;
 	mdio->md_unit = 0;
-	DROP_GIANT();
 	error = kern_ioctl(td, fd, MDIOCATTACH, (void *)mdio);
-	PICKUP_GIANT();
 	if (error)
 		goto out;
 
@@ -601,9 +597,7 @@ parse_dir_md(char **conf)
 		mdio->md_file = NULL;
 		mdio->md_options = 0;
 		mdio->md_mediasize = 0;
-		DROP_GIANT();
 		error = kern_ioctl(td, fd, MDIOCDETACH, (void *)mdio);
-		PICKUP_GIANT();
 		/* Ignore errors. We don't care. */
 		error = ERANGE;
 		goto out;
@@ -960,9 +954,7 @@ vfs_mountroot_wait(void)
 
 	curfail = 0;
 	while (1) {
-		DROP_GIANT();
 		g_waitidle();
-		PICKUP_GIANT();
 		mtx_lock(&root_holds_mtx);
 		if (LIST_EMPTY(&root_holds)) {
 			mtx_unlock(&root_holds_mtx);
@@ -1004,9 +996,7 @@ vfs_mountroot_wait_if_neccessary(const char *fs, const
 	 * Note that we must wait for GEOM to finish reconfiguring itself,
 	 * eg for geom_part(4) to finish tasting.
 	 */
-	DROP_GIANT();
 	g_waitidle();
-	PICKUP_GIANT();
 	if (parse_mount_dev_present(dev))
 		return (0);
 
@@ -1038,6 +1028,8 @@ vfs_mountroot(void)
 	time_t timebase;
 	int error;
 	
+	mtx_assert(&Giant, MA_NOTOWNED);
+
 	TSENTER();
 
 	td = curthread;



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