同一句 IRQ_NONE,独占线报警,共享线静默

发布时间:2026/10/24 6:43:40

同一句 IRQ_NONE,独占线报警,共享线静默 本文是《request_irq 成功却收不到中断》系列第 1 篇。一条 IRQ 线上挂着两个设备。其中一个的 handler 里状态位的掩码抄的是旧版手册irqreturn_tmy_handler(intirq,void*dev_id){u32 statusreadl(dev-regsSTATUS_REG);if(!(statusMY_INT_MASK))/* 掩码来自旧版手册 */returnIRQ_NONE;/* 每次都说不是我的 */...}这个设备从此再没处理过一次中断。奇怪的是 dmesg 干净得像没出过事没有nobody cared没有Disabling IRQ/proc/interrupts里那一行的计数还在稳定上涨。如果这条线上只有它一个设备同样的 bug 会在十万次中断之后被内核点名irq 42: nobody cared (try booting with the irqpoll option) Disabling IRQ #42同一份 handler同一个 bug换一条线结局两样——独占线上等得到内核开口共享线上永远不会被点名。场景由反复出现的典型故障模式归纳非具体设备记录下文机制均可核对。第一反应基本都是错的面对设备不工作但日志干净第一反应通常是内核总该发现没人处理吧。这个判断在独占线上成立在共享线上不成立——它不是一个报得慢的问题而是一条根本不存在的上报通道线型同类 bug 的暴露形式独占十万次后nobody caredDisabling IRQ #N共享同线有别的 handler 在认领 无日志、无计数、无状态位一句反证/proc/interrupts里那一行的计数是整条线的、按 CPU 分列行名只是 handler 的名字不是它的命中次数kernel/irq/proc.c:498-501。所以它一直在涨看起来很正常——那是邻居的贡献。真正的原因检测看的是聚合值不是你的返回值内核的虚警检测入口是note_interrupt()kernel/irq/spurious.c:272。它不在每个 handler 返回时被调用而是在整条线的所有 handler 都跑完之后才被调用一次拿到的是聚合结果kernel/irq/handle.c:200-201。聚合只有一行kernel/irq/handle.c:185retval|res;/* 把每个 handler 的返回值并进来 */三个返回值的位表示决定了这一行怎么工作include/linux/irqreturn.h:12-14IRQ_NONE 0IRQ_HANDLED 1IRQ_WAKE_THREAD 2。位或的后果是——只要有一位是 1整体就非 0。而拒认计数的门槛写在统计层kernel/irq/spurious.c:385只有聚合值恰好等于IRQ_NONE也就是全链都拒认时才累加。把两者拼起来看你的返回邻居的返回聚合值统计层看到什么IRQ_NONEIRQ_NONE0进入拒认计数十万次后禁用IRQ_NONEIRQ_HANDLED1认为有人管了你的拒认消失IRQ_NONEIRQ_WAKE_THREAD2同上判据是确定的不是有时候共享线上有 N 个 handler只要其中 N−1 个正常剩下那 1 个的持续拒认永远进不了统计判定。共享线在真实系统里并不罕见——PCI 传统 INTx 线、ISA 线以及大量内核自带驱动已经先占了这条线的场景都算。把这条判定链完整画出来——返回值走出 handler 之后会经过什么、被谁看见图里最容易被忽略的是右下那格它不是报得慢而是没有暴露通道——日志加不出来你不能给内核的统计层加计数判定只能前移到代码审查。底部那条出口与线型无关返回值落在三个枚举之外最常见的来源是忘了写return会被识别为bogus return value最多报 100 次后限流静默kernel/irq/spurious.c:227。把视角沉到源码层——上一张图里那句位或聚合在分发链上的位置是这样链上每一环都有行号可查。值得停一停的是倒数第二环handler 执行完后内核先做逐项判定越界、WAKE_THREAD 检查然后才是那一行位或——你在 handler 里返回的值只是聚合的一个输入。可操作今天就能查的四条先数线上有几个 handlergrep -E ^ *[0-9]: /proc/interrupts看目标 IRQ 那一行出现了几个名字。有邻居就不要再等日志。检查返回值有没有依据handler 里若没有任何寄存器读取、或无条件返回固定值直接标红——if (!(status MASK)) return IRQ_NONE;与if (status MASK) return IRQ_NONE;一字之差、语义相反编译器不会提醒你。给拒认分支自建计数内核不提供某个 handler 拒认了多少次这个计数器要让它在运行期可见就得在模块里自己建。做法是一个atomic_t配一个 debugfs 或/proc入口——不要写成每次拒认都pr_info高频线上会把 dmesg 刷爆。只用/proc/interrupts判断 handler 是否工作是错的它的计数归整条线所有。前三条查完你大概会想知道那套十万次才报的统计到底怎么算的为什么是十万次没展开的部分虚警统计本身还有一整套阈值与两个计数为什么是十万次、99.9%占比、100ms窗口/proc/irq/N/spurious里irq_count与irqs_unhandled两条计数的读法正好相反混用会算出完全错误的结论。这些本文没有展开。下一篇下一篇就聊这三个数怎么来的nobody cared为什么非等十万次以及那条容易读反的计数——很多人以为早就该禁用了其实那个计数一直在被悄悄重置。回复「交流」我很乐意分享更精彩的内容。感谢阅读。转载请注明出处与作者。
延伸阅读

