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)		\
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.