Hi Nick, On Wed, 10 Feb 2021 18:20:54 +1000 Nicholas Piggin wrote: > > Thanks for that, it's due to .noinstr section being put on the other > side of .text, so all our interrupt handler asm code can't reach them > directly anymore since the ppc interrupt wrappers patch added noinstr > attribute. > > That's not strictly required though, we've used NOKPROBE_SYMBOL okay > until now. If you can take this patch for now, it should get > allyesconfig to build again. I'll fix it in the powerpc tree before the > merge window. > > -- > > diff --git a/arch/powerpc/include/asm/interrupt.h b/arch/powerpc/include/asm/interrupt.h > index 4badb3e51c19..fee1e4dd1e84 100644 > --- a/arch/powerpc/include/asm/interrupt.h > +++ b/arch/powerpc/include/asm/interrupt.h > @@ -172,6 +172,8 @@ static inline void interrupt_nmi_exit_prepare(struct pt_regs *regs, struct inter > #define DECLARE_INTERRUPT_HANDLER_RAW(func) \ > __visible long func(struct pt_regs *regs) > > +#define ppc_noinstr noinline notrace __no_kcsan __no_sanitize_address > + > /** > * DEFINE_INTERRUPT_HANDLER_RAW - Define raw interrupt handler function > * @func: Function name of the entry point > @@ -198,7 +200,7 @@ static inline void interrupt_nmi_exit_prepare(struct pt_regs *regs, struct inter > #define DEFINE_INTERRUPT_HANDLER_RAW(func) \ > static __always_inline long ____##func(struct pt_regs *regs); \ > \ > -__visible noinstr long func(struct pt_regs *regs) \ > +__visible ppc_noinstr long func(struct pt_regs *regs) \ > { \ > long ret; \ > \ > @@ -228,7 +230,7 @@ static __always_inline long ____##func(struct pt_regs *regs) > #define DEFINE_INTERRUPT_HANDLER(func) \ > static __always_inline void ____##func(struct pt_regs *regs); \ > \ > -__visible noinstr void func(struct pt_regs *regs) \ > +__visible ppc_noinstr void func(struct pt_regs *regs) \ > { \ > struct interrupt_state state; \ > \ > @@ -262,7 +264,7 @@ static __always_inline void ____##func(struct pt_regs *regs) > #define DEFINE_INTERRUPT_HANDLER_RET(func) \ > static __always_inline long ____##func(struct pt_regs *regs); \ > \ > -__visible noinstr long func(struct pt_regs *regs) \ > +__visible ppc_noinstr long func(struct pt_regs *regs) \ > { \ > struct interrupt_state state; \ > long ret; \ > @@ -297,7 +299,7 @@ static __always_inline long ____##func(struct pt_regs *regs) > #define DEFINE_INTERRUPT_HANDLER_ASYNC(func) \ > static __always_inline void ____##func(struct pt_regs *regs); \ > \ > -__visible noinstr void func(struct pt_regs *regs) \ > +__visible ppc_noinstr void func(struct pt_regs *regs) \ > { \ > struct interrupt_state state; \ > \ > @@ -331,7 +333,7 @@ static __always_inline void ____##func(struct pt_regs *regs) > #define DEFINE_INTERRUPT_HANDLER_NMI(func) \ > static __always_inline long ____##func(struct pt_regs *regs); \ > \ > -__visible noinstr long func(struct pt_regs *regs) \ > +__visible ppc_noinstr long func(struct pt_regs *regs) \ > { \ > struct interrupt_nmi_state state; \ > long ret; \ Tested-by: Stephen Rothwell # allyesconfig build -- Cheers, Stephen Rothwell