|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v12 for-xen-4.5 15/20] x86/VPMU: Add support for PMU register handling on PV guests
>>> On 25.09.14 at 21:28, <boris.ostrovsky@xxxxxxxxxx> wrote:
> Intercept accesses to PMU MSRs and process them in VPMU module.
>
> Dump VPMU state for all domains (HVM and PV) when requested.
>
> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
provided ...
> @@ -2561,7 +2569,22 @@ static int emulate_privileged_op(struct cpu_user_regs
> *regs)
> if ( v->arch.debugreg[7] & DR7_ACTIVE_MASK )
> wrmsrl(regs->_ecx, msr_content);
> break;
> -
> + case MSR_P6_PERFCTR(0)...MSR_P6_PERFCTR(7):
> + case MSR_P6_EVNTSEL(0)...MSR_P6_EVNTSEL(3):
> + case MSR_CORE_PERF_FIXED_CTR0...MSR_CORE_PERF_FIXED_CTR2:
> + case MSR_CORE_PERF_FIXED_CTR_CTRL...MSR_CORE_PERF_GLOBAL_OVF_CTRL:
> + if ( boot_cpu_data.x86_vendor == X86_VENDOR_INTEL )
> + {
> + vpmu_msr = 1;
> + case MSR_AMD_FAM15H_EVNTSEL0...MSR_AMD_FAM15H_PERFCTR5:
> + if ( vpmu_msr || (boot_cpu_data.x86_vendor ==
> X86_VENDOR_AMD) )
> + {
> + if ( vpmu_do_wrmsr(regs->ecx, msr_content, 0) )
> + goto fail;
> + }
> + break;
> + }
> + /*FALLTHROUGH*/
> default:
> if ( wrmsr_hypervisor_regs(regs->ecx, msr_content) == 1 )
> break;
> @@ -2593,6 +2616,7 @@ static int emulate_privileged_op(struct cpu_user_regs
> *regs)
> break;
>
> case 0x32: /* RDMSR */
> + vpmu_msr = 0;
> switch ( (u32)regs->ecx )
> {
> case MSR_FS_BASE:
> @@ -2663,7 +2687,29 @@ static int emulate_privileged_op(struct cpu_user_regs
> *regs)
> [regs->_ecx - MSR_AMD64_DR1_ADDRESS_MASK + 1];
> regs->edx = 0;
> break;
> + case MSR_IA32_PERF_CAPABILITIES:
> + /* No extra capabilities are supported */
> + regs->eax = regs->edx = 0;
> + break;
> + case MSR_P6_PERFCTR(0)...MSR_P6_PERFCTR(7):
> + case MSR_P6_EVNTSEL(0)...MSR_P6_EVNTSEL(3):
> + case MSR_CORE_PERF_FIXED_CTR0...MSR_CORE_PERF_FIXED_CTR2:
> + case MSR_CORE_PERF_FIXED_CTR_CTRL...MSR_CORE_PERF_GLOBAL_OVF_CTRL:
> + if ( boot_cpu_data.x86_vendor == X86_VENDOR_INTEL )
> + {
> + vpmu_msr = 1;
> + case MSR_AMD_FAM15H_EVNTSEL0...MSR_AMD_FAM15H_PERFCTR5:
> + if ( vpmu_msr || (boot_cpu_data.x86_vendor ==
> X86_VENDOR_AMD) )
> + {
> + if ( vpmu_do_rdmsr(regs->ecx, &msr_content) )
> + goto fail;
>
> + regs->eax = (uint32_t)msr_content;
> + regs->edx = (uint32_t)(msr_content >> 32);
> + }
> + break;
> + }
> + /*FALLTHROUGH*/
> default:
> if ( rdmsr_hypervisor_regs(regs->ecx, &val) )
> {
... you retain the blank lines and suitably add another one in each
code chunk.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |