system_state changes to SYS_STATE_smp_boot before alternative_branches() is invoked, yet that function, with CET-SS enabled, needs to invoke modify_xen_mappings(). Convert to check for the number of online CPUs, just like was done also in 88a037e2cfe1 / fa6dc0879ffd ("page_alloc: assert IRQs are enabled in heap alloc/free", both instance of which needed reverting for other reasons).
Fixes: 78e072bc3750 ("x86/mm: avoid inadvertently degrading a TLB flush to local only") Reported-by: Andrew Cooper <andrew.coop...@citrix.com> Signed-off-by: Jan Beulich <jbeul...@suse.com> --- Only build-tested, as I don't have suitable hardware at hand. --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -5074,7 +5074,7 @@ l1_pgentry_t *virt_to_xen_l1e(unsigned l * map_pages_to_xen() can be called early in boot before any other * CPUs are online. Use flush_area_local() in this case. */ -#define flush_area(v,f) (system_state < SYS_STATE_smp_boot ? \ +#define flush_area(v,f) (num_online_cpus() <= 1 ? \ flush_area_local((const void *)v, f) : \ flush_area_all((const void *)v, f))