mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
x86/vpmu: disable VPMU if guest's CPUID indicates no PMU support
When toolstack overrides Intel CPUID leaf 0xa's PMU version with an invalid value VPMU should not be available to the guest. Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com>
This commit is contained in:
1 parent
4a970125d1
commit
e63d8abbe7
3 files changed
+30
No files matched your search
@@ -883,6 +883,10 @@ int vmx_vpmu_initialise(struct vcpu *v)
|
||||
if ( vpmu_mode == XENPMU_MODE_OFF )
|
||||
return 0;
|
||||
|
||||
if ( v->domain->arch.cpuid->basic.pmu_version <= 1 ||
|
||||
v->domain->arch.cpuid->basic.pmu_version >= 5 )
|
||||
return -EINVAL;
|
||||
|
||||
if ( (arch_pmc_cnt + fixed_pmc_cnt) == 0 )
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
@@ -252,6 +252,20 @@ static int update_domain_cpuid_info(struct domain *d,
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xa:
|
||||
if ( boot_cpu_data.x86_vendor != X86_VENDOR_INTEL )
|
||||
break;
|
||||
|
||||
/* If PMU version is zero then the guest doesn't have VPMU */
|
||||
if ( p->basic.pmu_version == 0 )
|
||||
{
|
||||
struct vcpu *v;
|
||||
|
||||
for_each_vcpu ( d, v )
|
||||
vpmu_destroy(v);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xd:
|
||||
if ( ctl->input[1] != 1 )
|
||||
break;
|
||||
|
||||
@@ -122,6 +122,18 @@ struct cpuid_policy
|
||||
|
||||
/* Leaf 0x2 - TLB/Cache/Prefetch. */
|
||||
uint8_t l2_nr_queries; /* Documented as fixed to 1. */
|
||||
uint8_t l2_desc[15];
|
||||
|
||||
uint64_t :64, :64; /* Leaf 0x3 - PSN. */
|
||||
uint64_t :64, :64; /* Leaf 0x4 - Structured Cache. */
|
||||
uint64_t :64, :64; /* Leaf 0x5 - MONITOR. */
|
||||
uint64_t :64, :64; /* Leaf 0x6 - Therm/Perf. */
|
||||
uint64_t :64, :64; /* Leaf 0x7 - Structured Features. */
|
||||
uint64_t :64, :64; /* Leaf 0x8 - rsvd */
|
||||
uint64_t :64, :64; /* Leaf 0x9 - DCA */
|
||||
|
||||
/* Leaf 0xa - Intel PMU. */
|
||||
uint8_t pmu_version;
|
||||
};
|
||||
} basic;
|
||||
|
||||
|
||||