当前位置: 首页 > news >正文

BUG: failure at drivers/pci/msi.c:376/free_msi_irqs()!

文章目录

  • 1. pci显示模块卸载
  • 2. free_irq未被调用导致xxfb_pci_unregister报错
  • 3. free_irq第二个参数与request_irq最后一个参数不一致导致报错

1. pci显示模块卸载

为方便调试显示驱动将pci模块xxfb编译为内核模块,卸载命令如下:

echo0>/sys/class/vtconsole/vtcon1/bind systemctl stop lightdm rmmod xxfb

2. free_irq未被调用导致xxfb_pci_unregister报错

pci_disable_msi调free_msi_irqs报错:

BUG:failure at drivers/pci/msi.c:376/free_msi_irqs()!0Kernel panic-not syncing:BUG!CPU:0PID:3136Comm:rmmod Not tainted5.10.0-00811-g123456789012-dirty #134Hardware name:WIAT WIAT Platform Software,BIOS xxxx-200000May2420206Trace:[<ffffffff80918bb0>]walk_stackframe+0x0/0x100[<ffffffff81b011d8>]dump_stack+0xd0/0x110[<ffffffff81af85c8>]panic+0x1a0/0x4e0[<ffffffff811b6df0>]free_msi_irqs+0xe0/0x270[<ffffffff811b78d0>]pci_disable_msi+0x190/0x1f0[<fffff0000021a3b4>]cleanup+0xf4/0x170[ichfb][<fffff0000021a458>]xxfb_pci_unregister+0x28/0x60[ichfb][<ffffffff8119c544>]pci_device_remove+0x54/0x130[<ffffffff814a347c>]__device_release_driver+0x23c/0x3a0[<ffffffff814a5028>]driver_detach+0x158/0x210[<ffffffff814a267c>]bus_remove_driver+0x8c/0x150[<ffffffff814a5a28>]driver_unregister+0x48/0xa0[<ffffffff8119be34>]pci_unregister_driver+0x34/0x110[<fffff0000022b330>]xxfb_exit+0x20/0x38[ichfb][<ffffffff80a335fc>]sys_delete_module+0x1cc/0x370[<ffffffff80912014>]entSys+0xf4/0x110[<ffffffff80c08084>]sys_close+0x24/0x702SMP:stopping secondary CPUs0---[end Kernel panic-not syncing:BUG!]---

看下free_msi_irqs:

staticvoidfree_msi_irqs(structpci_dev*dev){structlist_head*msi_list=dev_to_msi_list(&dev->dev);structmsi_desc*entry,*tmp;structattribute**msi_attrs;structdevice_attribute*dev_attr;inti,count=0;for_each_pci_msi_entry(entry,dev)if(entry->irq)for(i=0;i<entry->nvec_used;i++)BUG_ON(irq_has_action(entry->irq+i));//报错地方pci_msi_teardown_msi_irqs(dev);...

报错处BUG_ON逻辑为真的函数:irq_has_action(entry->irq + i))

staticinlineintirq_desc_has_action(structirq_desc*desc){returndesc->action!=NULL;}

也即desc->action未释放。查看代码,DC DMA申请了未释放,xxfbhw_dma_init中调用了

err=request_irq(xx_par->irq_dma,xxfbhw_dma_irq_handler,IRQF_SHARED,"DMA_TRANSFER_IRQ",xx_par);

xxfbhw_dma_exit未调用free_irq进行irq_dma释放。DMA是非共享中断,因此在xxfbhw_dma_exit中添加free_irq

