Re: [PATCH] usbip: Implement a match function to fix usbip

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2020-08-10 at 19:00 +0300, M. Vefa Bicakci wrote:
> Commit 88b7381a939d ("USB: Select better matching USB drivers when
> available") introduced the use of a "match" function to select a
> non-generic/better driver for a particular USB device. This
> unfortunately breaks the operation of usbip in general, as reported
> in
> the kernel bugzilla with bug 208267 (linked below).
> 
> Upon inspecting the aforementioned commit, one can observe that the
> original code in the usb_device_match function used to return 1
> unconditionally, but the aforementioned commit makes the
> usb_device_match
> function use identifier tables and "match" virtual functions, if
> either of
> them are available.
> 
> Hence, this commit implements a match function for usbip that
> unconditionally returns true to ensure that usbip is functional
> again.
> 
> This change has been verified to restore usbip functionality, with a
> v5.7.y kernel on an up-to-date version of Qubes OS 4.0, which uses
> usbip to redirect USB devices between VMs.
> 
> Thanks to Jonathan Dieter for the effort in bisecting this issue down
> to the aforementioned commit.

Looks correct. Thanks for root causing the problem.

Reviewed-by: Bastien Nocera <hadess@xxxxxxxxxx>

> Fixes: 88b7381a939d ("USB: Select better matching USB drivers when
> available")
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=208267
> Link: https://bugzilla.redhat.com/show_bug.cgi?id=1856443
> Link: https://github.com/QubesOS/qubes-issues/issues/5905
> Signed-off-by: M. Vefa Bicakci <m.v.b@xxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx> # 5.7
> Cc: Valentina Manea <valentina.manea.m@xxxxxxxxx>
> Cc: Shuah Khan <shuah@xxxxxxxxxx>
> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> Cc: Bastien Nocera <hadess@xxxxxxxxxx>
> Cc: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
> ---
>  drivers/usb/usbip/stub_dev.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/usb/usbip/stub_dev.c
> b/drivers/usb/usbip/stub_dev.c
> index 2305d425e6c9..9d7d642022d1 100644
> --- a/drivers/usb/usbip/stub_dev.c
> +++ b/drivers/usb/usbip/stub_dev.c
> @@ -461,6 +461,11 @@ static void stub_disconnect(struct usb_device
> *udev)
>  	return;
>  }
>  
> +static bool usbip_match(struct usb_device *udev)
> +{
> +	return true;
> +}
> +
>  #ifdef CONFIG_PM
>  
>  /* These functions need usb_port_suspend and usb_port_resume,
> @@ -486,6 +491,7 @@ struct usb_device_driver stub_driver = {
>  	.name		= "usbip-host",
>  	.probe		= stub_probe,
>  	.disconnect	= stub_disconnect,
> +	.match		= usbip_match,
>  #ifdef CONFIG_PM
>  	.suspend	= stub_suspend,
>  	.resume		= stub_resume,




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux