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