Message ID | 20220719062452.25507-1-lukasz.spintzyk@synaptics.com |
---|---|
State | New |
Headers | show |
Series | [v4,1/2] net/cdc_ncm: Enable ZLP for DisplayLink ethernet devices | expand |
On Tue, Jul 19, 2022 at 08:24:52AM +0200, Łukasz Spintzyk wrote: > DisplayLink ethernet devices require NTB buffers larger then 32kb > in order to run with highest performance. > > This patch is changing upper limit of the rx and tx buffers. > Those buffers are initialized with CDC_NCM_NTB_DEF_SIZE_RX and > CDC_NCM_NTB_DEF_SIZE_TX which is 16kb so by default no device is > affected by increased limit. > > Rx and tx buffer is increased under two conditions: > - Device need to advertise that it supports higher buffer size in > dwNtbMaxInMaxSize and dwNtbMaxOutMaxSize. > - cdc_ncm/rx_max and cdc_ncm/tx_max driver parameters must be adjusted > with udev rule or ethtool. > > Summary of testing and performance results: > Tests were performed on following devices: > - DisplayLink DL-3xxx family device > - DisplayLink DL-6xxx family device > - ASUS USB-C2500 2.5G USB3 ethernet adapter > - Plugable USB3 1G USB3 ethernet adapter > - EDIMAX EU-4307 USB-C ethernet adapter > - Dell DBQBCBC064 USB-C ethernet adapter > > Performance measurements were done with: > - iperf3 between two linux boxes > - http://openspeedtest.com/ instance running on local test machine > > Insights from tests results: > - All except one from third party usb adapters were not affected by > increased buffer size to their advertised dwNtbOutMaxSize and > dwNtbInMaxSize. > Devices were generally reaching 912-940Mbps both download and upload. > > Only EDIMAX adapter experienced decreased download size from > 929Mbps to 827Mbps with iper3, with openspeedtest decrease was from > 968Mbps to 886Mbps. > > - DisplayLink DL-3xxx family devices experienced performance increase > with iperf3 download from 300Mbps to 870Mbps and > upload from 782Mbps to 844Mbps. > With openspeedtest download increased from 556Mbps to 873Mbps > and upload from 727Mbps to 973Mbps > > - DiplayLink DL-6xxx family devices are not affected by > increased buffer size. > > Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com> > Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > --- > > v4: Added Acked-by from link > https://lore.kernel.org/netdev/YtAKEyplVDC85EKV@kroah.com/#t > > Greg, Hopefully this is what you meant about missing "Reviewed-by". Yes, but you forgot to list what changed from v1 and v2 here :( thanks, greg k-h
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index d55f59ce4a31..af84ac0d65c9 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c @@ -1904,6 +1904,19 @@ static const struct driver_info cdc_ncm_info = { .set_rx_mode = usbnet_cdc_update_filter, }; +/* Same as cdc_ncm_info, but with FLAG_SEND_ZLP */ +static const struct driver_info cdc_ncm_zlp_info = { + .description = "CDC NCM (SEND ZLP)", + .flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT | FLAG_MULTI_PACKET + | FLAG_LINK_INTR | FLAG_ETHER | FLAG_SEND_ZLP, + .bind = cdc_ncm_bind, + .unbind = cdc_ncm_unbind, + .manage_power = usbnet_manage_power, + .status = cdc_ncm_status, + .rx_fixup = cdc_ncm_rx_fixup, + .tx_fixup = cdc_ncm_tx_fixup, +}; + /* Same as cdc_ncm_info, but with FLAG_WWAN */ static const struct driver_info wwan_info = { .description = "Mobile Broadband Network Device", @@ -2010,6 +2023,16 @@ static const struct usb_device_id cdc_devs[] = { .driver_info = (unsigned long)&wwan_info, }, + /* DisplayLink docking stations */ + { .match_flags = USB_DEVICE_ID_MATCH_INT_INFO + | USB_DEVICE_ID_MATCH_VENDOR, + .idVendor = 0x17e9, + .bInterfaceClass = USB_CLASS_COMM, + .bInterfaceSubClass = USB_CDC_SUBCLASS_NCM, + .bInterfaceProtocol = USB_CDC_PROTO_NONE, + .driver_info = (unsigned long)&cdc_ncm_zlp_info, + }, + /* Generic CDC-NCM devices */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),