linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] powerpc: Ensure gcc doesn't move around cache flushing in __patch_instruction
@ 2018-05-17  3:06 Benjamin Herrenschmidt
  2018-05-17 19:23 ` Segher Boessenkool
  0 siblings, 1 reply; 5+ messages in thread
From: Benjamin Herrenschmidt @ 2018-05-17  3:06 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: Michael Neuling

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@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;
 }

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-01-31 13:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-17  3:06 [PATCH] powerpc: Ensure gcc doesn't move around cache flushing in __patch_instruction Benjamin Herrenschmidt
2018-05-17 19:23 ` Segher Boessenkool
2018-05-17 22:30   ` Benjamin Herrenschmidt
2018-05-17 23:00     ` Segher Boessenkool
2019-01-31 13:20       ` Christophe Leroy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).