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 26F71C25B76 for ; Tue, 11 Jun 2024 05:58:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 947E96B0085; Tue, 11 Jun 2024 01:58:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8F8CA6B0088; Tue, 11 Jun 2024 01:58:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7986E6B0089; Tue, 11 Jun 2024 01:58:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 5C2266B0085 for ; Tue, 11 Jun 2024 01:58:14 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id D24A7160E53 for ; Tue, 11 Jun 2024 05:58:13 +0000 (UTC) X-FDA: 82217552466.09.5E36912 Received: from out-173.mta0.migadu.com (out-173.mta0.migadu.com [91.218.175.173]) by imf13.hostedemail.com (Postfix) with ESMTP id 8B2F320002 for ; Tue, 11 Jun 2024 05:58:10 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=cyEhHRmu; spf=pass (imf13.hostedemail.com: domain of oliver.upton@linux.dev designates 91.218.175.173 as permitted sender) smtp.mailfrom=oliver.upton@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718085491; 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=aqiWe39MZdeODszfKFW0wTFxaRO6NFFUSNnRgYQUTLg=; b=YuznsGrgNEm0Uj/h0vc8ddbdelWdJ6iJScNMLVtFH5mfwAjU1DBXT4O9KVT0KK75ZIucgY cGSHjDCPKZvPxhiPFGZgL4konj1R2o9zmTAEiF+hWqJ4erKSUs3bpQsJWKuj1ZyNl6Ei7q 133/IcJlqcbk9IVwuo5ZJ3EH4N5nZuM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718085491; a=rsa-sha256; cv=none; b=7XI3hcLKHI7z8M7Ay4UgzgiulIKMoKz5k9YUXNkkChJF45Br8RtwwQ2cm6NhRqDj3n/fHq 3aWgoQrMFQWRtDq89GvC0sbdZxKCz0BjWQE2nWT2BfJCEeFF8+2OWqjjaXAwnAGUHaylsv T8u3KdBWCo9qK0Nq7Ozz9eIr+ftWivg= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=cyEhHRmu; spf=pass (imf13.hostedemail.com: domain of oliver.upton@linux.dev designates 91.218.175.173 as permitted sender) smtp.mailfrom=oliver.upton@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Envelope-To: jthoughton@google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1718085486; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=aqiWe39MZdeODszfKFW0wTFxaRO6NFFUSNnRgYQUTLg=; b=cyEhHRmuHeeS06ZjBXNkPufgh3B8leCOaQ+2mkGJsxw/fHVbVvUbyAUlYdvNZ9xfM9HCHm m4wplQ7pMuC8Dp8TGrb57W3hgjukde4F/i3k4080Q2Pj9PRiHNda6b2hjDUS8A2WB9ueZh mwDKUBEjSMLvLDQO1P+3kvVaJ2uaU30= X-Envelope-To: akpm@linux-foundation.org X-Envelope-To: pbonzini@redhat.com X-Envelope-To: ankita@nvidia.com X-Envelope-To: axelrasmussen@google.com X-Envelope-To: catalin.marinas@arm.com X-Envelope-To: dmatlack@google.com X-Envelope-To: rientjes@google.com X-Envelope-To: james.morse@arm.com X-Envelope-To: corbet@lwn.net X-Envelope-To: maz@kernel.org X-Envelope-To: rananta@google.com X-Envelope-To: ryan.roberts@arm.com X-Envelope-To: seanjc@google.com X-Envelope-To: shahuang@redhat.com X-Envelope-To: suzuki.poulose@arm.com X-Envelope-To: weixugc@google.com X-Envelope-To: will@kernel.org X-Envelope-To: yuzhao@google.com X-Envelope-To: yuzenghui@huawei.com X-Envelope-To: kvmarm@lists.linux.dev X-Envelope-To: kvm@vger.kernel.org X-Envelope-To: linux-arm-kernel@lists.infradead.org X-Envelope-To: linux-doc@vger.kernel.org X-Envelope-To: linux-kernel@vger.kernel.org X-Envelope-To: linux-mm@kvack.org Date: Mon, 10 Jun 2024 22:57:54 -0700 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Oliver Upton To: James Houghton Cc: Andrew Morton , Paolo Bonzini , Ankit Agrawal , Axel Rasmussen , Catalin Marinas , David Matlack , David Rientjes , James Morse , Jonathan Corbet , Marc Zyngier , Raghavendra Rao Ananta , Ryan Roberts , Sean Christopherson , Shaoqin Huang , Suzuki K Poulose , Wei Xu , Will Deacon , Yu Zhao , 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 Subject: Re: [PATCH v5 3/9] KVM: arm64: Relax locking for kvm_test_age_gfn and kvm_age_gfn Message-ID: References: <20240611002145.2078921-1-jthoughton@google.com> <20240611002145.2078921-4-jthoughton@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240611002145.2078921-4-jthoughton@google.com> X-Migadu-Flow: FLOW_OUT X-Stat-Signature: is98fgxymkmxjyis8uxqx851qhzu5ked X-Rspamd-Queue-Id: 8B2F320002 X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1718085490-934019 X-HE-Meta: U2FsdGVkX18PQI/nenaclN/GU2cd/4HHvyO1PZWmvUoLhQ8m0xMC9VfpjkJjw/W2cjvrtgMkVgP82Qpz653r7O1dDKVhMYGxWiA1NwBQ8LZUgaIkFw2DLCtaIenxfnWxkFVXfG5NyThdC5GJ4SvF+CRSkT8LyS73RBKbK9VSwOxKVL1CJfG8G8gy9xFBurPIwHuR7bCoV15kTd2Njml72ylIiua9/X2vYjf05lraNah1pG33OUM6ao3y15D3RZD5yAZKxfPUj8H90nIdyOPuIMmJoB+8Ty3rwu4r2+o9fOAeX/cVsSEyL2TjxlnoYmwL145LB1yWd2T4XohWYSKiQYudcGlpSXsOrBln9OYvBgQnIhpODGk6Dd+HlTkTrktiqcfgVbzZByVSshrp6K97QP3V81DM9wRmFLGRK/GLX1mL39CUVh3Xyvj2zkYnItZMA30h/GrKWWBbnOk+PLIKQzDRFtY5kxITII1oZBqyuzzAtqpCOb+F6d9jBCM9H+DqReq/27+ug/cdls92T15tRWMkJP1fJ1LKAYhyR27/oTi6Zfx9QftQFcOvKZsw6CCnUMHhBJ5vCG59ItPTVnbkf1l4/spg9rs7O7DP7WR0shIfdBJcJCeDqALSvX/qyrCLKwU1Uuqqh1gtIAt05dLc3q3AjAO9t7ySfY9e28+3/8EK35RZ10k8DxiGqWsLhxVzEfpz4w5GHyDPCksdf7kH/OOfU5racmoCNKoI8Frv/z0SyIlO2F3aA7FAoYgqdZ543kSReQB0QB3CtuntUkULGuBRbIAc+TNnjDHaUb4XBnp4lknguNFuT257fRny3Uouq81iqb5gc7E76x/4YoCIxxPPt+HN7OCHRvPGERreYkdDxORTTenF0NXvu+9JC1AUy/9O+Da86drPgUyPePbpJ6iOZynqXe+AZQojWFc/bbGZxSbzn4Us1JppqiNNxRe0Mc59xIj8OMJ23SoscME huZZfjCo VPv9DbKUv35QtDW/AHsP7M5OtjJHWNZMwu+MwA5aQx9U9X9WRbJZccpaoRchvo3PUWx+rRx9CmvDtMZGc2SFfQQgAhzTsAb5b4CR5U0/j4UhmfMPiWRe0WoRCMhDyPYvJbat5E0IZaqmOh1yUKQICYfT5tvFBIEYmhb0m 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: List-Subscribe: List-Unsubscribe: On Tue, Jun 11, 2024 at 12:21:39AM +0000, James Houghton wrote: > Replace the MMU write locks (taken in the memslot iteration loop) for > read locks. > > Grabbing the read lock instead of the write lock is safe because the > only requirement we have is that the stage-2 page tables do not get > deallocated while we are walking them. The stage2_age_walker() callback > is safe to race with itself; update the comment to reflect the > synchronization change. > > Signed-off-by: James Houghton > --- > arch/arm64/kvm/Kconfig | 1 + > arch/arm64/kvm/hyp/pgtable.c | 15 +++++++++------ > arch/arm64/kvm/mmu.c | 26 ++++++++++++++++++++------ > 3 files changed, 30 insertions(+), 12 deletions(-) > > diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig > index 58f09370d17e..7a1af8141c0e 100644 > --- a/arch/arm64/kvm/Kconfig > +++ b/arch/arm64/kvm/Kconfig > @@ -22,6 +22,7 @@ menuconfig KVM > select KVM_COMMON > select KVM_GENERIC_HARDWARE_ENABLING > select KVM_GENERIC_MMU_NOTIFIER > + select KVM_MMU_NOTIFIER_YOUNG_LOCKLESS > select HAVE_KVM_CPU_RELAX_INTERCEPT > select KVM_MMIO > select KVM_GENERIC_DIRTYLOG_READ_PROTECT > diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c > index 9e2bbee77491..b1b0f7148cff 100644 > --- a/arch/arm64/kvm/hyp/pgtable.c > +++ b/arch/arm64/kvm/hyp/pgtable.c > @@ -1319,10 +1319,10 @@ static int stage2_age_walker(const struct kvm_pgtable_visit_ctx *ctx, > data->young = true; > > /* > - * stage2_age_walker() is always called while holding the MMU lock for > - * write, so this will always succeed. Nonetheless, this deliberately > - * follows the race detection pattern of the other stage-2 walkers in > - * case the locking mechanics of the MMU notifiers is ever changed. > + * This walk may not be exclusive; the PTE is permitted to change s/may not/is not/ > + * from under us. If there is a race to update this PTE, then the > + * GFN is most likely young, so failing to clear the AF is likely > + * to be inconsequential. > */ > if (data->mkold && !stage2_try_set_pte(ctx, new)) > return -EAGAIN; > @@ -1345,10 +1345,13 @@ bool kvm_pgtable_stage2_test_clear_young(struct kvm_pgtable *pgt, u64 addr, > struct kvm_pgtable_walker walker = { > .cb = stage2_age_walker, > .arg = &data, > - .flags = KVM_PGTABLE_WALK_LEAF, > + .flags = KVM_PGTABLE_WALK_LEAF | > + KVM_PGTABLE_WALK_SHARED, > }; > + int r; > > - WARN_ON(kvm_pgtable_walk(pgt, addr, size, &walker)); > + r = kvm_pgtable_walk(pgt, addr, size, &walker); > + WARN_ON(r && r != -EAGAIN); I could've been more explicit last time around, could you please tone this down to WARN_ON_ONCE() as well? > return data.young; > } > > diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c > index 8bcab0cc3fe9..a62c27a347ed 100644 > --- a/arch/arm64/kvm/mmu.c > +++ b/arch/arm64/kvm/mmu.c > @@ -1773,25 +1773,39 @@ bool kvm_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range) > bool kvm_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) > { > u64 size = (range->end - range->start) << PAGE_SHIFT; > + bool young = false; > + > + read_lock(&kvm->mmu_lock); > > if (!kvm->arch.mmu.pgt) > return false; I'm guessing you meant to have 'goto out' here, since this early return fails to drop the mmu_lock. -- Thanks, Oliver