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 A4A63C3ABD8 for ; Fri, 16 May 2025 07:57:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 74CA76B00E9; Fri, 16 May 2025 03:57:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6D2496B00EA; Fri, 16 May 2025 03:57:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 54D0F6B00EB; Fri, 16 May 2025 03:57:19 -0400 (EDT) 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 306286B00E9 for ; Fri, 16 May 2025 03:57:19 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 9D97AE3A7B for ; Fri, 16 May 2025 07:57:20 +0000 (UTC) X-FDA: 83448015840.25.05A7B6F Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by imf02.hostedemail.com (Postfix) with ESMTP id BC0FE80007 for ; Fri, 16 May 2025 07:57:18 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=OzXvspji; spf=pass (imf02.hostedemail.com: domain of tabba@google.com designates 209.85.160.170 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=1747382238; 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=c3Jp6kgbpokvgF/j4fzbi4O9fxQfi2BTNxp2Nw2geBk=; b=BjSyeYG6iLPFikZpTZsvjnVQycOsYFsJPgX/yziVPAJNA/KTjl/WCHleXx4nEiU80lGLJD 1C+vgV3C0+OyFCQusXUII7F/OC9CmT3YwIGGpfmFnVH4kfIo5yveie+ZBihdkQGsoV/9K6 8ef54HrIoDwRn/Fs7l4NGIQoYIETOrs= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=OzXvspji; spf=pass (imf02.hostedemail.com: domain of tabba@google.com designates 209.85.160.170 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=1747382238; a=rsa-sha256; cv=none; b=ccRCajiO7CTWF5fG4rL+TH6RtLvlXyr2YvCud4F1viMpDCdosfl61CvTOZFCU3kbytPDt+ vEXvZ5Dy8BHmtUAalSJXMbdqGQnBIVDaGuGBNS73uZAIyuQATb5Mhj0Su5K3dMIzDJt0Wk ydy0fxc1m129rEW44LZO6xCAUCwUARE= Received: by mail-qt1-f170.google.com with SMTP id d75a77b69052e-47666573242so257581cf.0 for ; Fri, 16 May 2025 00:57:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747382238; x=1747987038; 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=c3Jp6kgbpokvgF/j4fzbi4O9fxQfi2BTNxp2Nw2geBk=; b=OzXvspji0NJLqsAPvTY3xH3jvvd8uvKcK0GbuWZEGRkJ7cN/MCIrtxtVrydzYyyid2 E4FiGIF/GEuI2XT0x8vFyrIDMs2Mg99YGf9QNpw5X0ZDSPqi9/0mOZ5FCFg6+EIgDIpA QqaiwYbU3tFCxiLeLS3AXfZMHVUxjnuQtA9iVQb2+81Hxpgc5o7LrjtI7yoVyvMvoV4p QOuQcOQtYPkvlGdFHpe7mo2x9ZXnOf53OOMLzsJ74KbhOwVbwQEPvb2s6AFNlG+4FZLx xQ6f2BL1q3BLgP/mPIlqJzCZ/wSnpJrAdOHMxZ8A5Y1H3/sZdN4ClwheOWcfGeUzJwqs OTuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747382238; x=1747987038; 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=c3Jp6kgbpokvgF/j4fzbi4O9fxQfi2BTNxp2Nw2geBk=; b=D8IJP943B7QRukD2zdgssI/I7SFAGCU/slXf5f+wbnF50vR/RWHle7S4jipkKm9zql kcOdP3Whfw8Tkj9D8TD3L5lWxzYdWBwHQOm3v0E5bDy5cni89koziAZqgSpilA0x52oT YPSiMnfwTUsR4eySiaJvFgXE5/B1fm2JAxTuOlrHgjlkhUkdbOpDhPTkKMPq9yr0aGmg QhvNMBKffWCS1iuB9MnbjIYd1FT21eI1/cJWYwf2IfAtEl0hLvvYiudW/rA8m2OQRYIw /iJEgA/qrpf45fNSP5STef5mtR6VWYvKsKIe7of1yTc8KvHHV0K69rmyamAzziPBqTnL 3uGA== X-Forwarded-Encrypted: i=1; AJvYcCXfXGaHspUicT+qjK1vqF2UJo46HonjCCtapzoqXxiq5wa7r4yFDBkp5cRJpMITT5vGcpSVcw1+PA==@kvack.org X-Gm-Message-State: AOJu0Ywo8PsnmAmSJq0x9oWECmrFNLCmc8N9DYga8ybwoT7wnuH6k63E ELpgLciYwyToGHOmiNMkFU3rUVNQ7jHOybPufPE5qBaZmWS0q2Seeh02pa1gVEgmeiChgDsqXEl +SyrZNzrJaUhMdkUM2qBTSQmr6lqEpenMtYqza5Yo X-Gm-Gg: ASbGncvaRMEMiRzb7+H115qa7/2QHYnaLSv672weMlFKB9v6xRslxNl1XBtsiru4Un3 D6KuFEMGyUWazZ4dKr0kXRR5EwaTL/7idrpzdH06BdBjRb5OJA5VWtm5H4QxnCz+lbky/M3OC+R YoTNCiU3/Q3ETmrCln7Puardeyo1iKuOvvuMSmT4sf36P/kSwH3goGLIMx17/m8Kp7gcFXNQ== X-Google-Smtp-Source: AGHT+IF/V6uW3bEV/QeZYXYvfB0OwV6WFGk/h+346eJJtcMY/gVnuOalQpd686iaC+A67ZGGGKAJiTFIjn6pAEoEFKg= X-Received: by 2002:a05:622a:13c8:b0:494:58a3:d3d3 with SMTP id d75a77b69052e-494a1dcf605mr7242811cf.20.1747382237556; Fri, 16 May 2025 00:57:17 -0700 (PDT) MIME-Version: 1.0 References: <20250513163438.3942405-1-tabba@google.com> <20250513163438.3942405-8-tabba@google.com> In-Reply-To: From: Fuad Tabba Date: Fri, 16 May 2025 09:56:40 +0200 X-Gm-Features: AX0GCFu_obOMEV6g2Z1S4ek2joHav2c-LHI4X8n0urIcq6zSRgkZfd8hv3mz17Y Message-ID: Subject: Re: [PATCH v9 07/17] KVM: guest_memfd: Allow host to map guest_memfd() pages To: Gavin Shan 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, 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, pankaj.gupta@amd.com, ira.weiny@intel.com Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam10 X-Stat-Signature: iuyanj6pr45usz6xrnwpo8agn9goiyk7 X-Rspamd-Queue-Id: BC0FE80007 X-Rspam-User: X-HE-Tag: 1747382238-561838 X-HE-Meta: U2FsdGVkX1/NDG3XLWYS78g77u2RB9Q+7b1C1bt74h7KqvOEe1YFjmGN4dEepoAiOwZy0Er/e0yAxbZScbmq3ra+u/IK8W8JrlsWm3QGoMkZOU8bPUn0E/uxcBCLP0pY1kO7OWQJnSOf5HsVt0DGIF4Gy9BPUqwbk2EnjM2vUQNkUXc2tiQ/RjuoVaW4/vgsxgGddTs65jZg/maLl8k/VdCz5BdXjoypZvduQmCCBacRIMHDHVjGpcnxi+VwtPwucDaonMymdjNzsZW5UxO5AhBynsCX0fpDupCDCDp8oeQM9W73bjJG4ncyb2dhY6Hh3AbE6Y7DiEXNa0J0A/nWqvMxNR7QTcCRkr8au3FADpW5yEpJDsxo8nDRVWJkB/iuo1JxXOqUbocB6EO49A55haP4AhE4OOzyDIy4Zn+C88IL3DmvkP7RrcOQXB6MgQAH4MIQUJK1v1NyeUA/KJlscuoOFQYZwf7sgBzD4nloVKIQOXlFUcUTvaPbxBP/pD/CE8aZSPAAGiMR7YRv/caLdEL5dAVifSIJoxQlt1IpgPfD//8OoNXFt46IMihjy+wKBHjRVkl+t/1XtDZuHvuIZ4WXgAIUVneyzocx2kqbWExeujPklPaQDDPE6u65f/cl92/WRqCj+H3SN5Lvw2vsJTUwI819BbGmvDK+plUv9+xTBMqzd2AVfyANuw4oLVIu6X3+0ojf9+0UwEcMp/lL4pZoEmEB4uSDNqvNLFxo38MiAMmSQuY4QYC1boSiwd0D5CRuzBSBSi8TykgdgdV4pzfwaIxltegcSdgRqu2OMvNfjWsTpn7dmVFsMIbxMDWoqQa7NJNI3eF+HFULPUFu/YVNsaUIg0pKppN+jUlow4P8HbFt0qtZjvScJifxeeqLhnpHNdwAQ9quQ1GuXhR9MTcqbQCs+ptVUn9hBs702CoSaXU8zxeMFVgCk2pf8d+ZkJ20qbmmNO8MZTWOMXE 4QjjN7y8 y37itChywJVC2p8aAUZjBIa6TzsvwTCnHz8bvJ1D6BN8aei+Rb/qUGbAaYRivJwGoQDw4Pkxu1Ws415v4fNQ/ssoKpSw1CbQ2pRlKPvOE6lvlhUmTtYoqLAcWofPrxiLTbyZcdZywadFH06CXsa7GmreOsvF7W8o9r+2NUDQs4BKSt9XYDtniFfSZtoXNTgp+hv8X9BGQhi8VwsVBY0QO7W/Gkon/dpZbvzy55kMuDArIm2dfZ4WtBUaGxKUIuQgPtOpCAqgBMLiP0apiM98lrAO+25B0IZwezzBi+gDG15WLOjFKqp2H3mGbRbH5zw6ofzPow+4ZuKN0pl6eVbkSeIBW705dujWWAEOsIgturz+RBpU= 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 Gavin, On Fri, 16 May 2025 at 08:09, Gavin Shan wrote: > > Hi Fuad, > > On 5/14/25 2:34 AM, Fuad Tabba wrote: > > This patch enables support for shared memory in guest_memfd, including > > mapping that memory at the host userspace. This support is gated by the > > configuration option KVM_GMEM_SHARED_MEM, and toggled by the guest_memfd > > flag GUEST_MEMFD_FLAG_SUPPORT_SHARED, which can be set when creating a > > guest_memfd instance. > > > > Co-developed-by: Ackerley Tng > > Signed-off-by: Ackerley Tng > > Signed-off-by: Fuad Tabba > > --- > > arch/x86/include/asm/kvm_host.h | 10 ++++ > > include/linux/kvm_host.h | 13 +++++ > > include/uapi/linux/kvm.h | 1 + > > virt/kvm/Kconfig | 5 ++ > > virt/kvm/guest_memfd.c | 88 +++++++++++++++++++++++++++++++++ > > 5 files changed, 117 insertions(+) > > > > [...] > > > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > > index 6db515833f61..8e6d1866b55e 100644 > > --- a/virt/kvm/guest_memfd.c > > +++ b/virt/kvm/guest_memfd.c > > @@ -312,7 +312,88 @@ 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_supports_shared(struct inode *inode) > > +{ > > + uint64_t flags = (uint64_t)inode->i_private; > > + > > + return flags & GUEST_MEMFD_FLAG_SUPPORT_SHARED; > > +} > > + > > +static vm_fault_t kvm_gmem_fault_shared(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)) { > > + int err = PTR_ERR(folio); > > + > > + if (err == -EAGAIN) > > + ret = VM_FAULT_RETRY; > > + else > > + ret = vmf_error(err); > > + > > + goto out_filemap; > > + } > > + > > + if (folio_test_hwpoison(folio)) { > > + ret = VM_FAULT_HWPOISON; > > + goto out_folio; > > + } > > + > > + if (WARN_ON_ONCE(folio_test_large(folio))) { > > + ret = VM_FAULT_SIGBUS; > > + goto out_folio; > > + } > > + > > I don't think there is a large folio involved since the max/min folio order > (stored in struct address_space::flags) should have been set to 0, meaning > only order-0 is possible when the folio (page) is allocated and added to the > page-cache. More details can be referred to AS_FOLIO_ORDER_MASK. It's unnecessary > check but not harmful. Maybe a comment is needed to mention large folio isn't > around yet, but double confirm. The idea is to document the lack of hugepage support in code, but if you think it's necessary, I could add a comment. > > > + if (!folio_test_uptodate(folio)) { > > + clear_highpage(folio_page(folio, 0)); > > + kvm_gmem_mark_prepared(folio); > > + } > > + > > I must be missing some thing here. This chunk of code is out of sync to kvm_gmem_get_pfn(), > where kvm_gmem_prepare_folio() and kvm_arch_gmem_prepare() are executed, and then > PG_uptodate is set after that. In the latest ARM CCA series, kvm_arch_gmem_prepare() > isn't used, but it would delegate the folio (page) with the prerequisite that > the folio belongs to the private address space. > > I guess that kvm_arch_gmem_prepare() is skipped here because we have the assumption that > the folio belongs to the shared address space? However, this assumption isn't always > true. We probably need to ensure the folio range is really belonging to the shared > address space by poking kvm->mem_attr_array, which can be modified by VMM through > ioctl KVM_SET_MEMORY_ATTRIBUTES. This series only supports shared memory, and the idea is not to use the attributes to check. We ensure that only certain VM types can set the flag (e.g., VM_TYPE_DEFAULT and KVM_X86_SW_PROTECTED_VM). In the patch series that builds on it, with in-place conversion between private and shared, we do add a check that the memory faulted in is in-fact shared. Thanks, /fuad > > + vmf->page = folio_file_page(folio, vmf->pgoff); > > + > > +out_folio: > > + if (ret != VM_FAULT_LOCKED) { > > + folio_unlock(folio); > > + folio_put(folio); > > + } > > + > > +out_filemap: > > + filemap_invalidate_unlock_shared(inode->i_mapping); > > + > > + return ret; > > +} > > + > > Thanks, > Gavin >