lkml.org 
[lkml]   [2020]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 29/32] KVM: VMX: Don't reload APIC access page if its control is disabled
    Date
    Don't reload the APIC access page if its control is disabled, e.g. if
    the guest is running with x2APIC (likely) or with the local APIC
    disabled (unlikely), to avoid unnecessary TLB flushes and VMWRITEs.
    Unconditionally reload the APIC access page and flush the TLB when
    the guest's virtual APIC transitions to "xAPIC enabled", as any
    changes to the APIC access page's mapping will not be recorded while
    the guest's virtual APIC is disabled.

    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    ---
    arch/x86/kvm/vmx/vmx.c | 14 +++++++++++++-
    1 file changed, 13 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
    index e8d409b50afd..d49d2a1ddf03 100644
    --- a/arch/x86/kvm/vmx/vmx.c
    +++ b/arch/x86/kvm/vmx/vmx.c
    @@ -6122,7 +6122,15 @@ void vmx_set_virtual_apic_mode(struct kvm_vcpu *vcpu)
    if (flexpriority_enabled) {
    sec_exec_control |=
    SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES;
    - vmx_flush_tlb_current(vcpu);
    + kvm_make_request(KVM_REQ_APIC_PAGE_RELOAD, vcpu);
    +
    + /*
    + * Flush the TLB, reloading the APIC access page will
    + * only do so if its physical address has changed, but
    + * the guest may have inserted a non-APIC mapping into
    + * the TLB while the APIC access page was disabled.
    + */
    + kvm_make_request(KVM_REQ_TLB_FLUSH_CURRENT, vcpu);
    }
    break;
    case LAPIC_MODE_X2APIC:
    @@ -6146,6 +6154,10 @@ static void vmx_set_apic_access_page_addr(struct kvm_vcpu *vcpu)
    return;
    }

    + if (!(secondary_exec_controls_get(to_vmx(vcpu)) &
    + SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES))
    + return;
    +
    page = gfn_to_page(vcpu->kvm, APIC_DEFAULT_PHYS_BASE >> PAGE_SHIFT);
    if (is_error_page(page))
    return;
    --
    2.24.1
    \
     
     \ /
      Last update: 2020-03-17 05:54    [W:4.822 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site