On Fri, Mar 20, 2020 at 07:00:02PM +0100, Thomas Gleixner wrote: > Warnings, bugs and stack protection fails from noinstr sections, e.g. low > level and early entry code, are likely to be fatal. > > Mark them as "safe" to be invoked from noinstr protected code to avoid > annotating all usage sites. Getting the information out is important. > > Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > --- > arch/x86/include/asm/bug.h | 3 +++ > include/asm-generic/bug.h | 9 +++++++-- > kernel/panic.c | 4 +++- > 3 files changed, 13 insertions(+), 3 deletions(-) > > --- a/arch/x86/include/asm/bug.h > +++ b/arch/x86/include/asm/bug.h > @@ -70,13 +70,16 @@ do { \ > #define HAVE_ARCH_BUG > #define BUG() \ > do { \ > + instr_begin(); \ > _BUG_FLAGS(ASM_UD2, 0); \ > unreachable(); \ > } while (0) For visual symmetry at least, it seems like this wants an instr_end() before the unreachable(). Does objtool not like that? > --- a/include/asm-generic/bug.h > +++ b/include/asm-generic/bug.h > @@ -83,14 +83,19 @@ extern __printf(4, 5) > void warn_slowpath_fmt(const char *file, const int line, unsigned taint, > const char *fmt, ...); > #define __WARN() __WARN_printf(TAINT_WARN, NULL) > -#define __WARN_printf(taint, arg...) \ > - warn_slowpath_fmt(__FILE__, __LINE__, taint, arg) > +#define __WARN_printf(taint, arg...) do { \ > + instr_begin(); \ > + warn_slowpath_fmt(__FILE__, __LINE__, taint, arg); \ > + instr_end(); \ > + while (0) Missing a '}' before the 'while'? -- Josh