news 2025/12/20 7:00:30

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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)后正常。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/12 18:10:29

精美主图 通达信指标 通达信 主图 源码 贴图

{}MA5:MA(C,5); MA6:MA(C,6); MA10:MA(C,10); MA20:MA(C,20);A2:REF(MA20,1);J1:(MA20-A2)/A2*100;MJ1:MA(J1,3); MA30:MA(C,30); MA60:MA(C,60); 乖离2:(MA20-MA30)/MA30*100; VAR1:IF(BETWEEN(乖离2,-2,5),2,0); MAX1:MAX(MA20,MA30); MAX2:MAX(MAX1,MA60); MIN0:MIN(MA20,MA…

作者头像 李华
网站建设 2025/12/12 18:10:21

软件测试求职双轨制:招聘平台与内推的博弈与选择

在数字经济蓬勃发展的2025年&#xff0c;软件测试作为产品质量的守护者&#xff0c;其人才市场需求持续升温。对于从业者而言&#xff0c;求职渠道的选择直接影响着岗位匹配效率、职业发展路径乃至薪资谈判空间。当前主流的招聘平台与内推机制构成求职市场的“双轨制”&#xf…

作者头像 李华
网站建设 2025/12/12 18:09:40

2025大模型行业新风向:从技术狂欢到CBDG四维生态的体系化较量

中国大模型行业正从技术比拼转向生态较量&#xff0c;2024年市场规模294.16亿元&#xff0c;预计2026年突破700亿元。CBDG四维生态&#xff08;消费者、企业、设备、政府&#xff09;成为核心发展范式&#xff0c;企业竞争力取决于生态构建、技术研发、行业赋能、商业变现和创新…

作者头像 李华
网站建设 2025/12/12 18:09:36

跨行业转型软件测试的成功案例

软件测试的包容性与转型潜力 软件测试作为一个强调流程、质量和用户思维的领域&#xff0c;为跨行业转型者提供了独特机遇。相比于纯开发岗位&#xff0c;测试工作更注重系统性和沟通能力&#xff0c;这让来自教育、制造、金融甚至艺术背景的人士有机会进入IT行业。本文通过多…

作者头像 李华
网站建设 2025/12/19 22:07:48

构建RPM包

打包说明 原理介绍 RPM打包的时候需要编译源码&#xff0c;需要把编译好的配置文件、二进制命令文件等放到合适的位置&#xff0c;还要根据需要对RPM的包进行测试&#xff0c;这些都需要先有一个“工作空间”。rpmbuild命令使用一套标准化的“工作空间”&#xff1a; $ rpmd…

作者头像 李华