diff options
author | peter <peter@FreeBSD.org> | 2004-08-23 21:39:29 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2004-08-23 21:39:29 +0000 |
commit | 326b7f663e843b9660f17260119f638a9a7d2f72 (patch) | |
tree | 89b1af9b2f1d343fd5676d1084f6d765458e27d1 /sys/sys/smp.h | |
parent | 02488a6b3c5b0d35621962fc89ebba434f72ec06 (diff) | |
download | FreeBSD-src-326b7f663e843b9660f17260119f638a9a7d2f72.zip FreeBSD-src-326b7f663e843b9660f17260119f638a9a7d2f72.tar.gz |
Commit Doug White and Alan Cox's fix for the cross-ipi smp deadlock.
We were obtaining different spin mutexes (which disable interrupts after
aquisition) and spin waiting for delivery. For example, KSE processes
do LDT operations which use smp_rendezvous, while other parts of the
system are doing things like tlb shootdowns with a different mutex.
This patch uses the common smp_rendezvous mutex for all MD home-grown
IPIs that spinwait for delivery. Having the single mutex means that
the spinloop to aquire it will enable interrupts periodically, thus
avoiding the cross-ipi deadlock.
Obtained from: dwhite, alc
Reviewed by: jhb
Diffstat (limited to 'sys/sys/smp.h')
-rw-r--r-- | sys/sys/smp.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/sys/smp.h b/sys/sys/smp.h index b9d57e2..5a1ab86 100644 --- a/sys/sys/smp.h +++ b/sys/sys/smp.h @@ -95,6 +95,7 @@ void forward_roundrobin(void); int restart_cpus(cpumask_t); int stop_cpus(cpumask_t); void smp_rendezvous_action(void); +extern struct mtx smp_rv_mtx; #endif /* SMP */ void smp_rendezvous(void (*)(void *), void (*)(void *), |