From patchwork Wed Mar 12 17:58:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 14013729 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 5A9BCC28B28 for ; Wed, 12 Mar 2025 17:58:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8BC0C280005; Wed, 12 Mar 2025 13:58:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7F21E280001; Wed, 12 Mar 2025 13:58:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 66CDC280005; Wed, 12 Mar 2025 13:58:34 -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 400BB280001 for ; Wed, 12 Mar 2025 13:58:34 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id CC3B9AA336 for ; Wed, 12 Mar 2025 17:58:34 +0000 (UTC) X-FDA: 83213658948.02.83B96B0 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf24.hostedemail.com (Postfix) with ESMTP id E984A180002 for ; Wed, 12 Mar 2025 17:58:32 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=XJLXeeFq; spf=pass (imf24.hostedemail.com: domain of 3R8vRZwUKCGobIJJIOWWOTM.KWUTQVcf-UUSdIKS.WZO@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3R8vRZwUKCGobIJJIOWWOTM.KWUTQVcf-UUSdIKS.WZO@flex--tabba.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=1741802313; 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=R85+vuKuEEUS0jeCyrC0DyFve/WtnRZfc0oDmfyiJIQ=; b=P5J0PF4AMJ4PXiLeA3ADMeU5bcXdJ8flbwdpUGHPOwmP4vIQCnMg2cUL69BOX9G9FOvCLf 7KWmdzMejnJsG5e64OG4U0Q1dW9PBbD/KJIVx2c06aYtPqsJy31AnBoiz8XmD5X0298BuE VGdaQMmMIhj/3row57AAKa/bJ6zWm8c= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=XJLXeeFq; spf=pass (imf24.hostedemail.com: domain of 3R8vRZwUKCGobIJJIOWWOTM.KWUTQVcf-UUSdIKS.WZO@flex--tabba.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3R8vRZwUKCGobIJJIOWWOTM.KWUTQVcf-UUSdIKS.WZO@flex--tabba.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741802313; a=rsa-sha256; cv=none; b=4pV0nhMg+6tpMuKOW5ZkjDc8GOXkE5AOozlDMcil+slpta+GYF6QBPXXy1CttiKUSXnZjM 61n7a2K7LJdJ19DIAHciGjvBm+tSsfRRbEq7ubkABUzrsFXSStP2P2LA3VYj6Qf4B8PnUD yTdrYhbPxsn4lVKxF+/4c/pDd2aM7VM= Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-391345e3aa3so70491f8f.0 for ; Wed, 12 Mar 2025 10:58:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741802311; x=1742407111; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=R85+vuKuEEUS0jeCyrC0DyFve/WtnRZfc0oDmfyiJIQ=; b=XJLXeeFq4wQzxpLhuPeUXNyGj1kMckMFuFWa2rPoTHmmbU1TITodA2nT/P2a2t7ydZ 7eBPERZt20FR0xvns7qD/QCTpJ23MqNVhCsKgQAidUtXXC3EQH+YU1D8fI6J4a6anQer l/NLkrQxA7cwJ0tbE8yN7SjWvs7VJG0G3vO1aXw9vgjvb+mDS3zYJ6c48owYyP5TIjU2 0uuVFT2XN3ogYpAuibfUFHpXWCQ21+zxNEzfwDOAX1zlGFd4M3mpOVokZMyzzxL8vt9+ U4lSjAnfJ1TkrtWEBfkcUWsunGRP/8VdxvkRavLpR7nSZ91pZfYBnR+m+utDqNNcQi7b 75+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741802311; x=1742407111; 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=R85+vuKuEEUS0jeCyrC0DyFve/WtnRZfc0oDmfyiJIQ=; b=oxQHan+PFsxtft87N1/ZEMRk4hMk++nipi28eKDt3POirs3nrpINeMq/79JK4VIyiC gBLt15tuUlcBVPOGXcRNTjEylViX0N0SYtWyEkYWZWFldjfweqc63hDaN2pps9HcB4WI I0j4BMG/8eRLDq1eJyRx4x+Eejjc+FUaknJUQZekGZphJZyTjMUJTv4L8xiFM6dnIrvU priYHhhR0yUW9C04srfm5/0xvVzAANbhMq8iGKN/XtPaBmq3cm4MYdcMgKN6upFlMy1w d9XxDdEa/HCwlXCLVA2D+HSatbb44cBiZFytH/dfiKVZVyAREk0rA3x3Dsy5eV6WCeLv v8LQ== X-Forwarded-Encrypted: i=1; AJvYcCXzVskNNDwgzCRQmkINby9d3l+90p7S367fdwgCEegY4TzZ9T1sypw4oacMbLwQafbTEUF8vcoe2g==@kvack.org X-Gm-Message-State: AOJu0YxDHxjTTUa8Zrs9hus0fxKJdR8IHF78z1AIRZpzhOi2yq/WxErW K1wkap9aoRUzk8JEbo9KpSDuv4wfH27bjLc4tItuN2ujuA8hsNGhKDx7grHtvw2fTBBrzC+SSg= = X-Google-Smtp-Source: AGHT+IEjA25qbz56/ZivYmOA/8CzIw+8OnvV/Ld9F8g5Xe1iEl9v0x7DnaQxJbHqJscC5/DJshWP+7a2dg== X-Received: from wrbgx5.prod.google.com ([2002:a05:6000:4705:b0:391:3c12:d0cb]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:178c:b0:391:3768:f448 with SMTP id ffacd0b85a97d-3926c5a51cemr8018324f8f.49.1741802311548; Wed, 12 Mar 2025 10:58:31 -0700 (PDT) Date: Wed, 12 Mar 2025 17:58:16 +0000 In-Reply-To: <20250312175824.1809636-1-tabba@google.com> Mime-Version: 1.0 References: <20250312175824.1809636-1-tabba@google.com> X-Mailer: git-send-email 2.49.0.rc0.332.g42c0ae87b1-goog Message-ID: <20250312175824.1809636-4-tabba@google.com> Subject: [PATCH v6 03/10] KVM: guest_memfd: Handle kvm_gmem_handle_folio_put() for KVM as a module From: Fuad Tabba To: kvm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mm@kvack.org Cc: 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, ackerleytng@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, tabba@google.com X-Rspam-User: X-Rspamd-Queue-Id: E984A180002 X-Rspamd-Server: rspam03 X-Stat-Signature: jp99zajm91w89tajudppn1arqpeqw4b6 X-HE-Tag: 1741802312-101725 X-HE-Meta: U2FsdGVkX19/ugEp+NwbrMU/RshDvOqr7A+nX2KSePGcXu6K+bo31QKNXb+SEcEz0AwO0TF3Px2Sb57AlUwRDUjbAgZl1tZJkpq5NxNSC+GUXStPxtKGNIkohG/1FP54dijWl8pCLYS53VT2byhy4DA5XJ5YlXERhxeJBWxAOvCggdpH5QW6hJ3W/DVBfi3LBC29Sb6AD6zKt0FhPLIeBJZA3CLpK8pkPaALhY3/71PsKRTHQgMKahh8XKkhRfCPIZVwk73Q3Sss3C90e36ipmU4iAP+rXs9fkspE4qmk5/Vptb0IEgychtGXCxSl6A9Jwy5NhA4Rov5lMhNh+EFKZiLZJcyJP5PkfmEQ/+dZ4hChCYAXTQJPAaezORHF4I/QtCQPZIuyXD3+Mo1GH6fk3KcvtZpANvCAgCkKMGQZBE6bNhnxD59RuGi/VBE5xvAnj/LZMNKxhXTtIxahMsjJ5G2tRS5k8H2jXF2/UGyGVN5Znt3oSNHgInWUjp2T4bYKYymE/5/st0ChGYz3lzfvudspkbHqUecte+5Uunw2a8QoEQJzkpeZK/4towLXBneC+wfz7wvyyBhFeifc/VcwZI6WvOjVenPoSGhrtpslfpFDMiLZDoptf7IiBfMMKrfpyOEjROTneR/kI1EhvZkRFYJjKGGIrVs/QAGAXkTv0zmMVL/2Xr2vIAy+IeqP2XgRpvB4npnSk+Q9Az1hmM3Ul2HdqsDFRqZFGYfNSQefSf+hcXKdxsrFsATHE5488tTY0quuyi7vD5vTOTM/OHfJXWM2n66iDuQT1Q9daSMO+qazSHvBGCiTvRZ/u1TN7NspTdq/3s3/TLvpihVudneeLMeDIdYD2MW0953j243dcDSraK/arS3LfMzOQw8EaU1HMPnCg3xuO987A5Fp+GHielWRuC4o/hvgF/NBqjEsHqUp62DcBDDLC86pNqcDclmwPZzSn7sGP/y2Z9YyHd U0TjRo5z djb08+ekt8qFCA/Cz5jROHoeXVHnunvkwGoeSaZBr/ZZU69QwFRKzE4mR5Oi2gN/SKgTrm2Ad11VHmPZ4SgHHioNbtEo4c3I17ftEcPxCwp0D0+rb1s4FCRC3MOrnYeAwgg1Y7X4cPsQNo/QBhfS/63QtYYr9cR4SVL60uxzVHe+7rDd2/snADr/NeY4GxnNTL6vTglZgAkz/l2WPK2uykju+BctWwLu49cPuCYRBtgtbF/n4pslyryuNJdQqInBQuN4AZ5CXepcykO6c6twLmlbbEK3Or9oi7/5ZWAXHS7gN7Gn8g2HMRpRdR4iWlB2woZ5xrS/q5TsFr5tNPHgXDx25pzaTPCDN7hvQmLJSbWRMxqsCJlvHXDNfcpmTsap4pOP9eDd45WoolLwmEYrha5kyoxrQV3fsVGeApLxRwilYBvqpMJw/DPAwhNQtwqGR/jWwb4kMpm75p8520x0lg9esORM8HT73cViUsLLGO/ki5phNp07AnpsyNL3uSm2Vhze2CIQtFS+ylHDPWGQrPpvf+0KscAVh1a7m6CoIacjieb/pbWZ0BZae9KIKa2zq26MxqB2yk1QiNghAUHep8NDjCjar+qei3nLApUTlvNon3W5ND2bHiz+HJkIPO+GY/9xhyIR/2LdDn0c3JlgLhH0b5A== 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: 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 + 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.