Re: [PATCH] usb: xhci: xhci_setup_port_arrays: early -ENODEV if maxports is 0.

From: Mathias Nyman
Date: Thu Oct 10 2024 - 08:48:39 EST


On 4.10.2024 22.14, Olivier Dautricourt wrote:
Hello,

On Fri, Oct 04, 2024 at 12:57:16PM +0200, Michał Pecio wrote:
Hi,

If the controller reports HCSPARAMS1.maxports==0 then we can skip the
whole function: it would fail later after doing a bunch of unnecessary
stuff. It can occur on a buggy hardware (the value is driven by external
signals).

This function runs once during HC initialization, so what's the benefit
of bypassing it? Does it take unusually long time? Does it panic?

It seems to alreday be written to handle such abnormal cases gracefully.

That is correct, the case is handled without panic, but the 0 value gets
silently propagated until it eventually fails on line 2220:
if (xhci->usb2_rhub.num_ports == 0 && xhci->usb3_rhub.num_ports == 0) {
xhci_warn(xhci, "No ports on the roothubs?\n");
return -ENODEV;
}
The benefits are only:
- Reporting a more precise issue
- Avoids iterating through the capability structures of the controller
- failsafe if future changes

This is totally a nitpick as the case is unusual, if you think it is not
worth taking it upstream i'll understand.


I think we'll skip this. An abnormal case like this where the host would be
useless anyway is already handled reasonably enough by driver.

Thanks
Mathias