aboutsummaryrefslogtreecommitdiff
path: root/i386/i386at/interrupt.S
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2023-08-13 00:51:02 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-08-13 00:51:02 +0200
commit6dcf01215edfd49a97c86e7c0d49e0d75785cf84 (patch)
treeca058ebedd32853617f92ced7bb4b3c5944744f7 /i386/i386at/interrupt.S
parent8ff5ff4001e2f6c2361f452db6f7f468ea3a84b9 (diff)
downloadgnumach-6dcf01215edfd49a97c86e7c0d49e0d75785cf84.tar.gz
gnumach-6dcf01215edfd49a97c86e7c0d49e0d75785cf84.tar.bz2
gnumach-6dcf01215edfd49a97c86e7c0d49e0d75785cf84.zip
i386/x86_64: Add remote AST via IPI mechanism
Diffstat (limited to 'i386/i386at/interrupt.S')
-rw-r--r--i386/i386at/interrupt.S8
1 files changed, 8 insertions, 0 deletions
diff --git a/i386/i386at/interrupt.S b/i386/i386at/interrupt.S
index e9e9c0ef..01198bf5 100644
--- a/i386/i386at/interrupt.S
+++ b/i386/i386at/interrupt.S
@@ -48,6 +48,9 @@ ENTRY(interrupt)
cmpl $CALL_SINGLE_FUNCTION_BASE,%eax /* was this a SMP call single function request? */
je _call_single
+ cmpl $CALL_LOCAL_AST_BASE,%eax /* was this a SMP remote -> local ast request? */
+ je _call_local_ast
+
subl $24,%esp /* Two local variables + 4 parameters */
movl %eax,S_IRQ /* save irq number */
@@ -129,4 +132,9 @@ _call_single:
call EXT(lapic_eoi) /* lapic EOI before the handler to allow extra update */
call EXT(pmap_update_interrupt) /* TODO: Allow other functions */
ret
+
+_call_local_ast:
+ call EXT(ast_check) /* AST check on this cpu */
+ call EXT(lapic_eoi) /* lapic EOI */
+ ret
END(interrupt)