On 06/13/2011 07:35 AM, Avi Kivity wrote: > Intercept RDPMC and forward it to the PMU emulation code. > > Signed-off-by: Avi Kivity <avi@xxxxxxxxxx> > --- > arch/x86/kvm/vmx.c | 15 ++++++++++++++- > 1 files changed, 14 insertions(+), 1 deletions(-) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index f5b49c7..6ac3d54 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -1882,6 +1882,7 @@ static __init void nested_vmx_setup_ctls_msrs(void) > #endif > CPU_BASED_MOV_DR_EXITING | CPU_BASED_UNCOND_IO_EXITING | > CPU_BASED_USE_IO_BITMAPS | CPU_BASED_MONITOR_EXITING | > + CPU_BASED_RDPMC_EXITING | > CPU_BASED_ACTIVATE_SECONDARY_CONTROLS; > /* > * We can allow some features even when not supported by the What tree is this based on? This patch fails here when to applying to latest kernel tree. David > @@ -2340,7 +2341,8 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf) > CPU_BASED_USE_TSC_OFFSETING | > CPU_BASED_MWAIT_EXITING | > CPU_BASED_MONITOR_EXITING | > - CPU_BASED_INVLPG_EXITING; > + CPU_BASED_INVLPG_EXITING | > + CPU_BASED_RDPMC_EXITING; > > if (yield_on_hlt) > min |= CPU_BASED_HLT_EXITING; > @@ -4491,6 +4493,16 @@ static int handle_invlpg(struct kvm_vcpu *vcpu) > return 1; > } > > +static int handle_rdpmc(struct kvm_vcpu *vcpu) > +{ > + int err; > + > + err = kvm_rdpmc(vcpu); > + kvm_complete_insn_gp(vcpu, err); > + > + return 1; > +} > + > static int handle_wbinvd(struct kvm_vcpu *vcpu) > { > skip_emulated_instruction(vcpu); > @@ -5415,6 +5427,7 @@ static int (*kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = { > [EXIT_REASON_HLT] = handle_halt, > [EXIT_REASON_INVD] = handle_invd, > [EXIT_REASON_INVLPG] = handle_invlpg, > + [EXIT_REASON_RDPMC] = handle_rdpmc, > [EXIT_REASON_VMCALL] = handle_vmcall, > [EXIT_REASON_VMCLEAR] = handle_vmclear, > [EXIT_REASON_VMLAUNCH] = handle_vmlaunch, -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html