|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 2/6] x86/msr: add VMX MSRs into struct msr_domain_policy
On Fri, 2017-10-13 at 16:16 +0100, Andrew Cooper wrote:
> On 13/10/17 13:35, Sergey Dyasli wrote:
> > @@ -210,6 +375,255 @@ struct msr_domain_policy
> > bool available; /* This MSR is non-architectural */
> > bool cpuid_faulting;
> > } plaform_info;
> > +
> > + /* 0x00000480 MSR_IA32_VMX_BASIC */
> > + struct {
> > + bool available;
>
> We don't need available bits for any of these MSRs. Their availability
> is cpuid->basic.vmx, and we don't want (let alone need) to duplicate
> information like this.
Andrew,
What do you think about the following way of checking the availability?
diff --git a/xen/arch/x86/msr.c b/xen/arch/x86/msr.c
index 2527fdd1d1..828f1bb503 100644
--- a/xen/arch/x86/msr.c
+++ b/xen/arch/x86/msr.c
@@ -33,6 +33,43 @@ struct msr_domain_policy __read_mostly
raw_msr_domain_policy,
struct msr_vcpu_policy __read_mostly hvm_max_msr_vcpu_policy,
__read_mostly pv_max_msr_vcpu_policy;
+bool msr_vmx_available(const struct domain *d, uint32_t msr)
+{
+ const struct msr_domain_policy *dp = d->arch.msr;
+ bool secondary_available;
+
+ if ( !nestedhvm_enabled(d) || !d->arch.cpuid->basic.vmx )
+ return false;
+
+ secondary_available =
+ dp->vmx_procbased_ctls.u.allowed_1.activate_secondary_controls;
+
+ switch (msr)
+ {
+ case MSR_IA32_VMX_BASIC ... MSR_IA32_VMX_VMCS_ENUM:
+ return true;
+
+ case MSR_IA32_VMX_PROCBASED_CTLS2:
+ return secondary_available;
+
+ case MSR_IA32_VMX_EPT_VPID_CAP:
+ return ( secondary_available &&
+ (dp->vmx_procbased_ctls2.u.allowed_1.enable_ept ||
+ dp->vmx_procbased_ctls2.u.allowed_1.enable_vpid) );
+
+ case MSR_IA32_VMX_TRUE_PINBASED_CTLS ... MSR_IA32_VMX_TRUE_ENTRY_CTLS:
+ return dp->vmx_basic.u.default1_zero;
+
+ case MSR_IA32_VMX_VMFUNC:
+ return ( secondary_available &&
+ dp->vmx_procbased_ctls2.u.allowed_1.enable_vm_functions );
+
+ default: break;
+ }
+
+ return false;
+}
+
static void __init calculate_raw_vmx_policy(struct msr_domain_policy *dp)
{
if ( !cpu_has_vmx )
--
Thanks,
Sergey
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |