Author: kib
Date: Tue Sep 22 16:29:55 2015
New Revision: 288115
URL: https://svnweb.freebsd.org/changeset/base/288115

Log:
  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

Modified:
  head/sys/arm64/arm64/exception.S

Modified: head/sys/arm64/arm64/exception.S
==============================================================================
--- head/sys/arm64/arm64/exception.S    Tue Sep 22 15:57:26 2015        
(r288114)
+++ head/sys/arm64/arm64/exception.S    Tue Sep 22 16:29:55 2015        
(r288115)
@@ -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 */
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to