6932552 early calls to cv_reltimedwait() are even less safe post 6919691
authorEnrico Perla - Sun Microsystems <Enrico.Perla@Sun.COM>
Thu, 11 Mar 2010 15:02:46 -0800
changeset 11895 fe3d4b94cbe2
parent 11894 c2da670cddda
child 11896 8eeb909c4fac
6932552 early calls to cv_reltimedwait() are even less safe post 6919691
usr/src/uts/common/os/main.c
usr/src/uts/i86pc/os/startup.c
--- a/usr/src/uts/common/os/main.c	Thu Mar 11 15:21:56 2010 -0600
+++ b/usr/src/uts/common/os/main.c	Thu Mar 11 15:02:46 2010 -0800
@@ -380,6 +380,7 @@
 	extern void	sysevent_evc_thrinit();
 #if defined(__x86)
 	extern void	fastboot_post_startup(void);
+	extern void	progressbar_start(void);
 #endif
 	/*
 	 * In the horrible world of x86 in-lines, you can't get symbolic
@@ -413,6 +414,13 @@
 	clock_tick_init_pre();
 	clock_init();
 
+#if defined(__x86)
+	/*
+	 * The progressbar thread uses cv_reltimedwait() and hence needs to be
+	 * started after the callout mechanism has been initialized.
+	 */
+	progressbar_start();
+#endif
 	/*
 	 * On some platforms, clkinitf() changes the timing source that
 	 * gethrtime_unscaled() uses to generate timestamps.  cbe_init() calls
--- a/usr/src/uts/i86pc/os/startup.c	Thu Mar 11 15:21:56 2010 -0600
+++ b/usr/src/uts/i86pc/os/startup.c	Thu Mar 11 15:02:46 2010 -0800
@@ -133,7 +133,6 @@
 #endif /* __xpv */
 
 extern void progressbar_init(void);
-extern void progressbar_start(void);
 extern void brand_init(void);
 extern void pcf_init(void);
 extern void pg_init(void);
@@ -707,7 +706,6 @@
 	startup_modules();
 
 	startup_end();
-	progressbar_start();
 }
 
 static void