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

时间:2012-12-13 13:52:47

标签: linux linux-kernel linux-device-driver

我正在尝试理解以下消息的含义:

irq N:nobody cared (try booting with the "irqpoll" option)

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

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

5 个答案:

答案 0 :(得分:8)

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

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

  

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

答案 1 :(得分:7)

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

答案 2 :(得分:2)

最小可运行QEMU示例

QEMU有一个名为edu的教育设备可以产生中断,非常适合探索这个。

首先,我创建了a minimal Linux PCI device driver for it, which handles the interrupt correctly

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

然后,如果我们运行生成IRQ的userland程序,我们得到:

irq 11: nobody cared (try booting with the "irqpoll" option)

然后是堆栈跟踪。

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

答案 3 :(得分:0)

在我的情况下,重新加载驱动程序,因为网卡在短时间内有数十亿的错误。

modprobe -r ixgbe && modprobe ixgbe 

lspci展示了一个未知的设备,其中'卡'曾经是

重新启动后,卡片消失了再也看不到了。

因此错误也可能显示硬件故障。

答案 4 :(得分:0)

见这里:

static inline int bad_action_ret(irqreturn_t action_ret)
{
    if (likely(action_ret <= (IRQ_HANDLED | IRQ_WAKE_THREAD)))
        return 0;
    return 1;
}