On Tue, Jun 25, 2024 at 09:46:07AM -0700, Lizhe wrote: > the usb device connected to the port has obtained. > there is no need to obtain it again. > > Signed-off-by: Lizhe <sensor1010@xxxxxxx> > --- > drivers/usb/core/hub.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index 4b93c0bd1d4b..f37b991fa86a 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -5358,7 +5358,7 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, > if (udev) { > if (hcd->usb_phy && !hdev->parent) > usb_phy_notify_disconnect(hcd->usb_phy, udev->speed); > - usb_disconnect(&port_dev->child); > + usb_disconnect(&udev); > } This is wrong. We need to pass the address of port_dev->child, not the address of udev. This is so that usb_disconnect() can set port_dev->child to NULL. Setting udev to NULL instead won't work right. Alan Stern