Commit de09be34 authored by Al Viro's avatar Al Viro

cris: get rid of zeroing

... the rest of it
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent c8313947
...@@ -217,19 +217,17 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc, ...@@ -217,19 +217,17 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc,
{ {
__asm_copy_from_user_1 (dst, src, retn); __asm_copy_from_user_1 (dst, src, retn);
n--; n--;
if (retn)
goto exception;
} }
if (((unsigned long) src & 2) && n >= 2) if (((unsigned long) src & 2) && n >= 2)
{ {
__asm_copy_from_user_2 (dst, src, retn); __asm_copy_from_user_2 (dst, src, retn);
n -= 2; n -= 2;
if (retn)
goto exception;
} }
/* We only need one check after the unalignment-adjustments, because
if both adjustments were done, either both or neither reference
had an exception. */
if (retn != 0)
goto copy_exception_bytes;
} }
/* Decide which copying method to use. */ /* Decide which copying method to use. */
...@@ -328,7 +326,7 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc, ...@@ -328,7 +326,7 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc,
n -= 4; n -= 4;
if (retn) if (retn)
goto copy_exception_bytes; goto exception;
} }
/* If we get here, there were no memory read faults. */ /* If we get here, there were no memory read faults. */
...@@ -356,17 +354,7 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc, ...@@ -356,17 +354,7 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc,
bytes. */ bytes. */
return retn; return retn;
copy_exception_bytes: exception:
/* We already have "retn" bytes cleared, and need to clear the
remaining "n" bytes. A non-optimized simple byte-for-byte in-line
memset is preferred here, since this isn't speed-critical code and
we'd rather have this a leaf-function than calling memset. */
{
char *endp;
for (endp = dst + n; dst < endp; dst++)
*dst = 0;
}
return retn + n; return retn + n;
} }
EXPORT_SYMBOL(__copy_user_zeroing); EXPORT_SYMBOL(__copy_user_zeroing);
......
...@@ -184,19 +184,18 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc, ...@@ -184,19 +184,18 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc,
{ {
__asm_copy_from_user_1 (dst, src, retn); __asm_copy_from_user_1 (dst, src, retn);
n--; n--;
if (retn != 0)
goto exception;
} }
if (((unsigned long) src & 2) && n >= 2) if (((unsigned long) src & 2) && n >= 2)
{ {
__asm_copy_from_user_2 (dst, src, retn); __asm_copy_from_user_2 (dst, src, retn);
n -= 2; n -= 2;
if (retn != 0)
goto exception;
} }
/* We only need one check after the unalignment-adjustments, because
if both adjustments were done, either both or neither reference
had an exception. */
if (retn != 0)
goto copy_exception_bytes;
} }
/* Movem is dirt cheap. The overheap is low enough to always use the /* Movem is dirt cheap. The overheap is low enough to always use the
...@@ -279,7 +278,7 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc, ...@@ -279,7 +278,7 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc,
n -= 4; n -= 4;
if (retn) if (retn)
goto copy_exception_bytes; goto exception;
} }
/* If we get here, there were no memory read faults. */ /* If we get here, there were no memory read faults. */
...@@ -307,17 +306,7 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc, ...@@ -307,17 +306,7 @@ unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc,
bytes. */ bytes. */
return retn; return retn;
copy_exception_bytes: exception:
/* We already have "retn" bytes cleared, and need to clear the
remaining "n" bytes. A non-optimized simple byte-for-byte in-line
memset is preferred here, since this isn't speed-critical code and
we'd rather have this a leaf-function than calling memset. */
{
char *endp;
for (endp = dst + n; dst < endp; dst++)
*dst = 0;
}
return retn + n; return retn + n;
} }
EXPORT_SYMBOL(__copy_user_zeroing); EXPORT_SYMBOL(__copy_user_zeroing);
......
...@@ -172,16 +172,14 @@ __do_strncpy_from_user(char *dst, const char *src, long count) ...@@ -172,16 +172,14 @@ __do_strncpy_from_user(char *dst, const char *src, long count)
__asm_copy_user_cont(to, from, ret, \ __asm_copy_user_cont(to, from, ret, \
" move.b [%1+],$r9\n" \ " move.b [%1+],$r9\n" \
"2: move.b $r9,[%0+]\n", \ "2: move.b $r9,[%0+]\n", \
"3: addq 1,%2\n" \ "3: addq 1,%2\n", \
" clear.b [%0+]\n", \
" .dword 2b,3b\n") " .dword 2b,3b\n")
#define __asm_copy_from_user_2x_cont(to, from, ret, COPY, FIXUP, TENTRY) \ #define __asm_copy_from_user_2x_cont(to, from, ret, COPY, FIXUP, TENTRY) \
__asm_copy_user_cont(to, from, ret, \ __asm_copy_user_cont(to, from, ret, \
" move.w [%1+],$r9\n" \ " move.w [%1+],$r9\n" \
"2: move.w $r9,[%0+]\n" COPY, \ "2: move.w $r9,[%0+]\n" COPY, \
"3: addq 2,%2\n" \ "3: addq 2,%2\n" FIXUP, \
" clear.w [%0+]\n" FIXUP, \
" .dword 2b,3b\n" TENTRY) " .dword 2b,3b\n" TENTRY)
#define __asm_copy_from_user_2(to, from, ret) \ #define __asm_copy_from_user_2(to, from, ret) \
...@@ -191,16 +189,14 @@ __do_strncpy_from_user(char *dst, const char *src, long count) ...@@ -191,16 +189,14 @@ __do_strncpy_from_user(char *dst, const char *src, long count)
__asm_copy_from_user_2x_cont(to, from, ret, \ __asm_copy_from_user_2x_cont(to, from, ret, \
" move.b [%1+],$r9\n" \ " move.b [%1+],$r9\n" \
"4: move.b $r9,[%0+]\n", \ "4: move.b $r9,[%0+]\n", \
"5: addq 1,%2\n" \ "5: addq 1,%2\n", \
" clear.b [%0+]\n", \
" .dword 4b,5b\n") " .dword 4b,5b\n")
#define __asm_copy_from_user_4x_cont(to, from, ret, COPY, FIXUP, TENTRY) \ #define __asm_copy_from_user_4x_cont(to, from, ret, COPY, FIXUP, TENTRY) \
__asm_copy_user_cont(to, from, ret, \ __asm_copy_user_cont(to, from, ret, \
" move.d [%1+],$r9\n" \ " move.d [%1+],$r9\n" \
"2: move.d $r9,[%0+]\n" COPY, \ "2: move.d $r9,[%0+]\n" COPY, \
"3: addq 4,%2\n" \ "3: addq 4,%2\n" FIXUP, \
" clear.d [%0+]\n" FIXUP, \
" .dword 2b,3b\n" TENTRY) " .dword 2b,3b\n" TENTRY)
#define __asm_copy_from_user_4(to, from, ret) \ #define __asm_copy_from_user_4(to, from, ret) \
......
...@@ -178,8 +178,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count) ...@@ -178,8 +178,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count)
"2: move.b [%1+],$acr\n" \ "2: move.b [%1+],$acr\n" \
" move.b $acr,[%0+]\n", \ " move.b $acr,[%0+]\n", \
"3: addq 1,%2\n" \ "3: addq 1,%2\n" \
" jump 1b\n" \ " jump 1b\n", \
" clear.b [%0+]\n", \
" .dword 2b,3b\n") " .dword 2b,3b\n")
#define __asm_copy_from_user_2x_cont(to, from, ret, COPY, FIXUP, TENTRY) \ #define __asm_copy_from_user_2x_cont(to, from, ret, COPY, FIXUP, TENTRY) \
...@@ -189,8 +188,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count) ...@@ -189,8 +188,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count)
" move.w $acr,[%0+]\n", \ " move.w $acr,[%0+]\n", \
FIXUP \ FIXUP \
"3: addq 2,%2\n" \ "3: addq 2,%2\n" \
" jump 1b\n" \ " jump 1b\n", \
" clear.w [%0+]\n", \
TENTRY \ TENTRY \
" .dword 2b,3b\n") " .dword 2b,3b\n")
...@@ -201,8 +199,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count) ...@@ -201,8 +199,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count)
__asm_copy_from_user_2x_cont(to, from, ret, \ __asm_copy_from_user_2x_cont(to, from, ret, \
"4: move.b [%1+],$acr\n" \ "4: move.b [%1+],$acr\n" \
" move.b $acr,[%0+]\n", \ " move.b $acr,[%0+]\n", \
"5: addq 1,%2\n" \ "5: addq 1,%2\n", \
" clear.b [%0+]\n", \
" .dword 4b,5b\n") " .dword 4b,5b\n")
#define __asm_copy_from_user_4x_cont(to, from, ret, COPY, FIXUP, TENTRY) \ #define __asm_copy_from_user_4x_cont(to, from, ret, COPY, FIXUP, TENTRY) \
...@@ -212,8 +209,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count) ...@@ -212,8 +209,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count)
" move.d $acr,[%0+]\n", \ " move.d $acr,[%0+]\n", \
FIXUP \ FIXUP \
"3: addq 4,%2\n" \ "3: addq 4,%2\n" \
" jump 1b\n" \ " jump 1b\n", \
" clear.d [%0+]\n", \
TENTRY \ TENTRY \
" .dword 2b,3b\n") " .dword 2b,3b\n")
......
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