* [PATCH] usb: xhci: fix maximum event ring segments calculation
@ 2026-08-28 10:59 oushixiong1025
2026-08-30 3:12 ` Pierre-David Belanger
2026-08-31 9:10 ` Mathias Nyman
0 siblings, 2 replies; 9+ messages in thread
From: oushixiong1025 @ 2026-08-28 10:59 UTC (permalink / raw)
To: Mathias Nyman; +Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, Shixiong Ou
From: Shixiong Ou <oushixiong@kylinos.cn>
Commit 6d45e9556d4a ("usb: xhci: standardize multi bit-field macros")
converted BIT(HCS_ERST_MAX(hcs_params2)) into
FIELD_GET(HCS_ERST_MAX, hcs_params2) << 2. The ERST Max field is a
power-of-two exponent, so the maximum number of segments is 2^n, not
n * 4.
With an ERST Max of 0 (as reported by e.g. QEMU xHCI) max_segs becomes
0, the event ring is allocated with 0 segments, and the resulting
zero-sized ERST allocation trips the page allocator:
WARNING: mm/page_alloc.c:5340 at __alloc_frozen_pages_noprof+0x11d0/0x1548, CPU#0: swapper/0/1
Call trace:
__alloc_frozen_pages_noprof+0x11d0/0x1548 (P)
alloc_pages_node_noprof+0xa0/0x108
__dma_direct_alloc_pages.isra.0+0x178/0x260
dma_direct_alloc+0x1e4/0x460
dma_alloc_attrs+0xb4/0x2e8
xhci_alloc_interrupter+0xdc/0x1c8
xhci_mem_init+0x250/0xe70
xhci_gen_setup+0x35c/0x4f0
xhci_pci_setup+0x68/0x138
usb_add_hcd+0x31c/0x640
usb_hcd_pci_probe+0x1fc/0x3d8
...
xhci_hcd 0000:02:00.0: Failed to allocate interrupter erst
xhci_hcd 0000:02:00.0: can't setup: -12
Restore the BIT() based calculation.
Fixes: 6d45e9556d4a ("usb: xhci: standardize multi bit-field macros")
Signed-off-by: Shixiong Ou <oushixiong@kylinos.cn>
---
drivers/usb/host/xhci-mem.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index 7a21ac81f9c8..af8d4b74c4ba 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -2301,7 +2301,7 @@ xhci_alloc_interrupter(struct xhci_hcd *xhci, unsigned int segs, gfp_t flags)
if (!segs)
segs = ERST_DEFAULT_SEGS;
- max_segs = FIELD_GET(HCS_ERST_MAX, xhci->hcs_params2) << 2;
+ max_segs = BIT(FIELD_GET(HCS_ERST_MAX, xhci->hcs_params2));
segs = min(segs, max_segs);
ir = kzalloc_node(sizeof(*ir), flags, dev_to_node(dev));
--
2.25.1
No virus found
Checked by Hillstone Network AntiVirus
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] usb: xhci: fix maximum event ring segments calculation
2026-08-28 10:59 [PATCH] usb: xhci: fix maximum event ring segments calculation oushixiong1025
@ 2026-08-30 3:12 ` Pierre-David Belanger
2026-08-31 6:55 ` Thorsten Leemhuis
2026-08-31 9:10 ` Mathias Nyman
1 sibling, 1 reply; 9+ messages in thread
From: Pierre-David Belanger @ 2026-08-30 3:12 UTC (permalink / raw)
To: Shixiong Ou
Cc: Pierre-David Belanger, Shixiong Ou, Mathias Nyman,
Greg Kroah-Hartman, Niklas Neronin, linux-usb, linux-kernel,
regressions
I ran into this independently on x86_64 under QEMU and had a regression
report half written when I found your patch. Same one line, same reasoning.
Confirmed against vanilla mainline 08dbfad3f504, with v7.2 built from the same
config for comparison:
v7.2 (8d3ae59288f1) USB keyboard enumerates
08dbfad3f504 xhci_hcd does not probe
08dbfad3f504 + this patch USB keyboard enumerates again
The failure on 08dbfad3f504:
xhci_hcd 0000:00:04.0: xHCI Host Controller
xhci_hcd 0000:00:04.0: new USB bus registered, assigned bus number 1
xhci_hcd 0000:00:04.0: Failed to allocate interrupter erst
xhci_hcd 0000:00:04.0: can't setup: -12
xhci_hcd 0000:00:04.0: USB bus 1 deregistered
xhci_hcd 0000:00:04.0: init 0000:00:04.0 fail, -12
xhci_hcd 0000:00:04.0: probe with driver xhci_hcd failed with error -12
Reproduced with:
qemu-system-x86_64 -enable-kvm -m 512 -display none -serial stdio \
-kernel bzImage -initrd initrd \
-device qemu-xhci -device usb-kbd
Both -device qemu-xhci and -device nec-usb-xhci are affected. Reading
HCSPARAMS2 from inside the guest gives 0x0000000f, so ERST Max really is 0
and max_segs comes out as 0 with the current code.
I did not see the page allocator WARNING you hit (my .config is a minimal
tinyconfig-derived one), but the probe failure and the -12 are identical,
and this patch fixes it.
Tested-by: Pierre-David Belanger <pierredavidbelanger@gmail.com>
Thanks for the quick fix.
Pierre-David
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] usb: xhci: fix maximum event ring segments calculation
2026-08-30 3:12 ` Pierre-David Belanger
@ 2026-08-31 6:55 ` Thorsten Leemhuis
2026-08-31 9:21 ` Mathias Nyman
0 siblings, 1 reply; 9+ messages in thread
From: Thorsten Leemhuis @ 2026-08-31 6:55 UTC (permalink / raw)
To: Pierre-David Belanger, Shixiong Ou
Cc: Shixiong Ou, Mathias Nyman, Greg Kroah-Hartman, Niklas Neronin,
linux-usb, linux-kernel, regressions
On 8/30/26 05:12, Pierre-David Belanger wrote:
> The failure on 08dbfad3f504:
>
> xhci_hcd 0000:00:04.0: xHCI Host Controller
> xhci_hcd 0000:00:04.0: new USB bus registered, assigned bus number 1
> xhci_hcd 0000:00:04.0: Failed to allocate interrupter erst
> xhci_hcd 0000:00:04.0: can't setup: -12
> xhci_hcd 0000:00:04.0: USB bus 1 deregistered
> xhci_hcd 0000:00:04.0: init 0000:00:04.0 fail, -12
> xhci_hcd 0000:00:04.0: probe with driver xhci_hcd failed with error -12
FWIW, not my area of expertise, but to me it looks like there were two
similar fixes submitted earlier to address this and "usb: xhci: Fix
HCS_ERST_MAX conversion" (
https://lore.kernel.org/all/20260828105926.930033-1-oushixiong1025@163.com/
) seems to be heading towards mainline already according to Mathias.
Sadly this missed -rc1, wonder why it wasn't submitted for it to prevent
more people from running into this, but whatever, that's ship has sailed.
Ciao, Thorsten
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] usb: xhci: fix maximum event ring segments calculation
2026-08-28 10:59 [PATCH] usb: xhci: fix maximum event ring segments calculation oushixiong1025
2026-08-30 3:12 ` Pierre-David Belanger
@ 2026-08-31 9:10 ` Mathias Nyman
1 sibling, 0 replies; 9+ messages in thread
From: Mathias Nyman @ 2026-08-31 9:10 UTC (permalink / raw)
To: oushixiong1025, Mathias Nyman
Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, Shixiong Ou
Hi
On 8/28/26 13:59, oushixiong1025@163.com wrote:
> From: Shixiong Ou <oushixiong@kylinos.cn>
>
> Commit 6d45e9556d4a ("usb: xhci: standardize multi bit-field macros")
> converted BIT(HCS_ERST_MAX(hcs_params2)) into
> FIELD_GET(HCS_ERST_MAX, hcs_params2) << 2. The ERST Max field is a
> power-of-two exponent, so the maximum number of segments is 2^n, not
> n * 4.
>
> With an ERST Max of 0 (as reported by e.g. QEMU xHCI) max_segs becomes
> 0, the event ring is allocated with 0 segments, and the resulting
> zero-sized ERST allocation trips the page allocator:
Thanks for the report and fix.
This issue was reported earlier and is address in:
https://lore.kernel.org/linux-usb/7e6648ad-7459-4248-8c6c-227cfc2586d8@linux.intel.com/
That patch is on its way upstream.
Good to get verification the fix (very similar) solves the issue for you as well.
Thanks
Mathias
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] usb: xhci: fix maximum event ring segments calculation
2026-08-31 6:55 ` Thorsten Leemhuis
@ 2026-08-31 9:21 ` Mathias Nyman
2026-08-31 11:28 ` Thorsten Leemhuis
0 siblings, 1 reply; 9+ messages in thread
From: Mathias Nyman @ 2026-08-31 9:21 UTC (permalink / raw)
To: Thorsten Leemhuis, Pierre-David Belanger, Shixiong Ou
Cc: Shixiong Ou, Mathias Nyman, Greg Kroah-Hartman, Niklas Neronin,
linux-usb, linux-kernel, regressions
On 8/31/26 09:55, Thorsten Leemhuis wrote:
> On 8/30/26 05:12, Pierre-David Belanger wrote:
>
>> The failure on 08dbfad3f504:
>>
>> xhci_hcd 0000:00:04.0: xHCI Host Controller
>> xhci_hcd 0000:00:04.0: new USB bus registered, assigned bus number 1
>> xhci_hcd 0000:00:04.0: Failed to allocate interrupter erst
>> xhci_hcd 0000:00:04.0: can't setup: -12
>> xhci_hcd 0000:00:04.0: USB bus 1 deregistered
>> xhci_hcd 0000:00:04.0: init 0000:00:04.0 fail, -12
>> xhci_hcd 0000:00:04.0: probe with driver xhci_hcd failed with error -12
> FWIW, not my area of expertise, but to me it looks like there were two
> similar fixes submitted earlier to address this and "usb: xhci: Fix
> HCS_ERST_MAX conversion" (
> https://lore.kernel.org/all/20260828105926.930033-1-oushixiong1025@163.com/
> ) seems to be heading towards mainline already according to Mathias.
> Sadly this missed -rc1, wonder why it wasn't submitted for it to prevent
> more people from running into this, but whatever, that's ship has sailed.
Looks like at least QEMU and Mediatek users were hit by this issue.
Note that this is a v7.3-rc1 regression which was found during merge window for v7.3-rc1.
v7.3-rc1 came out a few hours ago.
I can't resolve it much earlier than this.
Thanks
Mathias
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] usb: xhci: fix maximum event ring segments calculation
2026-08-31 9:21 ` Mathias Nyman
@ 2026-08-31 11:28 ` Thorsten Leemhuis
2026-08-31 11:36 ` Thorsten Leemhuis
0 siblings, 1 reply; 9+ messages in thread
From: Thorsten Leemhuis @ 2026-08-31 11:28 UTC (permalink / raw)
To: Mathias Nyman, Pierre-David Belanger, Shixiong Ou
Cc: Shixiong Ou, Mathias Nyman, Greg Kroah-Hartman, Niklas Neronin,
linux-usb, linux-kernel, regressions
On 8/31/26 11:21, Mathias Nyman wrote:
> On 8/31/26 09:55, Thorsten Leemhuis wrote:
>> On 8/30/26 05:12, Pierre-David Belanger wrote:
>>> The failure on 08dbfad3f504:
>>>
>>> xhci_hcd 0000:00:04.0: xHCI Host Controller
>>> xhci_hcd 0000:00:04.0: new USB bus registered, assigned bus number 1
>>> xhci_hcd 0000:00:04.0: Failed to allocate interrupter erst
>>> xhci_hcd 0000:00:04.0: can't setup: -12
>>> xhci_hcd 0000:00:04.0: USB bus 1 deregistered
>>> xhci_hcd 0000:00:04.0: init 0000:00:04.0 fail, -12
>>> xhci_hcd 0000:00:04.0: probe with driver xhci_hcd failed with
>>> error -12
>> Sadly this missed -rc1, wonder why it wasn't submitted for it to prevent
>> more people from running into this, but whatever, that's ship has sailed.
>
> Looks like at least QEMU and Mediatek users were hit by this issue.
Ahh, good to known. And thx for sending one of the fixes to Greg
meanwhile (saw that by chance).
> Note that this is a v7.3-rc1 regression which was found during merge
> window for v7.3-rc1.
> v7.3-rc1 came out a few hours ago.
> I can't resolve it much earlier than this.
Out of curiosity: why?
Just ignore the question if it was something like "real life got in the
way" or "it fell through the cracks" -- that's how it is sometimes, no
worries. But in other cases I'd be glad if you could take a few minutes
if you have them to satisfy my curiosity, as in preparation for a
maintainer summit proposal I sent[1] I'm just trying to understand
better why regression fixes sometimes take quite a while from submission
to landing in mainline
Ciao, Thorsten
[1]
https://lore.kernel.org/all/75dc0e2d-2deb-4776-977c-1de7c33465e1@leemhuis.info/
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] usb: xhci: fix maximum event ring segments calculation
2026-08-31 11:28 ` Thorsten Leemhuis
@ 2026-08-31 11:36 ` Thorsten Leemhuis
2026-08-31 14:28 ` Mathias Nyman
0 siblings, 1 reply; 9+ messages in thread
From: Thorsten Leemhuis @ 2026-08-31 11:36 UTC (permalink / raw)
To: Mathias Nyman, Pierre-David Belanger, Shixiong Ou
Cc: Shixiong Ou, Mathias Nyman, Greg Kroah-Hartman, Niklas Neronin,
linux-usb, linux-kernel, regressions
On 8/31/26 13:28, Thorsten Leemhuis wrote:
> On 8/31/26 11:21, Mathias Nyman wrote:
>> On 8/31/26 09:55, Thorsten Leemhuis wrote:
>>> On 8/30/26 05:12, Pierre-David Belanger wrote:
>>>> The failure on 08dbfad3f504:
>>>>
>>>> xhci_hcd 0000:00:04.0: xHCI Host Controller
>>>> xhci_hcd 0000:00:04.0: new USB bus registered, assigned bus number 1
>>>> xhci_hcd 0000:00:04.0: Failed to allocate interrupter erst
>>>> xhci_hcd 0000:00:04.0: can't setup: -12
>>>> xhci_hcd 0000:00:04.0: USB bus 1 deregistered
>>>> xhci_hcd 0000:00:04.0: init 0000:00:04.0 fail, -12
>>>> xhci_hcd 0000:00:04.0: probe with driver xhci_hcd failed with
>>>> error -12
>>> Sadly this missed -rc1, wonder why it wasn't submitted for it to prevent
>>> more people from running into this, but whatever, that's ship has sailed.
>>
>> Looks like at least QEMU and Mediatek users were hit by this issue.
>
> Ahh, good to known. And thx for sending one of the fixes to Greg
> meanwhile (saw that by chance).
>> Note that this is a v7.3-rc1 regression which was found during merge
>> window for v7.3-rc1.
>> v7.3-rc1 came out a few hours ago.
>> I can't resolve it much earlier than this.
> Out of curiosity: why?
>
> Just ignore the question if it was something like "real life got in the
> way" or "it fell through the cracks" -- that's how it is sometimes, no
> worries. But in other cases I'd be glad if you could take a few minutes
> if you have them to satisfy my curiosity, as in preparation for a
> maintainer summit proposal I sent[1] I'm just trying to understand
> better why regression fixes sometimes take quite a while from submission
> to landing in mainline
For the record (sorry, this should have bin in above mail!), as it might
sound hostile without context, as obviously there would not have been
enough time to fix this if the issue would only have become known during
the end of the merge window. But that is not the case here afaics
(please correct me if I'm wrong!), as the first patch to fix this was
afaics submitted on 2026-08-20:
https://lore.kernel.org/linux-usb/7e6648ad-7459-4248-8c6c-227cfc2586d8@linux.intel.com/
> [1]
> https://lore.kernel.org/all/75dc0e2d-2deb-4776-977c-1de7c33465e1@leemhuis.info/
Ciao, THorsten
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] usb: xhci: fix maximum event ring segments calculation
2026-08-31 11:36 ` Thorsten Leemhuis
@ 2026-08-31 14:28 ` Mathias Nyman
2026-09-01 8:16 ` Thorsten Leemhuis
0 siblings, 1 reply; 9+ messages in thread
From: Mathias Nyman @ 2026-08-31 14:28 UTC (permalink / raw)
To: Thorsten Leemhuis, Pierre-David Belanger, Shixiong Ou
Cc: Shixiong Ou, Mathias Nyman, Greg Kroah-Hartman, Niklas Neronin,
linux-usb, linux-kernel, regressions
On 8/31/26 14:36, Thorsten Leemhuis wrote:
>
>
> On 8/31/26 13:28, Thorsten Leemhuis wrote:
>> On 8/31/26 11:21, Mathias Nyman wrote:
>>> On 8/31/26 09:55, Thorsten Leemhuis wrote:
>>>> On 8/30/26 05:12, Pierre-David Belanger wrote:
>>>>> The failure on 08dbfad3f504:
>>>>>
>>>>> xhci_hcd 0000:00:04.0: xHCI Host Controller
>>>>> xhci_hcd 0000:00:04.0: new USB bus registered, assigned bus number 1
>>>>> xhci_hcd 0000:00:04.0: Failed to allocate interrupter erst
>>>>> xhci_hcd 0000:00:04.0: can't setup: -12
>>>>> xhci_hcd 0000:00:04.0: USB bus 1 deregistered
>>>>> xhci_hcd 0000:00:04.0: init 0000:00:04.0 fail, -12
>>>>> xhci_hcd 0000:00:04.0: probe with driver xhci_hcd failed with
>>>>> error -12
>>>> Sadly this missed -rc1, wonder why it wasn't submitted for it to prevent
>>>> more people from running into this, but whatever, that's ship has sailed.
>>>
>>> Looks like at least QEMU and Mediatek users were hit by this issue.
>>
>> Ahh, good to known. And thx for sending one of the fixes to Greg
>> meanwhile (saw that by chance).
>>> Note that this is a v7.3-rc1 regression which was found during merge
>>> window for v7.3-rc1.
>>> v7.3-rc1 came out a few hours ago.
>>> I can't resolve it much earlier than this.
>> Out of curiosity: why?
>>
>> Just ignore the question if it was something like "real life got in the
>> way" or "it fell through the cracks" -- that's how it is sometimes, no
>> worries. But in other cases I'd be glad if you could take a few minutes
>> if you have them to satisfy my curiosity, as in preparation for a
>> maintainer summit proposal I sent[1] I'm just trying to understand
>> better why regression fixes sometimes take quite a while from submission
>> to landing in mainline
No real life or personal issues got in the way.
Assumed severity after first case didn't call for action mid merge window.
>
> For the record (sorry, this should have bin in above mail!), as it might
> sound hostile without context, as obviously there would not have been
> enough time to fix this if the issue would only have become known during
> the end of the merge window. But that is not the case here afaics
> (please correct me if I'm wrong!), as the first patch to fix this was
> afaics submitted on 2026-08-20:
Sure, I'll describe how it went
2026-08-16 Sunday,
v7.2 is tagged, merge window opens
I've sent all my patches, assume Greg has his pull request ready for Linus.
2026-08-20 Thursday,
I see the issue and patch the first time.
It points to an issue in next, is valid but commit message doesn't call for
urgency in any way.
Doesn't specify which hardware is concerned.
So far one report only. I haven't seen the issue myself so assume it's some obscure
hardware (pre-production, or virtual/firmware).
Queue for after rc1.
No reason to panic or bother Greg or Linus mid merge window at this stage.
2026-08-27 Thursday, a week later, rc1 will be tagged on Sunday
I get a second report for the same issue, this one shows it concerns Mediatek MT8173.
Issue gets my attention, rc1 will be tagged on Sunday so I don't even consider stirring
up anything anymore.
https://lore.kernel.org/linux-usb/20260827053748.3755-1-getfeus@gmail.com
2026-08-28 Friday
One more case, showing this affects QEMU users as well.
But no point in sending anything before rc1 anymore, rc1 will be tagged on Sunday
2026-08-30 Sunday
another QEMU user reports an issue
Linus tags 7.3-rc1
2026-08-31 Monday
Rebase on rc1, compile, quick testrun, submit fix to Greg.
Thanks
Mathias
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] usb: xhci: fix maximum event ring segments calculation
2026-08-31 14:28 ` Mathias Nyman
@ 2026-09-01 8:16 ` Thorsten Leemhuis
0 siblings, 0 replies; 9+ messages in thread
From: Thorsten Leemhuis @ 2026-09-01 8:16 UTC (permalink / raw)
To: Mathias Nyman, Pierre-David Belanger, Shixiong Ou
Cc: Shixiong Ou, Mathias Nyman, Greg Kroah-Hartman, Niklas Neronin,
linux-usb, linux-kernel, regressions
On 8/31/26 16:28, Mathias Nyman wrote:
> On 8/31/26 14:36, Thorsten Leemhuis wrote:
>> On 8/31/26 13:28, Thorsten Leemhuis wrote:
>>> On 8/31/26 11:21, Mathias Nyman wrote:
>>>> On 8/31/26 09:55, Thorsten Leemhuis wrote:
>>>>> On 8/30/26 05:12, Pierre-David Belanger wrote:
>
>>>> Note that this is a v7.3-rc1 regression which was found during merge
>>>> window for v7.3-rc1.
>>>> v7.3-rc1 came out a few hours ago.
>>>> I can't resolve it much earlier than this.
>>> Out of curiosity: why?
> [...]
> No real life or personal issues got in the way.
> Assumed severity after first case didn't call for action mid merge window.
Many thx, that helps me understand thing better.
Quite a few other subsystems from what I see would have approached
things just like you did here; but I wonder if Linus in a case like this
would have preferred some mid/late merge window intervention to prevent
testers from running into a known regression. Will try to bring this up
on the maintainers summit. So again, thx again for describing things
from your point of view, helps a lot.
Ciao, Thorsten
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-09-01 8:16 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-28 10:59 [PATCH] usb: xhci: fix maximum event ring segments calculation oushixiong1025
2026-08-30 3:12 ` Pierre-David Belanger
2026-08-31 6:55 ` Thorsten Leemhuis
2026-08-31 9:21 ` Mathias Nyman
2026-08-31 11:28 ` Thorsten Leemhuis
2026-08-31 11:36 ` Thorsten Leemhuis
2026-08-31 14:28 ` Mathias Nyman
2026-09-01 8:16 ` Thorsten Leemhuis
2026-08-31 9:10 ` Mathias Nyman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox