Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp705811pxb; Thu, 25 Feb 2021 12:58:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJzrRP431fbhHmTbWsI4IGLQsfyvi89QIXXfg+MnxZpl2fW6uJOQQlYDOAZluJ+1ZiJLBhdO X-Received: by 2002:a05:6402:451:: with SMTP id p17mr5140303edw.248.1614286683408; Thu, 25 Feb 2021 12:58:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614286683; cv=none; d=google.com; s=arc-20160816; b=0SwOrvtntTjvKQpNV0J0sQd1uj8mraGqr/U1wZ5ePmQMq3B4IXKty5aMBNNXiZK3Lf 1Pi9idJ2j0G27rNzlaGiw4JMAKRSxqZY3qokbzBCkntlQCF7FIWwt/MeSBG06aah3Xt/ Cedw6Oel5SqijfFtyjuVAstOO4N4SrnrGMke3wHX213ViJ5lG3CKKLmaRgpN2taSOiGh Oe00BD+56yjZoA41tctueekiPKYO4XPsghv1Lg8BYgeqAISH5sPmEe1JYE21wn6bmz4m qemVxXJz1SRN/4G587QwNd0oKen3H12zNlKIoml7NV0NsnMhjDwJVUbKcDojTtJaTM/G +l4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:reply-to:sender:dkim-signature; bh=GGYOzagFvlgTV2DLbo1famwEs6BMX66WYjRN/mJyFWY=; b=FGZZ/afdCZZ2cxyM6TTgjpmiHg2gMwDYK0jqkxbI32Be607wHjY1uPR3V4I8G/qPbl dOdbEhiWfbYlDojQ9VFa3fDimIPRXTszyVVqaJeLQCG46Rfcj16a4c/TtwE5kWuwYc9c Nk4BOg/EHU7QmtHku65t4eH9aHXv2iPPw4nH3s4NarFXIG7dBo+RxZXtZ5jhQbN8kcIs +KeFER20SaT+CxPQTEpiDdJaSyJZzlbxPq8eZja9o9tsxDsOYeRXUip97IvssMvPmyba z2Yaa4zy31da0xYL/K4s1UExZ1UawlnNuUiGb/hK5mW6LWtAvn1r33vowUhbcCG8M/MT VAHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=def5dczj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s8si4143326ejo.426.2021.02.25.12.57.41; Thu, 25 Feb 2021 12:58:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=def5dczj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234854AbhBYUyc (ORCPT + 99 others); Thu, 25 Feb 2021 15:54:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50584 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233839AbhBYUtq (ORCPT ); Thu, 25 Feb 2021 15:49:46 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D1E93C0617AA for ; Thu, 25 Feb 2021 12:48:14 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id s187so7591836ybs.22 for ; Thu, 25 Feb 2021 12:48:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=GGYOzagFvlgTV2DLbo1famwEs6BMX66WYjRN/mJyFWY=; b=def5dczjvOSFaygZDthc8G/k41Q0O9ImhfMPy0gokapJeX4wWXG0CiMoWynAaidCAb z4w7OttBdvVv7x9NRq76IdfJnc83a7yn5iZkZ+Af38EZRfDdqCx+Hf+tTvQWG9hxMfOr 4zG7XMjtqwqiTgP3trFnwX2nHFX1EsRBOEdfiRg2J+FV4cTAAgRtF/cCs401WQrLo/G+ /g/jBeW4Xopfs1vYrMkGqCJ806IED62PRYqs6BXNiUc69/qGzyy6uRn6nAk+UpX+D6R/ h8KlSD1uWNa5v0L6FjknDlHPAE2zzrUduOIAPUKO32qCWPfGRBILEUC/MUhKE0fHiXzK 8NhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=GGYOzagFvlgTV2DLbo1famwEs6BMX66WYjRN/mJyFWY=; b=OTDiw6gNRVL7flTET31H12Jpp4VbDx8laLKTgrhvUcn4lzOTMlkKqcIGyj3mA6nlxj yvOMusizxYAywImJyM7ioQSGchKFIUUIXJuJ/bgplEXTmDTCZGWzPDELeVL9fh443OPF PHKTgHrNtZ5YYtxjnYbgjXSaePbdLbtwYXt0qYCxWGfl3czHexWcjlBaKrpgIB2f8coY l/tirGk9jyK67DeJjpikb1aJWIw7E3s6ikrkXT2VPXiEoC5EAn2ANsdxvx4eUx52MW5O db+ZX5BlwjnhwzXL5kj8LCaDa5MGbofZoR3BVNe1oOFnw514+km0jpkQAwnbmYBGyMIQ Anug== X-Gm-Message-State: AOAM532DF9SrzlDHDrG3VHtb4dlbmRBv/pXb/9eCfC21HiBpFG8MutiW uKJiMhWwXZzHOcp+7t0PA0pnP1OJ1fA= Sender: "seanjc via sendgmr" X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:34c4:7c1d:f9ba:4576]) (user=seanjc job=sendgmr) by 2002:a25:cbcb:: with SMTP id b194mr6942867ybg.174.1614286094048; Thu, 25 Feb 2021 12:48:14 -0800 (PST) Reply-To: Sean Christopherson Date: Thu, 25 Feb 2021 12:47:31 -0800 In-Reply-To: <20210225204749.1512652-1-seanjc@google.com> Message-Id: <20210225204749.1512652-7-seanjc@google.com> Mime-Version: 1.0 References: <20210225204749.1512652-1-seanjc@google.com> X-Mailer: git-send-email 2.30.1.766.gb4fecdf3b7-goog Subject: [PATCH 06/24] KVM: x86/mmu: Don't install bogus MMIO SPTEs if MMIO caching is disabled From: Sean Christopherson To: Paolo Bonzini Cc: Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Ben Gardon Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If MMIO caching is disabled, e.g. when using shadow paging on CPUs with 52 bits of PA space, go straight to MMIO emulation and don't install an MMIO SPTE. The SPTE will just generate a !PRESENT #PF, i.e. can't actually accelerate future MMIO. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 12 +++++++++++- arch/x86/kvm/mmu/spte.c | 7 ++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 9eb5ccb66e31..37c68abc54b8 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -2946,9 +2946,19 @@ static bool handle_abnormal_pfn(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn, return true; } - if (unlikely(is_noslot_pfn(pfn))) + if (unlikely(is_noslot_pfn(pfn))) { vcpu_cache_mmio_info(vcpu, gva, gfn, access & shadow_mmio_access_mask); + /* + * If MMIO caching is disabled, emulate immediately without + * touching the shadow page tables as attempting to install an + * MMIO SPTE will just be an expensive nop. + */ + if (unlikely(!shadow_mmio_value)) { + *ret_val = RET_PF_EMULATE; + return true; + } + } return false; } diff --git a/arch/x86/kvm/mmu/spte.c b/arch/x86/kvm/mmu/spte.c index 9ea097bcb491..dcba9c1cbe29 100644 --- a/arch/x86/kvm/mmu/spte.c +++ b/arch/x86/kvm/mmu/spte.c @@ -51,6 +51,8 @@ u64 make_mmio_spte(struct kvm_vcpu *vcpu, u64 gfn, unsigned int access) u64 mask = generation_mmio_spte_mask(gen); u64 gpa = gfn << PAGE_SHIFT; + WARN_ON_ONCE(!shadow_mmio_value); + access &= shadow_mmio_access_mask; mask |= shadow_mmio_value | access; mask |= gpa | shadow_nonpresent_or_rsvd_mask; @@ -258,7 +260,10 @@ void kvm_mmu_set_mmio_spte_mask(u64 mmio_value, u64 access_mask) SHADOW_NONPRESENT_OR_RSVD_MASK_LEN))) mmio_value = 0; - shadow_mmio_value = mmio_value | SPTE_MMIO_MASK; + if (mmio_value) + shadow_mmio_value = mmio_value | SPTE_MMIO_MASK; + else + shadow_mmio_value = 0; shadow_mmio_access_mask = access_mask; } EXPORT_SYMBOL_GPL(kvm_mmu_set_mmio_spte_mask); -- 2.30.1.766.gb4fecdf3b7-goog