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 577E7C021B2 for ; Thu, 20 Feb 2025 12:05:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E2DDC2802DC; Thu, 20 Feb 2025 07:05:33 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DDD3B2802DA; Thu, 20 Feb 2025 07:05:33 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C7E852802DC; Thu, 20 Feb 2025 07:05:33 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id A7BC82802DA for ; Thu, 20 Feb 2025 07:05:33 -0500 (EST) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 58115C1037 for ; Thu, 20 Feb 2025 12:05:33 +0000 (UTC) X-FDA: 83140193346.26.3453DFA Received: from mail-qt1-f179.google.com (mail-qt1-f179.google.com [209.85.160.179]) by imf17.hostedemail.com (Postfix) with ESMTP id 6140D4002D for ; Thu, 20 Feb 2025 12:05:30 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=k0YIv4bR; spf=pass (imf17.hostedemail.com: domain of tabba@google.com designates 209.85.160.179 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=1740053130; 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=tC6goll+lleAOD0GHwuo3lpYGQVHyXNfS5gixgBS9ZU=; b=dikEGVMenPF8ldD+5dmntBJ1+UrIc4dKqQPBcmvpdRTzattqpvxPcfUlFDdWFXDfODuOXS iNkh1juBefgIAuTdPoImjPLr3mcjOLIFKyuWYN4jQibXtIk+sOc3PfPMxo9chyO+nPIn5L 56f0X3LtWplEHPD6C1cqTcZkV6NGfzI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740053130; a=rsa-sha256; cv=none; b=ZewK48krgbeODQLR0nQnZni4LCNm0EEKFH8ztb5Oo/FLN/nbPzfEZkHprnlTnXw7dhB5bl 8aPBOb1d1jIr9Idppvy5NHyhU5+2rJBEBVKRdBEMOFGw9C3bjC1uZfqRbzdaTyLt7st42K AfdKRggnC1p35VEOGNrwspetuevOuSQ= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=k0YIv4bR; spf=pass (imf17.hostedemail.com: domain of tabba@google.com designates 209.85.160.179 as permitted sender) smtp.mailfrom=tabba@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-qt1-f179.google.com with SMTP id d75a77b69052e-472098e6e75so225071cf.1 for ; Thu, 20 Feb 2025 04:05:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1740053129; x=1740657929; 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=tC6goll+lleAOD0GHwuo3lpYGQVHyXNfS5gixgBS9ZU=; b=k0YIv4bRrqDx/nqy3NzSpFxg67qhrsRQmZti17aNzIOjJ4fLjawUeRzwJiW/OIJ9T6 PUp+DpvW2ABx6SdSGR0WHK0+ngDUiLbELxGrHdOXZM9fZnPr07d9YMbWc8+lCmX+vSkz CAz6US6pPSHUIvoaGuvaSiQ5j8WrHjkdHOme9x6OMeAUAQC/pOnq3wmZrBSL/aCR05lT l/2D94NFTburyuUmpjPdjSN+jA9gFeyBowRnEOiRuAGn8XZnfOTSAFs0Ml9uZ4ejcEL6 rtxPGBaZKiOlqi5MvyU5nt7h0IV+Cd4g13RDCHs0obVQy1tZ81xxin/BXo0TTt1+DGOp 9pzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740053129; x=1740657929; 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=tC6goll+lleAOD0GHwuo3lpYGQVHyXNfS5gixgBS9ZU=; b=BrbhGwIxxBNV/C6TjorIDNGwaQABFS0UX2NpxNrLSQA05LBFTE2+v1XHdIJGkcgrfJ qignFHTdSEyEnSXyMDzKO1qT65Ln0rFRvkkGb3AQEoVvR60R91PSdpLADJG5RjeHT1pK Kk6RfuHvURRHMvWhOKTo94xnVaT9g5fD59Yc+sIzCvM2ze6fJLztJ7AoTvxJoW1gOWoq V4OGdVzIFNNIAbqJ0iPSpW4JnsfhHEV5G7KuHFAprbYb+HzEagkokMs4BVOOpQYhbXFc McAiiNoAfmrOwdc1AGehhfkrjYefTHqd39ceRpD8PyIvsbUpZdwBt7ULigvb8/j0INQy WF2g== X-Forwarded-Encrypted: i=1; AJvYcCUSgEUjq+7iF/0x09WD6xIO72Ourp7gATDuI3zIW9KP52xJ9C+zXbqo7uP71KR8Dhef3mbMFer6UA==@kvack.org X-Gm-Message-State: AOJu0YzIFOB7O26Ai1VpAVy1IsDBagY7oo2w5O7nisyP9GYbztTfHAsu BsbYKqsZEVcVQYZAPoiBkyMCI6C8/ihh3rFzTU12FtBzkEnKM46cRu9vvAUjDDxoC2yU7nvqELD m1WJ43PNc/aTNglyxSwUZjMcNFTzt6XXIw5o2 X-Gm-Gg: ASbGnct2+/DYj2CURjMjHZhexWsuUZKr6n+IqCUZCJALYW5wCnEAN0EmHlwE/Vs8Sgq ccQXXpQDdmQJjmPRrEbo62OMdWPkK6Qgpz5DAP1ic4256kulI14kIRk6MoLK9gARoSv8ObUc= X-Google-Smtp-Source: AGHT+IGqv2omEcXYZh+zeMt25c/cWZda38ROllkjZAbPHeeub8AGnjq5z0rnwPwyYbAlyoBizqH1Tq5qnHzxi+9chwQ= X-Received: by 2002:ac8:7d4f:0:b0:471:939c:a304 with SMTP id d75a77b69052e-47215beb9bcmr3661491cf.8.1740053129093; Thu, 20 Feb 2025 04:05:29 -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: <2cdc5414-a280-4c47-86d5-4261a12deab6@redhat.com> From: Fuad Tabba Date: Thu, 20 Feb 2025 12:04:52 +0000 X-Gm-Features: AWEUYZn5G0GFm0jvs3Hnrk6KLDrgXfy_elTFvfFXpStQbGg36tNQypYCQ5puB8s 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: 6140D4002D X-Rspamd-Server: rspam07 X-Stat-Signature: 17reohjwps744yzz4kuzt943b6fztwrn X-HE-Tag: 1740053130-521053 X-HE-Meta: U2FsdGVkX1+/p2Y/tmYw5uf6IeUlDFdGxwv+jKvgYUrNjnvlro7F0ONEUrdvmRR1hj2FHCYNaSEAGoNHVMhc7qB53pX9tbaXzlSiy967kt/krjPjE0Vj+umT1eWewIwXtaA+Dl7FdwMNQQdS/V7bwWXlqctj6uQ0PPFhPs9RK+tGEyQRCwGQ/DO/czKD4U8bHDNgn4RCiwwBNiJSfljxs6DKRsrt6zESYGa4+w/5VRVgV7toK0Niigq82xrH5XMNsnrt82ER72apmlw+Ozi5v30Vxc7AWa0hOoQfxNeEeg3PZjHYMfxIlnJxA2Nn/nNwxrLZhFduYgz/s2Ipc6MxtesoMUxnvFlczFPSi0kIWKKXoL5xgkKnWSGyJb6kFmTxFiB+BjOUOQU814snVtctYj5Tv0HKQA9wfIigj1aIabonZ+01d1cdcR4bVRqJQQje9ADVcOD6H/G3+l9JnI2BSRbcdhtsH6+M4YEAjrsFrHvhMpOUZfAAaiovvaP9jTvSZyMfXFA3UZLuCSCE2DTZxIuYiC9GStnnUfnzWtHw0f/BcPojjmZ6qN8aSE84fcyyun05uQGPwJvcMtvHHXtL3/XVCf5ncPnJTVEN1VXjKqRa6zubjVpT3yDL1AQfYLZlxWh0DPJqJgJP9pzy0AUSdnfro8cpdIc0t0FC1dsvORKJiJKfzajHvbzae/vPioJxiuidI0dTISf8IY9BbZkDxn7hbtoEKcTzDUUn04Em7SMWIol2F7m3IAjDV9qgU/63eFjTQwL0833qVXLXTzhUPsxM0yrZ3r+FlTjYxH48iIaTAN2maaD9Jqk5Rzmi0jEvsIkDt8NFy75Z/DO2uFXQdNlYl9L5yE59qeV0TIj/7G/t3MvSIyfF5yq8XawUUzUFOZSG8888xmfg5pkChu3MUUsh0sqGHgfrrhb3x+uuSOycvuK1a5uk2C2ruviR86XCmCu/gDrlyB/vuoZjfEw bIhrAcSG Qc8d1ULGQRCL087nHxTmeeRBgC2FVsz5IK2tg2O7I9etYGUXNo5BeCYy86mHHTSbVHGXn1wW/HRahNv+L9zwb0st8wniSkR4F4x/zDwX4hArWpnAxH2JxaU4SdFEpLgQg/gd8VMHgsOI1ETGbNKjiqi4EcnbYlXDyKgyb+UMBUz2TW1QM2jELnZsLfBsg+3E2i28AnO4D1e90/kSYoxFhzU+Xv2N60okAUvlv1Am9dvG758w5HVfa5ad8Y+fdUKADQ5V4dirgU4eEnC+hE9j0NmgmuJQY/ZNhPSwdDH0W+EwB/DpZdtRyK06n+WBlxDsmudDQj96doW4PYeJXJRpkUzm4Aa0UNd2HiedO5RJQuYwqrG8= 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 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. Thanks, /fuad > -- > Cheers, > > David / dhildenb >