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 01/16] mm: Abstract printing of pxd_val()
Date: Thu, 26 Feb 2026 04:34:39 -0800	[thread overview]
Message-ID: <20260226123442.759447-1-usama.arif@linux.dev> (raw)
In-Reply-To: <20260224051153.3150613-2-anshuman.khandual@arm.com>

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

> Ahead of adding support for D128 pgtables, refactor places that print
> PTE values to use the new __PRIpte format specifier and __PRIpte_args()
> macro to prepare the argument(s). When using D128 pgtables in future,
> we can simply redefine __PRIpte and __PTIpte_args().
> 
> Besides there is also an assumption about pxd_val() being always capped
> at 'unsigned long long' size but that will not work for D128 pgtables.
> Just increase its size to u128 if the compiler supports via a separate
> data type pxdval_t which also defaults to existing 'unsigned long long'.
> 
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: David Hildenbrand <david@kernel.org>
> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Cc: Mike Rapoport <rppt@kernel.org>
> Cc: linux-mm@kvack.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
> ---
>  include/linux/pgtable.h |  5 +++++
>  mm/memory.c             | 29 +++++++++++++++++++----------
>  2 files changed, 24 insertions(+), 10 deletions(-)
> 
> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
> index a50df42a893f..da17139a1279 100644
> --- a/include/linux/pgtable.h
> +++ b/include/linux/pgtable.h
> @@ -17,6 +17,11 @@
>  #include <asm-generic/pgtable_uffd.h>
>  #include <linux/page_table_check.h>
>  
> +#ifndef __PRIpte
> +#define __PRIpte		"016llx"
> +#define __PRIpte_args(val)	((u64)val)
> +#endif
> +
>  #if 5 - defined(__PAGETABLE_P4D_FOLDED) - defined(__PAGETABLE_PUD_FOLDED) - \
>  	defined(__PAGETABLE_PMD_FOLDED) != CONFIG_PGTABLE_LEVELS
>  #error CONFIG_PGTABLE_LEVELS is not consistent with __PAGETABLE_{P4D,PUD,PMD}_FOLDED
> diff --git a/mm/memory.c b/mm/memory.c
> index 07778814b4a8..cfc3077fc52f 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -532,9 +532,15 @@ static bool is_bad_page_map_ratelimited(void)
>  	return false;
>  }
>  
> +#ifdef __SIZEOF_INT128__
> +	typedef u128 pxdval_t;
> +#else
> +	typedef unsigned long long pxdval_t;
> +#endif
> +
>  static void __print_bad_page_map_pgtable(struct mm_struct *mm, unsigned long addr)
>  {
> -	unsigned long long pgdv, p4dv, pudv, pmdv;
> +	pxdval_t pgdv, p4dv, pudv, pmdv;
>  	p4d_t p4d, *p4dp;
>  	pud_t pud, *pudp;
>  	pmd_t pmd, *pmdp;
> @@ -548,7 +554,7 @@ static void __print_bad_page_map_pgtable(struct mm_struct *mm, unsigned long add
>  	pgdv = pgd_val(*pgdp);
>  
>  	if (!pgd_present(*pgdp) || pgd_leaf(*pgdp)) {
> -		pr_alert("pgd:%08llx\n", pgdv);
> +		pr_alert("pgd:%" __PRIpte "\n", __PRIpte_args(pgdv));
>  		return;
>  	}
>  
> @@ -557,7 +563,8 @@ static void __print_bad_page_map_pgtable(struct mm_struct *mm, unsigned long add
>  	p4dv = p4d_val(p4d);
>  
>  	if (!p4d_present(p4d) || p4d_leaf(p4d)) {
> -		pr_alert("pgd:%08llx p4d:%08llx\n", pgdv, p4dv);
> +		pr_alert("pgd:%" __PRIpte "p4d:%" __PRIpte "\n",

Hi Anshuman,

The original format had a space between values ("pgd:%08llx p4d:%08llx").
The replacement loses the space separator producing output like
"pgd:123p4d:456" instead of "pgd:123 p4d:456". The same issue exists
in other places in this commit.

> +			 __PRIpte_args(pgdv), __PRIpte_args(p4dv));
>  		return;
>  	}
>  
> @@ -566,7 +573,8 @@ static void __print_bad_page_map_pgtable(struct mm_struct *mm, unsigned long add
>  	pudv = pud_val(pud);
>  
>  	if (!pud_present(pud) || pud_leaf(pud)) {
> -		pr_alert("pgd:%08llx p4d:%08llx pud:%08llx\n", pgdv, p4dv, pudv);
> +		pr_alert("pgd:%" __PRIpte "p4d:%" __PRIpte "pud:%" __PRIpte "\n",
> +			 __PRIpte_args(pgdv), __PRIpte_args(p4dv), __PRIpte_args(pudv));
>  		return;
>  	}
>  
> @@ -580,8 +588,9 @@ static void __print_bad_page_map_pgtable(struct mm_struct *mm, unsigned long add
>  	 * doing another map would be bad. print_bad_page_map() should
>  	 * already take care of printing the PTE.
>  	 */
> -	pr_alert("pgd:%08llx p4d:%08llx pud:%08llx pmd:%08llx\n", pgdv,
> -		 p4dv, pudv, pmdv);
> +	pr_alert("pgd:%" __PRIpte "p4d:%" __PRIpte "pud:%" __PRIpte "pmd:%" __PRIpte "\n",
> +		 __PRIpte_args(pgdv), __PRIpte_args(p4dv),
> +		 __PRIpte_args(pudv), __PRIpte_args(pmdv));
>  }
>  
>  /*
> @@ -597,7 +606,7 @@ static void __print_bad_page_map_pgtable(struct mm_struct *mm, unsigned long add
>   * page table lock.
>   */
>  static void print_bad_page_map(struct vm_area_struct *vma,
> -		unsigned long addr, unsigned long long entry, struct page *page,
> +		unsigned long addr, pxdval_t entry, struct page *page,
>  		enum pgtable_level level)
>  {
>  	struct address_space *mapping;
> @@ -609,8 +618,8 @@ static void print_bad_page_map(struct vm_area_struct *vma,
>  	mapping = vma->vm_file ? vma->vm_file->f_mapping : NULL;
>  	index = linear_page_index(vma, addr);
>  
> -	pr_alert("BUG: Bad page map in process %s  %s:%08llx", current->comm,
> -		 pgtable_level_to_str(level), entry);
> +	pr_alert("BUG: Bad page map in process %s  %s:%" __PRIpte, current->comm,
> +		 pgtable_level_to_str(level), __PRIpte_args(entry));
>  	__print_bad_page_map_pgtable(vma->vm_mm, addr);
>  	if (page)
>  		dump_page(page, "bad page map");
> @@ -695,7 +704,7 @@ static void print_bad_page_map(struct vm_area_struct *vma,
>   */
>  static inline struct page *__vm_normal_page(struct vm_area_struct *vma,
>  		unsigned long addr, unsigned long pfn, bool special,
> -		unsigned long long entry, enum pgtable_level level)
> +		pxdval_t entry, enum pgtable_level level)
>  {
>  	if (IS_ENABLED(CONFIG_ARCH_HAS_PTE_SPECIAL)) {
>  		if (unlikely(special)) {
> -- 
> 2.43.0
> 
> 


  reply	other threads:[~2026-02-26 12:35 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 [this message]
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
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=20260226123442.759447-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.