CPUID policies from guest being migrated shouldn't have the maximum
leaves shrink, as that would be a guest visible change. The hypervisor
has no knowledge on whether a guest has been migrated or is build from
scratch, and hence it must not blindly shrink the CPUID policy in
recalculate_cpuid_policy. Remove the
x86_cpuid_policy_shrink_max_leaves call from recalculate_cpuid_policy.
Removing such call could be seen as a partial revert of
540d911c28.
Instead let the toolstack shrink the policies for newly created
guests, while keeping the previous values for guests that are migrated
in. Note that guests migrated in without a CPUID policy won't get any
kind of shrinking applied.
Fixes: 540d911c28 ('x86/CPUID: shrink max_{,sub}leaf fields according to actual leaf contents')
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
Release-Acked-by: Ian Jackson <iwj@xenproject.org>
}
}
+ /*
+ * Do not try to shrink the policy if restoring, as that could cause
+ * guest visible changes in the maximum leaf fields.
+ */
+ if ( !restore )
+ x86_cpuid_policy_shrink_max_leaves(p);
+
rc = x86_cpuid_copy_to_buffer(p, leaves, &nr_leaves);
if ( rc )
{
if ( !p->extd.page1gb )
p->extd.raw[0x19] = EMPTY_LEAF;
-
- x86_cpuid_policy_shrink_max_leaves(p);
}
int init_domain_cpuid_policy(struct domain *d)