aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/lib/copy_from_user.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm64/lib/copy_from_user.S')
-rw-r--r--arch/arm64/lib/copy_from_user.S13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm64/lib/copy_from_user.S b/arch/arm64/lib/copy_from_user.S
index 957a6d092d7a..942996e82603 100644
--- a/arch/arm64/lib/copy_from_user.S
+++ b/arch/arm64/lib/copy_from_user.S
@@ -19,6 +19,9 @@
* Returns:
* x0 - bytes not copied
*/
+ .macro ins_nops
+ nops 7
+ .endm
.macro ldrb1 reg, ptr, val
uao_user_alternative 9998f, ldrb, ldtrb, \reg, \ptr, \val
@@ -57,7 +60,17 @@ srcin .req x15
SYM_FUNC_START(__arch_copy_from_user)
add end, x0, x2
mov srcin, x1
+alternative_if_not ARM64_WORKAROUND_MRVL_38500
+ nop
+alternative_else
+ b .Lcopy_with_nops
+alternative_endif
+
#include "copy_template.S"
+ b .Lgetout
+.Lcopy_with_nops:
+#include "copy_template_nops.S"
+.Lgetout:
mov x0, #0 // Nothing to copy
ret
SYM_FUNC_END(__arch_copy_from_user)