All of lore.kernel.org
 help / color / mirror / Atom feed
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 19/25] iommu/dma: Stop recycling old PISA pages when allocator waste is high
Date: Wed, 11 Nov 2026 02:57:13 +0000	[thread overview]
Message-ID: <sashiko-outbox-208134@kernel.org> (raw)
In-Reply-To: <20261109182533.3594984-20-lrizzo@google.com>

Thank you for your contribution! Sashiko AI review found 5 potential
issues to consider:
- [Medium] iommu/dma: unsafe list traversal in pisa_alloc_coherent() on
  list move
- [Low] iommu/dma: missing range check on wasted_pct in
  pisa_page_can_recycle()
- [Low] iommu/dma: unexplained EXPORT_SYMBOL change on
  pisa_page_can_recycle()
- [Low] iommu/dma: missing alloc_jiffies update in pisa_take_contig()
  error path
- [Low] iommu/dma: undocumented pisa.wasted_pct and pisa.old_ms boot
  parameters
--

commit b3ebe7c969492f612816f0a66cbeefb1c30a4e84
Author: Luigi Rizzo <lrizzo@google.com>

iommu/dma: Stop recycling old PISA pages when allocator waste is high

This commit records an allocation timestamp in struct pisa_meta and adds
the pisa.wasted_pct and pisa.old_ms parameters so pisa_page_can_recycle()
stops recycling blocks from old partially used 2MB pages when allocator
waste exceeds the threshold.

> diff --git a/drivers/iommu/pisa-alloc.c b/drivers/iommu/pisa-alloc.c
> index 1930135880d2b..5054a96f0f4e9 100644
> --- a/drivers/iommu/pisa-alloc.c
> +++ b/drivers/iommu/pisa-alloc.c
> @@ -74,6 +74,14 @@ module_param_named(idle_ms, pisa_idle_ms, uint, 0644);
>  static unsigned int pisa_compact __read_mostly;
>  module_param_named(compact, pisa_compact, uint, 0644);
>  
> +/* Stop recycling partial pages older than @pisa_old_ms when wasted blocks > @pisa_wasted_pct%. */
> +#define PISA_OLD_MS_MAX		100000U
> +static unsigned int pisa_wasted_pct __read_mostly;
> +module_param_named(wasted_pct, pisa_wasted_pct, uint, 0644);
> +
> +static unsigned int pisa_old_ms __read_mostly;
> +module_param_named(old_ms, pisa_old_ms, uint, 0644);
> +

[Severity: Low]
Since CONFIG_PISA is a bool Kconfig symbol, pisa.wasted_pct and
pisa.old_ms are built-in kernel command-line parameters.  Should they be
documented in Documentation/admin-guide/kernel-parameters.txt (with their
format, valid ranges, behavior, and architecture constraints)?  The later
commit "Documentation: Add PISA architecture documentation" in this series
lists their names under pisa.*=, but neither kernel-parameters.txt nor
Documentation/core-api/pisa.rst describes what they control or their
expected ranges.

[ ... ]

