cvs commit: src/sys/kern kern_intr.c

John Baldwin jhb at
Fri Apr 16 13:25:41 PDT 2004

jhb         2004/04/16 13:25:40 PDT

  FreeBSD src repository

  Modified files:
    sys/kern             kern_intr.c 
  - Enable (unmask) interrupt sources earlier in the ithread loop.
    Specifically, we used to enable the source after locking sched_lock
    and just before we had already decided to do a context switch.
    This meant that an ithread could never process more than one interrupt
    per context switch.  Enabling earlier in the loop before sched_lock is
    acquired allows an ithread to handle multiple interrupts per context
    switch if interrupts fire very rapidly.  For the case of heavy interrupt
    load this can reduce the number of context switches (and thus overhead)
    as well as reduce interrupt latency.
  - Now that we can handle multiple interrupts per context switch, add simple
    interrupt storm protection to threaded interrupts.  If X number of
    consecutive interrupts are triggered before the itherad voluntarily
    yields to another thread, then the interrupt thread will sleep with the
    associated interrupt source disabled (masked) for 1/10th of a second.
    The default value of X is 500, but it can be tweaked via the tunable/
    sysctl hw.intr_storm_threshold.  If an interrupt storm is detected, then
    a message is output to the kernel console on the first occurrence per
    interrupt thread.  Interrupt storm protection can be disabled completely
    by setting this value to 0.  There is no scientific reasoning for the
    1/10th of a second or 500 interrupts values, so they may require tweaking
    at some point in the future.
  Tested by:      rwatson (an earlier version w/o the storm protection)
  Tested by:      mux (reportedly made a machine with two PCI interrupts
                  storming usable rather than hard locked)
  Reviewed by:    imp
  Revision  Changes    Path
  1.107     +33 -8     src/sys/kern/kern_intr.c

More information about the cvs-src mailing list