[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]> |
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. 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) \ -- 2.54.0