From 15ce7ce355b3cfb5ec8bc2d51528b08f02f4648b Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 6 Dec 2015 23:22:37 +0000 Subject: [usb] Use port->disconnected to check for disconnected devices The usb_message() and usb_stream() functions currently check for port->speed==USB_SPEED_NONE to determine whether or not a device has been unplugged. This test will give a false negative result if a new device has been plugged in before the hotplug mechanism has finished handling the removal of the old device. Fix by checking instead the port->disconnected flag, which is now cleared only after completing the removal of the old device. Signed-off-by: Michael Brown --- src/drivers/usb/usbhub.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/drivers/usb/usbhub.c') diff --git a/src/drivers/usb/usbhub.c b/src/drivers/usb/usbhub.c index 5cfc4052..a3e7bc00 100644 --- a/src/drivers/usb/usbhub.c +++ b/src/drivers/usb/usbhub.c @@ -496,9 +496,10 @@ static void hub_remove ( struct usb_function *func ) { unsigned int i; /* If hub has been unplugged, mark all ports as unplugged */ - if ( usb->port->speed == USB_SPEED_NONE ) { + if ( usb->port->disconnected ) { for ( i = 1 ; i <= hub->ports ; i++ ) { port = usb_port ( hub, i ); + port->disconnected = 1; port->speed = USB_SPEED_NONE; } } -- cgit v1.2.3-55-g7522