From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 542C8EB64D9 for ; Thu, 15 Jun 2023 18:26:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 72B3B6B0072; Thu, 15 Jun 2023 14:26:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6DB9E6B0074; Thu, 15 Jun 2023 14:26:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5A43C8E0001; Thu, 15 Jun 2023 14:26:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 4685D6B0072 for ; Thu, 15 Jun 2023 14:26:56 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 0E9DE1A0101 for ; Thu, 15 Jun 2023 18:26:56 +0000 (UTC) X-FDA: 80905813632.25.9F56C2F Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) by imf11.hostedemail.com (Postfix) with ESMTP id 29CDC40003 for ; Thu, 15 Jun 2023 18:26:53 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=Wm4XtSwy; spf=pass (imf11.hostedemail.com: domain of 37FeLZAYKCPMnZVieXbjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--seanjc.bounces.google.com designates 209.85.214.202 as permitted sender) smtp.mailfrom=37FeLZAYKCPMnZVieXbjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--seanjc.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686853614; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=v5j0wCZPnfsM4/SjEwwVDfexZdOw0uK6iqseA0HQUzE=; b=zGnpV0mzccJy1wjHznBV4fifpZrBPoGVtVongsjRSVILZmVw9e67M7fm/D0FYpq0UVwOrY ay1yd6MJG86zicqsLR/4NNHCxbgtKT0hjpFQbb8E2L70KtjHFEgUSSCDrPlbnZglJg1mW6 Q4JsJkgG5KkhQ/+sATjMXZXZrJxbzD0= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=Wm4XtSwy; spf=pass (imf11.hostedemail.com: domain of 37FeLZAYKCPMnZVieXbjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--seanjc.bounces.google.com designates 209.85.214.202 as permitted sender) smtp.mailfrom=37FeLZAYKCPMnZVieXbjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--seanjc.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686853614; a=rsa-sha256; cv=none; b=4LSbCf0Aui7FjC7PBNofF1XrwIGj3UknZZdDKkcLz9m8xf8oEWjJe1Wl79qd7HJ6HeQ2sh DWbajqHrnvxUAUkoLBQ1PzBeoaIZGvfGxXHpaXDvihlW1AkgsMEQHrAIfibBHz3N1JXJ2W Rirmu56RnIa1wOiqDqFpWS8utOEDQFg= Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-1b516cb26c9so7792965ad.0 for ; Thu, 15 Jun 2023 11:26:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686853613; x=1689445613; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=v5j0wCZPnfsM4/SjEwwVDfexZdOw0uK6iqseA0HQUzE=; b=Wm4XtSwypXc7idNv17hm9NcNzxzHMLFjtMPsKElbDpqUQGjj7fWDzeFwLwmtNgImGp 3UpwgwHSYrBT3zO1mM/fgE2vmkTAgrU8ynvF2Gaym1yUc19xWFYFOArJaLHyEuKW3pYY kL9fU8h88HFwZHd8c+8+3NHPnmJhntiJpnrWiN6n0ZY3LcBUZISNdMPOqLaCSwz9/C4T Z2jr5bvgA07jeV0KkEbXh7gwUH+Sm4zUWp6AHNanSwKJYFMy/sDJIKmlPz5xVEMiCfCo LO2ugBqmy0SCT3NZXHOvcmSn2Nf3npki9BpsPJRJF+MKVrTtrpDb4dOZP3fFlSy+fORH xQCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686853613; x=1689445613; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=v5j0wCZPnfsM4/SjEwwVDfexZdOw0uK6iqseA0HQUzE=; b=X9F9NSdhkJeJwKVyLRS7mJpHUwV6qZcMSwNnkYwjlLfrhtqwVPW5UoLp26JLSnx4jO g//aBpVegLj1css7D3+u+xlRQqcWmthStJYIkSCXo4+NWOtXB9UsJX8RBQ5L57HUDBzw JjZZh0JbM8UUURudTslH+I7usEu8wNqStrO1anab8u03gQ61xrRhdT38vSm4EZHllKDA T1quC5g/v/EykXpppKcpc+SbqybWTkJRV2q+Us9+VI80Z+L95X4C9dpZtHk8ENxT7jdc jVHJ4a52BC3/byPNO9skIkbnlVm0lMBD11V3mlXeVoliMiH7AgCPtNebrUT4o+ntNuhv o4jw== X-Gm-Message-State: AC+VfDz5vQWMiGrVq1L/ivbZ2LfQtSIq/W6RvJHCBeO9dvOiPabXu4/N odhLBdJcd30XaBJ7insithde6nJ7AwY= X-Google-Smtp-Source: ACHHUZ4XblfvtELYfPfTXYv/mZguDzYqVYK+D/wTZAy9MdyrQSECLLlB+UmOM8NMKOmXv6Fwf6a/c1+W5jI= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:a70f:b0:1b5:64:1862 with SMTP id w15-20020a170902a70f00b001b500641862mr893196plq.9.1686853612603; Thu, 15 Jun 2023 11:26:52 -0700 (PDT) Date: Thu, 15 Jun 2023 11:26:51 -0700 In-Reply-To: <20230526234435.662652-10-yuzhao@google.com> Mime-Version: 1.0 References: <20230526234435.662652-1-yuzhao@google.com> <20230526234435.662652-10-yuzhao@google.com> Message-ID: Subject: Re: [PATCH mm-unstable v2 09/10] kvm/x86: add kvm_arch_test_clear_young() From: Sean Christopherson To: Yu Zhao Cc: Andrew Morton , Paolo Bonzini , Alistair Popple , Anup Patel , Ben Gardon , Borislav Petkov , Catalin Marinas , Chao Peng , Christophe Leroy , Dave Hansen , Fabiano Rosas , Gaosheng Cui , Gavin Shan , "H. Peter Anvin" , Ingo Molnar , James Morse , "Jason A. Donenfeld" , Jason Gunthorpe , Jonathan Corbet , Marc Zyngier , Masami Hiramatsu , Michael Ellerman , Michael Larabel , Mike Rapoport , Nicholas Piggin , Oliver Upton , Paul Mackerras , Peter Xu , Steven Rostedt , Suzuki K Poulose , Thomas Gleixner , Thomas Huth , Will Deacon , Zenghui Yu , kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, linux-trace-kernel@vger.kernel.org, x86@kernel.org, linux-mm@google.com Content-Type: text/plain; charset="us-ascii" X-Rspamd-Queue-Id: 29CDC40003 X-Rspam-User: X-Stat-Signature: wk3mg18d81jsna9ars1kwne96ac8pd3q X-Rspamd-Server: rspam01 X-HE-Tag: 1686853613-1434 X-HE-Meta: U2FsdGVkX1/5sOVvtxXZCl1KMQ94V2ndwjT9p1kmzyMJFc3LzuaiKN4bY7M96UelRkNQwqam+b2Ca6LMX4Rm9mLrb/5hjLRuNAcwtstb7tizvBqcnhxRWngDMUqDgUMwQ8b9XqJaEU/lHlUR+N760Zn7YPPosj07Ki9y+KVnnve1y1PHZXvyTDSl11BLObFZRMtLhsUmOTAFfplsjU3h7/ETcco/8FG/0C0EeDkYZPFCfIEXGZWxkskDLuQbPAUi2+L0zH3XGVy0ZYJ1rXmdmvnInVOr/z69Rw2A5PNvNoD3OfuBZK2EMulp78pk91dIxhsp04imBPBtJwiAVW2q1ypkOOsNtfXnFRXtHH7Wame6H5oec9cIj3JVtLsSEdgGto/+pbfcYQ0N8CIMBl/zEe7yMWLLahB6WipYYT5I61ULvRCbJXyHZLG19tJUOOV+eHZlKEKnIybhOeDnT6uRPh9NiTqf8/fcoqhmw7EZagP9Z1p+1+/TmBBpT3RUSkr4MUr0RRbraXpK1SP9JXrmNQQZDCtPDQ4at+JyPmkSB1c5qysIUU2zdwjkyjpU64/YBaf0eGi+w/pfxrIVsc+AdlS/ac/iwXnpg+tiGJ2/ex+olGfnrz+r9GvfXNgHhsbRRykqSMMll0eOFOFFthCjxRDc72cYMoSyfH3mRXQ+fhULDg121T8Nqa1MO47Rzvl5Es3IfGQbYVLXjbOf5shzR/pGWJwZYHlZMWpEI4JWTpZMUvDwG7J/F3+oJa1qewHOuExbPtpRCKo+bGj7usv4urBAyojZbULPQ3ZTjdMSUFCshqAbwe20NeGxz50qB+UdRuNA77/7DFG0FGc8LMKsTKbpbZnI4YnGTWBpjfzKNPX4AW9k6XRcNhR+auJeNz0YcWd+Vddrl2EY5rgok/8dItyVIpGHPh4t3XHG3J/KWmGcXiTrq39hWXPToScHc1XFna+AcWZVA8XIWSz2dxy V6VguUJ/ /grzToLWaz97LHPgM6F9Vg3iXpRCXeneAE4mbEpcrqqe7TVTSURNcKrhOS8F4ocapkkqRkYkWT6n7S1Beb7UFna3nGJ8ZjC22PDgoIPWUTNitxlbAL3SpCO88tW7D4hUVGG4YfBAKgHjHJdOis/oXyk/hAXv3csXLahBDIk8+bojxoo2IyFnnD96WmMkwYZBzv5Gp4Bnj/zncAOdh2ltm6Fl6gSyl5dO6eWZ8ND+T/uwkddEVn90FosJH7++eu+30fJDH625v3Vh4qmIhWALPkE4F9N0GskxoQd0Nv7kXIQDOe6YC/GQA5WYW49vXxiM8gEB9C1N6oUJ3fjq+FYTwEtpD9z7tGD4hp/ZHQR94CdtUKQQopnJzrazCZU5Ojrx1s09vxzGGCPVP5AhZrtnPJFxpXfbRFJQRoGwzrLCxzWXVELr3c0cNf/tRbIlRuzioQbdlnTecGldujCyoncJkPQkJgjCydtSKxEBtw+Twyt4JjIq8Wxy0FmnQ91zHB0IdWS58FEPWIVlRM2z8j2/zIeo13lItPFU17aVUmRxSvqgRZMFOHmfwWhcTCKdCjIAx0XULo2s+TorNq2mpNfp1jbF5yFSSIIMvIs/moE51d5HVZUuJGUVVeIlrVib6pSJIxXVge+66hNyjxm+/EEWadq6ZA5w7S0O5t4NqpBoAygnK5zjkVtJ5YJwALu1LpPJGcrGT0ZplmbhqTiZz90OfnV8cWjB2HbiQn4Nqn95hF1gxyF4= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri, May 26, 2023, Yu Zhao wrote: > diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c > index 08340219c35a..6875a819e007 100644 > --- a/arch/x86/kvm/mmu/tdp_mmu.c > +++ b/arch/x86/kvm/mmu/tdp_mmu.c > @@ -1232,6 +1232,40 @@ bool kvm_tdp_mmu_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) > return kvm_tdp_mmu_handle_gfn(kvm, range, test_age_gfn); > } > > +bool kvm_arch_test_clear_young(struct kvm *kvm, struct kvm_gfn_range *range) > +{ > + struct kvm_mmu_page *root; > + int offset = ffs(shadow_accessed_mask) - 1; > + > + if (kvm_shadow_root_allocated(kvm)) This needs a comment. > + return true; > + > + rcu_read_lock(); > + > + list_for_each_entry_rcu(root, &kvm->arch.tdp_mmu_roots, link) { As requested in v1[1], please add a macro for a lockless walk. [1] https://lkml.kernel.org/r/Y%2Fed0XYAPx%2B7pukA%40google.com > + struct tdp_iter iter; > + > + if (kvm_mmu_page_as_id(root) != range->slot->as_id) > + continue; > + > + tdp_root_for_each_leaf_pte(iter, root, range->start, range->end) { > + u64 *sptep = rcu_dereference(iter.sptep); > + > + VM_WARN_ON_ONCE(!page_count(virt_to_page(sptep))); Hrm, I don't like adding this in KVM. The primary MMU might guarantee that this callback is invoked if and only if the SPTE is backed by struct page memory, but there's no reason to assume that's true in KVM. If we want the sanity check, then this needs to use kvm_pfn_to_refcounted_page(). And it should use KVM's MMU_WARN_ON(), which is a mess and effectively dead code, but I'm working on changing that[*], i.e. by the time this gets to Linus' tree, the sanity check should have a much cleaner implementation. [2] https://lore.kernel.org/all/20230511235917.639770-8-seanjc@google.com > + > + if (!(iter.old_spte & shadow_accessed_mask)) > + continue; > + > + if (kvm_should_clear_young(range, iter.gfn)) > + clear_bit(offset, (unsigned long *)sptep); If/when you rebase on https://github.com/kvm-x86/linux/tree/next, can you pull out the atomic bits of tdp_mmu_clear_spte_bits() and use that new helper? E.g. diff --git a/arch/x86/kvm/mmu/tdp_iter.h b/arch/x86/kvm/mmu/tdp_iter.h index fae559559a80..914c34518829 100644 --- a/arch/x86/kvm/mmu/tdp_iter.h +++ b/arch/x86/kvm/mmu/tdp_iter.h @@ -58,15 +58,18 @@ static inline u64 kvm_tdp_mmu_write_spte(tdp_ptep_t sptep, u64 old_spte, return old_spte; } +static inline u64 tdp_mmu_clear_spte_bits_atomic(tdp_ptep_t sptep, u64 mask) +{ + atomic64_t *sptep_atomic = (atomic64_t *)rcu_dereference(sptep); + + return (u64)atomic64_fetch_and(~mask, sptep_atomic); +} + static inline u64 tdp_mmu_clear_spte_bits(tdp_ptep_t sptep, u64 old_spte, u64 mask, int level) { - atomic64_t *sptep_atomic; - - if (kvm_tdp_mmu_spte_need_atomic_write(old_spte, level)) { - sptep_atomic = (atomic64_t *)rcu_dereference(sptep); - return (u64)atomic64_fetch_and(~mask, sptep_atomic); - } + if (kvm_tdp_mmu_spte_need_atomic_write(old_spte, level)) + return tdp_mmu_clear_spte_bits_atomic(sptep, mask); __kvm_tdp_mmu_write_spte(sptep, old_spte & ~mask); return old_spte;