[PATCH] powerpc: Ensure gcc doesn't move around cache flushing in __patch_instruction
Benjamin Herrenschmidt
benh at kernel.crashing.org
Thu May 17 13:06:10 AEST 2018
The current asm statement in __patch_instruction() for the cache flushes
doesn't have a "volatile" statement and no memory clobber. That means
gcc can potentially move it around (or move the store done by put_user
past the flush).
Add both to ensure gcc doesn't play games.
Found by code inspection, no actual bug reported.
Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
--- a/arch/powerpc/lib/code-patching.c
+++ b/arch/powerpc/lib/code-patching.c
@@ -32,8 +32,9 @@ static int __patch_instruction(unsigned int *exec_addr, unsigned int instr,
if (err)
return err;
- asm ("dcbst 0, %0; sync; icbi 0,%1; sync; isync" :: "r" (patch_addr),
- "r" (exec_addr));
+ asm volatile("dcbst 0, %0; sync; icbi 0,%1; sync; isync"
+ :: "r" (patch_addr), "r" (exec_addr)
+ : "memory");
return 0;
}
More information about the Linuxppc-dev
mailing list