news 2026/4/22 11:21:01

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 0:01:43

我力荐这本书,贼好懂,还讲得特别细致!

通过让机器更好地理解并生成类人语言&#xff0c;大模型为人工智能领域打开了全新的可能性&#xff0c;并深刻影响了整个行业。 这是《图解大模型》一书中由作者 Jay Alammar 和 Maarten Grootendorst 撰写的开篇语。随着人工智能的不断演进&#xff0c;大模型正站在最前沿&…

作者头像 李华
网站建设 2026/4/23 9:52:29

从零开始实现简易版Netty(九) MyNetty 实现池化内存的线程本地缓存

在lab7、lab8的实现中可以发现&#xff0c;出于空间利用率的考虑&#xff0c;一个PoolArena会同时被多个线程并发访问。因此无论是Normal还是Small规格的池化内存分配&#xff0c;Netty在进行实际的池化内存分配时都或多或少的需要使用互斥锁来确保用于追踪池化内存状态的元数据…

作者头像 李华
网站建设 2026/4/15 19:38:43

AgenticWorkflow大模型提效方案设计

一、各厂AI编程方案概览 维度阿里&#xff08;通义灵码 / Qoder&#xff09;腾讯&#xff08;CodeBuddy&#xff09;美团&#xff08;NoCode&#xff09;字节&#xff08;TRAE&#xff09;核心产品通义灵码&#xff08;AI编码助手&#xff09;、Qoder&#xff08;AI编程平台&a…

作者头像 李华