From: Helge Deller <deller@kernel.org>
To: "Toke Høiland-Jørgensen" <toke@redhat.com>,
"David Hildenbrand" <david@redhat.com>,
"Linux Kernel Development" <linux-kernel@vger.kernel.org>,
"Linux Memory Management List" <linux-mm@kvack.org>,
linux-parisc <linux-parisc@vger.kernel.org>
Cc: Christoph Biedl <linux-kernel.bfrz@manchmal.in-ulm.de>,
Helge Deller <deller@gmx.de>
Subject: boot failure because of inaccurate page_pool_page_is_pp() on 32-bit kernels
Date: Fri, 12 Sep 2025 00:12:00 +0200 [thread overview]
Message-ID: <aMNJMFa5fDalFmtn@p100> (raw)
In-Reply-To: <1756327287@msgid.manchmal.in-ulm.de>
As reported earlier in this mail thread, all 32-bit Linux kernels since v6.16
fail to boot on the parisc architecture like this:
BUG: Bad page state in process swapper pfn:000f7
page: refcount:0 mapcount:0 mapping:00000000 index:0x0 pfn:0xf7
flags: 0x0(zone=0)
raw: 00000000 118022c0 118022c0 00000000 00000000 00000000 ffffffff 00000000
raw: 00000000
page dumped because: page_pool leak
Modules linked in:
CPU: 0 UID: 0 PID: 0 Comm: swapper Not tainted 6.15.0-rc1-32bit+ #2730 NONE
Hardware name: 9000/778/B160L
Backtrace:
[<106ece88>] bad_page+0x14c/0x17c
[<10406c50>] free_page_is_bad.part.0+0xd4/0xec
[<106ed180>] free_page_is_bad+0x80/0x88
[<106ef05c>] __free_pages_ok+0x374/0x508
[<1011d34c>] __free_pages_core+0x1f0/0x218
[<1011a2f0>] memblock_free_pages+0x68/0x94
[<10120324>] memblock_free_all+0x26c/0x310
[<1011a4d8>] mm_core_init+0x18c/0x208
[<10100e88>] start_kernel+0x4ec/0x7a0
[<101054d0>] start_parisc+0xb4/0xc4
git bisecting leads to this patch which triggers the crash:
commit ee62ce7a1d909ccba0399680a03c2dee83bcae95
Author: Toke Høiland-Jørgensen <toke@redhat.com>
Date: Wed Apr 9 12:41:37 2025 +0200
page_pool: Track DMA-mapped pages and unmap them when destroying the pool
It turns out that the patch itself isn't wrong.
But it's the culprit which leads to the kernel bug since it modifies
PP_MAGIC_MASK for 32-bit kernels from:
-#define PP_MAGIC_MASK ~0x3UL
+#define PP_MAGIC_MASK ~(PP_DMA_INDEX_MASK | 0x3UL)
Function page_pool_page_is_pp() needs to unambiguously identify page pool
pages (using PP_MAGIC_MASK), but since the patch now reduced the valid bits to
check in PP_MAGIC_MASK from 0xFFFFFFFC to 0xc000007c, the remaining bits are
not sufficient to unambiguously identify such pages any longer.
Because of that, page_pool_page_is_pp() sometimes wrongly reports pages as
page pool pages and as such triggers the kernel BUG as it believes it found a
page pool leak.
IMHO this is a generic 32-bit kernel issue, not just affecting parisc.
Do you see any options other than:
a) revert the patch (ee62ce7a1d90), or:
b) return false in page_pool_page_is_pp() when !defined(CONFIG_64BIT),
which means to effectively disable the page pool page test on 32bit
machines
Helge
next prev parent reply other threads:[~2025-09-11 22:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-03 17:31 6.16-pre-rc1: BUG: Bad page state in process swapper on parisc Helge Deller
2025-08-27 21:31 ` Christoph Biedl
2025-09-11 22:12 ` Helge Deller [this message]
2025-09-12 7:57 ` boot failure because of inaccurate page_pool_page_is_pp() on 32-bit kernels David Hildenbrand
2025-09-12 14:04 ` Helge Deller
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=aMNJMFa5fDalFmtn@p100 \
--to=deller@kernel.org \
--cc=david@redhat.com \
--cc=deller@gmx.de \
--cc=linux-kernel.bfrz@manchmal.in-ulm.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-parisc@vger.kernel.org \
--cc=toke@redhat.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