> @@ -603,7 +612,7 @@ static void pisa_return_block_locked(struct pisa_alloc *pa, struct page *block,
>   * pisa_page_can_recycle - Check if a block can stay cached in a caller pool
>   * @page: Block head page
>   *
> - * Called on the recycle fast path (per-CPU cache, TX page_frag, page_pool).
> + * Called on the recycle fast path (per-CPU cache, TX page_frag).
>   * Fast-path cost is a static-key branch plus a READ_ONCE() of module parameters
>   * (~1-2 ns when compaction is off); when enabled, it does a lockless RCU +
>   * metadata array lookup (~5-10 ns).
> @@ -613,10 +622,11 @@ static void pisa_return_block_locked(struct pisa_alloc *pa, struct page *block,
>   */
>  bool pisa_page_can_recycle(const struct page *page)
>  {
> -	unsigned long bpp, in_use, free_blocks, pfn;
> +	unsigned int compact, wasted_pct, old_ms;
> +	unsigned long bpp, in_use, free_blocks;
>  	const struct pisa_meta *meta;
>  	const struct pisa_alloc *pa;
> -	unsigned int compact;
> +	unsigned long pfn;
>  	bool ret = true;
>  	u8 on_list;
>  	long held;
> @@ -625,7 +635,9 @@ bool pisa_page_can_recycle(const struct page *page)
>  		return true;
>  
>  	compact = READ_ONCE(pisa_compact);
> -	if (!compact)
> +	wasted_pct = READ_ONCE(pisa_wasted_pct);
> +	old_ms = READ_ONCE(pisa_old_ms);
> +	if (!compact && (!wasted_pct || !old_ms))
>  		return true;
>  
>  	pfn = page_to_pfn(page);
> @@ -638,6 +650,13 @@ bool pisa_page_can_recycle(const struct page *page)
>  	if (on_list == PISA_LIST_FULL || on_list == PISA_LIST_NONE)
>  		goto out;
>  
> +	if (!compact) {
> +		unsigned long max_age = msecs_to_jiffies(min(old_ms, PISA_OLD_MS_MAX));
> +
> +		if (!time_after(jiffies, READ_ONCE(meta->alloc_jiffies) + max_age))
> +			goto out;
> +	}
> +
>  	pa = meta->pa;
>  	if (!pa)
>  		goto out;
> @@ -657,12 +676,21 @@ bool pisa_page_can_recycle(const struct page *page)
>  	free_blocks = held > 0 && (unsigned long)held * bpp > in_use ?
>  		      (unsigned long)held * bpp - in_use : 0;
>  
> -	ret = free_blocks <= (unsigned long)compact * bpp;
> +	if (compact && free_blocks > (unsigned long)compact * bpp) {
> +		ret = false;
> +		goto out;
> +	}
> +	if (wasted_pct && old_ms && held > 0 &&
> +	    free_blocks * 100 > (unsigned long)held * bpp * wasted_pct) {
> +		unsigned long max_age = msecs_to_jiffies(min(old_ms, PISA_OLD_MS_MAX));
> +
> +		ret = !time_after(jiffies, READ_ONCE(meta->alloc_jiffies) + max_age);
> +	}

[Severity: Low]
What happens if pisa_wasted_pct is set to 100 or higher?

Unlike pisa_old_ms, which is clamped to PISA_OLD_MS_MAX, pisa_wasted_pct
is registered as an unconstrained uint and used unclamped.  Setting
wasted_pct >= 100 bypasses the early return in pisa_page_can_recycle() and
runs the RCU lookup and utilization calculation on every recycle check,
even though free_blocks * 100 > held * bpp * wasted_pct can never hold (or
can overflow unsigned long for large uint values when held * bpp is large,
spuriously forcing compaction).  Also, when compact == 0, the earlier
!compact block has already verified time_after(jiffies, meta->alloc_jiffies
+ max_age), so recomputing max_age and time_after() here is redundant on
that path.

>  out:
>  	rcu_read_unlock();
>  	return ret;
>  }
> -EXPORT_SYMBOL_GPL(pisa_page_can_recycle);
> +EXPORT_SYMBOL(pisa_page_can_recycle);

[Severity: Low]
Was changing EXPORT_SYMBOL_GPL() to EXPORT_SYMBOL() on
pisa_page_can_recycle() intentional?  The commit message does not mention
dropping the GPL restriction, and it still lists page_pool as a caller
governed by pisa_page_can_recycle() even though the kernel-doc update
above removes page_pool.

[ ... ]

> @@ -1454,8 +1485,10 @@ static struct page *pisa_take_contig(struct pisa_meta *meta, unsigned int nblock
>  	}
>  
>  	if (meta->on_list == PISA_LIST_IDLE_CLEAN ||
> -	    meta->on_list == PISA_LIST_IDLE_DIRTY)
> +	    meta->on_list == PISA_LIST_IDLE_DIRTY) {
>  		pa->num_idle_pages--;
> +		WRITE_ONCE(meta->alloc_jiffies, jiffies);
> +	}

[Severity: Low]
Should the poisoned fallback path earlier in pisa_take_contig() also
update meta->alloc_jiffies when moving an idle page onto a partial list?

drivers/iommu/pisa-alloc.c:pisa_take_contig() {
    ...
		if (off >= bpp) {
			if (poisoned) {
				if (meta->on_list == PISA_LIST_IDLE_CLEAN ||
				    meta->on_list == PISA_LIST_IDLE_DIRTY)
					pa->num_idle_pages--;
				pisa_place_meta(meta);
			}
			return NULL;
		}
    ...
}

If pisa_take_contig() isolates a poisoned block on an idle page and then
fails to find nblocks contiguous blocks, pisa_place_meta() moves meta from
pa->idle onto pa->partial or pa->partial_dirty without setting
meta->alloc_jiffies.  Later allocations from that partial page will not
update meta->alloc_jiffies, leaving a stale timestamp from the page's
previous use and causing pisa_page_can_recycle() to treat blocks allocated
from it as already expired.

[ ... ]

> @@ -1544,6 +1577,7 @@ void *pisa_alloc_coherent(struct page **pagep, struct device *dev,
>  		spin_lock_irqsave(&pa->lock, flags);
>  		meta->pa = pa;
>  		meta->prot = pa->prot;
> +		WRITE_ONCE(meta->alloc_jiffies, jiffies);
>  		WRITE_ONCE(meta->flags, meta->flags | PISA_ACTIVE);
>  		pa->stats.page_alloc_cnt++;
>  		page = pisa_take_contig(meta, nblocks, align_mask);

[Severity: Medium]
Can the list_for_each_entry() loop just above this in
pisa_alloc_coherent() walk off into the wrong list if pisa_take_contig()
encounters a poisoned block and returns NULL?

drivers/iommu/pisa-alloc.c:pisa_alloc_coherent() {
    ...
	for (i = 0; i < ARRAY_SIZE(lists) && !page; i++) {
		list_for_each_entry(meta, lists[i], list) {
			page = pisa_take_contig(meta, nblocks, align_mask);
			if (page)
				break;
		}
	}
    ...
}

When pisa_take_contig() hits a poisoned block and fails to find nblocks
contiguous blocks (off >= bpp), it calls pisa_place_meta(meta) and returns
NULL.  pisa_place_meta() relinks &meta->list onto a different list head in
struct pisa_alloc (for example from pa->idle to pa->partial, or from
pa->partial to pa->partial_dirty).  Because list_for_each_entry() only
breaks when page is non-NULL, it then follows meta->list.next along the
new list while checking for termination against lists[i], walking past the
new list's head in struct pisa_alloc and dereferencing struct pisa_alloc
as a struct pisa_meta.  This was introduced earlier in this series in
commit "iommu/dma: Add PISA block allocation"; using
list_for_each_entry_safe() fixes the traversal.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261109182533.3594984-1-lrizzo@google.com?part=19


  reply	other threads:[~2026-11-11  2:57 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 [this message]
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
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-208134@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.