]> www.infradead.org Git - linux.git/commitdiff
loongarch: Use ASM_REACHABLE
authorPeter Zijlstra <peterz@infradead.org>
Thu, 28 Nov 2024 09:39:03 +0000 (10:39 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 2 Dec 2024 11:01:44 +0000 (12:01 +0100)
annotate_reachable() is unreliable since the compiler is free to place
random code inbetween two consecutive asm() statements.

This removes the last and only annotate_reachable() user.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
Link: https://lore.kernel.org/r/20241128094312.133437051@infradead.org
arch/loongarch/include/asm/bug.h

index 08388876ade4ce11d60d7ab0c7658a1aacffda1d..561ac1bf79e26c1b8721e5d9f60dc954494a3a27 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <asm/break.h>
 #include <linux/stringify.h>
+#include <linux/objtool.h>
 
 #ifndef CONFIG_DEBUG_BUGVERBOSE
 #define _BUGVERBOSE_LOCATION(file, line)
 
 #define ASM_BUG_FLAGS(flags)                                   \
        __BUG_ENTRY(flags)                                      \
-       break           BRK_BUG
+       break           BRK_BUG;
 
 #define ASM_BUG()      ASM_BUG_FLAGS(0)
 
-#define __BUG_FLAGS(flags)                                     \
-       asm_inline volatile (__stringify(ASM_BUG_FLAGS(flags)));
+#define __BUG_FLAGS(flags, extra)                                      \
+       asm_inline volatile (__stringify(ASM_BUG_FLAGS(flags))          \
+                            extra);
 
 #define __WARN_FLAGS(flags)                                    \
 do {                                                           \
        instrumentation_begin();                                \
-       __BUG_FLAGS(BUGFLAG_WARNING|(flags));                   \
-       annotate_reachable();                                   \
+       __BUG_FLAGS(BUGFLAG_WARNING|(flags), ASM_REACHABLE);    \
        instrumentation_end();                                  \
 } while (0)
 
 #define BUG()                                                  \
 do {                                                           \
        instrumentation_begin();                                \
-       __BUG_FLAGS(0);                                         \
+       __BUG_FLAGS(0, "");                                     \
        unreachable();                                          \
 } while (0)