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 0E88EC021B1 for ; Thu, 20 Feb 2025 15:45:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8B67E4401EC; Thu, 20 Feb 2025 10:45:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 840554401EA; Thu, 20 Feb 2025 10:45:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6B9754401EC; Thu, 20 Feb 2025 10:45:54 -0500 (EST) 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 EADFB4401EA for ; Thu, 20 Feb 2025 10:45:53 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id A07A3A50A3 for ; Thu, 20 Feb 2025 15:45:52 +0000 (UTC) X-FDA: 83140748544.06.6688373 Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by imf15.hostedemail.com (Postfix) with ESMTP id 4A8C9A0013 for ; Thu, 20 Feb 2025 15:45:50 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="vmb/7h0c"; spf=pass (imf15.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=1740066350; 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=PRunbvLT85DBg6khdWG9PaOkKVGHgD5M/ABMScKZk1Q=; b=6/f6zFvZRfd4DgM8A6EzubTsi4h/cJ1yNRhkrSWAylF8WBHn4lnXCeAC+617c8PdqRNgYg NtV/HowTbcttceU6WtVDTRRgW+tGkXosQfceLso+reg/NCoOysvLWW7uZVPA++YRgNq2Ng P+xM/t6mIM06TgOGIXuJuLbnCikLzeU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740066350; a=rsa-sha256; cv=none; b=WI/j1++JmTCUaYwxsEHoTZBOo265/vHRpd68xahiTpyNqhKzVTL63fAY/TDaUyX7jOhrBh JYXoD1wZ27o1ZjwLOdbP553KVEQ2Am8NXO86v6tOuu3uuSbm9M/1JYNMmtxtjhaNKPVryg QgcidH03mBTm1XyKeaIpUjNqfjI8/sg= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="vmb/7h0c"; spf=pass (imf15.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 Received: by mail-qt1-f178.google.com with SMTP id d75a77b69052e-471fa3b19bcso302341cf.0 for ; Thu, 20 Feb 2025 07:45:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1740066349; x=1740671149; 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=PRunbvLT85DBg6khdWG9PaOkKVGHgD5M/ABMScKZk1Q=; b=vmb/7h0c/fUWMAtl2nJ97CDYlxtyg+SDkczC4y1B0rd4cWI2dub8WonvfnINWfPEq8 ROus65vtJ7CF1KUPDkubC7kU6EQZmM1ik4HpEUMq55ZICVGSf2dV82Q7mhL599FI/uL+ LaFKsFY28gD1C8+DM7ugX8VAx2a48doStqq2ltLGcMK9tiGnFD1wEBBRG2TgxREE+1rR u7zecJMS74pdLSd2wsXlUGK3KbtCHP6H9b2Pk/YITw3xAEWAIFVk15XXQeDEHvWYH5B+ 6HzNMYO32q1P2gkHTkFaPkRUYaUGhbCZf6+ZjIE0IJhFmb1omwUmLjsGCTf9DVIpTDs4 SbeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740066349; x=1740671149; 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=PRunbvLT85DBg6khdWG9PaOkKVGHgD5M/ABMScKZk1Q=; b=glufi/PmsuNYg26VI6QDwjRPkvJmirSITI2eXAY8nNQybPREspYwLS2DLoLTn+NCuZ OOKHkEXolunYuNXHpWrjS3lT3T4m/0ZCl4XuNP8w+aev0Szgf/JsSF02v8vvcs3w9u8q s9oJNF8wXQw+X7f0CvlbAjR/jsmTbJYbSwyZ+eaEgteMDaVK/uyqkJkfWOkN2UbQoJtS /fVZUMCOOAVMvMx8bcJRFvbbGWzyuPFIMWGWQfENZ5OqKK9zh8Vlzhfpgqhx1vSgUBHl tDKXt2cFyaJxDH0+x9AXNLokmU5O0I7vUv8Wy09QswUCCc1KrbAxDhn4MUbiPn7lO8U0 8bvg== X-Forwarded-Encrypted: i=1; AJvYcCUipHNwJUfVtqsF84jTcQQ5Ty694dxVLfiv/MokJTlCMOwAUdT+KYZVt6OPdxcLz21TslE87I1jtg==@kvack.org X-Gm-Message-State: AOJu0Yz6E9LMrB1bVqnKT4sL1vgNpl2cc3OOE4Y+lUlQ1UZsncx6myT0 c7FDxuuDI1roMv2tDJSjTFKJN1pIWKXDa7ep/qn2ikQikEbLeLv8YmioGg1bN7myHhlgIBB/Lgv Skgg2S+/0FE1axjF8fTyQGS8/4FeCl/HLBpGr X-Gm-Gg: ASbGncsemqtpWKe3QHUCkIcMN4xy+pr7Fswk/EVngOFI+A0q5pcTm4LWj4I2qGAhVGP DOAP/ZbCu1OJDycuQPE9DusiQMyJoWV1PuL90O8jop4sIBsPRN+tgDXf4ktnYvp+zWxfyUpU= X-Google-Smtp-Source: AGHT+IGPGeDCdhjKTGDGs8WXhPPJsKZbeZ4WlRZitPNggTb1vz2vjOkgr/eV7Mlg/mIFGnlXtY7abY8uAD3xhfxUMns= X-Received: by 2002:ac8:5893:0:b0:465:c590:ed18 with SMTP id d75a77b69052e-47217110c99mr3749061cf.9.1740066348801; Thu, 20 Feb 2025 07:45:48 -0800 (PST) MIME-Version: 1.0 References: <20250218172500.807733-1-tabba@google.com> <20250218172500.807733-4-tabba@google.com> <2cdc5414-a280-4c47-86d5-4261a12deab6@redhat.com> In-Reply-To: From: Fuad Tabba Date: Thu, 20 Feb 2025 15:45:11 +0000 X-Gm-Features: AWEUYZkaReiezGeqdLtbjD5EPo_UXo1HYmVg_Diqu1lPPjK9JJzKuwaLxA5T9bo Message-ID: Subject: Re: [PATCH v4 03/10] KVM: guest_memfd: Allow host to map guest_memfd() pages To: David Hildenbrand 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, ackerleytng@google.com, mail@maciej.szmigiero.name, 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 Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Queue-Id: 4A8C9A0013 X-Rspamd-Server: rspam07 X-Stat-Signature: 87y74m4ugppim3yag6xgyaf4bkw3bysb X-HE-Tag: 1740066350-192770 X-HE-Meta: U2FsdGVkX1+4spT8gCvSMDR1mt0zHK7mj0Il62551jByDF21tmfDw6Ar2VTRf/bVvKaNlouU51qdVLP3CnN4snKnKbSBRIiBX7zOR4KF/hzQFx2iBiYUY8nzqUh2rfL3gfeKiDBC4J3sbHD8TTt0N63PzxyRD7fIPC+2DLk6easCBLyOWKCALjQj/c76f/bpV8LAheYvg6YiYZ0OYZWPbUUMWqPnhmmyvXFAO8h3J0pkXLmmappU+RvBc7+f5tdYLnF3N+tFzg9MchoYmJjkL9zHzEjGer8lQ6dwlaXVdPmCsOb5eA4SnJVb2LN4wbau2Uo+9t3+xownsi/nu0xZno7hpWIfWM86wzT4h3RR7Sqdu5ai6jRj/BodfYz2P4s6JMzLrGn2tM5DMIPiIwUdu+o0dqtw+b25NtwIsyUvLAuOJRksZKPjOX2seeQQXf6fykZ9FZDUBK86NRMQF4AVL7c9O52CZiD5uAGghat4C+wj/WVINB4v1B7u32vmg+rAZlYcvTRu5GI1JyiJRjAyVM97turisd2IdvFHGuA2mrLzcYCqh4wfa9ejUJs7QU8GqYc9nEBNzEAukquC89+ZoIixebO9kU4NZWUFBw9hfVVkRwLywMj+Nkf4JJSfhYNzF+MromNYUvJvMJPJ6HFmFHvczsm6MR3SoV9FlguKwfVFz7AhzOK2LFxZbFNUOgeZfYRPh4ETn9Pn5vPx2/ivFYINvbb8Kr9G7nxKDxuUBimxA3008FQEq/MxLy4fqsFWxkE+jF6NYRMBkJuCn559RYB5iDwPlljnnZR8e0DOk9A2KnYr9mZpRM4GqFQwQJHBGWLpk7cBiJrZFZRPQMtVXeacBFEkISMg+Q6Z63awgJR+x4n3vP5AZfpN84myFsFt9JDP64jkbdVcflfbR92VHHJEZo5OJpASfybuCiAyKPtpkRfa3MFotvJiZRLA+e3Hhxy9dkhAdZrHrqG5t4H /aLxCwvW EQiuH20DO1A/bm6TGx6FZ266chLTKh6mTpj93XXJaAxDk6ZQzb7TweN2hMf3d+bc+emZwX5CSxoFWlfC0P7VkX4tjspDpDLpXLFbRfk2rhx+DN7x1Z+QcCkyfjKUA18kgS6XiOVZm3WYXELXzZ6zhe4jqjigPFDNv3Ano9WjbCBjxHJ5ubOxaV21Hlxn3167DxsQyyyWApGxigQK4qM9RPfQMde/vwKzzlwOD0Lc7CdHXxAxBETD6hu/YMaDxWaC7Gc2+2KLm5Fq7UJyu7Xxudr4biBM+iNuKN+OxOZ9Bfi+y82IeLw4VSccBOz5/RV4xdnCyoBp8vmbB4oWEOqIdEOAb3Ct/zDWy5a2iNi0Js8MvXuY= 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: Hi David, On Thu, 20 Feb 2025 at 12:04, Fuad Tabba wrote: > > On Thu, 20 Feb 2025 at 11:58, David Hildenbrand wrote: > > > > On 18.02.25 18:24, Fuad Tabba wrote: > > > Add support for mmap() and fault() for guest_memfd backed memory > > > in the host for VMs that support in-place conversion between > > > shared and private. To that end, this patch adds the ability to > > > check whether the VM type supports in-place conversion, and only > > > allows mapping its memory if that's the case. > > > > > > This behavior is also gated by the configuration option > > > KVM_GMEM_SHARED_MEM. > > > > > > Signed-off-by: Fuad Tabba > > > --- > > > include/linux/kvm_host.h | 11 +++++ > > > virt/kvm/guest_memfd.c | 103 +++++++++++++++++++++++++++++++++++++++ > > > 2 files changed, 114 insertions(+) > > > > > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > > > index 3ad0719bfc4f..f9e8b10a4b09 100644 > > > --- a/include/linux/kvm_host.h > > > +++ b/include/linux/kvm_host.h > > > @@ -728,6 +728,17 @@ static inline bool kvm_arch_has_private_mem(struct kvm *kvm) > > > } > > > #endif > > > > > > +/* > > > + * Arch code must define kvm_arch_gmem_supports_shared_mem if support for > > > + * private memory is enabled and it supports in-place shared/private conversion. > > > + */ > > > +#if !defined(kvm_arch_gmem_supports_shared_mem) && !IS_ENABLED(CONFIG_KVM_PRIVATE_MEM) > > > +static inline bool kvm_arch_gmem_supports_shared_mem(struct kvm *kvm) > > > +{ > > > + return false; > > > +} > > > +#endif > > > + > > > #ifndef kvm_arch_has_readonly_mem > > > static inline bool kvm_arch_has_readonly_mem(struct kvm *kvm) > > > { > > > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > > > index c6f6792bec2a..30b47ff0e6d2 100644 > > > --- a/virt/kvm/guest_memfd.c > > > +++ b/virt/kvm/guest_memfd.c > > > @@ -317,9 +317,112 @@ void kvm_gmem_handle_folio_put(struct folio *folio) > > > { > > > WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); > > > } > > > + > > > +static bool kvm_gmem_offset_is_shared(struct file *file, pgoff_t index) > > > +{ > > > + struct kvm_gmem *gmem = file->private_data; > > > + > > > + /* For now, VMs that support shared memory share all their memory. */ > > > + return kvm_arch_gmem_supports_shared_mem(gmem->kvm); > > > +} > > > + > > > +static vm_fault_t kvm_gmem_fault(struct vm_fault *vmf) > > > +{ > > > + struct inode *inode = file_inode(vmf->vma->vm_file); > > > + struct folio *folio; > > > + vm_fault_t ret = VM_FAULT_LOCKED; > > > + > > > + filemap_invalidate_lock_shared(inode->i_mapping); > > > + > > > + folio = kvm_gmem_get_folio(inode, vmf->pgoff); > > > + if (IS_ERR(folio)) { > > > + switch (PTR_ERR(folio)) { > > > + case -EAGAIN: > > > + ret = VM_FAULT_RETRY; > > > + break; > > > + case -ENOMEM: > > > + ret = VM_FAULT_OOM; > > > + break; > > > + default: > > > + ret = VM_FAULT_SIGBUS; > > > + break; > > > + } > > > + goto out_filemap; > > > + } > > > + > > > + if (folio_test_hwpoison(folio)) { > > > + ret = VM_FAULT_HWPOISON; > > > + goto out_folio; > > > + } > > > + > > > + /* Must be called with folio lock held, i.e., after kvm_gmem_get_folio() */ > > > + if (!kvm_gmem_offset_is_shared(vmf->vma->vm_file, vmf->pgoff)) { > > > + ret = VM_FAULT_SIGBUS; > > > + goto out_folio; > > > + } > > > + > > > + /* > > > + * Only private folios are marked as "guestmem" so far, and we never > > > + * expect private folios at this point. > > > + */ > > > + if (WARN_ON_ONCE(folio_test_guestmem(folio))) { > > > + ret = VM_FAULT_SIGBUS; > > > + goto out_folio; > > > + } > > > + > > > + /* No support for huge pages. */ > > > + if (WARN_ON_ONCE(folio_test_large(folio))) { > > > + ret = VM_FAULT_SIGBUS; > > > + goto out_folio; > > > + } > > > + > > > + if (!folio_test_uptodate(folio)) { > > > + clear_highpage(folio_page(folio, 0)); > > > + kvm_gmem_mark_prepared(folio); > > > + } > > > > kvm_gmem_get_pfn()->__kvm_gmem_get_pfn() seems to call > > kvm_gmem_prepare_folio() instead. > > > > Could we do the same here? > > Will do. I realized it's not that straightforward. __kvm_gmem_prepare_folio() requires the kvm_memory_slot, which is used to calculate the gfn. At that point we have neither, and it's not just an issue of access, but there might not be a slot associated with that yet. Cheers, /fuad > > Thanks, > /fuad > > > -- > > Cheers, > > > > David / dhildenb > >