diff options
Diffstat (limited to 'debian/patches/bugfix/sparc/tcp-sendmsg-t12k-oops-fix.patch')
-rw-r--r-- | debian/patches/bugfix/sparc/tcp-sendmsg-t12k-oops-fix.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/debian/patches/bugfix/sparc/tcp-sendmsg-t12k-oops-fix.patch b/debian/patches/bugfix/sparc/tcp-sendmsg-t12k-oops-fix.patch new file mode 100644 index 000000000000..0f66c21be21d --- /dev/null +++ b/debian/patches/bugfix/sparc/tcp-sendmsg-t12k-oops-fix.patch @@ -0,0 +1,64 @@ +Author : David Miller <davem@davemloft.net> +Date : Mon, 19 Mar 2007 11:58:19 -0700 (PDT) +Message-ID : <20070319.115819.63131235.davem@davemloft.net> +Status : confirmed working +Description : fixes oops in tcp_sendmsg on T1k/T2k machines under heavy network load + +[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(). + +Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/arch/sparc64/lib/NGbzero.S b/arch/sparc64/lib/NGbzero.S +index e86baec..f10e452 100644 +--- 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: +diff --git a/arch/sparc64/lib/NGmemcpy.S b/arch/sparc64/lib/NGmemcpy.S +index 8e522b3..66063a9 100644 +--- 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. + */ +diff --git a/arch/sparc64/lib/NGpage.S b/arch/sparc64/lib/NGpage.S +index 7d7c3bb..8ce3a0c 100644 +--- a/arch/sparc64/lib/NGpage.S ++++ b/arch/sparc64/lib/NGpage.S +@@ -41,6 +41,7 @@ NGcopy_user_page: /* %o0=dest, %o1=src, %o2=vaddr */ + 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=vaddr */ + subcc %g7, 64, %g7 + bne,pt %xcc, 1b + add %o0, 32, %o0 ++ membar #Sync + retl + nop |