[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Sun fire V890 UltraSparc server kernel panic, offertoassist with fixing it and future ports



From: Josip Rodin <joy@entuzijast.net>
Date: Sun, 22 Nov 2009 23:06:21 +0100

>> [   82.663939] Kernel unaligned access at TPC[46d24c]
>> notifier_chain_register+0x10/0x38
>> [   82.671606] Unable to handle kernel paging request in mna handler<1>
>> at virtual address e00000a00b000046

That address is not only unaligned, it's completely out of range
for valid kernel virtual addresses.

notifier_chain_register() and their ilk are pretty simply and
take constant kernel symbol addresses rather than, for example,
dynamically allocated memory or something else more easily
corrupted.  So this is even more mysterious.

Backtrace is:

>> [   82.759812] RPC: <atomic_notifier_chain_register+0x1c/0x44>
 ...
>> [   82.800022] I7: <kernel_init+0x38/0x204>
 ...
>> [   82.803917] Caller[0000000000782128]: kernel_init+0x38/0x204
>> [   82.809549] Caller[0000000000426df8]: kernel_thread+0x38/0x48
>> [   82.815268] Caller[000000000067bae0]: rest_init+0x18/0x60

And I can't see anything that registers notifiers from kernel_init().

I suspect the real caller of atomic_notifier_chain_register() is
being optimized out by tail-call optimizations so we can't see
exactly what it is.

Can you build a test kernel with something like the following
patch applied and reproduce?  Thanks.

diff --git a/Makefile b/Makefile
index aa3e13a..d953cd3 100644
--- a/Makefile
+++ b/Makefile
@@ -537,6 +537,8 @@ ifndef CONFIG_CC_STACKPROTECTOR
 KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
 endif
 
+KBUILD_CFLAGS	+= -fno-optimize-sibling-calls
+
 ifdef CONFIG_FRAME_POINTER
 KBUILD_CFLAGS	+= -fno-omit-frame-pointer -fno-optimize-sibling-calls
 else


Reply to: