From owner-freebsd-net@freebsd.org Mon Feb 15 08:59:11 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 3A332AA6045 for ; Mon, 15 Feb 2016 08:59:11 +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 25CC11256 for ; Mon, 15 Feb 2016 08:59:11 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id 24EDB6E13; Mon, 15 Feb 2016 08:59:11 +0000 (UTC) Date: Mon, 15 Feb 2016 08:59:11 +0000 To: freebsd-net@freebsd.org From: "sepherosa_gmail.com (Sepherosa Ziehau)" Reply-to: D5283+325+ff964c8d52006f6a@reviews.freebsd.org Subject: [Differential] [Request, 612 lines] D5283: hyperv/hn: Split TX ring data structure out of softc 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: D5283: hyperv/hn: Split TX ring data structure out of softc 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: X-Phabricator-Cc: Precedence: bulk Thread-Index: NzMzOGZkYjcxOGQ0MjYzYmE0NWE0Nzc3NTEx MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_978c101e263eea487e36cfb26c6cb168" X-Mailman-Approved-At: Mon, 15 Feb 2016 12:09:25 +0000 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: Mon, 15 Feb 2016 08:59:11 -0000 --b1_978c101e263eea487e36cfb26c6cb168 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. sepherosa_gmail.com added subscribers: freebsd-net-list, freebsd-virtualization-list. REVISION SUMMARY This paves the way for upcoming vRSS stuffs and eases more code cleanup. REVISION DETAIL https://reviews.freebsd.org/D5283 AFFECTED FILES sys/dev/hyperv/netvsc/hv_net_vsc.h sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: sepherosa_gmail.com, network, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com Cc: freebsd-virtualization-list, freebsd-net-list --b1_978c101e263eea487e36cfb26c6cb168 Content-Type: text/x-patch; charset=utf-8; name="D5283.13312.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D5283.13312.patch" ZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9uZXR2c2NfZHJ2X2ZyZWVic2Qu YyBiL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9uZXR2c2NfZHJ2X2ZyZWVic2QuYwotLS0gYS9z eXMvZGV2L2h5cGVydi9uZXR2c2MvaHZfbmV0dnNjX2Rydl9mcmVlYnNkLmMKKysrIGIvc3lzL2Rl di9oeXBlcnYvbmV0dnNjL2h2X25ldHZzY19kcnZfZnJlZWJzZC5jCkBAIC0xNTMsNyArMTUzLDcg QEAKIHN0cnVjdCBobl90eGRlc2MgewogCVNMSVNUX0VOVFJZKGhuX3R4ZGVzYykgbGluazsKIAlz dHJ1Y3QgbWJ1ZgkqbTsKLQlzdHJ1Y3QgaG5fc29mdGMJKnNjOworCXN0cnVjdCBobl90eF9yaW5n ICp0eHI7CiAJaW50CQlyZWZzOwogCXVpbnQzMl90CWZsYWdzOwkJLyogSE5fVFhEX0ZMQUdfICov CiAJbmV0dnNjX3BhY2tldAluZXR2c2NfcGt0OwkvKiBYWFggdG8gYmUgcmVtb3ZlZCAqLwpAQCAt MTkzLDcgKzE5Myw2IEBACiAjZGVmaW5lIE5WX0xPQ0tfSU5JVChfc2MsIF9uYW1lKSBcCiAJICAg IG10eF9pbml0KCYoX3NjKS0+aG5fbG9jaywgX25hbWUsIE1UWF9ORVRXT1JLX0xPQ0ssIE1UWF9E RUYpCiAjZGVmaW5lIE5WX0xPQ0soX3NjKQkJbXR4X2xvY2soJihfc2MpLT5obl9sb2NrKQotI2Rl ZmluZSBOVl9UUllMT0NLKF9zYykJCW10eF90cnlsb2NrKCYoX3NjKS0+aG5fbG9jaykKICNkZWZp bmUgTlZfTE9DS19BU1NFUlQoX3NjKQltdHhfYXNzZXJ0KCYoX3NjKS0+aG5fbG9jaywgTUFfT1dO RUQpCiAjZGVmaW5lIE5WX1VOTE9DSyhfc2MpCQltdHhfdW5sb2NrKCYoX3NjKS0+aG5fbG9jaykK ICNkZWZpbmUgTlZfTE9DS19ERVNUUk9ZKF9zYykJbXR4X2Rlc3Ryb3koJihfc2MpLT5obl9sb2Nr KQpAQCAtMjY2LDI1ICsyNjUsMzEgQEAKIHN0YXRpYyB2b2lkIGhuX2lmaW5pdF9sb2NrZWQoaG5f c29mdGNfdCAqc2MpOwogc3RhdGljIHZvaWQgaG5faWZpbml0KHZvaWQgKnhzYyk7CiBzdGF0aWMg aW50ICBobl9pb2N0bChzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9sb25nIGNtZCwgY2FkZHJfdCBkYXRh KTsKLXN0YXRpYyBpbnQgaG5fc3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwLCBpbnQgbGVu KTsKK3N0YXRpYyBpbnQgaG5fc3RhcnRfbG9ja2VkKHN0cnVjdCBobl90eF9yaW5nICp0eHIsIGlu dCBsZW4pOwogc3RhdGljIHZvaWQgaG5fc3RhcnQoc3RydWN0IGlmbmV0ICppZnApOwotc3RhdGlj IHZvaWQgaG5fc3RhcnRfdHhlb2Yoc3RydWN0IGlmbmV0ICppZnApOworc3RhdGljIHZvaWQgaG5f c3RhcnRfdHhlb2Yoc3RydWN0IGhuX3R4X3JpbmcgKik7CiBzdGF0aWMgaW50IGhuX2lmbWVkaWFf dXBkKHN0cnVjdCBpZm5ldCAqaWZwKTsKIHN0YXRpYyB2b2lkIGhuX2lmbWVkaWFfc3RzKHN0cnVj dCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZtZWRpYXJlcSAqaWZtcik7CiBzdGF0aWMgaW50IGhuX2xy b19sZW5saW1fc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOwogc3RhdGljIGludCBobl9scm9f YWNrY250X3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKIHN0YXRpYyBpbnQgaG5fdHJ1c3Rf aGNzdW1fc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOwogc3RhdGljIGludCBobl90eF9jaGlt bmV5X3NpemVfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOwogc3RhdGljIGludCBobl9yeF9z dGF0X3Vsb25nX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKIHN0YXRpYyBpbnQgaG5fcnhf c3RhdF91NjRfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOworc3RhdGljIGludCBobl90eF9z dGF0X3Vsb25nX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBpbnQgaG5fdHhf Y29uZl9pbnRfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOwogc3RhdGljIGludCBobl9jaGVj a19pcGxlbihjb25zdCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotc3RhdGljIGludCBobl9jcmVhdGVf dHhfcmluZyhzdHJ1Y3QgaG5fc29mdGMgKnNjKTsKLXN0YXRpYyB2b2lkIGhuX2Rlc3Ryb3lfdHhf cmluZyhzdHJ1Y3QgaG5fc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgaG5fY3JlYXRlX3R4X3Jpbmco c3RydWN0IGhuX3NvZnRjICosIGludCk7CitzdGF0aWMgdm9pZCBobl9kZXN0cm95X3R4X3Jpbmco c3RydWN0IGhuX3R4X3JpbmcgKik7CitzdGF0aWMgaW50IGhuX2NyZWF0ZV90eF9kYXRhKHN0cnVj dCBobl9zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkIGhuX2Rlc3Ryb3lfdHhfZGF0YShzdHJ1Y3QgaG5f c29mdGMgKik7CiBzdGF0aWMgdm9pZCBobl9zdGFydF90YXNrZnVuYyh2b2lkICp4c2MsIGludCBw ZW5kaW5nKTsKIHN0YXRpYyB2b2lkIGhuX3R4ZW9mX3Rhc2tmdW5jKHZvaWQgKnhzYywgaW50IHBl bmRpbmcpOwotc3RhdGljIGludCBobl9lbmNhcChzdHJ1Y3QgaG5fc29mdGMgKiwgc3RydWN0IGhu X3R4ZGVzYyAqLCBzdHJ1Y3QgbWJ1ZiAqKik7CitzdGF0aWMgdm9pZCBobl9zdG9wX3R4X3Rhc2tz KHN0cnVjdCBobl9zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgaG5fZW5jYXAoc3RydWN0IGhuX3R4X3Jp bmcgKiwgc3RydWN0IGhuX3R4ZGVzYyAqLCBzdHJ1Y3QgbWJ1ZiAqKik7CiBzdGF0aWMgdm9pZCBo bl9jcmVhdGVfcnhfZGF0YShzdHJ1Y3QgaG5fc29mdGMgKnNjKTsKIHN0YXRpYyB2b2lkIGhuX2Rl c3Ryb3lfcnhfZGF0YShzdHJ1Y3QgaG5fc29mdGMgKnNjKTsKK3N0YXRpYyB2b2lkIGhuX3NldF90 eF9jaGltbmV5X3NpemUoc3RydWN0IGhuX3NvZnRjICosIGludCk7CiAKIHN0YXRpYyBpbnQKIGhu X2lmbWVkaWFfdXBkKHN0cnVjdCBpZm5ldCAqaWZwIF9fdW51c2VkKQpAQCAtMzUwLDggKzM1NSw2 IEBACiAJaG5fc29mdGNfdCAqc2M7CiAJaW50IHVuaXQgPSBkZXZpY2VfZ2V0X3VuaXQoZGV2KTsK IAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IE5VTEw7Ci0Jc3RydWN0IHN5c2N0bF9vaWRfbGlzdCAqY2hp bGQ7Ci0Jc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqY3R4OwogCWludCBlcnJvcjsKICNpZiBfX0Zy ZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDQ1CiAJaW50IHRzb19tYXhsZW47CkBAIC0zNjUsNyArMzY4 LDYgQEAKIAliemVybyhzYywgc2l6ZW9mKGhuX3NvZnRjX3QpKTsKIAlzYy0+aG5fdW5pdCA9IHVu aXQ7CiAJc2MtPmhuX2RldiA9IGRldjsKLQlzYy0+aG5fZGlyZWN0X3R4X3NpemUgPSBobl9kaXJl Y3RfdHhfc2l6ZTsKIAogCWlmIChobl90eF90YXNrcSA9PSBOVUxMKSB7CiAJCXNjLT5obl90eF90 YXNrcSA9IHRhc2txdWV1ZV9jcmVhdGUoImhuX3R4IiwgTV9XQUlUT0ssCkBAIC0zNzUsMjAgKzM3 NywxNyBAQAogCX0gZWxzZSB7CiAJCXNjLT5obl90eF90YXNrcSA9IGhuX3R4X3Rhc2txOwogCX0K LQlUQVNLX0lOSVQoJnNjLT5obl9zdGFydF90YXNrLCAwLCBobl9zdGFydF90YXNrZnVuYywgc2Mp OwotCVRBU0tfSU5JVCgmc2MtPmhuX3R4ZW9mX3Rhc2ssIDAsIGhuX3R4ZW9mX3Rhc2tmdW5jLCBz Yyk7Ci0KLQllcnJvciA9IGhuX2NyZWF0ZV90eF9yaW5nKHNjKTsKLQlpZiAoZXJyb3IpCi0JCWdv dG8gZmFpbGVkOwotCiAJTlZfTE9DS19JTklUKHNjLCAiTmV0VlNDTG9jayIpOwogCiAJc2MtPmhu X2Rldl9vYmogPSBkZXZpY2VfY3R4OwogCiAJaWZwID0gc2MtPmhuX2lmcCA9IGlmX2FsbG9jKElG VF9FVEhFUik7CiAJaWZwLT5pZl9zb2Z0YyA9IHNjOwogCisJZXJyb3IgPSBobl9jcmVhdGVfdHhf ZGF0YShzYyk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxlZDsKKwogCWhuX2NyZWF0ZV9yeF9k YXRhKHNjKTsKIAogCWlmX2luaXRuYW1lKGlmcCwgZGV2aWNlX2dldF9uYW1lKGRldiksIGRldmlj ZV9nZXRfdW5pdChkZXYpKTsKQEAgLTQyMSwxMiArNDIwLDcgQEAKIAlpZnAtPmlmX2NhcGVuYWJs ZSB8PQogCSAgICBJRkNBUF9WTEFOX0hXVEFHR0lORyB8IElGQ0FQX1ZMQU5fTVRVIHwgSUZDQVBf SFdDU1VNIHwgSUZDQVBfVFNPIHwKIAkgICAgSUZDQVBfTFJPOwotCi0JaWYgKGh2X3ZtYnVzX3By b3RvY2FsX3ZlcnNpb24gPj0gSFZfVk1CVVNfVkVSU0lPTl9XSU44XzEpCi0JCXNjLT5obl9jc3Vt X2Fzc2lzdCA9IEhOX0NTVU1fQVNTSVNUOwotCWVsc2UKLQkJc2MtPmhuX2NzdW1fYXNzaXN0ID0g SE5fQ1NVTV9BU1NJU1RfV0lOODsKLQlpZnAtPmlmX2h3YXNzaXN0ID0gc2MtPmhuX2NzdW1fYXNz aXN0IHwgQ1NVTV9UU087CisJaWZwLT5pZl9od2Fzc2lzdCA9IHNjLT5obl90eF9yaW5nWzBdLmhu X2NzdW1fYXNzaXN0IHwgQ1NVTV9UU087CiAKIAllcnJvciA9IGh2X3JmX29uX2RldmljZV9hZGQo ZGV2aWNlX2N0eCwgJmRldmljZV9pbmZvKTsKIAlpZiAoZXJyb3IpCkBAIC00NTUsNTIgKzQ0OSwx NCBAQAogI2VuZGlmCiAKIAlzYy0+aG5fdHhfY2hpbW5leV9tYXggPSBzYy0+bmV0X2Rldi0+c2Vu ZF9zZWN0aW9uX3NpemU7Ci0Jc2MtPmhuX3R4X2NoaW1uZXlfc2l6ZSA9IHNjLT5obl90eF9jaGlt bmV5X21heDsKKwlobl9zZXRfdHhfY2hpbW5leV9zaXplKHNjLCBzYy0+aG5fdHhfY2hpbW5leV9t YXgpOwogCWlmIChobl90eF9jaGltbmV5X3NpemUgPiAwICYmCiAJICAgIGhuX3R4X2NoaW1uZXlf c2l6ZSA8IHNjLT5obl90eF9jaGltbmV5X21heCkKLQkJc2MtPmhuX3R4X2NoaW1uZXlfc2l6ZSA9 IGhuX3R4X2NoaW1uZXlfc2l6ZTsKLQotCS8qCi0JICogQWx3YXlzIHNjaGVkdWxlIHRyYW5zbWlz c2lvbiBpbnN0ZWFkIG9mIHRyeWluZwotCSAqIHRvIGRvIGRpcmVjdCB0cmFuc21pc3Npb24uICBU aGlzIG9uZSBnaXZlcyB0aGUKLQkgKiBiZXN0IHBlcmZvcm1hbmNlIHNvIGZhci4KLQkgKi8KLQlz Yy0+aG5fc2NoZWRfdHggPSAxOwotCi0JY3R4ID0gZGV2aWNlX2dldF9zeXNjdGxfY3R4KGRldik7 Ci0JY2hpbGQgPSBTWVNDVExfQ0hJTERSRU4oZGV2aWNlX2dldF9zeXNjdGxfdHJlZShkZXYpKTsK LQotCVNZU0NUTF9BRERfVUxPTkcoY3R4LCBjaGlsZCwgT0lEX0FVVE8sICJub190eGRlc2NzIiwK LQkgICAgQ1RMRkxBR19SVywgJnNjLT5obl9ub190eGRlc2NzLCAiIyBvZiB0aW1lcyBzaG9ydCBv ZiBUWCBkZXNjcyIpOwotCVNZU0NUTF9BRERfVUxPTkcoY3R4LCBjaGlsZCwgT0lEX0FVVE8sICJz ZW5kX2ZhaWxlZCIsCi0JICAgIENUTEZMQUdfUlcsICZzYy0+aG5fc2VuZF9mYWlsZWQsICIjIG9m IGh5cGVyLXYgc2VuZGluZyBmYWlsdXJlIik7Ci0JU1lTQ1RMX0FERF9VTE9ORyhjdHgsIGNoaWxk LCBPSURfQVVUTywgInR4ZG1hX2ZhaWxlZCIsCi0JICAgIENUTEZMQUdfUlcsICZzYy0+aG5fdHhk bWFfZmFpbGVkLCAiIyBvZiBUWCBETUEgZmFpbHVyZSIpOwotCVNZU0NUTF9BRERfVUxPTkcoY3R4 LCBjaGlsZCwgT0lEX0FVVE8sICJ0eF9jb2xsYXBzZWQiLAotCSAgICBDVExGTEFHX1JXLCAmc2Mt PmhuX3R4X2NvbGxhcHNlZCwgIiMgb2YgVFggbWJ1ZiBjb2xsYXBzZWQiKTsKLQlTWVNDVExfQURE X1VMT05HKGN0eCwgY2hpbGQsIE9JRF9BVVRPLCAidHhfY2hpbW5leSIsCi0JICAgIENUTEZMQUdf UlcsICZzYy0+aG5fdHhfY2hpbW5leSwgIiMgb2YgY2hpbW5leSBzZW5kIik7Ci0JU1lTQ1RMX0FE RF9JTlQoY3R4LCBjaGlsZCwgT0lEX0FVVE8sICJ0eGRlc2NfY250IiwKLQkgICAgQ1RMRkxBR19S RCwgJnNjLT5obl90eGRlc2NfY250LCAwLCAiIyBvZiB0b3RhbCBUWCBkZXNjcyIpOwotCVNZU0NU TF9BRERfSU5UKGN0eCwgY2hpbGQsIE9JRF9BVVRPLCAidHhkZXNjX2F2YWlsIiwKLQkgICAgQ1RM RkxBR19SRCwgJnNjLT5obl90eGRlc2NfYXZhaWwsIDAsICIjIG9mIGF2YWlsYWJsZSBUWCBkZXNj cyIpOwotCVNZU0NUTF9BRERfSU5UKGN0eCwgY2hpbGQsIE9JRF9BVVRPLCAidHhfY2hpbW5leV9t YXgiLAotCSAgICBDVExGTEFHX1JELCAmc2MtPmhuX3R4X2NoaW1uZXlfbWF4LCAwLAotCSAgICAi Q2hpbW5leSBzZW5kIHBhY2tldCBzaXplIHVwcGVyIGJvdW5kYXJ5Iik7Ci0JU1lTQ1RMX0FERF9Q Uk9DKGN0eCwgY2hpbGQsIE9JRF9BVVRPLCAidHhfY2hpbW5leV9zaXplIiwKLQkgICAgQ1RMVFlQ RV9JTlQgfCBDVExGTEFHX1JXLCBzYywgMCwgaG5fdHhfY2hpbW5leV9zaXplX3N5c2N0bCwKLQkg ICAgIkkiLCAiQ2hpbW5leSBzZW5kIHBhY2tldCBzaXplIGxpbWl0Iik7Ci0JU1lTQ1RMX0FERF9J TlQoY3R4LCBjaGlsZCwgT0lEX0FVVE8sICJkaXJlY3RfdHhfc2l6ZSIsCi0JICAgIENUTEZMQUdf UlcsICZzYy0+aG5fZGlyZWN0X3R4X3NpemUsIDAsCi0JICAgICJTaXplIG9mIHRoZSBwYWNrZXQg Zm9yIGRpcmVjdCB0cmFuc21pc3Npb24iKTsKLQlTWVNDVExfQUREX0lOVChjdHgsIGNoaWxkLCBP SURfQVVUTywgInNjaGVkX3R4IiwKLQkgICAgQ1RMRkxBR19SVywgJnNjLT5obl9zY2hlZF90eCwg MCwKLQkgICAgIkFsd2F5cyBzY2hlZHVsZSB0cmFuc21pc3Npb24gIgotCSAgICAiaW5zdGVhZCBv ZiBkb2luZyBkaXJlY3QgdHJhbnNtaXNzaW9uIik7CisJCWhuX3NldF90eF9jaGltbmV5X3NpemUo c2MsIGhuX3R4X2NoaW1uZXlfc2l6ZSk7CiAKIAlyZXR1cm4gKDApOwogZmFpbGVkOgotCWhuX2Rl c3Ryb3lfdHhfcmluZyhzYyk7CisJaG5fZGVzdHJveV90eF9kYXRhKHNjKTsKIAlpZiAoaWZwICE9 IE5VTEwpCiAJCWlmX2ZyZWUoaWZwKTsKIAlyZXR1cm4gKGVycm9yKTsKQEAgLTUzMSwxNCArNDg3 LDE0IEBACiAKIAlodl9yZl9vbl9kZXZpY2VfcmVtb3ZlKGh2X2RldmljZSwgSFZfUkZfTlZfREVT VFJPWV9DSEFOTkVMKTsKIAotCXRhc2txdWV1ZV9kcmFpbihzYy0+aG5fdHhfdGFza3EsICZzYy0+ aG5fc3RhcnRfdGFzayk7Ci0JdGFza3F1ZXVlX2RyYWluKHNjLT5obl90eF90YXNrcSwgJnNjLT5o bl90eGVvZl90YXNrKTsKLQlpZiAoc2MtPmhuX3R4X3Rhc2txICE9IGhuX3R4X3Rhc2txKQotCQl0 YXNrcXVldWVfZnJlZShzYy0+aG5fdHhfdGFza3EpOworCWhuX3N0b3BfdHhfdGFza3Moc2MpOwog CiAJaWZtZWRpYV9yZW1vdmVhbGwoJnNjLT5obl9tZWRpYSk7CiAJaG5fZGVzdHJveV9yeF9kYXRh KHNjKTsKLQlobl9kZXN0cm95X3R4X3Jpbmcoc2MpOworCWhuX2Rlc3Ryb3lfdHhfZGF0YShzYyk7 CisKKwlpZiAoc2MtPmhuX3R4X3Rhc2txICE9IGhuX3R4X3Rhc2txKQorCQl0YXNrcXVldWVfZnJl ZShzYy0+aG5fdHhfdGFza3EpOwogCiAJcmV0dXJuICgwKTsKIH0KQEAgLTU1MywxMyArNTA5LDEz IEBACiB9CiAKIHN0YXRpYyBfX2lubGluZSBpbnQKLWhuX3R4ZGVzY19kbWFtYXBfbG9hZChzdHJ1 Y3QgaG5fc29mdGMgKnNjLCBzdHJ1Y3QgaG5fdHhkZXNjICp0eGQsCitobl90eGRlc2NfZG1hbWFw X2xvYWQoc3RydWN0IGhuX3R4X3JpbmcgKnR4ciwgc3RydWN0IGhuX3R4ZGVzYyAqdHhkLAogICAg IHN0cnVjdCBtYnVmICoqbV9oZWFkLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50ICpuc2Vn cykKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbSA9ICptX2hlYWQ7CiAJaW50IGVycm9yOwogCi0JZXJyb3Ig PSBidXNfZG1hbWFwX2xvYWRfbWJ1Zl9zZyhzYy0+aG5fdHhfZGF0YV9kdGFnLCB0eGQtPmRhdGFf ZG1hcCwKKwllcnJvciA9IGJ1c19kbWFtYXBfbG9hZF9tYnVmX3NnKHR4ci0+aG5fdHhfZGF0YV9k dGFnLCB0eGQtPmRhdGFfZG1hcCwKIAkgICAgbSwgc2VncywgbnNlZ3MsIEJVU19ETUFfTk9XQUlU KTsKIAlpZiAoZXJyb3IgPT0gRUZCSUcpIHsKIAkJc3RydWN0IG1idWYgKm1fbmV3OwpAQCAtNTY5 LDM0ICs1MjUsMzQgQEAKIAkJCXJldHVybiBFTk9CVUZTOwogCQllbHNlCiAJCQkqbV9oZWFkID0g bSA9IG1fbmV3OwotCQlzYy0+aG5fdHhfY29sbGFwc2VkKys7CisJCXR4ci0+aG5fdHhfY29sbGFw c2VkKys7CiAKLQkJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWRfbWJ1Zl9zZyhzYy0+aG5fdHhfZGF0 YV9kdGFnLAorCQllcnJvciA9IGJ1c19kbWFtYXBfbG9hZF9tYnVmX3NnKHR4ci0+aG5fdHhfZGF0 YV9kdGFnLAogCQkgICAgdHhkLT5kYXRhX2RtYXAsIG0sIHNlZ3MsIG5zZWdzLCBCVVNfRE1BX05P V0FJVCk7CiAJfQogCWlmICghZXJyb3IpIHsKLQkJYnVzX2RtYW1hcF9zeW5jKHNjLT5obl90eF9k YXRhX2R0YWcsIHR4ZC0+ZGF0YV9kbWFwLAorCQlidXNfZG1hbWFwX3N5bmModHhyLT5obl90eF9k YXRhX2R0YWcsIHR4ZC0+ZGF0YV9kbWFwLAogCQkgICAgQlVTX0RNQVNZTkNfUFJFV1JJVEUpOwog CQl0eGQtPmZsYWdzIHw9IEhOX1RYRF9GTEFHX0RNQU1BUDsKIAl9CiAJcmV0dXJuIGVycm9yOwog fQogCiBzdGF0aWMgX19pbmxpbmUgdm9pZAotaG5fdHhkZXNjX2RtYW1hcF91bmxvYWQoc3RydWN0 IGhuX3NvZnRjICpzYywgc3RydWN0IGhuX3R4ZGVzYyAqdHhkKQoraG5fdHhkZXNjX2RtYW1hcF91 bmxvYWQoc3RydWN0IGhuX3R4X3JpbmcgKnR4ciwgc3RydWN0IGhuX3R4ZGVzYyAqdHhkKQogewog CiAJaWYgKHR4ZC0+ZmxhZ3MgJiBITl9UWERfRkxBR19ETUFNQVApIHsKLQkJYnVzX2RtYW1hcF9z eW5jKHNjLT5obl90eF9kYXRhX2R0YWcsCisJCWJ1c19kbWFtYXBfc3luYyh0eHItPmhuX3R4X2Rh dGFfZHRhZywKIAkJICAgIHR4ZC0+ZGF0YV9kbWFwLCBCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOwot CQlidXNfZG1hbWFwX3VubG9hZChzYy0+aG5fdHhfZGF0YV9kdGFnLAorCQlidXNfZG1hbWFwX3Vu bG9hZCh0eHItPmhuX3R4X2RhdGFfZHRhZywKIAkJICAgIHR4ZC0+ZGF0YV9kbWFwKTsKIAkJdHhk LT5mbGFncyAmPSB+SE5fVFhEX0ZMQUdfRE1BTUFQOwogCX0KIH0KIAogc3RhdGljIF9faW5saW5l IGludAotaG5fdHhkZXNjX3B1dChzdHJ1Y3QgaG5fc29mdGMgKnNjLCBzdHJ1Y3QgaG5fdHhkZXNj ICp0eGQpCitobl90eGRlc2NfcHV0KHN0cnVjdCBobl90eF9yaW5nICp0eHIsIHN0cnVjdCBobl90 eGRlc2MgKnR4ZCkKIHsKIAogCUtBU1NFUlQoKHR4ZC0+ZmxhZ3MgJiBITl9UWERfRkxBR19PTkxJ U1QpID09IDAsCkBAIC02MDYsMzkgKzU2MiwzOSBAQAogCWlmIChhdG9taWNfZmV0Y2hhZGRfaW50 KCZ0eGQtPnJlZnMsIC0xKSAhPSAxKQogCQlyZXR1cm4gMDsKIAotCWhuX3R4ZGVzY19kbWFtYXBf dW5sb2FkKHNjLCB0eGQpOworCWhuX3R4ZGVzY19kbWFtYXBfdW5sb2FkKHR4ciwgdHhkKTsKIAlp ZiAodHhkLT5tICE9IE5VTEwpIHsKIAkJbV9mcmVlbSh0eGQtPm0pOwogCQl0eGQtPm0gPSBOVUxM OwogCX0KIAogCXR4ZC0+ZmxhZ3MgfD0gSE5fVFhEX0ZMQUdfT05MSVNUOwogCi0JbXR4X2xvY2tf c3Bpbigmc2MtPmhuX3R4bGlzdF9zcGluKTsKLQlLQVNTRVJUKHNjLT5obl90eGRlc2NfYXZhaWwg Pj0gMCAmJgotCSAgICBzYy0+aG5fdHhkZXNjX2F2YWlsIDwgc2MtPmhuX3R4ZGVzY19jbnQsCi0J ICAgICgidHhkZXNjX3B1dDogaW52YWxpZCB0eGQgYXZhaWwgJWQiLCBzYy0+aG5fdHhkZXNjX2F2 YWlsKSk7Ci0Jc2MtPmhuX3R4ZGVzY19hdmFpbCsrOwotCVNMSVNUX0lOU0VSVF9IRUFEKCZzYy0+ aG5fdHhsaXN0LCB0eGQsIGxpbmspOwotCW10eF91bmxvY2tfc3Bpbigmc2MtPmhuX3R4bGlzdF9z cGluKTsKKwltdHhfbG9ja19zcGluKCZ0eHItPmhuX3R4bGlzdF9zcGluKTsKKwlLQVNTRVJUKHR4 ci0+aG5fdHhkZXNjX2F2YWlsID49IDAgJiYKKwkgICAgdHhyLT5obl90eGRlc2NfYXZhaWwgPCB0 eHItPmhuX3R4ZGVzY19jbnQsCisJICAgICgidHhkZXNjX3B1dDogaW52YWxpZCB0eGQgYXZhaWwg JWQiLCB0eHItPmhuX3R4ZGVzY19hdmFpbCkpOworCXR4ci0+aG5fdHhkZXNjX2F2YWlsKys7CisJ U0xJU1RfSU5TRVJUX0hFQUQoJnR4ci0+aG5fdHhsaXN0LCB0eGQsIGxpbmspOworCW10eF91bmxv Y2tfc3BpbigmdHhyLT5obl90eGxpc3Rfc3Bpbik7CiAKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGlj IF9faW5saW5lIHN0cnVjdCBobl90eGRlc2MgKgotaG5fdHhkZXNjX2dldChzdHJ1Y3QgaG5fc29m dGMgKnNjKQoraG5fdHhkZXNjX2dldChzdHJ1Y3QgaG5fdHhfcmluZyAqdHhyKQogewogCXN0cnVj dCBobl90eGRlc2MgKnR4ZDsKIAotCW10eF9sb2NrX3NwaW4oJnNjLT5obl90eGxpc3Rfc3Bpbik7 Ci0JdHhkID0gU0xJU1RfRklSU1QoJnNjLT5obl90eGxpc3QpOworCW10eF9sb2NrX3NwaW4oJnR4 ci0+aG5fdHhsaXN0X3NwaW4pOworCXR4ZCA9IFNMSVNUX0ZJUlNUKCZ0eHItPmhuX3R4bGlzdCk7 CiAJaWYgKHR4ZCAhPSBOVUxMKSB7Ci0JCUtBU1NFUlQoc2MtPmhuX3R4ZGVzY19hdmFpbCA+IDAs Ci0JCSAgICAoInR4ZGVzY19nZXQ6IGludmFsaWQgdHhkIGF2YWlsICVkIiwgc2MtPmhuX3R4ZGVz Y19hdmFpbCkpOwotCQlzYy0+aG5fdHhkZXNjX2F2YWlsLS07Ci0JCVNMSVNUX1JFTU9WRV9IRUFE KCZzYy0+aG5fdHhsaXN0LCBsaW5rKTsKKwkJS0FTU0VSVCh0eHItPmhuX3R4ZGVzY19hdmFpbCA+ IDAsCisJCSAgICAoInR4ZGVzY19nZXQ6IGludmFsaWQgdHhkIGF2YWlsICVkIiwgdHhyLT5obl90 eGRlc2NfYXZhaWwpKTsKKwkJdHhyLT5obl90eGRlc2NfYXZhaWwtLTsKKwkJU0xJU1RfUkVNT1ZF X0hFQUQoJnR4ci0+aG5fdHhsaXN0LCBsaW5rKTsKIAl9Ci0JbXR4X3VubG9ja19zcGluKCZzYy0+ aG5fdHhsaXN0X3NwaW4pOworCW10eF91bmxvY2tfc3BpbigmdHhyLT5obl90eGxpc3Rfc3Bpbik7 CiAKIAlpZiAodHhkICE9IE5VTEwpIHsKIAkJS0FTU0VSVCh0eGQtPm0gPT0gTlVMTCAmJiB0eGQt PnJlZnMgPT0gMCAmJgpAQCAtNjcwLDIwICs2MjYsMjEgQEAKIHsKIAluZXR2c2NfcGFja2V0ICpw YWNrZXQgPSBjb250ZXh0OwogCXN0cnVjdCBobl90eGRlc2MgKnR4ZDsKLQlzdHJ1Y3QgaG5fc29m dGMgKnNjOworCXN0cnVjdCBobl90eF9yaW5nICp0eHI7CiAKIAl0eGQgPSAoc3RydWN0IGhuX3R4 ZGVzYyAqKSh1aW50cHRyX3QpCiAJICAgIHBhY2tldC0+Y29tcGwuc2VuZC5zZW5kX2NvbXBsZXRp b25fdGlkOwogCi0Jc2MgPSB0eGQtPnNjOwotCXNjLT5obl90eGVvZiA9IDE7Ci0JaG5fdHhkZXNj X3B1dChzYywgdHhkKTsKKwl0eHIgPSB0eGQtPnR4cjsKKwl0eHItPmhuX3R4ZW9mID0gMTsKKwlo bl90eGRlc2NfcHV0KHR4ciwgdHhkKTsKIH0KIAogdm9pZAogbmV0dnNjX2NoYW5uZWxfcm9sbHVw KHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9jdHgpCiB7CiAJc3RydWN0IGhuX3NvZnRjICpzYyA9 IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2N0eC0+ZGV2aWNlKTsKKwlzdHJ1Y3QgaG5fdHhfcmlu ZyAqdHhyID0gJnNjLT5obl90eF9yaW5nWzBdOyAvKiBUT0RPOiB2UlNTICovCiAjaWYgZGVmaW5l ZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQogCXN0cnVjdCBobl9yeF9yaW5nICpyeHIgPSAmc2Mt PmhuX3J4X3JpbmdbMF07IC8qIFRPRE86IHZSU1MgKi8KIAlzdHJ1Y3QgbHJvX2N0cmwgKmxybyA9 ICZyeHItPmhuX2xybzsKQEAgLTY5NSwxOSArNjUyLDE5IEBACiAJfQogI2VuZGlmCiAKLQlpZiAo IXNjLT5obl90eGVvZikKKwlpZiAoIXR4ci0+aG5fdHhlb2YpCiAJCXJldHVybjsKIAotCXNjLT5o bl90eGVvZiA9IDA7Ci0JaG5fc3RhcnRfdHhlb2Yoc2MtPmhuX2lmcCk7CisJdHhyLT5obl90eGVv ZiA9IDA7CisJaG5fc3RhcnRfdHhlb2YodHhyKTsKIH0KIAogLyoKICAqIE5PVEU6CiAgKiBJZiB0 aGlzIGZ1bmN0aW9uIGZhaWxzLCB0aGVuIGJvdGggdHhkIGFuZCBtX2hlYWQwIHdpbGwgYmUgZnJl ZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWhuX2VuY2FwKHN0cnVjdCBobl9zb2Z0YyAqc2MsIHN0cnVj dCBobl90eGRlc2MgKnR4ZCwgc3RydWN0IG1idWYgKiptX2hlYWQwKQoraG5fZW5jYXAoc3RydWN0 IGhuX3R4X3JpbmcgKnR4ciwgc3RydWN0IGhuX3R4ZGVzYyAqdHhkLCBzdHJ1Y3QgbWJ1ZiAqKm1f aGVhZDApCiB7CiAJYnVzX2RtYV9zZWdtZW50X3Qgc2Vnc1tITl9UWF9EQVRBX1NFR0NOVF9NQVhd OwogCWludCBlcnJvciwgbnNlZ3MsIGk7CkBAIC04MTAsNyArNzY3LDcgQEAKICNlbmRpZgogCQl0 c29faW5mby0+bHNvX3YyX3htaXQudGNwX2hlYWRlcl9vZmZzZXQgPSAwOwogCQl0c29faW5mby0+ bHNvX3YyX3htaXQubXNzID0gbV9oZWFkLT5tX3BrdGhkci50c29fc2Vnc3o7Ci0JfSBlbHNlIGlm IChtX2hlYWQtPm1fcGt0aGRyLmNzdW1fZmxhZ3MgJiBzYy0+aG5fY3N1bV9hc3Npc3QpIHsKKwl9 IGVsc2UgaWYgKG1faGVhZC0+bV9wa3RoZHIuY3N1bV9mbGFncyAmIHR4ci0+aG5fY3N1bV9hc3Np c3QpIHsKIAkJcm5kaXNfdGNwX2lwX2NzdW1faW5mbyAqY3N1bV9pbmZvOwogCiAJCXJuZGlzX21z Z19zaXplICs9IFJORElTX0NTVU1fUFBJX1NJWkU7CkBAIC04MzcsOCArNzk0LDggQEAKIAkvKgog CSAqIENoaW1uZXkgc2VuZCwgaWYgdGhlIHBhY2tldCBjb3VsZCBmaXQgaW50byBvbmUgY2hpbW5l eSBidWZmZXIuCiAJICovCi0JaWYgKHBhY2tldC0+dG90X2RhdGFfYnVmX2xlbiA8IHNjLT5obl90 eF9jaGltbmV5X3NpemUpIHsKLQkJbmV0dnNjX2RldiAqbmV0X2RldiA9IHNjLT5uZXRfZGV2Owor CWlmIChwYWNrZXQtPnRvdF9kYXRhX2J1Zl9sZW4gPCB0eHItPmhuX3R4X2NoaW1uZXlfc2l6ZSkg eworCQluZXR2c2NfZGV2ICpuZXRfZGV2ID0gdHhyLT5obl9zYy0+bmV0X2RldjsKIAkJdWludDMy X3Qgc2VuZF9idWZfc2VjdGlvbl9pZHg7CiAKIAkJc2VuZF9idWZfc2VjdGlvbl9pZHggPQpAQCAt ODU3LDEyICs4MTQsMTIgQEAKIAkJCXBhY2tldC0+c2VuZF9idWZfc2VjdGlvbl9zaXplID0KIAkJ CSAgICBwYWNrZXQtPnRvdF9kYXRhX2J1Zl9sZW47CiAJCQlwYWNrZXQtPnBhZ2VfYnVmX2NvdW50 ID0gMDsKLQkJCXNjLT5obl90eF9jaGltbmV5Kys7CisJCQl0eHItPmhuX3R4X2NoaW1uZXkrKzsK IAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KIAotCWVycm9yID0gaG5fdHhkZXNjX2RtYW1hcF9sb2Fk KHNjLCB0eGQsICZtX2hlYWQsIHNlZ3MsICZuc2Vncyk7CisJZXJyb3IgPSBobl90eGRlc2NfZG1h bWFwX2xvYWQodHhyLCB0eGQsICZtX2hlYWQsIHNlZ3MsICZuc2Vncyk7CiAJaWYgKGVycm9yKSB7 CiAJCWludCBmcmVlZDsKIApAQCAtODcyLDEyICs4MjksMTIgQEAKIAkJbV9mcmVlbShtX2hlYWQp OwogCQkqbV9oZWFkMCA9IE5VTEw7CiAKLQkJZnJlZWQgPSBobl90eGRlc2NfcHV0KHNjLCB0eGQp OworCQlmcmVlZCA9IGhuX3R4ZGVzY19wdXQodHhyLCB0eGQpOwogCQlLQVNTRVJUKGZyZWVkICE9 IDAsCiAJCSAgICAoImZhaWwgdG8gZnJlZSB0eGQgdXBvbiB0eGRtYSBlcnJvciIpKTsKIAotCQlz Yy0+aG5fdHhkbWFfZmFpbGVkKys7Ci0JCWlmX2luY19jb3VudGVyKHNjLT5obl9pZnAsIElGQ09V TlRFUl9PRVJST1JTLCAxKTsKKwkJdHhyLT5obl90eGRtYV9mYWlsZWQrKzsKKwkJaWZfaW5jX2Nv dW50ZXIodHhyLT5obl9zYy0+aG5faWZwLCBJRkNPVU5URVJfT0VSUk9SUywgMSk7CiAJCXJldHVy biBlcnJvcjsKIAl9CiAJKm1faGVhZDAgPSBtX2hlYWQ7CkBAIC05MjAsMTEgKzg3NywxNSBAQAog ICogU3RhcnQgYSB0cmFuc21pdCBvZiBvbmUgb3IgbW9yZSBwYWNrZXRzCiAgKi8KIHN0YXRpYyBp bnQKLWhuX3N0YXJ0X2xvY2tlZChzdHJ1Y3QgaWZuZXQgKmlmcCwgaW50IGxlbikKK2huX3N0YXJ0 X2xvY2tlZChzdHJ1Y3QgaG5fdHhfcmluZyAqdHhyLCBpbnQgbGVuKQogewotCXN0cnVjdCBobl9z b2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCXN0cnVjdCBobl9zb2Z0YyAqc2MgPSB0eHItPmhu X3NjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmhuX2lmcDsKIAlzdHJ1Y3QgaHZfZGV2aWNl ICpkZXZpY2VfY3R4ID0gdm1idXNfZ2V0X2RldmN0eChzYy0+aG5fZGV2KTsKIAorCUtBU1NFUlQo dHhyID09ICZzYy0+aG5fdHhfcmluZ1swXSwgKCJub3QgdGhlIGZpcnN0IFRYIHJpbmciKSk7CisJ bXR4X2Fzc2VydCgmdHhyLT5obl90eF9sb2NrLCBNQV9PV05FRCk7CisKIAlpZiAoKGlmcC0+aWZf ZHJ2X2ZsYWdzICYgKElGRl9EUlZfUlVOTklORyB8IElGRl9EUlZfT0FDVElWRSkpICE9CiAJICAg IElGRl9EUlZfUlVOTklORykKIAkJcmV0dXJuIDA7CkBAIC05NDgsMTUgKzkwOSwxNSBAQAogCQkJ cmV0dXJuIDE7CiAJCX0KIAotCQl0eGQgPSBobl90eGRlc2NfZ2V0KHNjKTsKKwkJdHhkID0gaG5f dHhkZXNjX2dldCh0eHIpOwogCQlpZiAodHhkID09IE5VTEwpIHsKLQkJCXNjLT5obl9ub190eGRl c2NzKys7CisJCQl0eHItPmhuX25vX3R4ZGVzY3MrKzsKIAkJCUlGX1BSRVBFTkQoJmlmcC0+aWZf c25kLCBtX2hlYWQpOwogCQkJYXRvbWljX3NldF9pbnQoJmlmcC0+aWZfZHJ2X2ZsYWdzLCBJRkZf RFJWX09BQ1RJVkUpOwogCQkJYnJlYWs7CiAJCX0KIAotCQllcnJvciA9IGhuX2VuY2FwKHNjLCB0 eGQsICZtX2hlYWQpOworCQllcnJvciA9IGhuX2VuY2FwKHR4ciwgdHhkLCAmbV9oZWFkKTsKIAkJ aWYgKGVycm9yKSB7CiAJCQkvKiBCb3RoIHR4ZCBhbmQgbV9oZWFkIGFyZSBmcmVlZCAqLwogCQkJ Y29udGludWU7CkBAIC05NzEsNyArOTMyLDcgQEAKIAkJCUVUSEVSX0JQRl9NVEFQKGlmcCwgbV9o ZWFkKTsKIAkJCWlmX2luY19jb3VudGVyKGlmcCwgSUZDT1VOVEVSX09QQUNLRVRTLCAxKTsKIAkJ fQotCQlobl90eGRlc2NfcHV0KHNjLCB0eGQpOworCQlobl90eGRlc2NfcHV0KHR4ciwgdHhkKTsK IAogCQlpZiAoX19wcmVkaWN0X2ZhbHNlKGVycm9yKSkgewogCQkJaW50IGZyZWVkOwpAQCAtOTgz LDkgKzk0NCw5IEBACiAJCQkgKiBjb21tYW5kcyB0byBydW4/ICBBc2sgbmV0dnNjX2NoYW5uZWxf cm9sbHVwKCkKIAkJCSAqIHRvIGtpY2sgc3RhcnQgbGF0ZXIuCiAJCQkgKi8KLQkJCXNjLT5obl90 eGVvZiA9IDE7CisJCQl0eHItPmhuX3R4ZW9mID0gMTsKIAkJCWlmICghc2VuZF9mYWlsZWQpIHsK LQkJCQlzYy0+aG5fc2VuZF9mYWlsZWQrKzsKKwkJCQl0eHItPmhuX3NlbmRfZmFpbGVkKys7CiAJ CQkJc2VuZF9mYWlsZWQgPSAxOwogCQkJCS8qCiAJCQkJICogVHJ5IHNlbmRpbmcgYWdhaW4gYWZ0 ZXIgc2V0IGhuX3R4ZW9mOwpAQCAtMTAwMiwxMSArOTYzLDExIEBACiAJCQkgKiBETUEgbWFwIGlu IGhuX3R4ZGVzY19wdXQoKSwgaWYgaXQgd2FzIGxvYWRlZC4KIAkJCSAqLwogCQkJdHhkLT5tID0g TlVMTDsKLQkJCWZyZWVkID0gaG5fdHhkZXNjX3B1dChzYywgdHhkKTsKKwkJCWZyZWVkID0gaG5f dHhkZXNjX3B1dCh0eHIsIHR4ZCk7CiAJCQlLQVNTRVJUKGZyZWVkICE9IDAsCiAJCQkgICAgKCJm YWlsIHRvIGZyZWUgdHhkIHVwb24gc2VuZCBlcnJvciIpKTsKIAotCQkJc2MtPmhuX3NlbmRfZmFp bGVkKys7CisJCQl0eHItPmhuX3NlbmRfZmFpbGVkKys7CiAJCQlJRl9QUkVQRU5EKCZpZnAtPmlm X3NuZCwgbV9oZWFkKTsKIAkJCWF0b21pY19zZXRfaW50KCZpZnAtPmlmX2Rydl9mbGFncywgSUZG X0RSVl9PQUNUSVZFKTsKIAkJCWJyZWFrOwpAQCAtMTM4NCw4ICsxMzQ1LDEwIEBACiAJCX0KIAog CQlzYy0+aG5fdHhfY2hpbW5leV9tYXggPSBzYy0+bmV0X2Rldi0+c2VuZF9zZWN0aW9uX3NpemU7 Ci0JCWlmIChzYy0+aG5fdHhfY2hpbW5leV9zaXplID4gc2MtPmhuX3R4X2NoaW1uZXlfbWF4KQot CQkJc2MtPmhuX3R4X2NoaW1uZXlfc2l6ZSA9IHNjLT5obl90eF9jaGltbmV5X21heDsKKwkJaWYg KHNjLT5obl90eF9yaW5nWzBdLmhuX3R4X2NoaW1uZXlfc2l6ZSA+CisJCSAgICBzYy0+aG5fdHhf Y2hpbW5leV9tYXgpCisJCQlobl9zZXRfdHhfY2hpbW5leV9zaXplKHNjLCBzYy0+aG5fdHhfY2hp bW5leV9tYXgpOworCiAJCWhuX2lmaW5pdF9sb2NrZWQoc2MpOwogCiAJCU5WX0xPQ0soc2MpOwpA QCAtMTQ1MCwxMCArMTQxMywxMyBAQAogCQltYXNrID0gaWZyLT5pZnJfcmVxY2FwIF4gaWZwLT5p Zl9jYXBlbmFibGU7CiAJCWlmIChtYXNrICYgSUZDQVBfVFhDU1VNKSB7CiAJCQlpZnAtPmlmX2Nh cGVuYWJsZSBePSBJRkNBUF9UWENTVU07Ci0JCQlpZiAoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNB UF9UWENTVU0pCi0JCQkJaWZwLT5pZl9od2Fzc2lzdCB8PSBzYy0+aG5fY3N1bV9hc3Npc3Q7Ci0J CQllbHNlCi0JCQkJaWZwLT5pZl9od2Fzc2lzdCAmPSB+c2MtPmhuX2NzdW1fYXNzaXN0OworCQkJ aWYgKGlmcC0+aWZfY2FwZW5hYmxlICYgSUZDQVBfVFhDU1VNKSB7CisJCQkJaWZwLT5pZl9od2Fz c2lzdCB8PQorCQkJCSAgICBzYy0+aG5fdHhfcmluZ1swXS5obl9jc3VtX2Fzc2lzdDsKKwkJCX0g ZWxzZSB7CisJCQkJaWZwLT5pZl9od2Fzc2lzdCAmPQorCQkJCSAgICB+c2MtPmhuX3R4X3Jpbmdb MF0uaG5fY3N1bV9hc3Npc3Q7CisJCQl9CiAJCX0KIAogCQlpZiAobWFzayAmIElGQ0FQX1JYQ1NV TSkKQEAgLTE1MzYsNDggKzE1MDIsNTQgQEAKIGhuX3N0YXJ0KHN0cnVjdCBpZm5ldCAqaWZwKQog ewogCXN0cnVjdCBobl9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCXN0cnVjdCBobl90eF9y aW5nICp0eHIgPSAmc2MtPmhuX3R4X3JpbmdbMF07CiAKLQlpZiAoc2MtPmhuX3NjaGVkX3R4KQor CWlmICh0eHItPmhuX3NjaGVkX3R4KQogCQlnb3RvIGRvX3NjaGVkOwogCi0JaWYgKE5WX1RSWUxP Q0soc2MpKSB7CisJaWYgKG10eF90cnlsb2NrKCZ0eHItPmhuX3R4X2xvY2spKSB7CiAJCWludCBz Y2hlZDsKIAotCQlzY2hlZCA9IGhuX3N0YXJ0X2xvY2tlZChpZnAsIHNjLT5obl9kaXJlY3RfdHhf c2l6ZSk7Ci0JCU5WX1VOTE9DSyhzYyk7CisJCXNjaGVkID0gaG5fc3RhcnRfbG9ja2VkKHR4ciwg dHhyLT5obl9kaXJlY3RfdHhfc2l6ZSk7CisJCW10eF91bmxvY2soJnR4ci0+aG5fdHhfbG9jayk7 CiAJCWlmICghc2NoZWQpCiAJCQlyZXR1cm47CiAJfQogZG9fc2NoZWQ6Ci0JdGFza3F1ZXVlX2Vu cXVldWUoc2MtPmhuX3R4X3Rhc2txLCAmc2MtPmhuX3N0YXJ0X3Rhc2spOworCXRhc2txdWV1ZV9l bnF1ZXVlKHR4ci0+aG5fdHhfdGFza3EsICZ0eHItPmhuX3N0YXJ0X3Rhc2spOwogfQogCiBzdGF0 aWMgdm9pZAotaG5fc3RhcnRfdHhlb2Yoc3RydWN0IGlmbmV0ICppZnApCitobl9zdGFydF90eGVv ZihzdHJ1Y3QgaG5fdHhfcmluZyAqdHhyKQogewotCXN0cnVjdCBobl9zb2Z0YyAqc2MgPSBpZnAt PmlmX3NvZnRjOworCXN0cnVjdCBobl9zb2Z0YyAqc2MgPSB0eHItPmhuX3NjOworCXN0cnVjdCBp Zm5ldCAqaWZwID0gc2MtPmhuX2lmcDsKKworCUtBU1NFUlQodHhyID09ICZzYy0+aG5fdHhfcmlu Z1swXSwgKCJub3QgdGhlIGZpcnN0IFRYIHJpbmciKSk7CiAKLQlpZiAoc2MtPmhuX3NjaGVkX3R4 KQorCWlmICh0eHItPmhuX3NjaGVkX3R4KQogCQlnb3RvIGRvX3NjaGVkOwogCi0JaWYgKE5WX1RS WUxPQ0soc2MpKSB7CisJaWYgKG10eF90cnlsb2NrKCZ0eHItPmhuX3R4X2xvY2spKSB7CiAJCWlu dCBzY2hlZDsKIAogCQlhdG9taWNfY2xlYXJfaW50KCZpZnAtPmlmX2Rydl9mbGFncywgSUZGX0RS Vl9PQUNUSVZFKTsKLQkJc2NoZWQgPSBobl9zdGFydF9sb2NrZWQoaWZwLCBzYy0+aG5fZGlyZWN0 X3R4X3NpemUpOwotCQlOVl9VTkxPQ0soc2MpOwotCQlpZiAoc2NoZWQpCi0JCQl0YXNrcXVldWVf ZW5xdWV1ZShzYy0+aG5fdHhfdGFza3EsICZzYy0+aG5fc3RhcnRfdGFzayk7CisJCXNjaGVkID0g aG5fc3RhcnRfbG9ja2VkKHR4ciwgdHhyLT5obl9kaXJlY3RfdHhfc2l6ZSk7CisJCW10eF91bmxv Y2soJnR4ci0+aG5fdHhfbG9jayk7CisJCWlmIChzY2hlZCkgeworCQkJdGFza3F1ZXVlX2VucXVl dWUodHhyLT5obl90eF90YXNrcSwKKwkJCSAgICAmdHhyLT5obl9zdGFydF90YXNrKTsKKwkJfQog CX0gZWxzZSB7CiBkb19zY2hlZDoKIAkJLyoKIAkJICogUmVsZWFzZSB0aGUgT0FDVElWRSBlYXJs aWVyLCB3aXRoIHRoZSBob3BlLCB0aGF0CiAJCSAqIG90aGVycyBjb3VsZCBjYXRjaCB1cC4gIFRo ZSB0YXNrIHdpbGwgY2xlYXIgdGhlCi0JCSAqIGZsYWcgYWdhaW4gd2l0aCB0aGUgTlZfTE9DSyB0 byBhdm9pZCBwb3NzaWJsZQorCQkgKiBmbGFnIGFnYWluIHdpdGggdGhlIGhuX3R4X2xvY2sgdG8g YXZvaWQgcG9zc2libGUKIAkJICogcmFjZXMuCiAJCSAqLwogCQlhdG9taWNfY2xlYXJfaW50KCZp ZnAtPmlmX2Rydl9mbGFncywgSUZGX0RSVl9PQUNUSVZFKTsKLQkJdGFza3F1ZXVlX2VucXVldWUo c2MtPmhuX3R4X3Rhc2txLCAmc2MtPmhuX3R4ZW9mX3Rhc2spOworCQl0YXNrcXVldWVfZW5xdWV1 ZSh0eHItPmhuX3R4X3Rhc2txLCAmdHhyLT5obl90eGVvZl90YXNrKTsKIAl9CiB9CiAKQEAgLTE3 MzYsMTYgKzE3MDgsMTUgQEAKIAlzdHJ1Y3QgaG5fc29mdGMgKnNjID0gYXJnMTsKIAlpbnQgY2hp bW5leV9zaXplLCBlcnJvcjsKIAotCWNoaW1uZXlfc2l6ZSA9IHNjLT5obl90eF9jaGltbmV5X3Np emU7CisJY2hpbW5leV9zaXplID0gc2MtPmhuX3R4X3JpbmdbMF0uaG5fdHhfY2hpbW5leV9zaXpl OwogCWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJmNoaW1uZXlfc2l6ZSwgMCwgcmVx KTsKIAlpZiAoZXJyb3IgfHwgcmVxLT5uZXdwdHIgPT0gTlVMTCkKIAkJcmV0dXJuIGVycm9yOwog CiAJaWYgKGNoaW1uZXlfc2l6ZSA+IHNjLT5obl90eF9jaGltbmV5X21heCB8fCBjaGltbmV5X3Np emUgPD0gMCkKIAkJcmV0dXJuIEVJTlZBTDsKIAotCWlmIChzYy0+aG5fdHhfY2hpbW5leV9zaXpl ICE9IGNoaW1uZXlfc2l6ZSkKLQkJc2MtPmhuX3R4X2NoaW1uZXlfc2l6ZSA9IGNoaW1uZXlfc2l6 ZTsKKwlobl9zZXRfdHhfY2hpbW5leV9zaXplKHNjLCBjaGltbmV5X3NpemUpOwogCXJldHVybiAw OwogfQogCkBAIC0xODAyLDYgKzE3NzMsNTYgQEAKIH0KIAogc3RhdGljIGludAoraG5fdHhfc3Rh dF91bG9uZ19zeXNjdGwoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgaG5fc29mdGMg KnNjID0gYXJnMTsKKwlpbnQgb2ZzID0gYXJnMiwgaSwgZXJyb3I7CisJc3RydWN0IGhuX3R4X3Jp bmcgKnR4cjsKKwl1X2xvbmcgc3RhdDsKKworCXN0YXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBz Yy0+aG5fdHhfcmluZ19jbnQ7ICsraSkgeworCQl0eHIgPSAmc2MtPmhuX3R4X3JpbmdbaV07CisJ CXN0YXQgKz0gKigodV9sb25nICopKCh1aW50OF90ICopdHhyICsgb2ZzKSk7CisJfQorCisJZXJy b3IgPSBzeXNjdGxfaGFuZGxlX2xvbmcob2lkcCwgJnN0YXQsIDAsIHJlcSk7CisJaWYgKGVycm9y IHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVybiBlcnJvcjsKKworCS8qIFplcm8gb3V0 IHRoaXMgc3RhdC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2MtPmhuX3R4X3JpbmdfY250OyArK2kp IHsKKwkJdHhyID0gJnNjLT5obl90eF9yaW5nW2ldOworCQkqKCh1X2xvbmcgKikoKHVpbnQ4X3Qg Kil0eHIgKyBvZnMpKSA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citobl90 eF9jb25mX2ludF9zeXNjdGwoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgaG5fc29m dGMgKnNjID0gYXJnMTsKKwlpbnQgb2ZzID0gYXJnMiwgaSwgZXJyb3IsIGNvbmY7CisJc3RydWN0 IGhuX3R4X3JpbmcgKnR4cjsKKworCXR4ciA9ICZzYy0+aG5fdHhfcmluZ1swXTsKKwljb25mID0g KigoaW50ICopKCh1aW50OF90ICopdHhyICsgb2ZzKSk7CisKKwllcnJvciA9IHN5c2N0bF9oYW5k bGVfaW50KG9pZHAsICZjb25mLCAwLCByZXEpOworCWlmIChlcnJvciB8fCByZXEtPm5ld3B0ciA9 PSBOVUxMKQorCQlyZXR1cm4gZXJyb3I7CisKKwlOVl9MT0NLKHNjKTsKKwlmb3IgKGkgPSAwOyBp IDwgc2MtPmhuX3R4X3JpbmdfY250OyArK2kpIHsKKwkJdHhyID0gJnNjLT5obl90eF9yaW5nW2ld OworCQkqKChpbnQgKikoKHVpbnQ4X3QgKil0eHIgKyBvZnMpKSA9IGNvbmY7CisJfQorCU5WX1VO TE9DSyhzYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAogaG5fY2hlY2tfaXBsZW4o Y29uc3Qgc3RydWN0IG1idWYgKm0sIGludCBob2ZmKQogewogCWNvbnN0IHN0cnVjdCBpcCAqaXA7 CkBAIC0yMDE5LDE2ICsyMDQwLDM3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWhuX2NyZWF0ZV90eF9y aW5nKHN0cnVjdCBobl9zb2Z0YyAqc2MpCitobl9jcmVhdGVfdHhfcmluZyhzdHJ1Y3QgaG5fc29m dGMgKnNjLCBpbnQgaWQpCiB7CisJc3RydWN0IGhuX3R4X3JpbmcgKnR4ciA9ICZzYy0+aG5fdHhf cmluZ1tpZF07CiAJYnVzX2RtYV90YWdfdCBwYXJlbnRfZHRhZzsKIAlpbnQgZXJyb3IsIGk7CiAK LQlzYy0+aG5fdHhkZXNjX2NudCA9IEhOX1RYX0RFU0NfQ05UOwotCXNjLT5obl90eGRlc2MgPSBt YWxsb2Moc2l6ZW9mKHN0cnVjdCBobl90eGRlc2MpICogc2MtPmhuX3R4ZGVzY19jbnQsCisJdHhy LT5obl9zYyA9IHNjOworCisJbXR4X2luaXQoJnR4ci0+aG5fdHhsaXN0X3NwaW4sICJobiB0eGxp c3QiLCBOVUxMLCBNVFhfU1BJTik7CisJbXR4X2luaXQoJnR4ci0+aG5fdHhfbG9jaywgImhuIHR4 IiwgTlVMTCwgTVRYX0RFRik7CisKKwl0eHItPmhuX3R4ZGVzY19jbnQgPSBITl9UWF9ERVNDX0NO VDsKKwl0eHItPmhuX3R4ZGVzYyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGhuX3R4ZGVzYykgKiB0 eHItPmhuX3R4ZGVzY19jbnQsCiAJICAgIE1fTkVUVlNDLCBNX1dBSVRPSyB8IE1fWkVSTyk7Ci0J U0xJU1RfSU5JVCgmc2MtPmhuX3R4bGlzdCk7Ci0JbXR4X2luaXQoJnNjLT5obl90eGxpc3Rfc3Bp biwgImhuIHR4bGlzdCIsIE5VTEwsIE1UWF9TUElOKTsKKwlTTElTVF9JTklUKCZ0eHItPmhuX3R4 bGlzdCk7CisKKwl0eHItPmhuX3R4X3Rhc2txID0gc2MtPmhuX3R4X3Rhc2txOworCVRBU0tfSU5J VCgmdHhyLT5obl9zdGFydF90YXNrLCAwLCBobl9zdGFydF90YXNrZnVuYywgdHhyKTsKKwlUQVNL X0lOSVQoJnR4ci0+aG5fdHhlb2ZfdGFzaywgMCwgaG5fdHhlb2ZfdGFza2Z1bmMsIHR4cik7CisK Kwl0eHItPmhuX2RpcmVjdF90eF9zaXplID0gaG5fZGlyZWN0X3R4X3NpemU7CisJaWYgKGh2X3Zt YnVzX3Byb3RvY2FsX3ZlcnNpb24gPj0gSFZfVk1CVVNfVkVSU0lPTl9XSU44XzEpCisJCXR4ci0+ aG5fY3N1bV9hc3Npc3QgPSBITl9DU1VNX0FTU0lTVDsKKwllbHNlCisJCXR4ci0+aG5fY3N1bV9h c3Npc3QgPSBITl9DU1VNX0FTU0lTVF9XSU44OworCisJLyoKKwkgKiBBbHdheXMgc2NoZWR1bGUg dHJhbnNtaXNzaW9uIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGRvIGRpcmVjdAorCSAqIHRyYW5zbWlz c2lvbi4gIFRoaXMgb25lIGdpdmVzIHRoZSBiZXN0IHBlcmZvcm1hbmNlIHNvIGZhci4KKwkgKi8K Kwl0eHItPmhuX3NjaGVkX3R4ID0gMTsKIAogCXBhcmVudF9kdGFnID0gYnVzX2dldF9kbWFfdGFn KHNjLT5obl9kZXYpOwogCkBAIC0yMDQ1LDcgKzIwODcsNyBAQAogCSAgICAwLAkJCQkvKiBmbGFn cyAqLwogCSAgICBOVUxMLAkJCS8qIGxvY2tmdW5jICovCiAJICAgIE5VTEwsCQkJLyogbG9ja2Z1 bmNhcmcgKi8KLQkgICAgJnNjLT5obl90eF9ybmRpc19kdGFnKTsKKwkgICAgJnR4ci0+aG5fdHhf cm5kaXNfZHRhZyk7CiAJaWYgKGVycm9yKSB7CiAJCWRldmljZV9wcmludGYoc2MtPmhuX2Rldiwg ImZhaWxlZCB0byBjcmVhdGUgcm5kaXMgZG1hdGFnXG4iKTsKIAkJcmV0dXJuIGVycm9yOwpAQCAt MjA2NCwyMSArMjEwNiwyMSBAQAogCSAgICAwLAkJCQkvKiBmbGFncyAqLwogCSAgICBOVUxMLAkJ CS8qIGxvY2tmdW5jICovCiAJICAgIE5VTEwsCQkJLyogbG9ja2Z1bmNhcmcgKi8KLQkgICAgJnNj LT5obl90eF9kYXRhX2R0YWcpOworCSAgICAmdHhyLT5obl90eF9kYXRhX2R0YWcpOwogCWlmIChl cnJvcikgewogCQlkZXZpY2VfcHJpbnRmKHNjLT5obl9kZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRh dGEgZG1hdGFnXG4iKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBz Yy0+aG5fdHhkZXNjX2NudDsgKytpKSB7Ci0JCXN0cnVjdCBobl90eGRlc2MgKnR4ZCA9ICZzYy0+ aG5fdHhkZXNjW2ldOworCWZvciAoaSA9IDA7IGkgPCB0eHItPmhuX3R4ZGVzY19jbnQ7ICsraSkg eworCQlzdHJ1Y3QgaG5fdHhkZXNjICp0eGQgPSAmdHhyLT5obl90eGRlc2NbaV07CiAKLQkJdHhk LT5zYyA9IHNjOworCQl0eGQtPnR4ciA9IHR4cjsKIAogCQkvKgogCQkgKiBBbGxvY2F0ZSBhbmQg bG9hZCBSTkRJUyBtZXNzYWdlcy4KIAkJICovCi0gICAgICAgIAllcnJvciA9IGJ1c19kbWFtZW1f YWxsb2Moc2MtPmhuX3R4X3JuZGlzX2R0YWcsCisgICAgICAgIAllcnJvciA9IGJ1c19kbWFtZW1f YWxsb2ModHhyLT5obl90eF9ybmRpc19kdGFnLAogCQkgICAgKHZvaWQgKiopJnR4ZC0+cm5kaXNf bXNnLAogCQkgICAgQlVTX0RNQV9XQUlUT0sgfCBCVVNfRE1BX0NPSEVSRU5ULAogCQkgICAgJnR4 ZC0+cm5kaXNfbXNnX2RtYXApOwpAQCAtMjA4OCw4OCArMjEzMCwyMjkgQEAKIAkJCXJldHVybiBl cnJvcjsKIAkJfQogCi0JCWVycm9yID0gYnVzX2RtYW1hcF9sb2FkKHNjLT5obl90eF9ybmRpc19k dGFnLAorCQllcnJvciA9IGJ1c19kbWFtYXBfbG9hZCh0eHItPmhuX3R4X3JuZGlzX2R0YWcsCiAJ CSAgICB0eGQtPnJuZGlzX21zZ19kbWFwLAogCQkgICAgdHhkLT5ybmRpc19tc2csIEhOX1JORElT X01TR19MRU4sCiAJCSAgICBobl9kbWFfbWFwX3BhZGRyLCAmdHhkLT5ybmRpc19tc2dfcGFkZHIs CiAJCSAgICBCVVNfRE1BX05PV0FJVCk7CiAJCWlmIChlcnJvcikgewogCQkJZGV2aWNlX3ByaW50 ZihzYy0+aG5fZGV2LAogCQkJICAgICJmYWlsZWQgdG8gbG9hZCBybmRpc19tc2csICVkXG4iLCBp KTsKLQkJCWJ1c19kbWFtZW1fZnJlZShzYy0+aG5fdHhfcm5kaXNfZHRhZywKKwkJCWJ1c19kbWFt ZW1fZnJlZSh0eHItPmhuX3R4X3JuZGlzX2R0YWcsCiAJCQkgICAgdHhkLT5ybmRpc19tc2csIHR4 ZC0+cm5kaXNfbXNnX2RtYXApOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAKIAkJLyogRE1BIG1h cCBmb3IgVFggZGF0YS4gKi8KLQkJZXJyb3IgPSBidXNfZG1hbWFwX2NyZWF0ZShzYy0+aG5fdHhf ZGF0YV9kdGFnLCAwLAorCQllcnJvciA9IGJ1c19kbWFtYXBfY3JlYXRlKHR4ci0+aG5fdHhfZGF0 YV9kdGFnLCAwLAogCQkgICAgJnR4ZC0+ZGF0YV9kbWFwKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlk ZXZpY2VfcHJpbnRmKHNjLT5obl9kZXYsCiAJCQkgICAgImZhaWxlZCB0byBhbGxvY2F0ZSB0eCBk YXRhIGRtYW1hcFxuIik7Ci0JCQlidXNfZG1hbWFwX3VubG9hZChzYy0+aG5fdHhfcm5kaXNfZHRh ZywKKwkJCWJ1c19kbWFtYXBfdW5sb2FkKHR4ci0+aG5fdHhfcm5kaXNfZHRhZywKIAkJCSAgICB0 eGQtPnJuZGlzX21zZ19kbWFwKTsKLQkJCWJ1c19kbWFtZW1fZnJlZShzYy0+aG5fdHhfcm5kaXNf ZHRhZywKKwkJCWJ1c19kbWFtZW1fZnJlZSh0eHItPmhuX3R4X3JuZGlzX2R0YWcsCiAJCQkgICAg dHhkLT5ybmRpc19tc2csIHR4ZC0+cm5kaXNfbXNnX2RtYXApOwogCQkJcmV0dXJuIGVycm9yOwog CQl9CiAKIAkJLyogQWxsIHNldCwgcHV0IGl0IHRvIGxpc3QgKi8KIAkJdHhkLT5mbGFncyB8PSBI Tl9UWERfRkxBR19PTkxJU1Q7Ci0JCVNMSVNUX0lOU0VSVF9IRUFEKCZzYy0+aG5fdHhsaXN0LCB0 eGQsIGxpbmspOworCQlTTElTVF9JTlNFUlRfSEVBRCgmdHhyLT5obl90eGxpc3QsIHR4ZCwgbGlu ayk7CisJfQorCXR4ci0+aG5fdHhkZXNjX2F2YWlsID0gdHhyLT5obl90eGRlc2NfY250OworCisJ aWYgKHNjLT5obl90eF9zeXNjdGxfdHJlZSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzeXNjdGxfb2lk X2xpc3QgKmNoaWxkOworCQlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICpjdHg7CisJCWNoYXIgbmFt ZVsxNl07CisKKwkJLyoKKwkJICogQ3JlYXRlIHBlciBUWCByaW5nIHN5c2N0bCB0cmVlOgorCQkg KiBkZXYuaG4uVU5JVC50eC5SSU5HSUQKKwkJICovCisJCWN0eCA9IGRldmljZV9nZXRfc3lzY3Rs X2N0eChzYy0+aG5fZGV2KTsKKwkJY2hpbGQgPSBTWVNDVExfQ0hJTERSRU4oc2MtPmhuX3R4X3N5 c2N0bF90cmVlKTsKKworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlZCIsIGlkKTsK KwkJdHhyLT5obl90eF9zeXNjdGxfdHJlZSA9IFNZU0NUTF9BRERfTk9ERShjdHgsIGNoaWxkLCBP SURfQVVUTywKKwkJICAgIG5hbWUsIENUTEZMQUdfUkQsIDAsICIiKTsKKworCQlpZiAodHhyLT5o bl90eF9zeXNjdGxfdHJlZSAhPSBOVUxMKSB7CisJCQljaGlsZCA9IFNZU0NUTF9DSElMRFJFTih0 eHItPmhuX3R4X3N5c2N0bF90cmVlKTsKKworCQkJU1lTQ1RMX0FERF9JTlQoY3R4LCBjaGlsZCwg T0lEX0FVVE8sICJ0eGRlc2NfYXZhaWwiLAorCQkJICAgIENUTEZMQUdfUkQsICZ0eHItPmhuX3R4 ZGVzY19hdmFpbCwgMCwKKwkJCSAgICAiIyBvZiBhdmFpbGFibGUgVFggZGVzY3MiKTsKKwkJfQog CX0KLQlzYy0+aG5fdHhkZXNjX2F2YWlsID0gc2MtPmhuX3R4ZGVzY19jbnQ7CiAKIAlyZXR1cm4g MDsKIH0KIAogc3RhdGljIHZvaWQKLWhuX2Rlc3Ryb3lfdHhfcmluZyhzdHJ1Y3QgaG5fc29mdGMg KnNjKQoraG5fZGVzdHJveV90eF9yaW5nKHN0cnVjdCBobl90eF9yaW5nICp0eHIpCiB7CiAJc3Ry dWN0IGhuX3R4ZGVzYyAqdHhkOwogCi0Jd2hpbGUgKCh0eGQgPSBTTElTVF9GSVJTVCgmc2MtPmhu X3R4bGlzdCkpICE9IE5VTEwpIHsKKwlpZiAodHhyLT5obl90eGRlc2MgPT0gTlVMTCkKKwkJcmV0 dXJuOworCisJd2hpbGUgKCh0eGQgPSBTTElTVF9GSVJTVCgmdHhyLT5obl90eGxpc3QpKSAhPSBO VUxMKSB7CiAJCUtBU1NFUlQodHhkLT5tID09IE5VTEwsICgic3RpbGwgaGFzIG1idWYgaW5zdGFs bGVkIikpOwogCQlLQVNTRVJUKCh0eGQtPmZsYWdzICYgSE5fVFhEX0ZMQUdfRE1BTUFQKSA9PSAw LAogCQkgICAgKCJzdGlsbCBkbWEgbWFwcGVkIikpOwotCQlTTElTVF9SRU1PVkVfSEVBRCgmc2Mt PmhuX3R4bGlzdCwgbGluayk7CisJCVNMSVNUX1JFTU9WRV9IRUFEKCZ0eHItPmhuX3R4bGlzdCwg bGluayk7CiAKLQkJYnVzX2RtYW1hcF91bmxvYWQoc2MtPmhuX3R4X3JuZGlzX2R0YWcsCisJCWJ1 c19kbWFtYXBfdW5sb2FkKHR4ci0+aG5fdHhfcm5kaXNfZHRhZywKIAkJICAgIHR4ZC0+cm5kaXNf bXNnX2RtYXApOwotCQlidXNfZG1hbWVtX2ZyZWUoc2MtPmhuX3R4X3JuZGlzX2R0YWcsCisJCWJ1 c19kbWFtZW1fZnJlZSh0eHItPmhuX3R4X3JuZGlzX2R0YWcsCiAJCSAgICB0eGQtPnJuZGlzX21z ZywgdHhkLT5ybmRpc19tc2dfZG1hcCk7CiAKLQkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5obl90 eF9kYXRhX2R0YWcsIHR4ZC0+ZGF0YV9kbWFwKTsKKwkJYnVzX2RtYW1hcF9kZXN0cm95KHR4ci0+ aG5fdHhfZGF0YV9kdGFnLCB0eGQtPmRhdGFfZG1hcCk7CisJfQorCisJaWYgKHR4ci0+aG5fdHhf ZGF0YV9kdGFnICE9IE5VTEwpCisJCWJ1c19kbWFfdGFnX2Rlc3Ryb3kodHhyLT5obl90eF9kYXRh X2R0YWcpOworCWlmICh0eHItPmhuX3R4X3JuZGlzX2R0YWcgIT0gTlVMTCkKKwkJYnVzX2RtYV90 YWdfZGVzdHJveSh0eHItPmhuX3R4X3JuZGlzX2R0YWcpOworCWZyZWUodHhyLT5obl90eGRlc2Ms IE1fTkVUVlNDKTsKKwl0eHItPmhuX3R4ZGVzYyA9IE5VTEw7CisKKwltdHhfZGVzdHJveSgmdHhy LT5obl90eGxpc3Rfc3Bpbik7CisJbXR4X2Rlc3Ryb3koJnR4ci0+aG5fdHhfbG9jayk7Cit9CisK K3N0YXRpYyBpbnQKK2huX2NyZWF0ZV90eF9kYXRhKHN0cnVjdCBobl9zb2Z0YyAqc2MpCit7CisJ c3RydWN0IHN5c2N0bF9vaWRfbGlzdCAqY2hpbGQ7CisJc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAq Y3R4OworCWludCBpOworCisJc2MtPmhuX3R4X3JpbmdfY250ID0gMTsgLyogVE9ETzogdlJTUyAq LworCXNjLT5obl90eF9yaW5nID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG5fdHhfcmluZykgKiBz Yy0+aG5fdHhfcmluZ19jbnQsCisJICAgIE1fTkVUVlNDLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisK KwljdHggPSBkZXZpY2VfZ2V0X3N5c2N0bF9jdHgoc2MtPmhuX2Rldik7CisJY2hpbGQgPSBTWVND VExfQ0hJTERSRU4oZGV2aWNlX2dldF9zeXNjdGxfdHJlZShzYy0+aG5fZGV2KSk7CisKKwkvKiBD cmVhdGUgZGV2LmhuLlVOSVQudHggc3lzY3RsIHRyZWUgKi8KKwlzYy0+aG5fdHhfc3lzY3RsX3Ry ZWUgPSBTWVNDVExfQUREX05PREUoY3R4LCBjaGlsZCwgT0lEX0FVVE8sICJ0eCIsCisJICAgIENU TEZMQUdfUkQsIDAsICIiKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYy0+aG5fdHhfcmluZ19jbnQ7 ICsraSkgeworCQlpbnQgZXJyb3I7CisKKwkJZXJyb3IgPSBobl9jcmVhdGVfdHhfcmluZyhzYywg aSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZiAoc2MtPmhuX3R4 X2RhdGFfZHRhZyAhPSBOVUxMKQotCQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5obl90eF9kYXRh X2R0YWcpOwotCWlmIChzYy0+aG5fdHhfcm5kaXNfZHRhZyAhPSBOVUxMKQotCQlidXNfZG1hX3Rh Z19kZXN0cm95KHNjLT5obl90eF9ybmRpc19kdGFnKTsKLQlmcmVlKHNjLT5obl90eGRlc2MsIE1f TkVUVlNDKTsKLQltdHhfZGVzdHJveSgmc2MtPmhuX3R4bGlzdF9zcGluKTsKKwlTWVNDVExfQURE X1BST0MoY3R4LCBjaGlsZCwgT0lEX0FVVE8sICJub190eGRlc2NzIiwKKwkgICAgQ1RMVFlQRV9V TE9ORyB8IENUTEZMQUdfUlcsIHNjLAorCSAgICBfX29mZnNldG9mKHN0cnVjdCBobl90eF9yaW5n LCBobl9ub190eGRlc2NzKSwKKwkgICAgaG5fdHhfc3RhdF91bG9uZ19zeXNjdGwsICJMVSIsICIj IG9mIHRpbWVzIHNob3J0IG9mIFRYIGRlc2NzIik7CisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgY2hp bGQsIE9JRF9BVVRPLCAic2VuZF9mYWlsZWQiLAorCSAgICBDVExUWVBFX1VMT05HIHwgQ1RMRkxB R19SVywgc2MsCisJICAgIF9fb2Zmc2V0b2Yoc3RydWN0IGhuX3R4X3JpbmcsIGhuX3NlbmRfZmFp bGVkKSwKKwkgICAgaG5fdHhfc3RhdF91bG9uZ19zeXNjdGwsICJMVSIsICIjIG9mIGh5cGVyLXYg c2VuZGluZyBmYWlsdXJlIik7CisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgY2hpbGQsIE9JRF9BVVRP LCAidHhkbWFfZmFpbGVkIiwKKwkgICAgQ1RMVFlQRV9VTE9ORyB8IENUTEZMQUdfUlcsIHNjLAor CSAgICBfX29mZnNldG9mKHN0cnVjdCBobl90eF9yaW5nLCBobl90eGRtYV9mYWlsZWQpLAorCSAg ICBobl90eF9zdGF0X3Vsb25nX3N5c2N0bCwgIkxVIiwgIiMgb2YgVFggRE1BIGZhaWx1cmUiKTsK KwlTWVNDVExfQUREX1BST0MoY3R4LCBjaGlsZCwgT0lEX0FVVE8sICJ0eF9jb2xsYXBzZWQiLAor CSAgICBDVExUWVBFX1VMT05HIHwgQ1RMRkxBR19SVywgc2MsCisJICAgIF9fb2Zmc2V0b2Yoc3Ry dWN0IGhuX3R4X3JpbmcsIGhuX3R4X2NvbGxhcHNlZCksCisJICAgIGhuX3R4X3N0YXRfdWxvbmdf c3lzY3RsLCAiTFUiLCAiIyBvZiBUWCBtYnVmIGNvbGxhcHNlZCIpOworCVNZU0NUTF9BRERfUFJP QyhjdHgsIGNoaWxkLCBPSURfQVVUTywgInR4X2NoaW1uZXkiLAorCSAgICBDVExUWVBFX1VMT05H IHwgQ1RMRkxBR19SVywgc2MsCisJICAgIF9fb2Zmc2V0b2Yoc3RydWN0IGhuX3R4X3JpbmcsIGhu X3R4X2NoaW1uZXkpLAorCSAgICBobl90eF9zdGF0X3Vsb25nX3N5c2N0bCwgIkxVIiwgIiMgb2Yg Y2hpbW5leSBzZW5kIik7CisJU1lTQ1RMX0FERF9JTlQoY3R4LCBjaGlsZCwgT0lEX0FVVE8sICJ0 eGRlc2NfY250IiwKKwkgICAgQ1RMRkxBR19SRCwgJnNjLT5obl90eF9yaW5nWzBdLmhuX3R4ZGVz Y19jbnQsIDAsCisJICAgICIjIG9mIHRvdGFsIFRYIGRlc2NzIik7CisJU1lTQ1RMX0FERF9JTlQo Y3R4LCBjaGlsZCwgT0lEX0FVVE8sICJ0eF9jaGltbmV5X21heCIsCisJICAgIENUTEZMQUdfUkQs ICZzYy0+aG5fdHhfY2hpbW5leV9tYXgsIDAsCisJICAgICJDaGltbmV5IHNlbmQgcGFja2V0IHNp emUgdXBwZXIgYm91bmRhcnkiKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCBjaGlsZCwgT0lEX0FV VE8sICJ0eF9jaGltbmV5X3NpemUiLAorCSAgICBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcsIHNj LCAwLCBobl90eF9jaGltbmV5X3NpemVfc3lzY3RsLAorCSAgICAiSSIsICJDaGltbmV5IHNlbmQg cGFja2V0IHNpemUgbGltaXQiKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCBjaGlsZCwgT0lEX0FV VE8sICJkaXJlY3RfdHhfc2l6ZSIsCisJICAgIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywgc2Ms CisJICAgIF9fb2Zmc2V0b2Yoc3RydWN0IGhuX3R4X3JpbmcsIGhuX2RpcmVjdF90eF9zaXplKSwK KwkgICAgaG5fdHhfY29uZl9pbnRfc3lzY3RsLCAiSSIsCisJICAgICJTaXplIG9mIHRoZSBwYWNr ZXQgZm9yIGRpcmVjdCB0cmFuc21pc3Npb24iKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCBjaGls ZCwgT0lEX0FVVE8sICJzY2hlZF90eCIsCisJICAgIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywg c2MsCisJICAgIF9fb2Zmc2V0b2Yoc3RydWN0IGhuX3R4X3JpbmcsIGhuX3NjaGVkX3R4KSwKKwkg ICAgaG5fdHhfY29uZl9pbnRfc3lzY3RsLCAiSSIsCisJICAgICJBbHdheXMgc2NoZWR1bGUgdHJh bnNtaXNzaW9uICIKKwkgICAgImluc3RlYWQgb2YgZG9pbmcgZGlyZWN0IHRyYW5zbWlzc2lvbiIp OworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCi1obl9zdGFydF90YXNrZnVuYyh2b2lk ICp4c2MsIGludCBwZW5kaW5nIF9fdW51c2VkKQoraG5fc2V0X3R4X2NoaW1uZXlfc2l6ZShzdHJ1 Y3QgaG5fc29mdGMgKnNjLCBpbnQgY2hpbW5leV9zaXplKQogewotCXN0cnVjdCBobl9zb2Z0YyAq c2MgPSB4c2M7CisJaW50IGk7CiAKIAlOVl9MT0NLKHNjKTsKLQlobl9zdGFydF9sb2NrZWQoc2Mt PmhuX2lmcCwgMCk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5obl90eF9yaW5nX2NudDsgKytpKQor CQlzYy0+aG5fdHhfcmluZ1tpXS5obl90eF9jaGltbmV5X3NpemUgPSBjaGltbmV5X3NpemU7CiAJ TlZfVU5MT0NLKHNjKTsKIH0KIAogc3RhdGljIHZvaWQKLWhuX3R4ZW9mX3Rhc2tmdW5jKHZvaWQg KnhzYywgaW50IHBlbmRpbmcgX191bnVzZWQpCitobl9kZXN0cm95X3R4X2RhdGEoc3RydWN0IGhu X3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgaG5fc29mdGMgKnNjID0geHNjOwotCXN0cnVjdCBpZm5l dCAqaWZwID0gc2MtPmhuX2lmcDsKKwlpbnQgaTsKIAotCU5WX0xPQ0soc2MpOwotCWF0b21pY19j bGVhcl9pbnQoJmlmcC0+aWZfZHJ2X2ZsYWdzLCBJRkZfRFJWX09BQ1RJVkUpOwotCWhuX3N0YXJ0 X2xvY2tlZChpZnAsIDApOwotCU5WX1VOTE9DSyhzYyk7CisJaWYgKHNjLT5obl90eF9yaW5nX2Nu dCA9PSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPmhuX3R4X3JpbmdfY250 OyArK2kpCisJCWhuX2Rlc3Ryb3lfdHhfcmluZygmc2MtPmhuX3R4X3JpbmdbaV0pOworCisJZnJl ZShzYy0+aG5fdHhfcmluZywgTV9ORVRWU0MpOworCXNjLT5obl90eF9yaW5nID0gTlVMTDsKKwor CXNjLT5obl90eF9yaW5nX2NudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitobl9zdGFydF90YXNr ZnVuYyh2b2lkICp4dHhyLCBpbnQgcGVuZGluZyBfX3VudXNlZCkKK3sKKwlzdHJ1Y3QgaG5fdHhf cmluZyAqdHhyID0geHR4cjsKKworCW10eF9sb2NrKCZ0eHItPmhuX3R4X2xvY2spOworCWhuX3N0 YXJ0X2xvY2tlZCh0eHIsIDApOworCW10eF91bmxvY2soJnR4ci0+aG5fdHhfbG9jayk7Cit9CisK K3N0YXRpYyB2b2lkCitobl90eGVvZl90YXNrZnVuYyh2b2lkICp4dHhyLCBpbnQgcGVuZGluZyBf X3VudXNlZCkKK3sKKwlzdHJ1Y3QgaG5fdHhfcmluZyAqdHhyID0geHR4cjsKKworCW10eF9sb2Nr KCZ0eHItPmhuX3R4X2xvY2spOworCWF0b21pY19jbGVhcl9pbnQoJnR4ci0+aG5fc2MtPmhuX2lm cC0+aWZfZHJ2X2ZsYWdzLCBJRkZfRFJWX09BQ1RJVkUpOworCWhuX3N0YXJ0X2xvY2tlZCh0eHIs IDApOworCW10eF91bmxvY2soJnR4ci0+aG5fdHhfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCito bl9zdG9wX3R4X3Rhc2tzKHN0cnVjdCBobl9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgc2MtPmhuX3R4X3JpbmdfY250OyArK2kpIHsKKwkJc3RydWN0IGhuX3R4X3Jp bmcgKnR4ciA9ICZzYy0+aG5fdHhfcmluZ1tpXTsKKworCQl0YXNrcXVldWVfZHJhaW4odHhyLT5o bl90eF90YXNrcSwgJnR4ci0+aG5fc3RhcnRfdGFzayk7CisJCXRhc2txdWV1ZV9kcmFpbih0eHIt PmhuX3R4X3Rhc2txLCAmdHhyLT5obl90eGVvZl90YXNrKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lk CmRpZmYgLS1naXQgYS9zeXMvZGV2L2h5cGVydi9uZXR2c2MvaHZfbmV0X3ZzYy5oIGIvc3lzL2Rl di9oeXBlcnYvbmV0dnNjL2h2X25ldF92c2MuaAotLS0gYS9zeXMvZGV2L2h5cGVydi9uZXR2c2Mv aHZfbmV0X3ZzYy5oCisrKyBiL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9uZXRfdnNjLmgKQEAg LTEwMTEsNiArMTAxMSwzOCBAQAogI2RlZmluZSBITl9UUlVTVF9IQ1NVTV9UQ1AJMHgwMDAyCiAj ZGVmaW5lIEhOX1RSVVNUX0hDU1VNX1VEUAkweDAwMDQKIAorc3RydWN0IGhuX3R4X3Jpbmcgewor CXN0cnVjdCBtdHgJaG5fdHhsaXN0X3NwaW47CisJc3RydWN0IGhuX3R4ZGVzY19saXN0IGhuX3R4 bGlzdDsKKwlpbnQJCWhuX3R4ZGVzY19jbnQ7CisJaW50CQlobl90eGRlc2NfYXZhaWw7CisJaW50 CQlobl90eGVvZjsKKworCWludAkJaG5fc2NoZWRfdHg7CisJc3RydWN0IHRhc2txdWV1ZSAqaG5f dHhfdGFza3E7CisJc3RydWN0IHRhc2sJaG5fc3RhcnRfdGFzazsKKwlzdHJ1Y3QgdGFzawlobl90 eGVvZl90YXNrOworCisJc3RydWN0IG10eAlobl90eF9sb2NrOworCXN0cnVjdCBobl9zb2Z0Ywkq aG5fc2M7CisKKwlpbnQJCWhuX2RpcmVjdF90eF9zaXplOworCWludAkJaG5fdHhfY2hpbW5leV9z aXplOworCWJ1c19kbWFfdGFnX3QJaG5fdHhfZGF0YV9kdGFnOworCXVpbnQ2NF90CWhuX2NzdW1f YXNzaXN0OworCisJdV9sb25nCQlobl9ub190eGRlc2NzOworCXVfbG9uZwkJaG5fc2VuZF9mYWls ZWQ7CisJdV9sb25nCQlobl90eGRtYV9mYWlsZWQ7CisJdV9sb25nCQlobl90eF9jb2xsYXBzZWQ7 CisJdV9sb25nCQlobl90eF9jaGltbmV5OworCisJLyogUmFyZWx5IHVzZWQgc3R1ZmZzICovCisJ c3RydWN0IGhuX3R4ZGVzYyAqaG5fdHhkZXNjOworCWJ1c19kbWFfdGFnX3QJaG5fdHhfcm5kaXNf ZHRhZzsKKwlzdHJ1Y3Qgc3lzY3RsX29pZCAqaG5fdHhfc3lzY3RsX3RyZWU7Cit9IF9fYWxpZ25l ZChDQUNIRV9MSU5FX1NJWkUpOworCiAvKgogICogRGV2aWNlLXNwZWNpZmljIHNvZnRjIHN0cnVj dHVyZQogICovCkBAIC0xMDI4LDMzICsxMDYwLDE0IEBACiAJc3RydWN0IGh2X2RldmljZSAgKmhu X2Rldl9vYmo7CiAJbmV0dnNjX2RldiAgCSpuZXRfZGV2OwogCi0Jc3RydWN0IGhuX3R4ZGVzYyAq aG5fdHhkZXNjOwotCWJ1c19kbWFfdGFnX3QJaG5fdHhfZGF0YV9kdGFnOwotCWJ1c19kbWFfdGFn X3QJaG5fdHhfcm5kaXNfZHRhZzsKLQlpbnQJCWhuX3R4X2NoaW1uZXlfc2l6ZTsKLQlpbnQJCWhu X3R4X2NoaW1uZXlfbWF4OwotCXVpbnQ2NF90CWhuX2NzdW1fYXNzaXN0OwotCi0Jc3RydWN0IG10 eAlobl90eGxpc3Rfc3BpbjsKLQlzdHJ1Y3QgaG5fdHhkZXNjX2xpc3QgaG5fdHhsaXN0OwotCWlu dAkJaG5fdHhkZXNjX2NudDsKLQlpbnQJCWhuX3R4ZGVzY19hdmFpbDsKLQlpbnQJCWhuX3R4ZW9m OwotCi0JaW50CQlobl9zY2hlZF90eDsKLQlpbnQJCWhuX2RpcmVjdF90eF9zaXplOwotCXN0cnVj dCB0YXNrcXVldWUgKmhuX3R4X3Rhc2txOwotCXN0cnVjdCB0YXNrCWhuX3N0YXJ0X3Rhc2s7Ci0J c3RydWN0IHRhc2sJaG5fdHhlb2ZfdGFzazsKLQogCWludAkJaG5fcnhfcmluZ19jbnQ7CiAJc3Ry dWN0IGhuX3J4X3JpbmcgKmhuX3J4X3Jpbmc7CiAKLQl1X2xvbmcJCWhuX25vX3R4ZGVzY3M7Ci0J dV9sb25nCQlobl9zZW5kX2ZhaWxlZDsKLQl1X2xvbmcJCWhuX3R4ZG1hX2ZhaWxlZDsKLQl1X2xv bmcJCWhuX3R4X2NvbGxhcHNlZDsKLQl1X2xvbmcJCWhuX3R4X2NoaW1uZXk7CisJaW50CQlobl90 eF9yaW5nX2NudDsKKwlzdHJ1Y3QgaG5fdHhfcmluZyAqaG5fdHhfcmluZzsKKwlpbnQJCWhuX3R4 X2NoaW1uZXlfbWF4OworCXN0cnVjdCB0YXNrcXVldWUgKmhuX3R4X3Rhc2txOworCXN0cnVjdCBz eXNjdGxfb2lkICpobl90eF9zeXNjdGxfdHJlZTsKIH0gaG5fc29mdGNfdDsKIAogLyoKCg== --b1_978c101e263eea487e36cfb26c6cb168--