Commit 5058b692 authored by Sean Christopherson's avatar Sean Christopherson Committed by Paolo Bonzini
Browse files

KVM: VMX: Move vmx_flush_tlb() to vmx.c



Move vmx_flush_tlb() to vmx.c and make it non-inline static now that all
its callers live in vmx.c.

No functional change intended.

Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
Message-Id: <20200320212833.3507-19-sean.j.christopherson@intel.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 72b38320
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -2838,6 +2838,31 @@ static void exit_lmode(struct kvm_vcpu *vcpu)

#endif

static void vmx_flush_tlb(struct kvm_vcpu *vcpu)
{
	struct vcpu_vmx *vmx = to_vmx(vcpu);

	/*
	 * Flush all EPTP/VPID contexts, as the TLB flush _may_ have been
	 * invoked via kvm_flush_remote_tlbs().  Flushing remote TLBs requires
	 * all contexts to be flushed, not just the active context.
	 *
	 * Note, this also ensures a deferred TLB flush with VPID enabled and
	 * EPT disabled invalidates the "correct" VPID, by nuking both L1 and
	 * L2's VPIDs.
	 */
	if (enable_ept) {
		ept_sync_global();
	} else if (enable_vpid) {
		if (cpu_has_vmx_invvpid_global()) {
			vpid_sync_vcpu_global();
		} else {
			vpid_sync_vcpu_single(vmx->vpid);
			vpid_sync_vcpu_single(vmx->nested.vpid02);
		}
	}
}

static void vmx_flush_tlb_gva(struct kvm_vcpu *vcpu, gva_t addr)
{
	/*
+0 −25
Original line number Diff line number Diff line
@@ -500,31 +500,6 @@ static inline struct vmcs *alloc_vmcs(bool shadow)

u64 construct_eptp(struct kvm_vcpu *vcpu, unsigned long root_hpa);

static inline void vmx_flush_tlb(struct kvm_vcpu *vcpu)
{
	struct vcpu_vmx *vmx = to_vmx(vcpu);

	/*
	 * Flush all EPTP/VPID contexts, as the TLB flush _may_ have been
	 * invoked via kvm_flush_remote_tlbs().  Flushing remote TLBs requires
	 * all contexts to be flushed, not just the active context.
	 *
	 * Note, this also ensures a deferred TLB flush with VPID enabled and
	 * EPT disabled invalidates the "correct" VPID, by nuking both L1 and
	 * L2's VPIDs.
	 */
	if (enable_ept) {
		ept_sync_global();
	} else if (enable_vpid) {
		if (cpu_has_vmx_invvpid_global()) {
			vpid_sync_vcpu_global();
		} else {
			vpid_sync_vcpu_single(vmx->vpid);
			vpid_sync_vcpu_single(vmx->nested.vpid02);
		}
	}
}

static inline void decache_tsc_multiplier(struct vcpu_vmx *vmx)
{
	vmx->current_tsc_ratio = vmx->vcpu.arch.tsc_scaling_ratio;