lkml.org 
[lkml]   [2015]   [Sep]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 8/8] KVM: VMX: drop rdtscp_enabled field
    Date
    Check cpuid bit instead of it

    Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
    ---
    arch/x86/kvm/cpuid.h | 8 ++++++++
    arch/x86/kvm/vmx.c | 19 ++++++-------------
    2 files changed, 14 insertions(+), 13 deletions(-)

    diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h
    index aed7bfe..d434ee9 100644
    --- a/arch/x86/kvm/cpuid.h
    +++ b/arch/x86/kvm/cpuid.h
    @@ -141,4 +141,12 @@ static inline bool guest_cpuid_has_pcommit(struct kvm_vcpu *vcpu)
    best = kvm_find_cpuid_entry(vcpu, 7, 0);
    return best && (best->ebx & bit(X86_FEATURE_PCOMMIT));
    }
    +
    +static inline bool guest_cpuid_has_rdtscp(struct kvm_vcpu *vcpu)
    +{
    + struct kvm_cpuid_entry2 *best;
    +
    + best = kvm_find_cpuid_entry(vcpu, 0x80000001, 0);
    + return best && (best->edx & bit(X86_FEATURE_RDTSCP));
    +}
    #endif
    diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
    index f18f744..2e98e6d 100644
    --- a/arch/x86/kvm/vmx.c
    +++ b/arch/x86/kvm/vmx.c
    @@ -532,8 +532,6 @@ struct vcpu_vmx {
    s64 vnmi_blocked_time;
    u32 exit_reason;

    - bool rdtscp_enabled;
    -
    /* Posted interrupt descriptor */
    struct pi_desc pi_desc;

    @@ -2207,7 +2205,7 @@ static void setup_msrs(struct vcpu_vmx *vmx)
    if (index >= 0)
    move_msr_up(vmx, index, save_nmsrs++);
    index = __find_msr_index(vmx, MSR_TSC_AUX);
    - if (index >= 0 && vmx->rdtscp_enabled)
    + if (index >= 0 && guest_cpuid_has_rdtscp(&vmx->vcpu))
    move_msr_up(vmx, index, save_nmsrs++);
    /*
    * MSR_STAR is only needed on long mode guests, and only
    @@ -2674,7 +2672,7 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
    msr_info->data = vcpu->arch.ia32_xss;
    break;
    case MSR_TSC_AUX:
    - if (!to_vmx(vcpu)->rdtscp_enabled)
    + if (!guest_cpuid_has_rdtscp(vcpu))
    return 1;
    /* Otherwise falls through */
    default:
    @@ -2780,7 +2778,7 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
    clear_atomic_switch_msr(vmx, MSR_IA32_XSS);
    break;
    case MSR_TSC_AUX:
    - if (!vmx->rdtscp_enabled)
    + if (!guest_cpuid_has_rdtscp(vcpu))
    return 1;
    /* Check reserved bit, higher 32 bits should be zero */
    if ((data >> 32) != 0)
    @@ -8664,15 +8662,10 @@ static void vmx_cpuid_update(struct kvm_vcpu *vcpu)
    struct vcpu_vmx *vmx = to_vmx(vcpu);
    u32 clear_exe_ctrl = 0;

    - vmx->rdtscp_enabled = false;
    - if (vmx_rdtscp_supported()) {
    - best = kvm_find_cpuid_entry(vcpu, 0x80000001, 0);
    - if (best && (best->edx & bit(X86_FEATURE_RDTSCP)))
    - vmx->rdtscp_enabled = true;
    - else
    - clear_exe_ctrl |= SECONDARY_EXEC_RDTSCP;
    + if (vmx_rdtscp_supported() && !guest_cpuid_has_rdtscp(vcpu)) {
    + clear_exe_ctrl |= SECONDARY_EXEC_RDTSCP;

    - if (nested && !vmx->rdtscp_enabled)
    + if (nested)
    vmx->nested.nested_vmx_secondary_ctls_high &=
    ~SECONDARY_EXEC_RDTSCP;
    }
    --
    2.4.3


    \
     
     \ /
      Last update: 2015-09-09 08:21    [W:4.048 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site