Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Jan 2008 04:41:47 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 132544 for review
Message-ID:  <200801050441.m054flAu005673@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=132544

Change 132544 by jb@jb_freebsd1 on 2008/01/05 04:41:40

	Add a SYSINIT to setup the APs.
	
	The boot CPU is setup in the load function itself rather than waiting
	for the SYSINIT which happens late in the boot process.

Affected files ...

.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_load.c#23 edit

Differences ...

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_load.c#23 (text+ko) ====

@@ -23,6 +23,26 @@
  */
 
 static void
+dtrace_ap_start(void *dummy)
+{
+	int i;
+
+	mutex_enter(&cpu_lock);
+
+	/* Setup the rest of the CPUs. */
+	for (i = 1; i <= mp_maxid; i++) {
+		if (pcpu_find(i) == NULL)
+			continue;
+
+		(void) dtrace_cpu_setup(CPU_CONFIG, i);
+	}
+
+	mutex_exit(&cpu_lock);
+}
+
+SYSINIT(dtrace_ap_start, SI_SUB_SMP, SI_ORDER_ANY, dtrace_ap_start, NULL);
+
+static void
 dtrace_load(void *dummy)
 {
 	dtrace_provider_id_t id;
@@ -59,9 +79,6 @@
 	mutex_enter(&cpu_lock);
 
 #ifdef DOODAD
-	dtrace_modload = dtrace_module_loaded;
-	dtrace_modunload = dtrace_module_unloaded;
-	dtrace_cpu_init = dtrace_cpu_setup_initial;
 	dtrace_helpers_cleanup = dtrace_helpers_destroy;
 	dtrace_helpers_fork = dtrace_helpers_duplicate;
 	dtrace_cpustart_init = dtrace_suspend;
@@ -71,10 +88,8 @@
 	dtrace_kreloc_init = dtrace_suspend;
 	dtrace_kreloc_fini = dtrace_resume;
 
-	register_cpu_setup_func((cpu_setup_func_t *)dtrace_cpu_setup, NULL);
-
+#endif
 	ASSERT(MUTEX_HELD(&cpu_lock));
-#endif
 
 	dtrace_arena = vmem_create("dtrace", (void *)1, UINT32_MAX, 1,
 	    NULL, NULL, NULL, 0, VM_SLEEP | VMC_IDENTIFIER);
@@ -150,6 +165,13 @@
 	mutex_exit(&dtrace_lock);
 	mutex_exit(&dtrace_provider_lock);
 
+	mutex_enter(&cpu_lock);
+
+	/* Setup the boot CPU */
+	(void) dtrace_cpu_setup(CPU_CONFIG, 0);
+
+	mutex_exit(&cpu_lock);
+
 	/* Enable device cloning. */
 	clone_setup(&dtrace_clones);
 



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