Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Aug 2013 23:13:53 +0000 (UTC)
From:      Olivier Houchard <cognet@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r254167 - in head/sys: kern sys
Message-ID:  <201308092313.r79NDrJ0074418@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cognet
Date: Fri Aug  9 23:13:52 2013
New Revision: 254167
URL: http://svnweb.freebsd.org/changeset/base/254167

Log:
  Don't call sleepinit() from proc0_init(), make it a SYSINIT instead.
  vmem needs the sleepq locks to be initialized when free'ing kva, so we want it
  called as early as possible.

Modified:
  head/sys/kern/init_main.c
  head/sys/kern/kern_synch.c
  head/sys/sys/proc.h

Modified: head/sys/kern/init_main.c
==============================================================================
--- head/sys/kern/init_main.c	Fri Aug  9 22:30:54 2013	(r254166)
+++ head/sys/kern/init_main.c	Fri Aug  9 23:13:52 2013	(r254167)
@@ -455,10 +455,6 @@ proc0_init(void *dummy __unused)
 	 * Add scheduler specific parts to proc, thread as needed.
 	 */
 	schedinit();	/* scheduler gets its house in order */
-	/*
-	 * Initialize sleep queue hash table
-	 */
-	sleepinit();
 
 	/*
 	 * Create process 0 (the swapper).

Modified: head/sys/kern/kern_synch.c
==============================================================================
--- head/sys/kern/kern_synch.c	Fri Aug  9 22:30:54 2013	(r254166)
+++ head/sys/kern/kern_synch.c	Fri Aug  9 23:13:52 2013	(r254167)
@@ -121,8 +121,8 @@ SDT_PROBE_DEFINE(sched, , , schedctl_nop
 SDT_PROBE_DEFINE(sched, , , schedctl_preempt, schedctl-preempt);
 SDT_PROBE_DEFINE(sched, , , schedctl_yield, schedctl-yield);
 
-void
-sleepinit(void)
+static void
+sleepinit(void *unused)
 {
 
 	hogticks = (hz / 10) * 2;	/* Default only. */
@@ -130,6 +130,12 @@ sleepinit(void)
 }
 
 /*
+ * vmem tries to lock the sleepq mutexes when free'ing kva, so make sure
+ * it is available.
+ */
+SYSINIT(sleepinit, SI_SUB_KMEM, SI_ORDER_ANY, sleepinit, 0);
+
+/*
  * General sleep call.  Suspends the current thread until a wakeup is
  * performed on the specified identifier.  The thread will then be made
  * runnable with the specified priority.  Sleeps at most sbt units of time

Modified: head/sys/sys/proc.h
==============================================================================
--- head/sys/sys/proc.h	Fri Aug  9 22:30:54 2013	(r254166)
+++ head/sys/sys/proc.h	Fri Aug  9 23:13:52 2013	(r254167)
@@ -892,7 +892,6 @@ int	setrunnable(struct thread *);
 void	setsugid(struct proc *p);
 int	should_yield(void);
 int	sigonstack(size_t sp);
-void	sleepinit(void);
 void	stopevent(struct proc *, u_int, u_int);
 struct	thread *tdfind(lwpid_t, pid_t);
 void	threadinit(void);



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