[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v7 20/32] xen/x86: set the vPMU interface based on the presence of a lapic
Instead of choosing the interface to expose to guests based on the guest type, do it based on whether the guest has an emulated local apic or not. Signed-off-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- Changes since v6: - Major rework of the approach. - Drop Andrew Cooper Acked-by. Changes since v4: - Add Andrew Cooper Acked-by. --- xen/arch/x86/cpu/vpmu.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/cpu/vpmu.c b/xen/arch/x86/cpu/vpmu.c index 8af3df1..e5fe4ef 100644 --- a/xen/arch/x86/cpu/vpmu.c +++ b/xen/arch/x86/cpu/vpmu.c @@ -94,7 +94,7 @@ void vpmu_lvtpc_update(uint32_t val) vpmu->hw_lapic_lvtpc = PMU_APIC_VECTOR | (val & APIC_LVT_MASKED); /* Postpone APIC updates for PV(H) guests if PMU interrupt is pending */ - if ( is_hvm_vcpu(curr) || !vpmu->xenpmu_data || + if ( has_vlapic(curr->domain) || !vpmu->xenpmu_data || !vpmu_is_set(vpmu, VPMU_CACHED) ) apic_write(APIC_LVTPC, vpmu->hw_lapic_lvtpc); } @@ -129,7 +129,7 @@ int vpmu_do_msr(unsigned int msr, uint64_t *msr_content, * and since do_wr/rdmsr may load VPMU context we should save * (and unload) it again. */ - if ( !is_hvm_vcpu(curr) && vpmu->xenpmu_data && + if ( !has_vlapic(curr->domain) && vpmu->xenpmu_data && vpmu_is_set(vpmu, VPMU_CACHED) ) { vpmu_set(vpmu, VPMU_CONTEXT_SAVE); @@ -184,7 +184,7 @@ void vpmu_do_interrupt(struct cpu_user_regs *regs) return; /* PV(H) guest */ - if ( !is_hvm_vcpu(sampling) || (vpmu_mode & XENPMU_MODE_ALL) ) + if ( !has_vlapic(sampling->domain) || (vpmu_mode & XENPMU_MODE_ALL) ) { const struct cpu_user_regs *cur_regs; uint64_t *flags = &vpmu->xenpmu_data->pmu.pmu_flags; @@ -411,7 +411,8 @@ int vpmu_load(struct vcpu *v, bool_t from_guest) /* Only when PMU is counting, we load PMU context immediately. */ if ( !vpmu_is_set(vpmu, VPMU_RUNNING) || - (!is_hvm_vcpu(vpmu_vcpu(vpmu)) && vpmu_is_set(vpmu, VPMU_CACHED)) ) + (!has_vlapic(vpmu_vcpu(vpmu)->domain) && + vpmu_is_set(vpmu, VPMU_CACHED)) ) return 0; if ( vpmu->arch_vpmu_ops && vpmu->arch_vpmu_ops->arch_vpmu_load ) -- 1.9.5 (Apple Git-50.3) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |