// 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.