你好!这里是风筝的博客,

欢迎和我一起交流。


irq 286: nobody cared (try booting with the “irqpoll” option)
之前看到这个一个warning,我看网上其他人写的有点奇怪,手痒特此记录一下:

通过grep查找代码,可以发现这行语句在:__report_bad_irq函数:

static inline int bad_action_ret(irqreturn_t action_ret)
{if (likely(action_ret <= (IRQ_HANDLED | IRQ_WAKE_THREAD)))return 0;return 1;
}static void __report_bad_irq(struct irq_desc *desc, irqreturn_t action_ret)
{unsigned int irq = irq_desc_get_irq(desc);struct irqaction *action;unsigned long flags;if (bad_action_ret(action_ret)) {printk(KERN_ERR "irq event %d: bogus return value %x\n",irq, action_ret);} else {printk(KERN_ERR "irq %d: nobody cared (try booting with ""the \"irqpoll\" option)\n", irq);}......
}

当bad_action_ret函数返回0的时候,也就是action_ret <= (IRQ_HANDLED | IRQ_WAKE_THREAD)的时候,就会有这条打印。

那action_ret 参数是哪里传进来的呢?继续往上看:

void note_interrupt(struct irq_desc *desc, irqreturn_t action_ret)
{unsigned int irq;if (desc->istate & IRQS_POLL_INPROGRESS ||irq_settings_is_polled(desc))return;if (bad_action_ret(action_ret)) {//一般不会为1,为1的话是不会打印nobody cared这个log的report_bad_irq(desc, action_ret);return;}......if (unlikely(action_ret == IRQ_NONE)) {/** If we are seeing only the odd spurious IRQ caused by* bus asynchronicity then don't eventually trigger an error,* otherwise the counter becomes a doomsday timer for otherwise* working systems*/if (time_after(jiffies, desc->last_unhandled + HZ/10))desc->irqs_unhandled = 1;elsedesc->irqs_unhandled++;desc->last_unhandled = jiffies;}......if (unlikely(desc->irqs_unhandled > 99900)) {/** The interrupt is stuck*/__report_bad_irq(desc, action_ret);//在这里调用/** Now kill the IRQ*/printk(KERN_EMERG "Disabling IRQ #%d\n", irq);desc->istate |= IRQS_SPURIOUS_DISABLED;desc->depth++;irq_disable(desc);mod_timer(&poll_spurious_irq_timer,jiffies + POLL_SPURIOUS_IRQ_INTERVAL);}desc->irqs_unhandled = 0;
}

note_interrupt函数省略了一些不重要的代码。
函数里面可以看出,当action_ret 参数为IRQ_NONE时,irqs_unhandled会一直累计计数,irqs_unhandled大于99900时,就会调用__report_bad_irq函数,就有可能会打印log:irq xx: nobody cared (try booting with the “irqpoll” option)

这里我们还是没有搞清楚action_ret 从哪里来,继续往上看:
有两个函数可能调用了note_interrupt函数,一个是:handle_nested_irq(desc, action_ret),另一个是:handle_irq_event_percpu(desc, retval)。
仔细看可以发现,不管是哪个函数,都应该可以知道,action_ret就是我们在写驱动时,注册中断的回调函数。
而且IRQ_NONE是<= (IRQ_HANDLED | IRQ_WAKE_THREAD)的,所以必定会显示出那个log:irq xx: nobody cared (try booting with the “irqpoll” option)

所以我们可以得出结论:驱动代码里注册的中断回调里返回了IRQ_NONE,且中断被触发了99900次,就会有这条log打印

事实也是如此,根据oops里面的堆栈信息,找到对应驱动里的中断函数,确实发现是因为返回了IRQ_NONE

irq: nobody cared (try booting with the “irqpoll” option)相关推荐

  1. irq : nobody cared (try booting with the “irqpoll“ option) 问题说明

    当调试一块网卡的时候,内核报错,打印信息如下: irq 29: nobody cared (try booting with the "irqpoll" option) [] (d ...

  2. irq n: nobody cared (try booting with the irqpoll option)

    __report_bad_irq() 是输出该crash log的函数. /** If 99,900 of the previous 100,000 interrupts have not been ...

  3. linux sata raid,linux – 两个SIL RAID卡的SATA驱动器问题

    我刚刚在家用服务器上放了第二块SiI 3114 SATARaid卡,以便我可以添加 另一对SATA驱动器,增加了我的存储空间.令人讨厌的是,它 似乎不起作用: [ 32.816030] ata5: l ...

  4. NXP(Freescale) QorIQ T2080 PCIe使用

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 PCI device ( ...

  5. 一次触摸屏中断调试引发的深入探究

    首先非常感谢陈莉君老师的赏识,题目名字也是陈老师帮忙起的. 大家好,我叫张昺华,中间那个字和"饼"字一个读音,嘿嘿,相信不少人都不认识我的第二个字吧,这是我一个很聪明的表哥(当时他 ...

  6. 【RV1126】调试GT911,1024x600 7寸 MIPI 电容触摸屏

    文章目录 一.驱动注册失败 二.触摸屏可以触摸,但是x轴数据反了 三.可以触摸了,但是Y轴数据跳变,几乎只有一半的屏幕是可以正常滑动的 三.汇顶触摸屏配置文件解析 四.使用新的配置文件 4.1 新配置 ...

  7. 【realtime】红帽 RedHat Linux实时内核配置要点全面分析

    CentOS Linux实时性配置要点 rtoax 2021年2月 1. 概要 1.1. 实时性补丁 补丁地址:CentOS 7 - RealTime for x86_64: RealTime: ke ...

  8. kernel panic-not syncing:IO-APIC+timer doesn't work!

    相信不少人硬盘安装linux的时候会出现如下所示的APIC错误. kernel panic-not syncing:IO-APIC+timer doesn't work!kernel panic-no ...

  9. pxe引导服务器安装,通过PXE网络引导服务器安装Debian 9(Stretch)

    通过PXE网络引导服务器安装Debian 9(Stretch) 在本教程中,我们将指导您如何通过PXE服务器安装最新版本的Debian 9服务器,并使用Debian归档镜像提供的Internet远程H ...

最新文章

  1. 再回首数据结构—链表
  2. The Ice::Current Object
  3. Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建
  4. Python 中 -m 的典型用法、原理解析与发展演变
  5. unity------------------------------transform.forward与Vector.forward的区别
  6. 一周学会Mootools 1.4中文教程:(7)汇总收尾
  7. spark读取csv转化为rdd(python+scala+java三种代码汇总)
  8. Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】
  9. 32个机械动图,揭秘生活中制造原理
  10. OCP-052考试题库汇总(60)-CUUG内部解答版
  11. ***linux下mysql的root密码忘记解决方法
  12. es分页和mysql分页_用户logstash同步mysql数据到es中7.4.1版本以后输出的sql日志中没有分页信息...
  13. 【每日算法Day 84】面试必考题:Trie(字典树/前缀树)的实现
  14. Matlab图像处理系列3———空间域锐化滤波器
  15. 《社会调查数据管理——基于Stata 14管理CGSS数据》一3.5 中国综合社会调查
  16. Kali-WIFI攻防(一)----无线网络嗅探工具Kismet
  17. 九校联考-长沙市一中NOIP模拟Day1T2 跳房子(jump)
  18. 分辨率、帧率、码率之间的关系
  19. ionic3利用ion-multi-picker实现国际区号选择
  20. 服务器2008r2如何系统还原,windows如何创建系统还原点和还原点还原系统的使用方法...

热门文章

  1. 【渝粤教育】广东开放大学 应用创意写作 形成性考核 (54)
  2. Git rebase(变基)操作详解
  3. C# 操作Word批注(一) 插入、修改、删除Word批注
  4. Codeforces-686C Robbers' watch
  5. 不同分发平台的区别和特点
  6. 经常写大材料的请惠存(转载)
  7. 无线通信技术_Fundamentals of Wireless Communication_QA
  8. 实操:基于LNMP搭建zabbix监控
  9. siss编程--C语言--三子棋
  10. 沐风:如何创造更多的睡后收入?