BUG(), WARN() and friends are using a similar inline
assembly to implement various traps with various flags.

Lets refactor via a new BUG_ENTRY() macro.

Signed-off-by: Christophe Leroy <christophe.le...@c-s.fr>
---
 arch/powerpc/include/asm/bug.h | 41 +++++++++++++++--------------------------
 1 file changed, 15 insertions(+), 26 deletions(-)

diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h
index 3928fdaebb71..dbf7da90f507 100644
--- a/arch/powerpc/include/asm/bug.h
+++ b/arch/powerpc/include/asm/bug.h
@@ -57,6 +57,15 @@
        ".previous\n"
 #endif
 
+#define BUG_ENTRY(insn, flags, ...)                    \
+       __asm__ __volatile__(                           \
+               "1:     " insn "\n"                     \
+               _EMIT_BUG_ENTRY                         \
+               : : "i" (__FILE__), "i" (__LINE__),     \
+                 "i" (flags),                          \
+                 "i" (sizeof(struct bug_entry)),       \
+                 ##__VA_ARGS__)
+
 /*
  * BUG_ON() and WARN_ON() do their best to cooperate with compile-time
  * optimisations. However depending on the complexity of the condition
@@ -64,11 +73,7 @@
  */
 
 #define BUG() do {                                             \
-       __asm__ __volatile__(                                   \
-               "1:     twi 31,0,0\n"                           \
-               _EMIT_BUG_ENTRY                                 \
-               : : "i" (__FILE__), "i" (__LINE__),             \
-                   "i" (0), "i"  (sizeof(struct bug_entry)));  \
+       BUG_ENTRY("twi 31, 0, 0", 0);                           \
        unreachable();                                          \
 } while (0)
 
@@ -77,23 +82,11 @@
                if (x)                                          \
                        BUG();                                  \
        } else {                                                \
-               __asm__ __volatile__(                           \
-               "1:     "PPC_TLNEI"     %4,0\n"                 \
-               _EMIT_BUG_ENTRY                                 \
-               : : "i" (__FILE__), "i" (__LINE__), "i" (0),    \
-                 "i" (sizeof(struct bug_entry)),               \
-                 "r" ((__force long)(x)));                     \
+               BUG_ENTRY(PPC_TLNEI " %4, 0", 0, "r" ((__force long)(x)));      
\
        }                                                       \
 } while (0)
 
-#define __WARN_FLAGS(flags) do {                               \
-       __asm__ __volatile__(                                   \
-               "1:     twi 31,0,0\n"                           \
-               _EMIT_BUG_ENTRY                                 \
-               : : "i" (__FILE__), "i" (__LINE__),             \
-                 "i" (BUGFLAG_WARNING|(flags)),                \
-                 "i" (sizeof(struct bug_entry)));              \
-} while (0)
+#define __WARN_FLAGS(flags) BUG_ENTRY("twi 31, 0, 0", BUGFLAG_WARNING | 
(flags))
 
 #define WARN_ON(x) ({                                          \
        int __ret_warn_on = !!(x);                              \
@@ -101,13 +94,9 @@
                if (__ret_warn_on)                              \
                        __WARN_TAINT(TAINT_WARN);               \
        } else {                                                \
-               __asm__ __volatile__(                           \
-               "1:     "PPC_TLNEI"     %4,0\n"                 \
-               _EMIT_BUG_ENTRY                                 \
-               : : "i" (__FILE__), "i" (__LINE__),             \
-                 "i" (BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN)),\
-                 "i" (sizeof(struct bug_entry)),               \
-                 "r" (__ret_warn_on));                         \
+               BUG_ENTRY(PPC_TLNEI " %4, 0",                   \
+                         BUGFLAG_WARNING | BUGFLAG_TAINT(TAINT_WARN),  \
+                         "r" (__ret_warn_on)); \
        }                                                       \
        unlikely(__ret_warn_on);                                \
 })
-- 
2.13.3

Reply via email to