13 中断线程
1 概述
避免workqueue中存在多个work会导致后面的work执行存在受前面工作的影响
在中断下半部专门申请一个内核线程来处理这个事件,这个内核线程专门用于此中断
1.1 内部机制
设备发生中断时内核会调用handler处理中断事件(如果中断函数存在)。中断处理完成后,如果有需要的中断线程需要处理则调用中断函数返回
IRQ_WAKE_THREAD,用于唤醒中断线程;如果没有中断线程需要处理则返回IRQ_HANDLED
2 常用API
2.1 request_threaded_irq
int request_threaded_irq(unsigned int irq, irq_handler_t handler,
irq_handler_t thread_fn, unsigned long irqflags,
const char *devname, void *dev_id)
handler我们可以提供也可以不提供
-
提供
中断函数的返回值必须是IRQ_WAKE_THREAD,在thread_fn被正确处理,在返回IRQ_HANDLED
-
不提供
内核默认返回IRQ_WAKE_THREAD