On Tue, Aug 18, 2020 at 9:19 AM Lorenzo Colitti <lorenzo@xxxxxxxxxx> wrote: > > The u_ether driver has a qmult setting that multiplies the > transmit queue length (which by default is 2). > > The intent is that it should be enabled at high/super speed, but > because the code does not explicitly check for USB_SUPER_PLUS, > it is disabled at that speed. > > Fix this by ensuring that the queue multiplier is enabled for any > wired link at high speed or above. Using >= for USB_SPEED_* > constants seems correct because it is what the gadget_is_xxxspeed > functions do. > > The queue multiplier substantially helps performance at higher > speeds. On a direct SuperSpeed Plus link to a Linux laptop, > iperf3 single TCP stream: > > Before (qmult=1): 1.3 Gbps > After (qmult=5): 3.2 Gbps > > Fixes: 04617db7aa68 ("usb: gadget: add SS descriptors to Ethernet gadget") > Signed-off-by: Lorenzo Colitti <lorenzo@xxxxxxxxxx> > --- > drivers/usb/gadget/function/u_ether.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c > index c3cc6bd14e..31ea76adcc 100644 > --- a/drivers/usb/gadget/function/u_ether.c > +++ b/drivers/usb/gadget/function/u_ether.c > @@ -93,7 +93,7 @@ struct eth_dev { > static inline int qlen(struct usb_gadget *gadget, unsigned qmult) > { > if (gadget_is_dualspeed(gadget) && (gadget->speed == USB_SPEED_HIGH || > - gadget->speed == USB_SPEED_SUPER)) > + gadget->speed >= USB_SPEED_SUPER)) > return qmult * DEFAULT_QLEN; > else > return DEFAULT_QLEN; > -- > 2.28.0.220.ged08abb693-goog > Reviewed-by: Maciej Żenczykowski <maze@xxxxxxxxxx>