// Registers softirq handler
extern void open_softirq (
int nr,
void (*action)(struct softirq_action*),
void *data);
void open_softirq (...)
{
softirq_vec [nr].data = data;
softirq_vec [nr].action = action;
}
// Schedules softirq handler
inline fastcall void raise_softirq_irqoff (unsigned int nr)
{
or_softirq_pending (1UL << (nr));
if (!in_interrupt ()) wakeup_softirqd ();
}
Multiprocessor system can execute multiple soft irqs concurrently.
One soft irq can execute concurrently on multiple processors.