linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Gordeev <agordeev@linux.ibm.com>
To: Kevin Brodsky <kevin.brodsky@arm.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Albert Ou <aou@eecs.berkeley.edu>,
	Andreas Larsson <andreas@gaisler.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Linus Walleij <linus.walleij@linaro.org>,
	Madhavan Srinivasan <maddy@linux.ibm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Matthew Wilcox <willy@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	"Mike Rapoport (IBM)" <rppt@kernel.org>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Qi Zheng <zhengqi.arch@bytedance.com>,
	Ryan Roberts <ryan.roberts@arm.com>,
	Will Deacon <will@kernel.org>,
	Yang Shi <yang@os.amperecomputing.com>,
	linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-csky@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-openrisc@vger.kernel.org, linux-riscv@lists.infradead.org,
	linux-s390@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	sparclinux@vger.kernel.org, x86@kernel.org
Subject: Re: [PATCH v2 01/12] mm: Pass mm down to pagetable_{pte,pmd}_ctor
Date: Fri, 25 Apr 2025 18:34:52 +0200	[thread overview]
Message-ID: <aAu5rHSX7w9xjqg9@li-008a6a4c-3549-11b2-a85c-c5cc2836eea2.ibm.com> (raw)
In-Reply-To: <20250408095222.860601-2-kevin.brodsky@arm.com>

