[USB] WARNING: mm/page_alloc.c:5345 at __alloc_frozen_pages_noprof+0x39a/0x3d0, CPU#41: swapper/0/1
From: Luiz Capitulino
Date: Mon Sep 21 2026 - 22:30:35 EST
Hello,
When booting the latest Andrew Morton's mm-new tree[1] commit 498ee28e5ec4
("mm/swap, PM: hibernate: atomically replace hibernation pin") on a KVM guest,
I'm getting the following MM warning being triggered:
"""
[ 1.667197] [ T1] WARNING: mm/page_alloc.c:5345 at __alloc_frozen_pages_noprof+0x39a/0x3d0, CPU#41: swapper/0/1
[ 1.691217] [ T1] CPU: 41 UID: 0 PID: 1 Comm: swapper/0 Tainted: G W 7.3.0-rc1+ #12 PREEMPT(full)
[ 1.692073] [ T1] Tainted: [W]=WARN
[ 1.692378] [ T1] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS edk2-20260812-8.fc44 08/12/2026
[ 1.693158] [ T1] RIP: 0010:__alloc_frozen_pages_noprof+0x39a/0x3d0
[ 1.693685] [ T1] Code: e2 04 e8 49 85 ff ff 45 31 c9 e9 14 fe ff ff 0f 0b e9 e7 fe ff ff 80 3d 6d 3a f2 05 00 0f 85 2b fe ff ff c6 05 60 3a f2 05 01 <0f> 0b e9 1d fe ff ff 48 89 5c 24 40 48 89 6c 24 48 4c 89 64 24 50
[ 1.695238] [ T1] RSP: 0000:ff46f50b801538d8 EFLAGS: 00010246
[ 1.695723] [ T1] RAX: 0000000000000000 RBX: 0000000000000cc0 RCX: 0000000000000000
[ 1.696356] [ T1] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000cc0
[ 1.696981] [ T1] RBP: 0000000000000034 R08: 0000000000000000 R09: 0000000000000cc0
[ 1.697605] [ T1] R10: 0000000000000034 R11: 0000000000000100 R12: 0000000000000034
[ 1.698231] [ T1] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[ 1.698872] [ T1] FS: 0000000000000000(0000) GS:ff2b932745209000(0000) knlGS:0000000000000000
[ 1.699592] [ T1] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1.700119] [ T1] CR2: 0000000000000000 CR3: 00000006ede4a001 CR4: 0000000000773ef0
[ 1.700745] [ T1] PKRU: 55555554
[ 1.701023] [ T1] Call Trace:
[ 1.701283] [ T1] <TASK>
[ 1.701512] [ T1] alloc_pages_node_noprof+0x4c/0xc0
[ 1.701919] [ T1] __dma_direct_alloc_pages.isra.0+0x164/0x1f0
[ 1.702402] [ T1] dma_direct_alloc+0x19f/0x2b0
[ 1.702767] [ T1] dma_alloc_attrs+0x8d/0x200
[ 1.703133] [ T1] xhci_alloc_interrupter+0xc9/0x190
[ 1.703543] [ T1] xhci_mem_init+0x283/0x340
[ 1.703902] [ T1] ? __pfx_xhci_pci_quirks+0x10/0x10
[ 1.704317] [ T1] xhci_gen_setup+0x35e/0x4f0
[ 1.704684] [ T1] xhci_pci_setup+0x52/0x1c0
[ 1.705038] [ T1] usb_add_hcd.cold+0x241/0x5d8
[ 1.705413] [ T1] usb_hcd_pci_probe+0x188/0x480
[ 1.705803] [ T1] xhci_pci_common_probe+0x6b/0x2f0
[ 1.706218] [ T1] local_pci_probe+0x4a/0x90
[ 1.706582] [ T1] ? cpu_hotplug_disable+0x15/0x30
[ 1.706986] [ T1] pci_call_probe+0x55/0x150
[ 1.707357] [ T1] pci_device_probe+0xae/0x150
[ 1.707734] [ T1] ? kernfs_create_link+0x61/0xb0
[ 1.708139] [ T1] ? sysfs_do_create_link_sd+0x81/0xf0
[ 1.708562] [ T1] call_driver_probe+0x23/0x100
[ 1.708949] [ T1] ? driver_sysfs_add+0x55/0xc0
[ 1.709334] [ T1] really_probe+0xd7/0x2d0
[ 1.709681] [ T1] ? _raw_spin_unlock_irq+0xe/0x30
[ 1.710098] [ T1] __driver_probe_device+0x9c/0x1b0
[ 1.710503] [ T1] driver_probe_device+0x1f/0x80
[ 1.710892] [ T1] ? __pfx___driver_attach+0x10/0x10
[ 1.711323] [ T1] __driver_attach+0x10a/0x210
[ 1.711706] [ T1] ? __pfx___driver_attach+0x10/0x10
[ 1.712125] [ T1] bus_for_each_dev+0x86/0xf0
[ 1.712488] [ T1] bus_add_driver+0x13e/0x230
[ 1.712858] [ T1] ? __pfx_xhci_pci_init+0x10/0x10
[ 1.713273] [ T1] ? __pfx_xhci_pci_init+0x10/0x10
[ 1.713681] [ T1] driver_register+0x75/0xe0
[ 1.714049] [ T1] do_one_initcall+0x7a/0x1c0
[ 1.714429] [ T1] do_initcalls+0xe1/0x100
[ 1.714780] [ T1] kernel_init_freeable+0x152/0x1c0
[ 1.715199] [ T1] ? __pfx_kernel_init+0x10/0x10
[ 1.715592] [ T1] kernel_init+0x1f/0x140
[ 1.715928] [ T1] ret_from_fork+0x19e/0x270
[ 1.716296] [ T1] ? __pfx_kernel_init+0x10/0x10
[ 1.716680] [ T1] ? __pfx_kernel_init+0x10/0x10
[ 1.717071] [ T1] ret_from_fork_asm+0x1a/0x30
[ 1.717438] [ T1] </TASK>
[ 1.717663] [ T1] ---[ end trace 0000000000000000 ]---
"""
This does not happen with latest Linus tree 40288c9206c1 ("Merge tag
'drm-fixes-2026-09-19' of https://gitlab.freedesktop.org/drm/kernel").
What I could determine is:
- In xhci_alloc_interrupter() max_segs=0, which leds to seg=0
- This eventually leads to passing size=0 to get_order() in
__dma_direct_alloc_pages() (call sequenece below). Passing size=0 to
get_order() is undefined and returns order=52 on my guest, whch leads
to the warning since 52 > MAX_PAGE_ORDER
xhci_alloc_erst()
dma_alloc_coherent()
dma_alloc_attrs()
dma_direct_alloc()
__dma_direct_alloc_pages()
get_order()
alloc_pages_node()
[1] git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm origin/mm-new