From patchwork Sat Jul 29 00:47:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127970 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp810534vqg; Fri, 28 Jul 2023 19:41:58 -0700 (PDT) X-Google-Smtp-Source: APBJJlEffBI0VXvd+WBY7SSIOeamhi8hTDCCuQ/7ztPLdMkZ6TOeajfvHlPdGst2oyIMAfG9l/E8 X-Received: by 2002:a17:90a:1302:b0:268:c6f:3b3d with SMTP id h2-20020a17090a130200b002680c6f3b3dmr3097993pja.4.1690598518336; Fri, 28 Jul 2023 19:41:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690598518; cv=none; d=google.com; s=arc-20160816; b=eNCxjzc1Le8wAWh7ogRW/S1HowcH321cYPTbcdpstoAAYS1+1q3HSatm7CN+3xGvmz oCcmmc5V7hW6vxem9rLDj6MBGyUdpza92EM2dhw19z2UkZmPXhoeFLk0C1C6pb2tLUvL iVnT+FH73GVCWOb6E0JF2u8jlf4YRqZ+vKB/5/Ksgy5gIZrMtFJmCnR24TgJTtJifJak QLTRY4biGOyL6vmgFaLkxcW4rkrjYz57NeOirI/oX/rdvo0gYqID/bo6uZTIvn6+f0fd iRCJzHRuQL1QBUx4XnB5hYvJvS0srykCqQLStR62IE/Gjr5Kt/tspYfDmmuy+9OPWuNy h5Wg== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=M/GkaHsFgZHdZLTn2fxQT2lDObwORLA7V2VRgVzEfWk=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=aMvFkzxveab8ZHMThAIUy9RFjrbLiFsyLY1vOO0HC6rGfDHFE5QNorSfZN+eG/ZENX yPwuWw8nW4PhN12Azi19aImFjH8SgXxgw0CzBJ87YmbHVzEX87LIdp90HcyKCs8ysGI1 TqmSkBI4rq1cLA3xpAgCowdDzV+cv7/IjjPI7NFvseI9S7EcRHmS3hrA5RRGodp9AB6J UKPIBYD5pyfNVW+WVneZvRhIJCSO7fwUtsfpBWJVaFRRgeFlfP2n5auYJFqrNcFQMk4L 1c95FVfvdA66cEqqXUlf2zXcvintRayq1X0DqXmuEtkaZ01t69zA4fAEyd3k5hqm7KMv L8gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=iD3VziV8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u9-20020a17090a6a8900b002633c436f4esi4134165pjj.34.2023.07.28.19.41.45; Fri, 28 Jul 2023 19:41:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=iD3VziV8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S236877AbjG2AtF (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41238 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236563AbjG2Asz (ORCPT ); Fri, 28 Jul 2023 20:48:55 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1E7C49DE for ; Fri, 28 Jul 2023 17:48:20 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d9443c01a7336-1bba5563cd6so17210765ad.3 for ; Fri, 28 Jul 2023 17:48:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591646; x=1691196446; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=M/GkaHsFgZHdZLTn2fxQT2lDObwORLA7V2VRgVzEfWk=; b=iD3VziV8hgBxcyutWF1XvZhOl+sIJxIv7X1Fi+enNX8drSX/Gg98dsztm6RWppo+SN +kltBMqeH+fV52J+uvkM8xyoY7P/A/iHYWHxlA+zjRaI9mwxsgc10t0VDDPCLk1/NLG4 qu8Nr48zLrb/zv7TbIHuOI5q46l1m1ch1R0YJ2hbbrxZ4DWa3klfNDza7a01GXC+F9N9 CzllCJ3s4F/4W8oiMKnlaDIK8AmBqpSh+OGfO2Z8nUi6xQ+9ampjq7w+1VjqtUrQS1Jy lE2BHnnXsQVFZKVHMxB5U+O2pm54cZVFeCKCbnFlqPJWluGs7+c3KKfWrmvpLBqFjYcU 0ADQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591646; x=1691196446; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=M/GkaHsFgZHdZLTn2fxQT2lDObwORLA7V2VRgVzEfWk=; b=BCqZPmtrbInlsLUCqKETdEES8fnj6T+UAz0alGyVj3coYH7lTBIG54O61H3x+oDwr2 iSlSdcJyOMkzmpvu8MZqgIm0m4ib6hB8NWMcZ26EOym8etbI4HwwyVqHFPgKrqWM+/JE wOkjjAsTHmSWsG2ggTGbfs22qWPqNnh4+QvzFi2e4TgNbRtMtsJHmlqIGuIWZJAYRl75 XSieVCxm9cmx7eXVmZsts8nUHwG6sEcNSyHU/8yhDxFdZV3tyvT+zJpEP+vb/dlJbvLn x8ekfDkP0kvQcZvyTdja8y1LOXjrhWqGtOfVeD6yp3IsqFVYBrKtA7S3D1SKBHgKVGJ5 B+5Q== X-Gm-Message-State: ABy/qLbCyjyiEV6ZQV+5jdwZTn33BpjEfg74mbIp0OolMDntIhYopc/6 1W04Ol1k7sZ4OpXc8o4THVZnG1nbnNA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:e5c1:b0:1b7:edcd:8dcf with SMTP id u1-20020a170902e5c100b001b7edcd8dcfmr14199plf.4.1690591646357; Fri, 28 Jul 2023 17:47:26 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:11 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-2-seanjc@google.com> Subject: [PATCH v3 01/12] KVM: x86/mmu: Delete pgprintk() and all its usage From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772721032127619063 X-GMAIL-MSGID: 1772721032127619063 Delete KVM's pgprintk() and all its usage, as the code is very prone to bitrot due to being buried behind MMU_DEBUG, and the functionality has been rendered almost entirely obsolete by the tracepoints KVM has gained over the years. And for the situations where the information provided by KVM's tracepoints is insufficient, pgprintk() rarely fills in the gaps, and is almost always far too noisy, i.e. developers end up implementing custom prints anyways. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 17 ----------------- arch/x86/kvm/mmu/mmu_internal.h | 2 -- arch/x86/kvm/mmu/paging_tmpl.h | 7 ------- arch/x86/kvm/mmu/spte.c | 2 -- 4 files changed, 28 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index ec169f5c7dce..bc24d430db6e 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -2775,12 +2775,9 @@ int kvm_mmu_unprotect_page(struct kvm *kvm, gfn_t gfn) LIST_HEAD(invalid_list); int r; - pgprintk("%s: looking for gfn %llx\n", __func__, gfn); r = 0; write_lock(&kvm->mmu_lock); for_each_gfn_valid_sp_with_gptes(kvm, sp, gfn) { - pgprintk("%s: gfn %llx role %x\n", __func__, gfn, - sp->role.word); r = 1; kvm_mmu_prepare_zap_page(kvm, sp, &invalid_list); } @@ -2938,9 +2935,6 @@ static int mmu_set_spte(struct kvm_vcpu *vcpu, struct kvm_memory_slot *slot, bool prefetch = !fault || fault->prefetch; bool write_fault = fault && fault->write; - pgprintk("%s: spte %llx write_fault %d gfn %llx\n", __func__, - *sptep, write_fault, gfn); - if (unlikely(is_noslot_pfn(pfn))) { vcpu->stat.pf_mmio_spte_created++; mark_mmio_spte(vcpu, sptep, gfn, pte_access); @@ -2960,8 +2954,6 @@ static int mmu_set_spte(struct kvm_vcpu *vcpu, struct kvm_memory_slot *slot, drop_parent_pte(child, sptep); flush = true; } else if (pfn != spte_to_pfn(*sptep)) { - pgprintk("hfn old %llx new %llx\n", - spte_to_pfn(*sptep), pfn); drop_spte(vcpu->kvm, sptep); flush = true; } else @@ -2986,8 +2978,6 @@ static int mmu_set_spte(struct kvm_vcpu *vcpu, struct kvm_memory_slot *slot, if (flush) kvm_flush_remote_tlbs_gfn(vcpu->kvm, gfn, level); - pgprintk("%s: setting spte %llx\n", __func__, *sptep); - if (!was_rmapped) { WARN_ON_ONCE(ret == RET_PF_SPURIOUS); rmap_add(vcpu, slot, sptep, gfn, pte_access); @@ -4443,8 +4433,6 @@ static int direct_page_fault(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault static int nonpaging_page_fault(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault) { - pgprintk("%s: gva %lx error %x\n", __func__, fault->addr, fault->error_code); - /* This path builds a PAE pagetable, we can map 2mb pages at maximum. */ fault->max_level = PG_LEVEL_2M; return direct_page_fault(vcpu, fault); @@ -5634,9 +5622,6 @@ static bool detect_write_misaligned(struct kvm_mmu_page *sp, gpa_t gpa, { unsigned offset, pte_size, misaligned; - pgprintk("misaligned: gpa %llx bytes %d role %x\n", - gpa, bytes, sp->role.word); - offset = offset_in_page(gpa); pte_size = sp->role.has_4_byte_gpte ? 4 : 8; @@ -5702,8 +5687,6 @@ static void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa, if (!READ_ONCE(vcpu->kvm->arch.indirect_shadow_pages)) return; - pgprintk("%s: gpa %llx bytes %d\n", __func__, gpa, bytes); - write_lock(&vcpu->kvm->mmu_lock); gentry = mmu_pte_write_fetch_gpte(vcpu, &gpa, &bytes); diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h index d39af5639ce9..4f1e4b327f40 100644 --- a/arch/x86/kvm/mmu/mmu_internal.h +++ b/arch/x86/kvm/mmu/mmu_internal.h @@ -11,11 +11,9 @@ #ifdef MMU_DEBUG extern bool dbg; -#define pgprintk(x...) do { if (dbg) printk(x); } while (0) #define rmap_printk(fmt, args...) do { if (dbg) printk("%s: " fmt, __func__, ## args); } while (0) #define MMU_WARN_ON(x) WARN_ON(x) #else -#define pgprintk(x...) do { } while (0) #define rmap_printk(x...) do { } while (0) #define MMU_WARN_ON(x) do { } while (0) #endif diff --git a/arch/x86/kvm/mmu/paging_tmpl.h b/arch/x86/kvm/mmu/paging_tmpl.h index 0662e0278e70..7a97f769a7cb 100644 --- a/arch/x86/kvm/mmu/paging_tmpl.h +++ b/arch/x86/kvm/mmu/paging_tmpl.h @@ -456,9 +456,6 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker, goto retry_walk; } - pgprintk("%s: pte %llx pte_access %x pt_access %x\n", - __func__, (u64)pte, walker->pte_access, - walker->pt_access[walker->level - 1]); return 1; error: @@ -529,8 +526,6 @@ FNAME(prefetch_gpte)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, if (FNAME(prefetch_invalid_gpte)(vcpu, sp, spte, gpte)) return false; - pgprintk("%s: gpte %llx spte %p\n", __func__, (u64)gpte, spte); - gfn = gpte_to_gfn(gpte); pte_access = sp->role.access & FNAME(gpte_access)(gpte); FNAME(protect_clean_gpte)(vcpu->arch.mmu, &pte_access, gpte); @@ -758,7 +753,6 @@ static int FNAME(page_fault)(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault struct guest_walker walker; int r; - pgprintk("%s: addr %lx err %x\n", __func__, fault->addr, fault->error_code); WARN_ON_ONCE(fault->is_tdp); /* @@ -773,7 +767,6 @@ static int FNAME(page_fault)(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault * The page is not mapped by the guest. Let the guest handle it. */ if (!r) { - pgprintk("%s: guest page fault\n", __func__); if (!fault->prefetch) kvm_inject_emulated_page_fault(vcpu, &walker.fault); diff --git a/arch/x86/kvm/mmu/spte.c b/arch/x86/kvm/mmu/spte.c index cf2c6426a6fc..438a86bda9f3 100644 --- a/arch/x86/kvm/mmu/spte.c +++ b/arch/x86/kvm/mmu/spte.c @@ -221,8 +221,6 @@ bool make_spte(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, * shadow pages and unsync'ing pages is not allowed. */ if (mmu_try_to_unsync_pages(vcpu->kvm, slot, gfn, can_unsync, prefetch)) { - pgprintk("%s: found shadow page for %llx, marking ro\n", - __func__, gfn); wrprot = true; pte_access &= ~ACC_WRITE_MASK; spte &= ~(PT_WRITABLE_MASK | shadow_mmu_writable_mask); From patchwork Sat Jul 29 00:47:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127925 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp787757vqg; Fri, 28 Jul 2023 18:24:08 -0700 (PDT) X-Google-Smtp-Source: APBJJlG4jwz1cXw/UKdsmSgiz+fT/sH1PRLK3S/Uifpca8pvuEXSC3R0Z4MCjhEqI0yPbjizU3L7 X-Received: by 2002:a17:903:18c:b0:1b9:e481:ef3f with SMTP id z12-20020a170903018c00b001b9e481ef3fmr3442696plg.9.1690593848644; Fri, 28 Jul 2023 18:24:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690593848; cv=none; d=google.com; s=arc-20160816; b=rhAN9sAIzkSNsuXjxCwWUkEe4ordGzsicA1soVQpw7bvFTb+S8a0IuWpSfVJuxEDhZ ppaSVWoroPdlrduIkKZAP7fK66FMaE6lY1uUMNcAXCFQb7vJlUC/xL4pWAosguEgpr9Y eQzTAewfnCJV5FkFW3KW0nBVgPcMyi2NwdXSAKp+8mtK5FYgEbh5LQD2ZXofZ2jCnZ2K Bys6KCKcF7hVjEzENEmZM37O+woZUQ1blT3ga1/7kcOEjXY2mAr0fGzlyZPrnLiLR0qL 1OHbv0wNs0TjqmDuUgbbVs7V79Np5KzM91zhy1o1y4T6RLqO0G88uYjavCWrlV276opC aLYA== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=zPxDuw7GeJQotzB/CPJITWYq84dGkPo6Sdy7hiPXZfA=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=MLlmUukJLGUYNwxlYtWKlTJOCKKQI094W74tYnwK0rdlu4pUuDDWuiKXvQCUInpDZ8 zrhhI3tq5ppNr1S5Ugdg3urWMTj/E+/lk4L0PVz6wZ+8qvj+DoHSkFBFQuitT1X8g/oR 1SbZHQ/tOtMgX+vAofeZjV9TEoPonvLvlHE5u6GHKtn07NrhPnCiCabSHQv/AQt4YGrW QUUwNhCe4M94A8UYOsTKXWf7Pjzj5krnchwjo0t57UugN1Fn8IE8FFEwahRbOHHz06Z+ 8vrM/yRKFmMbtFb3WIYgKhURjOTVgg4Bx2tK1Qe/BzO8fRrJWFzPQsI+LJfZBeIfJkfD BXbw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=tfJreDiV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l8-20020a170903244800b001b8b44273b0si3904789pls.403.2023.07.28.18.23.56; Fri, 28 Jul 2023 18:24:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=tfJreDiV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S236933AbjG2AtN (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41272 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236672AbjG2As4 (ORCPT ); Fri, 28 Jul 2023 20:48:56 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C8DD611D for ; Fri, 28 Jul 2023 17:48:22 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-58473c4f629so21093577b3.1 for ; Fri, 28 Jul 2023 17:48:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591648; x=1691196448; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=zPxDuw7GeJQotzB/CPJITWYq84dGkPo6Sdy7hiPXZfA=; b=tfJreDiVdxqrWTn17eDz9CQ1prR4OaY8R72gsdHx5b0HfSm06muHlq6/VU8VmbJ/69 QTkeIaV9d0VbA+DjT9ug4lgckuxEQEmnyA+gGWYj4GDEnhCs1swodjbX/M0Sd1+mLAGP GjD90stCM9Q8l2RXDOAZpahBB9xD2Os888pcdmciu7sBhKYpsuMILtmlSIRHv8S5ZG45 umHo9TXIvRmOMlFEzXsGR045vYHfeinM2oRiITQfJst61DZLkVDEDnSYdeejwQmFgwcH IO9UnRimsDRL2mV/XKV1dI5RJZjxAvUXRoEO3btpR/9vV1d3JeH3R4Hlc5949Es//XYU pPJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591648; x=1691196448; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=zPxDuw7GeJQotzB/CPJITWYq84dGkPo6Sdy7hiPXZfA=; b=U9hnwbnSLsb447WxN/zgnE2bJSZWxOho13/FRbl/SgVHHbAKHg0cCXEzAFPRdUIZRD DrYn3AYLg9mITgGCbqYO2RkwdYb8Bj7WDMXo0+vRp7Frhm6Dxbvy2ertr30LwLX0eNzb ojK/mIJyS3s8Zxsba/HHAkDRdaXKsR4GVmk73jafujQC3bNsbw3lClf1JDSfru7vI1xv 2Z6TKcmORjhWEe9GJYjd9M2YE22NofQxpetp/JCmcruuQWr64TvG1vzkJb7rOgeGM7QX Y5c4wu/Mi6PUXnI64X4u3KY+7l1DhkPRtBMeCI9oG01uNT1vkizUjHfC0VKrSpJIwOzm YWDg== X-Gm-Message-State: ABy/qLbLSPUDAaOPpdT3jfJ/gB4sradjDr0SF3Cu+XmZz7j3JVHwhIUN jTGQkSIEAa+gYWJNRNdi5xCPuM4fo4c= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:4304:0:b0:565:a42c:79fe with SMTP id q4-20020a814304000000b00565a42c79femr24190ywa.1.1690591648271; Fri, 28 Jul 2023 17:47:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:12 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-3-seanjc@google.com> Subject: [PATCH v3 02/12] KVM: x86/mmu: Delete rmap_printk() and all its usage From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772716135532658480 X-GMAIL-MSGID: 1772716135532658480 Delete rmap_printk() so that MMU_WARN_ON() and MMU_DEBUG can be morphed into something that can be regularly enabled for debug kernels. The information provided by rmap_printk() isn't all that useful now that the rmap and unsync code is mature, as the prints are simultaneously too verbose (_lots_ of message) and yet not verbose enough to be helpful for debug (most instances print just the SPTE pointer/value, which is rarely sufficient to root cause anything but trivial bugs). Alternatively, rmap_printk() could be reworked to into tracepoints, but it's not clear there is a real need as rmap bugs rarely escape initial development, and when bugs do escape to production, they are often edge cases and/or reside in code that isn't directly related to the rmaps. In other words, the problems with rmap_printk() being unhelpful also apply to tracepoints. And deleting rmap_printk() doesn't preclude adding tracepoints in the future. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 12 ------------ arch/x86/kvm/mmu/mmu_internal.h | 2 -- 2 files changed, 14 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index bc24d430db6e..8e36e07719bf 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -941,10 +941,8 @@ static int pte_list_add(struct kvm_mmu_memory_cache *cache, u64 *spte, int count = 0; if (!rmap_head->val) { - rmap_printk("%p %llx 0->1\n", spte, *spte); rmap_head->val = (unsigned long)spte; } else if (!(rmap_head->val & 1)) { - rmap_printk("%p %llx 1->many\n", spte, *spte); desc = kvm_mmu_memory_cache_alloc(cache); desc->sptes[0] = (u64 *)rmap_head->val; desc->sptes[1] = spte; @@ -953,7 +951,6 @@ static int pte_list_add(struct kvm_mmu_memory_cache *cache, u64 *spte, rmap_head->val = (unsigned long)desc | 1; ++count; } else { - rmap_printk("%p %llx many->many\n", spte, *spte); desc = (struct pte_list_desc *)(rmap_head->val & ~1ul); count = desc->tail_count + desc->spte_count; @@ -1018,14 +1015,12 @@ static void pte_list_remove(u64 *spte, struct kvm_rmap_head *rmap_head) pr_err("%s: %p 0->BUG\n", __func__, spte); BUG(); } else if (!(rmap_head->val & 1)) { - rmap_printk("%p 1->0\n", spte); if ((u64 *)rmap_head->val != spte) { pr_err("%s: %p 1->BUG\n", __func__, spte); BUG(); } rmap_head->val = 0; } else { - rmap_printk("%p many->many\n", spte); desc = (struct pte_list_desc *)(rmap_head->val & ~1ul); while (desc) { for (i = 0; i < desc->spte_count; ++i) { @@ -1241,8 +1236,6 @@ static bool spte_write_protect(u64 *sptep, bool pt_protect) !(pt_protect && is_mmu_writable_spte(spte))) return false; - rmap_printk("spte %p %llx\n", sptep, *sptep); - if (pt_protect) spte &= ~shadow_mmu_writable_mask; spte = spte & ~PT_WRITABLE_MASK; @@ -1267,8 +1260,6 @@ static bool spte_clear_dirty(u64 *sptep) { u64 spte = *sptep; - rmap_printk("spte %p %llx\n", sptep, *sptep); - MMU_WARN_ON(!spte_ad_enabled(spte)); spte &= ~shadow_dirty_mask; return mmu_spte_update(sptep, spte); @@ -1480,9 +1471,6 @@ static bool kvm_set_pte_rmap(struct kvm *kvm, struct kvm_rmap_head *rmap_head, restart: for_each_rmap_spte(rmap_head, &iter, sptep) { - rmap_printk("spte %p %llx gfn %llx (%d)\n", - sptep, *sptep, gfn, level); - need_flush = true; if (pte_write(pte)) { diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h index 4f1e4b327f40..9c9dd9340c63 100644 --- a/arch/x86/kvm/mmu/mmu_internal.h +++ b/arch/x86/kvm/mmu/mmu_internal.h @@ -11,10 +11,8 @@ #ifdef MMU_DEBUG extern bool dbg; -#define rmap_printk(fmt, args...) do { if (dbg) printk("%s: " fmt, __func__, ## args); } while (0) #define MMU_WARN_ON(x) WARN_ON(x) #else -#define rmap_printk(x...) do { } while (0) #define MMU_WARN_ON(x) do { } while (0) #endif From patchwork Sat Jul 29 00:47:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127946 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp792520vqg; Fri, 28 Jul 2023 18:40:43 -0700 (PDT) X-Google-Smtp-Source: APBJJlEorzvszvV6R9FCRkqDzSNrZeptMRouamxu5urCI/P5KBAer87NHA/Cnp1Idu+zfbuV70Sj X-Received: by 2002:a17:907:2c75:b0:997:d627:263a with SMTP id ib21-20020a1709072c7500b00997d627263amr640080ejc.67.1690594843277; Fri, 28 Jul 2023 18:40:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690594843; cv=none; d=google.com; s=arc-20160816; b=Yy17PmFLZwrNaWpk07OPV3f/d2nph311ltlXt4YeLFMlIZG/mYorlc0fIXzle87r37 7iswv4Ha1Nw1xZyIe7KajD7p11hjPh/0U4MaIJf9ZJE0LyoFP9LpfoDKoxKWsX+bL9VX 7z0mmpXAld0bsgPSNav4BEmMh0f0bR4CJb5HnwX6WAXl0+cwsJg1vXzaQdVtiRx7iwNS uwHnKnAxFQmgLiADdPeR2skv9yZLS3jHIl1lR0Z/Nv49r62NST/28hS5tftX8xaK4VH0 +fkmLrCpsSoWZf/NY8s9W3bG5agI8w0YQiJqG7dTttaTu6RuKuC76o7HsjhYV//zejL0 8AnQ== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=8LvdkVE4wBNN35/JnHy3xytlSvey6H90m9oi4YFPLDo=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=0eT1+J5BswFbrQDAU5Lmxi7bqYj6l9gV18HFpL9YXkj/oboLRfHnhDkN76yO4lpWVE oPVPKSwl8SsWvGOTYUFtv/H9vuk6wLM14ybDi4SfxfmrNOFDcCc9Ndcp0vcIUCOybp+U HWKYGj7FdqDdduJ906/iGnxQ7mdVrA+vRo2+X0//q4f4AFAlMPFHt6nFYzEnfCcY7EB9 YOZ0/P+v6m0Q3tr9T99QLiLVqpqdlKoKi50wzn6pilAYoXVJfpDyxolIs8Z5UONOLGj7 bQvWUsyP648f/Dqf911W8bMfAg+W2ZBSE5rlCrC0eP4F4CgwxgUzZzFtbV2xeUnptPYe mbGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=Xc76+6yv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y13-20020a170906524d00b009935121ecd7si344844ejm.639.2023.07.28.18.40.18; Fri, 28 Jul 2023 18:40:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=Xc76+6yv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S236790AbjG2AtK (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236714AbjG2As4 (ORCPT ); Fri, 28 Jul 2023 20:48:56 -0400 Received: from mail-ot1-x349.google.com (mail-ot1-x349.google.com [IPv6:2607:f8b0:4864:20::349]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E13D444B7 for ; Fri, 28 Jul 2023 17:48:22 -0700 (PDT) Received: by mail-ot1-x349.google.com with SMTP id 46e09a7af769-6bb1755ee51so5926206a34.1 for ; Fri, 28 Jul 2023 17:48:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591650; x=1691196450; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=8LvdkVE4wBNN35/JnHy3xytlSvey6H90m9oi4YFPLDo=; b=Xc76+6yvCGka7zXqrgagphiv30oVLLs/qSSA+I9HZuQQnkJiG+4uQMeqGskUEw7qOg mMN2Rixx7sMQK8fGN7SPXhO38QjA2hLMOnD+Plxz3CxOFo0UNqW8pUiMjlPs8n8FUbBA yl8xYlqquhCH6XqSTy8ocqobtZfbz2sgwc8u7sTPWcC8rPO0pgMrclkdtnUdEFceSWk+ jH5xNuLI68LWJIUQBwwFkia9uG+ofyi0EGZb+/qHXpcEqsq1oPbFn3hESOVj40tH7USP 5dbwgoPlGotJw1Vymep9GIa5oVDGAcI1rG1vXFwgeLSwHkxu6Du67wzoLc0CF0/6D1Oj 1P3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591650; x=1691196450; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8LvdkVE4wBNN35/JnHy3xytlSvey6H90m9oi4YFPLDo=; b=XpxUx/SRUbSoCujjp4aLlX8uYfLAqAj7RuEdt0m7g3EoPUUMIBgqjHjE+gl+3brDCC bQgb/D/wklLgQDYY4PpPD03NQ6FI7MDAjIVQsaaKzLABcsuEi98eDaecvBLLyHrA4UkI 0Imuf8N7aucdNj0sBdMkaGlcjwCoIEwJg9KQgZJDzdOpmLXltPmoCeet0bLFmE1/ff/N PhLpag1gRN+9WGDsrm8gI3AKVnrWj+oR+d6PHy8HUUZ62FS86qPC9/iTw4Job1tj7Qtm V//kwA5lNKsA0UQA7AENphvryR0lEpoMVqmHLFMFMg3Ez8VMh0ubtjrMTp5bLjRoQfqW Bimw== X-Gm-Message-State: ABy/qLYtm11FJZsTeE0OaXt8qm4BzyLqYXLyN/O572/y68D+7Oc03aK3 u7ldo+QSBRwNxlU/WPzTNVAYTanJf88= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6830:909:b0:6b7:528c:d8bf with SMTP id v9-20020a056830090900b006b7528cd8bfmr12891485ott.0.1690591650032; Fri, 28 Jul 2023 17:47:30 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:13 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-4-seanjc@google.com> Subject: [PATCH v3 03/12] KVM: x86/mmu: Delete the "dbg" module param From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772717178733789397 X-GMAIL-MSGID: 1772717178733789397 Delete KVM's "dbg" module param now that its usage in KVM is gone (it used to guard pgprintk() and rmap_printk()). Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 5 ----- arch/x86/kvm/mmu/mmu_internal.h | 2 -- 2 files changed, 7 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 8e36e07719bf..b16092d71d3f 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -115,11 +115,6 @@ static int max_huge_page_level __read_mostly; static int tdp_root_level __read_mostly; static int max_tdp_level __read_mostly; -#ifdef MMU_DEBUG -bool dbg = 0; -module_param(dbg, bool, 0644); -#endif - #define PTE_PREFETCH_NUM 8 #include diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h index 9c9dd9340c63..9ea80e4d463c 100644 --- a/arch/x86/kvm/mmu/mmu_internal.h +++ b/arch/x86/kvm/mmu/mmu_internal.h @@ -9,8 +9,6 @@ #undef MMU_DEBUG #ifdef MMU_DEBUG -extern bool dbg; - #define MMU_WARN_ON(x) WARN_ON(x) #else #define MMU_WARN_ON(x) do { } while (0) From patchwork Sat Jul 29 00:47:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128031 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp900530vqg; Sat, 29 Jul 2023 00:40:47 -0700 (PDT) X-Google-Smtp-Source: APBJJlH7zkMafEw9IKlR7ixJcr4eAq5IVIZidlb/mgyRbk8DFo2HJQFVbo5ri8+lMqjdxPAUEJEC X-Received: by 2002:aa7:d145:0:b0:522:ab06:721c with SMTP id r5-20020aa7d145000000b00522ab06721cmr2071367edo.29.1690616446771; Sat, 29 Jul 2023 00:40:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690616446; cv=none; d=google.com; s=arc-20160816; b=VbxMVfceJUxwAj4NXyIxXvhu6oV0cY6T/g+4Bbv3puK75joijmYWaVQXAtFaXnuLqj /7Ix+k6W2QHqJXrwrDOAgSc1IAIshogwz//Zxh7hct9TwwpvkcpGSIM6DEEV8R1jvuxw +GJrIPydGHO7DsU9q42qK6a/Ag5dCEd5VqHbrJZ3zUa59wRRpJc6JVKTOtMZkKp5yxR2 Nx0n+pdx4T2/JjmDhtrvDzTZzJ9N5g0Ih7vfBB+R1NZM3FuxQNwsJX4NcBhoU3RJ+fo4 1nwhbLSm4QZwVqmTb7X8XjpT6e2J9vOPxaqbx9GrIUvN79Ujlp7LSfUYQnE1QqT6uqzH kZhA== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=KOObXu2LRWfktefTbSv0nGlH9PUyJX357fkNUYIVNiM=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=VGLmnKAZyLCyle3irwdr69LBvoaCuLCn9Gtk+SSm6/D8KrpZP8Hz5QhgNbWh76I4rm YcXjpNcQk7GyPbFpIOv2Qst9CONee5g4VLzgr72BbPV/voKDpjf9TAFtCXlFXBv5/lBv TQI9R7A/Fc93sW2CoUZYynotSyHDxpOnlRlkKs+eUB1TXla7SPmJ5N7UFo0jv+ypbJN8 nZBVHr/vxRUT/P/+x4zZ0C3/WVHKkIzMbbg6vuKF6HoGkmKINlmzcqqS3cNVxHhaEAm1 H/b73rod3EsRnpRc+SI733z8+YNQ/u+16e0vf9EQ3ri2B9EatrWUI4vi3jOk9kIpAwBu 3O8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="E/Mif1Gx"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k9-20020aa7d8c9000000b0052238b34601si3984787eds.47.2023.07.29.00.40.21; Sat, 29 Jul 2023 00:40:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="E/Mif1Gx"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S236441AbjG2AtR (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41252 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236791AbjG2AtA (ORCPT ); Fri, 28 Jul 2023 20:49:00 -0400 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 600C64C05 for ; Fri, 28 Jul 2023 17:48:26 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-d1d9814b89fso2540826276.0 for ; Fri, 28 Jul 2023 17:48:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591651; x=1691196451; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=KOObXu2LRWfktefTbSv0nGlH9PUyJX357fkNUYIVNiM=; b=E/Mif1GxxzCSs4J0CWgiH+3lhdJsRRKDRQ8W1XxRfmPB4I7CNN0zq3CrBgCo19fyHi VJAI2yq7lC7SMbLhQEPJdvBYcuhv4RzCNiuAbLv27A7BkDnk5lbGB/jcljUI+lpDlO7n QGMql+IBF5Y1p6gCK3AH1gqw/qfsxG/P8dG7DIlS32d7JXFLZ73NVHJ6xFhuLgl3Zsh3 nAD6cOLuSA0KQCAOJJrnPqEkk1GQkcdEOZ5A8Wc0VC5KVYIbrlRJlugNo8rQqAVuCTcl oZPvhlUQxzEH4F06u7ixjutZdHx51ed7ll0m32EG8+IBMjJ2uWJa6CkqIN5/UrId4k+F jEBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591651; x=1691196451; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KOObXu2LRWfktefTbSv0nGlH9PUyJX357fkNUYIVNiM=; b=G+8QQPITcHKFw4Hzhk6cjbvHj7eqzFGoRSrGK30mF2y3yqe4+jvZ74qvtAIh8IXPpt EvxyrGwTidVp++j2cp7iraQfiI0/q4PTYrwV6xnTf7Jte3v9U7+dgyrWKftU0L0Lr4mp RWY0KqmDbC2OgCIil3PkWK/xrTpqFKkClp/mx5uJyX+7qpZnZd44+CxkhRN2WRCnMFAG oAZFhDq0l04XPJLgFa9RmW8rRQZfJu6oqLUwG2jYbWqBDa++mjAu1jwDHlJ0wkSEIaNo TEtnDSkKPEUeupGpYLYb8IQ4YTbFJsOT+JGD/ktarAIN/QBWRX9YvcvH94/ESZ9pQPKw cSOw== X-Gm-Message-State: ABy/qLb+4xNHaPNnzOVKVsD6Mw/aUl0OjAumzR3U50EtwLJ/DSfzUE/7 xZ9djG+qL8tBz4wrkp1v13CTtyb9tDQ= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:acde:0:b0:d1c:6a5e:3e46 with SMTP id x30-20020a25acde000000b00d1c6a5e3e46mr18569ybd.8.1690591651665; Fri, 28 Jul 2023 17:47:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:14 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-5-seanjc@google.com> Subject: [PATCH v3 04/12] KVM: x86/mmu: Avoid pointer arithmetic when iterating over SPTEs From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772739831057996344 X-GMAIL-MSGID: 1772739831057996344 Replace the pointer arithmetic used to iterate over SPTEs in is_empty_shadow_page() with more standard interger-based iteration. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: Philippe Mathieu-Daudé --- arch/x86/kvm/mmu/mmu.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index b16092d71d3f..08d08f34e6a3 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -1696,15 +1696,15 @@ bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) #ifdef MMU_DEBUG static int is_empty_shadow_page(u64 *spt) { - u64 *pos; - u64 *end; + int i; - for (pos = spt, end = pos + SPTE_ENT_PER_PAGE; pos != end; pos++) - if (is_shadow_present_pte(*pos)) { + for (i = 0; i < SPTE_ENT_PER_PAGE; i++) { + if (is_shadow_present_pte(spt[i])) { printk(KERN_ERR "%s: %p %llx\n", __func__, - pos, *pos); + &spt[i], spt[i]); return 0; } + } return 1; } #endif From patchwork Sat Jul 29 00:47:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127969 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp810296vqg; Fri, 28 Jul 2023 19:41:20 -0700 (PDT) X-Google-Smtp-Source: APBJJlFOORnhlf019cpvFvMkXGfc/VlK9jBcuxIQq1QDmtLrtRUvI36X5zx/KnmkInaj+Me8hYuW X-Received: by 2002:a05:6a21:6d9a:b0:137:68c3:c86f with SMTP id wl26-20020a056a216d9a00b0013768c3c86fmr3590407pzb.55.1690598480014; Fri, 28 Jul 2023 19:41:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690598479; cv=none; d=google.com; s=arc-20160816; b=w+b2JCJumjSJ1YZiTC8qqB8psldeNgcvvCeYiEsCBq9gTOegS/fhur+wCgVUUTQuEM l7/93FR69KvjiCW+kn1UuOT9ZvITiMF8mzE5cB6KS1dQVRAbiYUbW+5Mq8kYSs7ePnFp tQXrOJAILUdSysqCs8dFWds3BTuAu7c7Y6NtlH5CBdSRC7zSWa+TYH0waeZusoHl4tUh B9WVEXfyNxxE1CMMqHfYpxnsXsQ+DRRuDOyhZLuHqHaSX72q0I+QF/cnrg06S4FvCPZu +tFcCwE+TI1pqFKBY//+UY5hQiG925uERYltjy6rB6mGShZMHvn6zw6zA4jPAXYKT+md zydQ== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=h4cdHm0BhlnhwQewWFd9AhJ9S+836DEvk/nuWuA0UMI=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=wzMsy6/p4AqlE9UaHO3xg1scoIppq6dQmQCvMIiOXLUp3RlB8DgVNNnHpAenYhaaL1 v2oS1MgOAYLHl0oZDhiKL7jY/RQLt6DDCGGkD7/aCKt3R2kEohDUCBMr3xgM7/TzanSc NBVmr6gWiPBOLp44Slzd/BW0rTc7ekVYTr6yZ+PASNxP4X1Fpau3vH46R/R8DaCni6io BtYyipAYhUvQ2OzNt/NjEf26QMm8NTg83/TqsitkoihxRyqy12NKincdiCVKzRRbxwIM Xri2sBRLd/2fEqsJvOo1Cby6BxPoxaphHBkYhisy8/K1NYUOX2Fgnoel6xG43hmDJThS 1Zfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=t+btc92z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p35-20020a056a000a2300b006863085981esi2381488pfh.68.2023.07.28.19.41.07; Fri, 28 Jul 2023 19:41:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=t+btc92z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S236939AbjG2AtU (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41370 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236871AbjG2AtD (ORCPT ); Fri, 28 Jul 2023 20:49:03 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0050A26B8 for ; Fri, 28 Jul 2023 17:48:28 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id d9443c01a7336-1bb8f751372so24475735ad.0 for ; Fri, 28 Jul 2023 17:48:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591653; x=1691196453; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=h4cdHm0BhlnhwQewWFd9AhJ9S+836DEvk/nuWuA0UMI=; b=t+btc92z8/DgzpdYkrs7sL1HZgj054O/l9y6BIeMTFTnjcyb2xDE7SFYpIeFpg+xlN C/3BOBrWT5egYwIZR9MXt8xNNFX7+v101a9eFqBI1WBjAUuML2fS6kB76znkNwLDcoIv ddQc5eUlZ4cL3Bdsi3q2vxX241inLoXN0JvkRCKhKb+OaSN1uEkQm6cAnXqBwsV4rnsd ZeBVeqftNSU+rx346x1Fo74hTJU6SM68raImqyNpTMu+g9ZHeczC3Fk73kh4nV1E9Y62 Nl1gbd5iCoIUGOnZhJc3SChBuzlHu0VSY7s/BuenjEWokbMbwgUNSDzl9iKHGGNa1rDL Ew1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591653; x=1691196453; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=h4cdHm0BhlnhwQewWFd9AhJ9S+836DEvk/nuWuA0UMI=; b=fUiWaiabVYGTjWSYZXEf9aTkLAujH6LB91VCVNsUYZOKJzpa3Z0zD1voUnxhGq+wSE xfh1ppZCU3ZFbea2a6sFl3Lqef730G7lHHBhTt8HfAT5yHnR+LPct5SodghK4uFhIptk YJkpt4bD9p1bhK3AQIG/JpEa+bvCNYJ68MU89pYbCB2pIsMlZFmqSOPyXC2ZhZck9dkt mf5kgak8J2UDQIGDodFp6kHovE9jC3LN3W8uWG5pUO77mh2bpDek3QDNHP/7Scep3KuF 4xFwXlKF2tYibMeTjkFIype529Fb4tSFe8/Q50PMR9KXE/3fRZgeO6JSMShLTWSKpSQz rCYA== X-Gm-Message-State: ABy/qLZv9lbT+3hsRiSzPDKr9PBCId28bEvrp39pDT6+l+5ONHDK9jdt cW1jfd4tT5d4a/c0HcPBaCUx184cBvU= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:ce84:b0:1b8:2cee:946b with SMTP id f4-20020a170902ce8400b001b82cee946bmr14762plg.11.1690591653584; Fri, 28 Jul 2023 17:47:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:15 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-6-seanjc@google.com> Subject: [PATCH v3 05/12] KVM: x86/mmu: Cleanup sanity check of SPTEs at SP free From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772720991788070218 X-GMAIL-MSGID: 1772720991788070218 Massage the error message for the sanity check on SPTEs when freeing a shadow page to be more verbose, and to print out all shadow-present SPTEs, not just the first SPTE encountered. Printing all SPTEs can be quite valuable for debug, e.g. highlights whether the leak is a one-off or widepsread, or possibly the result of memory corruption (something else in the kernel stomping on KVM's SPTEs). Opportunistically move the MMU_WARN_ON() into the helper itself, which will allow a future cleanup to use BUILD_BUG_ON_INVALID() as the stub for MMU_WARN_ON(). BUILD_BUG_ON_INVALID() works as intended and results in the compiler complaining about is_empty_shadow_page() not being declared. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 08d08f34e6a3..8a21b06a9646 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -1693,21 +1693,19 @@ bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) return young; } +static void kvm_mmu_check_sptes_at_free(struct kvm_mmu_page *sp) +{ #ifdef MMU_DEBUG -static int is_empty_shadow_page(u64 *spt) -{ int i; for (i = 0; i < SPTE_ENT_PER_PAGE; i++) { - if (is_shadow_present_pte(spt[i])) { - printk(KERN_ERR "%s: %p %llx\n", __func__, - &spt[i], spt[i]); - return 0; - } + if (MMU_WARN_ON(is_shadow_present_pte(sp->spt[i]))) + pr_err_ratelimited("SPTE %llx (@ %p) for gfn %llx shadow-present at free", + sp->spt[i], &sp->spt[i], + kvm_mmu_page_get_gfn(sp, i)); } - return 1; -} #endif +} /* * This value is the sum of all of the kvm instances's @@ -1735,7 +1733,8 @@ static void kvm_unaccount_mmu_page(struct kvm *kvm, struct kvm_mmu_page *sp) static void kvm_mmu_free_shadow_page(struct kvm_mmu_page *sp) { - MMU_WARN_ON(!is_empty_shadow_page(sp->spt)); + kvm_mmu_check_sptes_at_free(sp); + hlist_del(&sp->hash_link); list_del(&sp->link); free_page((unsigned long)sp->spt); From patchwork Sat Jul 29 00:47:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127943 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp791890vqg; Fri, 28 Jul 2023 18:38:43 -0700 (PDT) X-Google-Smtp-Source: APBJJlF7AHw0Ybn0k+aCnUKYT6SB0xd4jyucziVIio/NKrz7aeA33y391dkcSOoD/0NedM7pkZPx X-Received: by 2002:a17:906:cd0e:b0:99b:c845:791d with SMTP id oz14-20020a170906cd0e00b0099bc845791dmr676117ejb.76.1690594723524; Fri, 28 Jul 2023 18:38:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690594723; cv=none; d=google.com; s=arc-20160816; b=yb1eR4oYS/Vt+o6CuChoaig+oeDYHqSOTcbLNWHU+nOAkdOl0X3GgqwtIzHwlXO/rq vvvWIa1AWKQmJ9VG7ra6vNwirRvkPCIVd4alcDcDb4DluCxlF1GNouN1BAwJPLChpywh wb60Sjob4L13dM1CGqj1nFyxThIFURoKTT83mcTi1MZe0uTe1Zug+rgmsCNX+RIBi+Qq or5sYFYAvxBtepHiDDHyXns9sz92wiDaPbR6Cdo4uo2cLVP5Eg5Wpp3M9y2f4r8HShmJ BVReDZyGGifR8K+qzJNJGpYYTKp6ynW9qFjj+99t1UkHhy/Wrga6GIvaJhLcZVlUbJ/k hSRQ== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=zg26OyCczKyFRFTxHD1ktdVAbwOnbHTDCM7ufXEGy6o=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=UjvoMhZWjlPgxnS9wRNEiNj/lT3NnsL5RnPGvmPT+cuXq916g1or6+OyxbTDWnCR9H 4YE8wa+AL0pjkFd0KIyatThB88nPE5CO4ZNcqDtuAIxQOsTWopBhxcNc6hmRJ30+Z7oe FBIaorfoTkZFRhgSG4rUjOwjbHTysKLPUtKrWHgQoPRIYVIAt7tMveY9V3CTO9ojJGxD PeS7eI57kYBnhM/WZw9ClJAycLUrVIRqteUrduotCt5xhD8F+kvmhsSS8IYHOz9xQvdi gVcNFmpUUJ+rexvvd2/uFoKtj6TeHFNx3V2G9IsIeq8j/PH5nfTagRpBr3c1Jn7YoOOF jHsw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=yBgD4egD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l12-20020a1709065a8c00b00992ae4dfc05si3718002ejq.1021.2023.07.28.18.38.20; Fri, 28 Jul 2023 18:38:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=yBgD4egD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S235552AbjG2Ate (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41254 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236976AbjG2AtO (ORCPT ); Fri, 28 Jul 2023 20:49:14 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E22BE49FC for ; Fri, 28 Jul 2023 17:48:36 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-d2a392775c6so529229276.0 for ; Fri, 28 Jul 2023 17:48:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591655; x=1691196455; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=zg26OyCczKyFRFTxHD1ktdVAbwOnbHTDCM7ufXEGy6o=; b=yBgD4egDyD7rn5Rlgh5FzPjyIZK4NrQZnJM1XrsEWRbnhlUJw2W+HwTx6xEzr65Djo d5xWhDMzlm0ICw9QLqr0W/Pmm4dWjeERc0IF1lelxEBluV7VrHar/xOIrk7VKhd7mvKo U/IXmBY88FL+332U62NfJQT6PL5AF7CP+NHFuMECDhqsM1ymjNUVKHOgJWcF/Tp3+M+M zeOoyliISA4B2nUv4cyAPRkrkzcucMs56N9AE1YLAwXUh4cDFDq5lJByKszSr/GFE99y 5qlO+lGEK4m9OiYMzAwk8RJtyKfLgfTYgAIPqlq5y9w/OkjyoWnZ8EZZvmsqK+tTEXGs 4xAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591655; x=1691196455; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=zg26OyCczKyFRFTxHD1ktdVAbwOnbHTDCM7ufXEGy6o=; b=UspaHsGFr5dty84LuzpGHsHepigOKeLZlHZ2Bfi3Ugx2LT6g6jIwX65zj8/xcDPJYO 68U4/DABftUwf/Vt3TOqKk5wuIVeG6dds6hTt+ioPtVx1KcZX1DQ91DTO+7hN8zA1hll ntveq2D8IzmuYiffV60P8DGy6eiqfdZ89a8z4a88BnEjhW76r+Zb6NSIlTLtppE3q36B MGPQmNnsm94z6HTCEuSxBd3GuaaWE6lxiG69YS2uMTQmhpnF5jwyWR6Vc01KYydFG/JD bdIH/npqYk5bxZsErV8phO8V5+TD9cYVuGVBDlJqlI1tbWYIf5pL3A/4WqeMBvM33IS1 95Cw== X-Gm-Message-State: ABy/qLa+mY19MdnbDDjaY+WfGGfOx6CZouWz2Pn0Nvn3AAEmPco7s1fs s9+RFRvlk1S3Ykw7VTBSffmbIg2YhH4= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6902:100f:b0:cf9:3564:33cc with SMTP id w15-20020a056902100f00b00cf9356433ccmr24320ybt.13.1690591655397; Fri, 28 Jul 2023 17:47:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:16 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-7-seanjc@google.com> Subject: [PATCH v3 06/12] KVM: x86/mmu: Rename MMU_WARN_ON() to KVM_MMU_WARN_ON() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772717052723755016 X-GMAIL-MSGID: 1772717052723755016 Rename MMU_WARN_ON() to make it super obvious that the assertions are all about KVM's MMU, not the primary MMU. Signed-off-by: Sean Christopherson Reviewed-by: Philippe Mathieu-Daudé --- arch/x86/kvm/mmu/mmu.c | 4 ++-- arch/x86/kvm/mmu/mmu_internal.h | 4 ++-- arch/x86/kvm/mmu/spte.h | 8 ++++---- arch/x86/kvm/mmu/tdp_mmu.c | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 8a21b06a9646..80daaa84a8eb 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -1255,7 +1255,7 @@ static bool spte_clear_dirty(u64 *sptep) { u64 spte = *sptep; - MMU_WARN_ON(!spte_ad_enabled(spte)); + KVM_MMU_WARN_ON(!spte_ad_enabled(spte)); spte &= ~shadow_dirty_mask; return mmu_spte_update(sptep, spte); } @@ -1699,7 +1699,7 @@ static void kvm_mmu_check_sptes_at_free(struct kvm_mmu_page *sp) int i; for (i = 0; i < SPTE_ENT_PER_PAGE; i++) { - if (MMU_WARN_ON(is_shadow_present_pte(sp->spt[i]))) + if (KVM_MMU_WARN_ON(is_shadow_present_pte(sp->spt[i]))) pr_err_ratelimited("SPTE %llx (@ %p) for gfn %llx shadow-present at free", sp->spt[i], &sp->spt[i], kvm_mmu_page_get_gfn(sp, i)); diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h index 9ea80e4d463c..bb1649669bc9 100644 --- a/arch/x86/kvm/mmu/mmu_internal.h +++ b/arch/x86/kvm/mmu/mmu_internal.h @@ -9,9 +9,9 @@ #undef MMU_DEBUG #ifdef MMU_DEBUG -#define MMU_WARN_ON(x) WARN_ON(x) +#define KVM_MMU_WARN_ON(x) WARN_ON(x) #else -#define MMU_WARN_ON(x) do { } while (0) +#define KVM_MMU_WARN_ON(x) do { } while (0) #endif /* Page table builder macros common to shadow (host) PTEs and guest PTEs. */ diff --git a/arch/x86/kvm/mmu/spte.h b/arch/x86/kvm/mmu/spte.h index 1279db2eab44..83e6614f3720 100644 --- a/arch/x86/kvm/mmu/spte.h +++ b/arch/x86/kvm/mmu/spte.h @@ -265,13 +265,13 @@ static inline bool sp_ad_disabled(struct kvm_mmu_page *sp) static inline bool spte_ad_enabled(u64 spte) { - MMU_WARN_ON(!is_shadow_present_pte(spte)); + KVM_MMU_WARN_ON(!is_shadow_present_pte(spte)); return (spte & SPTE_TDP_AD_MASK) != SPTE_TDP_AD_DISABLED; } static inline bool spte_ad_need_write_protect(u64 spte) { - MMU_WARN_ON(!is_shadow_present_pte(spte)); + KVM_MMU_WARN_ON(!is_shadow_present_pte(spte)); /* * This is benign for non-TDP SPTEs as SPTE_TDP_AD_ENABLED is '0', * and non-TDP SPTEs will never set these bits. Optimize for 64-bit @@ -282,13 +282,13 @@ static inline bool spte_ad_need_write_protect(u64 spte) static inline u64 spte_shadow_accessed_mask(u64 spte) { - MMU_WARN_ON(!is_shadow_present_pte(spte)); + KVM_MMU_WARN_ON(!is_shadow_present_pte(spte)); return spte_ad_enabled(spte) ? shadow_accessed_mask : 0; } static inline u64 spte_shadow_dirty_mask(u64 spte) { - MMU_WARN_ON(!is_shadow_present_pte(spte)); + KVM_MMU_WARN_ON(!is_shadow_present_pte(spte)); return spte_ad_enabled(spte) ? shadow_dirty_mask : 0; } diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c index 512163d52194..f881de40f9ef 100644 --- a/arch/x86/kvm/mmu/tdp_mmu.c +++ b/arch/x86/kvm/mmu/tdp_mmu.c @@ -1548,8 +1548,8 @@ static bool clear_dirty_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root, if (!is_shadow_present_pte(iter.old_spte)) continue; - MMU_WARN_ON(kvm_ad_enabled() && - spte_ad_need_write_protect(iter.old_spte)); + KVM_MMU_WARN_ON(kvm_ad_enabled() && + spte_ad_need_write_protect(iter.old_spte)); if (!(iter.old_spte & dbit)) continue; @@ -1607,8 +1607,8 @@ static void clear_dirty_pt_masked(struct kvm *kvm, struct kvm_mmu_page *root, if (!mask) break; - MMU_WARN_ON(kvm_ad_enabled() && - spte_ad_need_write_protect(iter.old_spte)); + KVM_MMU_WARN_ON(kvm_ad_enabled() && + spte_ad_need_write_protect(iter.old_spte)); if (iter.level > PG_LEVEL_4K || !(mask & (1UL << (iter.gfn - gfn)))) From patchwork Sat Jul 29 00:47:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127902 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp780036vqg; Fri, 28 Jul 2023 18:01:31 -0700 (PDT) X-Google-Smtp-Source: APBJJlHvXp3xOWuB5xMCigqNISD7ZradQs0hPaK6WI+7bvFwImr1NlcooIXNAmEBXlrTIgFt8Ivh X-Received: by 2002:a05:6512:1105:b0:4f3:b588:48d0 with SMTP id l5-20020a056512110500b004f3b58848d0mr3037941lfg.14.1690592491025; Fri, 28 Jul 2023 18:01:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690592490; cv=none; d=google.com; s=arc-20160816; b=Vns8vaZMLbp+V/iSzUMbXoUbwg0Q2lDrhMrEFKPhyDx2LnW5kGLyuxWFkJ/k/NT5Et yZ6ZPL8NGTmjbLtDamqjmfZikjvRH6sEDNq5I6MFWTxOPr5ezHuW6nKr/mgNneYt0OY/ wkVvmSnD2zLvwEbK241ieIhLHGXO/soE7Kw2mptwYgNNHjc1PzDvKjy2KSV0r1oYsmuX 2e9h5PP/mnSuMnB+hda71rYapw59No4eV5vjJi+TXwY3ML0COtil2YsV0i11603VDVOg eP/w8bPakAcWJx9eeXDRMPgcfrD0tGVYJqUb3oZ0D4SPM7MNLkf8bG73FANkOo4PRyh/ bLOQ== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=o0GVzX8Oynx3KUVXBSxVFm2q3IZwTZiDsmzIVKx3on0=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=fj1Glco8qD2tJiEOdmfF4+FpfseqN9hbLDVHlVLrPCV4w3YA4DpFJcRSsaARkz3EeY YHJs1uZcDMPkfiuKpFMLVUmcRX2NvAA4ZoQnAOQ+GSn67OXuC6G+hxVV4QJa6AEG0t6U Ex9eurM1JFo3HCwyDiOkXMkjwhdlIXNBDaW2gmOUNWh+wo3Hjno9zUQ68Jmxp0fhvssJ z0A8Z0wCEqWTsjTPzwlIxXxnhhqOISq17Dy4OEMdsc/JNt+GVwxmYe7yGIY8BsA5ZyLR jl5/154Wg9YknXMJRPAgNgx0Cns1EG589zRPIK5FZx//9L07y4iDG68fSi9ZNb7d0zf3 LmXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="6r4/V/xs"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f8-20020a50ee88000000b005222ae088b1si3546065edr.271.2023.07.28.18.01.06; Fri, 28 Jul 2023 18:01:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="6r4/V/xs"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S237093AbjG2Atr (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41502 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236869AbjG2AtX (ORCPT ); Fri, 28 Jul 2023 20:49:23 -0400 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77A4B4491 for ; Fri, 28 Jul 2023 17:48:41 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 41be03b00d2f7-563bcd2cb78so2396127a12.3 for ; Fri, 28 Jul 2023 17:48:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591657; x=1691196457; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=o0GVzX8Oynx3KUVXBSxVFm2q3IZwTZiDsmzIVKx3on0=; b=6r4/V/xsP0AprKgqWMWGt18+wsC3QDpkvI30e6/5nz0gJKTP8a1BQva2oZooCjGn7V sAyIABQ4w2cSxVZnHs1nToM0Sy4uo0AW/LA0oQswfBPdumnWJFMjtQqr8k8pqp21EOtq +Hbpz27CpGAMINZZA2gzVqrg2mhL7O586m5bqNH4rg2s01aw4xQFV62Ha1MYlP18b4oN TXTDpETdyDZox+h57jUF/rVIQofkb3A/zXkeg4wSgh7xC+Aae56f55QQbAe5V+/dEHvP COyRLhOIhIjxp8ZWg81H+plh9jiXm9XgFjILz+VlndJTGnMzDP3GPoOP4l/2xZkxr5MP 4saw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591657; x=1691196457; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=o0GVzX8Oynx3KUVXBSxVFm2q3IZwTZiDsmzIVKx3on0=; b=DJHpWYfgpIkHTGge1Uz6Pc8NL8vuojDD4cnGj7HYPvYFyzMin3272LaPwquT5/P6fL swkgrTqAfoy5UWrD1jENp+LamC6iAj/ZjpYrSp6O0/4j7d3eiuXAKIok+IOkljHUjP0N Q8eI8YhTlpOFX8MyGkdojVL+fM9cUZHsXJk0u6y1dd8jjN5TPgcUARP7oogVtXrAqgfz bgASB74Osb0WRUXAQdg08iQ4dexvGoUCNM9AG7HC58TdEA6S3c3ttMfKp1cC8xi2mTfw 6A/9WlRwRDYiN5+ZQLjAgKdj4dsyUyU28KoofdcWDTr00kSJHHPMi2VCh82+kuMKxTIj xLsA== X-Gm-Message-State: ABy/qLa3BauyV0bmuTeUGQEGVsjIXXXCL8ORp0V05QqoCD5oywhoOfQF Gy7RmxbTM4ZkYmSgQx27gZ5pXxL/QFA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:364f:0:b0:563:3b08:f869 with SMTP id d76-20020a63364f000000b005633b08f869mr15476pga.2.1690591657381; Fri, 28 Jul 2023 17:47:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:17 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-8-seanjc@google.com> Subject: [PATCH v3 07/12] KVM: x86/mmu: Convert "runtime" WARN_ON() assertions to WARN_ON_ONCE() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772714711553153556 X-GMAIL-MSGID: 1772714711553153556 Convert all "runtime" assertions, i.e. assertions that can be triggered while running vCPUs, from WARN_ON() to WARN_ON_ONCE(). Every WARN in the MMU that is tied to running vCPUs, i.e. not contained to loading and initializing KVM, is likely to fire _a lot_ when it does trigger. E.g. if KVM ends up with a bug that causes a root to be invalidated before the page fault handler is invoked, pretty much _every_ page fault VM-Exit triggers the WARN. If a WARN is triggered frequently, the resulting spam usually causes a lot of damage of its own, e.g. consumes resources to log the WARN and pollutes the kernel log, often to the point where other useful information can be lost. In many case, the damage caused by the spam is actually worse than the bug itself, e.g. KVM can almost always recover from an unexpectedly invalid root. On the flip side, warning every time is rarely helpful for debug and triage, i.e. a single splat is usually sufficient to point a debugger in the right direction, and automated testing, e.g. syzkaller, typically runs with warn_on_panic=1, i.e. will never get past the first WARN anyways. Lastly, when an assertions fails multiple times, the stack traces in KVM are almost always identical, i.e. the full splat only needs to be captured once. And _if_ there is value in captruing information about the failed assert, a ratelimited printk() is sufficient and less likely to rack up a large amount of collateral damage. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 48 ++++++++++++++++----------------- arch/x86/kvm/mmu/mmu_internal.h | 2 +- arch/x86/kvm/mmu/page_track.c | 16 +++++------ arch/x86/kvm/mmu/paging_tmpl.h | 4 +-- arch/x86/kvm/mmu/spte.c | 4 +-- arch/x86/kvm/mmu/tdp_iter.c | 4 +-- arch/x86/kvm/mmu/tdp_mmu.c | 20 +++++++------- 7 files changed, 49 insertions(+), 49 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 80daaa84a8eb..d46f77734f30 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -485,7 +485,7 @@ static u64 __get_spte_lockless(u64 *sptep) */ static void mmu_spte_set(u64 *sptep, u64 new_spte) { - WARN_ON(is_shadow_present_pte(*sptep)); + WARN_ON_ONCE(is_shadow_present_pte(*sptep)); __set_spte(sptep, new_spte); } @@ -497,7 +497,7 @@ static u64 mmu_spte_update_no_track(u64 *sptep, u64 new_spte) { u64 old_spte = *sptep; - WARN_ON(!is_shadow_present_pte(new_spte)); + WARN_ON_ONCE(!is_shadow_present_pte(new_spte)); check_spte_writable_invariants(new_spte); if (!is_shadow_present_pte(old_spte)) { @@ -510,7 +510,7 @@ static u64 mmu_spte_update_no_track(u64 *sptep, u64 new_spte) else old_spte = __update_clear_spte_slow(sptep, new_spte); - WARN_ON(spte_to_pfn(old_spte) != spte_to_pfn(new_spte)); + WARN_ON_ONCE(spte_to_pfn(old_spte) != spte_to_pfn(new_spte)); return old_spte; } @@ -592,7 +592,7 @@ static u64 mmu_spte_clear_track_bits(struct kvm *kvm, u64 *sptep) * by a refcounted page, the refcount is elevated. */ page = kvm_pfn_to_refcounted_page(pfn); - WARN_ON(page && !page_count(page)); + WARN_ON_ONCE(page && !page_count(page)); if (is_accessed_spte(old_spte)) kvm_set_pfn_accessed(pfn); @@ -807,7 +807,7 @@ static void update_gfn_disallow_lpage_count(const struct kvm_memory_slot *slot, for (i = PG_LEVEL_2M; i <= KVM_MAX_HUGEPAGE_LEVEL; ++i) { linfo = lpage_info_slot(gfn, slot, i); linfo->disallow_lpage += count; - WARN_ON(linfo->disallow_lpage < 0); + WARN_ON_ONCE(linfo->disallow_lpage < 0); } } @@ -1202,7 +1202,7 @@ static void drop_large_spte(struct kvm *kvm, u64 *sptep, bool flush) struct kvm_mmu_page *sp; sp = sptep_to_sp(sptep); - WARN_ON(sp->role.level == PG_LEVEL_4K); + WARN_ON_ONCE(sp->role.level == PG_LEVEL_4K); drop_spte(kvm, sptep); @@ -1461,7 +1461,7 @@ static bool kvm_set_pte_rmap(struct kvm *kvm, struct kvm_rmap_head *rmap_head, u64 new_spte; kvm_pfn_t new_pfn; - WARN_ON(pte_huge(pte)); + WARN_ON_ONCE(pte_huge(pte)); new_pfn = pte_pfn(pte); restart: @@ -1822,7 +1822,7 @@ static int mmu_pages_add(struct kvm_mmu_pages *pvec, struct kvm_mmu_page *sp, static inline void clear_unsync_child_bit(struct kvm_mmu_page *sp, int idx) { --sp->unsync_children; - WARN_ON((int)sp->unsync_children < 0); + WARN_ON_ONCE((int)sp->unsync_children < 0); __clear_bit(idx, sp->unsync_child_bitmap); } @@ -1880,7 +1880,7 @@ static int mmu_unsync_walk(struct kvm_mmu_page *sp, static void kvm_unlink_unsync_page(struct kvm *kvm, struct kvm_mmu_page *sp) { - WARN_ON(!sp->unsync); + WARN_ON_ONCE(!sp->unsync); trace_kvm_mmu_sync_page(sp); sp->unsync = 0; --kvm->stat.mmu_unsync; @@ -2055,11 +2055,11 @@ static int mmu_pages_first(struct kvm_mmu_pages *pvec, if (pvec->nr == 0) return 0; - WARN_ON(pvec->page[0].idx != INVALID_INDEX); + WARN_ON_ONCE(pvec->page[0].idx != INVALID_INDEX); sp = pvec->page[0].sp; level = sp->role.level; - WARN_ON(level == PG_LEVEL_4K); + WARN_ON_ONCE(level == PG_LEVEL_4K); parents->parent[level-2] = sp; @@ -2081,7 +2081,7 @@ static void mmu_pages_clear_parents(struct mmu_page_path *parents) if (!sp) return; - WARN_ON(idx == INVALID_INDEX); + WARN_ON_ONCE(idx == INVALID_INDEX); clear_unsync_child_bit(sp, idx); level++; } while (!sp->unsync_children); @@ -2202,7 +2202,7 @@ static struct kvm_mmu_page *kvm_mmu_find_shadow_page(struct kvm *kvm, if (ret < 0) break; - WARN_ON(!list_empty(&invalid_list)); + WARN_ON_ONCE(!list_empty(&invalid_list)); if (ret > 0) kvm_flush_remote_tlbs(kvm); } @@ -2657,7 +2657,7 @@ static void kvm_mmu_commit_zap_page(struct kvm *kvm, kvm_flush_remote_tlbs(kvm); list_for_each_entry_safe(sp, nsp, invalid_list, link) { - WARN_ON(!sp->role.invalid || sp->root_count); + WARN_ON_ONCE(!sp->role.invalid || sp->root_count); kvm_mmu_free_shadow_page(sp); } } @@ -2852,7 +2852,7 @@ int mmu_try_to_unsync_pages(struct kvm *kvm, const struct kvm_memory_slot *slot, continue; } - WARN_ON(sp->role.level != PG_LEVEL_4K); + WARN_ON_ONCE(sp->role.level != PG_LEVEL_4K); kvm_unsync_page(kvm, sp); } if (locked) @@ -3005,7 +3005,7 @@ static void __direct_pte_prefetch(struct kvm_vcpu *vcpu, u64 *spte, *start = NULL; int i; - WARN_ON(!sp->role.direct); + WARN_ON_ONCE(!sp->role.direct); i = spte_index(sptep) & ~(PTE_PREFETCH_NUM - 1); spte = sp->spt + i; @@ -3551,7 +3551,7 @@ static void mmu_free_root_page(struct kvm *kvm, hpa_t *root_hpa, * SPTE to ensure any non-PA bits are dropped. */ sp = spte_to_child_sp(*root_hpa); - if (WARN_ON(!sp)) + if (WARN_ON_ONCE(!sp)) return; if (is_tdp_mmu_page(sp)) @@ -4166,7 +4166,7 @@ static int handle_mmio_page_fault(struct kvm_vcpu *vcpu, u64 addr, bool direct) return RET_PF_EMULATE; reserved = get_mmio_spte(vcpu, addr, &spte); - if (WARN_ON(reserved)) + if (WARN_ON_ONCE(reserved)) return -EINVAL; if (is_mmio_spte(spte)) { @@ -5501,9 +5501,9 @@ void kvm_mmu_unload(struct kvm_vcpu *vcpu) struct kvm *kvm = vcpu->kvm; kvm_mmu_free_roots(kvm, &vcpu->arch.root_mmu, KVM_MMU_ROOTS_ALL); - WARN_ON(VALID_PAGE(vcpu->arch.root_mmu.root.hpa)); + WARN_ON_ONCE(VALID_PAGE(vcpu->arch.root_mmu.root.hpa)); kvm_mmu_free_roots(kvm, &vcpu->arch.guest_mmu, KVM_MMU_ROOTS_ALL); - WARN_ON(VALID_PAGE(vcpu->arch.guest_mmu.root.hpa)); + WARN_ON_ONCE(VALID_PAGE(vcpu->arch.guest_mmu.root.hpa)); vcpu_clear_mmio_info(vcpu, MMIO_GVA_ANY); } @@ -5707,7 +5707,7 @@ int noinline kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, u64 err int r, emulation_type = EMULTYPE_PF; bool direct = vcpu->arch.mmu->root_role.direct; - if (WARN_ON(!VALID_PAGE(vcpu->arch.mmu->root.hpa))) + if (WARN_ON_ONCE(!VALID_PAGE(vcpu->arch.mmu->root.hpa))) return RET_PF_RETRY; r = RET_PF_INVALID; @@ -6064,7 +6064,7 @@ static void kvm_zap_obsolete_pages(struct kvm *kvm) * pages. Skip the bogus page, otherwise we'll get stuck in an * infinite loop if the page gets put back on the list (again). */ - if (WARN_ON(sp->role.invalid)) + if (WARN_ON_ONCE(sp->role.invalid)) continue; /* @@ -6706,7 +6706,7 @@ void kvm_mmu_zap_all(struct kvm *kvm) write_lock(&kvm->mmu_lock); restart: list_for_each_entry_safe(sp, node, &kvm->arch.active_mmu_pages, link) { - if (WARN_ON(sp->role.invalid)) + if (WARN_ON_ONCE(sp->role.invalid)) continue; if (__kvm_mmu_prepare_zap_page(kvm, sp, &invalid_list, &ign)) goto restart; @@ -6724,7 +6724,7 @@ void kvm_mmu_zap_all(struct kvm *kvm) void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm, u64 gen) { - WARN_ON(gen & KVM_MEMSLOT_GEN_UPDATE_IN_PROGRESS); + WARN_ON_ONCE(gen & KVM_MEMSLOT_GEN_UPDATE_IN_PROGRESS); gen &= MMIO_SPTE_GEN_MASK; diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h index bb1649669bc9..cfe925fefa68 100644 --- a/arch/x86/kvm/mmu/mmu_internal.h +++ b/arch/x86/kvm/mmu/mmu_internal.h @@ -9,7 +9,7 @@ #undef MMU_DEBUG #ifdef MMU_DEBUG -#define KVM_MMU_WARN_ON(x) WARN_ON(x) +#define KVM_MMU_WARN_ON(x) WARN_ON_ONCE(x) #else #define KVM_MMU_WARN_ON(x) do { } while (0) #endif diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 0a2ac438d647..fd16918b3a7a 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -94,7 +94,7 @@ static void update_gfn_track(struct kvm_memory_slot *slot, gfn_t gfn, val = slot->arch.gfn_track[mode][index]; - if (WARN_ON(val + count < 0 || val + count > USHRT_MAX)) + if (WARN_ON_ONCE(val + count < 0 || val + count > USHRT_MAX)) return; slot->arch.gfn_track[mode][index] += count; @@ -117,11 +117,11 @@ void kvm_slot_page_track_add_page(struct kvm *kvm, enum kvm_page_track_mode mode) { - if (WARN_ON(!page_track_mode_is_valid(mode))) + if (WARN_ON_ONCE(!page_track_mode_is_valid(mode))) return; - if (WARN_ON(mode == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm))) + if (WARN_ON_ONCE(mode == KVM_PAGE_TRACK_WRITE && + !kvm_page_track_write_tracking_enabled(kvm))) return; update_gfn_track(slot, gfn, mode, 1); @@ -155,11 +155,11 @@ void kvm_slot_page_track_remove_page(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn, enum kvm_page_track_mode mode) { - if (WARN_ON(!page_track_mode_is_valid(mode))) + if (WARN_ON_ONCE(!page_track_mode_is_valid(mode))) return; - if (WARN_ON(mode == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm))) + if (WARN_ON_ONCE(mode == KVM_PAGE_TRACK_WRITE && + !kvm_page_track_write_tracking_enabled(kvm))) return; update_gfn_track(slot, gfn, mode, -1); @@ -181,7 +181,7 @@ bool kvm_slot_page_track_is_active(struct kvm *kvm, { int index; - if (WARN_ON(!page_track_mode_is_valid(mode))) + if (WARN_ON_ONCE(!page_track_mode_is_valid(mode))) return false; if (!slot) diff --git a/arch/x86/kvm/mmu/paging_tmpl.h b/arch/x86/kvm/mmu/paging_tmpl.h index 7a97f769a7cb..a3fc7c1a7f8d 100644 --- a/arch/x86/kvm/mmu/paging_tmpl.h +++ b/arch/x86/kvm/mmu/paging_tmpl.h @@ -633,7 +633,7 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault, if (FNAME(gpte_changed)(vcpu, gw, top_level)) goto out_gpte_changed; - if (WARN_ON(!VALID_PAGE(vcpu->arch.mmu->root.hpa))) + if (WARN_ON_ONCE(!VALID_PAGE(vcpu->arch.mmu->root.hpa))) goto out_gpte_changed; for_each_shadow_entry(vcpu, fault->addr, it) { @@ -830,7 +830,7 @@ static gpa_t FNAME(get_level1_sp_gpa)(struct kvm_mmu_page *sp) { int offset = 0; - WARN_ON(sp->role.level != PG_LEVEL_4K); + WARN_ON_ONCE(sp->role.level != PG_LEVEL_4K); if (PTTYPE == 32) offset = sp->role.quadrant << SPTE_LEVEL_BITS; diff --git a/arch/x86/kvm/mmu/spte.c b/arch/x86/kvm/mmu/spte.c index 438a86bda9f3..4a599130e9c9 100644 --- a/arch/x86/kvm/mmu/spte.c +++ b/arch/x86/kvm/mmu/spte.c @@ -61,7 +61,7 @@ static u64 generation_mmio_spte_mask(u64 gen) { u64 mask; - WARN_ON(gen & ~MMIO_SPTE_GEN_MASK); + WARN_ON_ONCE(gen & ~MMIO_SPTE_GEN_MASK); mask = (gen << MMIO_SPTE_GEN_LOW_SHIFT) & MMIO_SPTE_GEN_LOW_MASK; mask |= (gen << MMIO_SPTE_GEN_HIGH_SHIFT) & MMIO_SPTE_GEN_HIGH_MASK; @@ -240,7 +240,7 @@ bool make_spte(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, if ((spte & PT_WRITABLE_MASK) && kvm_slot_dirty_track_enabled(slot)) { /* Enforced by kvm_mmu_hugepage_adjust. */ - WARN_ON(level > PG_LEVEL_4K); + WARN_ON_ONCE(level > PG_LEVEL_4K); mark_page_dirty_in_slot(vcpu->kvm, slot, gfn); } diff --git a/arch/x86/kvm/mmu/tdp_iter.c b/arch/x86/kvm/mmu/tdp_iter.c index d2eb0d4f8710..5bb09f8d9fc6 100644 --- a/arch/x86/kvm/mmu/tdp_iter.c +++ b/arch/x86/kvm/mmu/tdp_iter.c @@ -41,8 +41,8 @@ void tdp_iter_start(struct tdp_iter *iter, struct kvm_mmu_page *root, { int root_level = root->role.level; - WARN_ON(root_level < 1); - WARN_ON(root_level > PT64_ROOT_MAX_LEVEL); + WARN_ON_ONCE(root_level < 1); + WARN_ON_ONCE(root_level > PT64_ROOT_MAX_LEVEL); iter->next_last_level_gfn = next_last_level_gfn; iter->root_level = root_level; diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c index f881de40f9ef..b2068c47f78c 100644 --- a/arch/x86/kvm/mmu/tdp_mmu.c +++ b/arch/x86/kvm/mmu/tdp_mmu.c @@ -475,9 +475,9 @@ static void handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn, bool is_leaf = is_present && is_last_spte(new_spte, level); bool pfn_changed = spte_to_pfn(old_spte) != spte_to_pfn(new_spte); - WARN_ON(level > PT64_ROOT_MAX_LEVEL); - WARN_ON(level < PG_LEVEL_4K); - WARN_ON(gfn & (KVM_PAGES_PER_HPAGE(level) - 1)); + WARN_ON_ONCE(level > PT64_ROOT_MAX_LEVEL); + WARN_ON_ONCE(level < PG_LEVEL_4K); + WARN_ON_ONCE(gfn & (KVM_PAGES_PER_HPAGE(level) - 1)); /* * If this warning were to trigger it would indicate that there was a @@ -522,9 +522,9 @@ static void handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn, * impact the guest since both the former and current SPTEs * are nonpresent. */ - if (WARN_ON(!is_mmio_spte(old_spte) && - !is_mmio_spte(new_spte) && - !is_removed_spte(new_spte))) + if (WARN_ON_ONCE(!is_mmio_spte(old_spte) && + !is_mmio_spte(new_spte) && + !is_removed_spte(new_spte))) pr_err("Unexpected SPTE change! Nonpresent SPTEs\n" "should not be replaced with another,\n" "different nonpresent SPTE, unless one or both\n" @@ -661,7 +661,7 @@ static u64 tdp_mmu_set_spte(struct kvm *kvm, int as_id, tdp_ptep_t sptep, * should be used. If operating under the MMU lock in write mode, the * use of the removed SPTE should not be necessary. */ - WARN_ON(is_removed_spte(old_spte) || is_removed_spte(new_spte)); + WARN_ON_ONCE(is_removed_spte(old_spte) || is_removed_spte(new_spte)); old_spte = kvm_tdp_mmu_write_spte(sptep, old_spte, new_spte, level); @@ -709,7 +709,7 @@ static inline bool __must_check tdp_mmu_iter_cond_resched(struct kvm *kvm, struct tdp_iter *iter, bool flush, bool shared) { - WARN_ON(iter->yielded); + WARN_ON_ONCE(iter->yielded); /* Ensure forward progress has been made before yielding. */ if (iter->next_last_level_gfn == iter->yielded_gfn) @@ -728,7 +728,7 @@ static inline bool __must_check tdp_mmu_iter_cond_resched(struct kvm *kvm, rcu_read_lock(); - WARN_ON(iter->gfn > iter->next_last_level_gfn); + WARN_ON_ONCE(iter->gfn > iter->next_last_level_gfn); iter->yielded = true; } @@ -1241,7 +1241,7 @@ static bool set_spte_gfn(struct kvm *kvm, struct tdp_iter *iter, u64 new_spte; /* Huge pages aren't expected to be modified without first being zapped. */ - WARN_ON(pte_huge(range->pte) || range->start + 1 != range->end); + WARN_ON_ONCE(pte_huge(range->pte) || range->start + 1 != range->end); if (iter->level != PG_LEVEL_4K || !is_shadow_present_pte(iter->old_spte)) From patchwork Sat Jul 29 00:47:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127921 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp786757vqg; Fri, 28 Jul 2023 18:21:10 -0700 (PDT) X-Google-Smtp-Source: APBJJlGWYcSMfVbTYVSJh3Gd31/lYdlyd4ckmJBO7BH2iHveuc8UryEbr9E1ECOsntCkKFw1guhk X-Received: by 2002:a05:6a21:3806:b0:132:ce27:d29e with SMTP id yi6-20020a056a21380600b00132ce27d29emr2399966pzb.10.1690593670136; Fri, 28 Jul 2023 18:21:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690593670; cv=none; d=google.com; s=arc-20160816; b=kXwEXf07IveqrFXfovc88GecCyHO3RbSTP8jUvmlymLPR318eYsGC5Kth+weNctZHG v2HIJrLamrWOpzmpCt1o5afL0d/VEoUkxTbV0AN09KlB+farIqZB5kCsi0kDqT7ACc5N ElRrZC+2LCtEd3Jw9vjdbMBsCJ7DlDlWUXTs+ih8QGozLjV96cRKR/Lpbb8eIBLKh32N 1vCkal/Fm00i7mtDFD7oRx+INu93pc58IE2XYvVQNzOvHMGQUFbfR57SY/dq6UFyBpE+ 2puPJvsB8YUS16u/Rg2Tjd25ZnJhy6CcKQQ0hH4vc27K3G/eV2J6p7nyivnaZM3iuTcb 9Llg== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=Hf66Tg9z6eVGNOq7lITDvOc5Z8kagkKjdF0cIF19+es=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=CHhdNl8OTBHbYitRMKvUopwiL0aPzFssI5Pfeqhr4QcVhVozQMlTS/afISRP1xOYK8 hLCMC2oBjFJlEFgbWTr2O4VdvZQOjrBL1KKLtH4xIIl8yjtIhQIFnr/uCnZcCP0W32nX Um80df1SmKrgB6sJN/Z8pOFN8Otue3WKwD3/Ruiiuf71blgJ1sc72QSXv2dh+SW4nmpl kb6NJcqiv9Y/KQYIZUbFptEhlNoRm1dHdtidjnm042zeeCTZo0RLYaRIm4M6+8iE3LG1 +jB9hUJXIRq2POP2EH1R87eM5t0da6UFtBttiAJ7kJ1wTKKoE74VKzylUM5bMGBOfR3L 4mEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=zUDVdE4s; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u33-20020a631421000000b0055337cf6342si3922852pgl.332.2023.07.28.18.20.52; Fri, 28 Jul 2023 18:21:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=zUDVdE4s; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S231829AbjG2Ato (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41378 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236980AbjG2AtX (ORCPT ); Fri, 28 Jul 2023 20:49:23 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 29E364497 for ; Fri, 28 Jul 2023 17:48:44 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id d9443c01a7336-1bbb34b091dso18344065ad.0 for ; Fri, 28 Jul 2023 17:48:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591659; x=1691196459; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=Hf66Tg9z6eVGNOq7lITDvOc5Z8kagkKjdF0cIF19+es=; b=zUDVdE4s613ECH4ZKVOZpSs/h2tRe54frXNJRURqJl+8Ioud7FLFpSGd152eUfIe5F xPlxDaq0772s0mVBoDJQk5nL4DAEn1P9/YTIRGqB5ythke/tuxa1B3kUdub1M6GRfARi SWYZuWo87quC1VB4Vf6nzVK80CxCjKJd5jxmW7cFtzuojyVIaQxKGnDaTbkIyqK4wvi7 e6N4JtHwrsCpnvh2Jub/ZvB9cJudmmIjBl8RbquwbYbzqg34fwECoUAQdeP07wsO7TJg EoaamLDm4yNiiCYHJxSmV0FlFoYljDv21lPnWdjd5txWiXVKzQWEDTuos8ytThOSce33 OFNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591659; x=1691196459; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Hf66Tg9z6eVGNOq7lITDvOc5Z8kagkKjdF0cIF19+es=; b=ldJxUERM2larqhDpMa/09mtfz9X5T2ZzQQrhJ0TR8YXg6VLxFjof6HOTuhBpmN++Gj 6HnkgGMnLdhFNmb92bNEZ+XpKbREvlUv7XFIxuPAI1xitXFd+Yg65Qjchz4eis5naKPF 5+bGvcwtCXJMqz3q0ibhqLkRl6IEy8x7FwQHnuRgyEZ+dB1V0KLcPe2g8athS5ny2CIw cQAasmbCUmwQmMqx5J2sYOj3+4q4GnmnmFiU4Ohy6nq3h1q2egZ32JA7k0Q5472d0ZGd cEWe6ZeSwbDFksp/ym7wXt7GR3appE0Nwa/inwSpnZnd0X7lSJ69oJi+RqOIMh/4bwdF k6HQ== X-Gm-Message-State: ABy/qLaYJ6CFBxQ4Jsa/VN9ql/mOXFO5aBdZKlDNzAVsncqWZnJ9itwo 4t2DFPvqXb3luZby/KyARhgje0v5DEc= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:d2d2:b0:1b9:e8e5:b0a4 with SMTP id n18-20020a170902d2d200b001b9e8e5b0a4mr11360plc.8.1690591659099; Fri, 28 Jul 2023 17:47:39 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:18 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-9-seanjc@google.com> Subject: [PATCH v3 08/12] KVM: x86/mmu: Bug the VM if a vCPU ends up in long mode without PAE enabled From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772715948126903592 X-GMAIL-MSGID: 1772715948126903592 Promote the ASSERT(), which is quite dead code in KVM, into a KVM_BUG_ON() for KVM's sanity check that CR4.PAE=1 if the vCPU is in long mode when performing a walk of guest page tables. The sanity is quite cheap since neither EFER nor CR4.PAE requires a VMREAD, especially relative to the cost of walking the guest page tables. More importantly, the sanity check would have prevented the true badness fixed by commit 112e66017bff ("KVM: nVMX: add missing consistency checks for CR0 and CR4"). The missed consistency check resulted in some versions of KVM corrupting the on-stack guest_walker structure due to KVM thinking there are 4/5 levels of page tables, but wiring up the MMU hooks to point at the paging32 implementation, which only allocates space for two levels of page tables in "struct guest_walker32". Queue a page fault for injection if the assertion fails, as both callers, FNAME(gva_to_gpa) and FNAME(walk_addr_generic), assume that walker.fault contains sane info on a walk failure. E.g. not populating the fault info could result in KVM consuming and/or exposing uninitialized stack data before the vCPU is kicked out to userspace, which doesn't happen until KVM checks for KVM_REQ_VM_DEAD on the next enter. Move the check below the initialization of "pte_access" so that the aforementioned to-be-injected page fault doesn't consume uninitialized stack data. The information _shouldn't_ reach the guest or userspace, but there's zero downside to being paranoid in this case. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/paging_tmpl.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/mmu/paging_tmpl.h b/arch/x86/kvm/mmu/paging_tmpl.h index a3fc7c1a7f8d..f8d358226ac6 100644 --- a/arch/x86/kvm/mmu/paging_tmpl.h +++ b/arch/x86/kvm/mmu/paging_tmpl.h @@ -338,7 +338,6 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker, } #endif walker->max_level = walker->level; - ASSERT(!(is_long_mode(vcpu) && !is_pae(vcpu))); /* * FIXME: on Intel processors, loads of the PDPTE registers for PAE paging @@ -348,6 +347,17 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker, nested_access = (have_ad ? PFERR_WRITE_MASK : 0) | PFERR_USER_MASK; pte_access = ~0; + + /* + * Queue a page fault for injection if this assertion fails, as callers + * assume that walker.fault contains sane info on a walk failure. I.e. + * avoid making the situation worse by inducing even worse badness + * between when the assertion fails and when KVM kicks the vCPU out to + * userspace (because the VM is bugged). + */ + if (KVM_BUG_ON(is_long_mode(vcpu) && !is_pae(vcpu), vcpu->kvm)) + goto error; + ++walker->level; do { From patchwork Sat Jul 29 00:47:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127948 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp792818vqg; Fri, 28 Jul 2023 18:41:50 -0700 (PDT) X-Google-Smtp-Source: APBJJlE2Ew5T/eyz7999fWx7wcRU0yIjinUmctRF8ZzYzUODiilrLOnu3KMJXJ/Caw1okA8DGZ8H X-Received: by 2002:a17:907:a0c6:b0:96f:8666:5fc4 with SMTP id hw6-20020a170907a0c600b0096f86665fc4mr799350ejc.50.1690594910573; Fri, 28 Jul 2023 18:41:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690594910; cv=none; d=google.com; s=arc-20160816; b=oxFcpuTuOZOVRHUqauVx4StTG3SIwedhHWAGlQ+OnT03ojkEzA7ZWwIhBU/NAA1g4J 0ddkyHQ+cXo31ppp96NDBjglCmE2aoRVCJ7ZG4Z3Q10ktvnUAxeAXYDv2E9QTK9OXCXI Wi+49ikjgcB+tJ46X+m0D0iZEdqWgGDHbY7Bu+uri20N3DybBDDhW2+6myZ2xvw/N+HO 7ZIyeVlnAqn4OLVtxrwI2chi/io0H/X33wReIqbDPDuMejkwrA+WJJESG52UZ0ac0TWF l5QoZEAGQJYtDofg65i7nfGQdUcV3KBS7fqljgtjzwStViAxg2JadTQ6EbvO85/KsCj8 H8lg== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=RfXXcqZt8v+vEMviQaB4ha8ro96aOmyFYUDExhL33FE=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=lV1kO/04iSIcbn5Z1g3Z6eGOvSdp9Vb6RcoM+GR4ce0FdUEML+HYJvg22z+KuN7Tzm nIpUeSwL0+YvFaPfmoL6DlY4SLhCXv9VcLzZMvEyIy1sfCnFSnVkELpvaMityr1F3pEB ckW4MF3ScXukwF3nJC5URMZLt+bpsGmhDOGpz4qavHnOQDK/gBhCrJxDHy/zS0YmD8iN AvLsA1BWIK4UgOEMx3GGnjQkDqv9zi5VJ6IkAFfKdHle7gNUpyzchy//UdmFZX3gf3Jb wehnQVh8ZGPLcBbREWRyScFCks119wAPFGa+9QnFGd7UOO+cVg72Zq4zhU/5IDcLBS7G Bg7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=D+29wkyj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id jx14-20020a170906ca4e00b0099363f18293si3565849ejb.124.2023.07.28.18.41.27; Fri, 28 Jul 2023 18:41:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=D+29wkyj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S229665AbjG2Atj (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41704 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236991AbjG2AtX (ORCPT ); Fri, 28 Jul 2023 20:49:23 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 35D75421D for ; Fri, 28 Jul 2023 17:48:45 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-d1851c52f3dso2422799276.1 for ; Fri, 28 Jul 2023 17:48:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591661; x=1691196461; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=RfXXcqZt8v+vEMviQaB4ha8ro96aOmyFYUDExhL33FE=; b=D+29wkyjLypapSHoJge1mpaMfPBHgyoydIEBosT6gdt3ZIvLSr9lW379+2twDS+9NN x8d9jNCpmbUF5qFqVmqFdk+q9BOi6GRROVAhUNufVZHuH6xCedDb3S1GXzaf2+a6ZkYX WcXffBZ+IgjsHuqASHKxYMFPAvTTogbstpNmvwdmcZfL5QGGqsYFEVkYc1tStEL2L7sv dyx2fHZlILnrsMXJcxTxFXr21doH+/dcswCPHamiZcg0CTfh3gRu70ahmuRwaMmXANTi 8kjx7ldkDSK4tsFuKQyxCI2MgK/iVhypCHeoILCPx/DAHwGdTB54OBNagVdOVid8O9KI lAUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591661; x=1691196461; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RfXXcqZt8v+vEMviQaB4ha8ro96aOmyFYUDExhL33FE=; b=T46VBhX77jS4T8hsNiWk9kDgrO4axsDjtGLSmTaHvksmnEsp+tYIqhKkytG7vTzabx sG8pq/cKEnhRbrxDQjZzYBBhLzAQ9RqklMNFUPIqD38hVVomoXMLtLC0cL0HG1Nu5Cdn CYPJIFr6Pd+Ar7hWKv2gqDF9X5K125zz6/kEQeNXHntTlkDmfKS7/TOP7h7M0ChXMnoS EKwGKkjEFi3IIixHNtiyoUoSXBmp+WNsiEN3mwCSqWstKL6KGt2DFHMk9paJq7yWCrkV ZMwFcUxkGLJQrMfvn/XkbM3eR3aHB7uipZkdGdGhjC1RystKKVi5ltAo4fcKM0T7UVj2 59Rw== X-Gm-Message-State: ABy/qLYZqKvWTDndV5p91Y7HsCj6HHY/sq3QoF/HJMwGR+t45sDrdCTm Lzi++58WxucNrIIMSkJ4uVhQXEcywJs= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6902:100f:b0:cf9:3564:33cc with SMTP id w15-20020a056902100f00b00cf9356433ccmr24322ybt.13.1690591660993; Fri, 28 Jul 2023 17:47:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:19 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-10-seanjc@google.com> Subject: [PATCH v3 09/12] KVM: x86/mmu: Replace MMU_DEBUG with proper KVM_PROVE_MMU Kconfig From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772717248567640251 X-GMAIL-MSGID: 1772717248567640251 Replace MMU_DEBUG, which requires manually modifying KVM to enable the macro, with a proper Kconfig, KVM_PROVE_MMU. Now that pgprintk() and rmap_printk() are gone, i.e. the macro guards only KVM_MMU_WARN_ON() and won't flood the kernel logs, enabling the option for debug kernels is both desirable and feasible. Signed-off-by: Sean Christopherson Reviewed-by: Philippe Mathieu-Daudé --- arch/x86/kvm/Kconfig | 13 +++++++++++++ arch/x86/kvm/mmu/mmu.c | 2 +- arch/x86/kvm/mmu/mmu_internal.h | 4 +--- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig index 89ca7f4c1464..4e5a282cc518 100644 --- a/arch/x86/kvm/Kconfig +++ b/arch/x86/kvm/Kconfig @@ -138,6 +138,19 @@ config KVM_XEN If in doubt, say "N". +config KVM_PROVE_MMU + bool "Prove KVM MMU correctness" + depends on DEBUG_KERNEL + depends on KVM + depends on EXPERT + help + Enables runtime assertions in KVM's MMU that are too costly to enable + in anything remotely resembling a production environment, e.g. this + gates code that verifies a to-be-freed page table doesn't have any + present SPTEs. + + If in doubt, say "N". + config KVM_EXTERNAL_WRITE_TRACKING bool diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index d46f77734f30..21ced900c3e9 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -1695,7 +1695,7 @@ bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) static void kvm_mmu_check_sptes_at_free(struct kvm_mmu_page *sp) { -#ifdef MMU_DEBUG +#ifdef CONFIG_KVM_PROVE_MMU int i; for (i = 0; i < SPTE_ENT_PER_PAGE; i++) { diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h index cfe925fefa68..40e74db6a7d5 100644 --- a/arch/x86/kvm/mmu/mmu_internal.h +++ b/arch/x86/kvm/mmu/mmu_internal.h @@ -6,9 +6,7 @@ #include #include -#undef MMU_DEBUG - -#ifdef MMU_DEBUG +#ifdef CONFIG_KVM_PROVE_MMU #define KVM_MMU_WARN_ON(x) WARN_ON_ONCE(x) #else #define KVM_MMU_WARN_ON(x) do { } while (0) From patchwork Sat Jul 29 00:47:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127940 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp791828vqg; Fri, 28 Jul 2023 18:38:33 -0700 (PDT) X-Google-Smtp-Source: APBJJlGrEX6L7NzILqI00fKZsRSBQZAu3FZ12aBab0nAlypc7InDK+LyawWM0beMNonzltEq7lJs X-Received: by 2002:a17:907:2ceb:b0:992:d013:1132 with SMTP id hz11-20020a1709072ceb00b00992d0131132mr710366ejc.1.1690594712935; Fri, 28 Jul 2023 18:38:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690594712; cv=none; d=google.com; s=arc-20160816; b=KGdM4BlqzIeBpaeyGaNm1Y1vnnpeUsiZS10Zj9VP1N/k2LlFPztjwV/+2el81+S3PZ LFKdbodg0kc69onsLf/X0nxmdXcA0ulM5582gwm665Qw7c5um1hvTlezuCuC16CZVsS1 yiEWK+HTFEemxypbQSS7pyFpoaGSWc9fKgFrCUvWjVh2+je9/Epm/vnc4ZGof5yKSxPM Xhrdjkt6jFerqiwXT9vet2+5pDtDouRT9pl0mGLJvg1PErKqkKdnB+iulPugLAD3FdiK GfsdAdfP+egrVIkEdc00UEL7XkyrkNwHg1oUvt8qj0Bm4qQeG3Gud1tpS98MWVfaFWxn cI6A== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=N+/CFCalnN5xPq+FJCMcppiU8/rhXPIN/0hig0msSo8=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=QQZqpPr/rV7YFRXPft3M20fDuFS18Gvbrv14XD9dkzJrk73P2/1ZrgLA2JdEWU6CBM 7g/3d687v608dJATwNsexIxKY1hTPmkCHcANX7eUfRXWNzcGdz7bFUmA9twv4aBmPsqs wE2E9zDs2WKV6pKihHZxbEUdzYgeIQ/KwFsph4x3QfOTS0k1mACYbbS+slyw4+hrDgEM ljrTZ42++QyP0zF/WCRq8eEt3qcR3KwoM5MOwrB/hXJnMS9LV5t8SYgqe/AdRCT4mj0X jHthiMetLxHlZOV+6GvZ8121zpGwkJVySqjlT6b3ehdrtvG8vsLlNQgPVk7/feKU4w7X VBDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="BH/vnXUY"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id pk18-20020a170906d7b200b00994936a6f11si469975ejb.957.2023.07.28.18.38.09; Fri, 28 Jul 2023 18:38:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="BH/vnXUY"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S237103AbjG2Atv (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41272 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237018AbjG2AtY (ORCPT ); Fri, 28 Jul 2023 20:49:24 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8C25A44B3 for ; Fri, 28 Jul 2023 17:48:47 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id d9443c01a7336-1bba9a0da10so18241735ad.2 for ; Fri, 28 Jul 2023 17:48:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591663; x=1691196463; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=N+/CFCalnN5xPq+FJCMcppiU8/rhXPIN/0hig0msSo8=; b=BH/vnXUYOHXy6b1NYhugXlcJVFxpFBACy6MHTmpwAHEsFt0Tb+2O/PuTM8uyBWxsoQ cd5pWacOlW0dxtb4jtK1Afkp/SxeOcFxaSP0qJc57vUNjKs4X/qRNdaMreb7VlI+ErVC 2rfrkdgt3VGWiDXrrjTxqMkVSfQLkMfdiVA16UsPo8d8xVWwu50tMwFGe4TMQquS5u7N HpNWkop5hN6b/L/CZilAtEUTmFhsYBWaPAkPDoTCqqjp3T6p6gv/vdQamw0Skme2wCHf yDn9ZEPPIsvPqarpWNphc+E34E3RjRHHRHoZgzlk4quBE7XtiCjjBXGnN4b047a43NX6 CAWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591663; x=1691196463; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=N+/CFCalnN5xPq+FJCMcppiU8/rhXPIN/0hig0msSo8=; b=W76yYPlx/i4wDYwcqbeZyB3ijoN/h1OS67YuWpPMUf8Vzcft/koom+WaR7owxTxXoW ZkpNv9NtvGszUJQCTQbrqsUc9r+lk/w/SWJsqo0/GzcQ5io2iqZYx+9DG130tFU2jluQ WqGKxhuspHejZrQn+GdUBnfw86bUXBwD2bhj+5VPF0CYLIerxmw/8LCW+5xNskjmfQ9O Qz63J+2RuWCu4BYVM1OKNW/c38Plv/ZzavMn31j8WGeuiidCWmUa7ULCQwJ8jRWkMN7T IqL/roT8bXCsxpokoyj1McF4oI9OBlWYhi2PfG72q0VeP22nE0boNwmwlbbSPx9g2RWe BwHA== X-Gm-Message-State: ABy/qLbTicaytdvfGI8Xx65A5BhYd+UEMXSGXAfIESU5VrIcSzHR5/lH 7k8PIS7ffL7gkXA5rKEjJrXEo3fNPzQ= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:e748:b0:1b5:61d3:dae5 with SMTP id p8-20020a170902e74800b001b561d3dae5mr14320plf.1.1690591663061; Fri, 28 Jul 2023 17:47:43 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:20 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-11-seanjc@google.com> Subject: [PATCH v3 10/12] KVM: x86/mmu: Use BUILD_BUG_ON_INVALID() for KVM_MMU_WARN_ON() stub From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772717041531516526 X-GMAIL-MSGID: 1772717041531516526 Use BUILD_BUG_ON_INVALID() instead of an empty do-while loop to stub out KVM_MMU_WARN_ON() when CONFIG_KVM_PROVE_MMU=n, that way _some_ build issues with the usage of KVM_MMU_WARN_ON() will be dected even if the kernel is using the stubs, e.g. basic syntax errors will be detected. Signed-off-by: Sean Christopherson Reviewed-by: Philippe Mathieu-Daudé --- arch/x86/kvm/mmu/mmu_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h index 40e74db6a7d5..f1ef670058e5 100644 --- a/arch/x86/kvm/mmu/mmu_internal.h +++ b/arch/x86/kvm/mmu/mmu_internal.h @@ -9,7 +9,7 @@ #ifdef CONFIG_KVM_PROVE_MMU #define KVM_MMU_WARN_ON(x) WARN_ON_ONCE(x) #else -#define KVM_MMU_WARN_ON(x) do { } while (0) +#define KVM_MMU_WARN_ON(x) BUILD_BUG_ON_INVALID(x) #endif /* Page table builder macros common to shadow (host) PTEs and guest PTEs. */ From patchwork Sat Jul 29 00:47:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127976 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp814482vqg; Fri, 28 Jul 2023 19:56:18 -0700 (PDT) X-Google-Smtp-Source: APBJJlHQHREtTPfVvC9nXAN0LJBC3LkFaFuEySbHwmPlO/4AbODAC29v/9IaJW7nZ+T1mDctXBXW X-Received: by 2002:a17:90b:4c89:b0:268:3582:a6be with SMTP id my9-20020a17090b4c8900b002683582a6bemr3447345pjb.33.1690599377725; Fri, 28 Jul 2023 19:56:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690599377; cv=none; d=google.com; s=arc-20160816; b=HpwgcLai7Df3KBVn6n6UfKeQBi5c23beDjBYkKEC9sjm+LUwdUifiSIIsWVtonGAEM wx39BmteNMJWRkjMWWqqj8bBwyCarQDs6pFfa4/g8wAlEcMOxqYo53NI56H95HOHNMUl hqrK5GEHa4iMEkAIUeUI0sD+QhTjzNx+3Jszh1qw9LcMU8h8Y82DNR606Ar9SSGa6UlC Pd1TnUeMBHmYG51Mnd/hcYecinW3Kia1SP3WEQO0bRCSjgghUsXXR4OfFAsm/76TP4Uc OmkMa6BFLpyCVMLvuPcxxip5p2GiDtnrRVBSNzyOQc13kRXMDr6I6W3tp+qsw6BxGgMa iYtA== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=wQPXzO6Hsu0iSJF0dOCAsCOFxRTne/hu/L+54JaWJC0=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=Q0plgIayvu/grWe7di4bvLSfEef9etJa1qtPCBl5/W3gjCot/G/2tdozcc/bAaARcd ZXS2OdgfnDxMcl6JjzCSP0qEUp1wYTW2+W3hrlBC7JSM1esP8De329eWJF4UBabCC/3v dVHYP96ZvrzyJvQ+YTEKLN2a2DyIW1cxdNvPDtO0iWMPef1Bf9wnb3fPaG1zfAln4mmY J1ZVe+pexxzvV9fu9kfPKDRZ2qJILyl2mOQY7sB6Ml1YV4SCqeDs1eUu20LDDnOrUkcY 4B/a6p4wBAEO2KzCo8eovP6Be8FdHes12AC234d6/Np2GSFuYgTT8K18a43Ypu55bdms uDrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=xk+sw9iH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n3-20020a170903404300b001b9ea40d26fsi3757124pla.295.2023.07.28.19.56.04; Fri, 28 Jul 2023 19:56:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=xk+sw9iH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S237112AbjG2At7 (ORCPT + 99 others); Fri, 28 Jul 2023 20:49:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236579AbjG2At3 (ORCPT ); Fri, 28 Jul 2023 20:49:29 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7CC1544B2 for ; Fri, 28 Jul 2023 17:48:50 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d9443c01a7336-1bb98659f3cso18237405ad.3 for ; Fri, 28 Jul 2023 17:48:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591664; x=1691196464; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=wQPXzO6Hsu0iSJF0dOCAsCOFxRTne/hu/L+54JaWJC0=; b=xk+sw9iHBzeSkdbItPNiudL91ectUHw+VPj43a93ptNlkiVnFBWSaIzTGo+pBOZrVB ZMZwVCYflhDXeIrkHf6UKFSk7SIyUbjztsAG4Mw4KJRCYnGySF3Nt3HKUeKczPqEU4zG SslR1c0snG5jb8rT1lS2+NufHyLHp+wt0HthtHJpu1qRkzc6nMkJKDnij6sEUAbjCtEF xE35oyH827tgDTbyWBzgzeJAkn0BQPrkDeAgl61AfpacjncbL2Nm7WLmKYPYqFiDjg9q xz3BLkHqH3lpajail7UUUR1jWV+XCNuYepHBeCKE68teAVQAlpsg/L+kiDJJmlR5RdJi 2sMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591664; x=1691196464; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=wQPXzO6Hsu0iSJF0dOCAsCOFxRTne/hu/L+54JaWJC0=; b=apQBx61i2+MqrsBKJqGf8Ju1GycCJRARt98ZtKz9d1i3WKn+70YT4KGr/qUdCUvc7m gGqPf5KgM7c/O2gAO4FMip6Wq6plXvEYZPE9VOB7bqsn0Mlb7YXXXppD0hVG/68cvKVr ScH00Bn55s1mR9asnhkvu3xCR0QKGkjJkwg6E88oQZvJ2bxERvYZAPK12pndlL0vCTTp VkvqurFSElilSg23O8hV1fZmdINTc9cTGtiMtQLcyM5LjyIpTnJ8/TD9NTpbUTApIGjN /9M67r84f8cCp/7/oBOwA0cLrgXRY0SkqHT6xpLIOxWtCtHJfWHL6VjIKsZn8eeeqlEn r44w== X-Gm-Message-State: ABy/qLakMAsYLmpOtAaFOfnp8NKZmMyJt+omkFlG3mgfRMvSuAqTx66A QusSfnf8xtISB9ssffK+wkK0p68WM1M= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:d4c9:b0:1bb:8c42:79f4 with SMTP id o9-20020a170902d4c900b001bb8c4279f4mr11219plg.2.1690591664685; Fri, 28 Jul 2023 17:47:44 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:21 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-12-seanjc@google.com> Subject: [PATCH v3 11/12] KVM: x86/mmu: Plumb "struct kvm" all the way to pte_list_remove() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772721933050180611 X-GMAIL-MSGID: 1772721933050180611 From: Mingwei Zhang Plumb "struct kvm" all the way to pte_list_remove() to allow the usage of KVM_BUG() and/or KVM_BUG_ON(). This will allow killing only the offending VM instead of doing BUG() if the kernel is built with CONFIG_BUG_ON_DATA_CORRUPTION=n, i.e. does NOT want to BUG() if KVM's data structures (rmaps) appear to be corrupted. Signed-off-by: Mingwei Zhang [sean: tweak changelog] Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 21ced900c3e9..67a25c957a16 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -965,7 +965,8 @@ static int pte_list_add(struct kvm_mmu_memory_cache *cache, u64 *spte, return count; } -static void pte_list_desc_remove_entry(struct kvm_rmap_head *rmap_head, +static void pte_list_desc_remove_entry(struct kvm *kvm, + struct kvm_rmap_head *rmap_head, struct pte_list_desc *desc, int i) { struct pte_list_desc *head_desc = (struct pte_list_desc *)(rmap_head->val & ~1ul); @@ -1001,7 +1002,8 @@ static void pte_list_desc_remove_entry(struct kvm_rmap_head *rmap_head, mmu_free_pte_list_desc(head_desc); } -static void pte_list_remove(u64 *spte, struct kvm_rmap_head *rmap_head) +static void pte_list_remove(struct kvm *kvm, u64 *spte, + struct kvm_rmap_head *rmap_head) { struct pte_list_desc *desc; int i; @@ -1020,7 +1022,8 @@ static void pte_list_remove(u64 *spte, struct kvm_rmap_head *rmap_head) while (desc) { for (i = 0; i < desc->spte_count; ++i) { if (desc->sptes[i] == spte) { - pte_list_desc_remove_entry(rmap_head, desc, i); + pte_list_desc_remove_entry(kvm, rmap_head, + desc, i); return; } } @@ -1035,7 +1038,7 @@ static void kvm_zap_one_rmap_spte(struct kvm *kvm, struct kvm_rmap_head *rmap_head, u64 *sptep) { mmu_spte_clear_track_bits(kvm, sptep); - pte_list_remove(sptep, rmap_head); + pte_list_remove(kvm, sptep, rmap_head); } /* Return true if at least one SPTE was zapped, false otherwise */ @@ -1110,7 +1113,7 @@ static void rmap_remove(struct kvm *kvm, u64 *spte) slot = __gfn_to_memslot(slots, gfn); rmap_head = gfn_to_rmap(gfn, sp->role.level, slot); - pte_list_remove(spte, rmap_head); + pte_list_remove(kvm, spte, rmap_head); } /* @@ -1757,16 +1760,16 @@ static void mmu_page_add_parent_pte(struct kvm_mmu_memory_cache *cache, pte_list_add(cache, parent_pte, &sp->parent_ptes); } -static void mmu_page_remove_parent_pte(struct kvm_mmu_page *sp, +static void mmu_page_remove_parent_pte(struct kvm *kvm, struct kvm_mmu_page *sp, u64 *parent_pte) { - pte_list_remove(parent_pte, &sp->parent_ptes); + pte_list_remove(kvm, parent_pte, &sp->parent_ptes); } -static void drop_parent_pte(struct kvm_mmu_page *sp, +static void drop_parent_pte(struct kvm *kvm, struct kvm_mmu_page *sp, u64 *parent_pte) { - mmu_page_remove_parent_pte(sp, parent_pte); + mmu_page_remove_parent_pte(kvm, sp, parent_pte); mmu_spte_clear_no_track(parent_pte); } @@ -2481,7 +2484,7 @@ static void validate_direct_spte(struct kvm_vcpu *vcpu, u64 *sptep, if (child->role.access == direct_access) return; - drop_parent_pte(child, sptep); + drop_parent_pte(vcpu->kvm, child, sptep); kvm_flush_remote_tlbs_sptep(vcpu->kvm, sptep); } } @@ -2499,7 +2502,7 @@ static int mmu_page_zap_pte(struct kvm *kvm, struct kvm_mmu_page *sp, drop_spte(kvm, spte); } else { child = spte_to_child_sp(pte); - drop_parent_pte(child, spte); + drop_parent_pte(kvm, child, spte); /* * Recursively zap nested TDP SPs, parentless SPs are @@ -2530,13 +2533,13 @@ static int kvm_mmu_page_unlink_children(struct kvm *kvm, return zapped; } -static void kvm_mmu_unlink_parents(struct kvm_mmu_page *sp) +static void kvm_mmu_unlink_parents(struct kvm *kvm, struct kvm_mmu_page *sp) { u64 *sptep; struct rmap_iterator iter; while ((sptep = rmap_get_first(&sp->parent_ptes, &iter))) - drop_parent_pte(sp, sptep); + drop_parent_pte(kvm, sp, sptep); } static int mmu_zap_unsync_children(struct kvm *kvm, @@ -2575,7 +2578,7 @@ static bool __kvm_mmu_prepare_zap_page(struct kvm *kvm, ++kvm->stat.mmu_shadow_zapped; *nr_zapped = mmu_zap_unsync_children(kvm, sp, invalid_list); *nr_zapped += kvm_mmu_page_unlink_children(kvm, sp, invalid_list); - kvm_mmu_unlink_parents(sp); + kvm_mmu_unlink_parents(kvm, sp); /* Zapping children means active_mmu_pages has become unstable. */ list_unstable = *nr_zapped; @@ -2933,7 +2936,7 @@ static int mmu_set_spte(struct kvm_vcpu *vcpu, struct kvm_memory_slot *slot, u64 pte = *sptep; child = spte_to_child_sp(pte); - drop_parent_pte(child, sptep); + drop_parent_pte(vcpu->kvm, child, sptep); flush = true; } else if (pfn != spte_to_pfn(*sptep)) { drop_spte(vcpu->kvm, sptep); From patchwork Sat Jul 29 00:47:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128013 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp877123vqg; Fri, 28 Jul 2023 23:28:55 -0700 (PDT) X-Google-Smtp-Source: APBJJlGmrePqTpaEIaknQb5JUDWqRDLFlUzj9onouasxlV6RmgNn93C3DUkzGarAMkGz/xMq01/I X-Received: by 2002:a05:6a20:1587:b0:12e:3394:e2b6 with SMTP id h7-20020a056a20158700b0012e3394e2b6mr4767046pzj.8.1690612135076; Fri, 28 Jul 2023 23:28:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690612135; cv=none; d=google.com; s=arc-20160816; b=SWn7XvWddfLVPorJLx5CYLBs0FcMhQQwJkqMXazULmK76SP9V1rhyWH1Ineaf4kFpH MDwuKY5eonzYHAyEeTn8Ye5+tMg/2cL8EmEaeiiKcQVD5vk9Vi+wMfFJOC0N/oLZaNXk 6G+xdjUvB6q7eMuXSyYV13ftWnxpRk7fIYjdM6P+7N3bPYobFGTEcLAK2/0VmjE7s8+/ Mld0DstlD1DZsVm+1/OrkQif+ZOGg3EBu2cR6896sV3xpBKPCqaNyVHZvdTZw92rveDA kVYgeWrxf5cE2R/UAcpZdPXIk6ur4PBe9+yRdxpwMto59vWQItStVbRFbyL5s4qHoXWW otQA== 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:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=LOrLJZZ+Gkhi9DkbaZIQBIYsMHKPcX3CcfpaZ/5IaME=; fh=sOnAx2GuCQaI5IJu7Mo1xgLCDrPH4l5HM1pSkvn/pIo=; b=YEgYI7uPVd38tDAKGpXn+YnP3qaVosEFWUn96dORoMRaIYPdTm/B0E/PMcLe5aMQ/a C0EeG7BlI4WzgO4RwlZRXNSNaNP5T/B5Of4nL4y9YWTZ7+M1VF4tGgwg3AyjuxGHXIjT JJJlGm2Gm+FayMbbLuCi80OpEnTCwgSk2yyybORy5rte5rJw9rXvLnP2c1CqzD+0osqi TAKyqcY48rTzGKM3Nyi0zADoA4qM3hhaZt8s7jtt/ngzGbITAcWoiuIHq+SJYLXGIp1e YR7b5ChFUFysfwt/Q5gh1FTj2f4HZmIgKvGru7aKZNwHke3GZA09nxLEgtYcdsaSrQMp aVzA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=wJPC2MvJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d7-20020a056a0010c700b006871aa6882bsi910919pfu.165.2023.07.28.23.28.38; Fri, 28 Jul 2023 23:28:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=wJPC2MvJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S237069AbjG2AuP (ORCPT + 99 others); Fri, 28 Jul 2023 20:50:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237083AbjG2Ati (ORCPT ); Fri, 28 Jul 2023 20:49:38 -0400 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1AFBC4EDB for ; Fri, 28 Jul 2023 17:49:10 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id d2e1a72fcca58-686baf1c2fbso2246937b3a.0 for ; Fri, 28 Jul 2023 17:49:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690591666; x=1691196466; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=LOrLJZZ+Gkhi9DkbaZIQBIYsMHKPcX3CcfpaZ/5IaME=; b=wJPC2MvJipPsQhRwbozBA3HvDrT0a5QCegS41zV5HxoUZ0Y6ijfEwm+l6nci1rioY8 hJvaIEMoKCVJicvr9/kZ/an8mz77VT84yBHhpPuT8o84KkzdLNC7eeOpFUjugL86uoN8 RbH4OMwhrRolWZ53p5VBH1t+MNMyrzktWrZPoM891QxOvYGn3A45JjlLbhrqePQO2emM /DQ4Ltj+KKkKQaoXChzdo08lSUNXUEJWG/vBjKQEXf66jFhqn1A9yHDuiRHichM4as62 nWjotbjNiYZvO1RMYdMKmOj2y9Gh1m3SvGyZIHBp6m+07bn1x6JGJA/cTeBoKTkH2mz1 CZgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690591666; x=1691196466; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=LOrLJZZ+Gkhi9DkbaZIQBIYsMHKPcX3CcfpaZ/5IaME=; b=aWHHDSUE01I7rkddVv1AZ5mmYESrPfIbaxnJEnokgjkeYGsXjq5Z63ubVrd+Ci3V+X HeZDou/fEJ5tj7jJRh1vuF5pnDw1k441lro6Pwk7vJCDngLnV3AHth0KnV0PaSEdT+JM vQ9V+yzknxChLvFF67DkBWBrZFm3pkBCTgUiEeBugG/KWtuyd1vHGYLcghMFBPf6gKRa ovT9p2E/sjTzLGOYNBZu6gL9VGbW2lkUuirYCzWMJWsbmtDLiw/wwh4kFSiL7NgknQXS DbqdITEbhha4gR4g3AQXvN70L4q9jYh48AGPOd5X+GfeU5gLam0oyeWXLDA4OjvaDmCl lMdw== X-Gm-Message-State: ABy/qLY4/nq0lFQ20ep/mXMZyIYHCXYdtbLf49nslGLRWkPqTgWovxz1 O+btOUa3UI0VwwLKVEh8stR5WtRUqcE= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1382:b0:686:6234:5537 with SMTP id t2-20020a056a00138200b0068662345537mr22082pfg.1.1690591666681; Fri, 28 Jul 2023 17:47:46 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 17:47:22 -0700 In-Reply-To: <20230729004722.1056172-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729004722.1056172-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729004722.1056172-13-seanjc@google.com> Subject: [PATCH v3 12/12] KVM: x86/mmu: BUG() in rmap helpers iff CONFIG_BUG_ON_DATA_CORRUPTION=y From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Mingwei Zhang , David Matlack , Jim Mattson X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772735310092773543 X-GMAIL-MSGID: 1772735310092773543 Introduce KVM_BUG_ON_DATA_CORRUPTION() and use it in the low-level rmap helpers to convert the existing BUG()s to WARN_ON_ONCE() when the kernel is built with CONFIG_BUG_ON_DATA_CORRUPTION=n, i.e. does NOT want to BUG() on corruption of host kernel data structures. Environments that don't have infrastructure to automatically capture crash dumps, i.e. aren't likely to enable CONFIG_BUG_ON_DATA_CORRUPTION=y, are typically better served overall by WARN-and-continue behavior (for the kernel, the VM is dead regardless), as a BUG() while holding mmu_lock all but guarantees the _best_ case scenario is a panic(). Make the BUG()s conditional instead of removing/replacing them entirely as there's a non-zero chance (though by no means a guarantee) that the damage isn't contained to the target VM, e.g. if no rmap is found for a SPTE then KVM may be double-zapping the SPTE, i.e. has already freed the memory the SPTE pointed at and thus KVM is reading/writing memory that KVM no longer owns. Link: https://lore.kernel.org/all/20221129191237.31447-1-mizhang@google.com Suggested-by: Mingwei Zhang Cc: David Matlack Cc: Jim Mattson Reviewed-by: Mingwei Zhang Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 21 ++++++++++----------- include/linux/kvm_host.h | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 67a25c957a16..92a3f40a6bb3 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -977,7 +977,7 @@ static void pte_list_desc_remove_entry(struct kvm *kvm, * when adding an entry and the previous head is full, and heads are * removed (this flow) when they become empty. */ - BUG_ON(j < 0); + KVM_BUG_ON_DATA_CORRUPTION(j < 0, kvm); /* * Replace the to-be-freed SPTE with the last valid entry from the head @@ -1008,14 +1008,13 @@ static void pte_list_remove(struct kvm *kvm, u64 *spte, struct pte_list_desc *desc; int i; - if (!rmap_head->val) { - pr_err("%s: %p 0->BUG\n", __func__, spte); - BUG(); - } else if (!(rmap_head->val & 1)) { - if ((u64 *)rmap_head->val != spte) { - pr_err("%s: %p 1->BUG\n", __func__, spte); - BUG(); - } + if (KVM_BUG_ON_DATA_CORRUPTION(!rmap_head->val, kvm)) + return; + + if (!(rmap_head->val & 1)) { + if (KVM_BUG_ON_DATA_CORRUPTION((u64 *)rmap_head->val != spte, kvm)) + return; + rmap_head->val = 0; } else { desc = (struct pte_list_desc *)(rmap_head->val & ~1ul); @@ -1029,8 +1028,8 @@ static void pte_list_remove(struct kvm *kvm, u64 *spte, } desc = desc->more; } - pr_err("%s: %p many->many\n", __func__, spte); - BUG(); + + KVM_BUG_ON_DATA_CORRUPTION(true, kvm); } } diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 9d3ac7720da9..cb86108c624d 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -865,6 +865,25 @@ static inline void kvm_vm_bugged(struct kvm *kvm) unlikely(__ret); \ }) +/* + * Note, "data corruption" refers to corruption of host kernel data structures, + * not guest data. Guest data corruption, suspected or confirmed, that is tied + * and contained to a single VM should *never* BUG() and potentially panic the + * host, i.e. use this variant of KVM_BUG() if and only if a KVM data structure + * is corrupted and that corruption can have a cascading effect to other parts + * of the hosts and/or to other VMs. + */ +#define KVM_BUG_ON_DATA_CORRUPTION(cond, kvm) \ +({ \ + bool __ret = !!(cond); \ + \ + if (IS_ENABLED(CONFIG_BUG_ON_DATA_CORRUPTION)) \ + BUG_ON(__ret); \ + else if (WARN_ON_ONCE(__ret && !(kvm)->vm_bugged)) \ + kvm_vm_bugged(kvm); \ + unlikely(__ret); \ +}) + static inline void kvm_vcpu_srcu_read_lock(struct kvm_vcpu *vcpu) { #ifdef CONFIG_PROVE_RCU