On Tue, Apr 08, 2025 at 10:52:11AM +0100, Kevin Brodsky wrote:
> In preparation for calling constructors for all kernel page tables
> while eliding unnecessary ptlock initialisation, let's pass down the
> associated mm to the PTE/PMD level ctors. (These are the two levels
> where ptlocks are used.)
> 
> In most cases the mm is already around at the point of calling the
> ctor so we simply pass it down. This is however not the case for
> special page table allocators:
> 
> * arch/arm/mm/mmu.c
> * arch/arm64/mm/mmu.c
> * arch/riscv/mm/init.c
> 
> In those cases, the page tables being allocated are either for
> standard kernel memory (init_mm) or special page directories, which
> may not be associated to any mm. For now let's pass NULL as mm; this
> will be refined where possible in future patches.
> 
> No functional change in this patch.
> 
> Signed-off-by: Kevin Brodsky <kevin.brodsky@arm.com>
> ---
>  arch/arm/mm/mmu.c                        |  2 +-
>  arch/arm64/mm/mmu.c                      |  4 ++--
>  arch/loongarch/include/asm/pgalloc.h     |  2 +-
>  arch/m68k/include/asm/mcf_pgalloc.h      |  2 +-
>  arch/m68k/include/asm/motorola_pgalloc.h | 10 +++++-----
>  arch/m68k/mm/motorola.c                  |  6 +++---
>  arch/mips/include/asm/pgalloc.h          |  2 +-
>  arch/parisc/include/asm/pgalloc.h        |  2 +-
>  arch/powerpc/mm/book3s64/pgtable.c       |  2 +-
>  arch/powerpc/mm/pgtable-frag.c           |  2 +-
>  arch/riscv/mm/init.c                     |  4 ++--
>  arch/s390/include/asm/pgalloc.h          |  2 +-
>  arch/s390/mm/pgalloc.c                   |  2 +-
>  arch/sparc/mm/init_64.c                  |  2 +-
>  arch/sparc/mm/srmmu.c                    |  2 +-
>  arch/x86/mm/pgtable.c                    |  2 +-
>  include/asm-generic/pgalloc.h            |  4 ++--
>  include/linux/mm.h                       |  6 ++++--
>  18 files changed, 30 insertions(+), 28 deletions(-)
> 
> diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
> index f02f872ea8a9..edb7f56b7c91 100644
> --- a/arch/arm/mm/mmu.c
> +++ b/arch/arm/mm/mmu.c
> @@ -735,7 +735,7 @@ static void *__init late_alloc(unsigned long sz)
>  	void *ptdesc = pagetable_alloc(GFP_PGTABLE_KERNEL & ~__GFP_HIGHMEM,
>  			get_order(sz));
>  
> -	if (!ptdesc || !pagetable_pte_ctor(ptdesc))
> +	if (!ptdesc || !pagetable_pte_ctor(NULL, ptdesc))
>  		BUG();
>  	return ptdesc_to_virt(ptdesc);
>  }
> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> index ea6695d53fb9..8c5c471cfb06 100644
> --- a/arch/arm64/mm/mmu.c
> +++ b/arch/arm64/mm/mmu.c
> @@ -494,9 +494,9 @@ static phys_addr_t pgd_pgtable_alloc(int shift)
>  	 * folded, and if so pagetable_pte_ctor() becomes nop.
>  	 */
>  	if (shift == PAGE_SHIFT)
> -		BUG_ON(!pagetable_pte_ctor(ptdesc));
> +		BUG_ON(!pagetable_pte_ctor(NULL, ptdesc));
>  	else if (shift == PMD_SHIFT)
> -		BUG_ON(!pagetable_pmd_ctor(ptdesc));
> +		BUG_ON(!pagetable_pmd_ctor(NULL, ptdesc));
>  
>  	return pa;
>  }
> diff --git a/arch/loongarch/include/asm/pgalloc.h b/arch/loongarch/include/asm/pgalloc.h
> index b58f587f0f0a..1c63a9d9a6d3 100644
> --- a/arch/loongarch/include/asm/pgalloc.h
> +++ b/arch/loongarch/include/asm/pgalloc.h
> @@ -69,7 +69,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
>  	if (!ptdesc)
>  		return NULL;
>  
> -	if (!pagetable_pmd_ctor(ptdesc)) {
> +	if (!pagetable_pmd_ctor(mm, ptdesc)) {
>  		pagetable_free(ptdesc);
>  		return NULL;
>  	}
> diff --git a/arch/m68k/include/asm/mcf_pgalloc.h b/arch/m68k/include/asm/mcf_pgalloc.h
> index 4c648b51e7fd..465a71101b7d 100644
> --- a/arch/m68k/include/asm/mcf_pgalloc.h
> +++ b/arch/m68k/include/asm/mcf_pgalloc.h
> @@ -48,7 +48,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
>  
>  	if (!ptdesc)
>  		return NULL;
> -	if (!pagetable_pte_ctor(ptdesc)) {
> +	if (!pagetable_pte_ctor(mm, ptdesc)) {
>  		pagetable_free(ptdesc);
>  		return NULL;
>  	}
> diff --git a/arch/m68k/include/asm/motorola_pgalloc.h b/arch/m68k/include/asm/motorola_pgalloc.h
> index 5abe7da8ac5a..1091fb0affbe 100644
> --- a/arch/m68k/include/asm/motorola_pgalloc.h
> +++ b/arch/m68k/include/asm/motorola_pgalloc.h
> @@ -15,7 +15,7 @@ enum m68k_table_types {
>  };
>  
>  extern void init_pointer_table(void *table, int type);
> -extern void *get_pointer_table(int type);
> +extern void *get_pointer_table(struct mm_struct *mm, int type);
>  extern int free_pointer_table(void *table, int type);
>  
>  /*
> @@ -26,7 +26,7 @@ extern int free_pointer_table(void *table, int type);
>  
>  static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
>  {
> -	return get_pointer_table(TABLE_PTE);
> +	return get_pointer_table(mm, TABLE_PTE);
>  }
>  
>  static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
> @@ -36,7 +36,7 @@ static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
>  
>  static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
>  {
> -	return get_pointer_table(TABLE_PTE);
> +	return get_pointer_table(mm, TABLE_PTE);
>  }
>  
>  static inline void pte_free(struct mm_struct *mm, pgtable_t pgtable)
> @@ -53,7 +53,7 @@ static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pgtable,
>  
>  static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
>  {
> -	return get_pointer_table(TABLE_PMD);
> +	return get_pointer_table(mm, TABLE_PMD);
>  }
>  
>  static inline int pmd_free(struct mm_struct *mm, pmd_t *pmd)
> @@ -75,7 +75,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
>  
>  static inline pgd_t *pgd_alloc(struct mm_struct *mm)
>  {
> -	return get_pointer_table(TABLE_PGD);
> +	return get_pointer_table(mm, TABLE_PGD);
>  }
>  
>  
> diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
> index 73651e093c4d..6ab3ef39ba7a 100644
> --- a/arch/m68k/mm/motorola.c
> +++ b/arch/m68k/mm/motorola.c
> @@ -139,7 +139,7 @@ void __init init_pointer_table(void *table, int type)
>  	return;
>  }
>  
> -void *get_pointer_table(int type)
> +void *get_pointer_table(struct mm_struct *mm, int type)
>  {
>  	ptable_desc *dp = ptable_list[type].next;
>  	unsigned int mask = list_empty(&ptable_list[type]) ? 0 : PD_MARKBITS(dp);
> @@ -164,10 +164,10 @@ void *get_pointer_table(int type)
>  			 * m68k doesn't have SPLIT_PTE_PTLOCKS for not having
>  			 * SMP.
>  			 */
> -			pagetable_pte_ctor(virt_to_ptdesc(page));
> +			pagetable_pte_ctor(mm, virt_to_ptdesc(page));
>  			break;
>  		case TABLE_PMD:
> -			pagetable_pmd_ctor(virt_to_ptdesc(page));
> +			pagetable_pmd_ctor(mm, virt_to_ptdesc(page));
>  			break;
>  		case TABLE_PGD:
>  			pagetable_pgd_ctor(virt_to_ptdesc(page));
> diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h
> index bbca420c96d3..942af87f1cdd 100644
> --- a/arch/mips/include/asm/pgalloc.h
> +++ b/arch/mips/include/asm/pgalloc.h
> @@ -62,7 +62,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
>  	if (!ptdesc)
>  		return NULL;
>  
> -	if (!pagetable_pmd_ctor(ptdesc)) {
> +	if (!pagetable_pmd_ctor(mm, ptdesc)) {
>  		pagetable_free(ptdesc);
>  		return NULL;
>  	}
> diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h
> index 2ca74a56415c..3b84ee93edaa 100644
> --- a/arch/parisc/include/asm/pgalloc.h
> +++ b/arch/parisc/include/asm/pgalloc.h
> @@ -39,7 +39,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
>  	ptdesc = pagetable_alloc(gfp, PMD_TABLE_ORDER);
>  	if (!ptdesc)
>  		return NULL;
> -	if (!pagetable_pmd_ctor(ptdesc)) {
> +	if (!pagetable_pmd_ctor(mm, ptdesc)) {
>  		pagetable_free(ptdesc);
>  		return NULL;
>  	}
> diff --git a/arch/powerpc/mm/book3s64/pgtable.c b/arch/powerpc/mm/book3s64/pgtable.c
> index 8f7d41ce2ca1..a282233c8785 100644
> --- a/arch/powerpc/mm/book3s64/pgtable.c
> +++ b/arch/powerpc/mm/book3s64/pgtable.c
> @@ -422,7 +422,7 @@ static pmd_t *__alloc_for_pmdcache(struct mm_struct *mm)
>  	ptdesc = pagetable_alloc(gfp, 0);
>  	if (!ptdesc)
>  		return NULL;
> -	if (!pagetable_pmd_ctor(ptdesc)) {
> +	if (!pagetable_pmd_ctor(mm, ptdesc)) {
>  		pagetable_free(ptdesc);
>  		return NULL;
>  	}
> diff --git a/arch/powerpc/mm/pgtable-frag.c b/arch/powerpc/mm/pgtable-frag.c
> index 713268ccb1a0..387e9b1fe12c 100644
> --- a/arch/powerpc/mm/pgtable-frag.c
> +++ b/arch/powerpc/mm/pgtable-frag.c
> @@ -61,7 +61,7 @@ static pte_t *__alloc_for_ptecache(struct mm_struct *mm, int kernel)
>  		ptdesc = pagetable_alloc(PGALLOC_GFP | __GFP_ACCOUNT, 0);
>  		if (!ptdesc)
>  			return NULL;
> -		if (!pagetable_pte_ctor(ptdesc)) {
> +		if (!pagetable_pte_ctor(mm, ptdesc)) {
>  			pagetable_free(ptdesc);
>  			return NULL;
>  		}
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index ab475ec6ca42..e5ef693fc778 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -442,7 +442,7 @@ static phys_addr_t __meminit alloc_pte_late(uintptr_t va)
>  {
>  	struct ptdesc *ptdesc = pagetable_alloc(GFP_KERNEL & ~__GFP_HIGHMEM, 0);
>  
> -	BUG_ON(!ptdesc || !pagetable_pte_ctor(ptdesc));
> +	BUG_ON(!ptdesc || !pagetable_pte_ctor(NULL, ptdesc));
>  	return __pa((pte_t *)ptdesc_address(ptdesc));
>  }
>  
> @@ -522,7 +522,7 @@ static phys_addr_t __meminit alloc_pmd_late(uintptr_t va)
>  {
>  	struct ptdesc *ptdesc = pagetable_alloc(GFP_KERNEL & ~__GFP_HIGHMEM, 0);
>  
> -	BUG_ON(!ptdesc || !pagetable_pmd_ctor(ptdesc));
> +	BUG_ON(!ptdesc || !pagetable_pmd_ctor(NULL, ptdesc));
>  	return __pa((pmd_t *)ptdesc_address(ptdesc));
>  }
>  
> diff --git a/arch/s390/include/asm/pgalloc.h b/arch/s390/include/asm/pgalloc.h
> index 005497ffebda..5345398df653 100644
> --- a/arch/s390/include/asm/pgalloc.h
> +++ b/arch/s390/include/asm/pgalloc.h
> @@ -97,7 +97,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr)
>  	if (!table)
>  		return NULL;
>  	crst_table_init(table, _SEGMENT_ENTRY_EMPTY);
> -	if (!pagetable_pmd_ctor(virt_to_ptdesc(table))) {
> +	if (!pagetable_pmd_ctor(mm, virt_to_ptdesc(table))) {
>  		crst_table_free(mm, table);
>  		return NULL;
>  	}
> diff --git a/arch/s390/mm/pgalloc.c b/arch/s390/mm/pgalloc.c
> index e3a6f8ae156c..619d6917e3b7 100644
> --- a/arch/s390/mm/pgalloc.c
> +++ b/arch/s390/mm/pgalloc.c
> @@ -145,7 +145,7 @@ unsigned long *page_table_alloc(struct mm_struct *mm)
>  	ptdesc = pagetable_alloc(GFP_KERNEL, 0);
>  	if (!ptdesc)
>  		return NULL;
> -	if (!pagetable_pte_ctor(ptdesc)) {
> +	if (!pagetable_pte_ctor(mm, ptdesc)) {
>  		pagetable_free(ptdesc);
>  		return NULL;
>  	}
> diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
> index 760818950464..5c8eabda1d17 100644
> --- a/arch/sparc/mm/init_64.c
> +++ b/arch/sparc/mm/init_64.c
> @@ -2895,7 +2895,7 @@ pgtable_t pte_alloc_one(struct mm_struct *mm)
>  
>  	if (!ptdesc)
>  		return NULL;
> -	if (!pagetable_pte_ctor(ptdesc)) {
> +	if (!pagetable_pte_ctor(mm, ptdesc)) {
>  		pagetable_free(ptdesc);
>  		return NULL;
>  	}
> diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
> index dd32711022f5..f8fb4911d360 100644
> --- a/arch/sparc/mm/srmmu.c
> +++ b/arch/sparc/mm/srmmu.c
> @@ -350,7 +350,7 @@ pgtable_t pte_alloc_one(struct mm_struct *mm)
>  	page = pfn_to_page(__nocache_pa((unsigned long)ptep) >> PAGE_SHIFT);
>  	spin_lock(&mm->page_table_lock);
>  	if (page_ref_inc_return(page) == 2 &&
> -			!pagetable_pte_ctor(page_ptdesc(page))) {
> +			!pagetable_pte_ctor(mm, page_ptdesc(page))) {
>  		page_ref_dec(page);
>  		ptep = NULL;
>  	}
> diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
> index a05fcddfc811..7930f234c5f6 100644
> --- a/arch/x86/mm/pgtable.c
> +++ b/arch/x86/mm/pgtable.c
> @@ -205,7 +205,7 @@ static int preallocate_pmds(struct mm_struct *mm, pmd_t *pmds[], int count)
>  
>  		if (!ptdesc)
>  			failed = true;
> -		if (ptdesc && !pagetable_pmd_ctor(ptdesc)) {
> +		if (ptdesc && !pagetable_pmd_ctor(mm, ptdesc)) {
>  			pagetable_free(ptdesc);
>  			ptdesc = NULL;
>  			failed = true;
> diff --git a/include/asm-generic/pgalloc.h b/include/asm-generic/pgalloc.h
> index 892ece4558a2..e164ca66f0f6 100644
> --- a/include/asm-generic/pgalloc.h
> +++ b/include/asm-generic/pgalloc.h
> @@ -70,7 +70,7 @@ static inline pgtable_t __pte_alloc_one_noprof(struct mm_struct *mm, gfp_t gfp)
>  	ptdesc = pagetable_alloc_noprof(gfp, 0);
>  	if (!ptdesc)
>  		return NULL;
> -	if (!pagetable_pte_ctor(ptdesc)) {
> +	if (!pagetable_pte_ctor(mm, ptdesc)) {
>  		pagetable_free(ptdesc);
>  		return NULL;
>  	}
> @@ -137,7 +137,7 @@ static inline pmd_t *pmd_alloc_one_noprof(struct mm_struct *mm, unsigned long ad
>  	ptdesc = pagetable_alloc_noprof(gfp, 0);
>  	if (!ptdesc)
>  		return NULL;
> -	if (!pagetable_pmd_ctor(ptdesc)) {
> +	if (!pagetable_pmd_ctor(mm, ptdesc)) {
>  		pagetable_free(ptdesc);
>  		return NULL;
>  	}
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index b7f13f087954..f9b793cce2c1 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -3100,7 +3100,8 @@ static inline void pagetable_dtor_free(struct ptdesc *ptdesc)
>  	pagetable_free(ptdesc);
>  }
>  
> -static inline bool pagetable_pte_ctor(struct ptdesc *ptdesc)
> +static inline bool pagetable_pte_ctor(struct mm_struct *mm,
> +				      struct ptdesc *ptdesc)
>  {
>  	if (!ptlock_init(ptdesc))
>  		return false;
> @@ -3206,7 +3207,8 @@ static inline spinlock_t *pmd_lock(struct mm_struct *mm, pmd_t *pmd)
>  	return ptl;
>  }
>  
> -static inline bool pagetable_pmd_ctor(struct ptdesc *ptdesc)
> +static inline bool pagetable_pmd_ctor(struct mm_struct *mm,
> +				      struct ptdesc *ptdesc)
>  {
>  	if (!pmd_ptlock_init(ptdesc))
>  		return false;

Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>	# s390


  reply	other threads:[~2025-04-25 16:36 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-08  9:52 [PATCH v2 00/12] Always call constructor for kernel page tables Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 01/12] mm: Pass mm down to pagetable_{pte,pmd}_ctor Kevin Brodsky
2025-04-25 16:34   ` Alexander Gordeev [this message]
2025-04-08  9:52 ` [PATCH v2 02/12] x86: pgtable: Always use pte_free_kernel() Kevin Brodsky
2025-04-08 15:22   ` Dave Hansen
2025-04-08 16:37     ` Matthew Wilcox
2025-04-08 16:54       ` Dave Hansen
2025-04-08 17:40         ` Matthew Wilcox
2025-04-08 17:42           ` Dave Hansen
2025-04-09 14:50           ` Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 03/12] mm: Call ctor/dtor for kernel PTEs Kevin Brodsky
2025-04-25 16:35   ` Alexander Gordeev
2025-04-08  9:52 ` [PATCH v2 04/12] m68k: " Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 05/12] powerpc: " Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 06/12] sparc64: " Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 07/12] mm: Skip ptlock_init() for kernel PMDs Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 08/12] arm64: mm: Use enum to identify pgtable level instead of *_SHIFT Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 09/12] arm64: mm: Always call PTE/PMD ctor in __create_pgd_mapping() Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 10/12] riscv: mm: Clarify ctor mm argument in alloc_{pte,pmd}_late Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 11/12] arm64: mm: Call PUD/P4D ctor in __create_pgd_mapping() Kevin Brodsky
2025-04-08  9:52 ` [PATCH v2 12/12] riscv: mm: Call PUD/P4D ctor in special kernel pgtable alloc Kevin Brodsky

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=aAu5rHSX7w9xjqg9@li-008a6a4c-3549-11b2-a85c-c5cc2836eea2.ibm.com \
    --to=agordeev@linux.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=andreas@gaisler.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=catalin.marinas@arm.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=davem@davemloft.net \
    --cc=geert@linux-m68k.org \
    --cc=kevin.brodsky@arm.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-csky@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-openrisc@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=maddy@linux.ibm.com \
    --cc=mark.rutland@arm.com \
    --cc=mpe@ellerman.id.au \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=peterz@infradead.org \
    --cc=rppt@kernel.org \
    --cc=ryan.roberts@arm.com \
    --cc=sparclinux@vger.kernel.org \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    --cc=x86@kernel.org \
    --cc=yang@os.amperecomputing.com \
    --cc=zhengqi.arch@bytedance.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox