mirror of https://gitee.com/openkylin/linux.git
[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: Paul Mackerras <paulus@samba.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
3207a80a6e
commit
72480ef863
|
@ -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)
|
||||||
/* 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)
|
||||||
* 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
|
||||||
|
|
Loading…
Reference in New Issue