更多相关文章

2026/10/24 6:43:40

从“知道”到“做到”:一套可执行的技能学习框架

看到“skills”这个标题,我第一反应不是“技多不压身”这种漂亮话,而是另一个更扎心的问题:为什么我们断断续续学了不少技能,最后能真正派上用场的却寥寥无几?这些年我见过太多人收藏了一堆教程、买了好几门课&#xf…

2026/10/24 7:33:42

科莱特 SAP FICO 学员真实经历:一个普通财务人的成长复盘

前面四篇,我写了为什么转 SAP、怎么学、怎么面、怎么进项目活下来。这一篇,是这个系列的收尾。不聊操作、不聊面试技巧。我想聊聊这整件事给我的认知冲击,走到今天,脑子里真正变了什么。如果你也在犹豫要不要转、转了之后值不值、…

2026/10/24 7:33:42

Swift 常量详解:let 与 const 的正确使用方式

1. 引言在 Swift 编程语言中,常量是构建安全、可预测代码的基础。与变量不同,常量一旦赋值便不可更改,这不仅能防止意外修改,还能让代码的意图更加清晰。本文将深入讲解 Swift 常量的定义、使用场景以及最佳实践,并通过…

2026/10/24 7:33:42

坚果云收件箱的10个神用法:从收集周报到客户合同文件自动归档

文章目录一、文件收集的「三大灾难」二、收件箱的核心机制2.1 收件箱 vs 传统收集方式2.2 收件箱的创建步骤三、10个神用法逐一拆解用法一:团队周报收集用法二:学生作业提交用法三:客户合同签约用法四:供应商报价收集用法五&#…

2026/10/24 7:33:42

SSD1322 OLED驱动芯片底层机制拆解:从接口时序到灰度表

简介:SSD1322数据手册是Solomon Systech公司发布的高性能有机发光二极管驱动控制器官方技术文档,面向显示驱动开发工程师、嵌入式硬件设计人员和屏体调试工程师,用于解决芯片选型、引脚连接、寄存器配置以及显示时序匹配等问题。资源以单个PD…

2026/10/24 7:33:42

响应式数据流实战:从零构建实时数据处理内核

1. 从“rea”这个标题说起:一个被低估的缩写背后藏着什么第一次看到“rea”这个标题,我承认自己愣了几秒。它太短了,短到像是一个被截断的单词,又像是一个随手敲下的代号。但恰恰是这种极简的标题,往往藏着最值得深挖的…

2026/10/24 7:28:42

多智能体协作框架agency-agents:架构设计与工程实践

1. 从"agency-agents"这个标题说起:一个多智能体协作框架的完整拆解第一次看到"agency-agents"这个命名的时候,我的直觉是:这大概率是一个围绕"代理"和"代理机构"概念构建的多智能体协作系统。拆开来…

2026/10/23 22:56:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/24 0:02:40

MATLAB缩进快捷键与批量格式化实战指南

1. 被自动缩进折磨的那些年如果你写过MATLAB代码,大概率经历过这种场景:从某个文档、网页或者聊天记录里复制了一段代码,粘贴进编辑器之后,每一行前面都带着莫名其妙的空格,有的行首是四个空格,有的是一个T…

2026/10/24 0:02:40

用Poco实现Qt风格信号与槽的跨平台C++方案

简介:本资源是一份面向C中级开发者的技术实践工程,聚焦于在非Qt框架环境下模拟实现Qt核心通信机制——信号与槽,借助Poco网络库的事件系统完成解耦式对象通信。适用于需在跨平台C项目中引入松耦合回调机制、但受限于无法集成Qt依赖的开发场景…

2026/10/24 0:02:40

ESXi裸机虚拟化安装指南:从硬件兼容到虚拟机部署

1. 为什么还要折腾ESXi:从一台闲置机器说起手里攒了几台淘汰下来的迷你主机,配置不算差,i5加16G内存,扔了可惜,装个桌面系统又觉得浪费。这种场景下,ESXi就成了一个绕不开的选择。它是一套裸机虚拟化平台&a…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