diff options
author | tegge <tegge@FreeBSD.org> | 1998-03-03 22:56:30 +0000 |
---|---|---|
committer | tegge <tegge@FreeBSD.org> | 1998-03-03 22:56:30 +0000 |
commit | 9f3982f0f6d7493912022ff7b37436e9d976fb84 (patch) | |
tree | 2f6bf35c42516c9c0cdb317a15559bbb0da91450 /sys/i386/isa/ipl.s | |
parent | beae57c5b35bad7c8aa9705208f9552264588380 (diff) | |
download | FreeBSD-src-9f3982f0f6d7493912022ff7b37436e9d976fb84.zip FreeBSD-src-9f3982f0f6d7493912022ff7b37436e9d976fb84.tar.gz |
When entering the apic version of slow interrupt handler, level
interrupts are masked, and EOI is sent iff the corresponding ISR bit
is set in the local apic. If the CPU cannot obtain the interrupt
service lock (currently the global kernel lock) the interrupt is
forwarded to the CPU holding that lock.
Clock interrupts now have higher priority than other slow interrupts.
Diffstat (limited to 'sys/i386/isa/ipl.s')
-rw-r--r-- | sys/i386/isa/ipl.s | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/sys/i386/isa/ipl.s b/sys/i386/isa/ipl.s index 38e6934..bd586ee 100644 --- a/sys/i386/isa/ipl.s +++ b/sys/i386/isa/ipl.s @@ -36,7 +36,7 @@ * * @(#)ipl.s * - * $Id: ipl.s,v 1.18 1997/10/13 00:01:53 fsmp Exp $ + * $Id: ipl.s,v 1.19 1997/12/15 02:18:35 tegge Exp $ */ @@ -263,6 +263,9 @@ doreti_unpend: cli #ifdef SMP pushl %edx /* preserve %edx */ +#ifdef APIC_INTR_DIAGNOSTIC + pushl %ecx +#endif pushl %eax /* preserve %eax */ ICPL_LOCK #ifdef CPL_AND_CML @@ -271,11 +274,32 @@ doreti_unpend: popl _cpl #endif FAST_ICPL_UNLOCK +#ifdef APIC_INTR_DIAGNOSTIC + popl %ecx +#endif popl %edx #else movl %eax,_cpl #endif MEXITCOUNT +#ifdef APIC_INTR_DIAGNOSTIC + lock + incl CNAME(apic_itrace_doreti)(,%ecx,4) +#ifdef APIC_INTR_DIAGNOSTIC_IRQ + cmpl $APIC_INTR_DIAGNOSTIC_IRQ,%ecx + jne 9f + pushl %eax + pushl %ecx + pushl %edx + pushl $APIC_ITRACE_DORETI + call log_intr_event + addl $4,%esp + popl %edx + popl %ecx + popl %eax +9: +#endif +#endif jmp %edx ALIGN_TEXT |