On 28.08.2025 17:03, Andrew Cooper wrote:
> @@ -20,6 +22,9 @@ 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;
Can't this be __initdata now that we have ...
> @@ -299,6 +304,37 @@ void __init traps_init(void)
> /* Replace early pagefault with real pagefault handler. */
> _update_gate_addr_lower(&bsp_idt[X86_EXC_PF], entry_PF);
>
> + /*
> + * Xen doesn't use GS like most software does, and doesn't need the LKGS
> + * instruction in order to manage PV guests. No need to check for it.
> + */
> + if ( !cpu_has_fred )
> + {
> + if ( opt_fred == 1 )
> + printk(XENLOG_WARNING "FRED not available, ignoring\n");
> + opt_fred = 0;
> + }
> +
> + if ( opt_fred == -1 )
> + opt_fred = !pv_shim;
> +
> + if ( opt_fred )
> + {
> +#ifdef CONFIG_PV32
> + if ( opt_pv32 )
> + {
> + opt_pv32 = 0;
> + printk(XENLOG_INFO "Disabling PV32 due to FRED\n");
> + }
> +#endif
> + setup_force_cpu_cap(X86_FEATURE_XEN_FRED);
... this? All non-__init uses could use the synthetic feature bit.
Jan