lkml.org 
[lkml]   [2011]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv2 4/9] KVM: SVM: Intercept RDPMC
    Date
    From: Avi Kivity <avi@redhat.com>

    Intercept RDPMC and forward it to the PMU emulation code.

    Signed-off-by: Avi Kivity <avi@redhat.com>
    Signed-off-by: Gleb Natapov <gleb@redhat.com>
    ---
    arch/x86/kvm/svm.c | 15 +++++++++++++++
    1 files changed, 15 insertions(+), 0 deletions(-)

    diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
    index e32243e..5fa553b 100644
    --- a/arch/x86/kvm/svm.c
    +++ b/arch/x86/kvm/svm.c
    @@ -1014,6 +1014,7 @@ static void init_vmcb(struct vcpu_svm *svm)
    set_intercept(svm, INTERCEPT_NMI);
    set_intercept(svm, INTERCEPT_SMI);
    set_intercept(svm, INTERCEPT_SELECTIVE_CR0);
    + set_intercept(svm, INTERCEPT_RDPMC);
    set_intercept(svm, INTERCEPT_CPUID);
    set_intercept(svm, INTERCEPT_INVD);
    set_intercept(svm, INTERCEPT_HLT);
    @@ -2770,6 +2771,19 @@ static int emulate_on_interception(struct vcpu_svm *svm)
    return emulate_instruction(&svm->vcpu, 0) == EMULATE_DONE;
    }

    +static int rdpmc_interception(struct vcpu_svm *svm)
    +{
    + int err;
    +
    + if (!static_cpu_has(X86_FEATURE_NRIPS))
    + return emulate_on_interception(svm);
    +
    + err = kvm_rdpmc(&svm->vcpu);
    + kvm_complete_insn_gp(&svm->vcpu, err);
    +
    + return 1;
    +}
    +
    bool check_selective_cr0_intercepted(struct vcpu_svm *svm, unsigned long val)
    {
    unsigned long cr0 = svm->vcpu.arch.cr0;
    @@ -3190,6 +3204,7 @@ static int (*svm_exit_handlers[])(struct vcpu_svm *svm) = {
    [SVM_EXIT_SMI] = nop_on_interception,
    [SVM_EXIT_INIT] = nop_on_interception,
    [SVM_EXIT_VINTR] = interrupt_window_interception,
    + [SVM_EXIT_RDPMC] = rdpmc_interception,
    [SVM_EXIT_CPUID] = cpuid_interception,
    [SVM_EXIT_IRET] = iret_interception,
    [SVM_EXIT_INVD] = emulate_on_interception,
    --
    1.7.5.3


    \
     
     \ /
      Last update: 2011-11-03 13:37    [W:0.022 / U:34.948 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site