summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/ipl.s
diff options
context:
space:
mode:
authortegge <tegge@FreeBSD.org>1998-03-03 22:56:30 +0000
committertegge <tegge@FreeBSD.org>1998-03-03 22:56:30 +0000
commit9f3982f0f6d7493912022ff7b37436e9d976fb84 (patch)
tree2f6bf35c42516c9c0cdb317a15559bbb0da91450 /sys/i386/isa/ipl.s
parentbeae57c5b35bad7c8aa9705208f9552264588380 (diff)
downloadFreeBSD-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.s26
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
OpenPOWER on IntegriCloud