微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux陷入CPU软locking?

我的系统是一个CentOS 6.3 (运行内核版本2.6.32-279.el6.x86_64 )。

我有一个可加载的内核模块,它是一个pipe理PCIe卡的驱动程序。 如果我在OS启动并运行时手动插入使用insmod的驱动程序,则驱动程序将成功加载并运行。

但是,如果我尝试使用rpm安装驱动程序,然后重新引导系统,在启动过程中,操作系统卡住了所有cpu核心的“软locking”消息,除了一个处于“软locking”状态的核心我的驱动程序创build的线程之一。

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).

我在网上查了很多关于这个msg / bug的信息,有很多关于它的文章,关于什么原因或者怎样debugging都没有。 以下问题的任何帮助真的不胜感激:

通过ASM代码处理系统调用

内核模块:如何获取控制台输出

IP地址族识别

多个内核模块在卸载期间拦截相同的系统调用和崩溃

“无法在虚拟地址处理内核NULL指针解引用”。 – 在发出内核模块信号时 OOPS

我无法login系统,我想这是因为所有内核都处于“软locking”状态,因此无法从shell提示符处触发内核转储。 我启用SysRq,并试图触发与SysRq键组合的内核转储,但没有运气。 看来,系统没有响应键盘(甚至没有响应CapsLockbutton)。 有关如何在这种情况下可以触发内核转储的任何build议?

我可以想象我的驱动程序线程可能导致“软locking”。 但是,由于我的驱动程序,“迁移”线程(一个内核线程)如何才能进入“软locking”呢?

从浏览networking,“迁移”线程用于将任务从一个cpu移动到另一个。 有人可以帮助我了解这个线程确切吗? 以及它如何受到其他线程的影响。

如何从熵池中阻止/ dev / random population。 我可以卸载一个模块来做到这一点?

printk()不打印在/ var / log / messages中

copy_to_user和copy_from_user与结构

计时初始化给出了任何指示?

如何写一个正在写入特定设备的杯栅格驱动程序

我的桌面上有一个非常类似的问题。 它会非常频繁地软锁定 – 大约每天一次。

事实证明,这是因为我在Intel Haswell上运行。 似乎Haswell / broadwell系列的Intel处理器有一个可能导致系统不稳定的错误。 这个bug在微码更新中被修复。

检查CentOS是否提供intel-microcode软件包,并安装它。 确保在加载initramfs之前将grub配置为初始虚拟盘。

就我个人而言,我通过启动进入Windows并运行BIOS更新来升级微码。 您可以通过在更新前后比较grep'microcode grep 'microcode' /proc/cpuinfo的输出来检查micrcode是否实际更新。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