Revert "objtool: Increase per-function WARN_FUNC() rate limit"
authorJosh Poimboeuf <jpoimboe@kernel.org>
Tue, 1 Apr 2025 04:26:39 +0000 (21:26 -0700)
committerIngo Molnar <mingo@kernel.org>
Tue, 1 Apr 2025 07:07:13 +0000 (09:07 +0200)
This reverts commit 0a7fb6f07e3ad497d31ae9a2082d2cacab43d54a.

The "skipping duplicate warnings" warning is technically not an actual
warning, which can cause confusion.  This feature isn't all that useful
anyway.  It's exceedingly rare for a function to have more than one
unrelated warning.

Suggested-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/e5abe5e858acf1a9207a5dfa0f37d17ac9dca872.1743481539.git.jpoimboe@kernel.org
tools/objtool/check.c
tools/objtool/include/objtool/elf.h
tools/objtool/include/objtool/warn.h

index bd0c78bfe90c506543600b418799a22d35ed2661..c8b3c8e7090c35b1319a100297e6db9f1c92dc60 100644 (file)
@@ -3545,7 +3545,7 @@ static int validate_branch(struct objtool_file *file, struct symbol *func,
 
                        WARN("%s() falls through to next function %s()",
                             func->name, insn_func(insn)->name);
-                       func->warnings++;
+                       func->warned = 1;
 
                        return 1;
                }
@@ -4576,7 +4576,7 @@ static void disas_warned_funcs(struct objtool_file *file)
        char *funcs = NULL, *tmp;
 
        for_each_sym(file, sym) {
-               if (sym->warnings) {
+               if (sym->warned) {
                        if (!funcs) {
                                funcs = malloc(strlen(sym->name) + 1);
                                if (!funcs) {
index eba04392c6fd4aa3aca56dce50426d2982edc9ab..c7c4e87ebe8824f3768180b56eb0f26bf7154769 100644 (file)
@@ -65,11 +65,11 @@ struct symbol {
        u8 return_thunk      : 1;
        u8 fentry            : 1;
        u8 profiling_func    : 1;
+       u8 warned            : 1;
        u8 embedded_insn     : 1;
        u8 local_label       : 1;
        u8 frame_pointer     : 1;
        u8 ignore            : 1;
-       u8 warnings          : 2;
        struct list_head pv_target;
        struct reloc *relocs;
 };
index b29ac144e4f5380d3953a65f61dd17b13c7de84c..e3ad9b2caf87ebfd885e9768f459bcc41d4f7a3a 100644 (file)
@@ -57,22 +57,14 @@ static inline char *offstr(struct section *sec, unsigned long offset)
        free(_str);                                     \
 })
 
-#define WARN_LIMIT 2
-
 #define WARN_INSN(insn, format, ...)                                   \
 ({                                                                     \
        struct instruction *_insn = (insn);                             \
-       BUILD_BUG_ON(WARN_LIMIT > 2);                                   \
-       if (!_insn->sym || _insn->sym->warnings < WARN_LIMIT) {         \
+       if (!_insn->sym || !_insn->sym->warned)                         \
                WARN_FUNC(format, _insn->sec, _insn->offset,            \
                          ##__VA_ARGS__);                               \
-               if (_insn->sym)                                         \
-                       _insn->sym->warnings++;                         \
-       } else if (_insn->sym && _insn->sym->warnings == WARN_LIMIT) {  \
-               WARN_FUNC("skipping duplicate warning(s)",              \
-                         _insn->sec, _insn->offset);                   \
-               _insn->sym->warnings++;                                 \
-       }                                                               \
+       if (_insn->sym)                                                 \
+               _insn->sym->warned = 1;                                 \
 })
 
 #define BT_INSN(insn, format, ...)                             \