mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-05 10:20:55 +00:00
hv: vlapic: minor fix about detect_apicv_cap
detect_apicv_cap should used to detect all the APICv capabilities. Besides, "Virtualize x2APIC mode" doesn't depend on "APIC-register virtualization". We shouldn't check "Virtualize x2APIC mode" support only when physical platform supports "APIC-register virtualization" Tracked-On: #1842 Signed-off-by: Li, Fei1 <fei1.li@intel.com>
This commit is contained in:
parent
f769f7457b
commit
78890622b2
@ -141,36 +141,30 @@ static void detect_apicv_cap(void)
|
||||
uint64_t msr_val;
|
||||
|
||||
msr_val = msr_read(MSR_IA32_VMX_PROCBASED_CTLS);
|
||||
/* must support TPR shadow */
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PROCBASED_CTLS_TPR_SHADOW)) {
|
||||
features |= VAPIC_FEATURE_TPR_SHADOW;
|
||||
|
||||
msr_val = msr_read(MSR_IA32_VMX_PROCBASED_CTLS2);
|
||||
/* must support APICV access */
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PROCBASED_CTLS2_VAPIC)) {
|
||||
features |= VAPIC_FEATURE_VIRT_ACCESS;
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PROCBASED_CTLS2_VAPIC_REGS)) {
|
||||
features |= VAPIC_FEATURE_VIRT_REG;
|
||||
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PROCBASED_CTLS2_VX2APIC)) {
|
||||
features |= VAPIC_FEATURE_VX2APIC_MODE;
|
||||
}
|
||||
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PROCBASED_CTLS2_VIRQ)) {
|
||||
features |= VAPIC_FEATURE_INTR_DELIVERY;
|
||||
|
||||
msr_val = msr_read(MSR_IA32_VMX_PINBASED_CTLS);
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PINBASED_CTLS_POST_IRQ)) {
|
||||
features |= VAPIC_FEATURE_POST_INTR;
|
||||
}
|
||||
}
|
||||
cpu_caps.apicv_features = features;
|
||||
} else {
|
||||
/* platform may only support APICV access */
|
||||
cpu_caps.apicv_features = features;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
msr_val = msr_read(MSR_IA32_VMX_PROCBASED_CTLS2);
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PROCBASED_CTLS2_VAPIC)) {
|
||||
features |= VAPIC_FEATURE_VIRT_ACCESS;
|
||||
}
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PROCBASED_CTLS2_VX2APIC)) {
|
||||
features |= VAPIC_FEATURE_VX2APIC_MODE;
|
||||
}
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PROCBASED_CTLS2_VAPIC_REGS)) {
|
||||
features |= VAPIC_FEATURE_VIRT_REG;
|
||||
}
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PROCBASED_CTLS2_VIRQ)) {
|
||||
features |= VAPIC_FEATURE_INTR_DELIVERY;
|
||||
}
|
||||
|
||||
msr_val = msr_read(MSR_IA32_VMX_PINBASED_CTLS);
|
||||
if (is_ctrl_setting_allowed(msr_val, VMX_PINBASED_CTLS_POST_IRQ)) {
|
||||
features |= VAPIC_FEATURE_POST_INTR;
|
||||
}
|
||||
|
||||
cpu_caps.apicv_features = features;
|
||||
}
|
||||
|
||||
static void detect_vmx_mmu_cap(void)
|
||||
|
Loading…
Reference in New Issue
Block a user