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 168B7C282DE for ; Thu, 13 Mar 2025 13:58:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3C932280003; Thu, 13 Mar 2025 09:58:15 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3527E280002; Thu, 13 Mar 2025 09:58:15 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1CB03280003; Thu, 13 Mar 2025 09:58:15 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id F28C5280002 for ; Thu, 13 Mar 2025 09:58:14 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id E91D3C2169 for ; Thu, 13 Mar 2025 13:58:15 +0000 (UTC) X-FDA: 83216682150.25.0A387C7 Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by imf08.hostedemail.com (Postfix) with ESMTP id 1719A160017 for ; Thu, 13 Mar 2025 13:58:13 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="ATr/DHKU"; spf=pass (imf08.hostedemail.com: domain of tabba@google.com designates 209.85.160.178 as permitted sender) smtp.mailfrom=tabba@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=1741874294; 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=Z9FeCBAypR4IZrbp8p9GTIoHBEaomM5xLPYj8ATQh2A=; b=fI3D8pbqI09s09UKVaqxzGCRMu4pBg7C2sZFNJ0fSKW9ETIs8Cp6RefPnI9xQfJZHWUtAb wIqtoJMlrjCcjdpfqjtV6B471tSf28EOoNjolQtBCpVFN6BK79S4ICtPuEmvNs6JCZHl6J DgIR28hGjXmOmNtkZ4mnzvEPQDAWdPE= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="ATr/DHKU"; spf=pass (imf08.hostedemail.com: domain of tabba@google.com designates 209.85.160.178 as permitted sender) smtp.mailfrom=tabba@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741874294; a=rsa-sha256; cv=none; b=zMOaxMs0LPrXnFXEjhw0NLxo7kr+W4L4F+D67YcYahubMylfa/CnbkA7DRpXCtu+ZvmC/B Sy+jnICStS6DRsrOQ+Bq0zvNN2n+yPlzHAUfBAuS++9+zoxBAPmFid05vQOUMdBHX4xK1p djK+CoGzvd0TGdK/pNocJ9SHNL/dwkE= Received: by mail-qt1-f178.google.com with SMTP id d75a77b69052e-476693c2cc2so236611cf.0 for ; Thu, 13 Mar 2025 06:58:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741874293; x=1742479093; darn=kvack.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Z9FeCBAypR4IZrbp8p9GTIoHBEaomM5xLPYj8ATQh2A=; b=ATr/DHKULNCRipqMysDz+Zs6L6Rr7na/rPZKZY9iU/d4k4Ue0YRmflBMJ2qUobRhOn DMIgndgE0OeOFNJJYBw5GyxotoNk7EHnpTFJnYsNN9CRq5YwFE9k4s1qk4gRwvBVy3mg kd1f7a82ePbFXOEeGTv2/5y8gdm4/XKyNA5I43wP5/l/7OO9hlwmHVU5AGDGOWzX+a/p mhaYT60FtNWFM2aBxSJjpJtDqUsGTmoFmhEWz04brnpRNn67vKidjSBxItTomvSsqbnr 7TqLnZVofn0MO1iwOJmp5AXZterV/L3FUBXqYYVMCEb+MsUXEcTXeNKOiUEBEgwv8w0M bOYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741874293; x=1742479093; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Z9FeCBAypR4IZrbp8p9GTIoHBEaomM5xLPYj8ATQh2A=; b=uWkW0m4VDuNt2VAzOGIVU8656pAEZvP+JByEkPROoDnMb0cR2Wi4MT99SzZPbMPT3O 3pnVss7Y9PFuZowmaNfqgoDig/EPT19Z8eoB8+ApJtUJX63vpegfCCyECboEhPgw8p5P +toR50R6oBBusyOuWL8F8jIGQDsgQU58RLn5yDbB6pZyJ1ZLYXNVhNePerAP+SgV+SlP nT3W/D4rEKWq5j01cPNHICilA3zU1TES5yHn/kMd+UzfauQ6lEEY5IOsq088GrBomuK3 OcAZGIc6/Rw8SRUcZGi+I3aU3kqf3jiyvCbKhWsBrN3+vvb0SZWEHm3NTFzNXYG8WXLm Z25w== X-Forwarded-Encrypted: i=1; AJvYcCUjFgOEmsSr38iwLISAQ8VOIDucUxe7k+5ASG9EtVGVgBuzrOaLnT/9RIDJJxK/DWnNhzvXE5FZQw==@kvack.org X-Gm-Message-State: AOJu0YwcDxJMtwxmfxfymudL6uBjiDOnUQgrIPTmjHDjc6zAamGqgZOl X7p1RYcdupRcJKJI/+SNYeQPJ6yBYFETSvoxo4OY0YsA14bI11apc3uo/lXYIsSuMOL5CcnzjN/ IzHyXdyOZyIE1xCvE8AqltgAF5sQJtQJ1Lu/1 X-Gm-Gg: ASbGncuhpLT0VCOMDxG7rmpkcgfjhj33E55tFShD+LF3dc/VEwMZipFQyALO/YR0ADg UTn28Bofpqkxi/W9XtQXw9QWrHA/whbpLHCTlSdYn4d3OS50grk0hasnDn00ATj3ov1ocZroOkz tOWIOwYIkUf9mFYqJEWnVCVJFqHYL8JREcppEp4xxBthzfhr1SqunQUko= X-Google-Smtp-Source: AGHT+IHZKP40UVewA/vJRjgDyWhTUkmD5Qfh8851rd5xaGWMIfILX9lGOwDg+GHbpMgYlv2sihmm4GI4y8y2iDfckZU= X-Received: by 2002:a05:622a:1443:b0:475:1464:561f with SMTP id d75a77b69052e-476bb2dab31mr3323841cf.11.1741874292884; Thu, 13 Mar 2025 06:58:12 -0700 (PDT) MIME-Version: 1.0 References: <20250312175824.1809636-4-tabba@google.com> In-Reply-To: From: Fuad Tabba Date: Thu, 13 Mar 2025 13:57:36 +0000 X-Gm-Features: AQ5f1Jp3h1NrwogZy_vhsvnRTLO20AfpSQ9DOzDE2jKtNqepfxzrqM8MsiWv6Vk Message-ID: Subject: Re: [PATCH v6 03/10] KVM: guest_memfd: Handle kvm_gmem_handle_folio_put() for KVM as a module To: Ackerley Tng Cc: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org, pbonzini@redhat.com, chenhuacai@kernel.org, mpe@ellerman.id.au, anup@brainfault.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, seanjc@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, willy@infradead.org, akpm@linux-foundation.org, xiaoyao.li@intel.com, yilun.xu@intel.com, chao.p.peng@linux.intel.com, jarkko@kernel.org, amoorthy@google.com, dmatlack@google.com, isaku.yamahata@intel.com, mic@digikod.net, vbabka@suse.cz, vannapurve@google.com, mail@maciej.szmigiero.name, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.com, kirill.shutemov@linux.intel.com, suzuki.poulose@arm.com, steven.price@arm.com, quic_eberman@quicinc.com, quic_mnalajal@quicinc.com, quic_tsoni@quicinc.com, quic_svaddagi@quicinc.com, quic_cvanscha@quicinc.com, quic_pderrin@quicinc.com, quic_pheragu@quicinc.com, catalin.marinas@arm.com, james.morse@arm.com, yuzenghui@huawei.com, oliver.upton@linux.dev, maz@kernel.org, will@kernel.org, qperret@google.com, keirf@google.com, roypat@amazon.co.uk, shuah@kernel.org, hch@infradead.org, jgg@nvidia.com, rientjes@google.com, jhubbard@nvidia.com, fvdl@google.com, hughd@google.com, jthoughton@google.com, peterx@redhat.com Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: ede6x3bj4a6dgu6mh15oah8fcm3pg774 X-Rspamd-Queue-Id: 1719A160017 X-Rspam-User: X-Rspamd-Server: rspam09 X-HE-Tag: 1741874293-408154 X-HE-Meta: U2FsdGVkX1+qEFTprKpgGXOLl34ZA2Q8bGyqUjNNYTQKHm1nTD5XrbQ9zCwEbHQXtr/UAhuVyljt8vvtmN8xG7Lc83CMAbBmlmezyI8T9kD+h7HrdCssLI+IXA7fSEZOhIfb507P4qw/ibUFljNuMQL1EHnlQD3qna1UBN1VOZLDcc/a7My/YLs0WE5OpZRsJcSau2hXF5L+K/Fqb3fxkQf9vF2Z/dwznyUKUufNiMmGWsfnNSjdRDTbkY2W2OxhEWPjAeLJfo5WpSEEpXYYcxzmU9V7iPEVv0lPYyUsfA8GByrUCelg3P7EZIhKyJSc1dwFN3ENqvmxXGWc1ma4TtXoW6UJgiu15PRyKlaoXjOsArHMMhi6YbwfeQ8I/TMxY8QgR38SdDRN0Ndx1OXL+wvyVWaAlZi0mvxiqoEGQVsHRJMsu+cT/Fvqv7Hn1FSwyW1/3+CJ9mjWmdhJgddpzbGIV1XYfirfeZ65+zi0j6/WIDirH8DqY2k5jJwP/3MF0/snbcAoMagmgse8XgizehIR4Do8qQdQ0WsiYpdpKAz4E9Ucfy8O8SBh/z9rZsVn1lMl1PH3SMoSvrayj372MwK2eqCXPJuFe8RwV98d2b4PeaiytEt1qOHR5AFQV6Ke5q32FWyK8XkqJtJmuv1zV6M1N9ESTPtoTjnh8WGRYAtEySvJwXFt1n45FijiReNACMchzRi9LUv1MSJ/OwhyADapnmZ/IeFsN0ieEzlz7I/k+j3QzH1QwAcMecw1nTQzvfw5gfTfxYNKN8bLBHXHxgWU4sKsZ6o2rR3xDc+WXmBvnyAJR1BM25tbmroFe9ioQAiALEk2cWEYHUj5V0UskqijkycbVEICqEOOFMu3WzpcrNFrUSh+zZsWJMJm7BV1gHArB0Ak6ALwoOe40fWucP8FvYsWCDCtoC9IVk++ybG8uhiPPz4Wy58JTugs3zWp5qaINok9zpSGO2LD6uK 3bYWWTFp /sQkXYZT5ghFCjheBPP+KPJ+t2D/RH7513W33QEBq041PoZJW7uPYezHVmMkiLPzpASX2xTenkmMU2GK1r45Yn1TOpJVzUQ1nK6tPpfQaBGWGXvjQitK1rjNA1nKNiybBKqmLSUToIPayKxOmWc0UyomiaTplZCjuzoMGldlz6B6O3VpAgyShfPMfrai1g/hz0F7Wld1CSSuTiNm8jQ0V1pOlrBGch1W5eTZzLHKSmqKQI6p4g561RWAS4m1F/DJ8Ml3x8NoCCVBY5dmz6jgtzSoVgOeXuUS6pbIFUy9AC+QkB78fZrq3QG7K0HPThC+QSyQxwG/uYEEOihRS6xHcUh/8XMacBfuO0EuN+z588jONzyFSC4kmK/cGh+8yPA3ZN4Bm4vf1RDknDEA= X-Bogosity: Ham, tests=bogofilter, spamicity=0.010102, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi Ackerley, On Thu, 13 Mar 2025 at 13:49, Ackerley Tng wrote: > > Fuad Tabba writes: > > > In some architectures, KVM could be defined as a module. If there is a > > pending folio_put() while KVM is unloaded, the system could crash. By > > having a helper check for that and call the function only if it's > > available, we are able to handle that case more gracefully. > > > > Signed-off-by: Fuad Tabba > > > > --- > > > > This patch could be squashed with the previous one of the maintainers > > think it would be better. > > --- > > include/linux/kvm_host.h | 5 +---- > > mm/swap.c | 20 +++++++++++++++++++- > > virt/kvm/guest_memfd.c | 8 ++++++++ > > 3 files changed, 28 insertions(+), 5 deletions(-) > > > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > > index 7788e3625f6d..3ad0719bfc4f 100644 > > --- a/include/linux/kvm_host.h > > +++ b/include/linux/kvm_host.h > > @@ -2572,10 +2572,7 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu, > > #endif > > > > #ifdef CONFIG_KVM_GMEM_SHARED_MEM > > -static inline void kvm_gmem_handle_folio_put(struct folio *folio) > > -{ > > - WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); > > -} > > +void kvm_gmem_handle_folio_put(struct folio *folio); > > #endif > > > > #endif > > diff --git a/mm/swap.c b/mm/swap.c > > index 241880a46358..27dfd75536c8 100644 > > --- a/mm/swap.c > > +++ b/mm/swap.c > > @@ -98,6 +98,24 @@ static void page_cache_release(struct folio *folio) > > unlock_page_lruvec_irqrestore(lruvec, flags); > > } > > > > +#ifdef CONFIG_KVM_GMEM_SHARED_MEM > > +static void gmem_folio_put(struct folio *folio) > > +{ > > +#if IS_MODULE(CONFIG_KVM) > > + void (*fn)(struct folio *folio); > > + > > + fn = symbol_get(kvm_gmem_handle_folio_put); > > + if (WARN_ON_ONCE(!fn)) > > + return; > > + > > + fn(folio); > > + symbol_put(kvm_gmem_handle_folio_put); > > +#else > > + kvm_gmem_handle_folio_put(folio); > > +#endif > > +} > > +#endif > > Sorry about the premature sending earlier! > > I was thinking about having a static function pointer in mm/swap.c that > will be filled in when KVM is loaded and cleared when KVM is unloaded. > > One benefit I see is that it'll avoid the lookup that symbol_get() does > on every folio_put(), but some other pinning on KVM would have to be > done to prevent KVM from being unloaded in the middle of > kvm_gmem_handle_folio_put() call. > > Do you/anyone else see pros/cons either way? To be honest, I didn't do it that way (or even think of doing it that way) since that's how vfio does it, e.g.,: https://elixir.bootlin.com/linux/v6.14-rc6/source/virt/kvm/vfio.c#L38 Like you said, your suggestion would require something like try_module_get()/put() to ensure that it's not unloaded. Is that better? I don't know... Maybe someone with more experience could chime in. Thanks! /fuad > > + > > static void free_typed_folio(struct folio *folio) > > { > > switch (folio_get_type(folio)) { > > @@ -108,7 +126,7 @@ static void free_typed_folio(struct folio *folio) > > #endif > > #ifdef CONFIG_KVM_GMEM_SHARED_MEM > > case PGTY_guestmem: > > - kvm_gmem_handle_folio_put(folio); > > + gmem_folio_put(folio); > > return; > > #endif > > default: > > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > > index b2aa6bf24d3a..5fc414becae5 100644 > > --- a/virt/kvm/guest_memfd.c > > +++ b/virt/kvm/guest_memfd.c > > @@ -13,6 +13,14 @@ struct kvm_gmem { > > struct list_head entry; > > }; > > > > +#ifdef CONFIG_KVM_GMEM_SHARED_MEM > > +void kvm_gmem_handle_folio_put(struct folio *folio) > > +{ > > + WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); > > +} > > +EXPORT_SYMBOL_GPL(kvm_gmem_handle_folio_put); > > +#endif /* CONFIG_KVM_GMEM_SHARED_MEM */ > > + > > /** > > * folio_file_pfn - like folio_file_page, but return a pfn. > > * @folio: The folio which contains this index.