5.0-stable review patch.  If anyone has any objections, please let me know.

------------------

[ Upstream commit b7e8c9397cd4efe6567d2728f091f1b728025533 ]

Use unified assembler syntax (UAL) in inline assembler. Divided
syntax is considered deprecated. This will also allow to build
the kernel using LLVM's integrated assembler.

When compiling non-Thumb2 GCC always emits a ".syntax divided"
at the beginning of the inline assembly which makes the
assembler fail. Since GCC 5 there is the -masm-syntax-unified
GCC option which make GCC assume unified syntax asm and hence
emits ".syntax unified" even in ARM mode. However, the option
is broken since GCC version 6 (see GCC PR88648 [1]). Work
around by adding ".syntax unified" as part of the inline
assembly.

[0] 
https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html#index-masm-syntax-unified
[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88648

Signed-off-by: Stefan Agner <ste...@agner.ch>
Acked-by: Nicolas Pitre <n...@linaro.org>
Signed-off-by: Russell King <rmk+ker...@armlinux.org.uk>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 arch/arm/mm/copypage-v4mc.c | 3 ++-
 arch/arm/mm/copypage-v4wb.c | 3 ++-
 arch/arm/mm/copypage-v4wt.c | 3 ++-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mm/copypage-v4mc.c b/arch/arm/mm/copypage-v4mc.c
index b03202cddddb..f74cdce6d4da 100644
--- a/arch/arm/mm/copypage-v4mc.c
+++ b/arch/arm/mm/copypage-v4mc.c
@@ -45,6 +45,7 @@ static void mc_copy_user_page(void *from, void *to)
        int tmp;
 
        asm volatile ("\
+       .syntax unified\n\
        ldmia   %0!, {r2, r3, ip, lr}           @ 4\n\
 1:     mcr     p15, 0, %1, c7, c6, 1           @ 1   invalidate D line\n\
        stmia   %1!, {r2, r3, ip, lr}           @ 4\n\
@@ -56,7 +57,7 @@ static void mc_copy_user_page(void *from, void *to)
        ldmia   %0!, {r2, r3, ip, lr}           @ 4\n\
        subs    %2, %2, #1                      @ 1\n\
        stmia   %1!, {r2, r3, ip, lr}           @ 4\n\
-       ldmneia %0!, {r2, r3, ip, lr}           @ 4\n\
+       ldmiane %0!, {r2, r3, ip, lr}           @ 4\n\
        bne     1b                              @ "
        : "+&r" (from), "+&r" (to), "=&r" (tmp)
        : "2" (PAGE_SIZE / 64)
diff --git a/arch/arm/mm/copypage-v4wb.c b/arch/arm/mm/copypage-v4wb.c
index cd3e165afeed..6d336740aae4 100644
--- a/arch/arm/mm/copypage-v4wb.c
+++ b/arch/arm/mm/copypage-v4wb.c
@@ -27,6 +27,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
        int tmp;
 
        asm volatile ("\
+       .syntax unified\n\
        ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
 1:     mcr     p15, 0, %0, c7, c6, 1           @ 1   invalidate D line\n\
        stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
@@ -38,7 +39,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
        ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
        subs    %2, %2, #1                      @ 1\n\
        stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
-       ldmneia %1!, {r3, r4, ip, lr}           @ 4\n\
+       ldmiane %1!, {r3, r4, ip, lr}           @ 4\n\
        bne     1b                              @ 1\n\
        mcr     p15, 0, %1, c7, c10, 4          @ 1   drain WB"
        : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)
diff --git a/arch/arm/mm/copypage-v4wt.c b/arch/arm/mm/copypage-v4wt.c
index 8614572e1296..3851bb396442 100644
--- a/arch/arm/mm/copypage-v4wt.c
+++ b/arch/arm/mm/copypage-v4wt.c
@@ -25,6 +25,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
        int tmp;
 
        asm volatile ("\
+       .syntax unified\n\
        ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
 1:     stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
        ldmia   %1!, {r3, r4, ip, lr}           @ 4+1\n\
@@ -34,7 +35,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
        ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
        subs    %2, %2, #1                      @ 1\n\
        stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
-       ldmneia %1!, {r3, r4, ip, lr}           @ 4\n\
+       ldmiane %1!, {r3, r4, ip, lr}           @ 4\n\
        bne     1b                              @ 1\n\
        mcr     p15, 0, %2, c7, c7, 0           @ flush ID cache"
        : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)
-- 
2.19.1



Reply via email to