From: David S. Miller <davem@sunset.davemloft.net>
Date: Mon, 6 Feb 2006 23:52:05 +0000 (-0800)
Subject: [SPARC64]: Add missing memory barriers to instruction patching functions.
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=840aaef8db32572b6d11e0d5cb5e6efcbc812000;p=GitHub%2FLineageOS%2FG12%2Fandroid_kernel_amlogic_linux-4.9.git

[SPARC64]: Add missing memory barriers to instruction patching functions.

V9 requires a write memory barrier before the instruction flush.

Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c
index e22bf5fc92ce..40acac5b8337 100644
--- a/arch/sparc64/kernel/setup.c
+++ b/arch/sparc64/kernel/setup.c
@@ -529,15 +529,19 @@ static void __init per_cpu_patch(void)
 		};
 
 		*(unsigned int *) (addr +  0) = insns[0];
+		wmb();
 		__asm__ __volatile__("flush	%0" : : "r" (addr +  0));
 
 		*(unsigned int *) (addr +  4) = insns[1];
+		wmb();
 		__asm__ __volatile__("flush	%0" : : "r" (addr +  4));
 
 		*(unsigned int *) (addr +  8) = insns[2];
+		wmb();
 		__asm__ __volatile__("flush	%0" : : "r" (addr +  8));
 
 		*(unsigned int *) (addr + 12) = insns[3];
+		wmb();
 		__asm__ __volatile__("flush	%0" : : "r" (addr + 12));
 
 		p++;
@@ -558,6 +562,7 @@ static void __init gl_patch(void)
 		unsigned long addr = p1->addr;
 
 		*(unsigned int *) (addr +  0) = p1->insn;
+		wmb();
 		__asm__ __volatile__("flush	%0" : : "r" (addr +  0));
 
 		p1++;
@@ -568,9 +573,11 @@ static void __init gl_patch(void)
 		unsigned long addr = p2->addr;
 
 		*(unsigned int *) (addr +  0) = p2->insns[0];
+		wmb();
 		__asm__ __volatile__("flush	%0" : : "r" (addr +  0));
 
 		*(unsigned int *) (addr +  3) = p2->insns[1];
+		wmb();
 		__asm__ __volatile__("flush	%0" : : "r" (addr +  4));
 
 		p2++;