lkml.org 
[lkml]   [2024]   [Feb]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v19 122/130] KVM: TDX: Add methods to ignore accesses to TSC
    Date
    From: Isaku Yamahata <isaku.yamahata@intel.com>

    TDX protects TDX guest TSC state from VMM. Implement access methods to
    ignore guest TSC.

    Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
    ---
    arch/x86/kvm/vmx/main.c | 44 +++++++++++++++++++++++++++++++++++++----
    1 file changed, 40 insertions(+), 4 deletions(-)

    diff --git a/arch/x86/kvm/vmx/main.c b/arch/x86/kvm/vmx/main.c
    index ec5c0fda92e9..9fcd71999bba 100644
    --- a/arch/x86/kvm/vmx/main.c
    +++ b/arch/x86/kvm/vmx/main.c
    @@ -834,6 +834,42 @@ static u8 vt_get_mt_mask(struct kvm_vcpu *vcpu, gfn_t gfn, bool is_mmio)
    return vmx_get_mt_mask(vcpu, gfn, is_mmio);
    }

    +static u64 vt_get_l2_tsc_offset(struct kvm_vcpu *vcpu)
    +{
    + /* TDX doesn't support L2 guest at the moment. */
    + if (KVM_BUG_ON(is_td_vcpu(vcpu), vcpu->kvm))
    + return 0;
    +
    + return vmx_get_l2_tsc_offset(vcpu);
    +}
    +
    +static u64 vt_get_l2_tsc_multiplier(struct kvm_vcpu *vcpu)
    +{
    + /* TDX doesn't support L2 guest at the moment. */
    + if (KVM_BUG_ON(is_td_vcpu(vcpu), vcpu->kvm))
    + return 0;
    +
    + return vmx_get_l2_tsc_multiplier(vcpu);
    +}
    +
    +static void vt_write_tsc_offset(struct kvm_vcpu *vcpu)
    +{
    + /* In TDX, tsc offset can't be changed. */
    + if (is_td_vcpu(vcpu))
    + return;
    +
    + vmx_write_tsc_offset(vcpu);
    +}
    +
    +static void vt_write_tsc_multiplier(struct kvm_vcpu *vcpu)
    +{
    + /* In TDX, tsc multiplier can't be changed. */
    + if (is_td_vcpu(vcpu))
    + return;
    +
    + vmx_write_tsc_multiplier(vcpu);
    +}
    +
    static void vt_update_cpu_dirty_logging(struct kvm_vcpu *vcpu)
    {
    if (KVM_BUG_ON(is_td_vcpu(vcpu), vcpu->kvm))
    @@ -1022,10 +1058,10 @@ struct kvm_x86_ops vt_x86_ops __initdata = {

    .has_wbinvd_exit = cpu_has_vmx_wbinvd_exit,

    - .get_l2_tsc_offset = vmx_get_l2_tsc_offset,
    - .get_l2_tsc_multiplier = vmx_get_l2_tsc_multiplier,
    - .write_tsc_offset = vmx_write_tsc_offset,
    - .write_tsc_multiplier = vmx_write_tsc_multiplier,
    + .get_l2_tsc_offset = vt_get_l2_tsc_offset,
    + .get_l2_tsc_multiplier = vt_get_l2_tsc_multiplier,
    + .write_tsc_offset = vt_write_tsc_offset,
    + .write_tsc_multiplier = vt_write_tsc_multiplier,

    .load_mmu_pgd = vt_load_mmu_pgd,

    --
    2.25.1

    \
     
     \ /
      Last update: 2024-05-27 15:21    [W:6.392 / U:0.280 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site