From owner-freebsd-net@freebsd.org Thu Feb 4 08:44:09 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 DBB59A9B1AC for ; Thu, 4 Feb 2016 08:44:09 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from phabric-backend.rbsd.freebsd.org (unknown [IPv6:2607:fc50:2000:101::1bb:73]) by mx1.freebsd.org (Postfix) with ESMTP id C50761442 for ; Thu, 4 Feb 2016 08:44:09 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id C25E510755D; Thu, 4 Feb 2016 08:44:09 +0000 (UTC) Date: Thu, 4 Feb 2016 08:44:09 +0000 To: freebsd-net@freebsd.org From: "sepherosa_gmail.com (Sepherosa Ziehau)" Reply-to: D5185+325+ec92cccb639ec0fa@reviews.freebsd.org Subject: [Differential] [Request, 117 lines] D5185: tcp/lro: Allow network drivers to set the limit for TCP ACK/data segment aggregation limit Message-ID: 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: D5185: tcp/lro: Allow network drivers to set the limit for TCP ACK/data segment aggregation limit 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-Cc: X-Phabricator-Cc: Precedence: bulk Thread-Index: NTU0NmM0Mjk2NjdmNzVhNmM3MzlkMWQyNTdm MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_77fc80858801b21443ab2a903cf15bcc" X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.20 List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Feb 2016 08:44:10 -0000 --b1_77fc80858801b21443ab2a903cf15bcc Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit sepherosa_gmail.com created this revision. sepherosa_gmail.com added reviewers: network, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com, gallatin, hselasky, np. sepherosa_gmail.com added subscribers: freebsd-net-list, freebsd-virtualization-list. Herald added a reviewer: transport. REVISION SUMMARY It's append_cnt based. Unless the network driver sets these two limits, its an NO-OP. For hn(4): - Set TCP ACK append limit to 1, i.e. aggregate 2 ACKs at most. Aggregate anything more than 2 hurts TCP sending performance in hyperv. This significantly improves the TCP sending performance when the number of concurrent connetion is low (2~8). And greatly stabilize the TCP sending performance in other cases. - Set TCP data segments append limit to 25. Without this limitation, hn(4) could aggregate ~45 TCP data segments for each connection (even at 64 or more connections) before dispatching them to socket code; large aggregation slows down ACK sending and eventually hurts/destabilizes TCP reception performance. This setting stabilizes and improves TCP reception performance for >4 concurrent connections significantly. Make them sysctls so they could be adjusted. REVISION DETAIL https://reviews.freebsd.org/D5185 AFFECTED FILES sys/dev/hyperv/netvsc/hv_net_vsc.h sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c sys/netinet/tcp_lro.c sys/netinet/tcp_lro.h EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: sepherosa_gmail.com, network, transport, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com, gallatin, hselasky, np Cc: freebsd-virtualization-list, freebsd-net-list --b1_77fc80858801b21443ab2a903cf15bcc Content-Type: text/x-patch; charset=utf-8; name="D5185.12995.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D5185.12995.patch" ZGlmZiAtLWdpdCBhL3N5cy9uZXRpbmV0L3RjcF9scm8uaCBiL3N5cy9uZXRpbmV0L3RjcF9scm8u aAotLS0gYS9zeXMvbmV0aW5ldC90Y3BfbHJvLmgKKysrIGIvc3lzL25ldGluZXQvdGNwX2xyby5o CkBAIC05MSw2ICs5MSw4IEBACiAJdW5zaWduZWQJbHJvX2NudDsKIAl1bnNpZ25lZAlscm9fbWJ1 Zl9jb3VudDsKIAl1bnNpZ25lZAlscm9fbWJ1Zl9tYXg7CisJdW5zaWduZWQgc2hvcnQJbHJvX2Fj a19hcHBlbmRfbGltOworCXVuc2lnbmVkIHNob3J0CWxyb19kYXRhX2FwcGVuZF9saW07CiAKIAlz dHJ1Y3QgbHJvX2hlYWQJbHJvX2FjdGl2ZTsKIAlzdHJ1Y3QgbHJvX2hlYWQJbHJvX2ZyZWU7CmRp ZmYgLS1naXQgYS9zeXMvbmV0aW5ldC90Y3BfbHJvLmMgYi9zeXMvbmV0aW5ldC90Y3BfbHJvLmMK LS0tIGEvc3lzL25ldGluZXQvdGNwX2xyby5jCisrKyBiL3N5cy9uZXRpbmV0L3RjcF9scm8uYwpA QCAtODgsNiArODgsOCBAQAogCWxjLT5scm9fbWJ1Zl9tYXggPSBscm9fbWJ1ZnM7CiAJbGMtPmxy b19jbnQgPSBscm9fZW50cmllczsKIAlsYy0+aWZwID0gaWZwOworCWxjLT5scm9fYWNrX2FwcGVu ZF9saW0gPSAwOworCWxjLT5scm9fZGF0YV9hcHBlbmRfbGltID0gMDsKIAlTTElTVF9JTklUKCZs Yy0+bHJvX2ZyZWUpOwogCVNMSVNUX0lOSVQoJmxjLT5scm9fYWN0aXZlKTsKIApAQCAtNjQ2LDYg KzY0OCwxNiBAQAogCiAJCWlmICh0Y3BfZGF0YV9sZW4gPT0gMCkgewogCQkJbV9mcmVlbShtKTsK KwkJCS8qCisJCQkgKiBGbHVzaCB0aGlzIExSTyBlbnRyeSwgaWYgdGhpcyBBQ0sgc2hvdWxkCisJ CQkgKiBub3QgYmUgZnVydGhlciBkZWxheWVkLgorCQkJICovCisJCQlpZiAobGMtPmxyb19hY2tf YXBwZW5kX2xpbSAmJgorCQkJICAgIGxlLT5hcHBlbmRfY250ID49IGxjLT5scm9fYWNrX2FwcGVu ZF9saW0pIHsKKwkJCQlTTElTVF9SRU1PVkUoJmxjLT5scm9fYWN0aXZlLCBsZSwgbHJvX2VudHJ5 LAorCQkJCSAgICBuZXh0KTsKKwkJCQl0Y3BfbHJvX2ZsdXNoKGxjLCBsZSk7CisJCQl9CiAJCQly ZXR1cm4gKDApOwogCQl9CiAKQEAgLTY2NCw5ICs2NzYsMTIgQEAKIAogCQkvKgogCQkgKiBJZiBh IHBvc3NpYmxlIG5leHQgZnVsbCBsZW5ndGggcGFja2V0IHdvdWxkIGNhdXNlIGFuCi0JCSAqIG92 ZXJmbG93LCBwcm8tYWN0aXZlbHkgZmx1c2ggbm93LgorCQkgKiBvdmVyZmxvdywgcHJvLWFjdGl2 ZWx5IGZsdXNoIG5vdy4gIEFuZCBpZiB3ZSBhcmUgYXNrZWQKKwkJICogdG8gbGltaXQgdGhlIGRh dGEgYWdncmVnYXRlLCBmbHVzaCB0aGlzIExSTyBlbnRyeSBub3cuCiAJCSAqLwotCQlpZiAobGUt PnBfbGVuID4gKDY1NTM1IC0gbGMtPmlmcC0+aWZfbXR1KSkgeworCQlpZiAobGUtPnBfbGVuID4g KDY1NTM1IC0gbGMtPmlmcC0+aWZfbXR1KSB8fAorCQkgICAgKGxjLT5scm9fZGF0YV9hcHBlbmRf bGltICYmCisJCSAgICAgbGUtPmFwcGVuZF9jbnQgPj0gbGMtPmxyb19kYXRhX2FwcGVuZF9saW0p KSB7CiAJCQlTTElTVF9SRU1PVkUoJmxjLT5scm9fYWN0aXZlLCBsZSwgbHJvX2VudHJ5LCBuZXh0 KTsKIAkJCXRjcF9scm9fZmx1c2gobGMsIGxlKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9zeXMv ZGV2L2h5cGVydi9uZXR2c2MvaHZfbmV0dnNjX2Rydl9mcmVlYnNkLmMgYi9zeXMvZGV2L2h5cGVy di9uZXR2c2MvaHZfbmV0dnNjX2Rydl9mcmVlYnNkLmMKLS0tIGEvc3lzL2Rldi9oeXBlcnYvbmV0 dnNjL2h2X25ldHZzY19kcnZfZnJlZWJzZC5jCisrKyBiL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9o dl9uZXR2c2NfZHJ2X2ZyZWVic2QuYwpAQCAtMTc2LDE0ICsxNzYsOCBAQAogI2RlZmluZSBITl9D U1VNX0FTU0lTVF9XSU44CShDU1VNX1RDUCkKICNkZWZpbmUgSE5fQ1NVTV9BU1NJU1QJCShDU1VN X0lQIHwgQ1NVTV9VRFAgfCBDU1VNX1RDUCkKIAotLyogWFhYIG1vdmUgdG8gbmV0aW5ldC90Y3Bf bHJvLmggKi8KLSNkZWZpbmUgSE5fTFJPX0hJV0FUX01BWAkJCQk2NTUzNQotI2RlZmluZSBITl9M Uk9fSElXQVRfREVGCQkJCUhOX0xST19ISVdBVF9NQVgKLS8qIFlZWSAyKk1UVSBpcyBhIGJpdCBy b3VnaCwgYnV0IHNob3VsZCBiZSBnb29kIGVub3VnaC4gKi8KLSNkZWZpbmUgSE5fTFJPX0hJV0FU X01UVUxJTShpZnApCQkJKDIgKiAoaWZwKS0+aWZfbXR1KQotI2RlZmluZSBITl9MUk9fSElXQVRf SVNWQUxJRChzYywgaGl3YXQpCQkJXAotICAgICgoaGl3YXQpID49IEhOX0xST19ISVdBVF9NVFVM SU0oKHNjKS0+aG5faWZwKSB8fAlcCi0gICAgIChoaXdhdCkgPD0gSE5fTFJPX0hJV0FUX01BWCkK KyNkZWZpbmUgSE5fTFJPX0FDS19BUFBFTkRfTElNCTEKKyNkZWZpbmUgSE5fTFJPX0RBVEFfQVBQ RU5EX0xJTQkyNQogCiAvKgogICogQmUgYXdhcmUgdGhhdCB0aGlzIHNsZWVwYWJsZSBtdXRleCB3 aWxsIGV4aGliaXQgV0lUTkVTUyBlcnJvcnMgd2hlbgpAQCAtMjUzLDI3ICsyNDcsMTYgQEAKIHN0 YXRpYyB2b2lkIGhuX3N0YXJ0X3R4ZW9mKHN0cnVjdCBpZm5ldCAqaWZwKTsKIHN0YXRpYyBpbnQg aG5faWZtZWRpYV91cGQoc3RydWN0IGlmbmV0ICppZnApOwogc3RhdGljIHZvaWQgaG5faWZtZWRp YV9zdHMoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBpZm1lZGlhcmVxICppZm1yKTsKLSNpZmRl ZiBITl9MUk9fSElXQVQKLXN0YXRpYyBpbnQgaG5fbHJvX2hpd2F0X3N5c2N0bChTWVNDVExfSEFO RExFUl9BUkdTKTsKLSNlbmRpZgogc3RhdGljIGludCBobl90cnVzdF9oY3N1bV9zeXNjdGwoU1lT Q1RMX0hBTkRMRVJfQVJHUyk7CiBzdGF0aWMgaW50IGhuX3R4X2NoaW1uZXlfc2l6ZV9zeXNjdGwo U1lTQ1RMX0hBTkRMRVJfQVJHUyk7CitzdGF0aWMgaW50IGhuX2xyb19hcHBlbmRfbGltX3N5c2N0 bChTWVNDVExfSEFORExFUl9BUkdTKTsKIHN0YXRpYyBpbnQgaG5fY2hlY2tfaXBsZW4oY29uc3Qg c3RydWN0IG1idWYgKiwgaW50KTsKIHN0YXRpYyBpbnQgaG5fY3JlYXRlX3R4X3Jpbmcoc3RydWN0 IGhuX3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZCBobl9kZXN0cm95X3R4X3Jpbmcoc3RydWN0IGhu X3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZCBobl9zdGFydF90YXNrZnVuYyh2b2lkICp4c2MsIGlu dCBwZW5kaW5nKTsKIHN0YXRpYyB2b2lkIGhuX3R4ZW9mX3Rhc2tmdW5jKHZvaWQgKnhzYywgaW50 IHBlbmRpbmcpOwogc3RhdGljIGludCBobl9lbmNhcChzdHJ1Y3QgaG5fc29mdGMgKiwgc3RydWN0 IGhuX3R4ZGVzYyAqLCBzdHJ1Y3QgbWJ1ZiAqKik7CiAKLXN0YXRpYyBfX2lubGluZSB2b2lkCi1o bl9zZXRfbHJvX2hpd2F0KHN0cnVjdCBobl9zb2Z0YyAqc2MsIGludCBoaXdhdCkKLXsKLQlzYy0+ aG5fbHJvX2hpd2F0ID0gaGl3YXQ7Ci0jaWZkZWYgSE5fTFJPX0hJV0FUCi0Jc2MtPmhuX2xyby5s cm9faGl3YXQgPSBzYy0+aG5fbHJvX2hpd2F0OwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbnQKIGhu X2lmbWVkaWFfdXBkKHN0cnVjdCBpZm5ldCAqaWZwIF9fdW51c2VkKQogewpAQCAtMzU4LDcgKzM0 MSw2IEBACiAJYnplcm8oc2MsIHNpemVvZihobl9zb2Z0Y190KSk7CiAJc2MtPmhuX3VuaXQgPSB1 bml0OwogCXNjLT5obl9kZXYgPSBkZXY7Ci0Jc2MtPmhuX2xyb19oaXdhdCA9IEhOX0xST19ISVdB VF9ERUY7CiAJc2MtPmhuX2RpcmVjdF90eF9zaXplID0gaG5fZGlyZWN0X3R4X3NpemU7CiAJaWYg KGhuX3RydXN0X2hvc3R0Y3ApCiAJCXNjLT5obl90cnVzdF9oY3N1bSB8PSBITl9UUlVTVF9IQ1NV TV9UQ1A7CkBAIC00NDIsOSArNDI0LDggQEAKIAkvKiBEcml2ZXIgcHJpdmF0ZSBMUk8gc2V0dGlu Z3MgKi8KIAlzYy0+aG5fbHJvLmlmcCA9IGlmcDsKICNlbmRpZgotI2lmZGVmIEhOX0xST19ISVdB VAotCXNjLT5obl9scm8ubHJvX2hpd2F0ID0gc2MtPmhuX2xyb19oaXdhdDsKLSNlbmRpZgorCXNj LT5obl9scm8ubHJvX2Fja19hcHBlbmRfbGltID0gSE5fTFJPX0FDS19BUFBFTkRfTElNOworCXNj LT5obl9scm8ubHJvX2RhdGFfYXBwZW5kX2xpbSA9IEhOX0xST19EQVRBX0FQUEVORF9MSU07CiAj ZW5kaWYJLyogSU5FVCB8fCBJTkVUNiAqLwogCiAjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEw MDA0NQpAQCAtNDcxLDYgKzQ1MiwxMyBAQAogCSAgICBobl90eF9jaGltbmV5X3NpemUgPCBzYy0+ aG5fdHhfY2hpbW5leV9tYXgpCiAJCXNjLT5obl90eF9jaGltbmV5X3NpemUgPSBobl90eF9jaGlt bmV5X3NpemU7CiAKKwkvKgorCSAqIEFsd2F5cyBzY2hlZHVsZSB0cmFuc21pc3Npb24gaW5zdGVh ZCBvZiB0cnlpbmcKKwkgKiB0byBkbyBkaXJlY3QgdHJhbnNtaXNzaW9uLiAgVGhpcyBvbmUgZ2l2 ZXMgdGhlCisJICogYmVzdCBwZXJmb3JtYW5jZSBzbyBmYXIuCisJICovCisJc2MtPmhuX3NjaGVk X3R4ID0gMTsKKwogCWN0eCA9IGRldmljZV9nZXRfc3lzY3RsX2N0eChkZXYpOwogCWNoaWxkID0g U1lTQ1RMX0NISUxEUkVOKGRldmljZV9nZXRfc3lzY3RsX3RyZWUoZGV2KSk7CiAKQEAgLTQ4MCwx MSArNDY4LDYgQEAKIAkgICAgQ1RMRkxBR19SVywgJnNjLT5obl9scm8ubHJvX2ZsdXNoZWQsIDAs ICJMUk8gZmx1c2hlZCIpOwogCVNZU0NUTF9BRERfVUxPTkcoY3R4LCBjaGlsZCwgT0lEX0FVVE8s ICJscm9fdHJpZWQiLAogCSAgICBDVExGTEFHX1JXLCAmc2MtPmhuX2xyb190cmllZCwgIiMgb2Yg TFJPIHRyaWVzIik7Ci0jaWZkZWYgSE5fTFJPX0hJV0FUCi0JU1lTQ1RMX0FERF9QUk9DKGN0eCwg Y2hpbGQsIE9JRF9BVVRPLCAibHJvX2hpd2F0IiwKLQkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFH X1JXLCBzYywgMCwgaG5fbHJvX2hpd2F0X3N5c2N0bCwKLQkgICAgIkkiLCAiTFJPIGhpZ2ggd2F0 ZXJtYXJrIik7Ci0jZW5kaWYKIAlTWVNDVExfQUREX1BST0MoY3R4LCBjaGlsZCwgT0lEX0FVVE8s ICJ0cnVzdF9ob3N0dGNwIiwKIAkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLCBzYywgSE5f VFJVU1RfSENTVU1fVENQLAogCSAgICBobl90cnVzdF9oY3N1bV9zeXNjdGwsICJJIiwKQEAgLTUz OCw2ICs1MjEsMTQgQEAKIAkgICAgQ1RMRkxBR19SVywgJnNjLT5obl9zY2hlZF90eCwgMCwKIAkg ICAgIkFsd2F5cyBzY2hlZHVsZSB0cmFuc21pc3Npb24gIgogCSAgICAiaW5zdGVhZCBvZiBkb2lu ZyBkaXJlY3QgdHJhbnNtaXNzaW9uIik7CisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgY2hpbGQsIE9J RF9BVVRPLCAibHJvX2Fja19hcHBlbmRfbGltIiwKKwkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFH X1JXLCAmc2MtPmhuX2xyby5scm9fYWNrX2FwcGVuZF9saW0sCisJICAgIDAsIGhuX2xyb19hcHBl bmRfbGltX3N5c2N0bCwKKwkgICAgIkkiLCAiTFJPIEFDSyBhcHBlbmRpbmcgbGltaXRhdGlvbiIp OworCVNZU0NUTF9BRERfUFJPQyhjdHgsIGNoaWxkLCBPSURfQVVUTywgImxyb19kYXRhX2FwcGVu ZF9saW0iLAorCSAgICBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcsICZzYy0+aG5fbHJvLmxyb19k YXRhX2FwcGVuZF9saW0sCisJICAgIDAsIGhuX2xyb19hcHBlbmRfbGltX3N5c2N0bCwKKwkgICAg IkkiLCAiTFJPIGRhdGEgc2VnbWVudHMgYXBwZW5kaW5nIGxpbWl0YXRpb24iKTsKIAogCWlmICh1 bml0ID09IDApIHsKIAkJc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqZGNfY3R4OwpAQCAtMTQxMCwx MyArMTQwMSw2IEBACiAKIAkJLyogT2J0YWluIGFuZCByZWNvcmQgcmVxdWVzdGVkIE1UVSAqLwog CQlpZnAtPmlmX210dSA9IGlmci0+aWZyX210dTsKLQkJLyoKLQkJICogTWFrZSBzdXJlIHRoYXQg TFJPIGhpZ2ggd2F0ZXJtYXJrIGlzIHN0aWxsIHZhbGlkLAotCQkgKiBhZnRlciBNVFUgY2hhbmdl ICh0aGUgMipNVFUgbGltaXQpLgotCQkgKi8KLQkJaWYgKCFITl9MUk9fSElXQVRfSVNWQUxJRChz Yywgc2MtPmhuX2xyb19oaXdhdCkpCi0JCQlobl9zZXRfbHJvX2hpd2F0KHNjLCBITl9MUk9fSElX QVRfTVRVTElNKGlmcCkpOwotCiAJCWRvIHsKIAkJCU5WX0xPQ0soc2MpOwogCQkJaWYgKCFzYy0+ dGVtcF91bnVzYWJsZSkgewpAQCAtMTcyMiwyNyArMTcwNiw2IEBACiB9CiAjZW5kaWYKIAotI2lm ZGVmIEhOX0xST19ISVdBVAotc3RhdGljIGludAotaG5fbHJvX2hpd2F0X3N5c2N0bChTWVNDVExf SEFORExFUl9BUkdTKQotewotCXN0cnVjdCBobl9zb2Z0YyAqc2MgPSBhcmcxOwotCWludCBoaXdh dCwgZXJyb3I7Ci0KLQloaXdhdCA9IHNjLT5obl9scm9faGl3YXQ7Ci0JZXJyb3IgPSBzeXNjdGxf aGFuZGxlX2ludChvaWRwLCAmaGl3YXQsIDAsIHJlcSk7Ci0JaWYgKGVycm9yIHx8IHJlcS0+bmV3 cHRyID09IE5VTEwpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmICghSE5fTFJPX0hJV0FUX0lTVkFM SUQoc2MsIGhpd2F0KSkKLQkJcmV0dXJuIEVJTlZBTDsKLQotCWlmIChzYy0+aG5fbHJvX2hpd2F0 ICE9IGhpd2F0KQotCQlobl9zZXRfbHJvX2hpd2F0KHNjLCBoaXdhdCk7Ci0JcmV0dXJuIDA7Ci19 Ci0jZW5kaWYJLyogSE5fTFJPX0hJV0FUICovCi0KIHN0YXRpYyBpbnQKIGhuX3RydXN0X2hjc3Vt X3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQogewpAQCAtMTc4Nyw2ICsxNzUwLDI0IEBACiB9 CiAKIHN0YXRpYyBpbnQKK2huX2xyb19hcHBlbmRfbGltX3N5c2N0bChTWVNDVExfSEFORExFUl9B UkdTKQoreworCXVuc2lnbmVkIHNob3J0ICpscm9fbGltID0gYXJnMTsKKwlpbnQgbGltLCBlcnJv cjsKKworCWxpbSA9ICpscm9fbGltOworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwg JmxpbSwgMCwgcmVxKTsKKwlpZiAoZXJyb3IgfHwgcmVxLT5uZXdwdHIgPT0gTlVMTCkKKwkJcmV0 dXJuIGVycm9yOworCisJaWYgKGxpbSA8IDAgfHwgbGltID4gNjU1MzUpCisJCXJldHVybiBFSU5W QUw7CisKKwkqbHJvX2xpbSA9IGxpbTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAogaG5f Y2hlY2tfaXBsZW4oY29uc3Qgc3RydWN0IG1idWYgKm0sIGludCBob2ZmKQogewogCWNvbnN0IHN0 cnVjdCBpcCAqaXA7CmRpZmYgLS1naXQgYS9zeXMvZGV2L2h5cGVydi9uZXR2c2MvaHZfbmV0X3Zz Yy5oIGIvc3lzL2Rldi9oeXBlcnYvbmV0dnNjL2h2X25ldF92c2MuaAotLS0gYS9zeXMvZGV2L2h5 cGVydi9uZXR2c2MvaHZfbmV0X3ZzYy5oCisrKyBiL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9u ZXRfdnNjLmgKQEAgLTEwMzAsNyArMTAzMCw2IEBACiAJc3RydWN0IHRhc2sJaG5fdHhlb2ZfdGFz azsKIAogCXN0cnVjdCBscm9fY3RybAlobl9scm87Ci0JaW50CQlobl9scm9faGl3YXQ7CiAKIAkv KiBUcnVzdCBjc3VtIHZlcmlmaWNhdGlvbiBvbiBob3N0IHNpZGUgKi8KIAlpbnQJCWhuX3RydXN0 X2hjc3VtOwkvKiBITl9UUlVTVF9IQ1NVTV8gKi8KCg== --b1_77fc80858801b21443ab2a903cf15bcc--