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 4399BC02198 for ; Wed, 12 Feb 2025 18:19:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CEC806B0089; Wed, 12 Feb 2025 13:19:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C75746B008A; Wed, 12 Feb 2025 13:19:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AC8A76B008C; Wed, 12 Feb 2025 13:19:57 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 8B37A6B0089 for ; Wed, 12 Feb 2025 13:19:57 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 4882280547 for ; Wed, 12 Feb 2025 18:19:57 +0000 (UTC) X-FDA: 83112106434.09.93C7EF5 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf25.hostedemail.com (Postfix) with ESMTP id DA860A0010 for ; Wed, 12 Feb 2025 18:19:54 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=KCp6fFDm; spf=pass (imf25.hostedemail.com: domain of peterx@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739384395; 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=7TaJyS8UpMoetirTb14n4MP+blnMrufFTQ0BeKyiM/A=; b=2dbhnrdsPpVVQZcjKxJ+rt4AO9nIPLGRqCpe/UW1OMzTYoDfgCfhko/kdWQ+h/Q2c4TOrr NkLHeqvrFeMYMQ9brnUKm3tAo5i5SI2kVPJ6XwmHoapL/1OZOxB683hwajkc93Aho5K++s RBBGrZBLWv9bx5/77bIQd3xNor+he4c= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=KCp6fFDm; spf=pass (imf25.hostedemail.com: domain of peterx@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739384395; a=rsa-sha256; cv=none; b=ls0isJPkvw8GXM50b7bicxBBHRzhrT/qXBtyOYV0ZMPn7VNJ74WhWDTkcGMT0J27XFicbF 4JAOg/+eH5ttngVj7CCyWi0MYsHoqvngcOx+JEr+vfsZenwXaBBi98PK5piKulSYB132PF J6b6VyL0k5h9aArPRo08IJ26YJ2WFPU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739384394; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=7TaJyS8UpMoetirTb14n4MP+blnMrufFTQ0BeKyiM/A=; b=KCp6fFDm+s73lNC5ckkpXbvgtY4DzKoHe3drsjguU1KHA5d/j98zFG7UuRa4GR5ygkz/fK Dl2/F82NcPydk3HoGX0+GyNmYscIGYy7Q2DeROKUCHasTbyCLSRVhRRmLLWameJLevyqLu uQ325qEAkV0+RgY9Q4xQ2HbodG8Aa5s= Received: from mail-oa1-f71.google.com (mail-oa1-f71.google.com [209.85.160.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-558-8Bt4HTx-NVShHNgTR9WQRw-1; Wed, 12 Feb 2025 13:19:45 -0500 X-MC-Unique: 8Bt4HTx-NVShHNgTR9WQRw-1 X-Mimecast-MFC-AGG-ID: 8Bt4HTx-NVShHNgTR9WQRw Received: by mail-oa1-f71.google.com with SMTP id 586e51a60fabf-2b85ba34d99so76499fac.0 for ; Wed, 12 Feb 2025 10:19:44 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739384384; x=1739989184; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=7TaJyS8UpMoetirTb14n4MP+blnMrufFTQ0BeKyiM/A=; b=FM/p+WHKTtI5Mlw7c29hd9xIRt+/twthDr3lBcwGImdH++Xumr0gczjFaqVqM7/wqz u6ep0S5/Hes5rIJKLxc/2hM+a6l0zbd4ZK9QM/b+41LqJLTkD8u1uoXPsfZWXmO3eSEn UzcQRJMAPLnP8lJ6cZ3jUDdxIl60ldxE5jFsTJWw8nB9HOehlsV5advtqPK/8DkOm7s7 QrkYenrZecIC5PBOdAb806rNzC6X/CLnzOXtSU1Tzde59oTE3mwDQ0nyFMP3lZarbHYm ebgRno2ai4HsFUFXFlqTYSEMBlMOQL9LAhj3iw4hlbecKIG8kjjKWQ7fnz0U1cb5v9Ng 6Gvg== X-Forwarded-Encrypted: i=1; AJvYcCXP9R2ECI8ZjBDaHLev3UYSb12XNCZvwHIb2lVnmnW1pFCYKCsPZYzYGHP2wuR/gWW4m8+hduxSKQ==@kvack.org X-Gm-Message-State: AOJu0YzRl1tSHebrE8SnyWothUklu7tp6QIVMCYn0W/dG+G3G34P3yJH 3r3TLONEsVPS7EF907KxcS6BzMN7GNoADAhuYYC72KCww8H/BcRfS42jx1fM3EsxFaR0IBJd0rg rqcNSslJxl1WWY6j0AablG61fh54nu//n35EFXQr/DAIIbcpg X-Gm-Gg: ASbGncuT9y8WsOKboLRrUHpt+m808UPYZxZsP6ZCIY+kOZTuya+PZSxTBQqzxMaozYs Q7MpS7Ia9dsKRW7Vj7pHMtgxyNaW39Iwt3Ot5ywPzUv8YIK4kesvEqoDWT13W2us+tIZ2WBtk2T BMfs25Oiob5ODWv7dVwh15njFwEXy21JK/Gx1oCyREVClthiXx/h5JrUXHrO5iuOugEwSoXDTg3 bwr9kHMn40jaKHOQBz4KRJjgVMPEcF6uOFz0iOdzKKrhXYgkYU5Dms6GmM= X-Received: by 2002:a05:6870:910a:b0:288:6a16:fe1 with SMTP id 586e51a60fabf-2b8d65a165fmr2608414fac.18.1739384384130; Wed, 12 Feb 2025 10:19:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IE6yLCJZv0DxHVkLCCWT8uUox4uppNsodWZzjO6mSf7H+Gw6LNzcNxExlJipAp5dck6BfMKUA== X-Received: by 2002:a05:6870:910a:b0:288:6a16:fe1 with SMTP id 586e51a60fabf-2b8d65a165fmr2608348fac.18.1739384383715; Wed, 12 Feb 2025 10:19:43 -0800 (PST) Received: from x1.local ([2604:7a40:2041:2b00::1000]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2b832f1e59asm4880842fac.49.2025.02.12.10.19.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Feb 2025 10:19:43 -0800 (PST) Date: Wed, 12 Feb 2025 13:19:37 -0500 From: Peter Xu To: Fuad Tabba 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, yu.c.zhang@linux.intel.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 Subject: Re: [PATCH v3 02/11] KVM: guest_memfd: Handle final folio_put() of guest_memfd pages Message-ID: References: <20250211121128.703390-1-tabba@google.com> <20250211121128.703390-3-tabba@google.com> MIME-Version: 1.0 In-Reply-To: <20250211121128.703390-3-tabba@google.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: I_1wUpmBL0xRazGoaMX2fWUKiwm7erab8puu0HzJMC0_1739384384 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Disposition: inline X-Rspam-User: X-Rspamd-Queue-Id: DA860A0010 X-Stat-Signature: dbgwqr8s6jnzheghfds13dibfcdcf4x6 X-Rspamd-Server: rspam03 X-HE-Tag: 1739384394-809226 X-HE-Meta: U2FsdGVkX18Rmxl0wFbjowhfN0wQoZCoPRAO2IY/QjZIUDZIiitIuHLkfnEfXlPfWCo8ZNHPljFdlTY/CRSEOQtDqLPNUANxKAYEZkJeLWOzq/J2zfjpKGh9qdhKnIrGaDU0schiqawHFRpMFvHyvGcdjJCH3/XNcJmpgd/pnix+Xz+Phn0DdKxEDfzDG7egX8Kf6EjlTrajsyENy/PgQwTQo5AObZ1vsy8yuk/i9lZSkoFL+9d6wN+o2ReNLPjK+/6vIDh9p2eIgIml0rAAcfbKrmBwUjotsDUYRQlIrBZQMe+0xz0GJ7nsqoM5U7BWeMYR8N9UC7jMxxTRoIOwGviAMqSMCeHs0MEJM3HgNMtrL2zREgTwqUt/ZylBN8yQxzCeLY+oQMKS9MkPsn32nCua1m7SOO8Dq3wgOt7I7GFgBS7su/pIJSPvsnlTQhIQuNj2gTmmE40jSNWWLNVMwH9NtPZgKPpfE+yLxm6N/vhyWeoLXmAY7WEizy/b0z8R8IVvw6d02DxsOzkVoNmeCyBaPDXI8cZoVoxhzg5gvRM8kBAjr0lcU51sy3WwhuDdtIr5vwBzVmb7YD3IsK6LZ66ZRKdmrWyNk4qIG/yEE/MOSHn3OaaoZiFJDhCmvNDNIl9E+liB4G4qzoJmzsXYnzTSmxKfQWf5q+Ku99jdKeIF5n6oSCngPuEHmoJRK29TcD4KvqtKU8AOwRGlYTXG9QxUrYdpzva0iLYTgWTejaKJ1gQYEsFKFZKQ/DYjWA6waJrh8tL/6lAEDBqBoBDWwoxP4zUPweP5tNjc6rTHtKP2cuD2rmgk6bFkq+alZFKktmWMg4KI8+VV7BvsETHpKe+6+w0vMwXtaXW8ry0Tr0QCH2Xwmm+3tEG5EmA7I+GyUdvBzm63kjRyKE4jI3tpXM0Xp61RxLHcL9uIyPb5vVXdYgNolFgBTe6W9qKTUGgbBRD3qdE3zlSAAlIaJbX kjq15dIq g8Qe+EnPi2KkQXPR8pV1Ohl2i7fPojAsizVD2VDDGkVu88FArnliLjgsEbnZLD83lP6E4mKocTNlDwVu8tPVPWcf+nEtRcnkzlr9ZUFqOarA0JCuCwEbD3yP7sDTbka38kpnUCIcTc5u5tcT3lFheIK80OpcUPFkOlTmPZfNsovXINKl5/ZOCZTIOsOQ2NMfAEqVnpLYiISilGg3Jm7BH8FiVyEsZbJnB7SrzL32DHcitvuSJ9bRTeRzlixF4sRbC8KYJYZdhFTTUeyNH+WX2R2xpKVz0+CMm3qnla4hYmDn0qIP64BxF2taf90Ll8Ets3x+eJdknSfADmCdom6b7yH92f0/PEY/Aycol5LAuRAg6rpX+4iMUmtrQ3lVuKuplHSzClnVAAs10d2dQegMtuufQqL72iI9Au3pAq1MDTQT4qObGYGFL+uPWaM2aLjfm5tmdzqTnTF7Lqu2nZZ0YBf1iTvCt3fJ/uXVa9FW29IwScSX//MmeaHIC13A1hb6q4IoazE4aXG+y2NU= 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 Tue, Feb 11, 2025 at 12:11:18PM +0000, Fuad Tabba wrote: > Before transitioning a guest_memfd folio to unshared, thereby > disallowing access by the host and allowing the hypervisor to > transition its view of the guest page as private, we need to be > sure that the host doesn't have any references to the folio. > > This patch introduces a new type for guest_memfd folios, which > isn't activated in this series but is here as a placeholder and > to facilitate the code in the next patch. This will be used in > the future to register a callback that informs the guest_memfd > subsystem when the last reference is dropped, therefore knowing > that the host doesn't have any remaining references. > > Signed-off-by: Fuad Tabba > --- > include/linux/kvm_host.h | 9 +++++++++ > include/linux/page-flags.h | 17 +++++++++++++++++ > mm/debug.c | 1 + > mm/swap.c | 9 +++++++++ > virt/kvm/guest_memfd.c | 7 +++++++ > 5 files changed, 43 insertions(+) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index f34f4cfaa513..8b5f28f6efff 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -2571,4 +2571,13 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu, > struct kvm_pre_fault_memory *range); > #endif > > +#ifdef CONFIG_KVM_GMEM_SHARED_MEM > +void kvm_gmem_handle_folio_put(struct folio *folio); > +#else > +static inline void kvm_gmem_handle_folio_put(struct folio *folio) > +{ > + WARN_ON_ONCE(1); > +} > +#endif > + > #endif > diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h > index 6dc2494bd002..734afda268ab 100644 > --- a/include/linux/page-flags.h > +++ b/include/linux/page-flags.h > @@ -933,6 +933,17 @@ enum pagetype { > PGTY_slab = 0xf5, > PGTY_zsmalloc = 0xf6, > PGTY_unaccepted = 0xf7, > + /* > + * guestmem folios are used to back VM memory as managed by guest_memfd. > + * Once the last reference is put, instead of freeing these folios back > + * to the page allocator, they are returned to guest_memfd. > + * > + * For now, guestmem will only be set on these folios as long as they > + * cannot be mapped to user space ("private state"), with the plan of > + * always setting that type once typed folios can be mapped to user > + * space cleanly. Does it imply that gmem folios can be mapped to userspace at some point? It'll be great if you can share more about it, since as of now it looks like anything has a page type cannot use the per-page mapcount. When looking at this, I also found that __folio_rmap_sanity_checks() has some folio_test_hugetlb() tests, not sure whether they're prone to be changed too e.g. to cover all pages that have a type, so as to cover gmem. For the longer term, it'll be definitely nice if gmem folios can be mapcounted just like normal file folios. It can enable gmem as a backstore just like what normal memfd would do, with gmem managing the folios. > + */ > + PGTY_guestmem = 0xf8, > > PGTY_mapcount_underflow = 0xff > }; > @@ -1082,6 +1093,12 @@ FOLIO_TYPE_OPS(hugetlb, hugetlb) > FOLIO_TEST_FLAG_FALSE(hugetlb) > #endif > > +#ifdef CONFIG_KVM_GMEM_SHARED_MEM This seems to only be defined in follow up patches.. so may need some adjustments. > +FOLIO_TYPE_OPS(guestmem, guestmem) > +#else > +FOLIO_TEST_FLAG_FALSE(guestmem) > +#endif > + > PAGE_TYPE_OPS(Zsmalloc, zsmalloc, zsmalloc) > > /* > diff --git a/mm/debug.c b/mm/debug.c > index 8d2acf432385..08bc42c6cba8 100644 > --- a/mm/debug.c > +++ b/mm/debug.c > @@ -56,6 +56,7 @@ static const char *page_type_names[] = { > DEF_PAGETYPE_NAME(table), > DEF_PAGETYPE_NAME(buddy), > DEF_PAGETYPE_NAME(unaccepted), > + DEF_PAGETYPE_NAME(guestmem), > }; > > static const char *page_type_name(unsigned int page_type) > diff --git a/mm/swap.c b/mm/swap.c > index 47bc1bb919cc..241880a46358 100644 > --- a/mm/swap.c > +++ b/mm/swap.c > @@ -38,6 +38,10 @@ > #include > #include > > +#ifdef CONFIG_KVM_GMEM_SHARED_MEM > +#include > +#endif > + > #include "internal.h" > > #define CREATE_TRACE_POINTS > @@ -101,6 +105,11 @@ static void free_typed_folio(struct folio *folio) > case PGTY_hugetlb: > free_huge_folio(folio); > return; > +#endif > +#ifdef CONFIG_KVM_GMEM_SHARED_MEM > + case PGTY_guestmem: > + kvm_gmem_handle_folio_put(folio); > + return; > #endif > default: > WARN_ON_ONCE(1); > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > index b2aa6bf24d3a..c6f6792bec2a 100644 > --- a/virt/kvm/guest_memfd.c > +++ b/virt/kvm/guest_memfd.c > @@ -312,6 +312,13 @@ 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 > +void kvm_gmem_handle_folio_put(struct folio *folio) > +{ > + WARN_ONCE(1, "A placeholder that shouldn't trigger. Work in progress."); > +} > +#endif /* CONFIG_KVM_GMEM_SHARED_MEM */ > + > static struct file_operations kvm_gmem_fops = { > .open = generic_file_open, > .release = kvm_gmem_release, > -- > 2.48.1.502.g6dc24dfdaf-goog > > -- Peter Xu