summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsephe <sephe@FreeBSD.org>2016-10-11 05:47:52 +0000
committersephe <sephe@FreeBSD.org>2016-10-11 05:47:52 +0000
commitba2bf2a02944c44d2a8e4ded546f16ab8c6b6d2f (patch)
tree5fe111c68dc82253ae28c4f4707dcb595b3fb7ba
parent2f5999292c376ccf349eaa57488c76f9fb4fb491 (diff)
downloadFreeBSD-src-ba2bf2a02944c44d2a8e4ded546f16ab8c6b6d2f.zip
FreeBSD-src-ba2bf2a02944c44d2a8e4ded546f16ab8c6b6d2f.tar.gz
MFC 302544
hyperv/hn: Add tunable to allow tcp_lro_queue_mbuf() Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D6841
-rw-r--r--sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
index 520cbf7..9b05aa5 100644
--- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
@@ -299,6 +299,12 @@ static int hn_tx_swq_depth = 0;
SYSCTL_INT(_hw_hn, OID_AUTO, tx_swq_depth, CTLFLAG_RDTUN,
&hn_tx_swq_depth, 0, "Depth of IFQ or BUFRING");
+#if __FreeBSD_version >= 1100095
+static u_int hn_lro_mbufq_depth = 0;
+SYSCTL_UINT(_hw_hn, OID_AUTO, lro_mbufq_depth, CTLFLAG_RDTUN,
+ &hn_lro_mbufq_depth, 0, "Depth of LRO mbuf queue");
+#endif
+
static u_int hn_cpu_index;
/*
@@ -1300,6 +1306,19 @@ hv_m_append(struct mbuf *m0, int len, c_caddr_t cp)
return (remainder == 0);
}
+#if defined(INET) || defined(INET6)
+static __inline int
+hn_lro_rx(struct lro_ctrl *lc, struct mbuf *m)
+{
+#if __FreeBSD_version >= 1100095
+ if (hn_lro_mbufq_depth) {
+ tcp_lro_queue_mbuf(lc, m);
+ return 0;
+ }
+#endif
+ return tcp_lro_rx(lc, m, 0);
+}
+#endif
/*
* Called when we receive a data packet from the "wire" on the
@@ -1505,7 +1524,7 @@ skip:
if (lro->lro_cnt) {
rxr->hn_lro_tried++;
- if (tcp_lro_rx(lro, m_new, 0) == 0) {
+ if (hn_lro_rx(lro, m_new) == 0) {
/* DONE! */
return 0;
}
@@ -2269,7 +2288,8 @@ hn_create_rx_data(struct hn_softc *sc, int ring_cnt)
*/
#if defined(INET) || defined(INET6)
#if __FreeBSD_version >= 1100095
- tcp_lro_init_args(&rxr->hn_lro, sc->hn_ifp, lroent_cnt, 0);
+ tcp_lro_init_args(&rxr->hn_lro, sc->hn_ifp, lroent_cnt,
+ hn_lro_mbufq_depth);
#else
tcp_lro_init(&rxr->hn_lro);
rxr->hn_lro.ifp = sc->hn_ifp;
OpenPOWER on IntegriCloud