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,