The term softirq loosely translates to soft interrupt, and as the name suggests, deferred routines managed by this framework are executed at a high priority but with hard interrupt lines enabled. Thus, softirq bottom halves (or softirqs) can preempt all other tasks except hard interrupt handlers. However, usage of softirqs is restricted to static kernel code and this mechanism is not available for dynamic kernel modules.
Each softirq is represented through an instance of type struct softirq_action declared in the kernel header <linux/interrupt.h>. This structure contains a function pointer that can hold the address of the bottom half routine:
struct softirq_action{ void (*action)(struct softirq_action *);};
Current versions of the ...