diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2012-10-09 21:20:05 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2012-10-09 21:20:05 +0200 |
commit | db8c246937713e60b7628661ccc187eeb81f2bae (patch) | |
tree | 6351e8bca23eef40fce85396d1c6f6cfffbd4b66 /arch/powerpc/lib/code-patching.c | |
parent | c5f66e99b7cb091e3d51ae8e8156892e8feb7fa3 (diff) | |
parent | 28f2b02bc581ffc835bc1691b18d03f62fcf0395 (diff) |
Merge branch 'fortglx/3.7/time' of git://git.linaro.org/people/jstultz/linux into timers/core
Diffstat (limited to 'arch/powerpc/lib/code-patching.c')
-rw-r--r-- | arch/powerpc/lib/code-patching.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c index 7c975d43e3f..17e5b236431 100644 --- a/arch/powerpc/lib/code-patching.c +++ b/arch/powerpc/lib/code-patching.c @@ -13,17 +13,23 @@ #include <linux/mm.h> #include <asm/page.h> #include <asm/code-patching.h> +#include <asm/uaccess.h> -void patch_instruction(unsigned int *addr, unsigned int instr) +int patch_instruction(unsigned int *addr, unsigned int instr) { - *addr = instr; + int err; + + __put_user_size(instr, addr, 4, err); + if (err) + return err; asm ("dcbst 0, %0; sync; icbi 0,%0; sync; isync" : : "r" (addr)); + return 0; } -void patch_branch(unsigned int *addr, unsigned long target, int flags) +int patch_branch(unsigned int *addr, unsigned long target, int flags) { - patch_instruction(addr, create_branch(addr, target, flags)); + return patch_instruction(addr, create_branch(addr, target, flags)); } unsigned int create_branch(const unsigned int *addr, |