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

问题描述 投票:0回答:6

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

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

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

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

linux linux-kernel linux-device-driver
6个回答
12
投票

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


9
投票

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

需要将

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

kernel /vmlinuz-version ro root=/dev/sda1 安静 irqpoll


8
投票

最小可运行 QEMU 示例

QEMU 有一个名为

edu
的教育设备,它可以生成中断,非常适合探索这一点。

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

现在我们可以通过从代码中注释掉

request_irq
free_irq
来轻松生成错误。

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

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

后跟堆栈跟踪。

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


1
投票

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

modprobe -r ixgbe && modprobe ixgbe 

lspci 显示了一个未知设备,其中“卡”曾经位于

重启后该卡就消失了,再也看不到了。

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


0
投票

我在 Lenovo m625q 瘦客户端上升级 BIOS 后收到相同的消息。

irqpoll
确实修复了错误,但我不喜欢这个解决方案。我也不想因为懒惰而降级固件。这最终导致我做了更多的工作..

我在

dmesg
中遇到的错误指向声卡。

我发现欺骗操作系统可以使事情顺利进行而不会出现错误。

acpi_osi=! acpi_osi='Windows 2013'

我首先尝试了

Windows 2015
,它对应于Windows 10初始版本。 (2013年是windows 8.1,参考linux源码),但是无法完全启动。

查看适合您的特定固件使用的可用选项

(cd /tmp && mkdir acpi && cd acpi && sudo acpidump -b && for i in *; do echo $i:; strings -a $i | grep -i windows; done)

感谢出色的答案:https://unix.stackexchange.com/a/609989/14907

我认为值得尝试或诉诸

irqpoll
,这可能会或可能不会产生可衡量的性能影响。我想取决于失败的设备/驱动程序及其使用情况。


-8
投票

看这里:

static inline int bad_action_ret(irqreturn_t action_ret)
{
    if (likely(action_ret <= (IRQ_HANDLED | IRQ_WAKE_THREAD)))
        return 0;
    return 1;
}
© www.soinside.com 2019 - 2024. All rights reserved.