summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2001-04-17 04:18:08 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2001-04-17 04:18:08 +0000
commitabd9053ee4f1a9738e39de88f4b4455b5e6a6bb4 (patch)
tree124ccb75f51565f956b9e438326ec74f9a5e89c7 /sys
parent3c41f323c99a630b97fb12208c8723166ad25046 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/alpha/alpha/mp_machdep.c3
-rw-r--r--sys/amd64/amd64/mp_machdep.c4
-rw-r--r--sys/amd64/amd64/mptable.c4
-rw-r--r--sys/amd64/include/mptable.h4
-rw-r--r--sys/i386/i386/mp_machdep.c4
-rw-r--r--sys/i386/i386/mptable.c4
-rw-r--r--sys/i386/include/mptable.h4
-rw-r--r--sys/kern/kern_shutdown.c10
-rw-r--r--sys/kern/subr_smp.c4
-rw-r--r--sys/powerpc/powerpc/mp_machdep.c4
-rw-r--r--sys/sys/kernel.h3
11 files changed, 9 insertions, 39 deletions
diff --git a/sys/alpha/alpha/mp_machdep.c b/sys/alpha/alpha/mp_machdep.c
index 33741f0abce2..e12a68a71328 100644
--- a/sys/alpha/alpha/mp_machdep.c
+++ b/sys/alpha/alpha/mp_machdep.c
@@ -281,14 +281,11 @@ globaldata_find(int cpuid)
/* lock around the MP rendezvous */
static struct mtx smp_rv_mtx;
-/* only 1 CPU can panic at a time :) */
-struct mtx panic_mtx;
static void
init_locks(void)
{
mtx_init(&smp_rv_mtx, "smp rendezvous", MTX_SPIN);
- mtx_init(&panic_mtx, "panic", MTX_DEF);
}
void
diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c
index 66ab9f3f6839..7bc0a320d028 100644
--- a/sys/amd64/amd64/mp_machdep.c
+++ b/sys/amd64/amd64/mp_machdep.c
@@ -357,9 +357,6 @@ struct mtx com_mtx;
/* lock around the MP rendezvous */
static struct mtx smp_rv_mtx;
-/* only 1 CPU can panic at a time :) */
-struct mtx panic_mtx;
-
static void
init_locks(void)
{
@@ -371,7 +368,6 @@ init_locks(void)
mtx_init(&mcount_mtx, "mcount", MTX_DEF);
mtx_init(&smp_rv_mtx, "smp rendezvous", MTX_SPIN);
- mtx_init(&panic_mtx, "panic", MTX_DEF);
#ifdef USE_COMLOCK
mtx_init(&com_mtx, "com", MTX_SPIN);
diff --git a/sys/amd64/amd64/mptable.c b/sys/amd64/amd64/mptable.c
index 66ab9f3f6839..7bc0a320d028 100644
--- a/sys/amd64/amd64/mptable.c
+++ b/sys/amd64/amd64/mptable.c
@@ -357,9 +357,6 @@ struct mtx com_mtx;
/* lock around the MP rendezvous */
static struct mtx smp_rv_mtx;
-/* only 1 CPU can panic at a time :) */
-struct mtx panic_mtx;
-
static void
init_locks(void)
{
@@ -371,7 +368,6 @@ init_locks(void)
mtx_init(&mcount_mtx, "mcount", MTX_DEF);
mtx_init(&smp_rv_mtx, "smp rendezvous", MTX_SPIN);
- mtx_init(&panic_mtx, "panic", MTX_DEF);
#ifdef USE_COMLOCK
mtx_init(&com_mtx, "com", MTX_SPIN);
diff --git a/sys/amd64/include/mptable.h b/sys/amd64/include/mptable.h
index 66ab9f3f6839..7bc0a320d028 100644
--- a/sys/amd64/include/mptable.h
+++ b/sys/amd64/include/mptable.h
@@ -357,9 +357,6 @@ struct mtx com_mtx;
/* lock around the MP rendezvous */
static struct mtx smp_rv_mtx;
-/* only 1 CPU can panic at a time :) */
-struct mtx panic_mtx;
-
static void
init_locks(void)
{
@@ -371,7 +368,6 @@ init_locks(void)
mtx_init(&mcount_mtx, "mcount", MTX_DEF);
mtx_init(&smp_rv_mtx, "smp rendezvous", MTX_SPIN);
- mtx_init(&panic_mtx, "panic", MTX_DEF);
#ifdef USE_COMLOCK
mtx_init(&com_mtx, "com", MTX_SPIN);
diff --git a/sys/i386/i386/mp_machdep.c b/sys/i386/i386/mp_machdep.c
index 66ab9f3f6839..7bc0a320d028 100644
--- a/sys/i386/i386/mp_machdep.c
+++ b/sys/i386/i386/mp_machdep.c
@@ -357,9 +357,6 @@ struct mtx com_mtx;
/* lock around the MP rendezvous */
static struct mtx smp_rv_mtx;
-/* only 1 CPU can panic at a time :) */
-struct mtx panic_mtx;
-
static void
init_locks(void)
{
@@ -371,7 +368,6 @@ init_locks(void)
mtx_init(&mcount_mtx, "mcount", MTX_DEF);
mtx_init(&smp_rv_mtx, "smp rendezvous", MTX_SPIN);
- mtx_init(&panic_mtx, "panic", MTX_DEF);
#ifdef USE_COMLOCK
mtx_init(&com_mtx, "com", MTX_SPIN);
diff --git a/sys/i386/i386/mptable.c b/sys/i386/i386/mptable.c
index 66ab9f3f6839..7bc0a320d028 100644
--- a/sys/i386/i386/mptable.c
+++ b/sys/i386/i386/mptable.c
@@ -357,9 +357,6 @@ struct mtx com_mtx;
/* lock around the MP rendezvous */
static struct mtx smp_rv_mtx;
-/* only 1 CPU can panic at a time :) */
-struct mtx panic_mtx;
-
static void
init_locks(void)
{
@@ -371,7 +368,6 @@ init_locks(void)
mtx_init(&mcount_mtx, "mcount", MTX_DEF);
mtx_init(&smp_rv_mtx, "smp rendezvous", MTX_SPIN);
- mtx_init(&panic_mtx, "panic", MTX_DEF);
#ifdef USE_COMLOCK
mtx_init(&com_mtx, "com", MTX_SPIN);
diff --git a/sys/i386/include/mptable.h b/sys/i386/include/mptable.h
index 66ab9f3f6839..7bc0a320d028 100644
--- a/sys/i386/include/mptable.h
+++ b/sys/i386/include/mptable.h
@@ -357,9 +357,6 @@ struct mtx com_mtx;
/* lock around the MP rendezvous */
static struct mtx smp_rv_mtx;
-/* only 1 CPU can panic at a time :) */
-struct mtx panic_mtx;
-
static void
init_locks(void)
{
@@ -371,7 +368,6 @@ init_locks(void)
mtx_init(&mcount_mtx, "mcount", MTX_DEF);
mtx_init(&smp_rv_mtx, "smp rendezvous", MTX_SPIN);
- mtx_init(&panic_mtx, "panic", MTX_DEF);
#ifdef USE_COMLOCK
mtx_init(&com_mtx, "com", MTX_SPIN);
diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c
index ad79fdcbbb79..55c4ba47d973 100644
--- a/sys/kern/kern_shutdown.c
+++ b/sys/kern/kern_shutdown.c
@@ -548,6 +548,10 @@ dumpstatus(vm_offset_t addr, long count)
return 0;
}
+#ifdef SMP
+static u_int panic_cpu = NOCPU;
+#endif
+
/*
* Panic is called on unresolvable fatal errors. It prints "panic: mesg",
* and then reboots. If we are called twice, then we avoid trying to sync
@@ -562,7 +566,11 @@ panic(const char *fmt, ...)
#ifdef SMP
/* Only 1 CPU can panic at a time */
- mtx_lock(&panic_mtx);
+ if (panic_cpu != PCPU_GET(cpuid) &&
+ atomic_cmpset_int(&panic_cpu, NOCPU, PCPU_GET(cpuid)) == 0) {
+ for (;;)
+ ; /* nothing */
+ }
#endif
bootopt = RB_AUTOBOOT | RB_DUMP;
diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c
index 66ab9f3f6839..7bc0a320d028 100644
--- a/sys/kern/subr_smp.c
+++ b/sys/kern/subr_smp.c
@@ -357,9 +357,6 @@ struct mtx com_mtx;
/* lock around the MP rendezvous */
static struct mtx smp_rv_mtx;
-/* only 1 CPU can panic at a time :) */
-struct mtx panic_mtx;
-
static void
init_locks(void)
{
@@ -371,7 +368,6 @@ init_locks(void)
mtx_init(&mcount_mtx, "mcount", MTX_DEF);
mtx_init(&smp_rv_mtx, "smp rendezvous", MTX_SPIN);
- mtx_init(&panic_mtx, "panic", MTX_DEF);
#ifdef USE_COMLOCK
mtx_init(&com_mtx, "com", MTX_SPIN);
diff --git a/sys/powerpc/powerpc/mp_machdep.c b/sys/powerpc/powerpc/mp_machdep.c
index 8ca5b047d5e3..e8c65f3104e5 100644
--- a/sys/powerpc/powerpc/mp_machdep.c
+++ b/sys/powerpc/powerpc/mp_machdep.c
@@ -232,15 +232,11 @@ globaldata_find(int cpuno)
/* lock around the MP rendezvous */
static struct mtx smp_rv_mtx;
-/* only 1 CPU can panic at a time :) */
-struct mtx panic_mtx;
-
static void
init_locks(void)
{
mtx_init(&smp_rv_mtx, "smp rendezvous", MTX_SPIN);
- mtx_init(&panic_mtx, "panic", MTX_DEF);
}
void
diff --git a/sys/sys/kernel.h b/sys/sys/kernel.h
index 3bcef6f1e173..443874f62816 100644
--- a/sys/sys/kernel.h
+++ b/sys/sys/kernel.h
@@ -81,9 +81,6 @@ extern int lbolt; /* once a second sleep address */
extern int tickdelta;
extern long timedelta;
-/* global data in mp_machdep.c */
-extern struct mtx panic_mtx;
-
#endif /* _KERNEL */
/*