Linux-mm Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Anshuman Khandual <anshuman.khandual@arm.com>,
	Petr Mladek <pmladek@suse.com>
Cc: linux-mm@kvack.org, usama.arif@linux.dev, hughd@google.com,
	willy@infradead.org, ryan.roberts@arm.com,
	Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH V3] mm: Standardize printing for pgtable entries
Date: Thu, 9 Jul 2026 11:12:58 +0200	[thread overview]
Message-ID: <dfa83e42-4f27-4c38-8796-b64a791788d9@kernel.org> (raw)
In-Reply-To: <ak9Qe1G7Rv3HF6ZR@ashevche-desk.local>

On 7/9/26 09:40, Andy Shevchenko wrote:
> +Petr, wondering your opinion about code dedup (see below).
> 
> On Thu, Jul 09, 2026 at 10:13:34AM +0530, Anshuman Khandual wrote:
>> From: "David Hildenbrand (Arm)" <david@kernel.org>
>>
>> Bad page map reporting currently stores page table entry values in an
>> unsigned long long and prints them with fixed 64-bit-oriented format
>> strings. This is inconsistent across call sites and does not work well for
>> architectures where page table entry values are not naturally represented
>> as 64-bit values, such as 32-bit or 128-bit entries.
>>
>> Introduce a common helper to convert raw page table entry values into a
>> fixed-width hexadecimal string based on the actual entry size. Use it for
>> bad page map reporting and for dumping the page table walk in
>> __print_bad_page_map_pgtable().
>>
>> Pass page table entry values to the reporting path as raw bytes together
>> with their size, instead of forcing them through an unsigned long long.
>> It keeps the printed output consistent and avoids truncation or misleading
>> formatting for non-64-bit page table entries.
> 
>> Cc: Andrew Morton <akpm@linux-foundation.org>
>> Cc: linux-mm@kvack.org
>> Cc: linux-kernel@vger.kernel.org
> 
> FWIW, you may move these to be after...

We generally don't handle it like that in MM. Maybe one day we'll switch over
and document it accordingly.

For now, having selected patches doing this differently is not any helpful.

[...]

>> +static void ptval_bytes_to_hex_str(char *buf, size_t buf_size, const void *entry, size_t entry_size)
>> +{
>> +	if (WARN_ON_ONCE(buf_size < entry_size * 2 + 1)) {
>> +		snprintf(buf, buf_size, "overflow");
>> +		return;
>> +	}
>> +
>> +	switch (entry_size) {
>> +	case sizeof(u32):
>> +		snprintf(buf, buf_size, "%08x", *(const u32 *)entry);
>> +		break;
>> +	case sizeof(u64):
>> +		snprintf(buf, buf_size, "%016llx", *(const u64 *)entry);
>> +		break;
>> +#if defined(__SIZEOF_INT128__)
>> +	case sizeof(u128):
>> +		snprintf(buf, buf_size, "%016llx%016llx",
>> +			 (unsigned long long)(*(const u128 *)entry >> 64),
>> +			 (unsigned long long)*(const u128 *)entry);
>> +		break;
>> +#endif
>> +	default:
>> +		snprintf(buf, buf_size, "unsupported");
>> +		break;
>> +	}
>> +}
>> +
>> +#define ptval_to_str(buf, val)								\
>> +	do {										\
>> +		auto __val = (val);							\
>> +											\
>> +		ptval_bytes_to_hex_str((buf), sizeof(buf), &__val, sizeof(__val));	\
>> +	} while (0)
>> +
>> +#if defined(__SIZEOF_INT128__)
>> +#define PTVAL_STR_MAX	(32 + 1) /* Max 128-bit value in hex + NUL */
>> +#else
>> +#define PTVAL_STR_MAX	(16 + 1) /* Max 64-bit value in hex + NUL */
>> +#endif
> 
> The above is quite duplicative with what we have in lib/vsprintf.c. Have you considered
> using something from there instead? (Yes, it might require some functions to be wrapped
> or dropped from static.)

Which part in particular do you have in mind?

num_to_str() does not apply due to the u128.

We could have u128 variant that we would only provide with __SIZEOF_INT128__

int num128_to_str(char *buf, int size, u128 num, unsigned int width)

And then have the code pass the value instead of a pointer to the value. A bit
tricky to handle this based on conditional __SIZEOF_INT128__ support, but could
be done.

Not sure if that is really what we want here, though. ptval_bytes_to_hex_str()
is pretty ... simple :)

I didn't immediately spot a replacement for PTVAL_STR_MAX. E.g.,
of_unittest_printf what calls num_to_str() just hard-codes "16".

So it would be good if you could clarify what you had in mind, thanks!

-- 
Cheers,

David


  reply	other threads:[~2026-07-09  9:13 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-09  4:43 [PATCH V3] mm: Standardize printing for pgtable entries Anshuman Khandual
2026-07-09  7:40 ` Andy Shevchenko
2026-07-09  9:12   ` David Hildenbrand (Arm) [this message]
2026-07-09 10:09     ` Andy Shevchenko
2026-07-09 10:19       ` David Hildenbrand (Arm)
2026-07-09  9:15   ` Petr Mladek
2026-07-09 10:11     ` Andy Shevchenko
2026-07-09 10:13       ` Andy Shevchenko
2026-07-09 10:24         ` David Hildenbrand (Arm)
2026-07-09 10:43           ` Andy Shevchenko
2026-07-09 11:12             ` Anshuman Khandual
2026-07-09 11:54               ` Andy Shevchenko
2026-07-10  0:08 ` Andrew Morton
2026-07-10  3:10   ` Anshuman Khandual
2026-07-10  3:32     ` Andrew Morton
2026-07-10  8:16   ` David Hildenbrand (Arm)
2026-07-11  4:58 ` Matthew Wilcox

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=dfa83e42-4f27-4c38-8796-b64a791788d9@kernel.org \
    --to=david@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=anshuman.khandual@arm.com \
    --cc=hughd@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=pmladek@suse.com \
    --cc=ryan.roberts@arm.com \
    --cc=usama.arif@linux.dev \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox