理解内核消息'没人关心(尝试使用"irqpoll"选项启动)'

Abh*_*itG 13 linux linux-device-driver linux-kernel

我试图理解以下消息的含义:

irq N:nobody cared (try booting with the "irqpoll" option)
Run Code Online (Sandbox Code Playgroud)

这是否意味着即使已经获得中断,IRQ处理程序也不处理响应?或者调度程序无法调用irq处理程序?

在什么条件下发生这种情况?

ask*_*skb 9

理想情况下,上面的消息后面应该跟一个堆栈跟踪,它可以帮助您确定导致问题的子系统.此消息表示中断处理程序由于开销而卡住,并且没有返回,从而导致系统禁用IRQ#X. 这可以在有缺陷的固件的情况下看到.

irqpoll选项需要添加到grub.conf中,这意味着,当未处理中断时,搜索所有已知的中断处理程序以获取相应的处理程序,并检查每个计时器中断的所有处理程序.这有时对于运行固件损坏的系统很有用.grub.conf中的内核命令行应如下所示:

kernel/vmlinuz-version ro root =/dev/sda1 quiet irqpoll


Rab*_*ber 7

这意味着要么没有为该irq注册处理程序,要么返回状态指示irq不适合他(来自他支持的硬件),如果共享中断可能是有故障的HW/FW或有缺陷的驱动程序


Cir*_*四事件 7

最小可运行 QEMU 示例

QEMU 有一个教育设备,称为edu生成中断,非常适合探索这一点。

首先,我为它创建了一个最小的 Linux PCI 设备驱动程序,它可以正确处理中断

现在我们可以通过注释掉request_irqfree_irq从代码中轻松生成错误。

然后,如果我们运行生成 IRQ 的用户态程序,我们会得到:

irq 11: nobody cared (try booting with the "irqpoll" option)
Run Code Online (Sandbox Code Playgroud)

其次是堆栈跟踪。

正如其他人所提到的:未处理的 IRQ。