From: Fred Griffoul <griffoul@gmail.com>
To: Ackerley Tng <ackerleytng@google.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Sean Christopherson <seanjc@google.com>,
Jason Gunthorpe <jgg@ziepe.ca>, Kevin Tian <kevin.tian@intel.com>
Cc: "Alex Williamson" <alex@shazbot.org>,
"Alexander Graf" <graf@amazon.de>,
"Alexander Viro" <viro@zeniv.linux.org.uk>,
"Alexey Kardashevskiy" <aik@amd.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Aneesh Kumar K . V" <aneesh.kumar@kernel.org>,
"Ashish Kalra" <ashish.kalra@amd.com>,
"Baolin Wang" <baolin.wang@linux.alibaba.com>,
"Baolu Lu" <baolu.lu@linux.intel.com>,
"Bill Wendling" <morbo@google.com>,
"Borislav Petkov" <bp@alien8.de>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Christian Brauner" <brauner@kernel.org>,
"Christian König" <christian.koenig@amd.com>,
"Connor Williamson" <connordw@amazon.com>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
"Dave Jiang" <dave.jiang@intel.com>,
"David Hildenbrand" <david@kernel.org>,
"David Rientjes" <rientjes@google.com>,
"David Woodhouse" <dwmw2@infradead.org>,
"Erdem Aktas" <erdemaktas@google.com>,
"Frank van der Linden" <fvdl@google.com>,
"Gregory Price" <gourry@gourry.net>,
"H . Peter Anvin" <hpa@zytor.com>,
"Hugh Dickins" <hughd@google.com>,
"Ingo Molnar" <mingo@redhat.com>,
"Jacob Pan" <jacob.pan@linux.microsoft.com>,
"James Houghton" <jthoughton@google.com>,
"Jan Kara" <jack@suse.cz>, "Jianxiong Gao" <jxgao@google.com>,
"Joerg Roedel" <joro@8bytes.org>,
"Joey Gouly" <joey.gouly@arm.com>,
"John Starks" <John.Starks@microsoft.com>,
"Jonathan Corbet" <corbet@lwn.net>,
"Justin Stitt" <justinstitt@google.com>,
"Lorenzo Stoakes" <ljs@kernel.org>,
"Marc Zyngier" <maz@kernel.org>,
"Michael Roth" <michael.roth@amd.com>,
"Mike Rapoport" <rppt@kernel.org>,
"Nathan Chancellor" <nathan@kernel.org>,
"Nick Desaulniers" <ndesaulniers@google.com>,
"Nicolin Chen" <nicolinc@nvidia.com>,
"Oliver Upton" <oupton@kernel.org>,
"Pratyush Yadav" <pratyush@kernel.org>,
"Randy Dunlap" <rdunlap@infradead.org>,
"Robin Murphy" <robin.murphy@arm.com>,
"Samiullah Khawaja" <skhawaja@google.com>,
"Shuah Khan" <shuah@kernel.org>,
"Steffen Eiden" <seiden@linux.ibm.com>,
"Steven Price" <steven.price@arm.com>,
"Suzuki K Poulose" <suzuki.poulose@arm.com>,
"Tarun Sahu" <tarunsahu@google.com>,
"Thomas Gleixner" <tglx@kernel.org>,
"Tom Lendacky" <thomas.lendacky@amd.com>,
"Tycho Andersen" <tycho@kernel.org>,
"Vishal Annapurve" <vannapurve@google.com>,
"Vlastimil Babka" <vbabka@kernel.org>,
"Will Deacon" <will@kernel.org>,
"Xu Yilun" <yilun.xu@linux.intel.com>,
"Yan Zhao" <yan.y.zhao@intel.com>,
"Zenghui Yu" <yuzenghui@huawei.com>,
x86@kernel.org, "Shuah Khan" <skhan@linuxfoundation.org>,
"Fuad Tabba" <fuad.tabba@linux.dev>,
kvm@vger.kernel.org, linux-doc@vger.kernel.org,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org, linux-mm@kvack.org,
llvm@lists.linux.dev, iommu@lists.linux.dev
Subject: [RFC PATCH 08/14] iommufd: Track the domains of revocable pages in struct iopt_pages
Date: Tue, 27 Oct 2026 15:46:43 +0000 [thread overview]
Message-ID: <20261027154649.91571-9-griffoul@gmail.com> (raw)
In-Reply-To: <20261027154649.91571-1-griffoul@gmail.com>
From: Fred Griffoul <fgriffo@amazon.co.uk>
guest_memfd pages, like dma-buf pages, can be taken away from iommufd
whatever references it holds, but the list of (area, domain) pairs to
unmap on a revoke lives in struct iopt_pages_dmabuf.
Move it to struct iopt_pages, rename the iopt_dmabuf_*track* helpers to
iopt_pages_*, and add iopt_pages_tracked() for the page types that need
it, so that other page types can use it. No functional change.
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Fred Griffoul <fgriffo@amazon.co.uk>
---
drivers/iommu/iommufd/io_pagetable.c | 24 +++++-----
drivers/iommu/iommufd/io_pagetable.h | 33 +++++++++-----
drivers/iommu/iommufd/pages.c | 67 ++++++++++++++--------------
3 files changed, 67 insertions(+), 57 deletions(-)
diff --git a/drivers/iommu/iommufd/io_pagetable.c b/drivers/iommu/iommufd/io_pagetable.c
index 4e447ce74cf6..43d518e4ce58 100644
--- a/drivers/iommu/iommufd/io_pagetable.c
+++ b/drivers/iommu/iommufd/io_pagetable.c
@@ -1086,14 +1086,14 @@ static void iopt_unfill_domain(struct io_pagetable *iopt,
WARN_ON(!area->storage_domain);
if (area->storage_domain == domain)
area->storage_domain = storage_domain;
- if (iopt_is_dmabuf(pages)) {
+ if (iopt_pages_tracked(pages)) {
if (!iopt_dmabuf_revoked(pages))
iopt_area_unmap_domain(area, domain);
- iopt_dmabuf_untrack_domain(pages, area, domain);
+ iopt_pages_untrack_domain(pages, area, domain);
}
mutex_unlock(&pages->mutex);
- if (!iopt_is_dmabuf(pages))
+ if (!iopt_pages_tracked(pages))
iopt_area_unmap_domain(area, domain);
}
return;
@@ -1111,8 +1111,8 @@ static void iopt_unfill_domain(struct io_pagetable *iopt,
WARN_ON(area->storage_domain != domain);
area->storage_domain = NULL;
iopt_area_unfill_domain(area, pages, domain);
- if (iopt_is_dmabuf(pages))
- iopt_dmabuf_untrack_domain(pages, area, domain);
+ if (iopt_pages_tracked(pages))
+ iopt_pages_untrack_domain(pages, area, domain);
mutex_unlock(&pages->mutex);
}
}
@@ -1143,15 +1143,15 @@ static int iopt_fill_domain(struct io_pagetable *iopt,
continue;
guard(mutex)(&pages->mutex);
- if (iopt_is_dmabuf(pages)) {
- rc = iopt_dmabuf_track_domain(pages, area, domain);
+ if (iopt_pages_tracked(pages)) {
+ rc = iopt_pages_track_domain(pages, area, domain);
if (rc)
goto out_unfill;
}
rc = iopt_area_fill_domain(area, domain);
if (rc) {
- if (iopt_is_dmabuf(pages))
- iopt_dmabuf_untrack_domain(pages, area, domain);
+ if (iopt_pages_tracked(pages))
+ iopt_pages_untrack_domain(pages, area, domain);
goto out_unfill;
}
if (!area->storage_domain) {
@@ -1180,8 +1180,8 @@ static int iopt_fill_domain(struct io_pagetable *iopt,
area->storage_domain = NULL;
}
iopt_area_unfill_domain(area, pages, domain);
- if (iopt_is_dmabuf(pages))
- iopt_dmabuf_untrack_domain(pages, area, domain);
+ if (iopt_pages_tracked(pages))
+ iopt_pages_untrack_domain(pages, area, domain);
mutex_unlock(&pages->mutex);
}
return rc;
@@ -1393,7 +1393,7 @@ static int iopt_area_split(struct iopt_area *area, unsigned long iova)
return -EBUSY;
/* Maintaining the domains_itree below is a bit complicated */
- if (iopt_is_dmabuf(pages))
+ if (iopt_pages_tracked(pages))
return -EOPNOTSUPP;
if (new_start & (alignment - 1) ||
diff --git a/drivers/iommu/iommufd/io_pagetable.h b/drivers/iommu/iommufd/io_pagetable.h
index 27e3e311d395..0dddfb5db5fd 100644
--- a/drivers/iommu/iommufd/io_pagetable.h
+++ b/drivers/iommu/iommufd/io_pagetable.h
@@ -70,15 +70,14 @@ void iopt_area_unfill_domain(struct iopt_area *area, struct iopt_pages *pages,
void iopt_area_unmap_domain(struct iopt_area *area,
struct iommu_domain *domain);
-int iopt_dmabuf_track_domain(struct iopt_pages *pages, struct iopt_area *area,
- struct iommu_domain *domain);
-void iopt_dmabuf_untrack_domain(struct iopt_pages *pages,
- struct iopt_area *area,
- struct iommu_domain *domain);
-int iopt_dmabuf_track_all_domains(struct iopt_area *area,
- struct iopt_pages *pages);
-void iopt_dmabuf_untrack_all_domains(struct iopt_area *area,
- struct iopt_pages *pages);
+int iopt_pages_track_domain(struct iopt_pages *pages, struct iopt_area *area,
+ struct iommu_domain *domain);
+void iopt_pages_untrack_domain(struct iopt_pages *pages, struct iopt_area *area,
+ struct iommu_domain *domain);
+int iopt_pages_track_all_domains(struct iopt_area *area,
+ struct iopt_pages *pages);
+void iopt_pages_untrack_all_domains(struct iopt_area *area,
+ struct iopt_pages *pages);
static inline unsigned long iopt_area_index(struct iopt_area *area)
{
@@ -194,7 +193,8 @@ enum iopt_address_type {
IOPT_ADDRESS_DMABUF,
};
-struct iopt_pages_dmabuf_track {
+/* One (area, domain) mapping of revocable pages, on iopt_pages::tracker. */
+struct iopt_pages_track {
struct iommu_domain *domain;
struct iopt_area *area;
struct list_head elm;
@@ -205,7 +205,6 @@ struct iopt_pages_dmabuf {
struct phys_vec phys;
/* Always PAGE_SIZE aligned */
unsigned long start;
- struct list_head tracker;
};
/*
@@ -246,6 +245,12 @@ struct iopt_pages {
struct rb_root_cached access_itree;
/* Of iopt_area::pages_node */
struct rb_root_cached domains_itree;
+ /*
+ * Of iopt_pages_track::elm. The owner of these pages can revoke them
+ * whatever references iommufd holds, so every (area, domain) that
+ * maps them is listed here for the revoke. See iopt_pages_tracked().
+ */
+ struct list_head tracker;
};
static inline bool iopt_is_dmabuf(struct iopt_pages *pages)
@@ -255,6 +260,12 @@ static inline bool iopt_is_dmabuf(struct iopt_pages *pages)
return pages->type == IOPT_ADDRESS_DMABUF;
}
+/* The owner of the pages can revoke them, so their domains are tracked. */
+static inline bool iopt_pages_tracked(struct iopt_pages *pages)
+{
+ return iopt_is_dmabuf(pages);
+}
+
static inline bool iopt_dmabuf_revoked(struct iopt_pages *pages)
{
lockdep_assert_held(&pages->mutex);
diff --git a/drivers/iommu/iommufd/pages.c b/drivers/iommu/iommufd/pages.c
index 404f31d8f729..cf0f08c4e9a6 100644
--- a/drivers/iommu/iommufd/pages.c
+++ b/drivers/iommu/iommufd/pages.c
@@ -1384,6 +1384,7 @@ static struct iopt_pages *iopt_alloc_pages(unsigned long start_byte,
pages->npages = DIV_ROUND_UP(length + start_byte, PAGE_SIZE);
pages->access_itree = RB_ROOT_CACHED;
pages->domains_itree = RB_ROOT_CACHED;
+ INIT_LIST_HEAD(&pages->tracker);
pages->writable = writable;
if (capable(CAP_IPC_LOCK))
pages->account_mode = IOPT_PAGES_ACCOUNT_NONE;
@@ -1434,13 +1435,13 @@ struct iopt_pages *iopt_alloc_file_pages(struct file *file,
static void iopt_revoke_notify(struct dma_buf_attachment *attach)
{
struct iopt_pages *pages = attach->importer_priv;
- struct iopt_pages_dmabuf_track *track;
+ struct iopt_pages_track *track;
guard(mutex)(&pages->mutex);
if (iopt_dmabuf_revoked(pages))
return;
- list_for_each_entry(track, &pages->dmabuf.tracker, elm) {
+ list_for_each_entry(track, &pages->tracker, elm) {
struct iopt_area *area = track->area;
iopt_area_unmap_domain_range(area, track->domain,
@@ -1557,7 +1558,6 @@ struct iopt_pages *iopt_alloc_dmabuf_pages(struct iommufd_ctx *ictx,
pages->account_mode = IOPT_PAGES_ACCOUNT_NONE;
pages->type = IOPT_ADDRESS_DMABUF;
pages->dmabuf.start = start - start_byte;
- INIT_LIST_HEAD(&pages->dmabuf.tracker);
rc = iopt_map_dmabuf(ictx, pages, dmabuf);
if (rc) {
@@ -1568,16 +1568,16 @@ struct iopt_pages *iopt_alloc_dmabuf_pages(struct iommufd_ctx *ictx,
return pages;
}
-int iopt_dmabuf_track_domain(struct iopt_pages *pages, struct iopt_area *area,
- struct iommu_domain *domain)
+int iopt_pages_track_domain(struct iopt_pages *pages, struct iopt_area *area,
+ struct iommu_domain *domain)
{
- struct iopt_pages_dmabuf_track *track;
+ struct iopt_pages_track *track;
lockdep_assert_held(&pages->mutex);
- if (WARN_ON(!iopt_is_dmabuf(pages)))
+ if (WARN_ON(!iopt_pages_tracked(pages)))
return -EINVAL;
- list_for_each_entry(track, &pages->dmabuf.tracker, elm)
+ list_for_each_entry(track, &pages->tracker, elm)
if (WARN_ON(track->domain == domain && track->area == area))
return -EINVAL;
@@ -1586,21 +1586,20 @@ int iopt_dmabuf_track_domain(struct iopt_pages *pages, struct iopt_area *area,
return -ENOMEM;
track->domain = domain;
track->area = area;
- list_add_tail(&track->elm, &pages->dmabuf.tracker);
+ list_add_tail(&track->elm, &pages->tracker);
return 0;
}
-void iopt_dmabuf_untrack_domain(struct iopt_pages *pages,
- struct iopt_area *area,
- struct iommu_domain *domain)
+void iopt_pages_untrack_domain(struct iopt_pages *pages, struct iopt_area *area,
+ struct iommu_domain *domain)
{
- struct iopt_pages_dmabuf_track *track;
+ struct iopt_pages_track *track;
lockdep_assert_held(&pages->mutex);
- WARN_ON(!iopt_is_dmabuf(pages));
+ WARN_ON(!iopt_pages_tracked(pages));
- list_for_each_entry(track, &pages->dmabuf.tracker, elm) {
+ list_for_each_entry(track, &pages->tracker, elm) {
if (track->domain == domain && track->area == area) {
list_del(&track->elm);
kfree(track);
@@ -1610,36 +1609,36 @@ void iopt_dmabuf_untrack_domain(struct iopt_pages *pages,
WARN_ON(true);
}
-int iopt_dmabuf_track_all_domains(struct iopt_area *area,
- struct iopt_pages *pages)
+int iopt_pages_track_all_domains(struct iopt_area *area,
+ struct iopt_pages *pages)
{
- struct iopt_pages_dmabuf_track *track;
+ struct iopt_pages_track *track;
struct iommu_domain *domain;
unsigned long index;
int rc;
- list_for_each_entry(track, &pages->dmabuf.tracker, elm)
+ list_for_each_entry(track, &pages->tracker, elm)
if (WARN_ON(track->area == area))
return -EINVAL;
xa_for_each(&area->iopt->domains, index, domain) {
- rc = iopt_dmabuf_track_domain(pages, area, domain);
+ rc = iopt_pages_track_domain(pages, area, domain);
if (rc)
goto err_untrack;
}
return 0;
err_untrack:
- iopt_dmabuf_untrack_all_domains(area, pages);
+ iopt_pages_untrack_all_domains(area, pages);
return rc;
}
-void iopt_dmabuf_untrack_all_domains(struct iopt_area *area,
- struct iopt_pages *pages)
+void iopt_pages_untrack_all_domains(struct iopt_area *area,
+ struct iopt_pages *pages)
{
- struct iopt_pages_dmabuf_track *track;
- struct iopt_pages_dmabuf_track *tmp;
+ struct iopt_pages_track *track;
+ struct iopt_pages_track *tmp;
- list_for_each_entry_safe(track, tmp, &pages->dmabuf.tracker,
+ list_for_each_entry_safe(track, tmp, &pages->tracker,
elm) {
if (track->area == area) {
list_del(&track->elm);
@@ -1656,6 +1655,7 @@ void iopt_release_pages(struct kref *kref)
WARN_ON(!RB_EMPTY_ROOT(&pages->domains_itree.rb_root));
WARN_ON(pages->npinned);
WARN_ON(!xa_empty(&pages->pinned_pfns));
+ WARN_ON(!list_empty(&pages->tracker));
if (iopt_is_dmabuf(pages) && pages->dmabuf.attach) {
struct dma_buf *dmabuf = pages->dmabuf.attach->dmabuf;
@@ -1664,7 +1664,6 @@ void iopt_release_pages(struct kref *kref)
dma_resv_unlock(dmabuf->resv);
dma_buf_detach(dmabuf, pages->dmabuf.attach);
dma_buf_put(dmabuf);
- WARN_ON(!list_empty(&pages->dmabuf.tracker));
} else if (pages->type == IOPT_ADDRESS_FILE) {
fput(pages->file);
}
@@ -1749,7 +1748,7 @@ static void __iopt_area_unfill_domain(struct iopt_area *area,
lockdep_assert_held(&pages->mutex);
- if (iopt_is_dmabuf(pages)) {
+ if (iopt_pages_tracked(pages)) {
if (WARN_ON(iopt_dmabuf_revoked(pages)))
return;
iopt_area_unmap_domain_range(area, domain, start_index,
@@ -1917,8 +1916,8 @@ int iopt_area_fill_domains(struct iopt_area *area, struct iopt_pages *pages)
return 0;
mutex_lock(&pages->mutex);
- if (iopt_is_dmabuf(pages)) {
- rc = iopt_dmabuf_track_all_domains(area, pages);
+ if (iopt_pages_tracked(pages)) {
+ rc = iopt_pages_track_all_domains(area, pages);
if (rc)
goto out_unlock;
}
@@ -1983,8 +1982,8 @@ int iopt_area_fill_domains(struct iopt_area *area, struct iopt_pages *pages)
}
pfn_reader_destroy(&pfns);
out_untrack:
- if (iopt_is_dmabuf(pages))
- iopt_dmabuf_untrack_all_domains(area, pages);
+ if (iopt_pages_tracked(pages))
+ iopt_pages_untrack_all_domains(area, pages);
out_unlock:
mutex_unlock(&pages->mutex);
return rc;
@@ -2024,8 +2023,8 @@ void iopt_area_unfill_domains(struct iopt_area *area, struct iopt_pages *pages)
WARN_ON(RB_EMPTY_NODE(&area->pages_node.rb));
interval_tree_remove(&area->pages_node, &pages->domains_itree);
iopt_area_unfill_domain(area, pages, area->storage_domain);
- if (iopt_is_dmabuf(pages))
- iopt_dmabuf_untrack_all_domains(area, pages);
+ if (iopt_pages_tracked(pages))
+ iopt_pages_untrack_all_domains(area, pages);
area->storage_domain = NULL;
out_unlock:
mutex_unlock(&pages->mutex);
--
2.47.3
next prev parent reply other threads:[~2026-10-27 15:47 UTC|newest]
Thread overview: 144+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-22 23:27 [PATCH RFC v2 00/50] guest_memfd alternative providers Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 01/50] KVM: guest_memfd: Split folio allocation and insertion in kvm_gmem_get_folio Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 02/50] KVM: guest_memfd: Route folio allocation through native provider operations Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 03/50] mm: shmem: Implement guest_memfd provider operations for tmpfs Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-23 23:31 ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 04/50] KVM: guest_memfd: Support provider folio invalidation Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-23 23:31 ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 05/50] KVM: guest_memfd: Support using resource provider Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-23 23:31 ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 06/50] KVM: selftests: Add helper to create guest_memfd with a resource file Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-23 23:31 ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 07/50] KVM: selftests: Test negative validation of resource_fd argument Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 08/50] KVM: selftests: Test rejection of unsupported filesystem for resource_fd Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 09/50] KVM: selftests: Test rejection of memfd " Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 10/50] KVM: selftests: Test rejection of swap tmpfs mounts Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-23 23:31 ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 11/50] KVM: selftests: Test rejection of hugepage " Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-23 23:32 ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 12/50] KVM: selftests: Test rejection of regular file in tmpfs mount Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 13/50] KVM: selftests: Test guest_memfd with tmpfs resource pool Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 14/50] KVM: selftests: Test guest_memfd resource pool sharing across instances Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 15/50] KVM: selftests: Test memory allocation against shared tmpfs resource pool Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 16/50] KVM: selftests: Test that shared tmpfs resource pool size limit is respected Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 17/50] KVM: selftests: Test guest execution with tmpfs-backed guest_memfd Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-23 23:32 ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 18/50] KVM: selftests: Document testing TODOs Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 19/50] KVM: selftests: Test guest_memfd conversions with tmpfs backing Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 20/50] samples/kvm: Add a memory provider sample Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 21/50] samples/kvm: Remove donate, reclaim, and move operations from sample provider Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 22/50] samples/kvm: Remove readonly support " Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 23/50] samples/kvm: Remove child ownership tracking " Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 24/50] samples/kvm: Remove MPS_SETUP support " Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 25/50] samples/kvm: Remove MMAP_CAPABLE flag " Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 26/50] samples/kvm: Remove fixed address and length module parameters Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 27/50] samples/kvm: Remove mem_provider_ops from sample provider Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 28/50] samples/kvm: Make provider files independent of a root pool Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 29/50] samples/kvm: Move set_present ioctl from device to provider file Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 30/50] KVM: selftests: Add basic test for sample memory provider Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-23 23:32 ` sashiko-bot
2026-10-22 23:28 ` [PATCH RFC v2 31/50] KVM: guest_memfd: Support getting PFNs for stage 2 from providers Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-23 17:23 ` Fred Griffoul
2026-10-29 13:49 ` Ackerley Tng
2026-10-23 17:42 ` Fred Griffoul
2026-10-22 23:28 ` [PATCH RFC v2 32/50] KVM: guest_memfd: Refactor error handling in kvm_gmem_fault_user_mapping Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 33/50] KVM: guest_memfd: Support mmap and user fault handling in PFN mode Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 34/50] KVM: guest_memfd: Skip checking outstanding references " Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-23 17:29 ` Fred Griffoul
2026-10-22 23:28 ` [PATCH RFC v2 35/50] KVM: guest_memfd: Support converting to shared " Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 36/50] KVM: guest_memfd: Support preallocating memory via fallocate " Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 37/50] KVM: guest_memfd: Clamp hole punch range to inode size Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 38/50] KVM: guest_memfd: Support reclaim during hole punch in PFN mode Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 39/50] KVM: guest_memfd: Support arch reclaim on inode destruction " Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 40/50] KVM: guest_memfd: Support put_pfn_range provider op " Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 41/50] KVM: guest_memfd: Add TODO for memory failure handling " Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 42/50] KVM: guest_memfd: Allow attaching PFN-backed providers Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 43/50] KVM: guest_memfd: Export kvm_gmem_revoke for provider-driven revocation Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 44/50] KVM: selftests: Test flag dependency of PFN_MODE on USE_RESOURCE Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 45/50] samples/kvm: Implement attach and release provider ops in sample provider Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-23 23:32 ` sashiko-bot
2026-10-22 23:28 ` [PATCH RFC v2 46/50] samples/kvm: Implement get_pfn provider operation Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 47/50] samples/kvm: Implement put_pfn_range " Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 48/50] samples/kvm: Support dynamic revocation via kvm_gmem_revoke Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 49/50] samples/kvm: Implement lookup_pfn_range provider operation Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 50/50] KVM: selftests: Test guest_memfd conversions with sample memory provider backing Ackerley Tng
2026-10-22 23:28 ` Ackerley Tng via B4 Relay
2026-10-23 23:32 ` sashiko-bot
2026-10-27 15:46 ` [RFC PATCH 00/14] guest_memfd: Export guest_memfd files to iommufd Fred Griffoul
2026-10-27 15:46 ` [RFC PATCH 01/14] KVM: guest_memfd: Clamp the order of PFN mode blocks to what KVM can map Fred Griffoul
2026-10-28 15:48 ` sashiko-bot
2026-10-29 13:25 ` Ackerley Tng
2026-10-29 17:07 ` Frederic Griffoul
2026-10-27 15:46 ` [RFC PATCH 02/14] KVM: guest_memfd: Support read-only frames from PFN mode providers Fred Griffoul
2026-10-28 15:48 ` sashiko-bot
2026-10-27 15:46 ` [RFC PATCH 03/14] KVM: guest_memfd: Allow other subsystems to map guest_memfd files Fred Griffoul
2026-10-27 15:46 ` [RFC PATCH 04/14] KVM: guest_memfd: Keep truncated folios until the exports are updated Fred Griffoul
2026-10-27 15:46 ` [RFC PATCH 05/14] KVM: guest_memfd: Export PFN mode files Fred Griffoul
2026-10-28 15:48 ` sashiko-bot
2026-10-27 15:46 ` [RFC PATCH 06/14] KVM: guest_memfd: Report the size of holes in export lookups Fred Griffoul
2026-10-27 15:46 ` [RFC PATCH 07/14] KVM: guest_memfd: Update exports when pages are allocated Fred Griffoul
2026-10-28 15:48 ` sashiko-bot
2026-10-27 15:46 ` Fred Griffoul [this message]
2026-10-27 15:46 ` [RFC PATCH 09/14] iommufd: Map guest_memfd files Fred Griffoul
2026-10-28 15:48 ` sashiko-bot
2026-10-27 15:46 ` [RFC PATCH 10/14] iommufd/selftest: Add mock-domain IOVA queries Fred Griffoul
2026-10-27 15:46 ` [RFC PATCH 11/14] KVM: guest_memfd: Add kvm_gmem_restore() for PFN mode providers Fred Griffoul
2026-10-29 12:52 ` Ackerley Tng
2026-10-29 14:27 ` Frederic Griffoul
2026-10-27 15:46 ` [RFC PATCH 12/14] samples/kvm: Add read-only pages and large blocks to the sample provider Fred Griffoul
2026-10-27 15:46 ` [RFC PATCH 13/14] samples/kvm: Back absent pages on demand in " Fred Griffoul
2026-10-28 15:48 ` sashiko-bot
2026-10-29 13:03 ` Ackerley Tng
2026-10-27 15:46 ` [RFC PATCH 14/14] KVM: selftests: Test guest_memfd mapped by iommufd Fred Griffoul
2026-10-28 15:48 ` sashiko-bot
2026-10-29 5:52 ` [PATCH RFC v2 00/50] guest_memfd alternative providers Aneesh Kumar K.V
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261027154649.91571-9-griffoul@gmail.com \
--to=griffoul@gmail.com \
--cc=John.Starks@microsoft.com \
--cc=ackerleytng@google.com \
--cc=aik@amd.com \
--cc=akpm@linux-foundation.org \
--cc=alex@shazbot.org \
--cc=aneesh.kumar@kernel.org \
--cc=ashish.kalra@amd.com \
--cc=baolin.wang@linux.alibaba.com \
--cc=baolu.lu@linux.intel.com \
--cc=bp@alien8.de \
--cc=brauner@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=christian.koenig@amd.com \
--cc=connordw@amazon.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=dave.jiang@intel.com \
--cc=david@kernel.org \
--cc=dwmw2@infradead.org \
--cc=erdemaktas@google.com \
--cc=fuad.tabba@linux.dev \
--cc=fvdl@google.com \
--cc=gourry@gourry.net \
--cc=graf@amazon.de \
--cc=hpa@zytor.com \
--cc=hughd@google.com \
--cc=iommu@lists.linux.dev \
--cc=jack@suse.cz \
--cc=jacob.pan@linux.microsoft.com \
--cc=jgg@ziepe.ca \
--cc=joey.gouly@arm.com \
--cc=joro@8bytes.org \
--cc=jthoughton@google.com \
--cc=justinstitt@google.com \
--cc=jxgao@google.com \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=llvm@lists.linux.dev \
--cc=maz@kernel.org \
--cc=michael.roth@amd.com \
--cc=mingo@redhat.com \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nicolinc@nvidia.com \
--cc=oupton@kernel.org \
--cc=pbonzini@redhat.com \
--cc=pratyush@kernel.org \
--cc=rdunlap@infradead.org \
--cc=rientjes@google.com \
--cc=robin.murphy@arm.com \
--cc=rppt@kernel.org \
--cc=seanjc@google.com \
--cc=seiden@linux.ibm.com \
--cc=shuah@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=skhawaja@google.com \
--cc=steven.price@arm.com \
--cc=suzuki.poulose@arm.com \
--cc=tarunsahu@google.com \
--cc=tglx@kernel.org \
--cc=thomas.lendacky@amd.com \
--cc=tycho@kernel.org \
--cc=vannapurve@google.com \
--cc=vbabka@kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=yan.y.zhao@intel.com \
--cc=yilun.xu@linux.intel.com \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.