Bottom Half: for historical reasons, functions with `_bh' in them often now refer to any software interrupt, e.g. spin_lock_bh() blocks any software interrupt on the current CPU. Bottom halves are deprecated, and will eventually be replaced by tasklets. Only one bottom half will be running at any time.

Hardware Interrupt / Hardware IRQ

Hardware interrupt request. in_irq() returns true in a hardware interrupt handler (it also returns true when interrupts are blocked).

Interrupt Context

Not user context: processing a hardware irq or software irq. Indicated by the in_interrupt() macro returning true (although it also returns true when interrupts or BHs are blocked).


Symmetric Multi-Processor: kernels compiled for multiple-CPU machines. (CONFIG_SMP=y).


Strictly speaking, one of up to 32 enumerated software interrupts which can run on multiple CPUs at once. Sometimes used to refer to tasklets and bottom halves as well (ie. all software interrupts).

Software Interrupt / Software IRQ

Software interrupt handler. in_irq() returns false; in_softirq() returns true. Tasklets, softirqs and bottom halves all fall into the category of `software interrupts'.


A dynamically-registrable software interrupt, which is guaranteed to only run on one CPU at a time.


Uni-Processor: Non-SMP. (CONFIG_SMP=n).

User Context

The kernel executing on behalf of a particular process or kernel thread (given by the current() macro.) Not to be confused with userspace. Can be interrupted by software or hardware interrupts.


A process executing its own code outside the kernel.