diff --git a/sys/platform/pc32/i386/pmap.c b/sys/platform/pc32/i386/pmap.c index 3bb09b8..4948283 100644 --- a/sys/platform/pc32/i386/pmap.c +++ b/sys/platform/pc32/i386/pmap.c @@ -3489,0 +3489,0 @@ pmap_interlock_wait(struct vmspace *vm) if (pmap->pm_active & CPUMASK_LOCK) { DEBUG_PUSH_INFO("pmap_interlock_wait"); - while (pmap->pm_active & CPUMASK_LOCK) { - cpu_pause(); - cpu_ccfence(); + crit_enter(); + while (pmap->pm_active & CPUMASK_LOCK) lwkt_process_ipiq(); - } + crit_exit(); + DEBUG_POP_INFO(); } } diff --git a/sys/platform/pc64/x86_64/pmap.c b/sys/platform/pc64/x86_64/pmap.c index 1f2a59f..bc2d411 100644 --- a/sys/platform/pc64/x86_64/pmap.c +++ b/sys/platform/pc64/x86_64/pmap.c @@ -3885,0 +3885,0 @@ pmap_interlock_wait(struct vmspace *vm) if (pmap->pm_active & CPUMASK_LOCK) { DEBUG_PUSH_INFO("pmap_interlock_wait"); - while (pmap->pm_active & CPUMASK_LOCK) { - cpu_pause(); - cpu_ccfence(); + crit_enter(); + while (pmap->pm_active & CPUMASK_LOCK) lwkt_process_ipiq(); - } + crit_exit(); + DEBUG_POP_INFO(); } }