From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Christian Kujau <lists@nerdbynature.de>
Cc: linuxppc-dev@ozlabs.org, Steven Rostedt <rostedt@goodmis.org>
Subject: Re: 3.5+: yaboot, Invalid memory access
Date: Wed, 05 Sep 2012 11:08:28 +1000 [thread overview]
Message-ID: <1346807308.2257.14.camel@pasglop> (raw)
In-Reply-To: <alpine.DEB.2.01.1209040223380.25392@trent.utfs.org>
On Tue, 2012-09-04 at 02:32 -0700, Christian Kujau wrote:
> On Tue, 4 Sep 2012 at 16:51, Michael Ellerman wrote:
> > My guess would be we're calling that quite early and the __put_user()
> > check is getting confused and failing. That means we'll have left some
> > code unpatched, which then fails.
> >
> > Can you try with the patch applied, but instead of returning if the
> > __put_user() fails, just continue on anyway.
>
> You mean, like this?
Try this:
powerpc: Don't use __put_user() in patch_instruction
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));
next prev parent reply other threads:[~2012-09-05 1:08 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-31 5:46 3.5+: yaboot, Invalid memory access Christian Kujau
2012-08-01 2:02 ` Tony Breeds
2012-08-01 7:30 ` Christian Kujau
2012-09-04 6:18 ` Christian Kujau
2012-09-04 6:51 ` Michael Ellerman
2012-09-04 9:32 ` Christian Kujau
2012-09-05 1:08 ` Benjamin Herrenschmidt [this message]
2012-09-05 5:25 ` Christian Kujau
2012-09-05 5:29 ` Benjamin Herrenschmidt
2012-09-04 14:27 ` Steven Rostedt
2012-09-04 19:49 ` Benjamin Herrenschmidt
2012-09-04 19:40 ` Benjamin Herrenschmidt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1346807308.2257.14.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=lists@nerdbynature.de \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.