2.6.39-rc1+不能关机、重启的bug
pull了2.6最新的tree,装了上去,玩了一天,提了几个patch,晚上本来想睡觉的,关机的时候发现panic了。。
兴奋了一下,决定试着fix掉这个bug.
修改,编译,重启。
重复了好多次。
根据信息,定位到了drivers/base/syscore.c:
void syscore_shutdown(void)
看了一下log,发现这个是39内核新加的功能,注册了一个
static LIST_HEAD(syscore_ops_list);
用void register_syscore_ops(struct syscore_ops *ops)在驱动里注册自己的syscore_ops
我以为新加的可能syscore_shutdown有问题,又加上定位到了prefetch,是list_for_each_entry_reverse里的东西,以为这个用错了,就改了这个,结果还是不行,最后折腾到了晚上4点,还没有解决,于是把图发到了lkml上,今天早上起来,好几个人回复了,说是在arch/x86/kernel/microcode_core.c里没有unregister_syscore_ops造成的,原来如此,发现linus的tree已经有这个补丁了,于是就又pull了最新的,装上以后发现没有这个bug了,果然是这个没有去注册造成的。当时没有想到。
对prefetch还是不理解。得仔细看看。