17

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

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

这是否意味着 IRQ 处理程序即使收到中断也不处理响应?或者调度程序未能调用 irq 处理程序?

这是在什么情况下发生的?

4

5 回答 5

10

这意味着要么没有为该 irq 注册处理程序,要么返回的状态表明 irq 不适合他(来自他支持的硬件),以防共享中断可能是有故障的硬件/固件或错误的驱动程序

于 2012-12-13T14:27:49.803 回答
9

理想情况下,上述消息后面应该有一个堆栈跟踪,它应该可以帮助您确定哪个子系统导致了问题。此消息意味着中断处理程序由于开销而被卡住,并且没有返回,从而导致系统禁用 IRQ#X。在固件有问题的情况下会出现这种情况。

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

内核 /vmlinuz-version ro root=/dev/sda1 quiet irqpoll

于 2014-11-19T02:21:31.823 回答
7

最小可运行 QEMU 示例

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

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

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

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

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

其次是堆栈跟踪。

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

于 2017-06-24T09:03:40.937 回答
1

就我而言,在重新加载驱动程序后,因为网卡在短时间内出现了数十亿个错误。

modprobe -r ixgbe && modprobe ixgbe 

lspci 显示了一个未知设备,该设备曾经是“卡”

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

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

于 2013-08-26T10:20:29.363 回答
-7

看这里:

static inline int bad_action_ret(irqreturn_t action_ret)
{
    if (likely(action_ret <= (IRQ_HANDLED | IRQ_WAKE_THREAD)))
        return 0;
    return 1;
}
于 2017-05-29T14:51:59.953 回答