Re: 3.5+: yaboot, Invalid memory access
flat view
From: Christian Kujau <hidden>
Date: 2012-09-05 05:25:27
On Wed, 5 Sep 2012 at 11:08, Benjamin Herrenschmidt wrote:
Try this: powerpc: Don't use __put_user() in patch_instruction
Perfect! With this patch applied, the machine boots again. Tested-by: Christian Kujau [off-list ref] I sure hope that other people will benefit from this as well. I can't stand the thought that you guys are always putting out fixes for this ol' PowerBook of mine :-\ Thanks so much, Christian.
quoted hunk ↗ jump to hunk
patch_instruction() can be called very early on ppc32, when the kernel isn't yet running at it's linked address. That can cause the ! is_kernel_addr() test in __put_user() to trip and call might_sleep() which is very bad at that point during boot. Use a lower level function instead for now, at least until we get to rework ppc32 boot process to do the code patching later, like ppc64 does. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> ---diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c index dd223b3..17e5b23 100644 --- a/arch/powerpc/lib/code-patching.c +++ b/arch/powerpc/lib/code-patching.c@@ -20,7 +20,7 @@ int patch_instruction(unsigned int *addr, unsigned int instr) { int err; - err = __put_user(instr, addr); + __put_user_size(instr, addr, 4, err); if (err) return err; asm ("dcbst 0, %0; sync; icbi 0,%0; sync; isync" : : "r" (addr));
-- BOFH excuse #101: Collapsed Backbone