From 286059a3bbc747943aa5496fbbc46ce38b166b46 Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Sun, 25 May 2025 02:05:15 +0100 Subject: [PATCH] x86/fred: Enable FRED by default on AMD systems FRED is now believed to be complete for AMD systems, and has had its tyres kicked by both XenServer and AMD. Enable FRED by default on capable AMD systems (Zen6 and later). Support on Intel is still not yet complete. Leave it as tech preview and not security supported. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich Release-Acked-by: Oleksii Kurochko --- docs/misc/xen-command-line.pandoc | 9 +++++---- xen/arch/x86/traps-setup.c | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/misc/xen-command-line.pandoc b/docs/misc/xen-command-line.pandoc index ef3c737189..93c2a73f4a 100644 --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -1259,12 +1259,13 @@ does not provide `VM_ENTRY_LOAD_GUEST_PAT`. ### fred (x86) > `= ` -> Default: `false` +> Default: `true` on AMD, `false` otherwise Flexible Return and Event Delivery is an overhaul of interrupt, exception and -system call handling, fixing many corner cases in the x86 architecture, and -expected in hardware from 2025. Support in Xen is a work in progress and -disabled by default. +system call handling, fixing many corner cases in the x86 architecture, and is +available on Intel Panther Lake and Diamond Rapids CPUs, and AMD Zen6 CPUs. +FRED is fully supported on AMD hardware. On Intel hardware it is still tech +preview, and in particular not security supported. ### gnttab > `= List of [ max-ver:, transitive=, transfer= ]` diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index ccbd53fd9d..a79a3b2013 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -22,7 +22,7 @@ unsigned int __ro_after_init ler_msr; static bool __initdata opt_ler; boolean_param("ler", opt_ler); -int8_t __ro_after_init opt_fred = 0; +int8_t __ro_after_init opt_fred = -1; boolean_param("fred", opt_fred); void nocall entry_PF(void); @@ -392,7 +392,7 @@ void __init traps_init(void) } if ( opt_fred == -1 ) - opt_fred = !pv_shim; + opt_fred = (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) && !pv_shim; if ( opt_fred ) {