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 87154C021B8 for ; Tue, 4 Mar 2025 09:27:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1A822280008; Tue, 4 Mar 2025 04:27:46 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 130CE280001; Tue, 4 Mar 2025 04:27:46 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EEC3F280008; Tue, 4 Mar 2025 04:27:45 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id CEBE0280001 for ; Tue, 4 Mar 2025 04:27:45 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 8AB28B7E42 for ; Tue, 4 Mar 2025 09:27:45 +0000 (UTC) X-FDA: 83183341290.25.4103C8E Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) by imf25.hostedemail.com (Postfix) with ESMTP id B2C34A0015 for ; Tue, 4 Mar 2025 09:27:43 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=xxrBIRy5; spf=pass (imf25.hostedemail.com: domain of tabba@google.com designates 209.85.160.177 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=1741080463; 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=eIgVhJmsQH/nTLKIqrqKtdfmossNogvdg5hYMrKgcCg=; b=SglYrCZL/fjFkSdEoFUuOupOo/o3ZxoD6kYNoVryoD2134Mt/rC2EP0Ymu8nxZjfWwgu52 G0aXbaMFCKXqRzX4wrD02eFZv2pG2ZExkrSlnhRxqLxXx/d91Qus3w9NIggcRtBCYdpV6I 5+sONIQdYw9jsxz146ZmAqoRUuPchR4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741080463; a=rsa-sha256; cv=none; b=saCL8WQsm/6H9L2X+gZS0SHsSLSLo4rV8Ic8uQew6gahEoHbP1hMcB6VK7laFJxZF00caL E1K18QhqVugRYWmxG0ZAVOzXzs6IHnLIFxn86h7gmPdweWLP3QCBqvagkAjiGC5ZoRAEdk VKfiVVRxZWCBXFw+0/jbjXsiC1iS4aM= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=xxrBIRy5; spf=pass (imf25.hostedemail.com: domain of tabba@google.com designates 209.85.160.177 as permitted sender) smtp.mailfrom=tabba@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-qt1-f177.google.com with SMTP id d75a77b69052e-472098e6e75so153051cf.1 for ; Tue, 04 Mar 2025 01:27:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741080463; x=1741685263; 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=eIgVhJmsQH/nTLKIqrqKtdfmossNogvdg5hYMrKgcCg=; b=xxrBIRy55FBQ0rXJwB85QGcWYgdBCOl70Dr+7VqZ7EwmNWiqUk3VUkLS5KkQkyLPD4 tZJXqnwcywREcDUx9Hv/I75gEMDyRBjlVKzaIT9Ioz8vQ9JVEONWzHq7T72znH77rMlr GZHWAAsyrzjavKSGjpcBlX+wom0wctBSosMdaxIzCUIuuw8IWFMwJDZ2V6qxwZYLtSzc ABLDYRUyPlAsaf8NtfFfscncqwl3B52/A9m4QAttaSBAvlR1+R9L4ysiQMpcc2VH4c3X hWKmTUEQxVjBGjQJ1K8QXtZ4I9X8w6ahginkx3jivdZs6HH3zhX8U6noOtRpBSNA14qg i1Ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741080463; x=1741685263; 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=eIgVhJmsQH/nTLKIqrqKtdfmossNogvdg5hYMrKgcCg=; b=EiVop05l4iobnOclI+/hFpy/oGOpEaUnS0KsA4fJEZ97O6TKgZsYbDVW/kL2WKZlZD d0q7a31WjBvFrWQVFRMg7GGSY5F4+47I8CnwbIEAZsjbIwxpTTOMQ0bUYLYHD4HiLm98 oMRS6UY/7m3GhHmWObvH0YRqEslkgo/b153nX950IafH3StVaagOkoRQLwu95GKUF2cJ jYObH/+/v+TkNYe5j08/wCKj/yW+WBKtC34w5GT5C8bdHlF5iYkDMqFEv3gqdc5XUE6T UOAlFXt5yqe+AAOhGjRhOZ4vB56VXud8PfC4NWJquc4uE99h2qI93lozWS0LdLUVY+X1 ZYug== X-Forwarded-Encrypted: i=1; AJvYcCUmCA7z4vYoxdQTt6CLIFUNcwj7Xe9R2Qa+zmDYQbeZd8EI1ef98P4Wv2WWpWhbllF/DCTtSlRSww==@kvack.org X-Gm-Message-State: AOJu0Yyr/gRf4Klw+wKaxlaohWB9RqeapX868b4voRmCPMd9GaAoZ/w4 YEcG/n9Ww7vJiXsDZ9O7VqXN4fUdQtvud5LgKr781O1Na0kIjlFVz1reSCpiw4BYEe/7InNF0jR crr1NQ+LDYKvh3z+cl6XNaq0Eni8mXuLwJ/gz+5C+V4F/uFaKjg== X-Gm-Gg: ASbGnctx4cXIJ0gOcIk+vfgskeKUPAVGweRobFaBqFH33xtfBcIv8H0L6Cuk1l0z9SL LAml5mFgmum1WaZqOeTPTZZyOmVzMcEmncC7SEWRGGlPNrqhX1QJT1GaIJdh/Cb5AE2KvSI5BvF 1gZ6HstRkPlT8/90TlbxXu0dpx8iVcPoLgZP+4eQkUDFp+EQ/RWEuZH54= X-Google-Smtp-Source: AGHT+IHsZuC23g/uh3SSVKq4rkPW1WzUnSf8ekJkyfQuIussZgztbtyjQJeQaUGYUXrTxcUgFXqtWw80zkk5kvL73vM= X-Received: by 2002:a05:622a:30a:b0:472:478:b124 with SMTP id d75a77b69052e-474fc4f4744mr2945431cf.4.1741080462571; Tue, 04 Mar 2025 01:27:42 -0800 (PST) MIME-Version: 1.0 References: <20250303171013.3548775-1-tabba@google.com> <20250303171013.3548775-4-tabba@google.com> In-Reply-To: From: Fuad Tabba Date: Tue, 4 Mar 2025 09:27:06 +0000 X-Gm-Features: AQ5f1JpPT-4XTY67ZApVHNV2aiZrblq3mYvIthvKONohBapTfIi7NVRO9qWQ65M Message-ID: Subject: Re: [PATCH v5 3/9] KVM: guest_memfd: Allow host to map guest_memfd() pages To: "Kirill A. Shutemov" 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, david@redhat.com, michael.roth@amd.com, wei.w.wang@intel.com, liam.merwick@oracle.com, isaku.yamahata@gmail.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: eap6ize95ofamzaeugz56h4coow6h6fp X-Rspamd-Queue-Id: B2C34A0015 X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1741080463-162892 X-HE-Meta: U2FsdGVkX18MqF2Wd2HFaZUlIC9Oon7EYbrBKgSDaAlcyVo6w664ptww/ojl4Bu0GJFnszM+IXplM6rjvS3QTYWecbVoMDSdcYx+clHRZguZJi9ZsmQXhARjEkAaG3hGp+EOv0/MInDT29BPSgSaN5KWgN2gLyfsnGhXMM3xWuKvWKV720PhE44Wm2imn/Sf4iDUZUD7I/onp0GsIe/0lsdL/xgDK+ZkIw11YFIP183+A3VfE2uyJVQyB1JBmPaXKsaQG52jltINiensPvfHqQCUpy4njiisscFI4n6l5bXUqDgX+5E11hRytZZkA9h3w6xXSYS3raDHLspRMvQRob/Xynr4Sys4K4X8FqZFlPl7UbNQkVICCDMODPnLKJj7RV/Y+dvXqhV+QvdSnYv+Fma1XND02PY0SVxQ1au62EzC2pIKTSIqKpKjz/ZZx3vNulTKnUIxlSEPWdnhLFRXRoRedt+Fy2Lvzust+w+HgOxRQnTM9xoio0IHWS1z9Ka2Oe6/TtSq5PqqEJs2ealhh6IURsYIURsdWAhMu0dqcNg77KeVjwHZqQTNWEoN55BjM2CDPK73hAb214eY1JXEj3XplbFEtS31E/a7XUtyp/V6Gy7Zubrv78odPnDTu8khGKEyNSEMJ72q8alShVP34+vdSSc0WosJFC8D2aV7zMxm21QRFAx9iyecxI31u191roB/JIN5x33VrLliLFB9JUKl1mxscvaskt8HevBPzkO+H4J+/pMIp+R39HDfoX56oIcrGc6z3cszEEn+6U69IPSSdP1UbAiAk0Rnqo1truVPRjsuj+61B65u1HDpURo0RMH9fvuRgLiWOhgAOP6D2T4mBoMIOvofIoajk7bUvLkUDRytTa5DgeY20JrDzpeRbC4f5qy7BZpKkLMgFI9XAC4kA2SMxhwH9YAQHHWyM8qhrJAug6tMvXpOcOPdwSekDfDP1Zv+TfwEEqluI/Z yBZXY5CB epBvIryQftptaxc2D+4+twnOI/jlYcdnj2Vo/MymQUAfMYEjwgVjad5EnZVe7bEzHr6OoBcb3qiXrHgnjoflu+SiLBbjrefEwFKwmMfVyXzEcvtNDSRU686C4h6s9Z2P7nNq3on7yWwUaLHGBN0XZpWU4Tk/xzR5VbolEU6SyNDHQDMVlkaTPujQ+UGtggTZzO5paMoDqN/P7cfm2CsQyBB6zay+7ZUYwAU2xxgIrBG5/OPblQYK8b9wLaPBxElGPDs/yaRCRo+5afHaA4XNIZWyLVJG1Bi5RfzKVnixb+kuwmYSe2E56c9MoWHu50iC0ZCkwWh8fd5OfK/xQ9neuT9kaR/4hTPcy3W4qh6yoRMQIL/c= 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 Kirill, On Tue, 4 Mar 2025 at 08:58, Kirill A. Shutemov wrote: > > On Mon, Mar 03, 2025 at 05:10:07PM +0000, 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. > > > > Also add the KVM capability KVM_CAP_GMEM_SHARED_MEM, which > > indicates that the VM supports shared memory in guest_memfd, or > > that the host can create VMs that support shared memory. > > Supporting shared memory implies that memory can be mapped when > > shared with the host. > > > > This is controlled by the KVM_GMEM_SHARED_MEM configuration > > option. > > > > Signed-off-by: Fuad Tabba > > --- > > include/linux/kvm_host.h | 11 ++++ > > include/uapi/linux/kvm.h | 1 + > > virt/kvm/guest_memfd.c | 105 +++++++++++++++++++++++++++++++++++++++ > > virt/kvm/kvm_main.c | 4 ++ > > 4 files changed, 121 insertions(+) > > > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > > index 7788e3625f6d..2d025b8ee20e 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) > > Hm. Do we expect any caller for !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 b2aa6bf24d3a..4291956b51ae 100644 > > --- a/virt/kvm/guest_memfd.c > > +++ b/virt/kvm/guest_memfd.c > > @@ -312,7 +312,112 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) > > return gfn - slot->base_gfn + slot->gmem.pgoff; > > } > > > > +#ifdef CONFIG_KVM_GMEM_SHARED_MEM > > +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 this is a requirement, it would be cleaner to rename the function and > pass down the folio and check the lock state inside. Will do. Thanks, /fuad > -- > Kiryl Shutsemau / Kirill A. Shutemov