我的系统是一个CentOS 6.3
(运行内核版本2.6.32-279.el6.x86_64
)。
我有一个可加载的内核模块,它是一个管理 PCIe 卡的驱动程序。insmod
如果我在操作系统启动并运行时手动插入驱动程序,驱动程序会成功加载并且可以运行。
但是,如果我尝试使用 rpm 安装驱动程序然后重新启动系统,则在启动过程中,操作系统会卡住并为所有 CPU 内核吐出以下“软锁定”消息,除了一个处于“软锁定”状态的内核我的驱动程序创建的线程之一。
BUG: soft lockup - CPU#X stuck for 67s! [migration/8:36]
.......(same above message for all cores except one)
BUG: soft lockup - CPU#10 stuck for 67s! [mydriver_thread/8:36]
(one core is locked up in one of the threads in my driver).
我在网上搜索了很多关于这个内核消息/错误的信息,并且有很多关于它的帖子,没有关于它的原因或如何调试的帖子。对于以下问题的任何帮助将不胜感激:
我无法登录系统,我认为这是因为所有内核都处于“软锁定”状态,因此无法从 shell 提示符触发内核转储。我启用了 SysRq,并尝试使用 SysRq 键组合触发内核转储,但没有运气。系统似乎没有响应键盘(甚至没有响应 CapsLock 按钮)。关于在这种情况下如何触发内核转储的任何建议?
我可以想象我的驱动程序线程可能导致“软锁定”。但是,“迁移”线程(内核线程)怎么会因为我的驱动程序而处于“软锁定”状态呢?
通过浏览网络,“迁移”线程用于将任务从一个 cpu 移动到另一个 cpu。有人可以帮我理解这个线程的确切作用吗?以及它如何受到其他线程的影响,如果有的话。