The __copy_user function (in arch/mips64/lib/memcpy.S) calls __bzero.
We can't do that because __bzero might modify len, which we want to
return in case of an error.
The following patch take care of the problem.
/Carsten
--
_ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com
|\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527
| \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555
TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556
Denmark http://www.mips.com
Index: arch/mips64/lib/memcpy.S
===================================================================
RCS file: /cvs/linux/arch/mips64/lib/memcpy.S,v
retrieving revision 1.9.2.1
diff -u -r1.9.2.1 memcpy.S
--- arch/mips64/lib/memcpy.S 2002/08/05 23:53:36 1.9.2.1
+++ arch/mips64/lib/memcpy.S 2002/08/08 13:19:10
@@ -762,8 +762,18 @@
dsubu a2, AT, ta0 # a2 bytes to go
daddu a0, ta0 # compute start address in a1
dsubu a0, a1
- j __bzero
- move a1, zero
+ /*
+ * Clear len bytes starting at dst. Can't call __bzero because it
+ * might modify len. An inefficient loop for these rare times...
+ */
+ beqz a2, 2f
+ dsubu a1, a2, 1
+1: sb zero, 0(a0)
+ daddu a0, a0, 1
+ bnez a1, 1b
+ dsubu a1, a1, 1
+2: jr ra
+ nop
s_fixup:
jr ra
|