Commit 72480ef8 authored by Paul Mackerras's avatar Paul Mackerras Committed by Linus Torvalds

[PATCH] ppc32: Fix __copy_tofrom_user return value

Recently the __copy_tofrom_user routine was modified to avoid doing
prefetches past the end of the source array.  However, in doing so we
introduced a bug in that it now returns the wrong value for the number
of bytes not copied when a fault is encountered.  This fixes it to
return the correct number.
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3207a80a
...@@ -446,6 +446,7 @@ _GLOBAL(__copy_tofrom_user) ...@@ -446,6 +446,7 @@ _GLOBAL(__copy_tofrom_user)
#ifdef CONFIG_8xx #ifdef CONFIG_8xx
/* Don't use prefetch on 8xx */ /* Don't use prefetch on 8xx */
mtctr r0 mtctr r0
li r0,0
53: COPY_16_BYTES_WITHEX(0) 53: COPY_16_BYTES_WITHEX(0)
bdnz 53b bdnz 53b
...@@ -564,7 +565,9 @@ _GLOBAL(__copy_tofrom_user) ...@@ -564,7 +565,9 @@ _GLOBAL(__copy_tofrom_user)
/* or write fault in cacheline loop */ /* or write fault in cacheline loop */
105: li r9,1 105: li r9,1
92: li r3,LG_CACHELINE_BYTES 92: li r3,LG_CACHELINE_BYTES
b 99f mfctr r8
add r0,r0,r8
b 106f
/* read fault in final word loop */ /* read fault in final word loop */
108: li r9,0 108: li r9,0
b 93f b 93f
...@@ -585,7 +588,7 @@ _GLOBAL(__copy_tofrom_user) ...@@ -585,7 +588,7 @@ _GLOBAL(__copy_tofrom_user)
* r5 + (ctr << r3), and r9 is 0 for read or 1 for write. * r5 + (ctr << r3), and r9 is 0 for read or 1 for write.
*/ */
99: mfctr r0 99: mfctr r0
slw r3,r0,r3 106: slw r3,r0,r3
add. r3,r3,r5 add. r3,r3,r5
beq 120f /* shouldn't happen */ beq 120f /* shouldn't happen */
cmpwi 0,r9,0 cmpwi 0,r9,0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment