diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2015-09-22 16:29:55 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2015-09-22 16:29:55 +0000 |
commit | d50c68b2f05c7e899ca31da70a382b75f69399c7 (patch) | |
tree | 96d78e28e23e24c40ed9b6269047fda2cf81bba0 /sys/arm64 | |
parent | c6a7de08f1d3609eaf80f4e4921f1949d9e75c38 (diff) | |
download | src-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.S | 8 |
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 */ |