Commit b08ac66b authored by Viller Hsiao's avatar Viller Hsiao Committed by Ralf Baechle

MIPS: ftrace: Tweak safe_load()/safe_store() macros

Due to name collision in ftrace safe_load and safe_store macros,
these macros cannot take expressions as operands.

For example, compiler will complain for a macro call like the following:
  safe_store_code(new_code2, ip + 4, faulted);

  arch/mips/include/asm/ftrace.h:61:6: note: in definition of macro 'safe_store'
     : [dst] "r" (dst), [src] "r" (src)\
        ^
  arch/mips/kernel/ftrace.c:118:2: note: in expansion of macro 'safe_store_code'
    safe_store_code(new_code2, ip + 4, faulted);
    ^
  arch/mips/kernel/ftrace.c:118:32: error: undefined named operand 'ip + 4'
    safe_store_code(new_code2, ip + 4, faulted);
                                  ^
  arch/mips/include/asm/ftrace.h:61:6: note: in definition of macro 'safe_store'
     : [dst] "r" (dst), [src] "r" (src)\
        ^
  arch/mips/kernel/ftrace.c:118:2: note: in expansion of macro 'safe_store_code'
    safe_store_code(new_code2, ip + 4, faulted);
    ^

This build error is triggered by a4671094 [MIPS: ftrace: Fix icache flush
range error].  Tweak variable naming in those macros to allow flexible
operands.
Signed-off-by: default avatarViller Hsiao <villerhsiao@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: rostedt@goodmis.org
Cc: fweisbec@gmail.com
Cc: mingo@redhat.com
Cc: Qais.Yousef@imgtec.com
Patchwork: https://patchwork.linux-mips.org/patch/6622/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 4fe2169a
...@@ -22,12 +22,12 @@ extern void _mcount(void); ...@@ -22,12 +22,12 @@ extern void _mcount(void);
#define safe_load(load, src, dst, error) \ #define safe_load(load, src, dst, error) \
do { \ do { \
asm volatile ( \ asm volatile ( \
"1: " load " %[" STR(dst) "], 0(%[" STR(src) "])\n"\ "1: " load " %[tmp_dst], 0(%[tmp_src])\n" \
" li %[" STR(error) "], 0\n" \ " li %[tmp_err], 0\n" \
"2:\n" \ "2:\n" \
\ \
".section .fixup, \"ax\"\n" \ ".section .fixup, \"ax\"\n" \
"3: li %[" STR(error) "], 1\n" \ "3: li %[tmp_err], 1\n" \
" j 2b\n" \ " j 2b\n" \
".previous\n" \ ".previous\n" \
\ \
...@@ -35,8 +35,8 @@ do { \ ...@@ -35,8 +35,8 @@ do { \
STR(PTR) "\t1b, 3b\n\t" \ STR(PTR) "\t1b, 3b\n\t" \
".previous\n" \ ".previous\n" \
\ \
: [dst] "=&r" (dst), [error] "=r" (error)\ : [tmp_dst] "=&r" (dst), [tmp_err] "=r" (error)\
: [src] "r" (src) \ : [tmp_src] "r" (src) \
: "memory" \ : "memory" \
); \ ); \
} while (0) } while (0)
...@@ -44,12 +44,12 @@ do { \ ...@@ -44,12 +44,12 @@ do { \
#define safe_store(store, src, dst, error) \ #define safe_store(store, src, dst, error) \
do { \ do { \
asm volatile ( \ asm volatile ( \
"1: " store " %[" STR(src) "], 0(%[" STR(dst) "])\n"\ "1: " store " %[tmp_src], 0(%[tmp_dst])\n"\
" li %[" STR(error) "], 0\n" \ " li %[tmp_err], 0\n" \
"2:\n" \ "2:\n" \
\ \
".section .fixup, \"ax\"\n" \ ".section .fixup, \"ax\"\n" \
"3: li %[" STR(error) "], 1\n" \ "3: li %[tmp_err], 1\n" \
" j 2b\n" \ " j 2b\n" \
".previous\n" \ ".previous\n" \
\ \
...@@ -57,8 +57,8 @@ do { \ ...@@ -57,8 +57,8 @@ do { \
STR(PTR) "\t1b, 3b\n\t" \ STR(PTR) "\t1b, 3b\n\t" \
".previous\n" \ ".previous\n" \
\ \
: [error] "=r" (error) \ : [tmp_err] "=r" (error) \
: [dst] "r" (dst), [src] "r" (src)\ : [tmp_dst] "r" (dst), [tmp_src] "r" (src)\
: "memory" \ : "memory" \
); \ ); \
} while (0) } while (0)
......
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