On Tue, Dec 3, 2024 at 6:03 AM Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: > > On Mon, Dec 02 2024 at 11:02, Masahiro Yamada wrote: > > On Sun, Dec 1, 2024 at 8:17 PM Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: > >> > >> The compiler can fully inline the actual handler function of an interrupt > >> entry into the .irqentry.text entry point. If such a function contains an > >> access which has an exception table entry, modpost complains about a > >> section mismatch: > >> > >> WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference ... > >> > >> The relocation at __ex_table+0x447c references section ".irqentry.text" > >> which is not in the list of authorized sections. > >> > >> Add .irqentry.text to OTHER_SECTIONS to cure the issue. > >> > >> Reported-by: Sergey Senozhatsky <senozhatsky@xxxxxxxxxxxx> > > > > I found the context in LKML. > > Closes: https://lore.kernel.org/all/20241128111844.GE10431@xxxxxxxxxx/ > > > > However, is this still relevant to the mainline kernel? > > > > In Linux 5.4.y, I agree this because smp_apic_timer_interrupt() > > is annotated as __irq_entry: > > Correct. > > > In this mainline kernel, DEFINE_IDTENTRY_SYSVEC() > > expands to a normal .text function which is explicitly > > annotated 'noinline'. > > It's not annotated noinline, it's annotated 'noinstr', which puts the > code into the .noinstr.text section. That one is indeed covered. The callsite of local_apic_timer_interrupt() is annotated 'noinline' if I correctly understand this line: https://github.com/torvalds/linux/blob/v6.13-rc1/arch/x86/include/asm/idtentry.h#L272 It expands to: static noinline void __sysvec_apic_timer_interrupt(struct pt_regs *regs) { [snip] local_apic_timer_interrupt(); [snip] } > So yes, the fix is only required for pre 5.8 kernels. This never occurs on x86 after commit f0178fc01fe46, but theoretically this may occur for other architectures. Now applied to linux-kbuild. Thanks. > > Thanks, > > tglx -- Best Regards Masahiro Yamada