In do_ast, make sure the interrupts are enabled before calling ast().
We can reach that point with IRQs disabled, and calling ast() with IRQs disabled can lead to a deadlock. This should fix the freezes on arm64 under load. Reviewed by: andrew
This commit is contained in:
parent
104518ad6d
commit
ed8bce2cd5
@ -26,6 +26,7 @@
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/armreg.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "assym.s"
|
||||
@ -114,9 +115,11 @@ __FBSDID("$FreeBSD$");
|
||||
.endm
|
||||
|
||||
.macro do_ast
|
||||
/* Disable interrupts */
|
||||
mrs x19, daif
|
||||
/* Make sure the IRQs are enabled before calling ast() */
|
||||
bic x19, x19, #PSR_I
|
||||
1:
|
||||
/* Disable interrupts */
|
||||
msr daifset, #2
|
||||
|
||||
/* Read the current thread flags */
|
||||
|
Loading…
Reference in New Issue
Block a user