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;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to