summaryrefslogtreecommitdiffstats
path: root/sys/amd64
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>2002-02-26 18:08:54 +0000
committerdillon <dillon@FreeBSD.org>2002-02-26 18:08:54 +0000
commit5052e3a1dc1787d99f0893854c18fb32eacd8f71 (patch)
treef77e11b3433f8804aab8caa5b99b7e885b10ca94 /sys/amd64
parent8bf18cd56425bbcd2682f19bb126411f43d0abb0 (diff)
downloadFreeBSD-src-5052e3a1dc1787d99f0893854c18fb32eacd8f71.zip
FreeBSD-src-5052e3a1dc1787d99f0893854c18fb32eacd8f71.tar.gz
Make peter's commit compatible with interrupt-enabled critical_enter()
and exit(), which has already solved the problem in regards to deadlocked IPI's.
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/amd64/pmap.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index ba3ee22..8dfacaa 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -575,7 +575,7 @@ pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
* interrupts disabled here.
* XXX we may need to hold schedlock to get a coherent pm_active
*/
- if (td->td_critnest == 1)
+ if (td->td_critnest == 1 && td->td_savecrit != (critical_t)-1)
cpu_critical_exit(td->td_savecrit);
if (pmap->pm_active == -1 || pmap->pm_active == all_cpus) {
invlpg(va); /* global */
@@ -609,7 +609,7 @@ pmap_invalidate_all(pmap_t pmap)
* interrupts disabled here.
* XXX we may need to hold schedlock to get a coherent pm_active
*/
- if (td->td_critnest == 1)
+ if (td->td_critnest == 1 && td->td_savecrit != (critical_t)-1)
cpu_critical_exit(td->td_savecrit);
if (pmap->pm_active == -1 || pmap->pm_active == all_cpus) {
invltlb(); /* global */
OpenPOWER on IntegriCloud