Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Apr 2016 02:29:18 +0000
From:      "sepherosa_gmail.com (Sepherosa Ziehau)" <phabric-noreply@FreeBSD.org>
To:        freebsd-net@freebsd.org
Subject:   [Differential] D6137: tcp/lro: Refactor the free/active list operation.
Message-ID:  <0d1539496ddac671f15754fca9887381@localhost.localdomain>
In-Reply-To: <differential-rev-PHID-DREV-mroevi6nzobvlsf24xxb-req@FreeBSD.org>
References:  <differential-rev-PHID-DREV-mroevi6nzobvlsf24xxb-req@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--b1_0d1539496ddac671f15754fca9887381
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

sepherosa_gmail.com updated this revision to Diff 15725.
sepherosa_gmail.com added a comment.


  Skip the free list operation, which may introduce extra cmp on hot code path

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D6137?vs=15684&id=15725

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

AFFECTED FILES
  sys/netinet/tcp_lro.c

CHANGE DETAILS
  diff --git a/sys/netinet/tcp_lro.c b/sys/netinet/tcp_lro.c
  --- a/sys/netinet/tcp_lro.c
  +++ b/sys/netinet/tcp_lro.c
  @@ -69,6 +69,20 @@
   
   static void	tcp_lro_rx_done(struct lro_ctrl *lc);
   
  +static __inline void
  +tcp_lro_active_insert(struct lro_ctrl *lc, struct lro_entry *le)
  +{
  +
  +	LIST_INSERT_HEAD(&lc->lro_active, le, next);
  +}
  +
  +static __inline void
  +tcp_lro_active_remove(struct lro_entry *le)
  +{
  +
  +	LIST_REMOVE(le, next);
  +}
  +
   int
   tcp_lro_init(struct lro_ctrl *lc)
   {
  @@ -129,7 +143,7 @@
   
   	/* free active mbufs, if any */
   	while ((le = LIST_FIRST(&lc->lro_active)) != NULL) {
  -		LIST_REMOVE(le, next);
  +		tcp_lro_active_remove(le);
   		m_freem(le->m_head);
   	}
   
  @@ -234,7 +248,7 @@
   	struct lro_entry *le;
   
   	while ((le = LIST_FIRST(&lc->lro_active)) != NULL) {
  -		LIST_REMOVE(le, next);
  +		tcp_lro_active_remove(le);
   		tcp_lro_flush(lc, le);
   	}
   }
  @@ -252,7 +266,7 @@
   	timevalsub(&tv, timeout);
   	LIST_FOREACH_SAFE(le, &lc->lro_active, next, le_tmp) {
   		if (timevalcmp(&tv, &le->mtime, >=)) {
  -			LIST_REMOVE(le, next);
  +			tcp_lro_active_remove(le);
   			tcp_lro_flush(lc, le);
   		}
   	}
  @@ -620,16 +634,16 @@
   
   		/* Flush now if appending will result in overflow. */
   		if (le->p_len > (lc->lro_length_lim - tcp_data_len)) {
  -			LIST_REMOVE(le, next);
  +			tcp_lro_active_remove(le);
   			tcp_lro_flush(lc, le);
   			break;
   		}
   
   		/* Try to append the new segment. */
   		if (__predict_false(seq != le->next_seq ||
   		    (tcp_data_len == 0 && le->ack_seq == th->th_ack))) {
   			/* Out of order packet or duplicate ACK. */
  -			LIST_REMOVE(le, next);
  +			tcp_lro_active_remove(le);
   			tcp_lro_flush(lc, le);
   			return (TCP_LRO_CANNOT);
   		}
  @@ -662,7 +676,7 @@
   			 * be further delayed.
   			 */
   			if (le->append_cnt >= lc->lro_ackcnt_lim) {
  -				LIST_REMOVE(le, next);
  +				tcp_lro_active_remove(le);
   				tcp_lro_flush(lc, le);
   			}
   			return (0);
  @@ -686,7 +700,7 @@
   		 * overflow, pro-actively flush now.
   		 */
   		if (le->p_len > (lc->lro_length_lim - lc->ifp->if_mtu)) {
  -			LIST_REMOVE(le, next);
  +			tcp_lro_active_remove(le);
   			tcp_lro_flush(lc, le);
   		} else
   			getmicrotime(&le->mtime);
  @@ -701,7 +715,7 @@
   	/* Start a new segment chain. */
   	le = LIST_FIRST(&lc->lro_free);
   	LIST_REMOVE(le, next);
  -	LIST_INSERT_HEAD(&lc->lro_active, le, next);
  +	tcp_lro_active_insert(lc, le);
   	getmicrotime(&le->mtime);
   
   	/* Start filling in details. */

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

