summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/i386/isa/ipl.s10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/i386/isa/ipl.s b/sys/i386/isa/ipl.s
index b28837e45bb9..d429f5ad13ae 100644
--- a/sys/i386/isa/ipl.s
+++ b/sys/i386/isa/ipl.s
@@ -66,6 +66,16 @@ doreti_next:
je doreti_exit /* no, defer */
doreti_ast:
+ /*
+ * Check for ASTs atomically with returning. Disabling CPU
+ * interrupts provides sufficient locking evein the SMP case,
+ * since we will be informed of any new ASTs by an IPI.
+ */
+ cli
+ movl PCPU(CURPROC),%eax
+ testl $PS_ASTPENDING | PS_NEEDRESCHED,P_SFLAG(%eax)
+ je doreti_exit
+ sti
pushl %esp /* pass a pointer to the trapframe */
call ast
add $4,%esp