Fix a lock up where we enter swapper() with interrupts disabled.
In smp_rendezvous_cpus we expect to wait for all cpus to enter smp_rendezvous_action. If we call this holding a proc lock swapper may attempt to also lock it, however as interrupts are disabled the cpu never handles the ipi. Because smp_rendezvous_action waits for all signaled cpus before contining it may get caught waiting for the cpu running swapper as the proc mutex will be unlocked after smp_rendezvous_cpus finishes. The fix is to enable interrupts in the configure stage as we should be doing. MFC after: 1 week
This commit is contained in:
@@ -94,6 +94,7 @@ static void
|
||||
configure_final(void *dummy)
|
||||
{
|
||||
|
||||
enable_interrupts(PSR_I | PSR_F);
|
||||
cninit_finish();
|
||||
cold = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user