Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Feb 2016 10:27:11 +0000
From:      "sepherosa_gmail.com (Sepherosa Ziehau)" <phabric-noreply@FreeBSD.org>
To:        freebsd-net@freebsd.org
Subject:   [Differential] [Request, 21 lines] D5167: hyperv/hn: Move LRO flush to the channel processing rollup
Message-ID:  <differential-rev-PHID-DREV-ogleai2v4aflahucu2wl-req@FreeBSD.org>

index | next in thread | raw e-mail

[-- Attachment #1 --]
sepherosa_gmail.com created this revision.
sepherosa_gmail.com added reviewers: network, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com.
sepherosa_gmail.com added a subscriber: freebsd-net-list.

REVISION SUMMARY
  This significantly increases LRO aggregation ratio when there are large amount of connections (improves reception performance a lot).

REVISION DETAIL
  https://reviews.freebsd.org/D5167

AFFECTED FILES
  sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c

CHANGE DETAILS
  diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  --- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  +++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  @@ -764,6 +764,15 @@
   netvsc_channel_rollup(struct hv_device *device_ctx)
   {
   	struct hn_softc *sc = device_get_softc(device_ctx->device);
  +#if defined(INET) || defined(INET6)
  +	struct lro_ctrl *lro = &sc->hn_lro;
  +	struct lro_entry *queued;
  +
  +	while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
  +		SLIST_REMOVE_HEAD(&lro->lro_active, next);
  +		tcp_lro_flush(lro, queued);
  +	}
  +#endif
   
   	if (!sc->hn_txeof)
   		return;
  @@ -1338,18 +1347,8 @@
   }
   
   void
  -netvsc_recv_rollup(struct hv_device *device_ctx)
  +netvsc_recv_rollup(struct hv_device *device_ctx __unused)
   {
  -#if defined(INET) || defined(INET6)
  -	hn_softc_t *sc = device_get_softc(device_ctx->device);
  -	struct lro_ctrl *lro = &sc->hn_lro;
  -	struct lro_entry *queued;
  -
  -	while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
  -		SLIST_REMOVE_HEAD(&lro->lro_active, next);
  -		tcp_lro_flush(lro, queued);
  -	}
  -#endif
   }
   
   /*

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: sepherosa_gmail.com, network, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com
Cc: freebsd-net-list

[-- Attachment #2 --]
diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
--- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
@@ -764,6 +764,15 @@
 netvsc_channel_rollup(struct hv_device *device_ctx)
 {
 	struct hn_softc *sc = device_get_softc(device_ctx->device);
+#if defined(INET) || defined(INET6)
+	struct lro_ctrl *lro = &sc->hn_lro;
+	struct lro_entry *queued;
+
+	while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
+		SLIST_REMOVE_HEAD(&lro->lro_active, next);
+		tcp_lro_flush(lro, queued);
+	}
+#endif
 
 	if (!sc->hn_txeof)
 		return;
@@ -1338,18 +1347,8 @@
 }
 
 void
-netvsc_recv_rollup(struct hv_device *device_ctx)
+netvsc_recv_rollup(struct hv_device *device_ctx __unused)
 {
-#if defined(INET) || defined(INET6)
-	hn_softc_t *sc = device_get_softc(device_ctx->device);
-	struct lro_ctrl *lro = &sc->hn_lro;
-	struct lro_entry *queued;
-
-	while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
-		SLIST_REMOVE_HEAD(&lro->lro_active, next);
-		tcp_lro_flush(lro, queued);
-	}
-#endif
 }
 
 /*

help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?differential-rev-PHID-DREV-ogleai2v4aflahucu2wl-req>