linux中断分为上下两部分,两部分的区别就是,上半部分中断是关闭的,防止中断嵌套,但为了提高实时响应,上半部分的执行时间一般都很短,大部分的处理放在下半部分来实现,下半部主要就是softirq来实现的。
执行softirq的时候,上下文环境是中断环境,但是中断是打开的。
softirq中调用的函数必须满足irq相同的条件。
linux中定义了softirq类型包括:
HI_SOFTIRQ=0,
TIMER_SOFTIRQ,
NET_TX_SOFTIRQ,
NET_RX_SOFTIRQ,
BLOCK_SOFTIRQ,
BLOCK_IOPOLL_SOFTIRQ,
TASKLET_SOFTIRQ,
SCHED_SOFTIRQ,
HRTIMER_SOFTIRQ,
RCU_SOFTIRQ,
API
(1) 触发softirq
void raise_softirq(unsigned int nr)
(2) 唤醒softirq 内核线程
void wakeup_softirqd(void)