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>