From owner-freebsd-net@freebsd.org Fri Apr 29 02:29:19 2016 Return-Path: Delivered-To: freebsd-net@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6139EB20F90 for ; Fri, 29 Apr 2016 02:29:19 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from reviews.nyi.freebsd.org (reviews.nyi.freebsd.org [IPv6:2610:1c1:1:607c::16:b]) by mx1.freebsd.org (Postfix) with ESMTP id 2D53C1E97 for ; Fri, 29 Apr 2016 02:29:19 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by reviews.nyi.freebsd.org (Postfix, from userid 1346) id 36BE4CC2C; Fri, 29 Apr 2016 02:29:18 +0000 (UTC) Date: Fri, 29 Apr 2016 02:29:18 +0000 To: freebsd-net@freebsd.org From: "sepherosa_gmail.com (Sepherosa Ziehau)" Reply-to: D6137+325+f015369c65104c2f@reviews.freebsd.org Subject: [Differential] D6137: tcp/lro: Refactor the free/active list operation. Message-ID: <0d1539496ddac671f15754fca9887381@localhost.localdomain> X-Priority: 3 X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , , Thread-Topic: D6137: tcp/lro: Refactor the free/active list operation. X-Herald-Rules: <64> X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: Precedence: bulk In-Reply-To: References: Thread-Index: ZDQ3OTAzM2ZhZTk0ODRmZGQwZGYxNDFlY2ZjIFcixv4= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_0d1539496ddac671f15754fca9887381" X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.21 List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Apr 2016 02:29:19 -0000 --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--