* [PATCH v3] usb: hub: Set proper message when usb_hub_create_port_device() fails
@ 2026-10-01 11:06 Chen-Yu Tsai
2026-10-01 11:23 ` Greg Kroah-Hartman
0 siblings, 1 reply; 3+ messages in thread
From: Chen-Yu Tsai @ 2026-10-01 11:06 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Chen-Yu Tsai, Andy Shevchenko, linux-usb, linux-kernel, Alan Stern
Right now when usb_hub_create_port_device() fails, it prints a separate
error message to say which port failed, but otherwise leaves 'message'
set to the default "out of memory", which is somewhat misleading.
Use a small buffer on the stack to put the custom formatted error message
in and use it as the error message.
Assisted-by: LLM # local reviews
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
Changes since v2:
- Simplify to just using a small buffer on the stack (Alan)
Changes since v1:
- Explicitly track and free the allocated custom error message instead
of using devm_kasprintf()
- Link to v1:
https://lore.kernel.org/all/20260728100005.413868-1-wenst@chromium.org/
Sorry Andy, I ended up not using your __free(kfree_const) patch. My LLM
was telling me that it won't work correctly if CONFIG_USB=m.
---
drivers/usb/core/hub.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 0e929a4c9fa1..d7f39e86b24c 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1480,6 +1480,7 @@ static int hub_configure(struct usb_hub *hub,
unsigned int pipe;
int maxp, ret, i;
char *message = "out of memory";
+ char msg_buf[32] = {};
unsigned unit_load;
unsigned full_load;
unsigned maxchild;
@@ -1756,8 +1757,8 @@ static int hub_configure(struct usb_hub *hub,
for (i = 0; i < maxchild; i++) {
ret = usb_hub_create_port_device(hub, i + 1);
if (ret < 0) {
- dev_err(hub->intfdev,
- "couldn't create port%d device.\n", i + 1);
+ snprintf(msg_buf, sizeof(msg_buf), "couldn't create port%d device", i + 1);
+ message = msg_buf;
break;
}
}
--
2.56.0.rc1.315.gc6ed9934b7-goog
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v3] usb: hub: Set proper message when usb_hub_create_port_device() fails
2026-10-01 11:06 [PATCH v3] usb: hub: Set proper message when usb_hub_create_port_device() fails Chen-Yu Tsai
@ 2026-10-01 11:23 ` Greg Kroah-Hartman
2026-10-02 5:30 ` Chen-Yu Tsai
0 siblings, 1 reply; 3+ messages in thread
From: Greg Kroah-Hartman @ 2026-10-01 11:23 UTC (permalink / raw)
To: Chen-Yu Tsai; +Cc: Andy Shevchenko, linux-usb, linux-kernel, Alan Stern
On Thu, Oct 01, 2026 at 07:06:30PM +0800, Chen-Yu Tsai wrote:
> Right now when usb_hub_create_port_device() fails, it prints a separate
> error message to say which port failed, but otherwise leaves 'message'
> set to the default "out of memory", which is somewhat misleading.
>
> Use a small buffer on the stack to put the custom formatted error message
> in and use it as the error message.
>
> Assisted-by: LLM # local reviews
> Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
> ---
> Changes since v2:
> - Simplify to just using a small buffer on the stack (Alan)
>
> Changes since v1:
> - Explicitly track and free the allocated custom error message instead
> of using devm_kasprintf()
> - Link to v1:
> https://lore.kernel.org/all/20260728100005.413868-1-wenst@chromium.org/
>
> Sorry Andy, I ended up not using your __free(kfree_const) patch. My LLM
> was telling me that it won't work correctly if CONFIG_USB=m.
> ---
> drivers/usb/core/hub.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index 0e929a4c9fa1..d7f39e86b24c 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -1480,6 +1480,7 @@ static int hub_configure(struct usb_hub *hub,
> unsigned int pipe;
> int maxp, ret, i;
> char *message = "out of memory";
> + char msg_buf[32] = {};
Why are you initializing this?
> unsigned unit_load;
> unsigned full_load;
> unsigned maxchild;
> @@ -1756,8 +1757,8 @@ static int hub_configure(struct usb_hub *hub,
> for (i = 0; i < maxchild; i++) {
> ret = usb_hub_create_port_device(hub, i + 1);
> if (ret < 0) {
> - dev_err(hub->intfdev,
> - "couldn't create port%d device.\n", i + 1);
> + snprintf(msg_buf, sizeof(msg_buf), "couldn't create port%d device", i + 1);
> + message = msg_buf;
Please just do what the other errors do, set message to something else
and leave the dev_err() here. That way no extra stack space is needed.
And how did you hit this?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v3] usb: hub: Set proper message when usb_hub_create_port_device() fails
2026-10-01 11:23 ` Greg Kroah-Hartman
@ 2026-10-02 5:30 ` Chen-Yu Tsai
0 siblings, 0 replies; 3+ messages in thread
From: Chen-Yu Tsai @ 2026-10-02 5:30 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Andy Shevchenko, linux-usb, linux-kernel, Alan Stern
On Thu, Oct 1, 2026 at 7:23 PM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> On Thu, Oct 01, 2026 at 07:06:30PM +0800, Chen-Yu Tsai wrote:
> > Right now when usb_hub_create_port_device() fails, it prints a separate
> > error message to say which port failed, but otherwise leaves 'message'
> > set to the default "out of memory", which is somewhat misleading.
> >
> > Use a small buffer on the stack to put the custom formatted error message
> > in and use it as the error message.
> >
> > Assisted-by: LLM # local reviews
> > Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
> > ---
> > Changes since v2:
> > - Simplify to just using a small buffer on the stack (Alan)
> >
> > Changes since v1:
> > - Explicitly track and free the allocated custom error message instead
> > of using devm_kasprintf()
> > - Link to v1:
> > https://lore.kernel.org/all/20260728100005.413868-1-wenst@chromium.org/
> >
> > Sorry Andy, I ended up not using your __free(kfree_const) patch. My LLM
> > was telling me that it won't work correctly if CONFIG_USB=m.
> > ---
> > drivers/usb/core/hub.c | 5 +++--
> > 1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> > index 0e929a4c9fa1..d7f39e86b24c 100644
> > --- a/drivers/usb/core/hub.c
> > +++ b/drivers/usb/core/hub.c
> > @@ -1480,6 +1480,7 @@ static int hub_configure(struct usb_hub *hub,
> > unsigned int pipe;
> > int maxp, ret, i;
> > char *message = "out of memory";
> > + char msg_buf[32] = {};
>
> Why are you initializing this?
It seemed sane. I guess this probably isn't needed.
> > unsigned unit_load;
> > unsigned full_load;
> > unsigned maxchild;
> > @@ -1756,8 +1757,8 @@ static int hub_configure(struct usb_hub *hub,
> > for (i = 0; i < maxchild; i++) {
> > ret = usb_hub_create_port_device(hub, i + 1);
> > if (ret < 0) {
> > - dev_err(hub->intfdev,
> > - "couldn't create port%d device.\n", i + 1);
> > + snprintf(msg_buf, sizeof(msg_buf), "couldn't create port%d device", i + 1);
> > + message = msg_buf;
>
> Please just do what the other errors do, set message to something else
> and leave the dev_err() here. That way no extra stack space is needed.
OK.
> And how did you hit this?
My other series adding pwrseq to USB hub port power controls [1] would let
usb_hub_create_port_device() return -EPROBE_DEFER if the pwrseq provider
isn't available yet. Due to probe ordering it is always unavailable the
first time around, as the regulator supplying the pwrseq device (M.2 slot)
hasn't probed yet.
BTW that patch series really needs a look over from the USB maintainers.
Thanks
ChenYu
[1] https://lore.kernel.org/all/20260916075745.3549953-1-wenst@chromium.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-02 5:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-01 11:06 [PATCH v3] usb: hub: Set proper message when usb_hub_create_port_device() fails Chen-Yu Tsai
2026-10-01 11:23 ` Greg Kroah-Hartman
2026-10-02 5:30 ` Chen-Yu Tsai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®