aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/lib/code-patching.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/lib/code-patching.c')
-rw-r--r--arch/powerpc/lib/code-patching.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
index d946f7d6bb32..e9a0ea1c7ba4 100644
--- a/arch/powerpc/lib/code-patching.c
+++ b/arch/powerpc/lib/code-patching.c
@@ -24,7 +24,18 @@ static int __patch_instruction(struct ppc_inst *exec_addr, struct ppc_inst instr
{
int err = 0;
- __put_user_asm(ppc_inst_val(instr), patch_addr, err, "stw");
+ if (!ppc_inst_prefixed(instr)) {
+ __put_user_asm(ppc_inst_val(instr), patch_addr, err, "stw");
+ } else {
+#ifdef CONFIG_CPU_LITTLE_ENDIAN
+ __put_user_asm((u64)ppc_inst_suffix(instr) << 32 |
+ ppc_inst_val(instr), patch_addr, err, "std");
+#else
+ __put_user_asm((u64)ppc_inst_val(instr) << 32 |
+ ppc_inst_suffix(instr), patch_addr, err, "std");
+#endif
+ }
+
if (err)
return err;