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)
|
int usbip_vhci_get_free_port(uint32_t speed)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < vhci_driver->nports; i++) {
|
for (int i = 0; i < vhci_driver->nports; i++) {
|
||||||
if (speed == USB_SPEED_SUPER &&
|
|
||||||
vhci_driver->idev[i].hub != HUB_SPEED_SUPER)
|
switch (speed) {
|
||||||
|
case USB_SPEED_SUPER:
|
||||||
|
if (vhci_driver->idev[i].hub != HUB_SPEED_SUPER)
|
||||||
continue;
|
continue;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (vhci_driver->idev[i].hub != HUB_SPEED_HIGH)
|
||||||
|
continue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (vhci_driver->idev[i].status == VDEV_ST_NULL)
|
if (vhci_driver->idev[i].status == VDEV_ST_NULL)
|
||||||
return vhci_driver->idev[i].port;
|
return vhci_driver->idev[i].port;
|
||||||
|
Loading…
Reference in New Issue
Block a user