|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] x86/cpu-policy: set up host policy earlier
In order to use cpu_has_* expanding to host_cpu_policy.*, the host policy
needs setting up alongside boot_cpu_data.x86_capability[]. Arrange for
that towards the end of identify_cpu().
Fixes: 894bd7617924 ("x86/Intel: use host CPU policy for ARAT checking")
Reported-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
In the longer run we may need to (also) update the host policy from
setup_{force,clear}_cpu_cap().
This really was part of one of the XSTATE cleanup patches at the head of
the AMX series. This explains the specific placement ahead of the call to
xstate_init()). Likely anything from there downwards shouldn't really
live in identify_cpu() anyway.
--- a/xen/arch/x86/cpu/common.c
+++ b/xen/arch/x86/cpu/common.c
@@ -586,6 +586,8 @@ void identify_cpu(struct cpuinfo_x86 *c)
}
/* Now the feature flags better reflect actual CPU features! */
+ if (c == &boot_cpu_data)
+ calculate_host_policy();
xstate_init(c);
--- a/xen/arch/x86/cpu-policy.c
+++ b/xen/arch/x86/cpu-policy.c
@@ -359,7 +359,7 @@ void calculate_raw_cpu_policy(void)
/* Was already added by probe_cpuid_faulting() */
}
-static void __init calculate_host_policy(void)
+void __init calculate_host_policy(void)
{
struct cpu_policy *p = &host_cpu_policy;
unsigned int max_extd_leaf;
@@ -904,6 +904,7 @@ static void __init calculate_hvm_def_pol
void __init init_guest_cpu_policies(void)
{
+ /* Do this a 2nd time to account for setup_{clear,force}_cpu_cap() uses. */
calculate_host_policy();
if ( IS_ENABLED(CONFIG_PV) )
--- a/xen/arch/x86/include/asm/cpu-policy.h
+++ b/xen/arch/x86/include/asm/cpu-policy.h
@@ -30,4 +30,10 @@ void recalculate_cpuid_policy(struct dom
*/
void calculate_raw_cpu_policy(void);
+/*
+ * Collect the host CPU policy. Called after collecting enough CPUID output,
+ * and again after all feature overrides have been put in place.
+ */
+void calculate_host_policy(void);
+
#endif /* X86_CPU_POLICY_H */
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |