aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2012-09-04 15:08:28 +0000
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2012-09-05 16:05:23 +1000
commit636802ef96eebe279b22ad9f9dacfe29291e45c7 (patch)
treeaedbdd51b2558d9badd12cb68e5ecc4ed5823474 /arch
parentpowerpc: Make sure IPI handlers see data written by IPI senders (diff)
downloadlinux-dev-636802ef96eebe279b22ad9f9dacfe29291e45c7.tar.xz
linux-dev-636802ef96eebe279b22ad9f9dacfe29291e45c7.zip
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>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/lib/code-patching.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
index dd223b3eb333..17e5b2364312 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));