BUG: soft lockup - CPU#0 stuck for 61s!

BUG: soft lockup - CPU#0 stuck for 61s!html


目前看来就是内核中有死循环!spa


解决BUG: soft lockup - CPU#0 stuck for 61s!问题
1 在网上看到不少软死锁的问题,通过对本身程序的理解,结合网上一些相关资料,基本上能够肯定是因为内核bug形成的,这个问题基本上在内核模块加载或者卸载的时候发生,对个人模块而言,每次卸载时候发生,其余一切状况均正常,并且在2.6.28和3.0.0内核下均有问题。
2 问题描述:
2.1 系统由两个模块:cpu模块和mem模块构成,每一个模块由若干个故障检测对象组成,对象由单链表相互链接并由一个结构体做为头部head;
2.2 加载模块时,先对每一个模块的每个故障检测对象初始化,而后对每一个模块的每一个故障检测对象创建proc文件接口,即    objectsInit();
             interfaceInit();
该过程执行正常
2.3 卸载模块时,先对每一个模块的每个故障检测对象进行初始化内存的释放,而后对每一个模块的每一个故障检测对象进行proc文件接口的回收
即  objectsExit();
     interfaceExit();
2.4 问题:卸载模块时,当对cpu模块的全部故障检测对象进行proc文件接口回收时,执行正常,可是当对mem模块的全部故障检测对象进行proc文件接口回收时,出现BUG: soft lockup 问题,经过分析,问题出在没法遍历memHead的每一个对象成员,即执行下面循环时出现问题。
     struct objAddr* pptr = memModuleHead.next;
     while(pptr)
     {
            printk("--%lx---\n",(unsigned long)pptr);
            pptr = pptr->next;
    }
2.5 解决:载模块时,先对每一个模块的每一个故障检测对象进行proc文件接口的回收,而后在再对每一个模块的每个故障检测对象进行初始化内存的释放,即可解决问题
即  interfaceExit();
    objectsExit();
2.6 缘由: 是在想不明白,由于:memModuleHead链表中的全部对象都是在各个文件中定义的静态全局变量,并且在初始化内存的释放过程当中,并无对这些对象进行操做,因此应该能够正常便利该单链表每一个成员,并且在模块正常运行时能够遍历每一个成员,只有在卸载模块时会出现这个错误;cpu模块的处理方式和mem模块的彻底一致,可是cpu模块卸载过程当中并无发生上述问题;全局静态变量的地址在程序执行过程当中都是能够访问的,若是出现访存问题,系统通常状况下杀死内核模块卸载进程或者直接奔溃,不该该每一个固定周期出现BUG: soft lockup - CPU#0 stuck for 61s!提示。
这个bug好神奇啊
htm