aboutsummaryrefslogtreecommitdiff
path: root/sys/arm64
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2015-09-22 16:29:55 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2015-09-22 16:29:55 +0000
commitd50c68b2f05c7e899ca31da70a382b75f69399c7 (patch)
tree96d78e28e23e24c40ed9b6269047fda2cf81bba0 /sys/arm64
parentc6a7de08f1d3609eaf80f4e4921f1949d9e75c38 (diff)
downloadsrc-d50c68b2f05c7e899ca31da70a382b75f69399c7.tar.gz
src-d50c68b2f05c7e899ca31da70a382b75f69399c7.zip
Re-check for new ast after ast was handled. We should not return to
usermode with pending asts. Reviewed by: andrew Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D3667
Notes
Notes: svn path=/head/; revision=288115
Diffstat (limited to 'sys/arm64')
-rw-r--r--sys/arm64/arm64/exception.S8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/arm64/arm64/exception.S b/sys/arm64/arm64/exception.S
index b05941f5eac2..9bbbde727ea4 100644
--- a/sys/arm64/arm64/exception.S
+++ b/sys/arm64/arm64/exception.S
@@ -100,10 +100,11 @@ __FBSDID("$FreeBSD$");
.macro do_ast
/* Disable interrupts */
mrs x19, daif
+1:
msr daifset, #2
/* Read the current thread flags */
-1: ldr x1, [x18, #PC_CURTHREAD] /* Load curthread */
+ ldr x1, [x18, #PC_CURTHREAD] /* Load curthread */
ldr x2, [x1, #TD_FLAGS]
/* Check if we have either bits set */
@@ -120,9 +121,8 @@ __FBSDID("$FreeBSD$");
mov x0, sp
bl _C_LABEL(ast)
- /* Disable interrupts */
- mrs x19, daif
- msr daifset, #2
+ /* Re-check for new ast scheduled */
+ b 1b
2:
/* Restore interrupts */