看tasklet源码,有点不明白,还请大家多多指教
void __tasklet_schedule(struct tasklet_struct *t){
unsigned long flags;
local_irq_save(flags);
t->next = NULL;
*__get_cpu_var(tasklet_vec).tail = t;
__get_cpu_var(tasklet_vec).tail = &(t->next);
raise_softirq_irqoff(TASKLET_SOFTIRQ);
local_irq_restore(flags);
}
以上函数中加粗的两行代码中,感觉第二行代码会把第一行的执行结果覆盖掉,这两行应该怎么理解呢
.tail是指向链表末尾元素的next字段的地址的,所以*…….tail=t;就相当于把末尾元素的next指向t了,
然后链表末尾指向&(t->next)
页:
[1]