diff options
author | msmith <msmith@FreeBSD.org> | 1999-07-20 06:52:35 +0000 |
---|---|---|
committer | msmith <msmith@FreeBSD.org> | 1999-07-20 06:52:35 +0000 |
commit | 84c939ef118a545b74e42d1ab9013ea9ba8b1b3f (patch) | |
tree | f285b114a76c38187b7d9910bdede9788d00ae9e /sys/i386/isa/apic_vector.s | |
parent | 905bcc118433dc6747bf9091a2bae04370334c34 (diff) | |
download | FreeBSD-src-84c939ef118a545b74e42d1ab9013ea9ba8b1b3f.zip FreeBSD-src-84c939ef118a545b74e42d1ab9013ea9ba8b1b3f.tar.gz |
Implement an all-CPU shootdown-style rendezvous facility. This allows
the caller to specify a function to be guarded between an entry and exit
barrier, as well as pre- and post-barrier functions.
The primary use for this function is synchronised update of per-cpu private
data. The implementation is almost (but not quite) MI; with a better
mechanism for masking per-CPU interrupts it could probably be hoisted.
Reviewed by: peter (partially)
Diffstat (limited to 'sys/i386/isa/apic_vector.s')
-rw-r--r-- | sys/i386/isa/apic_vector.s | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/sys/i386/isa/apic_vector.s b/sys/i386/isa/apic_vector.s index b99b93a..13b116b 100644 --- a/sys/i386/isa/apic_vector.s +++ b/sys/i386/isa/apic_vector.s @@ -1,6 +1,6 @@ /* * from: vector.s, 386BSD 0.1 unknown origin - * $Id: apic_vector.s,v 1.41 1999/07/03 06:33:47 alc Exp $ + * $Id: apic_vector.s,v 1.42 1999/07/10 15:27:59 bde Exp $ */ @@ -952,6 +952,29 @@ MCOUNT_LABEL(bintr) INTR(23,intr23,) MCOUNT_LABEL(eintr) +/* + * Executed by a CPU when it receives a RENDEZVOUS IPI from another CPU. + * + * - Calls the generic rendezvous action function. + */ + .text + SUPERALIGN_TEXT + .globl _Xrendezvous +_Xrendezvous: + PUSH_FRAME + movl $KDSEL, %eax + movl %ax, %ds /* use KERNEL data segment */ + movl %ax, %es + movl $KPSEL, %eax + movl %ax, %fs + + call smp_rendezvous_action + + movl $0, lapic_eoi /* End Of Interrupt to APIC */ + POP_FRAME + iret + + .data /* * Addresses of interrupt handlers. |