From patchwork Tue Oct 3 03:10:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jintack Lim X-Patchwork-Id: 114653 Delivered-To: patch@linaro.org Received: by 10.140.22.163 with SMTP id 32csp1389503qgn; Mon, 2 Oct 2017 20:19:17 -0700 (PDT) X-Received: by 10.99.124.91 with SMTP id l27mr675552pgn.49.1507000757854; Mon, 02 Oct 2017 20:19:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507000757; cv=none; d=google.com; s=arc-20160816; b=vVUG3xnZIkL/1LaF0K7s8C+m/axr2Wm89BC/Yd3Aet+5y4QE0Va0UWjO5H9LYpkVQx IH8k+QstSMMLFnCBuZgmSBMqwLWnMiTALIZrGUGweYtDG/Y8xqDjlVAHKu2YHYau3j8a vWHvoebHoW3AYESn98iYuEmQI4NXsUvzYxvmFRtowCU4TIX3qvmvprTvv/W2PPhPbeA8 pNmkprCf/Ped37CUQCjFff6KuLJ8bA2ZN5NikvwMrbjcDyL9zP22rYBf6AGuHl30Yn7C 2HBqJq4DxkPmckTx5USdpGrrpxBe1JrMeP0aCIyV9NItvlfcRiV9OESmh3TIHMhuWAmh Cwuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=1Ucz1J4P5XUKPSNzgO4sG8gFNOHEthQaf/MHvQEb4Vo=; b=FHtrfIjCX/rrGzwp6rKYO6/lpSJ9wZNmUwJDe9ON2vYKwzhoZu+yCuC6gU6uzIknTZ Q44qikcMFcci+WhjsGqQ+KUks+kPb/f1K/uJyuDQBkG6gQL/BTYhCGQkW3oKWuYIhLsk ZMF5oiI8iw1VQ9AzOsOjDX+e1i3QHLnoPZ0ntRNvPVW5xj6bHLy8QiCYvtTPTftyD2O3 P4b/q+05nD2uj95Ena3Tiv5qRzXA5rdPS7+Poa6l0er5hF0GatOWi9QJdsSv1vyJDeH1 +D7dNrrgNxV53RGkidh1GpUKeez/7lEdL/SB0S/QnxIQnHI32Y17NyvNU5lXtYb5wJjG Sa3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=VS9z7cHc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a1si9503927pld.153.2017.10.02.20.19.17; Mon, 02 Oct 2017 20:19:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=VS9z7cHc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751534AbdJCDTP (ORCPT + 26 others); Mon, 2 Oct 2017 23:19:15 -0400 Received: from mail-it0-f52.google.com ([209.85.214.52]:53430 "EHLO mail-it0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751667AbdJCDLo (ORCPT ); Mon, 2 Oct 2017 23:11:44 -0400 Received: by mail-it0-f52.google.com with SMTP id 85so9735246ith.2 for ; Mon, 02 Oct 2017 20:11:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1Ucz1J4P5XUKPSNzgO4sG8gFNOHEthQaf/MHvQEb4Vo=; b=VS9z7cHcBpErAH9DZjxcZLAvGgEKw+0TDzVFYBAMV9bg1e2GmaHy8xMJgtsNutaCdv NeZmVFJL8Y/5Q7/UvxeqQ9JYUh7LHXIhWgNAEHc3DVqeRKmkvk18lXGUeRLnr5r84KSP X2Eb7Hfs1oDhkPUEeB3tGesKYVSn19KqWf7Ng= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=1Ucz1J4P5XUKPSNzgO4sG8gFNOHEthQaf/MHvQEb4Vo=; b=NNB38af0lTlgGPmB5joOowjAh+AJDjLbH/tWy01/n0EaYA/ZO0T+2aThkkpjbeUwtg 6pkBsprxHv6xCASKagF4OkWvVdZsciJRtQkfMYJyGiO5aGoJaf7oYBfwOk1COyTxt/zf w+m/ETGxCivH+Z0e94C3M7RMK7bzYdnBmiJSa26c3Cr5Bv/rIFithNrLTBYE3a34VHLh eyctp2TKG4Ia/9X7wlqHcHpE3PYScRqNFZZJXkBoOZXFXjQ7ZDyoW5iUqknag6PMA65O 92I1RqS89yj1fUl2CcittryJkvcDjIkJ5VKGijX1LhJ8+Gp9tC1Iz50F5EHHMC9seayS UM+A== X-Gm-Message-State: AMCzsaXxoVIkq2gbhCjdBteHQXimpny7R8P3yP5gYlzmTNqVnuR4jie1 T3p9TL+lCAbtHS7DBpcqwnfvLg== X-Google-Smtp-Source: AOwi7QCsZQo6NhiQgypAsAOVhrCYWZuKSJ8bCa+1lqxBpGBdKtfw2+x65A9Q3cUN0IwWcW7PT/W59g== X-Received: by 10.36.83.146 with SMTP id n140mr24509145itb.104.1507000303557; Mon, 02 Oct 2017 20:11:43 -0700 (PDT) Received: from node.jintackl-qv28633.kvmarm-pg0.wisc.cloudlab.us (c220g1-031126.wisc.cloudlab.us. [128.104.222.76]) by smtp.gmail.com with ESMTPSA id h84sm5367193iod.72.2017.10.02.20.11.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 02 Oct 2017 20:11:42 -0700 (PDT) From: Jintack Lim To: christoffer.dall@linaro.org, marc.zyngier@arm.com, kvmarm@lists.cs.columbia.edu Cc: jintack@cs.columbia.edu, pbonzini@redhat.com, rkrcmar@redhat.com, catalin.marinas@arm.com, will.deacon@arm.com, linux@armlinux.org.uk, mark.rutland@arm.com, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Jintack Lim Subject: [RFC PATCH v2 06/31] KVM: arm64: Invalidate virtual EL2 TLB entries when needed Date: Mon, 2 Oct 2017 22:10:48 -0500 Message-Id: <1507000273-3735-4-git-send-email-jintack.lim@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1507000273-3735-1-git-send-email-jintack.lim@linaro.org> References: <1507000273-3735-1-git-send-email-jintack.lim@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Christoffer Dall Sometimes when we are invalidating the TLB for a certain S2 MMU context, this context can also have EL2 context associated with it and we have to invalidate this too. Signed-off-by: Christoffer Dall Signed-off-by: Jintack Lim --- virt/kvm/arm/arm.c | 5 +++++ virt/kvm/arm/mmu.c | 23 ++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) -- 1.9.1 diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c index 41e0654..63dd897 100644 --- a/virt/kvm/arm/arm.c +++ b/virt/kvm/arm/arm.c @@ -362,6 +362,11 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) u64 vttbr = kvm_get_vttbr(&mmu->vmid, mmu); kvm_call_hyp(__kvm_tlb_flush_local_vmid, vttbr); + + if (mmu->el2_vmid.vmid) { + vttbr = kvm_get_vttbr(&mmu->el2_vmid, mmu); + kvm_call_hyp(__kvm_tlb_flush_local_vmid, vttbr); + } *last_ran = vcpu->vcpu_id; } diff --git a/virt/kvm/arm/mmu.c b/virt/kvm/arm/mmu.c index 0edcf23..184cdc9 100644 --- a/virt/kvm/arm/mmu.c +++ b/virt/kvm/arm/mmu.c @@ -64,7 +64,21 @@ void kvm_flush_remote_tlbs(struct kvm *kvm) struct kvm_s2_mmu *mmu = &kvm->arch.mmu; u64 vttbr = kvm_get_vttbr(&mmu->vmid, mmu); - kvm_call_hyp(__kvm_tlb_flush_vmid, vttbr); + if (!mmu->el2_vmid.vmid) { + /* + * For a normal (i.e. non-nested) guest, flush entries for the + * given VMID * + */ + kvm_call_hyp(__kvm_tlb_flush_vmid, vttbr); + } else { + /* + * When supporting nested virtualization, we can have multiple + * VMIDs in play for each VCPU in the VM, so it's really not + * worth it to try to quiesce the system and flush all the + * VMIDs that may be in use, instead just nuke the whole thing. + */ + kvm_call_hyp(__kvm_flush_vm_context); + } } static void kvm_tlb_flush_vmid_ipa(struct kvm_s2_mmu *mmu, phys_addr_t ipa) @@ -72,6 +86,13 @@ static void kvm_tlb_flush_vmid_ipa(struct kvm_s2_mmu *mmu, phys_addr_t ipa) u64 vttbr = kvm_get_vttbr(&mmu->vmid, mmu); kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, vttbr, ipa); + + if (!mmu->el2_vmid.vmid) { + /* Nothing to do more for a non-nested guest */ + return; + } + vttbr = kvm_get_vttbr(&mmu->el2_vmid, mmu); + kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, vttbr, ipa); } /*