aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2021-04-11 18:24:41 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2021-05-10 14:11:19 +0000
commit9312bcb2e9f6c13b99b52bb3d4e2a31c95c3076a (patch)
tree6d238fb988d5ccb0b9695f942f52bfa993110089
parent8a4f990338febd281ec328b31b86a8fb173756f2 (diff)
downloadsrc-9312bcb2e9f6c13b99b52bb3d4e2a31c95c3076a.tar.gz
src-9312bcb2e9f6c13b99b52bb3d4e2a31c95c3076a.zip
if_smsc: Add the ability to disable "turbo_mode", also called RX frame batching,
similarly to the Linux driver, by a tunable read only sysctl. Submitted by: Oleg Sidorkin <osidorkin@gmail.com> PR: 254884 Sponsored by: Mellanox Technologies // NVIDIA Networking (cherry picked from commit 5a3426f453f970edda38367bea5ebf7385c3819d)
-rw-r--r--sys/dev/usb/net/if_smsc.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/sys/dev/usb/net/if_smsc.c b/sys/dev/usb/net/if_smsc.c
index 84610c894f4d..85cc955b9fbf 100644
--- a/sys/dev/usb/net/if_smsc.c
+++ b/sys/dev/usb/net/if_smsc.c
@@ -119,11 +119,19 @@ __FBSDID("$FreeBSD$");
#include "miibus_if.h"
+SYSCTL_NODE(_hw_usb, OID_AUTO, smsc, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "USB smsc");
+
+static bool smsc_rx_packet_batching = 1;
+
+SYSCTL_BOOL(_hw_usb_smsc, OID_AUTO, smsc_rx_packet_batching, CTLFLAG_RDTUN,
+ &smsc_rx_packet_batching, 0,
+ "If set, allows packet batching to increase throughput and latency. "
+ "Else throughput and latency is decreased.");
+
#ifdef USB_DEBUG
static int smsc_debug = 0;
-SYSCTL_NODE(_hw_usb, OID_AUTO, smsc, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
- "USB smsc");
SYSCTL_INT(_hw_usb_smsc, OID_AUTO, debug, CTLFLAG_RWTUN, &smsc_debug, 0,
"Debug level");
#endif
@@ -1377,7 +1385,9 @@ smsc_chip_init(struct smsc_softc *sc)
* Burst capability is the number of URBs that can be in a burst of data/
* ethernet frames.
*/
- if (usbd_get_speed(sc->sc_ue.ue_udev) == USB_SPEED_HIGH)
+ if (!smsc_rx_packet_batching)
+ burst_cap = 0;
+ else if (usbd_get_speed(sc->sc_ue.ue_udev) == USB_SPEED_HIGH)
burst_cap = 37;
else
burst_cap = 128;
@@ -1404,7 +1414,8 @@ smsc_chip_init(struct smsc_softc *sc)
/* The following setings are used for 'turbo mode', a.k.a multiple frames
* per Rx transaction (again info taken form Linux driver).
*/
- reg_val |= (SMSC_HW_CFG_MEF | SMSC_HW_CFG_BCE);
+ if (smsc_rx_packet_batching)
+ reg_val |= (SMSC_HW_CFG_MEF | SMSC_HW_CFG_BCE);
smsc_write_reg(sc, SMSC_HW_CFG, reg_val);