--- /dev/null
+From stable-bounces@linux.kernel.org Mon Mar 19 21:16:53 2007
+From: David Miller <davem@davemloft.net>
+Date: Mon, 19 Mar 2007 14:50:04 -0700 (PDT)
+Subject: Fix niagara memory corruption
+To: stable@kernel.org
+Cc: bunk@stusta.de
+Message-ID: <20070319.145004.21927270.davem@davemloft.net>
+
+From: David Miller <davem@davemloft.net>
+
+[SPARC64]: store-init needs trailing membar.
+
+The manual says that it is required and we actually have crash reports
+where loads see stale data due to not having membars here.
+
+In one case the networking does:
+
+ memset(skb, 0, offsetof(struct sk_buff, truesize));
+
+and then some code later checks skb->nohdr for zero, but it's still
+the value that was there before the memset().
+
+Note that arch/sparc64/lib/xor.S already got this right.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/sparc64/kernel/tsb.S | 1 +
+ arch/sparc64/lib/NGbzero.S | 1 +
+ arch/sparc64/lib/NGmemcpy.S | 2 ++
+ arch/sparc64/lib/NGpage.S | 2 ++
+ 4 files changed, 6 insertions(+)
+
+--- a/arch/sparc64/kernel/tsb.S
++++ b/arch/sparc64/kernel/tsb.S
+@@ -546,6 +546,7 @@ NGtsb_init:
+ subcc %o1, 0x100, %o1
+ bne,pt %xcc, 1b
+ add %o0, 0x100, %o0
++ membar #Sync
+ retl
+ wr %g2, 0x0, %asi
+ .size NGtsb_init, .-NGtsb_init
+--- a/arch/sparc64/lib/NGbzero.S
++++ b/arch/sparc64/lib/NGbzero.S
+@@ -88,6 +88,7 @@ NGbzero_loop:
+ bne,pt %xcc, NGbzero_loop
+ add %o0, 64, %o0
+
++ membar #Sync
+ wr %o4, 0x0, %asi
+ brz,pn %o1, NGbzero_done
+ NGbzero_medium:
+--- a/arch/sparc64/lib/NGmemcpy.S
++++ b/arch/sparc64/lib/NGmemcpy.S
+@@ -247,6 +247,8 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len
+ /* fall through */
+
+ 60:
++ membar #Sync
++
+ /* %o2 contains any final bytes still needed to be copied
+ * over. If anything is left, we copy it one byte at a time.
+ */
+--- a/arch/sparc64/lib/NGpage.S
++++ b/arch/sparc64/lib/NGpage.S
+@@ -41,6 +41,7 @@ NGcopy_user_page: /* %o0=dest, %o1=src,
+ subcc %g7, 64, %g7
+ bne,pt %xcc, 1b
+ add %o0, 32, %o0
++ membar #Sync
+ retl
+ nop
+
+@@ -63,6 +64,7 @@ NGclear_user_page: /* %o0=dest, %o1=vadd
+ subcc %g7, 64, %g7
+ bne,pt %xcc, 1b
+ add %o0, 32, %o0
++ membar #Sync
+ retl
+ nop
+