• V
    x86: KVM: svm: remove hardcoded instruction length from intercepts · c4762fda
    Vitaly Kuznetsov 提交于
    Various intercepts hard-code the respective instruction lengths to optimize
    skip_emulated_instruction(): when next_rip is pre-set we skip
    kvm_emulate_instruction(vcpu, EMULTYPE_SKIP). The optimization is, however,
    incorrect: different (redundant) prefixes could be used to enlarge the
    instruction. We can't really avoid decoding.
    
    svm->next_rip is not used when CPU supports 'nrips' (X86_FEATURE_NRIPS)
    feature: next RIP is provided in VMCB. The feature is not really new
    (Opteron G3s had it already) and the change should have zero affect.
    
    Remove manual svm->next_rip setting with hard-coded instruction lengths.
    The only case where we now use svm->next_rip is EXIT_IOIO: the instruction
    length is provided to us by hardware.
    
    Hardcoded RIP advancement remains in vmrun_interception(), this is going to
    be taken care of separately.
    Reported-by: NJim Mattson <jmattson@google.com>
    Reviewed-by: NSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: NVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    c4762fda
svm.c 187.0 KB