From: sashiko-bot@kernel.org
To: "Luigi Rizzo" <lrizzo@google.com>,
"Luigi Rizzo" <rizzo.unipi@gmail.com>,
"Joerg Roedel" <joro@8bytes.org>, "Will Deacon" <will@kernel.org>,
"Robin Murphy" <robin.murphy@arm.com>,
"Christoph Hellwig" <hch@lst.de>,
"Marek Szyprowski" <m.szyprowski@samsung.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Vlastimil Babka" <vbabka@kernel.org>,
"David Hildenbrand" <david@kernel.org>,
"Jens Axboe" <axboe@kernel.dk>,
"David S . Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@kernel.org>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Danilo Krummrich" <dakr@kernel.org>,
"Jonathan Corbet" <corbet@lwn.net>,
"Matthew Wilcox" <willy@infradead.org>,
"Lorenzo Stoakes" <ljs@kernel.org>,
"Jesper Dangaard Brouer" <hawk@kernel.org>,
"Ilias Apalodimas" <ilias.apalodimas@linaro.org>,
"Willem de Bruijn" <willemb@google.com>,
"Kuniyuki Iwashima" <kuniyu@google.com>,
"Joshua Washington" <joshwash@google.com>,
"Harshitha Ramamurthy" <hramamurthy@google.com>,
"Alexander Lobakin" <aleksander.lobakin@intel.com>,
linux-mm@kvack.org
Subject: Re: [RFC PATCH v2 23/25] block, mm, iommu/dma: Support PISA for disk I/O and scrub migration
Date: Wed, 11 Nov 2026 04:16:22 +0000 [thread overview]
Message-ID: <sashiko-outbox-208265@kernel.org> (raw)
In-Reply-To: <20261109182533.3594984-24-lrizzo@google.com>
Thank you for your contribution! Sashiko AI review found 8 potential
issues to consider:
- [High] iommu/pisa: double pisa_place_meta() and recycling in
pisa_user_scrub_alloc()
- [High] iommu/dma: 2MB PISA pages mapped into untrusted devices in
__pisa_map_phys()
- [Medium] block: broken PISA promotion and bio repin in
bio_upgrade_pages_to_pisa()
- [Medium] iommu/pisa: scrub worker never scheduled for sparse user_pa
pages
- [Medium] iommu/pisa: early scrub loop exit and age reset in
pisa_user_scrub_node()
- [Medium] iommu/pisa: block pisa_tx_bufs depends on
net_pisa_tx_bufs_set() and CONFIG_NET
- [Medium] iommu/pisa: __pisa_bdev_enabled() misses gendisk sysfs and
NVMe multipath
- [Medium] iommu/pisa: direction permission mismatch in
__pisa_filemap_alloc() and pisa_zc_iter()
--
commit 07d0de2d5b536e6ca58dfc325de503d0cd0feffd
Author: Luigi Rizzo <lrizzo@google.com>
block, mm, iommu/dma: Support PISA for disk I/O and scrub migration
This commit extends the PISA user and page-cache allocators to support
O_DIRECT and buffered disk I/O with per-direction per-node allocators,
bypasses IOVA allocation for PISA pages in dma_iova_try_alloc(), and adds
background scrub migration for sparse user PISA pages.
> diff --git a/block/bio.c b/block/bio.c
> index b0fcc69de6535..5b43430b5280c 100644
> --- a/block/bio.c
> +++ b/block/bio.c
> @@ -6,6 +6,7 @@
> #include <linux/swap.h>
> #include <linux/bio-integrity.h>
> #include <linux/blkdev.h>
> +#include <linux/pisa.h>
> #include <linux/uio.h>
> #include <linux/iocontext.h>
> #include <linux/slab.h>
> @@ -1316,6 +1317,43 @@ static inline bool bio_iov_bvec_aligned(const struct bio *bio,
> }
> #endif
>
> +/*
> + * Migrate pinned order-0 user pages in @bio into PISA memory when enabled on
> + * @bio->bi_bdev; returns true if pages were released and the caller must retry.
> + */
> +static bool bio_upgrade_pages_to_pisa(struct bio *bio)
> +{
> + enum dma_data_direction dir;
> + struct page *pages[64];
> + unsigned int i, nr = 0;
> +
> + if (!IS_ENABLED(CONFIG_PISA) || !bio_flagged(bio, BIO_PAGE_PINNED))
> + return false;
> + dir = op_is_write(bio_op(bio)) ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
> + if (!is_bdev_pisa_enabled(bio->bi_bdev, dir))
> + return false;
> +
> + for (i = 0; i < bio->bi_vcnt && nr < ARRAY_SIZE(pages); i++) {
> + struct page *page = bio->bi_io_vec[i].bv_page;
> +
> + if (bvec_nr_pages(&bio->bi_io_vec[i]) == 1 && !is_pisa_page(page)) {
> + get_page(page);
> + pages[nr++] = page;
> + }
> + }
> + if (!nr)
> + return false;
> +
> + bio_release_pages(bio, false);
> + bio->bi_vcnt = 0;
> + bio->bi_iter.bi_size = 0;
> + if (!pisa_upgrade_user_pages(pages, nr, dir, false)) {
> + while (nr)
> + put_page(pages[--nr]);
> + }
> + return true;
> +}
[Severity: Medium]
Does filtering out !is_pisa_page(page) prevent O_DIRECT buffers that are
already in a unidirectional PISA allocator from being promoted to
DMA_BIDIRECTIONAL when accessed in the opposite direction? When an
O_DIRECT buffer allocated for writes (or via MADV_PISA) is later used for
an O_DIRECT read, dma_iova_try_alloc() sees is_pisa_phys(phys) and skips
blk-mq IOVA coalescing, and __pisa_map_phys() then rejects the window
mapping with -EACCES, falling back to individual 4KB IOVA allocations per
segment.
Also, bio_release_pages() and returning true happen before
pisa_upgrade_user_pages() checks whether any page is eligible or within
pisa.user_max_4K_pages budget, forcing bio_iov_iter_get_pages() to unpin
and re-pin the entire bio on every O_DIRECT request whenever migration does
not occur.
> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index a0c5ddab7a8b6..acedfe04bde26 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
> @@ -1868,7 +1868,7 @@ bool dma_iova_try_alloc(struct device *dev, struct dma_iova_state *state,
> dma_addr_t addr;
>
> memset(state, 0, sizeof(*state));
> - if (!use_dma_iommu(dev) || is_pisa_phys(phys))
> + if (!use_dma_iommu(dev) || is_pisa_phys(phys))
> return false;
[Severity: High]
Can a 4KB PISA user or page-cache page be mapped into an untrusted external
device's IOMMU domain without bounce buffering?
When a 4KB buffer backed by a 2MB PISA frame is used for DMA on an
untrusted PCI/Thunderbolt device (dev_is_untrusted(dev) == true),
dma_iova_try_alloc() returns false because is_pisa_phys(phys) is true, and
iommu_dma_map_phys() skips swiotlb bounce buffering (since the 4KB buffer
is iova_aligned) and calls __pisa_map_phys(). Because neither
dma_iova_try_alloc() nor __pisa_map_phys() rejects untrusted devices,
__pisa_map_phys() installs a persistent 2MB IOMMU leaf PTE in the untrusted
device's domain, exposing the other 511 sibling 4KB user and page-cache
pages in that 2MB frame to DMA by the untrusted device.
> diff --git a/drivers/iommu/pisa-node.c b/drivers/iommu/pisa-node.c
> index cd29c146c281e..7469674133620 100644
> --- a/drivers/iommu/pisa-node.c
> +++ b/drivers/iommu/pisa-node.c
> @@ -184,7 +184,8 @@ void pisa_schedule_scrub(int nid)
> {
> struct pisa_node *node;
>
> - if (!READ_ONCE(pisa_scrub_max) || nid == NUMA_NO_NODE)
> + if ((!READ_ONCE(pisa_scrub_max) && !READ_ONCE(pisa_scrub_migrate)) ||
> + nid == NUMA_NO_NODE)
> return;
[Severity: Medium]
What schedules pisa_schedule_scrub() when user_pa pages age past
pisa.old_ms and exceed pisa.wasted_pct?
Outside of writing to scrub_max or scrub_migrate in sysfs,
pisa_schedule_scrub() is only called from __pisa_alloc_bulk() and
pisa_alloc_coherent() when pa->scrub_demand >= PISA_SCRUB_TRIGGER. Because
all user_pa[] allocators enable PCP in pisa_user_init() and
pisa_pcp_alloc() calls __pisa_alloc_bulk() with zero = false,
pa->scrub_demand is never incremented on user_pa[], and neither
__pisa_free_page() nor pisa_reclaim_work_fn() calls pisa_schedule_scrub(),
so background scrub migration never runs automatically.
> diff --git a/drivers/iommu/pisa-user.c b/drivers/iommu/pisa-user.c
> index a16909d429aca..7dca3bf066f0d 100644
> --- a/drivers/iommu/pisa-user.c
> +++ b/drivers/iommu/pisa-user.c
[ ... ]
> +struct folio *__pisa_filemap_alloc(const struct address_space *mapping,
> + gfp_t gfp, bool is_write)
> +{
> + enum dma_data_direction dir = is_write ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
> + struct page *page;
> + int nid;
> +
> + if (!__pisa_mapping_enabled(mapping, dir))
> + return NULL;
> + if (is_write && __pisa_mapping_enabled(mapping, DMA_FROM_DEVICE))
> + dir = DMA_BIDIRECTIONAL;
> + /* Pairs with smp_store_release() in pisa_user_init(). */
> + if (!smp_load_acquire(&pisa_user_ready) &&
> + ((gfp & GFP_KERNEL) != GFP_KERNEL || !pisa_user_init()))
> + return NULL;
> + if (pisa_user_budget() <= 0)
> + return NULL;
> + nid = pisa_sanitize_nid(numa_node_id());
> + page = pisa_alloc(pisa_nodes[nid].user_pa[dir], gfp);
> + if (!page)
> + return NULL;
> + if (pisa_meta_of_pfn(page_to_pfn(page))->flags & PISA_DECRYPTED) {
> + put_page(page);
> + return NULL;
> + }
> + return page_folio(page);
> +}
[Severity: Medium]
Can allocating page-cache folios from single-direction user_pa[dir]
allocators cause direction permission mismatches on later I/O?
When only pisa_rx_bufs is enabled on a block device, __pisa_filemap_alloc()
allocates read and readahead folios from user_pa[DMA_FROM_DEVICE]
(IOMMU_WRITE only). If those folios are later dirtied and written back,
pisa_filemap_upgrade() and pisa_writeback_upgrade() both check
pisa_mapping_enabled(mapping, DMA_TO_DEVICE) and do not promote them;
conversely, when only pisa_tx_bufs is enabled, a partial-page buffered
write allocates a locked folio from user_pa[DMA_TO_DEVICE] (IOMMU_READ
only) and write_begin immediately issues a disk READ into it. Similarly,
in net/core/datagram.c:pisa_zc_iter(), checking is_pisa_page(pages[i])
without verifying IOMMU_READ allows a DMA_FROM_DEVICE page (such as a
mmap'd page-cache folio, which pisa_upgrade_user_pages() skips because
allow_file is false) to be attached zero-copy instead of copied. In all of
these cases, dma_iova_try_alloc() sees is_pisa_phys(phys) and disables
blk-mq or TSO IOVA coalescing, only for __pisa_map_phys() to fail with
-EACCES and fall back to per-page 4KB IOVA mappings.
[ ... ]
> +bool __pisa_bdev_enabled(struct block_device *bdev, enum dma_data_direction dir)
> +{
> + struct device *dev;
> +
> + if (!bdev || !bdev->bd_disk)
> + return false;
> + for (dev = disk_to_dev(bdev->bd_disk); dev; dev = dev->parent) {
> + if (dir == DMA_FROM_DEVICE ?
> + READ_ONCE(dev->pisa_rx_bufs) :
> + READ_ONCE(dev->pisa_tx_bufs))
> + return true;
> + }
> + return false;
> +}
[Severity: Medium]
Does gating block device writes on dev->pisa_tx_bufs tie disk write support
to CONFIG_NET and the networking static key?
In drivers/base/core.c, pisa_tx_bufs is wired to net_pisa_tx_bufs_set():
drivers/base/core.c:
PISA_SET_ATTR(pisa_tx_bufs, net_pisa_tx_bufs_set);
With CONFIG_NET=n, net_pisa_tx_bufs_set() is a stub returning -EOPNOTSUPP,
so pisa_tx_bufs cannot be enabled on any block or storage controller
device. With CONFIG_NET=y, enabling pisa_tx_bufs on a storage controller
enables net_pisa_tx_bufs_key globally across the networking stack even when
no network device uses PISA.
[Severity: Medium]
Also in __pisa_bdev_enabled(), does walking dev->parent from
disk_to_dev(bdev->bd_disk) work for per-disk configuration or NVMe
multipath devices?
In drivers/base/core.c:device_add_attrs(), dev_attr_pisa_group is only
added when dev->dma_mask is non-NULL, so gendisk devices never expose
pisa_rx_bufs or pisa_tx_bufs in sysfs. Furthermore, with
CONFIG_NVME_MULTIPATH=y, nvme_mpath_set_live() sets the namespace gendisk's
parent to &head->subsys->dev (nvme-subsysX), which has parent == NULL and
dma_mask == NULL, so walking dev->parent from disk_to_dev(bdev->bd_disk)
never reaches the underlying PCI controller device.
> +
> +bool __pisa_mapping_enabled(const struct address_space *mapping, enum dma_data_direction dir)
> +{
> + struct super_block *sb;
> +
> + if (!mapping || !mapping->host || !mapping->host->i_sb)
> + return false;
> + sb = mapping->host->i_sb;
> + return __pisa_bdev_enabled(sb_is_blkdev_sb(sb) ?
> + I_BDEV(mapping->host) : sb->s_bdev, dir);
> +}
> +
> #define PISA_USER_BATCH 512
>
> +static unsigned long pisa_user_scrub_alloc(struct pisa_alloc *pa,
> + enum dma_data_direction dir,
> + unsigned int mode,
> + unsigned long budget)
> +{
[ ... ]
> + if (target) {
> + base_pfn = pisa_meta_to_pfn(target);
> + bitmap_or(inuse_map, target->clean_bitmap, target->dirty_bitmap, bpp);
> + bitmap_complement(inuse_map, inuse_map, bpp);
> + WRITE_ONCE(target->on_list, PISA_LIST_FULL);
> + list_move(&target->list, &pa->full);
> + }
> + spin_unlock_irqrestore(&pa->lock, flags);
> +
> + if (!target)
> + return 0;
[ ... ]
> + if (!list_empty(&list)) {
> + migrated = pisa_user_migrate_dir(&list, mode == 1, dir, true,
> + GFP_KERNEL | __GFP_NOWARN);
> + pisa_pcp_drain(pa);
> + }
> +
> + spin_lock_irqsave(&pa->lock, flags);
> + if (READ_ONCE(target->pa) == pa) {
> + WRITE_ONCE(target->alloc_jiffies, jiffies);
> + should_release = pisa_place_meta(target);
> + }
> + spin_unlock_irqrestore(&pa->lock, flags);
> + if (should_release)
> + pisa_schedule_reclaim();
> +
> + return migrated;
> +}
[Severity: High]
Does calling pisa_place_meta(target) after pisa_user_migrate_dir() and
pisa_pcp_drain() corrupt pa->num_idle_pages or double-add target->llnode to
pisa_free_list when all remaining blocks of target are migrated?
When the last in-use block of target is freed during migration or
pisa_pcp_drain(pa), pisa_return_block_locked() already calls
pisa_place_meta(target) with avail == bpp. In pisa_place_meta(), that
first call either increments pa->num_idle_pages and moves target to
pa->idle, or unlinks target and adds target->llnode to pisa_free_list.
Because target->pa is only cleared in pisa_release_page_rcu() after an RCU
grace period, READ_ONCE(target->pa) == pa is still true here, so
pisa_user_scrub_alloc() calls pisa_place_meta(target) a second time with
avail == bpp:
drivers/iommu/pisa-alloc.c:pisa_place_meta() {
if (avail == bpp) {
if ((meta->flags & PISA_QUARANTINED) ||
(pa->num_idle_pages >= pa->max_idle_pages && !READ_ONCE(pisa_idle_ms))) {
list_del_init(&meta->list);
WRITE_ONCE(meta->on_list, PISA_LIST_NONE);
llist_add(&meta->llnode, &pisa_free_list);
return true;
}
if (pa->num_idle_pages >= pa->max_idle_pages)
WRITE_ONCE(pa->idle_jiffies, jiffies);
pa->num_idle_pages++;
on_list = meta->nr_dirty ? PISA_LIST_IDLE_DIRTY : PISA_LIST_IDLE_CLEAN;
}
...
if (on_list == meta->on_list)
return avail == bpp && pa->num_idle_pages > pa->max_idle_pages;
}
That second call either increments pa->num_idle_pages a second time for the
same page (before the on_list == meta->on_list check), or calls
llist_add(&target->llnode, &pisa_free_list) a second time on the same node
(or moves a page already being released by pisa_reclaim_work_fn() back onto
pa->idle).
In addition, setting target->on_list = PISA_LIST_FULL before migration
makes pisa_page_can_recycle() return true for freed blocks of target, so
__pisa_free_page() caches them in pa->pcp where mode == 1 compaction can
reallocate destination folios right back onto target.
> +
> +bool pisa_user_scrub_node(int nid, unsigned long budget, u64 deadline)
> +{
> + unsigned int mode = READ_ONCE(pisa_scrub_migrate);
> + unsigned long done = 0;
> + unsigned int dir;
> +
> + /* Pairs with smp_store_release() in pisa_user_init(). */
> + if (!mode || mode > 2 || !smp_load_acquire(&pisa_user_ready))
> + return false;
> +
> + for (dir = 0; dir < ARRAY_SIZE(pisa_nodes[nid].user_pa); dir++) {
> + struct pisa_alloc *pa = pisa_nodes[nid].user_pa[dir];
> + unsigned long n;
> +
> + if (!pa)
> + continue;
> + while ((n = pisa_user_scrub_alloc(pa, dir, mode, budget - done))) {
> + done += n;
> + if (done >= budget || local_clock() >= deadline)
> + return true;
> + cond_resched();
> + }
> + }
> + return false;
> +}
[Severity: Medium]
If the oldest sparse page in pa has only unmigratable folios (for example,
locked, under writeback, pinned, or mapped shared), pisa_user_scrub_alloc()
updates target->alloc_jiffies and returns 0. Should pisa_user_scrub_node()
continue scanning the remaining old sparse pages in pa instead of exiting
the while loop on the first target page that migrates 0 folios?
Also, if pisa_user_scrub_alloc() stops isolating folios early because count
reaches min(budget - done, PISA_USER_BATCH), resetting
target->alloc_jiffies = jiffies hides the still-sparse page from the
scrubber for pisa.old_ms.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261109182533.3594984-1-lrizzo@google.com?part=23
next prev parent reply other threads:[~2026-11-11 4:16 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-03 21:22 [RFC: DMA_PMD 00/22] DMA_PMD: PMD_SIZE-backed IO buffer pools Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 01/22] iommu/dma: introduce CONFIG_DMA_PMD and metadata table Luigi Rizzo
2026-10-03 21:44 ` Randy Dunlap
2026-10-04 9:14 ` Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 02/22] iommu/dma: add DMA_PMD pool lifecycle and page recycle hook Luigi Rizzo
2026-10-10 2:59 ` kernel test robot
2026-10-03 21:22 ` [RFC: DMA_PMD 03/22] mm: Add split_page_compound() Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 04/22] iommu/dma: add DMA_PMD pool block allocation Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 05/22] iommu/dma: Global cap and shrinker for DMA_PMD pool memory Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 06/22] iommu/dma: reserve a per-domain IOVA window for DMA_PMD pages Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 07/22] iommu/dma: release DMA_PMD domain mappings on domain teardown Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 08/22] iommu/dma: use per-domain IOVA window to map DMA_PMD memory Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 09/22] iommu/dma: Add DMA_PMD arena allocator Luigi Rizzo
2026-10-08 11:25 ` kernel test robot
2026-10-03 21:22 ` [RFC: DMA_PMD 10/22] driver core: Add per-device dma_pmd_* sysfs attributes Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 11/22] dma-mapping: Use DMA_PMD arena for dma_alloc_attrs() Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 12/22] net/core: Use per-CPU DMA_PMD pools for skb_page_frag_refill() Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 13/22] net/core: Use DMA_PMD for page_pool memory Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 14/22] iommu/dma: Support decrypted and pinned DMA_PMD pages Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 15/22] iommu/dma: Add background page scrubber for DMA_PMD pools Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 16/22] iommu/dma: Add per-NUMA-node PMD page reservoir Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 17/22] net/gve: Use DMA_PMD memory for RX buffers Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 18/22] net/gve: Use DMA_PMD memory for tx header bounce buffers Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 19/22] net/mlx5e: " Luigi Rizzo
2026-10-14 17:22 ` Dragos Tatulea
2026-10-14 17:50 ` Dragos Tatulea
2026-10-14 18:28 ` Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 20/22] net/idpf: " Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 21/22] net/bnxt: " Luigi Rizzo
2026-10-03 21:22 ` [RFC: DMA_PMD 22/22] iommu/dma: Add DMA_PMD statistics and debugfs Luigi Rizzo
2026-10-11 9:02 ` [RFC: DMA_PMD 00/22] DMA_PMD: PMD_SIZE-backed IO buffer pools Pranjal Shrivastava
2026-10-12 13:51 ` David Hildenbrand (Arm)
2026-10-12 14:45 ` Luigi Rizzo
2026-10-12 19:43 ` David Hildenbrand (Arm)
2026-10-13 10:42 ` Robin Murphy
2026-10-14 10:47 ` David Hildenbrand (Arm)
2026-10-14 11:05 ` Luigi Rizzo
2026-10-17 17:11 ` Luigi Rizzo
2026-10-22 20:12 ` Jason Gunthorpe
2026-10-22 21:51 ` Luigi Rizzo
2026-10-23 14:01 ` Jason Gunthorpe
2026-10-23 14:30 ` Luigi Rizzo
2026-10-23 14:50 ` Jason Gunthorpe
2026-10-23 15:12 ` Luigi Rizzo
2026-10-23 17:27 ` Jakub Kicinski
2026-10-23 20:22 ` Luigi Rizzo
2026-11-03 8:09 ` Christoph Hellwig
2026-11-03 9:13 ` Luigi Rizzo
2026-11-03 15:10 ` Jason Gunthorpe
2026-11-06 17:21 ` Naman Gulati
2026-11-06 17:30 ` Jason Gunthorpe
2026-11-06 18:00 ` Naman Gulati
2026-11-06 18:07 ` Jason Gunthorpe
2026-11-06 18:17 ` Naman Gulati
2026-11-06 18:43 ` Jason Gunthorpe
2026-11-06 19:01 ` Luigi Rizzo
2026-11-06 19:11 ` Naman Gulati
2026-10-12 14:49 ` Mostafa Saleh
2026-10-12 15:02 ` Luigi Rizzo
2026-10-14 17:28 ` Dragos Tatulea
2026-10-14 18:14 ` Luigi Rizzo
2026-11-09 18:25 ` [RFC PATCH v2 00/25] PISA: Pre-mapped IOVA Superpage Allocator for DMA and CoCo Luigi Rizzo
2026-11-09 18:25 ` [RFC PATCH v2 01/25] iommu/dma: Introduce CONFIG_PISA and metadata table Luigi Rizzo
2026-11-10 23:12 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 02/25] iommu/dma: Add PISA allocator lifecycle and page recycle hook Luigi Rizzo
2026-11-09 18:25 ` [RFC PATCH v2 03/25] iommu/dma: Add per-NUMA-node PISA page reservoir Luigi Rizzo
2026-11-10 23:12 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 04/25] iommu/dma: Add PISA block allocation Luigi Rizzo
2026-11-10 23:12 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 05/25] iommu/dma: Add global cap and shrinker for PISA pages Luigi Rizzo
2026-11-09 18:25 ` [RFC PATCH v2 06/25] iommu/dma: Reserve a per-domain IOVA window " Luigi Rizzo
2026-11-09 18:25 ` [RFC PATCH v2 07/25] iommu/dma: Release PISA domain mappings on domain teardown Luigi Rizzo
2026-11-10 23:12 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 08/25] iommu/dma: Use per-domain IOVA window to map PISA memory Luigi Rizzo
2026-11-10 23:12 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 09/25] driver core: Add per-device pisa_* sysfs attributes for PISA optin Luigi Rizzo
2026-11-10 23:12 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 10/25] iommu/dma: Use PISA for coherent DMA allocations Luigi Rizzo
2026-11-10 23:12 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 11/25] iommu/dma: Add per-CPU block caches to PISA allocators Luigi Rizzo
2026-11-10 23:12 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 12/25] net/core: Use per-node PISA allocators for skb_page_frag_refill() Luigi Rizzo
2026-11-10 23:50 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 13/25] net/core: Use PISA for page_pool memory Luigi Rizzo
2026-11-09 18:25 ` [RFC PATCH v2 14/25] iommu/dma: Support decrypted PISA pages Luigi Rizzo
2026-11-11 0:19 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 15/25] iommu/dma: Add background page scrubber for PISA allocators Luigi Rizzo
2026-11-11 0:37 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 16/25] mm/slub: Add SLAB_CACHE_PISA_RO for PISA-backed slab caches Luigi Rizzo
2026-11-11 1:03 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 17/25] net: Allocate small skb heads from PISA Luigi Rizzo
2026-11-11 1:33 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 18/25] iommu/dma: Migrate user pages into PISA for TX zerocopy Luigi Rizzo
2026-11-11 2:41 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 19/25] iommu/dma: Stop recycling old PISA pages when allocator waste is high Luigi Rizzo
2026-11-11 2:57 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 20/25] net/libeth: Use GFP_KERNEL when pre-filling RX rings Luigi Rizzo
2026-11-11 3:13 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 21/25] net/gve: " Luigi Rizzo
2026-11-11 3:22 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 22/25] net/gve: Use PISA memory for RX buffers Luigi Rizzo
2026-11-11 3:43 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 23/25] block, mm, iommu/dma: Support PISA for disk I/O and scrub migration Luigi Rizzo
2026-11-11 4:16 ` sashiko-bot [this message]
2026-11-09 18:25 ` [RFC PATCH v2 24/25] Documentation: Add PISA architecture documentation Luigi Rizzo
2026-11-11 4:24 ` sashiko-bot
2026-11-09 18:25 ` [RFC PATCH v2 25/25] iommu/dma: Add PISA statistics and debugfs Luigi Rizzo
2026-11-11 4:37 ` sashiko-bot
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=sashiko-outbox-208265@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=aleksander.lobakin@intel.com \
--cc=axboe@kernel.dk \
--cc=corbet@lwn.net \
--cc=dakr@kernel.org \
--cc=davem@davemloft.net \
--cc=david@kernel.org \
--cc=edumazet@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hawk@kernel.org \
--cc=hch@lst.de \
--cc=hramamurthy@google.com \
--cc=ilias.apalodimas@linaro.org \
--cc=joro@8bytes.org \
--cc=joshwash@google.com \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=lrizzo@google.com \
--cc=m.szyprowski@samsung.com \
--cc=pabeni@redhat.com \
--cc=rafael@kernel.org \
--cc=rizzo.unipi@gmail.com \
--cc=robin.murphy@arm.com \
--cc=sashiko-reviews@lists.linux.dev \
--cc=vbabka@kernel.org \
--cc=will@kernel.org \
--cc=willemb@google.com \
--cc=willy@infradead.org \
/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.