summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/amd64/mp_machdep.c1
-rw-r--r--sys/amd64/amd64/vm_machdep.c2
-rw-r--r--sys/arm/arm/mp_machdep.c1
-rw-r--r--sys/i386/i386/mp_machdep.c1
-rw-r--r--sys/i386/i386/vm_machdep.c2
-rw-r--r--sys/i386/xen/mp_machdep.c1
-rw-r--r--sys/ia64/ia64/mp_machdep.c2
-rw-r--r--sys/kern/kern_cpu.c2
-rw-r--r--sys/kern/subr_smp.c20
-rw-r--r--sys/mips/mips/mp_machdep.c1
-rw-r--r--sys/powerpc/powerpc/mp_machdep.c2
-rw-r--r--sys/sparc64/sparc64/mp_machdep.c1
-rw-r--r--sys/sys/smp.h3
13 files changed, 23 insertions, 16 deletions
diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c
index afc1bef..f6981b9 100644
--- a/sys/amd64/amd64/mp_machdep.c
+++ b/sys/amd64/amd64/mp_machdep.c
@@ -771,7 +771,6 @@ init_secondary(void)
if (smp_cpus == mp_ncpus) {
/* enable IPI's, tlb shootdown, freezes etc */
atomic_store_rel_int(&smp_started, 1);
- smp_active = 1; /* historic */
}
/*
diff --git a/sys/amd64/amd64/vm_machdep.c b/sys/amd64/amd64/vm_machdep.c
index bc7b311..3483815 100644
--- a/sys/amd64/amd64/vm_machdep.c
+++ b/sys/amd64/amd64/vm_machdep.c
@@ -597,7 +597,7 @@ cpu_reset()
cpuset_t map;
u_int cnt;
- if (smp_active) {
+ if (smp_started) {
map = all_cpus;
CPU_CLR(PCPU_GET(cpuid), &map);
CPU_NAND(&map, &stopped_cpus);
diff --git a/sys/arm/arm/mp_machdep.c b/sys/arm/arm/mp_machdep.c
index 0d6a0fc..fd275fe 100644
--- a/sys/arm/arm/mp_machdep.c
+++ b/sys/arm/arm/mp_machdep.c
@@ -219,7 +219,6 @@ init_secondary(int cpu)
if (smp_cpus == mp_ncpus) {
/* enable IPI's, tlb shootdown, freezes etc */
atomic_store_rel_int(&smp_started, 1);
- smp_active = 1;
}
mtx_unlock_spin(&ap_boot_mtx);
diff --git a/sys/i386/i386/mp_machdep.c b/sys/i386/i386/mp_machdep.c
index 53ac6df..222e8e2 100644
--- a/sys/i386/i386/mp_machdep.c
+++ b/sys/i386/i386/mp_machdep.c
@@ -805,7 +805,6 @@ init_secondary(void)
if (smp_cpus == mp_ncpus) {
/* enable IPI's, tlb shootdown, freezes etc */
atomic_store_rel_int(&smp_started, 1);
- smp_active = 1; /* historic */
}
mtx_unlock_spin(&ap_boot_mtx);
diff --git a/sys/i386/i386/vm_machdep.c b/sys/i386/i386/vm_machdep.c
index 3562954..78cc9c9 100644
--- a/sys/i386/i386/vm_machdep.c
+++ b/sys/i386/i386/vm_machdep.c
@@ -619,7 +619,7 @@ cpu_reset()
cpuset_t map;
u_int cnt;
- if (smp_active) {
+ if (smp_started) {
map = all_cpus;
CPU_CLR(PCPU_GET(cpuid), &map);
CPU_NAND(&map, &stopped_cpus);
diff --git a/sys/i386/xen/mp_machdep.c b/sys/i386/xen/mp_machdep.c
index 1bc6572..165b319 100644
--- a/sys/i386/xen/mp_machdep.c
+++ b/sys/i386/xen/mp_machdep.c
@@ -655,7 +655,6 @@ init_secondary(void)
if (smp_cpus == mp_ncpus) {
/* enable IPI's, tlb shootdown, freezes etc */
atomic_store_rel_int(&smp_started, 1);
- smp_active = 1; /* historic */
}
mtx_unlock_spin(&ap_boot_mtx);
diff --git a/sys/ia64/ia64/mp_machdep.c b/sys/ia64/ia64/mp_machdep.c
index 39fcca1..4e7ffb8 100644
--- a/sys/ia64/ia64/mp_machdep.c
+++ b/sys/ia64/ia64/mp_machdep.c
@@ -475,7 +475,7 @@ cpu_mp_unleash(void *dummy)
mp_ncpus, cpus, smp_cpus);
}
- smp_active = 1;
+ /* XXX Atomic set operation? */
smp_started = 1;
/*
diff --git a/sys/kern/kern_cpu.c b/sys/kern/kern_cpu.c
index 6df4d3f..b0de2a2 100644
--- a/sys/kern/kern_cpu.c
+++ b/sys/kern/kern_cpu.c
@@ -268,7 +268,7 @@ cf_set_method(device_t dev, const struct cf_level *level, int priority)
* switching the main CPU. XXXTODO: Need to think more about how to
* handle having different CPUs at different frequencies.
*/
- if (mp_ncpus > 1 && !smp_active) {
+ if (mp_ncpus > 1 && !smp_started) {
device_printf(dev, "rejecting change, SMP not started yet\n");
error = ENXIO;
goto out;
diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c
index 5425a45..122fc4c 100644
--- a/sys/kern/subr_smp.c
+++ b/sys/kern/subr_smp.c
@@ -59,6 +59,9 @@ cpuset_t logical_cpus_mask;
void (*cpustop_restartfunc)(void);
#endif
+
+static int sysctl_kern_smp_active(SYSCTL_HANDLER_ARGS);
+
/* This is used in modules that need to work in both SMP and UP. */
cpuset_t all_cpus;
@@ -78,9 +81,8 @@ SYSCTL_INT(_kern_smp, OID_AUTO, maxid, CTLFLAG_RD|CTLFLAG_CAPRD, &mp_maxid, 0,
SYSCTL_INT(_kern_smp, OID_AUTO, maxcpus, CTLFLAG_RD|CTLFLAG_CAPRD, &mp_maxcpus,
0, "Max number of CPUs that the system was compiled for.");
-int smp_active = 0; /* are the APs allowed to run? */
-SYSCTL_INT(_kern_smp, OID_AUTO, active, CTLFLAG_RW, &smp_active, 0,
- "Number of Auxillary Processors (APs) that were successfully started");
+SYSCTL_PROC(_kern_smp, OID_AUTO, active, CTLFLAG_RD | CTLTYPE_INT, NULL, 0,
+ sysctl_kern_smp_active, "I", "Indicates system is running in SMP mode");
int smp_disabled = 0; /* has smp been disabled? */
SYSCTL_INT(_kern_smp, OID_AUTO, disabled, CTLFLAG_RDTUN|CTLFLAG_CAPRD,
@@ -831,3 +833,15 @@ quiesce_all_cpus(const char *wmesg, int prio)
return quiesce_cpus(all_cpus, wmesg, prio);
}
+
+/* Extra care is taken with this sysctl because the data type is volatile */
+static int
+sysctl_kern_smp_active(SYSCTL_HANDLER_ARGS)
+{
+ int error, active;
+
+ active = smp_started;
+ error = SYSCTL_OUT(req, &active, sizeof(active));
+ return (error);
+}
+
diff --git a/sys/mips/mips/mp_machdep.c b/sys/mips/mips/mp_machdep.c
index 2a6bbb4..9f98909 100644
--- a/sys/mips/mips/mp_machdep.c
+++ b/sys/mips/mips/mp_machdep.c
@@ -317,7 +317,6 @@ smp_init_secondary(u_int32_t cpuid)
if (smp_cpus == mp_ncpus) {
atomic_store_rel_int(&smp_started, 1);
- smp_active = 1;
}
mtx_unlock_spin(&ap_boot_mtx);
diff --git a/sys/powerpc/powerpc/mp_machdep.c b/sys/powerpc/powerpc/mp_machdep.c
index 772cd5e..555daf1 100644
--- a/sys/powerpc/powerpc/mp_machdep.c
+++ b/sys/powerpc/powerpc/mp_machdep.c
@@ -267,7 +267,7 @@ cpu_mp_unleash(void *dummy)
/* Let the APs get into the scheduler */
DELAY(10000);
- smp_active = 1;
+ /* XXX Atomic set operation? */
smp_started = 1;
}
diff --git a/sys/sparc64/sparc64/mp_machdep.c b/sys/sparc64/sparc64/mp_machdep.c
index 8d2282e..0f977b3 100644
--- a/sys/sparc64/sparc64/mp_machdep.c
+++ b/sys/sparc64/sparc64/mp_machdep.c
@@ -291,7 +291,6 @@ cpu_mp_start(void)
KASSERT(!isjbus || mp_ncpus <= IDR_JALAPENO_MAX_BN_PAIRS,
("%s: can only IPI a maximum of %d JBus-CPUs",
__func__, IDR_JALAPENO_MAX_BN_PAIRS));
- smp_active = 1;
}
static void
diff --git a/sys/sys/smp.h b/sys/sys/smp.h
index fed12bf..42cb8df 100644
--- a/sys/sys/smp.h
+++ b/sys/sys/smp.h
@@ -71,7 +71,6 @@ struct cpu_group *smp_topo_2level(int l2share, int l2count, int l1share,
struct cpu_group *smp_topo_find(struct cpu_group *top, int cpu);
extern void (*cpustop_restartfunc)(void);
-extern int smp_active;
extern int smp_cpus;
extern volatile cpuset_t started_cpus;
extern volatile cpuset_t stopped_cpus;
@@ -141,7 +140,7 @@ cpu_next(int i)
* cpu_mp_start() will be called so that MP can be enabled. This function
* should do things such as startup secondary processors. It should also
* setup mp_ncpus, all_cpus, and smp_cpus. It should also ensure that
- * smp_active and smp_started are initialized at the appropriate time.
+ * smp_started is initialized at the appropriate time.
* Once cpu_mp_start() returns, machine independent MP startup code will be
* executed and a simple message will be output to the console. Finally,
* cpu_mp_announce() will be called so that machine dependent messages about
OpenPOWER on IntegriCloud