Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp3691376ybv; Mon, 10 Feb 2020 04:47:45 -0800 (PST) X-Google-Smtp-Source: APXvYqyg7MFwN+xUVKiu/tibMGyrv6Br8VwPve9zMsYbedaoUVlGqkFnF6Qz60VAJHYCy4ZGlDj1 X-Received: by 2002:a05:6830:1db3:: with SMTP id z19mr949596oti.292.1581338865727; Mon, 10 Feb 2020 04:47:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581338865; cv=none; d=google.com; s=arc-20160816; b=YrvuMbZbcpzVDRJANpCsknVgOx3X3RQ95XVu8CcetJ/KQEDsX2itbcBGmNkyfWqjaa mJFv0BoFhRNYYJQ9FLHoGsLWjx8vnYvEg/2a3Os1kbd0kD0S6dEuodDBVQmLgiRGAdte F6AJ9MWE4dsuKQRLK5SrrdzZoKUNqBl7KgU5HyRck5nrmn5/1/tNUbb+RQbqTgusLkuo 0ZYBZhaGm7Gbq2A2gmgxdrcAJ7wcpE1yQWx5efWM4oHacnW45hk29OGK/vR7bogiFCl+ tkLdtOPHyjF1dyZCs+oaUV7oBJr/vRq1haIHRt/gbMnb8YI4sVyR5M+Cj+d5JOoIMZK+ M28A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=6tOzND4VY2EXX4KSqtFzhljTZEtQGkqMP6yX25o/B58=; b=ByCcyZZZg9hVDCgVEzM2Wq1BGccpnRxqTPnWe/I6YjhrPD6GyezVrIU3YIFwMjQ2/+ 4W8lCLD0cy2HkYKgSqZcdcCPEfjOXKcmWOzKNwEiyUXZL1gFfNP69/irZFzjQLCXc/Yi OYRiylEMcCKeXif57TTkCNxbPd+VSSoO4IsixRyPZaA8j8+juH4LCEPqMSx9F/JESvmB 15A6ouGlh4SEAMJWR/vtHv1jZLN/u4/+BlLXInIDSjc2VC7DwJVcJXz+o8J/q0tOj1u2 QGYYkSrlAyHaqUE2dFjhfSUGWzkscTvfMx5eOYk8O509rhv3NNW0O9gqBWoWy8cz408p P7Lg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ZExqGFVW; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 185si143187oie.52.2020.02.10.04.47.33; Mon, 10 Feb 2020 04:47:45 -0800 (PST) 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=@kernel.org header.s=default header.b=ZExqGFVW; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727932AbgBJMrb (ORCPT + 99 others); Mon, 10 Feb 2020 07:47:31 -0500 Received: from mail.kernel.org ([198.145.29.99]:45952 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729922AbgBJMmN (ORCPT ); Mon, 10 Feb 2020 07:42:13 -0500 Received: from localhost (unknown [209.37.97.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 985C92051A; Mon, 10 Feb 2020 12:42:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581338532; bh=fJdTkb3uoSiThsZ7X2Ec6tcfCVyk4jU3ltic3G2I9oM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZExqGFVW52E0iDMzdmOPIqplHC5nDvYf/eVKzFh1FmImRzaHZe1N6rETM+2YEF/r7 GHtMrMN1X1kFsQpc+gXmTPj/srvbXPGld10RecAJNwvMHDHPQ/5VM450ReiAIEHpgv GqbBTTdt8NLMV3kJ1+p0WlV18WO6kti+tvLudYpE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sean Christopherson , Paolo Bonzini , Sasha Levin Subject: [PATCH 5.5 358/367] KVM: Use vcpu-specific gva->hva translation when querying host page size Date: Mon, 10 Feb 2020 04:34:31 -0800 Message-Id: <20200210122455.457437212@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200210122423.695146547@linuxfoundation.org> References: <20200210122423.695146547@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sean Christopherson [ Upstream commit f9b84e19221efc5f493156ee0329df3142085f28 ] Use kvm_vcpu_gfn_to_hva() when retrieving the host page size so that the correct set of memslots is used when handling x86 page faults in SMM. Fixes: 54bf36aac520 ("KVM: x86: use vcpu-specific functions to read/write/translate GFNs") Cc: stable@vger.kernel.org Signed-off-by: Sean Christopherson Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- arch/powerpc/kvm/book3s_xive_native.c | 2 +- arch/x86/kvm/mmu/mmu.c | 6 +++--- include/linux/kvm_host.h | 2 +- virt/kvm/kvm_main.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/powerpc/kvm/book3s_xive_native.c b/arch/powerpc/kvm/book3s_xive_native.c index d83adb1e14902..6ef0151ff70a9 100644 --- a/arch/powerpc/kvm/book3s_xive_native.c +++ b/arch/powerpc/kvm/book3s_xive_native.c @@ -631,7 +631,7 @@ static int kvmppc_xive_native_set_queue_config(struct kvmppc_xive *xive, srcu_idx = srcu_read_lock(&kvm->srcu); gfn = gpa_to_gfn(kvm_eq.qaddr); - page_size = kvm_host_page_size(kvm, gfn); + page_size = kvm_host_page_size(vcpu, gfn); if (1ull << kvm_eq.qshift > page_size) { srcu_read_unlock(&kvm->srcu, srcu_idx); pr_warn("Incompatible host page size %lx!\n", page_size); diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 5eb14442929c8..d21b69bbd6f48 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -1286,12 +1286,12 @@ static bool mmu_gfn_lpage_is_disallowed(struct kvm_vcpu *vcpu, gfn_t gfn, return __mmu_gfn_lpage_is_disallowed(gfn, level, slot); } -static int host_mapping_level(struct kvm *kvm, gfn_t gfn) +static int host_mapping_level(struct kvm_vcpu *vcpu, gfn_t gfn) { unsigned long page_size; int i, ret = 0; - page_size = kvm_host_page_size(kvm, gfn); + page_size = kvm_host_page_size(vcpu, gfn); for (i = PT_PAGE_TABLE_LEVEL; i <= PT_MAX_HUGEPAGE_LEVEL; ++i) { if (page_size >= KVM_HPAGE_SIZE(i)) @@ -1341,7 +1341,7 @@ static int mapping_level(struct kvm_vcpu *vcpu, gfn_t large_gfn, if (unlikely(*force_pt_level)) return PT_PAGE_TABLE_LEVEL; - host_level = host_mapping_level(vcpu->kvm, large_gfn); + host_level = host_mapping_level(vcpu, large_gfn); if (host_level == PT_PAGE_TABLE_LEVEL) return host_level; diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 7a4e346b0cb38..eacb8c48e7689 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -768,7 +768,7 @@ int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len); int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len); struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn); bool kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn); -unsigned long kvm_host_page_size(struct kvm *kvm, gfn_t gfn); +unsigned long kvm_host_page_size(struct kvm_vcpu *vcpu, gfn_t gfn); void mark_page_dirty(struct kvm *kvm, gfn_t gfn); struct kvm_memslots *kvm_vcpu_memslots(struct kvm_vcpu *vcpu); diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 68a3e0aa625f4..cb1a4bbe3b30f 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1406,14 +1406,14 @@ bool kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn) } EXPORT_SYMBOL_GPL(kvm_is_visible_gfn); -unsigned long kvm_host_page_size(struct kvm *kvm, gfn_t gfn) +unsigned long kvm_host_page_size(struct kvm_vcpu *vcpu, gfn_t gfn) { struct vm_area_struct *vma; unsigned long addr, size; size = PAGE_SIZE; - addr = gfn_to_hva(kvm, gfn); + addr = kvm_vcpu_gfn_to_hva(vcpu, gfn); if (kvm_is_error_hva(addr)) return PAGE_SIZE; -- 2.20.1