A softirq must be marked to indicate it is to be executed.
Typically an interrupt handler (the top half) marks its softirq for execution before returning.
Marked softirq's execute later at these possible times:
- at the return from interrupt (after the interrupt handler(s) return)
- when a kernel thread for softirq's is scheduled and runs
- some specific code that checks for softirq's (e.g. networking code)