From: Ralf Baechle <ralf@linux-mips.org>
To: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Cc: u1@terran.org, macro@linux-mips.org, linux-mips@linux-mips.org
Subject: Re: MIPS checksum bug
Date: Fri, 19 Sep 2008 03:14:45 +0200 [thread overview]
Message-ID: <20080919011445.GA2639@linux-mips.org> (raw)
In-Reply-To: <20080919.011704.59652451.anemo@mba.ocn.ne.jp>
On Fri, Sep 19, 2008 at 01:17:04AM +0900, Atsushi Nemoto wrote:
It seems __csum_partial_copy_user and csum_partial_copy_nocheck were
affected by the same bug. Below a patch which tries to fix the issue.
I've tested it on 64-bit only. I seem to observe that TCP transfers
on my test machine are ramping up to full bandwith somewhat more
slowly than on another machine but there are all sorts of reasons which
make that an unscientific test. Anyway, I'd appreciate if people could
test this on 32-bit and 64-bit machines asap.
Ralf
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
diff --git a/arch/mips/lib/csum_partial.S b/arch/mips/lib/csum_partial.S
index 8d77841..9143a42 100644
--- a/arch/mips/lib/csum_partial.S
+++ b/arch/mips/lib/csum_partial.S
@@ -53,12 +53,14 @@
#define UNIT(unit) ((unit)*NBYTES)
#define ADDC(sum,reg) \
- .set push; \
- .set noat; \
ADD sum, reg; \
sltu v1, sum, reg; \
ADD sum, v1; \
- .set pop
+
+#define ADDC32(sum,reg) \
+ addu sum, reg; \
+ sltu v1, sum, reg; \
+ addu sum, v1; \
#define CSUM_BIGCHUNK1(src, offset, sum, _t0, _t1, _t2, _t3) \
LOAD _t0, (offset + UNIT(0))(src); \
@@ -263,24 +265,25 @@ LEAF(csum_partial)
dsra32 sum, sum, 0
addu sum, v1
#endif
- sll v1, sum, 16
- addu sum, v1
- sltu v1, sum, v1
- srl sum, sum, 16
- addu sum, v1
/* odd buffer alignment? */
beqz t7, 1f
nop
- sll v1, sum, 8
+#ifdef CPU_MIPSR2
+ wsbh sum, sum
+#else
+ li v1, 0xff00ff
+ and t0, sum, v1
+ sll t0, t0, 8
srl sum, sum, 8
- or sum, v1
- andi sum, 0xffff
+ and sum, sum, v1
+ or sum, sum, t0
+#endif
.set pop
1:
.set reorder
/* Add the passed partial csum. */
- ADDC(sum, a2)
+ ADDC32(sum, a2)
jr ra
.set noreorder
END(csum_partial)
@@ -665,23 +668,24 @@ EXC( sb t0, NBYTES-2(dst), .Ls_exc)
dsra32 sum, sum, 0
addu sum, v1
#endif
- sll v1, sum, 16
- addu sum, v1
- sltu v1, sum, v1
- srl sum, sum, 16
- addu sum, v1
/* odd buffer alignment? */
beqz odd, 1f
nop
- sll v1, sum, 8
+#ifdef CPU_MIPSR2
+ wsbh sum, sum
+#else
+ li v1, 0xff00ff
+ and t0, sum, v1
+ sll t0, t0, 8
srl sum, sum, 8
- or sum, v1
- andi sum, 0xffff
+ and sum, sum, v1
+ or sum, sum, t0
+#endif
.set pop
1:
.set reorder
- ADDC(sum, psum)
+ ADDC32(sum, psum)
jr ra
.set noreorder
next prev parent reply other threads:[~2008-09-19 1:14 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <072748C6-07A9-4167-A8A5-80D0F7D9C784@darkforest.org>
2008-09-17 5:15 ` MIPS checksum bug Bryan Phillippe
2008-09-17 10:40 ` Maciej W. Rozycki
2008-09-17 13:23 ` Atsushi Nemoto
2008-09-17 14:46 ` Maciej W. Rozycki
2008-09-17 15:27 ` Atsushi Nemoto
2008-09-17 18:21 ` Maciej W. Rozycki
2008-09-18 22:07 ` Ralf Baechle
2008-09-19 10:12 ` Maciej W. Rozycki
2008-09-19 11:23 ` Ralf Baechle
2008-09-19 11:47 ` [PATCH] MIPS checksum fix Ralf Baechle
2008-09-19 12:07 ` Ralf Baechle
2008-09-19 12:15 ` Maciej W. Rozycki
2008-09-19 14:09 ` Atsushi Nemoto
2008-09-19 15:02 ` Maciej W. Rozycki
2008-09-20 15:09 ` Ralf Baechle
2008-09-23 21:52 ` Bryan Phillippe
2008-09-23 22:06 ` Ralf Baechle
2008-09-29 15:28 ` Atsushi Nemoto
2008-09-19 12:26 ` MIPS checksum bug Maciej W. Rozycki
2008-09-19 16:04 ` Bryan Phillippe
2008-09-17 22:52 ` Bryan Phillippe
2008-09-18 16:17 ` Atsushi Nemoto
2008-09-19 1:14 ` Ralf Baechle [this message]
2008-09-19 15:43 ` Atsushi Nemoto
2008-09-19 16:09 ` Maciej W. Rozycki
2008-09-19 16:35 ` Thiemo Seufer
2008-09-19 23:18 ` Maciej W. Rozycki
2008-09-20 0:13 ` Ralf Baechle
2008-09-20 13:45 ` Atsushi Nemoto
2008-09-18 4:43 ` Bryan Phillippe
2008-09-18 10:06 ` Maciej W. Rozycki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080919011445.GA2639@linux-mips.org \
--to=ralf@linux-mips.org \
--cc=anemo@mba.ocn.ne.jp \
--cc=linux-mips@linux-mips.org \
--cc=macro@linux-mips.org \
--cc=u1@terran.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.