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

posted @ 2023-03-19 16:48  人民广场的二道贩子  阅读(11)  评论(0编辑  收藏  举报