From owner-freebsd-net@freebsd.org Fri Jan 8 02:12:18 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 62F64A679DA for ; Fri, 8 Jan 2016 02:12:18 +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 4641B1E3E for ; Fri, 8 Jan 2016 02:12:18 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id 40F52331EDD8; Fri, 8 Jan 2016 02:12:18 +0000 (UTC) Date: Fri, 8 Jan 2016 02:12:18 +0000 To: freebsd-net@freebsd.org From: "sepherosa_gmail.com (Sepherosa Ziehau)" Reply-to: D4824+325+0b1ea329f3d380e8@reviews.freebsd.org Subject: [Differential] [Request, 276 lines] D4824: hyperv/hn: Implement LRO 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: D4824: hyperv/hn: Implement LRO X-Herald-Rules: none 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 Thread-Index: MTc5M2I0ZWQ4MDNkYjdlMTJiMjY5YThlMzIw MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_fb8f18771ce435cb4febbc9532fb01a6" 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: Fri, 08 Jan 2016 02:12:18 -0000 --b1_fb8f18771ce435cb4febbc9532fb01a6 Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit sepherosa_gmail.com created this revision. sepherosa_gmail.com added reviewers: adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com, kmacy. sepherosa_gmail.com added a subscriber: freebsd-net-list. REVISION SUMMARY - Implement the LRO using tcp_lro APIs, and LRO is enabled by default - Add several stats sysctl nodes - Check IP/TCP length before sending the packet to tcp_lro_rx(), if host does not provide RX csum information (*); and add an option through sysctl to always trust host TCP segment csum checks (default is off). - Add sysctl to control the LRO entry depth. This depends on later tcp_lro patch, thus it is disabled by default. It is used to avoid holding too much TCP segments in driver. Limiting the LRO entry depth helps a lot in a one/two streams RX test. This one 3x the RX performance on my local test (3Gbps -> 10Gbps), and ~2x the RX performance over a directly connected 40Ge network (5Gbps -> 9Gbps). Reviewed by: Hongjiang Zhang , Dexuan Cui , Jun Su Tested by: me (local), Hongjiang Zhang (directly connected 40Ge) Sponsored by: Microsoft OSTC REVISION DETAIL https://reviews.freebsd.org/D4824 AFFECTED FILES sys/dev/hyperv/netvsc/hv_net_vsc.c sys/dev/hyperv/netvsc/hv_net_vsc.h sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c sys/dev/hyperv/netvsc/hv_rndis.h sys/dev/hyperv/netvsc/hv_rndis_filter.c sys/dev/hyperv/netvsc/hv_rndis_filter.h EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: sepherosa_gmail.com, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com, kmacy Cc: freebsd-net-list --b1_fb8f18771ce435cb4febbc9532fb01a6 Content-Type: text/x-patch; charset=utf-8; name="D4824.12025.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D4824.12025.patch" ZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9ybmRpc19maWx0ZXIuaCBiL3N5 cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9ybmRpc19maWx0ZXIuaAotLS0gYS9zeXMvZGV2L2h5cGVy di9uZXR2c2MvaHZfcm5kaXNfZmlsdGVyLmgKKysrIGIvc3lzL2Rldi9oeXBlcnYvbmV0dnNjL2h2 X3JuZGlzX2ZpbHRlci5oCkBAIC05OCw2ICs5OCw3IEBACiAKIGludCBodl9yZl9vbl9yZWNlaXZl KG5ldHZzY19kZXYgKm5ldF9kZXYsCiAgICAgc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLCBuZXR2 c2NfcGFja2V0ICpwa3QpOwordm9pZCBodl9yZl9yZWNlaXZlX3JvbGx1cChuZXR2c2NfZGV2ICpu ZXRfZGV2KTsKIGludCBodl9yZl9vbl9kZXZpY2VfYWRkKHN0cnVjdCBodl9kZXZpY2UgKmRldmlj ZSwgdm9pZCAqYWRkaXRsX2luZm8pOwogaW50IGh2X3JmX29uX2RldmljZV9yZW1vdmUoc3RydWN0 IGh2X2RldmljZSAqZGV2aWNlLCBib29sZWFuX3QgZGVzdHJveV9jaGFubmVsKTsKIGludCBodl9y Zl9vbl9vcGVuKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSk7CmRpZmYgLS1naXQgYS9zeXMvZGV2 L2h5cGVydi9uZXR2c2MvaHZfcm5kaXNfZmlsdGVyLmMgYi9zeXMvZGV2L2h5cGVydi9uZXR2c2Mv aHZfcm5kaXNfZmlsdGVyLmMKLS0tIGEvc3lzL2Rldi9oeXBlcnYvbmV0dnNjL2h2X3JuZGlzX2Zp bHRlci5jCisrKyBiL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9ybmRpc19maWx0ZXIuYwpAQCAt OTYzLDMgKzk2MywxNCBAQAogCXJlcXVlc3QtPmhhbHRfY29tcGxldGVfZmxhZyA9IDE7CiB9CiAK Ky8qCisgKiBSTkRJUyBmaWx0ZXIgd2hlbiAiYWxsIiByZWNlcHRpb24gaXMgZG9uZQorICovCit2 b2lkCitodl9yZl9yZWNlaXZlX3JvbGx1cChuZXR2c2NfZGV2ICpuZXRfZGV2KQoreworCXJuZGlz X2RldmljZSAqcm5kaXNfZGV2OworCisJcm5kaXNfZGV2ID0gKHJuZGlzX2RldmljZSAqKW5ldF9k ZXYtPmV4dGVuc2lvbjsKKwluZXR2c2NfcmVjdl9yb2xsdXAocm5kaXNfZGV2LT5uZXRfZGV2LT5k ZXYpOworfQpkaWZmIC0tZ2l0IGEvc3lzL2Rldi9oeXBlcnYvbmV0dnNjL2h2X3JuZGlzLmggYi9z eXMvZGV2L2h5cGVydi9uZXR2c2MvaHZfcm5kaXMuaAotLS0gYS9zeXMvZGV2L2h5cGVydi9uZXR2 c2MvaHZfcm5kaXMuaAorKysgYi9zeXMvZGV2L2h5cGVydi9uZXR2c2MvaHZfcm5kaXMuaApAQCAt MTA0OSw2ICsxMDQ5LDcgQEAKIGludCBuZXR2c2NfcmVjdihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZp Y2VfY3R4LCAKICAgICBuZXR2c2NfcGFja2V0ICpwYWNrZXQsIAogICAgIHJuZGlzX3RjcF9pcF9j c3VtX2luZm8gKmNzdW1faW5mbyk7Cit2b2lkIG5ldHZzY19yZWN2X3JvbGx1cChzdHJ1Y3QgaHZf ZGV2aWNlICpkZXZpY2VfY3R4KTsKIAogdm9pZCogaHZfc2V0X3JwcGlfZGF0YShybmRpc19tc2cg KnJuZGlzX21lc2csCiAgICAgdWludDMyX3QgcnBwaV9zaXplLApkaWZmIC0tZ2l0IGEvc3lzL2Rl di9oeXBlcnYvbmV0dnNjL2h2X25ldHZzY19kcnZfZnJlZWJzZC5jIGIvc3lzL2Rldi9oeXBlcnYv bmV0dnNjL2h2X25ldHZzY19kcnZfZnJlZWJzZC5jCi0tLSBhL3N5cy9kZXYvaHlwZXJ2L25ldHZz Yy9odl9uZXR2c2NfZHJ2X2ZyZWVic2QuYworKysgYi9zeXMvZGV2L2h5cGVydi9uZXR2c2MvaHZf bmV0dnNjX2Rydl9mcmVlYnNkLmMKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlIDxzeXMvcXVl dWUuaD4KICNpbmNsdWRlIDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1 ZGUgPHN5cy9zeXNjdGwuaD4KIAogI2luY2x1ZGUgPG5ldC9pZi5oPgogI2luY2x1ZGUgPG5ldC9p Zl9hcnAuaD4KQEAgLTEzOCw2ICsxMzksMTUgQEAKICAgICBDU1VNX0lQX0lTQ1NJfENTVU1fSVA2 X1VEUHxDU1VNX0lQNl9UQ1B8Q1NVTV9JUDZfU0NUUHwJCVwKICAgICBDU1VNX0lQNl9UU098Q1NV TV9JUDZfSVNDU0kpCiAKKy8qIFhYWCBtb3ZlIHRvIG5ldGluZXQvdGNwX2xyby5oICovCisjZGVm aW5lIEhOX0xST19ISVdBVF9NQVgJCQkJNjU1MzUKKyNkZWZpbmUgSE5fTFJPX0hJV0FUX0RFRgkJ CQlITl9MUk9fSElXQVRfTUFYCisvKiBZWVkgMipNVFUgaXMgYSBiaXQgcm91Z2gsIGJ1dCBzaG91 bGQgYmUgZ29vZCBlbm91Z2guICovCisjZGVmaW5lIEhOX0xST19ISVdBVF9NVFVMSU0oaWZwKQkJ CSgyICogKGlmcCktPmlmX210dSkKKyNkZWZpbmUgSE5fTFJPX0hJV0FUX0lTVkFMSUQoc2MsIGhp d2F0KQkJCVwKKyAgICAoKGhpd2F0KSA+PSBITl9MUk9fSElXQVRfTVRVTElNKChzYyktPmhuX2lm cCkgfHwJXAorICAgICAoaGl3YXQpIDw9IEhOX0xST19ISVdBVF9NQVgpCisKIC8qCiAgKiBEYXRh IHR5cGVzCiAgKi8KQEAgLTE3MSw2ICsxODEsOSBAQAogLyogVGhlIG9uZSBhbmQgb25seSBvbmUg Ki8KIHN0YXRpYyBzdHJ1Y3QgaHZfbmV0dnNjX2RyaXZlcl9jb250ZXh0IGdfbmV0dnNjX2RydjsK IAorLyogVHJ1c3QgdGNwIHNlZ2VtZW50cyB2ZXJpZmljYXRpb24gb24gaG9zdCBzaWRlLiAqLwor c3RhdGljIGludCBobl90cnVzdF9ob3N0dGNwID0gMDsKK1RVTkFCTEVfSU5UKCJkZXYuaG4udHJ1 c3RfaG9zdHRjcCIsICZobl90cnVzdF9ob3N0dGNwKTsKIAogLyoKICAqIEZvcndhcmQgZGVjbGFy YXRpb25zCkBAIC0xODEsNiArMTk0LDE5IEBACiBzdGF0aWMgaW50ICBobl9pb2N0bChzdHJ1Y3Qg aWZuZXQgKmlmcCwgdV9sb25nIGNtZCwgY2FkZHJfdCBkYXRhKTsKIHN0YXRpYyBpbnQgIGhuX3N0 YXJ0X2xvY2tlZChzdHJ1Y3QgaWZuZXQgKmlmcCk7CiBzdGF0aWMgdm9pZCBobl9zdGFydChzdHJ1 Y3QgaWZuZXQgKmlmcCk7CisjaWZkZWYgSE5fTFJPX0hJV0FUCitzdGF0aWMgaW50IGhuX2xyb19o aXdhdF9zeXNjdGwoU1lTQ1RMX0hBTkRMRVJfQVJHUyk7CisjZW5kaWYKK3N0YXRpYyBpbnQgaG5f Y2hlY2tfaXBsZW4oY29uc3Qgc3RydWN0IG1idWYgKiwgaW50KTsKKworc3RhdGljIF9faW5saW5l IHZvaWQKK2huX3NldF9scm9faGl3YXQoc3RydWN0IGhuX3NvZnRjICpzYywgaW50IGhpd2F0KQor eworCXNjLT5obl9scm9faGl3YXQgPSBoaXdhdDsKKyNpZmRlZiBITl9MUk9fSElXQVQKKwlzYy0+ aG5fbHJvLmxyb19oaXdhdCA9IHNjLT5obl9scm9faGl3YXQ7CisjZW5kaWYKK30KIAogLyoKICAq IE5ldFZzYyBnZXQgbWVzc2FnZSB0cmFuc3BvcnQgcHJvdG9jb2wgdHlwZSAKQEAgLTMxMCw2ICsz MzYsOCBAQAogCWhuX3NvZnRjX3QgKnNjOwogCWludCB1bml0ID0gZGV2aWNlX2dldF91bml0KGRl dik7CiAJc3RydWN0IGlmbmV0ICppZnA7CisJc3RydWN0IHN5c2N0bF9vaWRfbGlzdCAqY2hpbGQ7 CisJc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqY3R4OwogCWludCByZXQ7CiAKIAluZXR2c2NfaW5p dCgpOwpAQCAtMzIyLDYgKzM1MCw4IEBACiAJYnplcm8oc2MsIHNpemVvZihobl9zb2Z0Y190KSk7 CiAJc2MtPmhuX3VuaXQgPSB1bml0OwogCXNjLT5obl9kZXYgPSBkZXY7CisJc2MtPmhuX2xyb19o aXdhdCA9IEhOX0xST19ISVdBVF9ERUY7CisJc2MtPmhuX3RydXN0X2hvc3R0Y3AgPSBobl90cnVz dF9ob3N0dGNwOwogCiAJTlZfTE9DS19JTklUKHNjLCAiTmV0VlNDTG9jayIpOwogCkBAIC0zNDks OSArMzc5LDExIEBACiAJICovCiAJaWZwLT5pZl9oZHJsZW4gPSBzaXplb2Yoc3RydWN0IGV0aGVy X3ZsYW5faGVhZGVyKTsKIAlpZnAtPmlmX2NhcGFiaWxpdGllcyB8PQotCSAgICBJRkNBUF9WTEFO X0hXVEFHR0lORyB8IElGQ0FQX1ZMQU5fTVRVIHwgSUZDQVBfSFdDU1VNIHwgSUZDQVBfVFNPOwor CSAgICBJRkNBUF9WTEFOX0hXVEFHR0lORyB8IElGQ0FQX1ZMQU5fTVRVIHwgSUZDQVBfSFdDU1VN IHwgSUZDQVBfVFNPIHwKKwkgICAgSUZDQVBfTFJPOwogCWlmcC0+aWZfY2FwZW5hYmxlIHw9Ci0J ICAgIElGQ0FQX1ZMQU5fSFdUQUdHSU5HIHwgSUZDQVBfVkxBTl9NVFUgfCBJRkNBUF9IV0NTVU0g fCBJRkNBUF9UU087CisJICAgIElGQ0FQX1ZMQU5fSFdUQUdHSU5HIHwgSUZDQVBfVkxBTl9NVFUg fCBJRkNBUF9IV0NTVU0gfCBJRkNBUF9UU08gfAorCSAgICBJRkNBUF9MUk87CiAJLyoKIAkgKiBP bmx5IGVuYWJsZSBVRFAgY2hlY2tzdW0gb2ZmbG9hZGluZyB3aGVuIGl0IGlzIG9uIDIwMTJSMiBv cgogCSAqIGxhdGVyLiBVRFAgY2hlY2tzdW0gb2ZmbG9hZGluZyBkb2Vzbid0IHdvcmsgb24gZWFy bGllcgpAQCAtMzcyLDggKzQwNCw0MSBAQAogCQlzYy0+aG5fY2FycmllciA9IDE7CiAJfQogCisJ dGNwX2xyb19pbml0KCZzYy0+aG5fbHJvKTsKKwkvKiBEcml2ZXIgcHJpdmF0ZSBMUk8gc2V0dGlu Z3MgKi8KKwlzYy0+aG5fbHJvLmlmcCA9IGlmcDsKKyNpZmRlZiBITl9MUk9fSElXQVQKKwlzYy0+ aG5fbHJvLmxyb19oaXdhdCA9IHNjLT5obl9scm9faGl3YXQ7CisjZW5kaWYKKwogCWV0aGVyX2lm YXR0YWNoKGlmcCwgZGV2aWNlX2luZm8ubWFjX2FkZHIpOwogCisJY3R4ID0gZGV2aWNlX2dldF9z eXNjdGxfY3R4KGRldik7CisJY2hpbGQgPSBTWVNDVExfQ0hJTERSRU4oZGV2aWNlX2dldF9zeXNj dGxfdHJlZShkZXYpKTsKKworCVNZU0NUTF9BRERfSU5UKGN0eCwgY2hpbGQsIE9JRF9BVVRPLCAi bHJvX3F1ZXVlZCIsCisJICAgIENUTEZMQUdfUkQsICZzYy0+aG5fbHJvLmxyb19xdWV1ZWQsIDAs ICJMUk8gcXVldWVkIik7CisJU1lTQ1RMX0FERF9JTlQoY3R4LCBjaGlsZCwgT0lEX0FVVE8sICJs cm9fZmx1c2hlZCIsCisJICAgIENUTEZMQUdfUkQsICZzYy0+aG5fbHJvLmxyb19mbHVzaGVkLCAw LCAiTFJPIGZsdXNoZWQiKTsKKwlTWVNDVExfQUREX1VMT05HKGN0eCwgY2hpbGQsIE9JRF9BVVRP LCAibHJvX3RyaWVkIiwKKwkgICAgQ1RMRkxBR19SVywgJnNjLT5obl9scm9fdHJpZWQsICIjIG9m IExSTyB0cmllcyIpOworI2lmZGVmIEhOX0xST19ISVdBVAorCVNZU0NUTF9BRERfUFJPQyhjdHgs IGNoaWxkLCBPSURfQVVUTywgImxyb19oaXdhdCIsCisJICAgIENUTFRZUEVfSU5UIHwgQ1RMRkxB R19SVywgc2MsIDAsIGhuX2xyb19oaXdhdF9zeXNjdGwsCisJICAgICJJIiwgIkxSTyBoaWdoIHdh dGVybWFyayIpOworI2VuZGlmCisJU1lTQ1RMX0FERF9JTlQoY3R4LCBjaGlsZCwgT0lEX0FVVE8s ICJ0cnVzdF9ob3N0dGNwIiwKKwkgICAgQ1RMRkxBR19SVywgJnNjLT5obl90cnVzdF9ob3N0dGNw LCAwLAorCSAgICAiVHJ1c3QgdGNwIHNlZ2VtZW50IHZlcmlmaWNhdGlvbiBvbiBob3N0IHNpZGUs ICIKKwkgICAgIndoZW4gY3N1bSBpbmZvIGlzIG1pc3NpbmciKTsKKwlTWVNDVExfQUREX1VMT05H KGN0eCwgY2hpbGQsIE9JRF9BVVRPLCAiY3N1bV9pcCIsCisJICAgIENUTEZMQUdfUlcsICZzYy0+ aG5fY3N1bV9pcCwgIlJYQ1NVTSBJUCIpOworCVNZU0NUTF9BRERfVUxPTkcoY3R4LCBjaGlsZCwg T0lEX0FVVE8sICJjc3VtX3RjcCIsCisJICAgIENUTEZMQUdfUlcsICZzYy0+aG5fY3N1bV90Y3As ICJSWENTVU0gVENQIik7CisJU1lTQ1RMX0FERF9VTE9ORyhjdHgsIGNoaWxkLCBPSURfQVVUTywg ImNzdW1fdHJ1c3RlZCIsCisJICAgIENUTEZMQUdfUlcsICZzYy0+aG5fY3N1bV90cnVzdGVkLAor CSAgICAiIyBvZiBUQ1Agc2VnZW1lbnRzIHRoYXQgd2UgdHJ1c3QgaG9zdCdzIGNzdW0gdmVyaWZp Y2F0aW9uIik7CisKIAlyZXR1cm4gKDApOwogfQogCkBAIC0zODMsNiArNDQ4LDcgQEAKIHN0YXRp YyBpbnQKIG5ldHZzY19kZXRhY2goZGV2aWNlX3QgZGV2KQogeworCXN0cnVjdCBobl9zb2Z0YyAq c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAJc3RydWN0IGh2X2RldmljZSAqaHZfZGV2aWNl ID0gdm1idXNfZ2V0X2RldmN0eChkZXYpOyAKIAogCWlmIChib290dmVyYm9zZSkKQEAgLTQwMSw2 ICs0NjcsOCBAQAogCiAJaHZfcmZfb25fZGV2aWNlX3JlbW92ZShodl9kZXZpY2UsIEhWX1JGX05W X0RFU1RST1lfQ0hBTk5FTCk7CiAKKwl0Y3BfbHJvX2ZyZWUoJnNjLT5obl9scm8pOworCiAJcmV0 dXJuICgwKTsKIH0KIApAQCAtODg3LDcgKzk1NSw3IEBACiAJc3RydWN0IG1idWYgKm1fbmV3Owog CXN0cnVjdCBpZm5ldCAqaWZwOwogCWRldmljZV90IGRldiA9IGRldmljZV9jdHgtPmRldmljZTsK LQlpbnQgc2l6ZTsKKwlpbnQgc2l6ZSwgZG9fbHJvID0gMDsKIAogCWlmIChzYyA9PSBOVUxMKSB7 CiAJCXJldHVybiAoMCk7IC8qIFRPRE86IEtZUyBob3cgY2FuIHRoaXMgYmUhICovCkBAIC05Mzgs MTYgKzEwMDYsNTggQEAKIAkJaWYgKGNzdW1faW5mby0+cmVjZWl2ZS5pcF9jc3VtX3N1Y2NlZWRl ZCkgewogCQkJbV9uZXctPm1fcGt0aGRyLmNzdW1fZmxhZ3MgfD0KIAkJCSAgICAoQ1NVTV9JUF9D SEVDS0VEIHwgQ1NVTV9JUF9WQUxJRCk7CisJCQlzYy0+aG5fY3N1bV9pcCsrOwogCQl9CiAKIAkJ LyogVENQIGNzdW0gb2ZmbG9hZCAqLwogCQlpZiAoY3N1bV9pbmZvLT5yZWNlaXZlLnRjcF9jc3Vt X3N1Y2NlZWRlZCkgewogCQkJbV9uZXctPm1fcGt0aGRyLmNzdW1fZmxhZ3MgfD0KIAkJCSAgICAo Q1NVTV9EQVRBX1ZBTElEIHwgQ1NVTV9QU0VVRE9fSERSKTsKIAkJCW1fbmV3LT5tX3BrdGhkci5j c3VtX2RhdGEgPSAweGZmZmY7CisJCQlzYy0+aG5fY3N1bV90Y3ArKzsKKwkJfQorCisJCWlmIChj c3VtX2luZm8tPnJlY2VpdmUuaXBfY3N1bV9zdWNjZWVkZWQgJiYKKwkJICAgIGNzdW1faW5mby0+ cmVjZWl2ZS50Y3BfY3N1bV9zdWNjZWVkZWQpCisJCQlkb19scm8gPSAxOworCX0gZWxzZSB7CisJ CWNvbnN0IHN0cnVjdCBldGhlcl9oZWFkZXIgKmVoOworCQl1aW50MTZfdCBldHlwZTsKKwkJaW50 IGhvZmY7CisKKwkJaG9mZiA9IHNpemVvZigqZWgpOworCQlpZiAobV9uZXctPm1fbGVuIDwgaG9m ZikKKwkJCWdvdG8gc2tpcDsKKwkJZWggPSBtdG9kKG1fbmV3LCBzdHJ1Y3QgZXRoZXJfaGVhZGVy ICopOworCQlldHlwZSA9IG50b2hzKGVoLT5ldGhlcl90eXBlKTsKKwkJaWYgKGV0eXBlID09IEVU SEVSVFlQRV9WTEFOKSB7CisJCQljb25zdCBzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKmV2bDsK KworCQkJaG9mZiA9IHNpemVvZigqZXZsKTsKKwkJCWlmIChtX25ldy0+bV9sZW4gPCBob2ZmKQor CQkJCWdvdG8gc2tpcDsKKwkJCWV2bCA9IG10b2QobV9uZXcsIHN0cnVjdCBldGhlcl92bGFuX2hl YWRlciAqKTsKKwkJCWV0eXBlID0gbnRvaHMoZXZsLT5ldmxfcHJvdG8pOwogCQl9Ci0JfQogCisJ CWlmIChldHlwZSA9PSBFVEhFUlRZUEVfSVApIHsKKwkJCWludCBwcjsKKworCQkJcHIgPSBobl9j aGVja19pcGxlbihtX25ldywgaG9mZik7CisJCQlpZiAocHIgPT0gSVBQUk9UT19UQ1ApIHsKKwkJ CQlpZiAoc2MtPmhuX3RydXN0X2hvc3R0Y3ApIHsKKwkJCQkJc2MtPmhuX2NzdW1fdHJ1c3RlZCsr OworCQkJCQltX25ldy0+bV9wa3RoZHIuY3N1bV9mbGFncyB8PQorCQkJCQkgICAoQ1NVTV9JUF9D SEVDS0VEIHwgQ1NVTV9JUF9WQUxJRCB8CisJCQkJCSAgICBDU1VNX0RBVEFfVkFMSUQgfCBDU1VN X1BTRVVET19IRFIpOworCQkJCQltX25ldy0+bV9wa3RoZHIuY3N1bV9kYXRhID0gMHhmZmZmOwor CQkJCX0KKwkJCQkvKiBSZWx5IG9uIFNXIGNzdW0gdmVyaWZpY2F0aW9uIHRob3VnaC4uLiAqLwor CQkJCWRvX2xybyA9IDE7CisJCQl9CisJCX0KKwl9Citza2lwOgogCWlmICgocGFja2V0LT52bGFu X3RjaSAhPSAwKSAmJgogCSAgICAoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9WTEFOX0hXVEFH R0lORykgIT0gMCkgewogCQltX25ldy0+bV9wa3RoZHIuZXRoZXJfdnRhZyA9IHBhY2tldC0+dmxh bl90Y2k7CkBAIC05NjEsMTIgKzEwNzEsMzcgQEAKIAogCWlmX2luY19jb3VudGVyKGlmcCwgSUZD T1VOVEVSX0lQQUNLRVRTLCAxKTsKIAorCWlmICgoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9M Uk8pICYmIGRvX2xybykgeworCQlzdHJ1Y3QgbHJvX2N0cmwgKmxybyA9ICZzYy0+aG5fbHJvOwor CisJCWlmIChscm8tPmxyb19jbnQpIHsKKwkJCXNjLT5obl9scm9fdHJpZWQrKzsKKwkJCWlmICh0 Y3BfbHJvX3J4KGxybywgbV9uZXcsIDApID09IDApIHsKKwkJCQkvKiBET05FISAqLworCQkJCXJl dHVybiAwOworCQkJfQorCQl9CisJfQorCiAJLyogV2UncmUgbm90IGhvbGRpbmcgdGhlIGxvY2sg aGVyZSwgc28gZG9uJ3QgcmVsZWFzZSBpdCAqLwogCSgqaWZwLT5pZl9pbnB1dCkoaWZwLCBtX25l dyk7CiAKIAlyZXR1cm4gKDApOwogfQogCit2b2lkCituZXR2c2NfcmVjdl9yb2xsdXAoc3RydWN0 IGh2X2RldmljZSAqZGV2aWNlX2N0eCkKK3sKKwlobl9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRf c29mdGMoZGV2aWNlX2N0eC0+ZGV2aWNlKTsKKwlzdHJ1Y3QgbHJvX2N0cmwgKmxybyA9ICZzYy0+ aG5fbHJvOworCXN0cnVjdCBscm9fZW50cnkgKnF1ZXVlZDsKKworCXdoaWxlICgocXVldWVkID0g U0xJU1RfRklSU1QoJmxyby0+bHJvX2FjdGl2ZSkpICE9IE5VTEwpIHsKKwkJU0xJU1RfUkVNT1ZF X0hFQUQoJmxyby0+bHJvX2FjdGl2ZSwgbmV4dCk7CisJCXRjcF9scm9fZmx1c2gobHJvLCBxdWV1 ZWQpOworCX0KK30KKwogLyoKICAqIFJ1bGVzIGZvciB1c2luZyBzYy0+dGVtcF91bnVzYWJsZToK ICAqIDEuICBzYy0+dGVtcF91bnVzYWJsZSBjYW4gb25seSBiZSByZWFkIG9yIHdyaXR0ZW4gd2hp bGUgaG9sZGluZyBOVl9MT0NLKCkKQEAgLTEwMjIsNyArMTE1NywxMyBAQAogCiAJCS8qIE9idGFp biBhbmQgcmVjb3JkIHJlcXVlc3RlZCBNVFUgKi8KIAkJaWZwLT5pZl9tdHUgPSBpZnItPmlmcl9t dHU7Ci0gCQkKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoYXQgTFJPIGhpZ2ggd2F0ZXJtYXJrIGlz IHN0aWxsIHZhbGlkLAorCQkgKiBhZnRlciBNVFUgY2hhbmdlICh0aGUgMipNVFUgbGltaXQpLgor CQkgKi8KKwkJaWYgKCFITl9MUk9fSElXQVRfSVNWQUxJRChzYywgc2MtPmhuX2xyb19oaXdhdCkp CisJCQlobl9zZXRfbHJvX2hpd2F0KHNjLCBITl9MUk9fSElXQVRfTVRVTElNKGlmcCkpOworCiAJ CWRvIHsKIAkJCU5WX0xPQ0soc2MpOwogCQkJaWYgKCFzYy0+dGVtcF91bnVzYWJsZSkgewpAQCAt MTE0Nyw2ICsxMjg4LDggQEAKIAkJCQlpZnAtPmlmX2NhcGVuYWJsZSB8PSBJRkNBUF9SWENTVU07 CiAJCQl9CiAJCX0KKwkJaWYgKG1hc2sgJiBJRkNBUF9MUk8pCisJCQlpZnAtPmlmX2NhcGVuYWJs ZSBePSBJRkNBUF9MUk87CiAKIAkJaWYgKG1hc2sgJiBJRkNBUF9UU080KSB7CiAJCQlpZnAtPmlm X2NhcGVuYWJsZSBePSBJRkNBUF9UU080OwpAQCAtMTI5Miw2ICsxNDM1LDEwMiBAQAogfQogI2Vu ZGlmCiAKKyNpZmRlZiBITl9MUk9fSElXQVQKK3N0YXRpYyBpbnQKK2huX2xyb19oaXdhdF9zeXNj dGwoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgaG5fc29mdGMgKnNjID0gYXJnMTsK KwlpbnQgaGl3YXQsIGVycm9yOworCisJaGl3YXQgPSBzYy0+aG5fbHJvX2hpd2F0OworCWVycm9y ID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJmhpd2F0LCAwLCByZXEpOworCWlmIChlcnJvciB8 fCByZXEtPm5ld3B0ciA9PSBOVUxMKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoIUhOX0xST19I SVdBVF9JU1ZBTElEKHNjLCBoaXdhdCkpCisJCXJldHVybiBFSU5WQUw7CisKKwlpZiAoc2MtPmhu X2xyb19oaXdhdCAhPSBoaXdhdCkKKwkJaG5fc2V0X2xyb19oaXdhdChzYywgaGl3YXQpOworCXJl dHVybiAwOworfQorI2VuZGlmCS8qIEhOX0xST19ISVdBVCAqLworCitzdGF0aWMgaW50Citobl9j aGVja19pcGxlbihjb25zdCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvZmYpCit7CisJY29uc3Qgc3Ry dWN0IGlwICppcDsKKwlpbnQgbGVuLCBpcGhsZW4sIGlwbGVuOworCWNvbnN0IHN0cnVjdCB0Y3Bo ZHIgKnRoOworCWludCB0aG9mZjsJCQkJLyogVENQIGRhdGEgb2Zmc2V0ICovCisKKwlsZW4gPSBo b2ZmICsgc2l6ZW9mKHN0cnVjdCBpcCk7CisKKwkvKiBUaGUgcGFja2V0IG11c3QgYmUgYXQgbGVh c3QgdGhlIHNpemUgb2YgYW4gSVAgaGVhZGVyLiAqLworCWlmIChtLT5tX3BrdGhkci5sZW4gPCBs ZW4pCisJCXJldHVybiBJUFBST1RPX0RPTkU7CisKKwkvKiBUaGUgZml4ZWQgSVAgaGVhZGVyIG11 c3QgcmVzaWRlIGNvbXBsZXRlbHkgaW4gdGhlIGZpcnN0IG1idWYuICovCisJaWYgKG0tPm1fbGVu IDwgbGVuKQorCQlyZXR1cm4gSVBQUk9UT19ET05FOworCisJaXAgPSBtdG9kbyhtLCBob2ZmKTsK KworCS8qIEJvdW5kIGNoZWNrIHRoZSBwYWNrZXQncyBzdGF0ZWQgSVAgaGVhZGVyIGxlbmd0aC4g Ki8KKwlpcGhsZW4gPSBpcC0+aXBfaGwgPDwgMjsKKwlpZiAoaXBobGVuIDwgc2l6ZW9mKHN0cnVj dCBpcCkpCQkvKiBtaW5pbXVtIGhlYWRlciBsZW5ndGggKi8KKwkJcmV0dXJuIElQUFJPVE9fRE9O RTsKKworCS8qIFRoZSBmdWxsIElQIGhlYWRlciBtdXN0IHJlc2lkZSBjb21wbGV0ZWx5IGluIHRo ZSBvbmUgbWJ1Zi4gKi8KKwlpZiAobS0+bV9sZW4gPCBob2ZmICsgaXBobGVuKQorCQlyZXR1cm4g SVBQUk9UT19ET05FOworCisJaXBsZW4gPSBudG9ocyhpcC0+aXBfbGVuKTsKKworCS8qCisJICog Q2hlY2sgdGhhdCB0aGUgYW1vdW50IG9mIGRhdGEgaW4gdGhlIGJ1ZmZlcnMgaXMgYXMKKwkgKiBh dCBsZWFzdCBtdWNoIGFzIHRoZSBJUCBoZWFkZXIgd291bGQgaGF2ZSB1cyBleHBlY3QuCisJICov CisJaWYgKG0tPm1fcGt0aGRyLmxlbiA8IGhvZmYgKyBpcGxlbikKKwkJcmV0dXJuIElQUFJPVE9f RE9ORTsKKworCS8qCisJICogSWdub3JlIElQIGZyYWdtZW50cy4KKwkgKi8KKwlpZiAobnRvaHMo aXAtPmlwX29mZikgJiAoSVBfT0ZGTUFTSyB8IElQX01GKSkKKwkJcmV0dXJuIElQUFJPVE9fRE9O RTsKKworCS8qCisJICogVGhlIFRDUC9JUCBvciBVRFAvSVAgaGVhZGVyIG11c3QgYmUgZW50aXJl bHkgY29udGFpbmVkIHdpdGhpbgorCSAqIHRoZSBmaXJzdCBmcmFnbWVudCBvZiBhIHBhY2tldC4K KwkgKi8KKwlzd2l0Y2ggKGlwLT5pcF9wKSB7CisJY2FzZSBJUFBST1RPX1RDUDoKKwkJaWYgKGlw bGVuIDwgaXBobGVuICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKQorCQkJcmV0dXJuIElQUFJPVE9f RE9ORTsKKwkJaWYgKG0tPm1fbGVuIDwgaG9mZiArIGlwaGxlbiArIHNpemVvZihzdHJ1Y3QgdGNw aGRyKSkKKwkJCXJldHVybiBJUFBST1RPX0RPTkU7CisJCXRoID0gKGNvbnN0IHN0cnVjdCB0Y3Bo ZHIgKikoKGNvbnN0IHVpbnQ4X3QgKilpcCArIGlwaGxlbik7CisJCXRob2ZmID0gdGgtPnRoX29m ZiA8PCAyOworCQlpZiAodGhvZmYgPCBzaXplb2Yoc3RydWN0IHRjcGhkcikgfHwgdGhvZmYgKyBp cGhsZW4gPiBpcGxlbikKKwkJCXJldHVybiBJUFBST1RPX0RPTkU7CisJCWlmIChtLT5tX2xlbiA8 IGhvZmYgKyBpcGhsZW4gKyB0aG9mZikKKwkJCXJldHVybiBJUFBST1RPX0RPTkU7CisJCWJyZWFr OworCWNhc2UgSVBQUk9UT19VRFA6CisJCWlmIChpcGxlbiA8IGlwaGxlbiArIHNpemVvZihzdHJ1 Y3QgdWRwaGRyKSkKKwkJCXJldHVybiBJUFBST1RPX0RPTkU7CisJCWlmIChtLT5tX2xlbiA8IGhv ZmYgKyBpcGhsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpCisJCQlyZXR1cm4gSVBQUk9UT19E T05FOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoaXBsZW4gPCBpcGhsZW4pCisJCQlyZXR1 cm4gSVBQUk9UT19ET05FOworCQlicmVhazsKKwl9CisJcmV0dXJuIGlwLT5pcF9wOworfQorCiBz dGF0aWMgZGV2aWNlX21ldGhvZF90IG5ldHZzY19tZXRob2RzW10gPSB7CiAgICAgICAgIC8qIERl dmljZSBpbnRlcmZhY2UgKi8KICAgICAgICAgREVWTUVUSE9EKGRldmljZV9wcm9iZSwgICAgICAg ICBuZXR2c2NfcHJvYmUpLApkaWZmIC0tZ2l0IGEvc3lzL2Rldi9oeXBlcnYvbmV0dnNjL2h2X25l dF92c2MuaCBiL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9uZXRfdnNjLmgKLS0tIGEvc3lzL2Rl di9oeXBlcnYvbmV0dnNjL2h2X25ldF92c2MuaAorKysgYi9zeXMvZGV2L2h5cGVydi9uZXR2c2Mv aHZfbmV0X3ZzYy5oCkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVkZSA8c3lzL2xvY2suaD4KICNp bmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVkZSA8c3lzL3N4Lmg+CisjaW5jbHVkZSA8bmV0 aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvdGNwX2xyby5oPgogCiAjaW5jbHVkZSA8ZGV2 L2h5cGVydi9pbmNsdWRlL2h5cGVydi5oPgogCkBAIC05OTMsNiArOTk1LDE3IEBACiAJaW50ICAg ICAgICAgICAgIHRlbXBfdW51c2FibGU7CiAJc3RydWN0IGh2X2RldmljZSAgKmhuX2Rldl9vYmo7 CiAJbmV0dnNjX2RldiAgCSpuZXRfZGV2OworCisJc3RydWN0IGxyb19jdHJsCWhuX2xybzsKKwlp bnQJCWhuX2xyb19oaXdhdDsKKworCS8qIFRydXN0IHRjcCBzZWdtZW50cyB2ZXJpZmljYXRpb24g b24gaG9zdCBzaWRlICovCisJaW50CQlobl90cnVzdF9ob3N0dGNwOworCisJdV9sb25nCQlobl9j c3VtX2lwOworCXVfbG9uZwkJaG5fY3N1bV90Y3A7CisJdV9sb25nCQlobl9jc3VtX3RydXN0ZWQ7 CisJdV9sb25nCQlobl9scm9fdHJpZWQ7CiB9IGhuX3NvZnRjX3Q7CiAKIApkaWZmIC0tZ2l0IGEv c3lzL2Rldi9oeXBlcnYvbmV0dnNjL2h2X25ldF92c2MuYyBiL3N5cy9kZXYvaHlwZXJ2L25ldHZz Yy9odl9uZXRfdnNjLmMKLS0tIGEvc3lzL2Rldi9oeXBlcnYvbmV0dnNjL2h2X25ldF92c2MuYwor KysgYi9zeXMvZGV2L2h5cGVydi9uZXR2c2MvaHZfbmV0X3ZzYy5jCkBAIC05MTksNiArOTE5LDcg QEAKIAkgKi8KIAlodl9udl9vbl9yZWNlaXZlX2NvbXBsZXRpb24oZGV2aWNlLCB2bV94ZmVyX3Bh Z2VfcGt0LT5kLnRyYW5zYWN0aW9uX2lkLAogCSAgICBzdGF0dXMpOworCWh2X3JmX3JlY2VpdmVf cm9sbHVwKG5ldF9kZXYpOwogfQogCiAvKgoK --b1_fb8f18771ce435cb4febbc9532fb01a6--