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: