mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
x86/cpuid: Fix HLE and RTM handling (again)
For reasons which are my fault, but I don't recall why, the FDP_EXCP_ONLY/NO_FPU_SEL adjustment uses the whole special_features[] array element, not the two relevant bits. HLE and RTM were recently added to the list of special features, causing them to be always set in guest view, irrespective of the toolstacks choice on the matter. Rewrite the logic to refer to the features specifically, rather than relying on the contents of the special_features[] array. Fixes:8fe24090d9("x86/cpuid: Rework HLE and RTM handling") Reported-by: Edwin Török <edvin.torok@citrix.com> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> (cherry picked from commit60fa12dbf1)
This commit is contained in:
1 parent
4b4ee05a70
commit
ee5425c0d5
1 file changed
+4
-2
@@ -648,9 +648,11 @@ void recalculate_cpuid_policy(struct domain *d)
|
||||
sanitise_featureset(fs);
|
||||
|
||||
/* Fold host's FDP_EXCP_ONLY and NO_FPU_SEL into guest's view. */
|
||||
fs[FEATURESET_7b0] &= ~special_features[FEATURESET_7b0];
|
||||
fs[FEATURESET_7b0] &= ~(cpufeat_mask(X86_FEATURE_FDP_EXCP_ONLY) |
|
||||
cpufeat_mask(X86_FEATURE_NO_FPU_SEL));
|
||||
fs[FEATURESET_7b0] |= (host_cpuid_policy.feat._7b0 &
|
||||
special_features[FEATURESET_7b0]);
|
||||
(cpufeat_mask(X86_FEATURE_FDP_EXCP_ONLY) |
|
||||
cpufeat_mask(X86_FEATURE_NO_FPU_SEL)));
|
||||
|
||||
cpuid_featureset_to_policy(fs, p);
|
||||
|
||||
|
||||