Re: [RFC PATCH Dovetail 7.1] x86: irq_pipeline: Allow X86_FRED to be enabled
Florian Bezdeka <[email protected]>
| Newsgroups | dev.linux.lists.xenomai |
|---|---|
| Message-ID | <[email protected]> |
On Mon, 2026-06-01 at 19:58 +0200, Florian Bezdeka wrote: > Some low level entry functions, fred_##func were not defined when > FRED has been enabled: > > ld: vmlinux.o:(.data..ro_after_init+0x6100): undefined reference to `fred_sysvec_apic_timer_interrupt' > ld: vmlinux.o:(.data..ro_after_init+0x6120): undefined reference to `fred_sysvec_kvm_posted_intr_nested_ipi' > ld: vmlinux.o:(.data..ro_after_init+0x6128): undefined reference to `fred_sysvec_kvm_posted_intr_wakeup_ipi' > ld: vmlinux.o:(.data..ro_after_init+0x6130): undefined reference to `fred_sysvec_kvm_posted_intr_ipi' > ld: vmlinux.o:(.data..ro_after_init+0x6150): undefined reference to `fred_sysvec_irq_work' > ld: vmlinux.o:(.data..ro_after_init+0x6158): undefined reference to `fred_sysvec_x86_platform_ipi' > ld: vmlinux.o:(.data..ro_after_init+0x6160): undefined reference to `fred_sysvec_reboot' > ld: vmlinux.o:(.data..ro_after_init+0x6178): undefined reference to `fred_sysvec_call_function_single' > ld: vmlinux.o:(.data..ro_after_init+0x6180): undefined reference to `fred_sysvec_call_function' > ld: vmlinux.o:(.data..ro_after_init+0x6188): undefined reference to `fred_sysvec_reschedule_ipi' > ld: vmlinux.o:(.data..ro_after_init+0x6198): undefined reference to `fred_sysvec_spurious_apic_interrupt' > > Updating the DEFINE_IDTENTRY_SYSVEC_PIPELINED() and > DEFINE_IDTENTRY_SYSVEC_PIPELINED_NORETURN() macros to define those > functions. > > FRED entry points for sysvecs will no go through the IRQ pipeline as > we do it for the IDT. > > Signed-off-by: Florian Bezdeka <[email protected]> > --- > > Hi Philippe, > > input highly welcome. This allows to build x86 with FRED enabled, which > fixes a compile time issue introduced with 7.1-rc5. > > On first glance that seems to do the right thing, but as always I might > miss something. Forgot to mention: The most important file to review is most likely arch/x86/entry/entry_fred.c. > > arch/x86/Kconfig | 2 +- > arch/x86/include/asm/idtentry.h | 11 +++++++++++ > 2 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index 4d40fbb58b1c..fc6500301ff9 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -554,7 +554,7 @@ config X86_CPU_RESCTRL_INTEL_AET > > config X86_FRED > bool "Flexible Return and Event Delivery" > - depends on X86_64 && !IRQ_PIPELINE > + depends on X86_64 > help > When enabled, use Flexible Return and Event Delivery > instead of the legacy SYSCALL/SYSENTER/IDT architecture for > diff --git a/arch/x86/include/asm/idtentry.h b/arch/x86/include/asm/idtentry.h > index 0b517059ae9d..bb1df662dc56 100644 > --- a/arch/x86/include/asm/idtentry.h > +++ b/arch/x86/include/asm/idtentry.h > @@ -222,6 +222,11 @@ static __always_inline void __##func(struct pt_regs *regs, u8 vector) > */ > #define DEFINE_IDTENTRY_SYSVEC_PIPELINED(vector, func) \ > __visible noinstr void func(struct pt_regs *regs) \ > +{ \ > + arch_pipeline_entry(regs, vector); \ > +} \ > + \ > +void fred_##func(struct pt_regs *regs) \ > { \ > arch_pipeline_entry(regs, vector); \ > } \ > @@ -233,6 +238,12 @@ __visible noinstr void func(struct pt_regs *regs) \ > { \ > arch_pipeline_entry(regs, vector); \ > } \ > + \ > +void fred_##func(struct pt_regs *regs) \ > +{ \ > + arch_pipeline_entry(regs, vector); \ > +} \ > + \ > __visible __noreturn void __##func(struct pt_regs *regs) > > #define DEFINE_IDTENTRY_SYSVEC_SIMPLE_PIPELINED(vector, func) \