From: Ingo Molnar <mingo@kernel.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH 4/5] bugs/x86: Augment warnings output by concatenating 'cond_str' with the regular __FILE__ string in _BUG_FLAGS()
Date: Thu, 27 Mar 2025 10:36:32 +0100 [thread overview]
Message-ID: <Z-UcIJAQsNXoxMXG@gmail.com> (raw)
In-Reply-To: <20250326085343.GB25239@noisy.programming.kicks-ass.net>
* Peter Zijlstra <peterz@infradead.org> wrote:
> On Wed, Mar 26, 2025 at 09:47:49AM +0100, Ingo Molnar wrote:
> > This allows the reuse of the UD2 based 'struct bug_entry' low-overhead
> > _BUG_FLAGS() implementation and string-printing backend, without
> > having to add a new field.
> >
> > An example:
> >
> > If we have the following WARN_ON_ONCE() in kernel/sched/core.c:
> >
> > WARN_ON_ONCE(idx < 0 && ptr);
> >
> > Then previously _BUG_FLAGS() would store this string in bug_entry::file:
> >
> > "kernel/sched/core.c"
> >
> > After this patch, it would store and print:
> >
> > "[idx < 0 && ptr] kernel/sched/core.c"
> >
> > Which is an extended string that will be printed in warnings.
> >
> > Signed-off-by: Ingo Molnar <mingo@kernel.org>
> > ---
> > arch/x86/include/asm/bug.h | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/arch/x86/include/asm/bug.h b/arch/x86/include/asm/bug.h
> > index aff1c6b7a7f3..e966199c8ef7 100644
> > --- a/arch/x86/include/asm/bug.h
> > +++ b/arch/x86/include/asm/bug.h
> > @@ -50,7 +50,7 @@ do { \
> > "\t.org 2b+%c3\n" \
> > ".popsection\n" \
> > extra \
> > - : : "i" (__FILE__), "i" (__LINE__), \
> > + : : "i" (cond_str __FILE__), "i" (__LINE__), \
> > "i" (flags), \
> > "i" (sizeof(struct bug_entry))); \
> > } while (0)
>
> Sneaky :-)
BTW., any reason why we go all the trouble with the bug_entry::line u16
number, instead of storing it in the bug_entry::file string with a
:__LINE__ postfix or so?
Using 4 bytes doesn't even save any RAM, given that the average line
position number within the kernel is around 3 bytes:
$ for N in $(git grep -lE 'WARN_ON|BUG_ON|WARN\(|BUG\(' -- '*.[ch]'); do echo -n $(($(cat $N | wc -l)/2)) | wc -c; done | sort -n | uniq -c
10 1
1209 2
6645 3
1582 4
10 5
( This is the histogram of the length of average line numbers within
the kernel's ~9,400 .[ch] source code files that are using these
facilities. )
So concatenation would save on complexity, IMHO, and it would give us
flexibility as well, if we passed in the string from higher layers. We
wouldn't have to change architecture level code at all for this series
for example.
Not to mention that some files within the kernel are beyond the 16-bit
limit already, 38K to 222K lines of code:
starship:~/tip> wc -l drivers/gpu/drm/amd/include/asic_reg/dcn/dcn_3_2_0_sh_mask.h
222,948 drivers/gpu/drm/amd/include/asic_reg/dcn/dcn_3_2_0_sh_mask.h
starship:~/tip> wc -l crypto/testmgr.h
38,897 crypto/testmgr.h
So u16 line numbers are also a (minor) breakage waiting to happen.
Thanks,
Ingo
next prev parent reply other threads:[~2025-03-27 9:36 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-26 8:47 [PATCH 0/5] Improve WARN_ON_ONCE() output by adding the condition string Ingo Molnar
2025-03-26 8:47 ` [PATCH 1/5] bugs/core: Extend __WARN_FLAGS() with the 'cond_str' parameter Ingo Molnar
2025-03-26 8:47 ` [PATCH 2/5] bugs/core: Pass down the condition string of WARN_ON_ONCE(cond) warnings to __WARN_FLAGS() Ingo Molnar
2025-03-26 8:47 ` [PATCH 3/5] bugs/x86: Extend _BUG_FLAGS() with the 'cond_str' parameter Ingo Molnar
2025-03-26 8:47 ` [PATCH 4/5] bugs/x86: Augment warnings output by concatenating 'cond_str' with the regular __FILE__ string in _BUG_FLAGS() Ingo Molnar
2025-03-26 8:53 ` Peter Zijlstra
2025-03-27 8:14 ` [COMBO PATCH 6/5] bugs/arch: Wire in the 'cond_str' string to the WARN/BUG output machinery of PowerPC, LoongArch, S390, RISC-V, PA-RISC and SH Ingo Molnar
2025-03-27 8:38 ` Ingo Molnar
2025-03-27 9:36 ` Ingo Molnar [this message]
2025-03-27 12:41 ` [PATCH 4/5] bugs/x86: Augment warnings output by concatenating 'cond_str' with the regular __FILE__ string in _BUG_FLAGS() Peter Zijlstra
2025-03-27 19:51 ` Linus Torvalds
2025-03-27 21:18 ` Ingo Molnar
2025-03-26 8:47 ` [PATCH 5/5] bugs/core: Do not print CPU and PID values in__warn() output Ingo Molnar
2025-03-26 8:52 ` Peter Zijlstra
2025-03-27 9:05 ` Ingo Molnar
2025-04-01 12:35 ` [PATCH 0/5] Improve WARN_ON_ONCE() output by adding the condition string Rasmus Villemoes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z-UcIJAQsNXoxMXG@gmail.com \
--to=mingo@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox