Chinaunix
标题:
如何将tasklet_schedule()加入队列?
[打印本页]
作者:
testh
时间:
2013-07-29 10:13
标题:
如何将tasklet_schedule()加入队列?
本帖最后由 testh 于 2013-07-29 10:13 编辑
在中断中调用了tasklet_schedule(),大部分情况下可以正常运行,但是会遇到这样一种情况:就是在中断中第n次调用了tasklet_schedule()之后去执行了对应的func,在func还未执行完之前,又产生了中断,这将会再次调用tasklet_schedule()去执行func。但是在tasklet_schedule()的代码中存在以下的代码:
542 static inline void tasklet_schedule(struct tasklet_struct *t)
543 {
544 if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
545 __tasklet_schedule(t);
546 }
复制代码
同时看注释也提醒到,如果在一次tasklet_handle未执行完之前又再次调用了它,便只会执行一次,也就是说第n+1次将不会被执行。
目前希望每次tasklet_handle都能够被执行,对于这个问题,请教大家是怎么处理的?
作者:
eexplorer
时间:
2013-07-30 09:37
回复
1#
testh
> 目前希望每次tasklet_handle都能够被执行,对于这个问题,请教大家是怎么处理的?
这个以现在的设计肯定达不到你的要求。一般的做法都是在irq handler里把事件记下来(比如网卡的话收到的包queue到一个list里),再由tasklet handler统一处理。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2