PERFORCE change 112045 for review
Marcel Moolenaar
marcel at FreeBSD.org
Thu Dec 21 15:55:30 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=112045
Change 112045 by marcel at marcel_nfs on 2006/12/21 23:55:24
o Flesh out cpu_mp_announce()
o Add cpu_mp_unleash()
Affected files ...
.. //depot/projects/powerpc/sys/powerpc/include/pcpu.h#4 edit
.. //depot/projects/powerpc/sys/powerpc/powerpc/mp_machdep.c#7 edit
Differences ...
==== //depot/projects/powerpc/sys/powerpc/include/pcpu.h#4 (text+ko) ====
@@ -39,7 +39,8 @@
#define PCPU_MD_FIELDS \
int pc_inside_intr; \
struct pmap *pc_curpmap; /* current pmap */ \
- struct thread *pc_fputhread; /* current fpu user */ \
+ struct thread *pc_fputhread; /* current fpu user */ \
+ int pc_awake:1; \
register_t pc_tempsave[CPUSAVE_LEN]; \
register_t pc_disisave[CPUSAVE_LEN]; \
register_t pc_dbsave[CPUSAVE_LEN];
==== //depot/projects/powerpc/sys/powerpc/powerpc/mp_machdep.c#7 (text+ko) ====
@@ -37,6 +37,11 @@
#include <dev/ofw/openfirm.h>
+volatile static int ap_awake;
+volatile static int ap_spin;
+
+int mp_ipi_test = 0;
+
void
cpu_mp_setmaxid(void)
{
@@ -93,9 +98,58 @@
void
cpu_mp_announce(void)
{
+ struct pcpu *pc;
+ int i;
+
+ for (i = 0; i <= mp_maxid; i++) {
+ pc = pcpu_find(i);
+ if (pc == NULL)
+ continue;
+ printf("cpu%d", i);
+ if (i == 0)
+ printf(" (BSP)");
+ printf("\n");
+ }
}
static void
+cpu_mp_unleash(void *dummy)
+{
+ struct pcpu *pc;
+ int cpus;
+
+ if (mp_ncpus <= 1)
+ return;
+
+ if (mp_ipi_test != 1)
+ printf("SMP: WARNING: sending of a test IPI failed\n");
+
+ cpus = 0;
+ smp_cpus = 0;
+ SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
+ cpus++;
+ if (pc->pc_awake)
+ smp_cpus++;
+ }
+
+ ap_awake = 1;
+ ap_spin = 0;
+
+ while (ap_awake != smp_cpus)
+ DELAY(0);
+
+ if (smp_cpus != cpus || cpus != mp_ncpus) {
+ printf("SMP: %d CPUs found; %d CPUs usable; %d CPUs woken\n",
+ mp_ncpus, cpus, smp_cpus);
+ }
+
+ smp_active = 1;
+ smp_started = 1;
+}
+
+SYSINIT(start_aps, SI_SUB_SMP, SI_ORDER_FIRST, cpu_mp_unleash, NULL);
+
+static void
ipi_send(struct pcpu *pc, int ipi)
{
}
@@ -142,4 +196,3 @@
ipi_send(pcpup, ipi);
}
-
More information about the p4-projects
mailing list