|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/cpu-policy: Extend the guest max policy max leaf/subleaves
On 29.10.2024 18:55, Andrew Cooper wrote:
> We already have one migration case opencoded (feat.max_subleaf). A more
> recent discovery is that we advertise x2APIC to guests without ensuring that
> we provide max_leaf >= 0xb.
>
> In general, any leaf known to Xen can be safely configured by the toolstack if
> it doesn't violate other constraints.
>
> Therefore, introduce guest_common_{max,default}_leaves() to generalise the
> special case we currently have for feat.max_subleaf, in preparation to be able
> to provide x2APIC topology in leaf 0xb even on older hardware.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
I'll have to update the AMX logic accordingly (maybe also the AVX10 one).
I'd like to point out that this highlights a naming anomaly in
x86_cpu_policies_are_compatible(): update_domain_cpu_policy() passes in
the respective max policy as first argument. Imo the first parameter of
the function would better be named "max" there.
> --- a/xen/arch/x86/cpu-policy.c
> +++ b/xen/arch/x86/cpu-policy.c
> @@ -391,6 +391,27 @@ static void __init calculate_host_policy(void)
> p->platform_info.cpuid_faulting = cpu_has_cpuid_faulting;
> }
>
> +/*
> + * Guest max policies can have any max leaf/subleaf within bounds.
> + *
> + * - Some incoming VMs have a larger-than-necessary feat max_subleaf.
> + * - Some VMs we'd like to synthesise leaves not present on the host.
> + */
> +static void __init guest_common_max_leaves(struct cpu_policy *p)
> +{
> + p->basic.max_leaf = ARRAY_SIZE(p->basic.raw) - 1;
> + p->feat.max_subleaf = ARRAY_SIZE(p->feat.raw) - 1;
> + p->extd.max_leaf = 0x80000000U + ARRAY_SIZE(p->extd.raw) - 1;
> +}
> +
> +/* Guest default policies inherit the host max leaf/subleaf settings. */
> +static void __init guest_common_default_leaves(struct cpu_policy *p)
> +{
> + p->basic.max_leaf = host_cpu_policy.basic.max_leaf;
> + p->feat.max_subleaf = host_cpu_policy.feat.max_subleaf;
> + p->extd.max_leaf = host_cpu_policy.extd.max_leaf;
> +}
Which sadly still leaves open how to suitably shrink the max values,
when they're larger than necessary (for the guest).
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |