summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
authormjacob <mjacob@FreeBSD.org>2000-12-09 20:52:42 +0000
committermjacob <mjacob@FreeBSD.org>2000-12-09 20:52:42 +0000
commit036f9ff7a38924156d49446169ee70fc48bc54b6 (patch)
tree2ade71cd568c0ac76572f65a857432b8c1e81c48 /sys/alpha
parent31a5760aa216950ac801c484069ce13595dfdae9 (diff)
downloadFreeBSD-src-036f9ff7a38924156d49446169ee70fc48bc54b6.zip
FreeBSD-src-036f9ff7a38924156d49446169ee70fc48bc54b6.tar.gz
Store in globaldata our CPU ID#. Provide a lock for panics - only one
CPU can panic at a time. Obtained from:Andrew Gallatin <gallatin@cs.duke.edu>
Diffstat (limited to 'sys/alpha')
-rw-r--r--sys/alpha/alpha/mp_machdep.c5
-rw-r--r--sys/alpha/include/globaldata.h1
-rw-r--r--sys/alpha/include/lock.h2
-rw-r--r--sys/alpha/include/pcpu.h1
4 files changed, 9 insertions, 0 deletions
diff --git a/sys/alpha/alpha/mp_machdep.c b/sys/alpha/alpha/mp_machdep.c
index 393802d..c2e2fcc 100644
--- a/sys/alpha/alpha/mp_machdep.c
+++ b/sys/alpha/alpha/mp_machdep.c
@@ -282,6 +282,7 @@ globaldata_init(struct globaldata *globaldata, int cpuno, size_t sz)
globaldata->gd_other_cpus = all_cpus & ~(1 << cpuno);
globaldata->gd_next_asn = 0;
globaldata->gd_current_asngen = 1;
+ globaldata->gd_cpuid = cpuno;
cpuno_to_globaldata[cpuno] = globaldata;
}
@@ -369,10 +370,14 @@ s_lock_try(struct simplelock *lkp)
/* lock around the MP rendezvous */
static struct simplelock smp_rv_lock;
+/* only 1 CPU can panic at a time :) */
+struct simplelock panic_lock;
+
static void
init_locks(void)
{
s_lock_init(&smp_rv_lock);
+ s_lock_init(&panic_lock);
}
void
diff --git a/sys/alpha/include/globaldata.h b/sys/alpha/include/globaldata.h
index 361ae09..5fd6c59 100644
--- a/sys/alpha/include/globaldata.h
+++ b/sys/alpha/include/globaldata.h
@@ -62,6 +62,7 @@ struct globaldata {
u_int gd_astpending;
SLIST_ENTRY(globaldata) gd_allcpu;
int gd_witness_spin_check;
+ u_int gd_cpuid;
#ifdef KTR_PERCPU
volatile int gd_ktr_idx; /* Index into trace table */
char *gd_ktr_buf;
diff --git a/sys/alpha/include/lock.h b/sys/alpha/include/lock.h
index f2e3448..ebca861 100644
--- a/sys/alpha/include/lock.h
+++ b/sys/alpha/include/lock.h
@@ -55,6 +55,8 @@ s_unlock(struct simplelock *lkp)
lkp->lock_data = 0;
}
+extern struct simplelock panic_lock;
+
#if !defined(SIMPLELOCK_DEBUG) && MAXCPU > 1
/*
* This set of defines turns on the real functions in i386/isa/apic_ipl.s.
diff --git a/sys/alpha/include/pcpu.h b/sys/alpha/include/pcpu.h
index 361ae09..5fd6c59 100644
--- a/sys/alpha/include/pcpu.h
+++ b/sys/alpha/include/pcpu.h
@@ -62,6 +62,7 @@ struct globaldata {
u_int gd_astpending;
SLIST_ENTRY(globaldata) gd_allcpu;
int gd_witness_spin_check;
+ u_int gd_cpuid;
#ifdef KTR_PERCPU
volatile int gd_ktr_idx; /* Index into trace table */
char *gd_ktr_buf;
OpenPOWER on IntegriCloud