summaryrefslogtreecommitdiffstats
path: root/sys/amd64/amd64/apic_vector.S
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2003-11-12 18:13:57 +0000
committerjhb <jhb@FreeBSD.org>2003-11-12 18:13:57 +0000
commit9428d57b9b941fb441c38cf34d96d7b30598e9a9 (patch)
treea6db7827fd51e3e1f795b089a12eea492087060b /sys/amd64/amd64/apic_vector.S
parentc33bd8de4149ea8ab805371a6221a72533b3fa40 (diff)
downloadFreeBSD-src-9428d57b9b941fb441c38cf34d96d7b30598e9a9.zip
FreeBSD-src-9428d57b9b941fb441c38cf34d96d7b30598e9a9.tar.gz
- Move manipulation of td_intr_nesting_level out of assembly interrupt
vector stubs and into the C functions they call. - Move disabling and EOIing of interrupt sources out of PIC driver entry points and into intr_execute_handlers(). Intr_execute_handlers() only disables a source for an interrupt if it is a stray interrupt or has threaded handlers. Sources with fast handlers no longer disable (mask) the source while executing the handlers. - Move the setting of clkintr_pending into intr_execute_handlers() and set the variable for any interrupt source with a vector of 0. (Should only be true for IRQ 0.) This fixes clkintr_pending in the NO_MIXED_MODE case. - Implement lapic_eoi() and use it to implement ioapic_eoi_source(). - Rename atpic_sched_ithd() to atpic_handle_intr() since it is used to handle all atpic interrupts and not just threaded ones. Inspired by: peter's changes to amd64 in p4 (1) Requested by: bde (2)
Diffstat (limited to 'sys/amd64/amd64/apic_vector.S')
-rw-r--r--sys/amd64/amd64/apic_vector.S9
1 files changed, 0 insertions, 9 deletions
diff --git a/sys/amd64/amd64/apic_vector.S b/sys/amd64/amd64/apic_vector.S
index f1d2520..6c650db 100644
--- a/sys/amd64/amd64/apic_vector.S
+++ b/sys/amd64/amd64/apic_vector.S
@@ -82,9 +82,7 @@ IDTVEC(vec_name) ; \
movl $KPSEL, %eax ; /* reload with per-CPU data segment */ \
mov %ax, %fs ; \
movl lapic, %edx ; /* pointer to local APIC */ \
- movl PCPU(CURTHREAD), %ebx ; \
movl LA_ISR + 16 * (index)(%edx), %eax ; /* load ISR */ \
- incl TD_INTR_NESTING_LEVEL(%ebx) ; \
bsrl %eax, %eax ; /* index of highset set bit in ISR */ \
jz 2f ; \
addl $(32 * index),%eax ; \
@@ -93,7 +91,6 @@ IDTVEC(vec_name) ; \
pushl %eax ; /* pass the IRQ */ \
call lapic_handle_intr ; \
addl $4, %esp ; /* discard parameter */ \
- decl TD_INTR_NESTING_LEVEL(%ebx) ; \
MEXITCOUNT ; \
jmp doreti ; \
2: movl $-1, %eax ; /* send a vector of -1 */ \
@@ -245,12 +242,9 @@ IDTVEC(hardclock)
movl lapic, %edx
movl $0, LA_EOI(%edx) /* End Of Interrupt to APIC */
- movl PCPU(CURTHREAD),%ebx
- incl TD_INTR_NESTING_LEVEL(%ebx)
pushl $0 /* XXX convert trapframe to clockframe */
call forwarded_hardclock
addl $4, %esp /* XXX convert clockframe to trapframe */
- decl TD_INTR_NESTING_LEVEL(%ebx)
MEXITCOUNT
jmp doreti
@@ -273,12 +267,9 @@ IDTVEC(statclock)
FAKE_MCOUNT(13*4(%esp))
- movl PCPU(CURTHREAD),%ebx
- incl TD_INTR_NESTING_LEVEL(%ebx)
pushl $0 /* XXX convert trapframe to clockframe */
call forwarded_statclock
addl $4, %esp /* XXX convert clockframe to trapframe */
- decl TD_INTR_NESTING_LEVEL(%ebx)
MEXITCOUNT
jmp doreti
OpenPOWER on IntegriCloud