diff options
Diffstat (limited to 'arch/arm64/lib/copy_from_user.S')
-rw-r--r-- | arch/arm64/lib/copy_from_user.S | 13 |
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) |