|
@@ -654,6 +654,13 @@ __clear_user(void __user *addr, __kernel_size_t size)
|
|
|
{
|
|
|
__kernel_size_t res;
|
|
|
|
|
|
+#ifdef CONFIG_CPU_MICROMIPS
|
|
|
+/* micromips memset / bzero also clobbers t7 & t8 */
|
|
|
+#define bzero_clobbers "$4", "$5", "$6", __UA_t0, __UA_t1, "$15", "$24", "$31"
|
|
|
+#else
|
|
|
+#define bzero_clobbers "$4", "$5", "$6", __UA_t0, __UA_t1, "$31"
|
|
|
+#endif /* CONFIG_CPU_MICROMIPS */
|
|
|
+
|
|
|
if (eva_kernel_access()) {
|
|
|
__asm__ __volatile__(
|
|
|
"move\t$4, %1\n\t"
|
|
@@ -663,7 +670,7 @@ __clear_user(void __user *addr, __kernel_size_t size)
|
|
|
"move\t%0, $6"
|
|
|
: "=r" (res)
|
|
|
: "r" (addr), "r" (size)
|
|
|
- : "$4", "$5", "$6", __UA_t0, __UA_t1, "$31");
|
|
|
+ : bzero_clobbers);
|
|
|
} else {
|
|
|
might_fault();
|
|
|
__asm__ __volatile__(
|
|
@@ -674,7 +681,7 @@ __clear_user(void __user *addr, __kernel_size_t size)
|
|
|
"move\t%0, $6"
|
|
|
: "=r" (res)
|
|
|
: "r" (addr), "r" (size)
|
|
|
- : "$4", "$5", "$6", __UA_t0, __UA_t1, "$31");
|
|
|
+ : bzero_clobbers);
|
|
|
}
|
|
|
|
|
|
return res;
|