- 论坛徽章:
- 0
|
在tasklet_action函数中有这么一段:
while (list) {
struct tasklet_struct *t = list;
list = list->next;
if (tasklet_trylock(t)) {
if (!atomic_read(&t->count)) {
if (!test_and_clear_bit(TASKLET_STATE_SCHED, &t->state))
BUG();
t->func(t->data);
tasklet_unlock(t);
continue;
}
tasklet_unlock(t);
}
local_irq_disable();
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_enable();
}
当count的值为1时候,就是说这个tasklet被禁用掉了,此tasklet还会被重新放回到队列末尾去,我的问题是既然已经被禁用掉了,为什么还要放到末尾去呢,这样不就使得循环一直不停的进行了吗? |
|