xxfbhw_dma_exit{...free_irq(xx_par->irq_dma,0);//to add}

3. free_irq第二个参数与request_irq最后一个参数不一致导致报错

constvoid*free_irq(unsignedintirq,void*dev_id)//dev_id----------------------------------------------------staticinlineint__must_checkrequest_irq(unsignedintirq,irq_handler_thandler,unsignedlongflags,constchar*name,void*dev)//dev

xxfbhw_dma_exit中添加free_irq(xx_par->irq_dma, 0)后依然报错:Trying to free already-free IRQ XX

4------------[cut here]------------4WARNING:CPU:1PID:733at kernel/irq/manage.c:1751free_irq+0x32c/0x630Trying to free already-free IRQ58Modules linked in:cxxfb(-)c ngbec sch_fq_codelc efivarfsc ipv6c CPU:0PID:3136Comm:rmmod Not tainted5.10.0-00811-g123456789012-dirty #134Hardware name:WIAT WIAT Platform Software,BIOS xxxx-200000May2420206Trace:[<ffffffff80918bb0>]walk_stackframe+0x0/0x100[<ffffffff81b011d8>]dump_stack+0xd0/0x110[<ffffffff80959a5c>]__warn+0x13c/0x1f0[<ffffffff809e8478>]free_irq+0x328/0x630[<ffffffff809e8478>]free_irq+0x328/0x630[<ffffffff81af89d4>]warn_slowpath_fmt+0xcc/0x100[<ffffffff809e8478>]free_irq+0x328/0x630[<ffffffff809e8478>]free_irq+0x328/0x630[<ffffffff81003b4c>]debugfs_rename+0x3bc/0x3c0[<ffffffff80c42cc4>]mntput_no_expire+0x184/0x3f0[<fffff00000229014>]xxfbhw_dma_exit+0x94/0xf0[xxfb][<fffff0000021a420>]cleanup+0x160/0x170[xxfb][<fffff0000021a458>]xxfb_pci_unregister+0x28/0x60[xxfb][<ffffffff8119c544>]pci_device_remove+0x54/0x130[<ffffffff814a347c>]__device_release_driver+0x23c/0x3a0[<ffffffff814a5028>]driver_detach+0x158/0x210[<ffffffff814a267c>]bus_remove_driver+0x8c/0x150[<ffffffff814a5a28>]driver_unregister+0x48/0xa0[<ffffffff8119be34>]pci_unregister_driver+0x34/0x110[<fffff0000022b350>]xxfb_exit+0x20/0x38[xxfb]

free_irq 第二个参数要与request_irq最后一个参数一致,修改为free_irq(xx_par->irq_dma, xx_par)后正常。

http://www.cnnetsun.cn/news/22880.html

相关文章:

  • SRC漏洞挖掘经验+技巧篇,(非常详细)零基础入门到精通,收藏这一篇就够了_src 漏洞挖掘技巧
  • RINEX文件进行卫星导航解算
  • 【webrtc】继续编译aar 2025-12-12
  • 谷歌新架构突破Transformer超长上下文瓶颈!
  • 视觉回归测试:以Applitools为例的自动化实践与效能提升
  • 从零开始的DeepSeek微调训练实战(SFT)
  • 波段启动源码 附图 通达信 贴图底部买多
  • Spring-AI WebClient 和 RestClient 用法解读
  • Oracle携手OpenAI构建企业级AI平台引发关注
  • 【科研辅导】哪家好:专业深度测评与排名前五榜单
  • 基于区块链的电子学历证书存证小程序开发(开题报告)
  • 亲测 CAXA 电子图板 2025:协作再也不用愁格式兼容 最新版本下载安装步骤
  • 《算法备案全攻略:轻松搞定,合规上线!》
  • 【建议收藏】从0到1:产品经理学习大模型的全方位优势与应用场景全解析
  • “国六”标准下,WINDHILL助力车企优化排放测试流程
  • 63、Unix 系统中的 vi、ex 和 vim 编辑器使用指南
  • 合同盖章前,如何比对差异,确保纸质版与电子版100%一致?
  • java+vue+SpringBoot校园失物招领系统(程序+数据库+报告+部署教程+答辩指导)
  • java+vue+SpringBoot贸易行业crm系统(程序+数据库+报告+部署教程+答辩指导)
  • 81、Linux系统管理操作指南
  • 76、深入理解 Git 常用命令
  • 药物发现领域有哪些推荐的文献检索工具?
  • TikTok 矩阵稳定性实战指南:从环境搭建到风险防控的全链路方案​
  • 聊聊分段斜坡补偿电路在 BOOST 和 BUCK 系统中的应用
  • 搞过电机控制的都知道,调PI参数能让人头秃。今天咱们来拆解一个能自动整定电流环参数的Simulink仿真模型,手把手看它怎么把玄学变成科学
  • springboot基于vue的防诈宣传平台 可视化_ig18pfq1
  • springboot基于vue的阿克苏地区收割机租赁系统 农机销售交易网站_4j60pknt
  • 毕业设计项目 深度学习yolo11水果识别系统(源码+论文)
  • 毕业设计项目 深度学习动物识别系统(源码+论文)
  • PandasAI应用与实战解析