我正在尝试理解以下消息的含义:
irq N:nobody cared (try booting with the "irqpoll" option)
这是否意味着即使已经获得中断,IRQ处理程序也不处理响应?或者调度程序无法调用irq处理程序?
这种情况发生在什么条件?
答案 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_irq
和free_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;
}