[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v1] x86/msr: add Raw and Host domain policies
Raw policy contains the actual values from H/W MSRs. Add PLATFORM_INFO msr to the policy during probe_cpuid_faulting(). Host policy might have certain features disabled if Xen decides not to use them. For now, make Host policy equal to Raw policy. Signed-off-by: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx> --- v1: Decided to upstream this separately from VMX MSRs policy --- xen/arch/x86/cpu/common.c | 11 ++++++++++- xen/arch/x86/msr.c | 19 ++++++++++++++++++- xen/include/asm-x86/msr.h | 8 ++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c index 4306e59650..0875b5478b 100644 --- a/xen/arch/x86/cpu/common.c +++ b/xen/arch/x86/cpu/common.c @@ -118,9 +118,18 @@ void (* __read_mostly ctxt_switch_masking)(const struct vcpu *next); bool __init probe_cpuid_faulting(void) { + struct msr_domain_policy *dp = &raw_msr_domain_policy; uint64_t val; + int rc; - if (rdmsr_safe(MSR_INTEL_PLATFORM_INFO, val) || + if ((rc = rdmsr_safe(MSR_INTEL_PLATFORM_INFO, val)) == 0) + { + dp->plaform_info.available = true; + if (val & MSR_PLATFORM_INFO_CPUID_FAULTING) + dp->plaform_info.cpuid_faulting = true; + } + + if (rc || !(val & MSR_PLATFORM_INFO_CPUID_FAULTING) || rdmsr_safe(MSR_INTEL_MISC_FEATURES_ENABLES, this_cpu(msr_misc_features))) diff --git a/xen/arch/x86/msr.c b/xen/arch/x86/msr.c index 7875d9c1e0..fbc8cd47a7 100644 --- a/xen/arch/x86/msr.c +++ b/xen/arch/x86/msr.c @@ -24,12 +24,27 @@ #include <xen/sched.h> #include <asm/msr.h> -struct msr_domain_policy __read_mostly hvm_max_msr_domain_policy, +struct msr_domain_policy __read_mostly raw_msr_domain_policy, + __read_mostly host_msr_domain_policy, + __read_mostly hvm_max_msr_domain_policy, __read_mostly pv_max_msr_domain_policy; struct msr_vcpu_policy __read_mostly hvm_max_msr_vcpu_policy, __read_mostly pv_max_msr_vcpu_policy; +static void __init calculate_raw_policy(void) +{ + /* 0x000000ce MSR_INTEL_PLATFORM_INFO */ + /* Was already added by probe_cpuid_faulting() */ +} + +static void __init calculate_host_policy(void) +{ + struct msr_domain_policy *dp = &host_msr_domain_policy; + + *dp = raw_msr_domain_policy; +} + static void __init calculate_hvm_max_policy(void) { struct msr_domain_policy *dp = &hvm_max_msr_domain_policy; @@ -68,6 +83,8 @@ static void __init calculate_pv_max_policy(void) void __init init_guest_msr_policy(void) { + calculate_raw_policy(); + calculate_host_policy(); calculate_hvm_max_policy(); calculate_pv_max_policy(); } diff --git a/xen/include/asm-x86/msr.h b/xen/include/asm-x86/msr.h index 928f1cc454..8401d376c3 100644 --- a/xen/include/asm-x86/msr.h +++ b/xen/include/asm-x86/msr.h @@ -220,6 +220,14 @@ struct msr_domain_policy } plaform_info; }; +/* RAW msr domain policy: contains the actual values from H/W MSRs */ +extern msr_domain_policy raw_msr_domain_policy; +/* + * HOST msr domain policy: features that Xen actually decided to use, + * a subset of RAW policy. + */ +extern msr_domain_policy host_msr_domain_policy; + /* MSR policy object for per-vCPU MSRs */ struct msr_vcpu_policy { -- 2.14.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |