usbip: fix usbip attach to find a port that matches the requested speed
usbip attach fails to find a free port when the device on the first port is a USB_SPEED_SUPER device and non-super speed device is being attached. It keeps checking the first port and returns without a match getting stuck in a loop. Fix it check to find the first port with matching speed. Reported-by: Juan Zea <juan.zea@qindel.com> Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
770b2edece
commit
1ac7c8a78b
|
@ -329,9 +329,17 @@ err:
|
|||
int usbip_vhci_get_free_port(uint32_t speed)
|
||||
{
|
||||
for (int i = 0; i < vhci_driver->nports; i++) {
|
||||
if (speed == USB_SPEED_SUPER &&
|
||||
vhci_driver->idev[i].hub != HUB_SPEED_SUPER)
|
||||
continue;
|
||||
|
||||
switch (speed) {
|
||||
case USB_SPEED_SUPER:
|
||||
if (vhci_driver->idev[i].hub != HUB_SPEED_SUPER)
|
||||
continue;
|
||||
break;
|
||||
default:
|
||||
if (vhci_driver->idev[i].hub != HUB_SPEED_HIGH)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
if (vhci_driver->idev[i].status == VDEV_ST_NULL)
|
||||
return vhci_driver->idev[i].port;
|
||||
|
|
Loading…
Reference in New Issue