linux的中断下半部的处理机制有soft-irq,tasklet与workqueue三种,他们共同的缺点是缺少任务调度的支持。因此从2.6.30开始,kernel假如了一种线程化的中断处理机制。其对应的API就是requrest_threaded_irq。而request_irq的内部实现也变成了调用request_threaded_irq来实现,只是第三个参数为空。
中断上下文算是最危险的地方了,很多信息无法保存。一旦中断出问题就是悲剧。把中断处理移到线程中则要方便得多。同时还保留了request_irq的中断 ,对于处理过于简单的中断,可以不生成新的线程。
线程化的中断处理机制对原有的下半部机制是个冲击,除了兼容性外实在想不到他们存在的价值了。
static inline int __must_check
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
const char *name, void *dev)
{
return request_threaded_irq(irq, handler, NULL, flags, name, dev);
}
阅读(3733) | 评论(1) | 转发(0) |