3.5+: yaboot, Invalid memory access
Christian Kujau
lists at nerdbynature.de
Wed Sep 5 15:25:21 EST 2012
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 <lists at nerdbynature.de>
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.
>
> 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 at 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
More information about the Linuxppc-dev
mailing list