All of lore.kernel.org
 help / color / mirror / Atom feed
From: Usama Arif <usama.arif@linux.dev>
To: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Usama Arif <usama.arif@linux.dev>,
	linux-arm-kernel@lists.infradead.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>,
	Ryan Roberts <ryan.roberts@arm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	David Hildenbrand <david@kernel.org>,
	Mike Rapoport <rppt@kernel.org>,
	Linu Cherian <linu.cherian@arm.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [RFC V1 10/16] arm64/mm: Route all pgtable writes via ptdesc_set()
Date: Thu, 26 Feb 2026 04:37:45 -0800	[thread overview]
Message-ID: <20260226123747.801496-1-usama.arif@linux.dev> (raw)
In-Reply-To: <20260224051153.3150613-11-anshuman.khandual@arm.com>

On Tue, 24 Feb 2026 10:41:47 +0530 Anshuman Khandual <anshuman.khandual@arm.com> wrote:

> Currently ptdesc_set() is defined as WRITE_ONCE() but this will change for
> D128 pgtable builds, for which WRITE_ONCE() is not sufficient for single
> copy atomicity.
> 
> In future this infrastructure can be used for D128 to maintain single copy
> atomicity semantics with inline asm blocks.
> 
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Will Deacon <will@kernel.org>
> Cc: Ryan Roberts <ryan.roberts@arm.com>
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
> ---
>  arch/arm64/include/asm/pgtable.h | 11 ++++++-----
>  arch/arm64/mm/mmu.c              |  4 ++--
>  mm/debug_vm_pgtable.c            |  4 ++--
>  3 files changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
> index 804ef49aea88..42124d2f323d 100644
> --- a/arch/arm64/include/asm/pgtable.h
> +++ b/arch/arm64/include/asm/pgtable.h
> @@ -85,6 +85,7 @@ static inline void arch_leave_lazy_mmu_mode(void)
>  }
>  
>  #define ptdesc_get(x)		READ_ONCE(x)
> +#define ptdesc_set(x, val)	WRITE_ONCE(x, val)
>  
>  #define pmdp_get pmdp_get
>  static inline pmd_t pmdp_get(pmd_t *pmdp)
> @@ -389,7 +390,7 @@ static inline pte_t pte_clear_uffd_wp(pte_t pte)
>  
>  static inline void __set_pte_nosync(pte_t *ptep, pte_t pte)
>  {
> -	WRITE_ONCE(*ptep, pte);
> +	ptdesc_set(*ptep, pte);
>  }
>  
>  static inline void __set_pte_complete(pte_t pte)
> @@ -856,7 +857,7 @@ static inline void set_pmd(pmd_t *pmdp, pmd_t pmd)
>  	}
>  #endif /* __PAGETABLE_PMD_FOLDED */
>  
> -	WRITE_ONCE(*pmdp, pmd);
> +	ptdesc_set(*pmdp, pmd);
>  
>  	if (pmd_valid(pmd))
>  		queue_pte_barriers();
> @@ -917,7 +918,7 @@ static inline void set_pud(pud_t *pudp, pud_t pud)
>  		return;
>  	}
>  
> -	WRITE_ONCE(*pudp, pud);
> +	ptdesc_set(*pudp, pud);
>  
>  	if (pud_valid(pud))
>  		queue_pte_barriers();
> @@ -999,7 +1000,7 @@ static inline void set_p4d(p4d_t *p4dp, p4d_t p4d)
>  		return;
>  	}
>  
> -	WRITE_ONCE(*p4dp, p4d);
> +	ptdesc_set(*p4dp, p4d);
>  	queue_pte_barriers();
>  }
>  
> @@ -1120,7 +1121,7 @@ static inline void set_pgd(pgd_t *pgdp, pgd_t pgd)
>  		return;
>  	}
>  
> -	WRITE_ONCE(*pgdp, pgd);
> +	ptdesc_set(*pgdp, pgd);
>  	queue_pte_barriers();
>  }
>  
> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> index bcf32d1a92de..ffd307c546f5 100644
> --- a/arch/arm64/mm/mmu.c
> +++ b/arch/arm64/mm/mmu.c
> @@ -83,7 +83,7 @@ void noinstr set_swapper_pgd(pgd_t *pgdp, pgd_t pgd)
>  	 * writable in the kernel mapping.
>  	 */
>  	if (rodata_is_rw) {
> -		WRITE_ONCE(*pgdp, pgd);
> +		ptdesc_set(*pgdp, pgd);
>  		dsb(ishst);
>  		isb();
>  		return;
> @@ -91,7 +91,7 @@ void noinstr set_swapper_pgd(pgd_t *pgdp, pgd_t pgd)
>  
>  	spin_lock(&swapper_pgdir_lock);
>  	fixmap_pgdp = pgd_set_fixmap(__pa_symbol(pgdp));
> -	WRITE_ONCE(*fixmap_pgdp, pgd);
> +	ptdesc_set(*fixmap_pgdp, pgd);
>  	/*
>  	 * We need dsb(ishst) here to ensure the page-table-walker sees
>  	 * our new entry before set_p?d() returns. The fixmap's
> diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c
> index 83cf07269f13..faf6a19a89a1 100644
> --- a/mm/debug_vm_pgtable.c
> +++ b/mm/debug_vm_pgtable.c
> @@ -445,7 +445,7 @@ static void __init pmd_huge_tests(struct pgtable_debug_args *args)
>  	 * X86 defined pmd_set_huge() verifies that the given
>  	 * PMD is not a populated non-leaf entry.
>  	 */
> -	WRITE_ONCE(*args->pmdp, __pmd(0));
> +	ptdesc_set(*args->pmdp, __pmd(0));

The ptdesc_set() and ptdesc_get() macros are defined in
arch/arm64/include/asm/pgtable.h and are arm64-specific. This change is
in mm/debug_vm_pgtable.c which is generic code compiled for all
architectures. Other architectures do not define ptdesc_set(), so this
will would cause a build failure on other architectures..

>  	WARN_ON(!pmd_set_huge(args->pmdp, __pfn_to_phys(args->fixed_pmd_pfn), args->page_prot));
>  	WARN_ON(!pmd_clear_huge(args->pmdp));
>  	pmd = pmdp_get(args->pmdp);
> @@ -465,7 +465,7 @@ static void __init pud_huge_tests(struct pgtable_debug_args *args)
>  	 * X86 defined pud_set_huge() verifies that the given
>  	 * PUD is not a populated non-leaf entry.
>  	 */
> -	WRITE_ONCE(*args->pudp, __pud(0));
> +	ptdesc_set(*args->pudp, __pud(0));
>  	WARN_ON(!pud_set_huge(args->pudp, __pfn_to_phys(args->fixed_pud_pfn), args->page_prot));
>  	WARN_ON(!pud_clear_huge(args->pudp));
>  	pud = pudp_get(args->pudp);
> -- 
> 2.43.0
> 
> 


  reply	other threads:[~2026-02-26 12:38 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-24  5:11 [RFC V1 00/16] arm64/mm: Enable 128 bit page table entries Anshuman Khandual
2026-02-24  5:11 ` [RFC V1 01/16] mm: Abstract printing of pxd_val() Anshuman Khandual
2026-02-26 12:34   ` Usama Arif
2026-02-26 12:49     ` Anshuman Khandual
2026-04-09 10:33   ` Mike Rapoport
2026-04-10  4:21     ` Anshuman Khandual
2026-02-24  5:11 ` [RFC V1 02/16] mm: Add read-write accessors for vm_page_prot Anshuman Khandual
2026-04-09 10:37   ` Mike Rapoport
2026-04-10  4:29     ` Anshuman Khandual
2026-02-24  5:11 ` [RFC V1 03/16] mm: Replace READ_ONCE() in pud_trans_unstable() Anshuman Khandual
2026-02-24  5:11 ` [RFC V1 04/16] perf/events: Replace READ_ONCE() with standard pgtable accessors Anshuman Khandual
2026-02-24  8:48   ` Peter Zijlstra
2026-02-24 10:08   ` Mark Rutland
2026-02-24 10:41     ` Peter Zijlstra
2026-02-24 11:22       ` Ryan Roberts
2026-02-24 12:49         ` Anshuman Khandual
2026-02-24 12:39       ` Anshuman Khandual
2026-02-24 12:53     ` Anshuman Khandual
2026-02-24  5:11 ` [RFC V1 05/16] arm64/mm: Convert READ_ONCE() as pmdp_get() while accessing PMD Anshuman Khandual
2026-04-08 12:11   ` David Hildenbrand (Arm)
2026-04-10  4:48     ` Anshuman Khandual
2026-04-15 10:31       ` David Hildenbrand (Arm)
2026-02-24  5:11 ` [RFC V1 06/16] arm64/mm: Convert READ_ONCE() as pudp_get() while accessing PUD Anshuman Khandual
2026-04-08 12:15   ` David Hildenbrand (Arm)
2026-04-10  4:50     ` Anshuman Khandual
2026-04-15 10:32       ` David Hildenbrand (Arm)
2026-02-24  5:11 ` [RFC V1 07/16] arm64/mm: Convert READ_ONCE() as p4dp_get() while accessing P4D Anshuman Khandual
2026-02-24  7:09   ` kernel test robot
2026-04-08 12:17   ` David Hildenbrand (Arm)
2026-04-10  5:05     ` Anshuman Khandual
2026-04-15 10:35       ` David Hildenbrand (Arm)
2026-02-24  5:11 ` [RFC V1 08/16] arm64/mm: Convert READ_ONCE() as pgdp_get() while accessing PGD Anshuman Khandual
2026-02-24  8:31   ` kernel test robot
2026-04-08 12:19   ` David Hildenbrand (Arm)
2026-04-10  5:30     ` Anshuman Khandual
2026-04-15 10:37       ` David Hildenbrand (Arm)
2026-02-24  5:11 ` [RFC V1 09/16] arm64/mm: Route all pgtable reads via ptdesc_get() Anshuman Khandual
2026-02-28 11:17   ` Mike Rapoport
2026-03-02  4:34     ` Anshuman Khandual
2026-04-08 12:25       ` David Hildenbrand (Arm)
2026-02-24  5:11 ` [RFC V1 10/16] arm64/mm: Route all pgtable writes via ptdesc_set() Anshuman Khandual
2026-02-26 12:37   ` Usama Arif [this message]
2026-02-26 12:54     ` Anshuman Khandual
2026-02-26 13:19       ` Ryan Roberts
2026-02-27  6:19         ` Anshuman Khandual
2026-02-24  5:11 ` [RFC V1 11/16] arm64/mm: Route all pgtable atomics to central helpers Anshuman Khandual
2026-04-08 12:28   ` David Hildenbrand (Arm)
2026-04-10  4:02     ` Anshuman Khandual
2026-04-15 10:38       ` David Hildenbrand (Arm)
2026-02-24  5:11 ` [RFC V1 12/16] arm64/mm: Abstract printing of pxd_val() Anshuman Khandual
2026-04-08 12:28   ` David Hildenbrand (Arm)
2026-04-10  4:05     ` Anshuman Khandual
2026-02-24  5:11 ` [RFC V1 13/16] arm64/mm: Override read-write accessors for vm_page_prot Anshuman Khandual
2026-02-24  5:11 ` [RFC V1 14/16] arm64/mm: Enable fixmap with 5 level page table Anshuman Khandual
2026-04-08 12:29   ` David Hildenbrand (Arm)
2026-04-10  3:22     ` Anshuman Khandual
2026-04-15 10:39       ` David Hildenbrand (Arm)
2026-02-24  5:11 ` [RFC V1 15/16] arm64/mm: Add macros __tlb_asid_level and __tlb_range Anshuman Khandual
2026-02-24  5:11 ` [RFC V1 16/16] arm64/mm: Add initial support for FEAT_D128 page tables Anshuman Khandual
2026-02-26 14:10   ` Usama Arif
2026-04-07 14:44 ` [RFC V1 00/16] arm64/mm: Enable 128 bit page table entries David Hildenbrand (Arm)
2026-04-08 10:53   ` Anshuman Khandual
2026-04-08 11:01     ` Ryan Roberts
2026-04-08 12:13     ` David Hildenbrand (Arm)
2026-04-09  2:08       ` Anshuman Khandual

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=20260226123747.801496-1-usama.arif@linux.dev \
    --to=usama.arif@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=anshuman.khandual@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=david@kernel.org \
    --cc=linu.cherian@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=mark.rutland@arm.com \
    --cc=rppt@kernel.org \
    --cc=ryan.roberts@arm.com \
    --cc=will@kernel.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.