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:
cognet 2018-02-26 13:12:51 +00:00
parent e442b960d2
commit 24fc3ea5c1

View File

@ -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 */