To: sepherosa_gmail.com, network, adrian, delphij, glebius, hselasky, np, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com, transport, rrs, gallatin
Cc: freebsd-net-list

--b1_0d1539496ddac671f15754fca9887381
Content-Type: text/x-patch; charset=utf-8; name="D6137.15725.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D6137.15725.patch"

ZGlmZiAtLWdpdCBhL3N5cy9uZXRpbmV0L3RjcF9scm8uYyBiL3N5cy9uZXRpbmV0L3RjcF9scm8u
YwotLS0gYS9zeXMvbmV0aW5ldC90Y3BfbHJvLmMKKysrIGIvc3lzL25ldGluZXQvdGNwX2xyby5j
CkBAIC02OSw2ICs2OSwyMCBAQAogCiBzdGF0aWMgdm9pZAl0Y3BfbHJvX3J4X2RvbmUoc3RydWN0
IGxyb19jdHJsICpsYyk7CiAKK3N0YXRpYyBfX2lubGluZSB2b2lkCit0Y3BfbHJvX2FjdGl2ZV9p
bnNlcnQoc3RydWN0IGxyb19jdHJsICpsYywgc3RydWN0IGxyb19lbnRyeSAqbGUpCit7CisKKwlM
SVNUX0lOU0VSVF9IRUFEKCZsYy0+bHJvX2FjdGl2ZSwgbGUsIG5leHQpOworfQorCitzdGF0aWMg
X19pbmxpbmUgdm9pZAordGNwX2xyb19hY3RpdmVfcmVtb3ZlKHN0cnVjdCBscm9fZW50cnkgKmxl
KQoreworCisJTElTVF9SRU1PVkUobGUsIG5leHQpOworfQorCiBpbnQKIHRjcF9scm9faW5pdChz
dHJ1Y3QgbHJvX2N0cmwgKmxjKQogewpAQCAtMTI5LDcgKzE0Myw3IEBACiAKIAkvKiBmcmVlIGFj
dGl2ZSBtYnVmcywgaWYgYW55ICovCiAJd2hpbGUgKChsZSA9IExJU1RfRklSU1QoJmxjLT5scm9f
YWN0aXZlKSkgIT0gTlVMTCkgewotCQlMSVNUX1JFTU9WRShsZSwgbmV4dCk7CisJCXRjcF9scm9f
YWN0aXZlX3JlbW92ZShsZSk7CiAJCW1fZnJlZW0obGUtPm1faGVhZCk7CiAJfQogCkBAIC0yMzQs
NyArMjQ4LDcgQEAKIAlzdHJ1Y3QgbHJvX2VudHJ5ICpsZTsKIAogCXdoaWxlICgobGUgPSBMSVNU
X0ZJUlNUKCZsYy0+bHJvX2FjdGl2ZSkpICE9IE5VTEwpIHsKLQkJTElTVF9SRU1PVkUobGUsIG5l
eHQpOworCQl0Y3BfbHJvX2FjdGl2ZV9yZW1vdmUobGUpOwogCQl0Y3BfbHJvX2ZsdXNoKGxjLCBs
ZSk7CiAJfQogfQpAQCAtMjUyLDcgKzI2Niw3IEBACiAJdGltZXZhbHN1YigmdHYsIHRpbWVvdXQp
OwogCUxJU1RfRk9SRUFDSF9TQUZFKGxlLCAmbGMtPmxyb19hY3RpdmUsIG5leHQsIGxlX3RtcCkg
ewogCQlpZiAodGltZXZhbGNtcCgmdHYsICZsZS0+bXRpbWUsID49KSkgewotCQkJTElTVF9SRU1P
VkUobGUsIG5leHQpOworCQkJdGNwX2xyb19hY3RpdmVfcmVtb3ZlKGxlKTsKIAkJCXRjcF9scm9f
Zmx1c2gobGMsIGxlKTsKIAkJfQogCX0KQEAgLTYyMCwxNiArNjM0LDE2IEBACiAKIAkJLyogRmx1
c2ggbm93IGlmIGFwcGVuZGluZyB3aWxsIHJlc3VsdCBpbiBvdmVyZmxvdy4gKi8KIAkJaWYgKGxl
LT5wX2xlbiA+IChsYy0+bHJvX2xlbmd0aF9saW0gLSB0Y3BfZGF0YV9sZW4pKSB7Ci0JCQlMSVNU
X1JFTU9WRShsZSwgbmV4dCk7CisJCQl0Y3BfbHJvX2FjdGl2ZV9yZW1vdmUobGUpOwogCQkJdGNw
X2xyb19mbHVzaChsYywgbGUpOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBUcnkgdG8gYXBwZW5k
IHRoZSBuZXcgc2VnbWVudC4gKi8KIAkJaWYgKF9fcHJlZGljdF9mYWxzZShzZXEgIT0gbGUtPm5l
eHRfc2VxIHx8CiAJCSAgICAodGNwX2RhdGFfbGVuID09IDAgJiYgbGUtPmFja19zZXEgPT0gdGgt
PnRoX2FjaykpKSB7CiAJCQkvKiBPdXQgb2Ygb3JkZXIgcGFja2V0IG9yIGR1cGxpY2F0ZSBBQ0su
ICovCi0JCQlMSVNUX1JFTU9WRShsZSwgbmV4dCk7CisJCQl0Y3BfbHJvX2FjdGl2ZV9yZW1vdmUo
bGUpOwogCQkJdGNwX2xyb19mbHVzaChsYywgbGUpOwogCQkJcmV0dXJuIChUQ1BfTFJPX0NBTk5P
VCk7CiAJCX0KQEAgLTY2Miw3ICs2NzYsNyBAQAogCQkJICogYmUgZnVydGhlciBkZWxheWVkLgog
CQkJICovCiAJCQlpZiAobGUtPmFwcGVuZF9jbnQgPj0gbGMtPmxyb19hY2tjbnRfbGltKSB7Ci0J
CQkJTElTVF9SRU1PVkUobGUsIG5leHQpOworCQkJCXRjcF9scm9fYWN0aXZlX3JlbW92ZShsZSk7
CiAJCQkJdGNwX2xyb19mbHVzaChsYywgbGUpOwogCQkJfQogCQkJcmV0dXJuICgwKTsKQEAgLTY4
Niw3ICs3MDAsNyBAQAogCQkgKiBvdmVyZmxvdywgcHJvLWFjdGl2ZWx5IGZsdXNoIG5vdy4KIAkJ
ICovCiAJCWlmIChsZS0+cF9sZW4gPiAobGMtPmxyb19sZW5ndGhfbGltIC0gbGMtPmlmcC0+aWZf
bXR1KSkgewotCQkJTElTVF9SRU1PVkUobGUsIG5leHQpOworCQkJdGNwX2xyb19hY3RpdmVfcmVt
b3ZlKGxlKTsKIAkJCXRjcF9scm9fZmx1c2gobGMsIGxlKTsKIAkJfSBlbHNlCiAJCQlnZXRtaWNy
b3RpbWUoJmxlLT5tdGltZSk7CkBAIC03MDEsNyArNzE1LDcgQEAKIAkvKiBTdGFydCBhIG5ldyBz
ZWdtZW50IGNoYWluLiAqLwogCWxlID0gTElTVF9GSVJTVCgmbGMtPmxyb19mcmVlKTsKIAlMSVNU
X1JFTU9WRShsZSwgbmV4dCk7Ci0JTElTVF9JTlNFUlRfSEVBRCgmbGMtPmxyb19hY3RpdmUsIGxl
LCBuZXh0KTsKKwl0Y3BfbHJvX2FjdGl2ZV9pbnNlcnQobGMsIGxlKTsKIAlnZXRtaWNyb3RpbWUo
JmxlLT5tdGltZSk7CiAKIAkvKiBTdGFydCBmaWxsaW5nIGluIGRldGFpbHMuICovCgo=


--b1_0d1539496ddac671f15754fca9887381--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0d1539496ddac671f15754fca9887381>