Boston Linux & Unix (BLU) Home | Calendar | Mail Lists | List Archives | Desktop SIG | Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings
Linux Cafe | Meeting Notes | Blog | Linux Links | Bling | About BLU

BLU Discuss list archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Interrupt Service Routine or BH


I am writing a paper for school and need help.

I am aware that there have been changes to the 
Interrupt Handling functionality, particularly 
in the kernel version 2.4 and up through 2.6.x. 
In the old days (when was that) an Interrupt was
serviced in two steps. That is, the Interrupt Handler
was broken into two parts, a Top Half and a Bottom Half (BH). 

The Top Half would run to acknowledge the interrupt,
identify the hardware device raising the Interrupt,
check for data or status on the I/O device and return as
quickly as possible to avoid missing any new interrupts. 

Then, the Bottom Half (of the service routine) was scheduled
at some later time to complete the service of the Interrupt
or to do the actual work required to service the hardware device. 

Then, the color or shape of the Bottom Half began to evolve
whereby Tasklets, Softirqs and Work Queues took on the idea
of the earlier Bottom Half. Now, the mention of a Bottom Half
was really in a generic reference to the notion of "deferred work"
or a BH that still accomplished the real work of the Interrupt Handler. 

Specifically, the old idea of a Bottom Half became generic
in a sense, but was actually performed by one of three constructs.
These new software constructs, Softirqs, Tasklets and Work Queues
were really created to improve Scalability and allow more efficient
use of SMP (symmetric multiprocessor) platforms as well. 

Some articles mention a neat example of networking where the 
Top Half notes that a packet has arrived off of the connection.
But the real processing of the packet is done by a softirq (or BH). 
This is understandable, 

So, my question is really this. 

When would a softirq be used? What is the criteria to select a
softirq in lieu of a tasklet or a work queue, to perform
deferred work, or that work of a BH? 

I can?t seem to find any notes on why a Tasklet would be a
better selection for use as a BH, rather than using a Work Queue
or a softirq? 

I did read that one of these constructs, if running on
one select CPU, would then NOT be runnable on another CPU.
I did read about one of the constructs as being serializable
versus ?non-serializable?. 

Can someone elaborate on selection of these constructs or 
any of this idea of processing bottom halves of
Linux Interrupts or ISRs? 


Karina Popkova

BLU is a member of BostonUserGroups
BLU is a member of BostonUserGroups
We also thank MIT for the use of their facilities.

Valid HTML 4.01! Valid CSS!

Boston Linux & Unix /