static inline void tasklet_hi_schedule(struct tasklet_struct *t) { /*标志位的检查*/ if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) __tasklet_hi_schedule(t); }
void __tasklet_hi_schedule(struct tasklet_struct *t) { unsigned long flags; local_irq_save(flags); t->next = NULL; *__get_cpu_var(tasklet_hi_vec).tail = t; __get_cpu_var(tasklet_hi_vec).tail = &(t->next); /*激活对应softirq_vec[]数组中HI_SOFTIRQ下标 的软中断,就是tasklet_hi_vec链表*/ raise_softirq_irqoff(HI_SOFTIRQ); local_irq_restore(flags); } 实现了上面的几个操作流程,当软中断函数一旦被唤醒就由do_softirq函数来执行。