]> Git Repo - J-linux.git/commitdiff
powerpc/code-patching: Perform hwsync in __patch_instruction() in case of failure
authorChristophe Leroy <[email protected]>
Sat, 7 Oct 2023 10:46:19 +0000 (12:46 +0200)
committerMichael Ellerman <[email protected]>
Fri, 20 Oct 2023 12:19:13 +0000 (23:19 +1100)
Commit c28c15b6d28a ("powerpc/code-patching: Use temporary mm for
Radix MMU") added a hwsync for when __patch_instruction() fails,
we results in a quite odd unbalanced logic.

Instead of calling mb() when __patch_instruction() returns an error,
call mb() in the __patch_instruction()'s error path directly.

Signed-off-by: Christophe Leroy <[email protected]>
Signed-off-by: Michael Ellerman <[email protected]>
Link: https://msgid.link/e88b154eaf2efd9ff177d472d3411dcdec8ff4f5.1696675567.git.christophe.leroy@csgroup.eu
arch/powerpc/lib/code-patching.c

index b00112d7ad467d30712d168538a418bac4d5c60c..7a47a871e6b8eb517bce27adec42d914673f676f 100644 (file)
@@ -38,6 +38,7 @@ static int __patch_instruction(u32 *exec_addr, ppc_inst_t instr, u32 *patch_addr
        return 0;
 
 failed:
+       mb();  /* sync */
        return -EPERM;
 }
 
@@ -309,10 +310,6 @@ static int __do_patch_instruction_mm(u32 *addr, ppc_inst_t instr)
 
        err = __patch_instruction(addr, instr, patch_addr);
 
-       /* hwsync performed by __patch_instruction (sync) if successful */
-       if (err)
-               mb();  /* sync */
-
        /* context synchronisation performed by __patch_instruction (isync or exception) */
        stop_using_temp_mm(patching_mm, orig_mm);
 
This page took 0.042196 seconds and 4 git commands to generate.