interrupt threads

John Baldwin jhb at freebsd.org
Tue May 28 17:58:29 UTC 2013


On Sunday, May 26, 2013 2:16:39 am Orit Moskovich wrote:
> Hi,
> 
> I'm trying to understand the difference between using taskqueues defined by 
ithreads (taskqueue_swi, taskqueue_swi_giant, taskqueue_fast) to defer an 
interrupt's work, and defining an interrupt handler to give as ithread 
parameter to bus_setup_intr.
> Is there a difference in the priority? Which of the methods is preferable 
when writing a network device and performance is important?

There are two types of interrupt handlers somewhat similar to the setup in OS 
X's IOKit: a filter which runs in the borrowed thread context when an 
interrupt happens, and a threaded handler.  Currently you can only use one or 
the other.  However, filters are more restricted in what they can do (can only 
use spin locks, can call wakeup(), but generally not use many other APIs).  
Most drivers just use a threaded handler that runs in an ithread.  However, a 
few drivers use a filter (e.g. the Intel gigabit driver uses a filter to 
workaround an Intel chipset bug where if you mask the interrupt in the I/O 
APIC while the ithread runs, the chipset decides you aren't using the APIC at 
all and routes the NIC's interrupt to an alternate pin triggering a duplicate 
interrupt on a pin shared with a USB controller).  When using a filter a 
driver needs to manually schedule a thread context to perform the actions it 
cannot perform in the filter (e.g. passing received packets up the network 
stack).  The taskqueue_fast is used to manage those threads.  Typically the 
threads backing such a taskqueue will have the same priority as ithreads as 
they basically function as ithreads.

Eventually we will support having both a filter and a threaded handler for an 
interrupt where the filter's return value decides whether or not the threaded 
handler is scheduled to run.

However, in most cases you can simply use a normal ithread handler and not 
bother with a filter.

-- 
John Baldwin


More information about the freebsd-arch mailing list