为什么有些代码调用request_threaded_irq并将NULL作为irq_handler的参数?

Rah*_*hul 2 kernel interrupt linux-device-driver linux-kernel

根据内核文档,request_threaded_irq用于将其分为两部分,irq_handler检查中断是否源自设备.如果是,则需要禁用设备上的中断并返回IRQ_WAKE_THREAD,这将唤醒处理程序线程并运行@thread_fn.

但我发现了一些代码寄存器中断,request_threaded_irq在传递时使用NULL,irq_handler并且它们保持完整的功能thread_fn.

所以我怀疑是为什么我们request_threaded_irq()在这种情况下使用,而我们可以轻松使用request_irq,其行为与上述场景相同.

CL.*_*CL. 5

文件说:

如果为NULL且thread_fn!= NULL,则安装默认的主处理程序

默认的主处理程序是未记录的,但其源代码应该是自解释的:

 static irqreturn_t irq_default_primary_handler(int irq, void *dev_id)
 {
         return IRQ_WAKE_THREAD;
 }
Run Code Online (Sandbox Code Playgroud)

  • @Rahul,至少,实际处理程序运行的上下文(进程 VS 硬 IRQ)存在差异,顺便说一下,这是线程 IRQ 处理程序的要点。 (2认同)