cvs commit: src/sys/platform/pc32/apic apic_vector.s src/sys/platform/pc32/icu icu_vector.s
Matthew Dillon
dillon at crater.dragonflybsd.org
Mon Jan 14 07:28:04 PST 2008
dillon 2008/01/14 07:27:17 PST
DragonFly src repository
Modified files:
sys/platform/pc32/apic apic_vector.s
sys/platform/pc32/icu icu_vector.s
Log:
Attempt to fix an interrupt recursion which can occur in specific
situations. The 'slow' interrupt code schedules an interrupt thread
without holding a critical section in an attempt to allow the thread to
preempt the current thread. If the thread preempts it can re-arm the
interrupt prior to returning and cause an interrupt recursion to occur
before the interrupt code is able to finish doreti, leading to a stack
overflow.
Since we want to preempt we cannot use a critical section to prevent
the recursion. Instead, use curthread->td_nest_count to prevent
recursive interrupts while the thread is unprotected by a critical
section. The same condition will now cause successive interrupts to
be queued and then dispatched synchronously by doreti.
Reported-by: "Simon 'corecode' Schubert" <corecode at fs.ei.tum.de>
Revision Changes Path
1.37 +7 -0 src/sys/platform/pc32/apic/apic_vector.s
1.31 +7 -0 src/sys/platform/pc32/icu/icu_vector.s
http://www.dragonflybsd.org/cvsweb/src/sys/platform/pc32/apic/apic_vector.s.diff?r1=1.36&r2=1.37&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/platform/pc32/icu/icu_vector.s.diff?r1=1.30&r2=1.31&f=u
More information about the Commits
mailing list