Interrupt handlers in Linux need not be reentrant. When a given interrupt handler is executing, the corresponding interrupt line is masked out on all processors, preventing another interrupt on the same line from being received. Normally all other interrupts are enabled, so other interrupts are serviced, but the current line is always disabled. Consequently, the same interrupt handler is never invoked concurrently to service a nested interrupt. This greatly simplifies writing your interrupt handler.
<<Linux Kernel Development>>
另外,同一个类型的softirq可以同时运行在几个 CPU之上,所以 softirq必须是可以重入的。
同一类型的tasklet则同时只能有一个运行。