From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [CI 1/2] drm/i915/perf: Wean ourselves off dev_priv Date: Mon, 7 Oct 2019 22:09:41 +0100 Message-ID: <20191007210942.18145-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id B18446E14E for ; Mon, 7 Oct 2019 21:09:52 +0000 (UTC) Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 18757003-1500050 for ; Mon, 07 Oct 2019 22:09:47 +0100 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VXNlIHRoZSBsb2NhbCB1bmNvcmUgYWNjZXNzb3JzIGZvciB0aGUgR1QgcmF0aGVyIHRoYW4gdXNp bmcgdGhlIFtub3Qtc29dCm1hZ2ljIGdsb2JhbCBkZXZfcHJpdiBtbWlvIHJvdXRpbmVzLiBJbiB0 aGUgcHJvY2Vzcywgd2UgYWxzbyB0ZWFjaCB0aGUKcGVyZiBzdHJlYW0gdG8gdXNlIGJhY2twb2lu dGVycyB0byB0aGUgaTkxNV9wZXJmIHJhdGhlciB0aGFuIGRpZ2dpbmcgaXQKb3V0IG9mIGRldl9w cml2LgoKdjI6IFJlYmFzZSBvbnRvIGk5MTVfcGVyZl90eXBlcy5oCgpTaWduZWQtb2ZmLWJ5OiBD aHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IFVtZXNoIE5lcmxpZ2Ug UmFtYXBwYSA8dW1lc2gubmVybGlnZS5yYW1hcHBhQGludGVsLmNvbT4KQ2M6IExpb25lbCBMYW5k d2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IExpb25l bCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4gI3YxCkxpbms6IGh0 dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC9tc2dpZC8yMDE5MTAwNzE0MDgx Mi4xMDk2My0xLWNocmlzQGNocmlzLXdpbHNvbi5jby51awotLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggICAgICAgIHwgIDU2ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3BlcmYuYyAgICAgICB8IDcyMSArKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3BlcmZfdHlwZXMuaCB8ICA3MyArKy0KIDMgZmlsZXMgY2hhbmdlZCwg NDIyIGluc2VydGlvbnMoKyksIDQyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAppbmRleCAxYjhmZDNhMzhjNjYuLmRkMGViOGRjNDQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCkBAIC0xMzMyLDYxICsxMzMyLDcgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCiAJ c3RydWN0IGludGVsX3J1bnRpbWVfcG0gcnVudGltZV9wbTsKIAotCXN0cnVjdCB7Ci0JCWJvb2wg aW5pdGlhbGl6ZWQ7Ci0KLQkJc3RydWN0IGtvYmplY3QgKm1ldHJpY3Nfa29iajsKLQkJc3RydWN0 IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bF9oZWFkZXI7Ci0KLQkJLyoKLQkJICogTG9jayBhc3Nv Y2lhdGVkIHdpdGggYWRkaW5nL21vZGlmeWluZy9yZW1vdmluZyBPQSBjb25maWdzCi0JCSAqIGlu IGRldl9wcml2LT5wZXJmLm1ldHJpY3NfaWRyLgotCQkgKi8KLQkJc3RydWN0IG11dGV4IG1ldHJp Y3NfbG9jazsKLQotCQkvKgotCQkgKiBMaXN0IG9mIGR5bmFtaWMgY29uZmlndXJhdGlvbnMsIHlv dSBuZWVkIHRvIGhvbGQKLQkJICogZGV2X3ByaXYtPnBlcmYubWV0cmljc19sb2NrIHRvIGFjY2Vz cyBpdC4KLQkJICovCi0JCXN0cnVjdCBpZHIgbWV0cmljc19pZHI7Ci0KLQkJLyoKLQkJICogTG9j ayBhc3NvY2lhdGVkIHdpdGggYW55dGhpbmcgYmVsb3cgd2l0aGluIHRoaXMgc3RydWN0dXJlCi0J CSAqIGV4Y2VwdCBleGNsdXNpdmVfc3RyZWFtLgotCQkgKi8KLQkJc3RydWN0IG11dGV4IGxvY2s7 Ci0JCXN0cnVjdCBsaXN0X2hlYWQgc3RyZWFtczsKLQotCQkvKgotCQkgKiBUaGUgc3RyZWFtIGN1 cnJlbnRseSB1c2luZyB0aGUgT0EgdW5pdC4gSWYgYWNjZXNzZWQKLQkJICogb3V0c2lkZSBhIHN5 c2NhbGwgYXNzb2NpYXRlZCB0byBpdHMgZmlsZQotCQkgKiBkZXNjcmlwdG9yLCB5b3UgbmVlZCB0 byBob2xkCi0JCSAqIGRldl9wcml2LT5kcm0uc3RydWN0X211dGV4LgotCQkgKi8KLQkJc3RydWN0 IGk5MTVfcGVyZl9zdHJlYW0gKmV4Y2x1c2l2ZV9zdHJlYW07Ci0KLQkJLyoqCi0JCSAqIEZvciBy YXRlIGxpbWl0aW5nIGFueSBub3RpZmljYXRpb25zIG9mIHNwdXJpb3VzCi0JCSAqIGludmFsaWQg T0EgcmVwb3J0cwotCQkgKi8KLQkJc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBzcHVyaW91c19yZXBv cnRfcnM7Ci0KLQkJc3RydWN0IGk5MTVfb2FfY29uZmlnIHRlc3RfY29uZmlnOwotCi0JCXUzMiBn ZW43X2xhdGNoZWRfb2FzdGF0dXMxOwotCQl1MzIgY3R4X29hY3R4Y3RybF9vZmZzZXQ7Ci0JCXUz MiBjdHhfZmxleGV1MF9vZmZzZXQ7Ci0KLQkJLyoqCi0JCSAqIFRoZSBSUFRfSUQvcmVhc29uIGZp ZWxkIGZvciBHZW44KyBpbmNsdWRlcyBhIGJpdAotCQkgKiB0byBkZXRlcm1pbmUgaWYgdGhlIENU WCBJRCBpbiB0aGUgcmVwb3J0IGlzIHZhbGlkCi0JCSAqIGJ1dCB0aGUgc3BlY2lmaWMgYml0IGRp ZmZlcnMgYmV0d2VlbiBHZW4gOCBhbmQgOQotCQkgKi8KLQkJdTMyIGdlbjhfdmFsaWRfY3R4X2Jp dDsKLQotCQlzdHJ1Y3QgaTkxNV9vYV9vcHMgb3BzOwotCQljb25zdCBzdHJ1Y3QgaTkxNV9vYV9m b3JtYXQgKm9hX2Zvcm1hdHM7Ci0JfSBwZXJmOworCXN0cnVjdCBpOTE1X3BlcmYgcGVyZjsKIAog CS8qIEFic3RyYWN0IHRoZSBzdWJtaXNzaW9uIG1lY2hhbmlzbSAobGVnYWN5IHJpbmdidWZmZXIg b3IgZXhlY2xpc3RzKSBhd2F5ICovCiAJc3RydWN0IGludGVsX2d0IGd0OwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BlcmYuYwppbmRleCAyMzEzODhkMDZjODIuLjVhMjViYmViNmM3YSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wZXJmLmMKQEAgLTM2Nyw4ICszNjcsNyBAQCBzdHJ1Y3QgcGVyZl9vcGVuX3Byb3Bl cnRpZXMgewogCiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgb2FfcG9sbF9jaGVja190aW1l cl9jYihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcik7CiAKLXN0YXRpYyB2b2lkIGZyZWVfb2FfY29u ZmlnKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgIHN0cnVjdCBpOTE1 X29hX2NvbmZpZyAqb2FfY29uZmlnKQorc3RhdGljIHZvaWQgZnJlZV9vYV9jb25maWcoc3RydWN0 IGk5MTVfb2FfY29uZmlnICpvYV9jb25maWcpCiB7CiAJaWYgKCFQVFJfRVJSKG9hX2NvbmZpZy0+ ZmxleF9yZWdzKSkKIAkJa2ZyZWUob2FfY29uZmlnLT5mbGV4X3JlZ3MpOwpAQCAtMzc5LDUzICsz NzgsNTIgQEAgc3RhdGljIHZvaWQgZnJlZV9vYV9jb25maWcoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAogCWtmcmVlKG9hX2NvbmZpZyk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dF9v YV9jb25maWcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICBzdHJ1Y3Qg aTkxNV9vYV9jb25maWcgKm9hX2NvbmZpZykKK3N0YXRpYyB2b2lkIHB1dF9vYV9jb25maWcoc3Ry dWN0IGk5MTVfb2FfY29uZmlnICpvYV9jb25maWcpCiB7CiAJaWYgKCFhdG9taWNfZGVjX2FuZF90 ZXN0KCZvYV9jb25maWctPnJlZl9jb3VudCkpCiAJCXJldHVybjsKIAotCWZyZWVfb2FfY29uZmln KGRldl9wcml2LCBvYV9jb25maWcpOworCWZyZWVfb2FfY29uZmlnKG9hX2NvbmZpZyk7CiB9CiAK LXN0YXRpYyBpbnQgZ2V0X29hX2NvbmZpZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCitzdGF0aWMgaW50IGdldF9vYV9jb25maWcoc3RydWN0IGk5MTVfcGVyZiAqcGVyZiwKIAkJ CSBpbnQgbWV0cmljc19zZXQsCiAJCQkgc3RydWN0IGk5MTVfb2FfY29uZmlnICoqb3V0X2NvbmZp ZykKIHsKIAlpbnQgcmV0OwogCiAJaWYgKG1ldHJpY3Nfc2V0ID09IDEpIHsKLQkJKm91dF9jb25m aWcgPSAmZGV2X3ByaXYtPnBlcmYudGVzdF9jb25maWc7Ci0JCWF0b21pY19pbmMoJmRldl9wcml2 LT5wZXJmLnRlc3RfY29uZmlnLnJlZl9jb3VudCk7CisJCSpvdXRfY29uZmlnID0gJnBlcmYtPnRl c3RfY29uZmlnOworCQlhdG9taWNfaW5jKCZwZXJmLT50ZXN0X2NvbmZpZy5yZWZfY291bnQpOwog CQlyZXR1cm4gMDsKIAl9CiAKLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9w cml2LT5wZXJmLm1ldHJpY3NfbG9jayk7CisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KCZwZXJmLT5tZXRyaWNzX2xvY2spOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkqb3V0 X2NvbmZpZyA9IGlkcl9maW5kKCZkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2lkciwgbWV0cmljc19z ZXQpOworCSpvdXRfY29uZmlnID0gaWRyX2ZpbmQoJnBlcmYtPm1ldHJpY3NfaWRyLCBtZXRyaWNz X3NldCk7CiAJaWYgKCEqb3V0X2NvbmZpZykKIAkJcmV0ID0gLUVJTlZBTDsKIAllbHNlCiAJCWF0 b21pY19pbmMoJigqb3V0X2NvbmZpZyktPnJlZl9jb3VudCk7CiAKLQltdXRleF91bmxvY2soJmRl dl9wcml2LT5wZXJmLm1ldHJpY3NfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwZXJmLT5tZXRyaWNz X2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHUzMiBnZW44X29hX2h3X3RhaWxf cmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogewotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX3Vu Y29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5jb3JlOwogCi0JcmV0dXJuIEk5MTVfUkVBRChH RU44X09BVEFJTFBUUikgJiBHRU44X09BVEFJTFBUUl9NQVNLOworCXJldHVybiBpbnRlbF91bmNv cmVfcmVhZCh1bmNvcmUsIEdFTjhfT0FUQUlMUFRSKSAmIEdFTjhfT0FUQUlMUFRSX01BU0s7CiB9 CiAKIHN0YXRpYyB1MzIgZ2VuN19vYV9od190YWlsX3JlYWQoc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJl YW0tPmRldl9wcml2OwotCXUzMiBvYXN0YXR1czEgPSBJOTE1X1JFQUQoR0VON19PQVNUQVRVUzEp OworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHN0cmVhbS0+Z3QtPnVuY29yZTsKKwl1 MzIgb2FzdGF0dXMxID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU43X09BU1RBVFVTMSk7 CiAKIAlyZXR1cm4gb2FzdGF0dXMxICYgR0VON19PQVNUQVRVUzFfVEFJTF9NQVNLOwogfQpAQCAt NDU2LDcgKzQ1NCw2IEBAIHN0YXRpYyB1MzIgZ2VuN19vYV9od190YWlsX3JlYWQoc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKICAqLwogc3RhdGljIGJvb2wgb2FfYnVmZmVyX2NoZWNr X3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAlpbnQgcmVwb3J0 X3NpemUgPSBzdHJlYW0tPm9hX2J1ZmZlci5mb3JtYXRfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGZs YWdzOwogCXVuc2lnbmVkIGludCBhZ2VkX2lkeDsKQEAgLTQ3OSw3ICs0NzYsNyBAQCBzdGF0aWMg Ym9vbCBvYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0 cmVhbSkKIAlhZ2VkX3RhaWwgPSBzdHJlYW0tPm9hX2J1ZmZlci50YWlsc1thZ2VkX2lkeF0ub2Zm c2V0OwogCWFnaW5nX3RhaWwgPSBzdHJlYW0tPm9hX2J1ZmZlci50YWlsc1shYWdlZF9pZHhdLm9m ZnNldDsKIAotCWh3X3RhaWwgPSBkZXZfcHJpdi0+cGVyZi5vcHMub2FfaHdfdGFpbF9yZWFkKHN0 cmVhbSk7CisJaHdfdGFpbCA9IHN0cmVhbS0+cGVyZi0+b3BzLm9hX2h3X3RhaWxfcmVhZChzdHJl YW0pOwogCiAJLyogVGhlIHRhaWwgcG9pbnRlciBpbmNyZWFzZXMgaW4gNjQgYnl0ZSBpbmNyZW1l bnRzLAogCSAqIG5vdCBpbiByZXBvcnRfc2l6ZSBzdGVwcy4uLgpAQCAtNjU1LDcgKzY1Miw3IEBA IHN0YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVh bSAqc3RyZWFtLAogCQkJCSAgc2l6ZV90IGNvdW50LAogCQkJCSAgc2l6ZV90ICpvZmZzZXQpCiB7 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsK KwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBzdHJlYW0tPmd0LT51bmNvcmU7CiAJaW50 IHJlcG9ydF9zaXplID0gc3RyZWFtLT5vYV9idWZmZXIuZm9ybWF0X3NpemU7CiAJdTggKm9hX2J1 Zl9iYXNlID0gc3RyZWFtLT5vYV9idWZmZXIudmFkZHI7CiAJdTMyIGd0dF9vZmZzZXQgPSBpOTE1 X2dndHRfb2Zmc2V0KHN0cmVhbS0+b2FfYnVmZmVyLnZtYSk7CkBAIC03NDAsNyArNzM3LDcgQEAg c3RhdGljIGludCBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0sCiAJCXJlYXNvbiA9ICgocmVwb3J0MzJbMF0gPj4gT0FSRVBPUlRfUkVBU09OX1NI SUZUKSAmCiAJCQkgIE9BUkVQT1JUX1JFQVNPTl9NQVNLKTsKIAkJaWYgKHJlYXNvbiA9PSAwKSB7 Ci0JCQlpZiAoX19yYXRlbGltaXQoJmRldl9wcml2LT5wZXJmLnNwdXJpb3VzX3JlcG9ydF9ycykp CisJCQlpZiAoX19yYXRlbGltaXQoJnN0cmVhbS0+cGVyZi0+c3B1cmlvdXNfcmVwb3J0X3JzKSkK IAkJCQlEUk1fTk9URSgiU2tpcHBpbmcgc3B1cmlvdXMsIGludmFsaWQgT0EgcmVwb3J0XG4iKTsK IAkJCWNvbnRpbnVlOwogCQl9CkBAIC03NTUsNyArNzUyLDcgQEAgc3RhdGljIGludCBnZW44X2Fw cGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCSAqIE5v dGU6IHRoYXQgd2UgZG9uJ3QgY2xlYXIgdGhlIHZhbGlkX2N0eF9iaXQgc28gdXNlcnNwYWNlIGNh bgogCQkgKiB1bmRlcnN0YW5kIHRoYXQgdGhlIElEIGhhcyBiZWVuIHNxdWFzaGVkIGJ5IHRoZSBr ZXJuZWwuCiAJCSAqLwotCQlpZiAoIShyZXBvcnQzMlswXSAmIGRldl9wcml2LT5wZXJmLmdlbjhf dmFsaWRfY3R4X2JpdCkpCisJCWlmICghKHJlcG9ydDMyWzBdICYgc3RyZWFtLT5wZXJmLT5nZW44 X3ZhbGlkX2N0eF9iaXQpKQogCQkJY3R4X2lkID0gcmVwb3J0MzJbMl0gPSBJTlZBTElEX0NUWF9J RDsKIAogCQkvKgpAQCAtNzg5LDcgKzc4Niw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2Ff cmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkgKiBzd2l0Y2hlcyBz aW5jZSBpdCdzIG5vdC11bmNvbW1vbiBmb3IgcGVyaW9kaWMgc2FtcGxlcyB0bwogCQkgKiBpZGVu dGlmeSBhIHN3aXRjaCBiZWZvcmUgYW55ICdjb250ZXh0IHN3aXRjaCcgcmVwb3J0LgogCQkgKi8K LQkJaWYgKCFkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFtLT5jdHggfHwKKwkJaWYgKCFz dHJlYW0tPnBlcmYtPmV4Y2x1c2l2ZV9zdHJlYW0tPmN0eCB8fAogCQkgICAgc3RyZWFtLT5zcGVj aWZpY19jdHhfaWQgPT0gY3R4X2lkIHx8CiAJCSAgICBzdHJlYW0tPm9hX2J1ZmZlci5sYXN0X2N0 eF9pZCA9PSBzdHJlYW0tPnNwZWNpZmljX2N0eF9pZCB8fAogCQkgICAgcmVhc29uICYgT0FSRVBP UlRfUkVBU09OX0NUWF9TV0lUQ0gpIHsKQEAgLTc5OCw3ICs3OTUsNyBAQCBzdGF0aWMgaW50IGdl bjhfYXBwZW5kX29hX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJ CSAqIFdoaWxlIGZpbHRlcmluZyBmb3IgYSBzaW5nbGUgY29udGV4dCB3ZSBhdm9pZAogCQkJICog bGVha2luZyB0aGUgSURzIG9mIG90aGVyIGNvbnRleHRzLgogCQkJICovCi0JCQlpZiAoZGV2X3By aXYtPnBlcmYuZXhjbHVzaXZlX3N0cmVhbS0+Y3R4ICYmCisJCQlpZiAoc3RyZWFtLT5wZXJmLT5l eGNsdXNpdmVfc3RyZWFtLT5jdHggJiYKIAkJCSAgICBzdHJlYW0tPnNwZWNpZmljX2N0eF9pZCAh PSBjdHhfaWQpIHsKIAkJCQlyZXBvcnQzMlsyXSA9IElOVkFMSURfQ1RYX0lEOwogCQkJfQpAQCAt ODMwLDcgKzgyNyw4IEBAIHN0YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkgKi8KIAkJaGVhZCArPSBndHRfb2Zmc2V0Owog Ci0JCUk5MTVfV1JJVEUoR0VOOF9PQUhFQURQVFIsIGhlYWQgJiBHRU44X09BSEVBRFBUUl9NQVNL KTsKKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOOF9PQUhFQURQVFIsCisJCQkJICAg aGVhZCAmIEdFTjhfT0FIRUFEUFRSX01BU0spOwogCQlzdHJlYW0tPm9hX2J1ZmZlci5oZWFkID0g aGVhZDsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdHJlYW0tPm9hX2J1ZmZlci5wdHJf bG9jaywgZmxhZ3MpOwpAQCAtODY0LDE0ICs4NjIsMTQgQEAgc3RhdGljIGludCBnZW44X29hX3Jl YWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCXNpemVfdCBjb3VudCwKIAkJ CXNpemVfdCAqb2Zmc2V0KQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHN0cmVhbS0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gc3RyZWFt LT5ndC0+dW5jb3JlOwogCXUzMiBvYXN0YXR1czsKIAlpbnQgcmV0OwogCiAJaWYgKFdBUk5fT04o IXN0cmVhbS0+b2FfYnVmZmVyLnZhZGRyKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlvYXN0YXR1cyA9 IEk5MTVfUkVBRChHRU44X09BU1RBVFVTKTsKKwlvYXN0YXR1cyA9IGludGVsX3VuY29yZV9yZWFk KHVuY29yZSwgR0VOOF9PQVNUQVRVUyk7CiAKIAkvKgogCSAqIFdlIHRyZWF0IE9BQlVGRkVSX09W RVJGTE9XIGFzIGEgc2lnbmlmaWNhbnQgZXJyb3I6CkBAIC04OTYsMTQgKzg5NCwxNCBAQCBzdGF0 aWMgaW50IGdlbjhfb2FfcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQlE Uk1fREVCVUcoIk9BIGJ1ZmZlciBvdmVyZmxvdyAoZXhwb25lbnQgPSAlZCk6IGZvcmNlIHJlc3Rh cnRcbiIsCiAJCQkgIHN0cmVhbS0+cGVyaW9kX2V4cG9uZW50KTsKIAotCQlkZXZfcHJpdi0+cGVy Zi5vcHMub2FfZGlzYWJsZShzdHJlYW0pOwotCQlkZXZfcHJpdi0+cGVyZi5vcHMub2FfZW5hYmxl KHN0cmVhbSk7CisJCXN0cmVhbS0+cGVyZi0+b3BzLm9hX2Rpc2FibGUoc3RyZWFtKTsKKwkJc3Ry ZWFtLT5wZXJmLT5vcHMub2FfZW5hYmxlKHN0cmVhbSk7CiAKIAkJLyoKIAkJICogTm90ZTogLm9h X2VuYWJsZSgpIGlzIGV4cGVjdGVkIHRvIHJlLWluaXQgdGhlIG9hYnVmZmVyIGFuZAogCQkgKiBy ZXNldCBHRU44X09BU1RBVFVTIGZvciB1cwogCQkgKi8KLQkJb2FzdGF0dXMgPSBJOTE1X1JFQUQo R0VOOF9PQVNUQVRVUyk7CisJCW9hc3RhdHVzID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBH RU44X09BU1RBVFVTKTsKIAl9CiAKIAlpZiAob2FzdGF0dXMgJiBHRU44X09BU1RBVFVTX1JFUE9S VF9MT1NUKSB7CkBAIC05MTEsOCArOTA5LDggQEAgc3RhdGljIGludCBnZW44X29hX3JlYWQoc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCQkgICAgICAgRFJNX0k5MTVfUEVSRl9S RUNPUkRfT0FfUkVQT1JUX0xPU1QpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJSTkx NV9XUklURShHRU44X09BU1RBVFVTLAotCQkJICAgb2FzdGF0dXMgJiB+R0VOOF9PQVNUQVRVU19S RVBPUlRfTE9TVCk7CisJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjhfT0FTVEFUVVMs CisJCQkJICAgb2FzdGF0dXMgJiB+R0VOOF9PQVNUQVRVU19SRVBPUlRfTE9TVCk7CiAJfQogCiAJ cmV0dXJuIGdlbjhfYXBwZW5kX29hX3JlcG9ydHMoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQp OwpAQCAtOTQzLDcgKzk0MSw3IEBAIHN0YXRpYyBpbnQgZ2VuN19hcHBlbmRfb2FfcmVwb3J0cyhz dHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJCSAgc2l6ZV90IGNvdW50LAogCQkJ CSAgc2l6ZV90ICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBzdHJl YW0tPmd0LT51bmNvcmU7CiAJaW50IHJlcG9ydF9zaXplID0gc3RyZWFtLT5vYV9idWZmZXIuZm9y bWF0X3NpemU7CiAJdTggKm9hX2J1Zl9iYXNlID0gc3RyZWFtLT5vYV9idWZmZXIudmFkZHI7CiAJ dTMyIGd0dF9vZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KHN0cmVhbS0+b2FfYnVmZmVyLnZtYSk7 CkBAIC0xMDE3LDcgKzEwMTUsNyBAQCBzdGF0aWMgaW50IGdlbjdfYXBwZW5kX29hX3JlcG9ydHMo c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJICogY29weWluZyBpdCB0byB1c2Vy c3BhY2UuLi4KIAkJICovCiAJCWlmIChyZXBvcnQzMlswXSA9PSAwKSB7Ci0JCQlpZiAoX19yYXRl bGltaXQoJmRldl9wcml2LT5wZXJmLnNwdXJpb3VzX3JlcG9ydF9ycykpCisJCQlpZiAoX19yYXRl bGltaXQoJnN0cmVhbS0+cGVyZi0+c3B1cmlvdXNfcmVwb3J0X3JzKSkKIAkJCQlEUk1fTk9URSgi U2tpcHBpbmcgc3B1cmlvdXMsIGludmFsaWQgT0EgcmVwb3J0XG4iKTsKIAkJCWNvbnRpbnVlOwog CQl9CkBAIC0xMDQzLDkgKzEwNDEsOSBAQCBzdGF0aWMgaW50IGdlbjdfYXBwZW5kX29hX3JlcG9y dHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJICovCiAJCWhlYWQgKz0gZ3R0 X29mZnNldDsKIAotCQlJOTE1X1dSSVRFKEdFTjdfT0FTVEFUVVMyLAotCQkJICAgKChoZWFkICYg R0VON19PQVNUQVRVUzJfSEVBRF9NQVNLKSB8Ci0JCQkgICAgR0VON19PQVNUQVRVUzJfTUVNX1NF TEVDVF9HR1RUKSk7CisJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjdfT0FTVEFUVVMy LAorCQkJCSAgIChoZWFkICYgR0VON19PQVNUQVRVUzJfSEVBRF9NQVNLKSB8CisJCQkJICAgR0VO N19PQVNUQVRVUzJfTUVNX1NFTEVDVF9HR1RUKTsKIAkJc3RyZWFtLT5vYV9idWZmZXIuaGVhZCA9 IGhlYWQ7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RyZWFtLT5vYV9idWZmZXIucHRy X2xvY2ssIGZsYWdzKTsKQEAgLTEwNzUsMjEgKzEwNzMsMjEgQEAgc3RhdGljIGludCBnZW43X29h X3JlYWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCXNpemVfdCBjb3VudCwK IAkJCXNpemVfdCAqb2Zmc2V0KQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gc3Ry ZWFtLT5ndC0+dW5jb3JlOwogCXUzMiBvYXN0YXR1czE7CiAJaW50IHJldDsKIAogCWlmIChXQVJO X09OKCFzdHJlYW0tPm9hX2J1ZmZlci52YWRkcikpCiAJCXJldHVybiAtRUlPOwogCi0Jb2FzdGF0 dXMxID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMxKTsKKwlvYXN0YXR1czEgPSBpbnRlbF91bmNv cmVfcmVhZCh1bmNvcmUsIEdFTjdfT0FTVEFUVVMxKTsKIAogCS8qIFhYWDogT24gSGFzd2VsbCB3 ZSBkb24ndCBoYXZlIGEgc2FmZSB3YXkgdG8gY2xlYXIgb2FzdGF0dXMxCiAJICogYml0cyB3aGls ZSB0aGUgT0EgdW5pdCBpcyBlbmFibGVkICh3aGlsZSB0aGUgdGFpbCBwb2ludGVyCiAJICogbWF5 IGJlIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkpIHNvIHdlIGlnbm9yZSBzdGF0dXMgYml0cwogCSAq IHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQgdG8gdXNlcnNwYWNlLgogCSAqLwotCW9h c3RhdHVzMSAmPSB+ZGV2X3ByaXYtPnBlcmYuZ2VuN19sYXRjaGVkX29hc3RhdHVzMTsKKwlvYXN0 YXR1czEgJj0gfnN0cmVhbS0+cGVyZi0+Z2VuN19sYXRjaGVkX29hc3RhdHVzMTsKIAogCS8qIFdl IHRyZWF0IE9BQlVGRkVSX09WRVJGTE9XIGFzIGEgc2lnbmlmaWNhbnQgZXJyb3I6CiAJICoKQEAg LTExMjAsMTAgKzExMTgsMTAgQEAgc3RhdGljIGludCBnZW43X29hX3JlYWQoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJRFJNX0RFQlVHKCJPQSBidWZmZXIgb3ZlcmZsb3cgKGV4 cG9uZW50ID0gJWQpOiBmb3JjZSByZXN0YXJ0XG4iLAogCQkJICBzdHJlYW0tPnBlcmlvZF9leHBv bmVudCk7CiAKLQkJZGV2X3ByaXYtPnBlcmYub3BzLm9hX2Rpc2FibGUoc3RyZWFtKTsKLQkJZGV2 X3ByaXYtPnBlcmYub3BzLm9hX2VuYWJsZShzdHJlYW0pOworCQlzdHJlYW0tPnBlcmYtPm9wcy5v YV9kaXNhYmxlKHN0cmVhbSk7CisJCXN0cmVhbS0+cGVyZi0+b3BzLm9hX2VuYWJsZShzdHJlYW0p OwogCi0JCW9hc3RhdHVzMSA9IEk5MTVfUkVBRChHRU43X09BU1RBVFVTMSk7CisJCW9hc3RhdHVz MSA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VON19PQVNUQVRVUzEpOwogCX0KIAogCWlm ICh1bmxpa2VseShvYXN0YXR1czEgJiBHRU43X09BU1RBVFVTMV9SRVBPUlRfTE9TVCkpIHsKQEAg LTExMzEsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZ2VuN19vYV9yZWFkKHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpzdHJlYW0sCiAJCQkJICAgICAgIERSTV9JOTE1X1BFUkZfUkVDT1JEX09BX1JF UE9SVF9MT1NUKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWRldl9wcml2LT5wZXJm LmdlbjdfbGF0Y2hlZF9vYXN0YXR1czEgfD0KKwkJc3RyZWFtLT5wZXJmLT5nZW43X2xhdGNoZWRf b2FzdGF0dXMxIHw9CiAJCQlHRU43X09BU1RBVFVTMV9SRVBPUlRfTE9TVDsKIAl9CiAKQEAgLTEx OTYsOSArMTE5NCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0sCiAJCQlzaXplX3QgY291bnQsCiAJCQlzaXplX3QgKm9mZnNldCkKIHsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owot Ci0JcmV0dXJuIGRldl9wcml2LT5wZXJmLm9wcy5yZWFkKHN0cmVhbSwgYnVmLCBjb3VudCwgb2Zm c2V0KTsKKwlyZXR1cm4gc3RyZWFtLT5wZXJmLT5vcHMucmVhZChzdHJlYW0sIGJ1ZiwgY291bnQs IG9mZnNldCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqb2FfcGluX2NvbnRl eHQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKQEAgLTEyMzksMTQgKzEyMzUsMTMg QEAgc3RhdGljIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpvYV9waW5fY29udGV4dChzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogICovCiBzdGF0aWMgaW50IG9hX2dldF9yZW5kZXJfY3R4 X2lkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSBzdHJlYW0tPmRldl9wcml2OwogCXN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjZTsKIAogCWNlID0gb2FfcGluX2NvbnRleHQoc3RyZWFtKTsKIAlpZiAoSVNfRVJSKGNlKSkK IAkJcmV0dXJuIFBUUl9FUlIoY2UpOwogCi0Jc3dpdGNoIChJTlRFTF9HRU4oaTkxNSkpIHsKKwlz d2l0Y2ggKElOVEVMX0dFTihjZS0+ZW5naW5lLT5pOTE1KSkgewogCWNhc2UgNzogewogCQkvKgog CQkgKiBPbiBIYXN3ZWxsIHdlIGRvbid0IGRvIGFueSBwb3N0IHByb2Nlc3Npbmcgb2YgdGhlIHJl cG9ydHMKQEAgLTEyNjAsNyArMTI1NSw3IEBAIHN0YXRpYyBpbnQgb2FfZ2V0X3JlbmRlcl9jdHhf aWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAljYXNlIDg6CiAJY2FzZSA5Ogog CWNhc2UgMTA6Ci0JCWlmIChVU0VTX0dVQ19TVUJNSVNTSU9OKGk5MTUpKSB7CisJCWlmIChVU0VT X0dVQ19TVUJNSVNTSU9OKGNlLT5lbmdpbmUtPmk5MTUpKSB7CiAJCQkvKgogCQkJICogV2hlbiB1 c2luZyBHdUMsIHRoZSBjb250ZXh0IGRlc2NyaXB0b3Igd2Ugd3JpdGUgaW4KIAkJCSAqIGk5MTUg aXMgcmVhZCBieSBHdUMgYW5kIHJld3JpdHRlbiBiZWZvcmUgaXQncwpAQCAtMTI5Niw3ICsxMjkx LDcgQEAgc3RhdGljIGludCBvYV9nZXRfcmVuZGVyX2N0eF9pZChzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtKQogCX0KIAogCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4o aTkxNSkpOworCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGNlLT5lbmdpbmUtPmk5MTUpKTsKIAl9 CiAKIAljZS0+dGFnID0gc3RyZWFtLT5zcGVjaWZpY19jdHhfaWRfbWFzazsKQEAgLTEzNDAsMzgg KzEzMzUsMzggQEAgZnJlZV9vYV9idWZmZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSkKIAogc3RhdGljIHZvaWQgaTkxNV9vYV9zdHJlYW1fZGVzdHJveShzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHN0cmVhbS0+ZGV2X3ByaXY7CisJc3RydWN0IGk5MTVfcGVyZiAqcGVyZiA9IHN0cmVhbS0+cGVy ZjsKIAotCUJVR19PTihzdHJlYW0gIT0gZGV2X3ByaXYtPnBlcmYuZXhjbHVzaXZlX3N0cmVhbSk7 CisJQlVHX09OKHN0cmVhbSAhPSBwZXJmLT5leGNsdXNpdmVfc3RyZWFtKTsKIAogCS8qCiAJICog VW5zZXQgZXhjbHVzaXZlX3N0cmVhbSBmaXJzdCwgaXQgd2lsbCBiZSBjaGVja2VkIHdoaWxlIGRp c2FibGluZwogCSAqIHRoZSBtZXRyaWMgc2V0IG9uIGdlbjgrLgogCSAqLwotCW11dGV4X2xvY2so JmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKLQlkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVf c3RyZWFtID0gTlVMTDsKLQlkZXZfcHJpdi0+cGVyZi5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0KHN0 cmVhbSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisJbXV0 ZXhfbG9jaygmcGVyZi0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJcGVyZi0+ZXhjbHVzaXZl X3N0cmVhbSA9IE5VTEw7CisJcGVyZi0+b3BzLmRpc2FibGVfbWV0cmljX3NldChzdHJlYW0pOwor CW11dGV4X3VubG9jaygmcGVyZi0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CiAKIAlmcmVlX29h X2J1ZmZlcihzdHJlYW0pOwogCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2 LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJp di0+cnVudGltZV9wbSwgc3RyZWFtLT53YWtlcmVmKTsKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtl X3B1dChzdHJlYW0tPmd0LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOworCWludGVsX3J1bnRpbWVf cG1fcHV0KHN0cmVhbS0+Z3QtPnVuY29yZS0+cnBtLCBzdHJlYW0tPndha2VyZWYpOwogCiAJaWYg KHN0cmVhbS0+Y3R4KQogCQlvYV9wdXRfcmVuZGVyX2N0eF9pZChzdHJlYW0pOwogCi0JcHV0X29h X2NvbmZpZyhkZXZfcHJpdiwgc3RyZWFtLT5vYV9jb25maWcpOworCXB1dF9vYV9jb25maWcoc3Ry ZWFtLT5vYV9jb25maWcpOwogCi0JaWYgKGRldl9wcml2LT5wZXJmLnNwdXJpb3VzX3JlcG9ydF9y cy5taXNzZWQpIHsKKwlpZiAocGVyZi0+c3B1cmlvdXNfcmVwb3J0X3JzLm1pc3NlZCkgewogCQlE Uk1fTk9URSgiJWQgc3B1cmlvdXMgT0EgcmVwb3J0IG5vdGljZXMgc3VwcHJlc3NlZCBkdWUgdG8g cmF0ZWxpbWl0aW5nXG4iLAotCQkJIGRldl9wcml2LT5wZXJmLnNwdXJpb3VzX3JlcG9ydF9ycy5t aXNzZWQpOworCQkJIHBlcmYtPnNwdXJpb3VzX3JlcG9ydF9ycy5taXNzZWQpOwogCX0KIH0KIAog c3RhdGljIHZvaWQgZ2VuN19pbml0X29hX2J1ZmZlcihzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAq c3RyZWFtKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5j b3JlOwogCXUzMiBndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldChzdHJlYW0tPm9hX2J1ZmZl ci52bWEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTEzODAsMTMgKzEzNzUsMTQgQEAg c3RhdGljIHZvaWQgZ2VuN19pbml0X29hX2J1ZmZlcihzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAq c3RyZWFtKQogCS8qIFByZS1EZXZCRFc6IE9BQlVGRkVSIG11c3QgYmUgc2V0IHdpdGggY291bnRl cnMgb2ZmLAogCSAqIGJlZm9yZSBPQVNUQVRVUzEsIGJ1dCBhZnRlciBPQVNUQVRVUzIKIAkgKi8K LQlJOTE1X1dSSVRFKEdFTjdfT0FTVEFUVVMyLAotCQkgICBndHRfb2Zmc2V0IHwgR0VON19PQVNU QVRVUzJfTUVNX1NFTEVDVF9HR1RUKTsgLyogaGVhZCAqLworCWludGVsX3VuY29yZV93cml0ZSh1 bmNvcmUsIEdFTjdfT0FTVEFUVVMyLCAvKiBoZWFkICovCisJCQkgICBndHRfb2Zmc2V0IHwgR0VO N19PQVNUQVRVUzJfTUVNX1NFTEVDVF9HR1RUKTsKIAlzdHJlYW0tPm9hX2J1ZmZlci5oZWFkID0g Z3R0X29mZnNldDsKIAotCUk5MTVfV1JJVEUoR0VON19PQUJVRkZFUiwgZ3R0X29mZnNldCk7CisJ aW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VON19PQUJVRkZFUiwgZ3R0X29mZnNldCk7CiAK LQlJOTE1X1dSSVRFKEdFTjdfT0FTVEFUVVMxLCBndHRfb2Zmc2V0IHwgT0FCVUZGRVJfU0laRV8x Nk0pOyAvKiB0YWlsICovCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VON19PQVNUQVRV UzEsIC8qIHRhaWwgKi8KKwkJCSAgIGd0dF9vZmZzZXQgfCBPQUJVRkZFUl9TSVpFXzE2TSk7CiAK IAkvKiBNYXJrIHRoYXQgd2UgbmVlZCB1cGRhdGVkIHRhaWwgcG9pbnRlcnMgdG8gcmVhZCBmcm9t Li4uICovCiAJc3RyZWFtLT5vYV9idWZmZXIudGFpbHNbMF0ub2Zmc2V0ID0gSU5WQUxJRF9UQUlM X1BUUjsKQEAgLTEzOTgsNyArMTM5NCw3IEBAIHN0YXRpYyB2b2lkIGdlbjdfaW5pdF9vYV9idWZm ZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAkgKiBhbHJlYWR5IHNlZW4gc2lu Y2UgdGhleSBjYW4ndCBiZSBjbGVhcmVkIHdoaWxlIHBlcmlvZGljCiAJICogc2FtcGxpbmcgaXMg ZW5hYmxlZC4KIAkgKi8KLQlkZXZfcHJpdi0+cGVyZi5nZW43X2xhdGNoZWRfb2FzdGF0dXMxID0g MDsKKwlzdHJlYW0tPnBlcmYtPmdlbjdfbGF0Y2hlZF9vYXN0YXR1czEgPSAwOwogCiAJLyogTkI6 IGFsdGhvdWdoIHRoZSBPQSBidWZmZXIgd2lsbCBpbml0aWFsbHkgYmUgYWxsb2NhdGVkCiAJICog emVyb2VkIHZpYSBzaG1mcyAoYW5kIHNvIHRoaXMgbWVtc2V0IGlzIHJlZHVuZGFudCB3aGVuCkBA IC0xNDIxLDE3ICsxNDE3LDE3IEBAIHN0YXRpYyB2b2lkIGdlbjdfaW5pdF9vYV9idWZmZXIoc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAogc3RhdGljIHZvaWQgZ2VuOF9pbml0X29h X2J1ZmZlcihzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogewotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5jb3JlOwogCXUzMiBndHRfb2Zmc2V0ID0g aTkxNV9nZ3R0X29mZnNldChzdHJlYW0tPm9hX2J1ZmZlci52bWEpOwogCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3RyZWFtLT5vYV9idWZmZXIucHRyX2xvY2ss IGZsYWdzKTsKIAotCUk5MTVfV1JJVEUoR0VOOF9PQVNUQVRVUywgMCk7Ci0JSTkxNV9XUklURShH RU44X09BSEVBRFBUUiwgZ3R0X29mZnNldCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwg R0VOOF9PQVNUQVRVUywgMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOOF9PQUhF QURQVFIsIGd0dF9vZmZzZXQpOwogCXN0cmVhbS0+b2FfYnVmZmVyLmhlYWQgPSBndHRfb2Zmc2V0 OwogCi0JSTkxNV9XUklURShHRU44X09BQlVGRkVSX1VEVywgMCk7CisJaW50ZWxfdW5jb3JlX3dy aXRlKHVuY29yZSwgR0VOOF9PQUJVRkZFUl9VRFcsIDApOwogCiAJLyoKIAkgKiBQUk0gc2F5czoK QEAgLTE0NDEsOSArMTQzNyw5IEBAIHN0YXRpYyB2b2lkIGdlbjhfaW5pdF9vYV9idWZmZXIoc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAkgKiAgdG8gZW5hYmxlIHByb3BlciBmdW5j dGlvbmFsaXR5IG9mIHRoZSBvdmVyZmxvdwogCSAqICBiaXQuIgogCSAqLwotCUk5MTVfV1JJVEUo R0VOOF9PQUJVRkZFUiwgZ3R0X29mZnNldCB8CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwg R0VOOF9PQUJVRkZFUiwgZ3R0X29mZnNldCB8CiAJCSAgIE9BQlVGRkVSX1NJWkVfMTZNIHwgR0VO OF9PQUJVRkZFUl9NRU1fU0VMRUNUX0dHVFQpOwotCUk5MTVfV1JJVEUoR0VOOF9PQVRBSUxQVFIs IGd0dF9vZmZzZXQgJiBHRU44X09BVEFJTFBUUl9NQVNLKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBHRU44X09BVEFJTFBUUiwgZ3R0X29mZnNldCAmIEdFTjhfT0FUQUlMUFRSX01BU0sp OwogCiAJLyogTWFyayB0aGF0IHdlIG5lZWQgdXBkYXRlZCB0YWlsIHBvaW50ZXJzIHRvIHJlYWQg ZnJvbS4uLiAqLwogCXN0cmVhbS0+b2FfYnVmZmVyLnRhaWxzWzBdLm9mZnNldCA9IElOVkFMSURf VEFJTF9QVFI7CkBAIC0xNDgyLDcgKzE0NzgsNiBAQCBzdGF0aWMgdm9pZCBnZW44X2luaXRfb2Ff YnVmZmVyKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiBzdGF0aWMgaW50IGFsbG9j X29hX2J1ZmZlcihzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogewogCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpibzsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBzdHJlYW0tPmRldl9wcml2OwogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwogCWludCByZXQ7 CiAKQEAgLTE0OTIsNyArMTQ4Nyw3IEBAIHN0YXRpYyBpbnQgYWxsb2Nfb2FfYnVmZmVyKHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiAJQlVJTERfQlVHX09OX05PVF9QT1dFUl9PRl8y KE9BX0JVRkZFUl9TSVpFKTsKIAlCVUlMRF9CVUdfT04oT0FfQlVGRkVSX1NJWkUgPCBTWl8xMjhL IHx8IE9BX0JVRkZFUl9TSVpFID4gU1pfMTZNKTsKIAotCWJvID0gaTkxNV9nZW1fb2JqZWN0X2Ny ZWF0ZV9zaG1lbShkZXZfcHJpdiwgT0FfQlVGRkVSX1NJWkUpOworCWJvID0gaTkxNV9nZW1fb2Jq ZWN0X2NyZWF0ZV9zaG1lbShzdHJlYW0tPnBlcmYtPmk5MTUsIE9BX0JVRkZFUl9TSVpFKTsKIAlp ZiAoSVNfRVJSKGJvKSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBPQSBidWZm ZXJcbiIpOwogCQlyZXR1cm4gUFRSX0VSUihibyk7CkBAIC0xNTMzLDcgKzE1MjgsNyBAQCBzdGF0 aWMgaW50IGFsbG9jX29hX2J1ZmZlcihzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQog CXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbmZpZ19vYV9yZWdzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKK3N0YXRpYyB2b2lkIGNvbmZpZ19vYV9yZWdzKHN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpOTE1X29hX3JlZyAq cmVncywKIAkJCSAgIHUzMiBuX3JlZ3MpCiB7CkBAIC0xNTQyLDcgKzE1MzcsNyBAQCBzdGF0aWMg dm9pZCBjb25maWdfb2FfcmVncyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJ Zm9yIChpID0gMDsgaSA8IG5fcmVnczsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBpOTE1X29hX3Jl ZyAqcmVnID0gcmVncyArIGk7CiAKLQkJSTkxNV9XUklURShyZWctPmFkZHIsIHJlZy0+dmFsdWUp OworCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCByZWctPmFkZHIsIHJlZy0+dmFsdWUpOwog CX0KIH0KIApAQCAtMTU3NSw3ICsxNTcwLDcgQEAgc3RhdGljIHZvaWQgZGVsYXlfYWZ0ZXJfbXV4 KHZvaWQpCiAKIHN0YXRpYyBpbnQgaHN3X2VuYWJsZV9tZXRyaWNfc2V0KHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpzdHJlYW0pCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBzdHJl YW0tPmd0LT51bmNvcmU7CiAJY29uc3Qgc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9jb25maWcg PSBzdHJlYW0tPm9hX2NvbmZpZzsKIAogCS8qCkBAIC0xNTg4LDE1ICsxNTgzLDE1IEBAIHN0YXRp YyBpbnQgaHN3X2VuYWJsZV9tZXRyaWNfc2V0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0pCiAJICogY291bnQgdGhlIGV2ZW50cyBmcm9tIG5vbi1yZW5kZXIgZG9tYWluLiBVbml0IGxl dmVsIGNsb2NrCiAJICogZ2F0aW5nIGZvciBSQ1Mgc2hvdWxkIGFsc28gYmUgZGlzYWJsZWQuCiAJ ICovCi0JSTkxNV9XUklURShHRU43X01JU0NDUENUTCwgKEk5MTVfUkVBRChHRU43X01JU0NDUENU TCkgJgotCQkJCSAgICB+R0VON19ET1BfQ0xPQ0tfR0FURV9FTkFCTEUpKTsKLQlJOTE1X1dSSVRF KEdFTjZfVUNHQ1RMMSwgKEk5MTVfUkVBRChHRU42X1VDR0NUTDEpIHwKLQkJCQkgIEdFTjZfQ1NV TklUX0NMT0NLX0dBVEVfRElTQUJMRSkpOworCWludGVsX3VuY29yZV9ybXcodW5jb3JlLCBHRU43 X01JU0NDUENUTCwKKwkJCSBHRU43X0RPUF9DTE9DS19HQVRFX0VOQUJMRSwgMCk7CisJaW50ZWxf dW5jb3JlX3Jtdyh1bmNvcmUsIEdFTjZfVUNHQ1RMMSwKKwkJCSAwLCBHRU42X0NTVU5JVF9DTE9D S19HQVRFX0RJU0FCTEUpOwogCi0JY29uZmlnX29hX3JlZ3MoZGV2X3ByaXYsIG9hX2NvbmZpZy0+ bXV4X3JlZ3MsIG9hX2NvbmZpZy0+bXV4X3JlZ3NfbGVuKTsKKwljb25maWdfb2FfcmVncyh1bmNv cmUsIG9hX2NvbmZpZy0+bXV4X3JlZ3MsIG9hX2NvbmZpZy0+bXV4X3JlZ3NfbGVuKTsKIAlkZWxh eV9hZnRlcl9tdXgoKTsKIAotCWNvbmZpZ19vYV9yZWdzKGRldl9wcml2LCBvYV9jb25maWctPmJf Y291bnRlcl9yZWdzLAorCWNvbmZpZ19vYV9yZWdzKHVuY29yZSwgb2FfY29uZmlnLT5iX2NvdW50 ZXJfcmVncywKIAkJICAgICAgIG9hX2NvbmZpZy0+Yl9jb3VudGVyX3JlZ3NfbGVuKTsKIAogCXJl dHVybiAwOwpAQCAtMTYwNCwxNSArMTU5OSwxNCBAQCBzdGF0aWMgaW50IGhzd19lbmFibGVfbWV0 cmljX3NldChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCiBzdGF0aWMgdm9pZCBo c3dfZGlzYWJsZV9tZXRyaWNfc2V0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsK KwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBzdHJlYW0tPmd0LT51bmNvcmU7CiAKLQlJ OTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwgKEk5MTVfUkVBRChHRU42X1VDR0NUTDEpICYKLQkJCQkg IH5HRU42X0NTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpKTsKLQlJOTE1X1dSSVRFKEdFTjdfTUlT Q0NQQ1RMLCAoSTkxNV9SRUFEKEdFTjdfTUlTQ0NQQ1RMKSB8Ci0JCQkJICAgIEdFTjdfRE9QX0NM T0NLX0dBVEVfRU5BQkxFKSk7CisJaW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIEdFTjZfVUNHQ1RM MSwKKwkJCSBHRU42X0NTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUsIDApOworCWludGVsX3VuY29y ZV9ybXcodW5jb3JlLCBHRU43X01JU0NDUENUTCwKKwkJCSAwLCBHRU43X0RPUF9DTE9DS19HQVRF X0VOQUJMRSk7CiAKLQlJOTE1X1dSSVRFKEdEVF9DSElDS0VOX0JJVFMsIChJOTE1X1JFQUQoR0RU X0NISUNLRU5fQklUUykgJgotCQkJCSAgICAgIH5HVF9OT0FfRU5BQkxFKSk7CisJaW50ZWxfdW5j b3JlX3Jtdyh1bmNvcmUsIEdEVF9DSElDS0VOX0JJVFMsIEdUX05PQV9FTkFCTEUsIDApOwogfQog CiBzdGF0aWMgdTMyIG9hX2NvbmZpZ19mbGV4X3JlZyhjb25zdCBzdHJ1Y3QgaTkxNV9vYV9jb25m aWcgKm9hX2NvbmZpZywKQEAgLTE2NDcsOSArMTY0MSw4IEBAIHN0YXRpYyB2b2lkCiBnZW44X3Vw ZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAog CQkJICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBjZS0+ZW5naW5lLT5pOTE1OwotCXUzMiBjdHhf b2FjdHhjdHJsID0gaTkxNS0+cGVyZi5jdHhfb2FjdHhjdHJsX29mZnNldDsKLQl1MzIgY3R4X2Zs ZXhldTAgPSBpOTE1LT5wZXJmLmN0eF9mbGV4ZXUwX29mZnNldDsKKwl1MzIgY3R4X29hY3R4Y3Ry bCA9IHN0cmVhbS0+cGVyZi0+Y3R4X29hY3R4Y3RybF9vZmZzZXQ7CisJdTMyIGN0eF9mbGV4ZXUw ID0gc3RyZWFtLT5wZXJmLT5jdHhfZmxleGV1MF9vZmZzZXQ7CiAJLyogVGhlIE1NSU8gb2Zmc2V0 cyBmb3IgRmxleCBFVSByZWdpc3RlcnMgYXJlbid0IGNvbnRpZ3VvdXMgKi8KIAlpOTE1X3JlZ190 IGZsZXhfcmVnc1tdID0gewogCQlFVV9QRVJGX0NOVEwwLApAQCAtMTY3Miw3ICsxNjY1LDggQEAg Z2VuOF91cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjZSwKIAkJcmVnX3N0YXRlW2N0eF9mbGV4ZXUwICsgaSAqIDIgKyAxXSA9CiAJCQlvYV9jb25m aWdfZmxleF9yZWcoc3RyZWFtLT5vYV9jb25maWcsIGZsZXhfcmVnc1tpXSk7CiAKLQlyZWdfc3Rh dGVbQ1RYX1JfUFdSX0NMS19TVEFURV0gPSBpbnRlbF9zc2V1X21ha2VfcnBjcyhpOTE1LCAmY2Ut PnNzZXUpOworCXJlZ19zdGF0ZVtDVFhfUl9QV1JfQ0xLX1NUQVRFXSA9CisJCWludGVsX3NzZXVf bWFrZV9ycGNzKGNlLT5lbmdpbmUtPmk5MTUsICZjZS0+c3NldSk7CiB9CiAKIHN0cnVjdCBmbGV4 IHsKQEAgLTE4MjcsOSArMTgyMSw5IEBAIHN0YXRpYyBpbnQgZ2VuOF9jb25maWd1cmVfY29udGV4 dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAogc3RhdGljIGludCBnZW44X2NvbmZpZ3Vy ZV9hbGxfY29udGV4dHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCQkgICAg ICAgY29uc3Qgc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9jb25maWcpCiB7Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBzdHJlYW0tPmRldl9wcml2OworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gc3RyZWFtLT5wZXJmLT5pOTE1OwogCS8qIFRoZSBNTUlPIG9mZnNl dHMgZm9yIEZsZXggRVUgcmVnaXN0ZXJzIGFyZW4ndCBjb250aWd1b3VzICovCi0JY29uc3QgdTMy IGN0eF9mbGV4ZXUwID0gaTkxNS0+cGVyZi5jdHhfZmxleGV1MF9vZmZzZXQ7CisJY29uc3QgdTMy IGN0eF9mbGV4ZXUwID0gc3RyZWFtLT5wZXJmLT5jdHhfZmxleGV1MF9vZmZzZXQ7CiAjZGVmaW5l IGN0eF9mbGV4ZXVOKE4pIChjdHhfZmxleGV1MCArIDIgKiAoTikgKyAxKQogCXN0cnVjdCBmbGV4 IHJlZ3NbXSA9IHsKIAkJewpAQCAtMTgzOCw3ICsxODMyLDcgQEAgc3RhdGljIGludCBnZW44X2Nv bmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJ fSwKIAkJewogCQkJR0VOOF9PQUNUWENPTlRST0wsCi0JCQlpOTE1LT5wZXJmLmN0eF9vYWN0eGN0 cmxfb2Zmc2V0ICsgMSwKKwkJCXN0cmVhbS0+cGVyZi0+Y3R4X29hY3R4Y3RybF9vZmZzZXQgKyAx LAogCQkJKChzdHJlYW0tPnBlcmlvZF9leHBvbmVudCA8PCBHRU44X09BX1RJTUVSX1BFUklPRF9T SElGVCkgfAogCQkJIChzdHJlYW0tPnBlcmlvZGljID8gR0VOOF9PQV9USU1FUl9FTkFCTEUgOiAw KSB8CiAJCQkgR0VOOF9PQV9DT1VOVEVSX1JFU1VNRSkKQEAgLTE5MjIsNyArMTkxNiw3IEBAIHN0 YXRpYyBpbnQgZ2VuOF9jb25maWd1cmVfYWxsX2NvbnRleHRzKHN0cnVjdCBpOTE1X3BlcmZfc3Ry ZWFtICpzdHJlYW0sCiAKIHN0YXRpYyBpbnQgZ2VuOF9lbmFibGVfbWV0cmljX3NldChzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gc3RyZWFtLT5ndC0+dW5jb3JlOwogCWNvbnN0IHN0cnVjdCBpOTE1X29hX2NvbmZpZyAqb2Ff Y29uZmlnID0gc3RyZWFtLT5vYV9jb25maWc7CiAJaW50IHJldDsKIApAQCAtMTk0OSwxMCArMTk0 MywxMCBAQCBzdGF0aWMgaW50IGdlbjhfZW5hYmxlX21ldHJpY19zZXQoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKnN0cmVhbSkKIAkgKiBiZSByZWFkIGJhY2sgZnJvbSBhdXRvbWF0aWNhbGx5IHRy aWdnZXJlZCByZXBvcnRzLCBhcyBwYXJ0IG9mIHRoZQogCSAqIFJQVF9JRCBmaWVsZC4KIAkgKi8K LQlpZiAoSVNfR0VOX1JBTkdFKGRldl9wcml2LCA5LCAxMSkpIHsKLQkJSTkxNV9XUklURShHRU44 X09BX0RFQlVHLAotCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjlfT0FfREVCVUdfRElTQUJM RV9DTEtfUkFUSU9fUkVQT1JUUyB8Ci0JCQkJCSAgICAgIEdFTjlfT0FfREVCVUdfSU5DTFVERV9D TEtfUkFUSU8pKTsKKwlpZiAoSVNfR0VOX1JBTkdFKHN0cmVhbS0+cGVyZi0+aTkxNSwgOSwgMTEp KSB7CisJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjhfT0FfREVCVUcsCisJCQkJICAg X01BU0tFRF9CSVRfRU5BQkxFKEdFTjlfT0FfREVCVUdfRElTQUJMRV9DTEtfUkFUSU9fUkVQT1JU UyB8CisJCQkJCQkgICAgICBHRU45X09BX0RFQlVHX0lOQ0xVREVfQ0xLX1JBVElPKSk7CiAJfQog CiAJLyoKQEAgLTE5NjQsMTAgKzE5NTgsMTAgQEAgc3RhdGljIGludCBnZW44X2VuYWJsZV9tZXRy aWNfc2V0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiAJaWYgKHJldCkKIAkJcmV0 dXJuIHJldDsKIAotCWNvbmZpZ19vYV9yZWdzKGRldl9wcml2LCBvYV9jb25maWctPm11eF9yZWdz LCBvYV9jb25maWctPm11eF9yZWdzX2xlbik7CisJY29uZmlnX29hX3JlZ3ModW5jb3JlLCBvYV9j b25maWctPm11eF9yZWdzLCBvYV9jb25maWctPm11eF9yZWdzX2xlbik7CiAJZGVsYXlfYWZ0ZXJf bXV4KCk7CiAKLQljb25maWdfb2FfcmVncyhkZXZfcHJpdiwgb2FfY29uZmlnLT5iX2NvdW50ZXJf cmVncywKKwljb25maWdfb2FfcmVncyh1bmNvcmUsIG9hX2NvbmZpZy0+Yl9jb3VudGVyX3JlZ3Ms CiAJCSAgICAgICBvYV9jb25maWctPmJfY291bnRlcl9yZWdzX2xlbik7CiAKIAlyZXR1cm4gMDsK QEAgLTE5NzUsMzAgKzE5NjksMjggQEAgc3RhdGljIGludCBnZW44X2VuYWJsZV9tZXRyaWNfc2V0 KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiAKIHN0YXRpYyB2b2lkIGdlbjhfZGlz YWJsZV9tZXRyaWNfc2V0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwlzdHJ1 Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBzdHJlYW0tPmd0LT51bmNvcmU7CiAKIAkvKiBSZXNl dCBhbGwgY29udGV4dHMnIHNsaWNlcy9zdWJzbGljZXMgY29uZmlndXJhdGlvbnMuICovCiAJZ2Vu OF9jb25maWd1cmVfYWxsX2NvbnRleHRzKHN0cmVhbSwgTlVMTCk7CiAKLQlJOTE1X1dSSVRFKEdE VF9DSElDS0VOX0JJVFMsIChJOTE1X1JFQUQoR0RUX0NISUNLRU5fQklUUykgJgotCQkJCSAgICAg IH5HVF9OT0FfRU5BQkxFKSk7CisJaW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIEdEVF9DSElDS0VO X0JJVFMsIEdUX05PQV9FTkFCTEUsIDApOwogfQogCiBzdGF0aWMgdm9pZCBnZW4xMF9kaXNhYmxl X21ldHJpY19zZXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIHsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCXN0cnVjdCBp bnRlbF91bmNvcmUgKnVuY29yZSA9IHN0cmVhbS0+Z3QtPnVuY29yZTsKIAogCS8qIFJlc2V0IGFs bCBjb250ZXh0cycgc2xpY2VzL3N1YnNsaWNlcyBjb25maWd1cmF0aW9ucy4gKi8KIAlnZW44X2Nv bmZpZ3VyZV9hbGxfY29udGV4dHMoc3RyZWFtLCBOVUxMKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBk aXNhYmxlIG5vYSB0byBzYXZlIHBvd2VyLiAqLwotCUk5MTVfV1JJVEUoUlBNX0NPTkZJRzEsCi0J CSAgIEk5MTVfUkVBRChSUE1fQ09ORklHMSkgJiB+R0VOMTBfR1RfTk9BX0VOQUJMRSk7CisJaW50 ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIFJQTV9DT05GSUcxLCBHRU4xMF9HVF9OT0FfRU5BQkxFLCAw KTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuN19vYV9lbmFibGUoc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJl YW0tPmRldl9wcml2OworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHN0cmVhbS0+Z3Qt PnVuY29yZTsKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gc3RyZWFtLT5jdHg7CiAJ dTMyIGN0eF9pZCA9IHN0cmVhbS0+c3BlY2lmaWNfY3R4X2lkOwogCWJvb2wgcGVyaW9kaWMgPSBz dHJlYW0tPnBlcmlvZGljOwpAQCAtMjAxNiwxOSArMjAwOCwxOSBAQCBzdGF0aWMgdm9pZCBnZW43 X29hX2VuYWJsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCSAqLwogCWdlbjdf aW5pdF9vYV9idWZmZXIoc3RyZWFtKTsKIAotCUk5MTVfV1JJVEUoR0VON19PQUNPTlRST0wsCi0J CSAgIChjdHhfaWQgJiBHRU43X09BQ09OVFJPTF9DVFhfTUFTSykgfAotCQkgICAocGVyaW9kX2V4 cG9uZW50IDw8Ci0JCSAgICBHRU43X09BQ09OVFJPTF9USU1FUl9QRVJJT0RfU0hJRlQpIHwKLQkJ ICAgKHBlcmlvZGljID8gR0VON19PQUNPTlRST0xfVElNRVJfRU5BQkxFIDogMCkgfAotCQkgICAo cmVwb3J0X2Zvcm1hdCA8PCBHRU43X09BQ09OVFJPTF9GT1JNQVRfU0hJRlQpIHwKLQkJICAgKGN0 eCA/IEdFTjdfT0FDT05UUk9MX1BFUl9DVFhfRU5BQkxFIDogMCkgfAotCQkgICBHRU43X09BQ09O VFJPTF9FTkFCTEUpOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjdfT0FDT05UUk9M LAorCQkJICAgKGN0eF9pZCAmIEdFTjdfT0FDT05UUk9MX0NUWF9NQVNLKSB8CisJCQkgICAocGVy aW9kX2V4cG9uZW50IDw8CisJCQkgICAgR0VON19PQUNPTlRST0xfVElNRVJfUEVSSU9EX1NISUZU KSB8CisJCQkgICAocGVyaW9kaWMgPyBHRU43X09BQ09OVFJPTF9USU1FUl9FTkFCTEUgOiAwKSB8 CisJCQkgICAocmVwb3J0X2Zvcm1hdCA8PCBHRU43X09BQ09OVFJPTF9GT1JNQVRfU0hJRlQpIHwK KwkJCSAgIChjdHggPyBHRU43X09BQ09OVFJPTF9QRVJfQ1RYX0VOQUJMRSA6IDApIHwKKwkJCSAg IEdFTjdfT0FDT05UUk9MX0VOQUJMRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbjhfb2FfZW5hYmxl KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfdW5jb3Jl ICp1bmNvcmUgPSBzdHJlYW0tPmd0LT51bmNvcmU7CiAJdTMyIHJlcG9ydF9mb3JtYXQgPSBzdHJl YW0tPm9hX2J1ZmZlci5mb3JtYXQ7CiAKIAkvKgpAQCAtMjA0Nyw5ICsyMDM5LDkgQEAgc3RhdGlj IHZvaWQgZ2VuOF9vYV9lbmFibGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAkg KiBmaWx0ZXJpbmcgYW5kIGluc3RlYWQgZmlsdGVyIG9uIHRoZSBjcHUgYmFzZWQgb24gdGhlIGNv bnRleHQtaWQKIAkgKiBmaWVsZCBvZiByZXBvcnRzCiAJICovCi0JSTkxNV9XUklURShHRU44X09B Q09OVFJPTCwgKHJlcG9ydF9mb3JtYXQgPDwKLQkJCQkgICAgR0VOOF9PQV9SRVBPUlRfRk9STUFU X1NISUZUKSB8Ci0JCQkJICAgR0VOOF9PQV9DT1VOVEVSX0VOQUJMRSk7CisJaW50ZWxfdW5jb3Jl X3dyaXRlKHVuY29yZSwgR0VOOF9PQUNPTlRST0wsCisJCQkgICAocmVwb3J0X2Zvcm1hdCA8PCBH RU44X09BX1JFUE9SVF9GT1JNQVRfU0hJRlQpIHwKKwkJCSAgIEdFTjhfT0FfQ09VTlRFUl9FTkFC TEUpOwogfQogCiAvKioKQEAgLTIwNjMsOSArMjA1NSw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfb2Ff ZW5hYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiAgKi8KIHN0YXRpYyB2b2lk IGk5MTVfb2Ffc3RyZWFtX2VuYWJsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQog ewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7 Ci0KLQlkZXZfcHJpdi0+cGVyZi5vcHMub2FfZW5hYmxlKHN0cmVhbSk7CisJc3RyZWFtLT5wZXJm LT5vcHMub2FfZW5hYmxlKHN0cmVhbSk7CiAKIAlpZiAoc3RyZWFtLT5wZXJpb2RpYykKIAkJaHJ0 aW1lcl9zdGFydCgmc3RyZWFtLT5wb2xsX2NoZWNrX3RpbWVyLApAQCAtMjA3NSw3ICsyMDY1LDcg QEAgc3RhdGljIHZvaWQgaTkxNV9vYV9zdHJlYW1fZW5hYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3Ry ZWFtICpzdHJlYW0pCiAKIHN0YXRpYyB2b2lkIGdlbjdfb2FfZGlzYWJsZShzdHJ1Y3QgaTkxNV9w ZXJmX3N0cmVhbSAqc3RyZWFtKQogewotCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZz dHJlYW0tPmRldl9wcml2LT51bmNvcmU7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0g c3RyZWFtLT5ndC0+dW5jb3JlOwogCiAJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VON19P QUNPTlRST0wsIDApOwogCWlmIChpbnRlbF93YWl0X2Zvcl9yZWdpc3Rlcih1bmNvcmUsCkBAIC0y MDg2LDcgKzIwNzYsNyBAQCBzdGF0aWMgdm9pZCBnZW43X29hX2Rpc2FibGUoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSkKIAogc3RhdGljIHZvaWQgZ2VuOF9vYV9kaXNhYmxlKHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7Ci0Jc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gJnN0cmVhbS0+ZGV2X3ByaXYtPnVuY29yZTsKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1 bmNvcmUgPSBzdHJlYW0tPmd0LT51bmNvcmU7CiAKIAlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBHRU44X09BQ09OVFJPTCwgMCk7CiAJaWYgKGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKHVuY29y ZSwKQEAgLTIxMDUsOSArMjA5NSw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfb2FfZGlzYWJsZShzdHJ1 Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogICovCiBzdGF0aWMgdm9pZCBpOTE1X29hX3N0 cmVhbV9kaXNhYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKLQotCWRldl9w cml2LT5wZXJmLm9wcy5vYV9kaXNhYmxlKHN0cmVhbSk7CisJc3RyZWFtLT5wZXJmLT5vcHMub2Ff ZGlzYWJsZShzdHJlYW0pOwogCiAJaWYgKHN0cmVhbS0+cGVyaW9kaWMpCiAJCWhydGltZXJfY2Fu Y2VsKCZzdHJlYW0tPnBvbGxfY2hlY2tfdGltZXIpOwpAQCAtMjE0NCw3ICsyMTMyLDcgQEAgc3Rh dGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0sCiAJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSAqcGFyYW0sCiAJ CQkgICAgICAgc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzICpwcm9wcykKIHsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCXN0cnVjdCBp OTE1X3BlcmYgKnBlcmYgPSBzdHJlYW0tPnBlcmY7CiAJaW50IGZvcm1hdF9zaXplOwogCWludCBy ZXQ7CiAKQEAgLTIxNTIsNyArMjE0MCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9zdHJlYW1faW5p dChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCSAqIHJlYXNvbiB0aGVuIGRvbid0 IGxldCB1c2Vyc3BhY2UgdHJ5IHRoZWlyIGx1Y2sgd2l0aCBjb25maWcKIAkgKiBJRHMKIAkgKi8K LQlpZiAoIWRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaikgeworCWlmICghcGVyZi0+bWV0cmlj c19rb2JqKSB7CiAJCURSTV9ERUJVRygiT0EgbWV0cmljcyB3ZXJlbid0IGFkdmVydGlzZWQgdmlh IHN5c2ZzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjE2Miw3ICsyMTUwLDcgQEAg c3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpz dHJlYW0sCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghZGV2X3ByaXYtPnBlcmYub3Bz LmVuYWJsZV9tZXRyaWNfc2V0KSB7CisJaWYgKCFwZXJmLT5vcHMuZW5hYmxlX21ldHJpY19zZXQp IHsKIAkJRFJNX0RFQlVHKCJPQSB1bml0IG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVO T0RFVjsKIAl9CkBAIC0yMTcxLDcgKzIxNTksNyBAQCBzdGF0aWMgaW50IGk5MTVfb2Ffc3RyZWFt X2luaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkgKiBjb3VudGVyIHJlcG9y dHMgYW5kIG1hcnNoYWwgdG8gdGhlIGFwcHJvcHJpYXRlIGNsaWVudAogCSAqIHdlIGN1cnJlbnRs eSBvbmx5IGFsbG93IGV4Y2x1c2l2ZSBhY2Nlc3MKIAkgKi8KLQlpZiAoZGV2X3ByaXYtPnBlcmYu ZXhjbHVzaXZlX3N0cmVhbSkgeworCWlmIChwZXJmLT5leGNsdXNpdmVfc3RyZWFtKSB7CiAJCURS TV9ERUJVRygiT0EgdW5pdCBhbHJlYWR5IGluIHVzZVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJ fQpAQCAtMjE4Myw3ICsyMTcxLDcgQEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0 cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAKIAlzdHJlYW0tPnNhbXBsZV9zaXplID0g c2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFkZXIpOwogCi0JZm9ybWF0X3Np emUgPSBkZXZfcHJpdi0+cGVyZi5vYV9mb3JtYXRzW3Byb3BzLT5vYV9mb3JtYXRdLnNpemU7CisJ Zm9ybWF0X3NpemUgPSBwZXJmLT5vYV9mb3JtYXRzW3Byb3BzLT5vYV9mb3JtYXRdLnNpemU7CiAK IAlzdHJlYW0tPnNhbXBsZV9mbGFncyB8PSBTQU1QTEVfT0FfUkVQT1JUOwogCXN0cmVhbS0+c2Ft cGxlX3NpemUgKz0gZm9ybWF0X3NpemU7CkBAIC0yMTkzLDcgKzIxODEsNyBAQCBzdGF0aWMgaW50 IGk5MTVfb2Ffc3RyZWFtX2luaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJ cmV0dXJuIC1FSU5WQUw7CiAKIAlzdHJlYW0tPm9hX2J1ZmZlci5mb3JtYXQgPQotCQlkZXZfcHJp di0+cGVyZi5vYV9mb3JtYXRzW3Byb3BzLT5vYV9mb3JtYXRdLmZvcm1hdDsKKwkJcGVyZi0+b2Ff Zm9ybWF0c1twcm9wcy0+b2FfZm9ybWF0XS5mb3JtYXQ7CiAKIAlzdHJlYW0tPnBlcmlvZGljID0g cHJvcHMtPm9hX3BlcmlvZGljOwogCWlmIChzdHJlYW0tPnBlcmlvZGljKQpAQCAtMjIwNyw3ICsy MTk1LDcgQEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0sCiAJCX0KIAl9CiAKLQlyZXQgPSBnZXRfb2FfY29uZmlnKGRldl9wcml2 LCBwcm9wcy0+bWV0cmljc19zZXQsICZzdHJlYW0tPm9hX2NvbmZpZyk7CisJcmV0ID0gZ2V0X29h X2NvbmZpZyhwZXJmLCBwcm9wcy0+bWV0cmljc19zZXQsICZzdHJlYW0tPm9hX2NvbmZpZyk7CiAJ aWYgKHJldCkgewogCQlEUk1fREVCVUcoIkludmFsaWQgT0EgY29uZmlnIGlkPSVpXG4iLCBwcm9w cy0+bWV0cmljc19zZXQpOwogCQlnb3RvIGVycl9jb25maWc7CkBAIC0yMjI1LDI3ICsyMjEzLDI3 IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVh bSAqc3RyZWFtLAogCSAqICAgSW4gb3VyIGNhc2Ugd2UgYXJlIGV4cGVjdGluZyB0aGF0IHRha2lu ZyBwbSArIEZPUkNFV0FLRQogCSAqICAgcmVmZXJlbmNlcyB3aWxsIGVmZmVjdGl2ZWx5IGRpc2Fi bGUgUkM2LgogCSAqLwotCXN0cmVhbS0+d2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZk ZXZfcHJpdi0+cnVudGltZV9wbSk7Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoJmRldl9w cml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOworCXN0cmVhbS0+d2FrZXJlZiA9IGludGVsX3J1 bnRpbWVfcG1fZ2V0KHN0cmVhbS0+Z3QtPnVuY29yZS0+cnBtKTsKKwlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldChzdHJlYW0tPmd0LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwogCiAJcmV0ID0g YWxsb2Nfb2FfYnVmZmVyKHN0cmVhbSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfb2FfYnVmX2Fs bG9jOwogCi0JcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5k cm0pOworCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzdHJlYW0tPnBlcmYt Pmk5MTUtPmRybSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfbG9jazsKIAogCXN0cmVhbS0+b3Bz ID0gJmk5MTVfb2Ffc3RyZWFtX29wczsKLQlkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFt ID0gc3RyZWFtOworCXBlcmYtPmV4Y2x1c2l2ZV9zdHJlYW0gPSBzdHJlYW07CiAKLQlyZXQgPSBk ZXZfcHJpdi0+cGVyZi5vcHMuZW5hYmxlX21ldHJpY19zZXQoc3RyZWFtKTsKKwlyZXQgPSBwZXJm LT5vcHMuZW5hYmxlX21ldHJpY19zZXQoc3RyZWFtKTsKIAlpZiAocmV0KSB7CiAJCURSTV9ERUJV RygiVW5hYmxlIHRvIGVuYWJsZSBtZXRyaWMgc2V0XG4iKTsKIAkJZ290byBlcnJfZW5hYmxlOwog CX0KIAotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCW11dGV4 X3VubG9jaygmc3RyZWFtLT5wZXJmLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKIAogCWhydGlt ZXJfaW5pdCgmc3RyZWFtLT5wb2xsX2NoZWNrX3RpbWVyLAogCQkgICAgIENMT0NLX01PTk9UT05J QywgSFJUSU1FUl9NT0RFX1JFTCk7CkBAIC0yMjU2LDE4ICsyMjQ0LDE4IEBAIHN0YXRpYyBpbnQg aTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCXJl dHVybiAwOwogCiBlcnJfZW5hYmxlOgotCWRldl9wcml2LT5wZXJmLmV4Y2x1c2l2ZV9zdHJlYW0g PSBOVUxMOwotCWRldl9wcml2LT5wZXJmLm9wcy5kaXNhYmxlX21ldHJpY19zZXQoc3RyZWFtKTsK LQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKKwlwZXJmLT5leGNs dXNpdmVfc3RyZWFtID0gTlVMTDsKKwlwZXJmLT5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0KHN0cmVh bSk7CisJbXV0ZXhfdW5sb2NrKCZzdHJlYW0tPnBlcmYtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp OwogCiBlcnJfbG9jazoKIAlmcmVlX29hX2J1ZmZlcihzdHJlYW0pOwogCiBlcnJfb2FfYnVmX2Fs bG9jOgotCXB1dF9vYV9jb25maWcoZGV2X3ByaXYsIHN0cmVhbS0+b2FfY29uZmlnKTsKKwlwdXRf b2FfY29uZmlnKHN0cmVhbS0+b2FfY29uZmlnKTsKIAotCWludGVsX3VuY29yZV9mb3JjZXdha2Vf cHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLQlpbnRlbF9ydW50aW1lX3Bt X3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHN0cmVhbS0+d2FrZXJlZik7CisJaW50ZWxfdW5j b3JlX2ZvcmNld2FrZV9wdXQoc3RyZWFtLT5ndC0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKKwlp bnRlbF9ydW50aW1lX3BtX3B1dChzdHJlYW0tPmd0LT51bmNvcmUtPnJwbSwgc3RyZWFtLT53YWtl cmVmKTsKIAogZXJyX2NvbmZpZzoKIAlpZiAoc3RyZWFtLT5jdHgpCkBAIC0yMzU5LDcgKzIzNDcs NyBAQCBzdGF0aWMgc3NpemVfdCBpOTE1X3BlcmZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJ CSAgICAgIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJc3RydWN0IGk5MTVfcGVyZiAqcGVyZiA9IHN0cmVhbS0+ cGVyZjsKIAlzc2l6ZV90IHJldDsKIAogCS8qIFRvIGVuc3VyZSBpdCdzIGhhbmRsZWQgY29uc2lz dGVudGx5IHdlIHNpbXBseSB0cmVhdCBhbGwgcmVhZHMgb2YgYQpAQCAtMjM4MiwxNSArMjM3MCwx NSBAQCBzdGF0aWMgc3NpemVfdCBpOTE1X3BlcmZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJ CWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAotCQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBl cmYubG9jayk7CisJCQltdXRleF9sb2NrKCZwZXJmLT5sb2NrKTsKIAkJCXJldCA9IGk5MTVfcGVy Zl9yZWFkX2xvY2tlZChzdHJlYW0sIGZpbGUsCiAJCQkJCQkgICAgYnVmLCBjb3VudCwgcHBvcyk7 Ci0JCQltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCQkJbXV0ZXhfdW5sb2Nr KCZwZXJmLT5sb2NrKTsKIAkJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwogCX0gZWxzZSB7Ci0J CW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCQltdXRleF9sb2NrKCZwZXJmLT5s b2NrKTsKIAkJcmV0ID0gaTkxNV9wZXJmX3JlYWRfbG9ja2VkKHN0cmVhbSwgZmlsZSwgYnVmLCBj b3VudCwgcHBvcyk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisJCW11 dGV4X3VubG9jaygmcGVyZi0+bG9jayk7CiAJfQogCiAJLyogV2UgYWxsb3cgdGhlIHBvbGwgY2hl Y2tpbmcgdG8gc29tZXRpbWVzIHJlcG9ydCBmYWxzZSBwb3NpdGl2ZSBFUE9MTElOCkBAIC0yNDI4 LDcgKzI0MTYsNiBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgb2FfcG9sbF9jaGVja190 aW1lcl9jYihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKIAogLyoqCiAgKiBpOTE1X3BlcmZfcG9s bF9sb2NrZWQgLSBwb2xsX3dhaXQoKSB3aXRoIGEgc3VpdGFibGUgd2FpdCBxdWV1ZSBmb3Igc3Ry ZWFtCi0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGluc3RhbmNlCiAgKiBAc3RyZWFtOiBBbiBp OTE1IHBlcmYgc3RyZWFtCiAgKiBAZmlsZTogQW4gaTkxNSBwZXJmIHN0cmVhbSBmaWxlCiAgKiBA d2FpdDogcG9sbCgpIHN0YXRlIHRhYmxlCkBAIC0yNDM3LDE1ICsyNDI0LDE0IEBAIHN0YXRpYyBl bnVtIGhydGltZXJfcmVzdGFydCBvYV9wb2xsX2NoZWNrX3RpbWVyX2NiKHN0cnVjdCBocnRpbWVy ICpocnRpbWVyKQogICogJmk5MTVfcGVyZl9zdHJlYW1fb3BzLT5wb2xsX3dhaXQgdG8gY2FsbCBw b2xsX3dhaXQoKSB3aXRoIGEgd2FpdCBxdWV1ZSB0aGF0CiAgKiB3aWxsIGJlIHdva2VuIGZvciBu ZXcgc3RyZWFtIGRhdGEuCiAgKgotICogTm90ZTogVGhlICZkcm1faTkxNV9wcml2YXRlLT5wZXJm LmxvY2sgbXV0ZXggaGFzIGJlZW4gdGFrZW4gdG8gc2VyaWFsaXplCisgKiBOb3RlOiBUaGUgJnBl cmYtPmxvY2sgbXV0ZXggaGFzIGJlZW4gdGFrZW4gdG8gc2VyaWFsaXplCiAgKiB3aXRoIGFueSBu b24tZmlsZS1vcGVyYXRpb24gZHJpdmVyIGhvb2tzLgogICoKICAqIFJldHVybnM6IGFueSBwb2xs IGV2ZW50cyB0aGF0IGFyZSByZWFkeSB3aXRob3V0IHNsZWVwaW5nCiAgKi8KLXN0YXRpYyBfX3Bv bGxfdCBpOTE1X3BlcmZfcG9sbF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAotCQkJCQkgIHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCi0JCQkJCSAgc3Ry dWN0IGZpbGUgKmZpbGUsCi0JCQkJCSAgcG9sbF90YWJsZSAqd2FpdCkKK3N0YXRpYyBfX3BvbGxf dCBpOTE1X3BlcmZfcG9sbF9sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwK KwkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICBwb2xsX3RhYmxlICp3YWl0 KQogewogCV9fcG9sbF90IGV2ZW50cyA9IDA7CiAKQEAgLTI0NzksMTIgKzI0NjUsMTIgQEAgc3Rh dGljIF9fcG9sbF90IGk5MTVfcGVyZl9wb2xsX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCiBzdGF0aWMgX19wb2xsX3QgaTkxNV9wZXJmX3BvbGwoc3RydWN0IGZpbGUg KmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0 cmVhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCXN0cnVjdCBpOTE1X3BlcmYgKnBlcmYgPSBzdHJl YW0tPnBlcmY7CiAJX19wb2xsX3QgcmV0OwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBlcmYu bG9jayk7Ci0JcmV0ID0gaTkxNV9wZXJmX3BvbGxfbG9ja2VkKGRldl9wcml2LCBzdHJlYW0sIGZp bGUsIHdhaXQpOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisJbXV0ZXhf bG9jaygmcGVyZi0+bG9jayk7CisJcmV0ID0gaTkxNV9wZXJmX3BvbGxfbG9ja2VkKHN0cmVhbSwg ZmlsZSwgd2FpdCk7CisJbXV0ZXhfdW5sb2NrKCZwZXJmLT5sb2NrKTsKIAogCXJldHVybiByZXQ7 CiB9CkBAIC0yNTQzLDcgKzI1MjksNyBAQCBzdGF0aWMgdm9pZCBpOTE1X3BlcmZfZGlzYWJsZV9s b2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKICAqIEBjbWQ6IHRoZSBpb2N0 bCByZXF1ZXN0CiAgKiBAYXJnOiB0aGUgaW9jdGwgZGF0YQogICoKLSAqIE5vdGU6IFRoZSAmZHJt X2k5MTVfcHJpdmF0ZS0+cGVyZi5sb2NrIG11dGV4IGhhcyBiZWVuIHRha2VuIHRvIHNlcmlhbGl6 ZQorICogTm90ZTogVGhlICZwZXJmLT5sb2NrIG11dGV4IGhhcyBiZWVuIHRha2VuIHRvIHNlcmlh bGl6ZQogICogd2l0aCBhbnkgbm9uLWZpbGUtb3BlcmF0aW9uIGRyaXZlciBob29rcy4KICAqCiAg KiBSZXR1cm5zOiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLiBSZXR1 cm5zIC1FSU5WQUwgZm9yCkBAIC0yNTgxLDEyICsyNTY3LDEyIEBAIHN0YXRpYyBsb25nIGk5MTVf cGVyZl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykK IHsKIAlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtID0gZmlsZS0+cHJpdmF0ZV9kYXRh OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7 CisJc3RydWN0IGk5MTVfcGVyZiAqcGVyZiA9IHN0cmVhbS0+cGVyZjsKIAlsb25nIHJldDsKIAot CW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOworCW11dGV4X2xvY2soJnBlcmYtPmxv Y2spOwogCXJldCA9IGk5MTVfcGVyZl9pb2N0bF9sb2NrZWQoc3RyZWFtLCBjbWQsIGFyZyk7Ci0J bXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwltdXRleF91bmxvY2soJnBlcmYt PmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI1OTgsNyArMjU4NCw3IEBAIHN0YXRpYyBs b25nIGk5MTVfcGVyZl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKICAqIEZyZWVzIGFsbCByZXNv dXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBpOTE1IHBlcmYgQHN0cmVhbSwgZGlzYWJs aW5nCiAgKiBhbnkgYXNzb2NpYXRlZCBkYXRhIGNhcHR1cmUgaW4gdGhlIHByb2Nlc3MuCiAgKgot ICogTm90ZTogVGhlICZkcm1faTkxNV9wcml2YXRlLT5wZXJmLmxvY2sgbXV0ZXggaGFzIGJlZW4g dGFrZW4gdG8gc2VyaWFsaXplCisgKiBOb3RlOiBUaGUgJnBlcmYtPmxvY2sgbXV0ZXggaGFzIGJl ZW4gdGFrZW4gdG8gc2VyaWFsaXplCiAgKiB3aXRoIGFueSBub24tZmlsZS1vcGVyYXRpb24gZHJp dmVyIGhvb2tzLgogICovCiBzdGF0aWMgdm9pZCBpOTE1X3BlcmZfZGVzdHJveV9sb2NrZWQoc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKQEAgLTI2MzEsMTQgKzI2MTcsMTQgQEAgc3Rh dGljIHZvaWQgaTkxNV9wZXJmX2Rlc3Ryb3lfbG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0pCiBzdGF0aWMgaW50IGk5MTVfcGVyZl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5v ZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaTkxNV9wZXJmICpwZXJmID0gc3RyZWFt LT5wZXJmOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisJbXV0ZXhfbG9j aygmcGVyZi0+bG9jayk7CiAJaTkxNV9wZXJmX2Rlc3Ryb3lfbG9ja2VkKHN0cmVhbSk7Ci0JbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKKwltdXRleF91bmxvY2soJnBlcmYtPmxv Y2spOwogCiAJLyogUmVsZWFzZSB0aGUgcmVmZXJlbmNlIHRoZSBwZXJmIHN0cmVhbSBrZXB0IG9u IHRoZSBkcml2ZXIuICovCi0JZHJtX2Rldl9wdXQoJmRldl9wcml2LT5kcm0pOworCWRybV9kZXZf cHV0KCZwZXJmLT5pOTE1LT5kcm0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjYwLDcgKzI2NDYs NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewogCiAvKioK ICAqIGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZCAtIERSTSBpb2N0bCgpIGZvciB1c2Vyc3Bh Y2UgdG8gb3BlbiBhIHN0cmVhbSBGRAotICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5j ZQorICogQHBlcmY6IGk5MTUgcGVyZiBpbnN0YW5jZQogICogQHBhcmFtOiBUaGUgb3BlbiBwYXJh bWV0ZXJzIHBhc3NlZCB0byAnRFJNX0k5MTVfUEVSRl9PUEVOYAogICogQHByb3BzOiBpbmRpdmlk dWFsbHkgdmFsaWRhdGVkIHU2NCBwcm9wZXJ0eSB2YWx1ZSBwYWlycwogICogQGZpbGU6IGRybSBm aWxlCkBAIC0yNjY4LDcgKzI2NTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyBmb3BzID0gewogICogU2VlIGk5MTVfcGVyZl9pb2N0bF9vcGVuKCkgZm9yIGludGVyZmFj ZSBkZXRhaWxzLgogICoKICAqIEltcGxlbWVudHMgZnVydGhlciBzdHJlYW0gY29uZmlnIHZhbGlk YXRpb24gYW5kIHN0cmVhbSBpbml0aWFsaXphdGlvbiBvbgotICogYmVoYWxmIG9mIGk5MTVfcGVy Zl9vcGVuX2lvY3RsKCkgd2l0aCB0aGUgJmRybV9pOTE1X3ByaXZhdGUtPnBlcmYubG9jayBtdXRl eAorICogYmVoYWxmIG9mIGk5MTVfcGVyZl9vcGVuX2lvY3RsKCkgd2l0aCB0aGUgJnBlcmYtPmxv Y2sgbXV0ZXgKICAqIHRha2VuIHRvIHNlcmlhbGl6ZSB3aXRoIGFueSBub24tZmlsZS1vcGVyYXRp b24gZHJpdmVyIGhvb2tzLgogICoKICAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgdGhlIEBwcm9wcyBo YXZlIG9ubHkgYmVlbiB2YWxpZGF0ZWQgaW4gaXNvbGF0aW9uIGFuZApAQCAtMjY4Myw3ICsyNjY5 LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKICAqIFJl dHVybnM6IHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KIHN0 YXRpYyBpbnQKLWk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCitpOTE1X3BlcmZfb3Blbl9pb2N0bF9sb2NrZWQoc3RydWN0IGk5MTVf cGVyZiAqcGVyZiwKIAkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtICpwYXJh bSwKIAkJCSAgICBzdHJ1Y3QgcGVyZl9vcGVuX3Byb3BlcnRpZXMgKnByb3BzLAogCQkJICAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSkKQEAgLTI3MjIsNyArMjcwOCw3IEBAIGk5MTVfcGVyZl9vcGVu X2lvY3RsX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJICogTUlf UkVQT1JUX1BFUkZfQ09VTlQgY29tbWFuZHMgYW5kIHNvIGNvbnNpZGVyIGl0IGEgcHJpdmlsZWdl ZCBvcCB0bwogCSAqIGVuYWJsZSB0aGUgT0EgdW5pdCBieSBkZWZhdWx0LgogCSAqLwotCWlmIChJ U19IQVNXRUxMKGRldl9wcml2KSAmJiBzcGVjaWZpY19jdHgpCisJaWYgKElTX0hBU1dFTEwocGVy Zi0+aTkxNSkgJiYgc3BlY2lmaWNfY3R4KQogCQlwcml2aWxlZ2VkX29wID0gZmFsc2U7CiAKIAkv KiBTaW1pbGFyIHRvIHBlcmYncyBrZXJuZWwucGVyZl9wYXJhbm9pZF9jcHUgc3lzY3RsIG9wdGlv bgpAQCAtMjc0Myw3ICsyNzI5LDggQEAgaTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJZ290byBlcnJfY3R4OwogCX0KIAotCXN0 cmVhbS0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKKwlzdHJlYW0tPnBlcmYgPSBwZXJmOworCXN0cmVh bS0+Z3QgPSAmcGVyZi0+aTkxNS0+Z3Q7CiAJc3RyZWFtLT5jdHggPSBzcGVjaWZpY19jdHg7CiAK IAlyZXQgPSBpOTE1X29hX3N0cmVhbV9pbml0KHN0cmVhbSwgcGFyYW0sIHByb3BzKTsKQEAgLTI3 NTksNyArMjc0Niw3IEBAIGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCWdvdG8gZXJyX2ZsYWdzOwogCX0KIAotCWxpc3RfYWRk KCZzdHJlYW0tPmxpbmssICZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zKTsKKwlsaXN0X2FkZCgmc3Ry ZWFtLT5saW5rLCAmcGVyZi0+c3RyZWFtcyk7CiAKIAlpZiAocGFyYW0tPmZsYWdzICYgSTkxNV9Q RVJGX0ZMQUdfRkRfQ0xPRVhFQykKIAkJZl9mbGFncyB8PSBPX0NMT0VYRUM7CkBAIC0yNzc4LDcg KzI3NjUsNyBAQCBpOTE1X3BlcmZfb3Blbl9pb2N0bF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAogCS8qIFRha2UgYSByZWZlcmVuY2Ugb24gdGhlIGRyaXZlciB0aGF0 IHdpbGwgYmUga2VwdCB3aXRoIHN0cmVhbV9mZAogCSAqIHVudGlsIGl0cyByZWxlYXNlLgogCSAq LwotCWRybV9kZXZfZ2V0KCZkZXZfcHJpdi0+ZHJtKTsKKwlkcm1fZGV2X2dldCgmcGVyZi0+aTkx NS0+ZHJtKTsKIAogCXJldHVybiBzdHJlYW1fZmQ7CiAKQEAgLTI3OTYsMTUgKzI3ODMsMTUgQEAg aTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdTY0IG9hX2V4cG9uZW50X3RvX25zKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IGV4cG9uZW50KQorc3RhdGljIHU2 NCBvYV9leHBvbmVudF90b19ucyhzdHJ1Y3QgaTkxNV9wZXJmICpwZXJmLCBpbnQgZXhwb25lbnQp CiB7CiAJcmV0dXJuIGRpdjY0X3U2NCgxMDAwMDAwMDAwVUxMICogKDJVTEwgPDwgZXhwb25lbnQp LAotCQkJIDEwMDBVTEwgKiBSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5jc190aW1lc3RhbXBfZnJl cXVlbmN5X2toeik7CisJCQkgMTAwMFVMTCAqIFJVTlRJTUVfSU5GTyhwZXJmLT5pOTE1KS0+Y3Nf dGltZXN0YW1wX2ZyZXF1ZW5jeV9raHopOwogfQogCiAvKioKICAqIHJlYWRfcHJvcGVydGllc191 bmxvY2tlZCAtIHZhbGlkYXRlICsgY29weSB1c2Vyc3BhY2Ugc3RyZWFtIG9wZW4gcHJvcGVydGll cwotICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQorICogQHBlcmY6IGk5MTUgcGVy ZiBpbnN0YW5jZQogICogQHVwcm9wczogVGhlIGFycmF5IG9mIHU2NCBrZXkgdmFsdWUgcGFpcnMg Z2l2ZW4gYnkgdXNlcnNwYWNlCiAgKiBAbl9wcm9wczogVGhlIG51bWJlciBvZiBrZXkgdmFsdWUg cGFpcnMgZXhwZWN0ZWQgaW4gQHVwcm9wcwogICogQHByb3BzOiBUaGUgc3RyZWFtIGNvbmZpZ3Vy YXRpb24gYnVpbHQgdXAgd2hpbGUgdmFsaWRhdGluZyBwcm9wZXJ0aWVzCkBAIC0yODE3LDcgKzI4 MDQsNyBAQCBzdGF0aWMgdTY0IG9hX2V4cG9uZW50X3RvX25zKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgaW50IGV4cG9uZW50KQogICogd2Ugc2hvdWxkbid0IHZhbGlkYXRlIG9y IGFzc3VtZSBhbnl0aGluZyBhYm91dCBvcmRlcmluZyBoZXJlLiBUaGlzIGRvZXNuJ3QKICAqIHJ1 bGUgb3V0IGRlZmluaW5nIG5ldyBwcm9wZXJ0aWVzIHdpdGggb3JkZXJpbmcgcmVxdWlyZW1lbnRz IGluIHRoZSBmdXR1cmUuCiAgKi8KLXN0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2Vk KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKK3N0YXRpYyBpbnQgcmVhZF9wcm9w ZXJ0aWVzX3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmYgKnBlcmYsCiAJCQkJICAgIHU2NCBfX3Vz ZXIgKnVwcm9wcywKIAkJCQkgICAgdTMyIG5fcHJvcHMsCiAJCQkJICAgIHN0cnVjdCBwZXJmX29w ZW5fcHJvcGVydGllcyAqcHJvcHMpCkBAIC0yODgzLDcgKzI4NzAsNyBAQCBzdGF0aWMgaW50IHJl YWRfcHJvcGVydGllc191bmxvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CiAJCQkJCSAgdmFsdWUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJaWYgKCFkZXZf cHJpdi0+cGVyZi5vYV9mb3JtYXRzW3ZhbHVlXS5zaXplKSB7CisJCQlpZiAoIXBlcmYtPm9hX2Zv cm1hdHNbdmFsdWVdLnNpemUpIHsKIAkJCQlEUk1fREVCVUcoIlVuc3VwcG9ydGVkIE9BIHJlcG9y dCBmb3JtYXQgJWxsdVxuIiwKIAkJCQkJICB2YWx1ZSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CkBA IC0yOTA0LDcgKzI4OTEsNyBAQCBzdGF0aWMgaW50IHJlYWRfcHJvcGVydGllc191bmxvY2tlZChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgKi8KIAogCQkJQlVJTERfQlVH X09OKHNpemVvZihvYV9wZXJpb2QpICE9IDgpOwotCQkJb2FfcGVyaW9kID0gb2FfZXhwb25lbnRf dG9fbnMoZGV2X3ByaXYsIHZhbHVlKTsKKwkJCW9hX3BlcmlvZCA9IG9hX2V4cG9uZW50X3RvX25z KHBlcmYsIHZhbHVlKTsKIAogCQkJLyogVGhpcyBjaGVjayBpcyBwcmltYXJpbHkgdG8gZW5zdXJl IHRoYXQgb2FfcGVyaW9kIDw9CiAJCQkgKiBVSU5UMzJfTUFYIChiZWZvcmUgcGFzc2luZyB0byBk b19kaXYgd2hpY2ggb25seQpAQCAtMjk1OCw3ICsyOTQ1LDcgQEAgc3RhdGljIGludCByZWFkX3By b3BlcnRpZXNfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogICog bXV0ZXggdG8gYXZvaWQgYW4gYXdrd2FyZCBsb2NrZGVwIHdpdGggbW1hcF9zZW0uCiAgKgogICog TW9zdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgaGFuZGxlZCBieQotICogaTkx NV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKCkgYWZ0ZXIgdGFraW5nIHRoZSAmZHJtX2k5MTVfcHJp dmF0ZS0+cGVyZi5sb2NrCisgKiBpOTE1X3BlcmZfb3Blbl9pb2N0bF9sb2NrZWQoKSBhZnRlciB0 YWtpbmcgdGhlICZwZXJmLT5sb2NrCiAgKiBtdXRleCBmb3Igc2VyaWFsaXppbmcgd2l0aCBhbnkg bm9uLWZpbGUtb3BlcmF0aW9uIGRyaXZlciBob29rcy4KICAqCiAgKiBSZXR1cm46IEEgbmV3bHkg b3BlbmVkIGk5MTUgUGVyZiBzdHJlYW0gZmlsZSBkZXNjcmlwdG9yIG9yIG5lZ2F0aXZlCkBAIC0y OTY3LDEzICsyOTU0LDEzIEBAIHN0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2VkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIGludCBpOTE1X3BlcmZfb3Blbl9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOworCXN0cnVjdCBpOTE1X3BlcmYgKnBlcmYgPSAmdG9faTkxNShkZXYpLT5wZXJm OwogCXN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gKnBhcmFtID0gZGF0YTsKIAlzdHJ1 Y3QgcGVyZl9vcGVuX3Byb3BlcnRpZXMgcHJvcHM7CiAJdTMyIGtub3duX29wZW5fZmxhZ3M7CiAJ aW50IHJldDsKIAotCWlmICghZGV2X3ByaXYtPnBlcmYuaW5pdGlhbGl6ZWQpIHsKKwlpZiAoIXBl cmYtPmk5MTUpIHsKIAkJRFJNX0RFQlVHKCJpOTE1IHBlcmYgaW50ZXJmYWNlIG5vdCBhdmFpbGFi bGUgZm9yIHRoaXMgc3lzdGVtXG4iKTsKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CkBAIC0yOTg2 LDEyNCArMjk3MywxMjcgQEAgaW50IGk5MTVfcGVyZl9vcGVuX2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IHJl YWRfcHJvcGVydGllc191bmxvY2tlZChkZXZfcHJpdiwKKwlyZXQgPSByZWFkX3Byb3BlcnRpZXNf dW5sb2NrZWQocGVyZiwKIAkJCQkgICAgICAgdTY0X3RvX3VzZXJfcHRyKHBhcmFtLT5wcm9wZXJ0 aWVzX3B0ciksCiAJCQkJICAgICAgIHBhcmFtLT5udW1fcHJvcGVydGllcywKIAkJCQkgICAgICAg JnByb3BzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbXV0ZXhfbG9jaygmZGV2X3By aXYtPnBlcmYubG9jayk7Ci0JcmV0ID0gaTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKGRldl9w cml2LCBwYXJhbSwgJnByb3BzLCBmaWxlKTsKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJm LmxvY2spOworCW11dGV4X2xvY2soJnBlcmYtPmxvY2spOworCXJldCA9IGk5MTVfcGVyZl9vcGVu X2lvY3RsX2xvY2tlZChwZXJmLCBwYXJhbSwgJnByb3BzLCBmaWxlKTsKKwltdXRleF91bmxvY2so JnBlcmYtPmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAogLyoqCiAgKiBpOTE1X3BlcmZfcmVn aXN0ZXIgLSBleHBvc2VzIGk5MTUtcGVyZiB0byB1c2Vyc3BhY2UKLSAqIEBkZXZfcHJpdjogaTkx NSBkZXZpY2UgaW5zdGFuY2UKKyAqIEBpOTE1OiBpOTE1IGRldmljZSBpbnN0YW5jZQogICoKICAq IEluIHBhcnRpY3VsYXIgT0EgbWV0cmljIHNldHMgYXJlIGFkdmVydGlzZWQgdW5kZXIgYSBzeXNm cyBtZXRyaWNzLwogICogZGlyZWN0b3J5IGFsbG93aW5nIHVzZXJzcGFjZSB0byBlbnVtZXJhdGUg dmFsaWQgSURzIHRoYXQgY2FuIGJlCiAgKiB1c2VkIHRvIG9wZW4gYW4gaTkxNS1wZXJmIHN0cmVh bS4KICAqLwotdm9pZCBpOTE1X3BlcmZfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQordm9pZCBpOTE1X3BlcmZfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpCiB7CisJc3RydWN0IGk5MTVfcGVyZiAqcGVyZiA9ICZpOTE1LT5wZXJmOwogCWlu dCByZXQ7CiAKLQlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKQorCWlmICghcGVyZi0+ aTkxNSkKIAkJcmV0dXJuOwogCiAJLyogVG8gYmUgc3VyZSB3ZSdyZSBzeW5jaHJvbml6ZWQgd2l0 aCBhbiBhdHRlbXB0ZWQKIAkgKiBpOTE1X3BlcmZfb3Blbl9pb2N0bCgpOyBjb25zaWRlcmluZyB0 aGF0IHdlIHJlZ2lzdGVyIGFmdGVyCiAJICogYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCiAJ ICovCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisJbXV0ZXhfbG9jaygmcGVy Zi0+bG9jayk7CiAKLQlkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmogPQorCXBlcmYtPm1ldHJp Y3Nfa29iaiA9CiAJCWtvYmplY3RfY3JlYXRlX2FuZF9hZGQoIm1ldHJpY3MiLAotCQkJCSAgICAg ICAmZGV2X3ByaXYtPmRybS5wcmltYXJ5LT5rZGV2LT5rb2JqKTsKLQlpZiAoIWRldl9wcml2LT5w ZXJmLm1ldHJpY3Nfa29iaikKKwkJCQkgICAgICAgJmk5MTUtPmRybS5wcmltYXJ5LT5rZGV2LT5r b2JqKTsKKwlpZiAoIXBlcmYtPm1ldHJpY3Nfa29iaikKIAkJZ290byBleGl0OwogCi0Jc3lzZnNf YXR0cl9pbml0KCZkZXZfcHJpdi0+cGVyZi50ZXN0X2NvbmZpZy5zeXNmc19tZXRyaWNfaWQuYXR0 cik7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgewotCQlpOTE1X3BlcmZfbG9h ZF90ZXN0X2NvbmZpZ19pY2woZGV2X3ByaXYpOwotCX0gZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShk ZXZfcHJpdikpIHsKLQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfY25sKGRldl9wcml2KTsK LQl9IGVsc2UgaWYgKElTX0NPRkZFRUxBS0UoZGV2X3ByaXYpKSB7Ci0JCWlmIChJU19DRkxfR1Qy KGRldl9wcml2KSkKLQkJCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmlnX2NmbGd0MihkZXZfcHJp dik7Ci0JCWlmIChJU19DRkxfR1QzKGRldl9wcml2KSkKLQkJCWk5MTVfcGVyZl9sb2FkX3Rlc3Rf Y29uZmlnX2NmbGd0MyhkZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJU19HRU1JTklMQUtFKGRldl9w cml2KSkgewotCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19nbGsoZGV2X3ByaXYpOwotCX0g ZWxzZSBpZiAoSVNfS0FCWUxBS0UoZGV2X3ByaXYpKSB7Ci0JCWlmIChJU19LQkxfR1QyKGRldl9w cml2KSkKLQkJCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmlnX2tibGd0MihkZXZfcHJpdik7Ci0J CWVsc2UgaWYgKElTX0tCTF9HVDMoZGV2X3ByaXYpKQotCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9j b25maWdfa2JsZ3QzKGRldl9wcml2KTsKLQl9IGVsc2UgaWYgKElTX0JST1hUT04oZGV2X3ByaXYp KSB7Ci0JCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmlnX2J4dChkZXZfcHJpdik7Ci0JfSBlbHNl IGlmIChJU19TS1lMQUtFKGRldl9wcml2KSkgewotCQlpZiAoSVNfU0tMX0dUMihkZXZfcHJpdikp Ci0JCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19za2xndDIoZGV2X3ByaXYpOwotCQllbHNl IGlmIChJU19TS0xfR1QzKGRldl9wcml2KSkKLQkJCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmln X3NrbGd0MyhkZXZfcHJpdik7Ci0JCWVsc2UgaWYgKElTX1NLTF9HVDQoZGV2X3ByaXYpKQotCQkJ aTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfc2tsZ3Q0KGRldl9wcml2KTsKLQl9IGVsc2UgaWYg KElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmln X2NodihkZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Ci0J CWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmlnX2JkdyhkZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJ U19IQVNXRUxMKGRldl9wcml2KSkgewotCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19oc3co ZGV2X3ByaXYpOwotfQotCi0JaWYgKGRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLmlkID09IDAp CisJc3lzZnNfYXR0cl9pbml0KCZwZXJmLT50ZXN0X2NvbmZpZy5zeXNmc19tZXRyaWNfaWQuYXR0 cik7CisKKwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDExKSB7CisJCWk5MTVfcGVyZl9sb2FkX3Rl c3RfY29uZmlnX2ljbChpOTE1KTsKKwl9IGVsc2UgaWYgKElTX0NBTk5PTkxBS0UoaTkxNSkpIHsK KwkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfY25sKGk5MTUpOworCX0gZWxzZSBpZiAoSVNf Q09GRkVFTEFLRShpOTE1KSkgeworCQlpZiAoSVNfQ0ZMX0dUMihpOTE1KSkKKwkJCWk5MTVfcGVy Zl9sb2FkX3Rlc3RfY29uZmlnX2NmbGd0MihpOTE1KTsKKwkJaWYgKElTX0NGTF9HVDMoaTkxNSkp CisJCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19jZmxndDMoaTkxNSk7CisJfSBlbHNlIGlm IChJU19HRU1JTklMQUtFKGk5MTUpKSB7CisJCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmlnX2ds ayhpOTE1KTsKKwl9IGVsc2UgaWYgKElTX0tBQllMQUtFKGk5MTUpKSB7CisJCWlmIChJU19LQkxf R1QyKGk5MTUpKQorCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfa2JsZ3QyKGk5MTUpOwor CQllbHNlIGlmIChJU19LQkxfR1QzKGk5MTUpKQorCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25m aWdfa2JsZ3QzKGk5MTUpOworCX0gZWxzZSBpZiAoSVNfQlJPWFRPTihpOTE1KSkgeworCQlpOTE1 X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19ieHQoaTkxNSk7CisJfSBlbHNlIGlmIChJU19TS1lMQUtF KGk5MTUpKSB7CisJCWlmIChJU19TS0xfR1QyKGk5MTUpKQorCQkJaTkxNV9wZXJmX2xvYWRfdGVz dF9jb25maWdfc2tsZ3QyKGk5MTUpOworCQllbHNlIGlmIChJU19TS0xfR1QzKGk5MTUpKQorCQkJ aTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfc2tsZ3QzKGk5MTUpOworCQllbHNlIGlmIChJU19T S0xfR1Q0KGk5MTUpKQorCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfc2tsZ3Q0KGk5MTUp OworCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkgeworCQlpOTE1X3BlcmZfbG9hZF90 ZXN0X2NvbmZpZ19jaHYoaTkxNSk7CisJfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoaTkxNSkpIHsK KwkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfYmR3KGk5MTUpOworCX0gZWxzZSBpZiAoSVNf SEFTV0VMTChpOTE1KSkgeworCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19oc3coaTkxNSk7 CisJfQorCisJaWYgKHBlcmYtPnRlc3RfY29uZmlnLmlkID09IDApCiAJCWdvdG8gc3lzZnNfZXJy b3I7CiAKLQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoZGV2X3ByaXYtPnBlcmYubWV0cmljc19r b2JqLAotCQkJCSAmZGV2X3ByaXYtPnBlcmYudGVzdF9jb25maWcuc3lzZnNfbWV0cmljKTsKKwly ZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAocGVyZi0+bWV0cmljc19rb2JqLAorCQkJCSAmcGVyZi0+ dGVzdF9jb25maWcuc3lzZnNfbWV0cmljKTsKIAlpZiAocmV0KQogCQlnb3RvIHN5c2ZzX2Vycm9y OwogCi0JYXRvbWljX3NldCgmZGV2X3ByaXYtPnBlcmYudGVzdF9jb25maWcucmVmX2NvdW50LCAx KTsKKwlhdG9taWNfc2V0KCZwZXJmLT50ZXN0X2NvbmZpZy5yZWZfY291bnQsIDEpOwogCiAJZ290 byBleGl0OwogCiBzeXNmc19lcnJvcjoKLQlrb2JqZWN0X3B1dChkZXZfcHJpdi0+cGVyZi5tZXRy aWNzX2tvYmopOwotCWRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaiA9IE5VTEw7CisJa29iamVj dF9wdXQocGVyZi0+bWV0cmljc19rb2JqKTsKKwlwZXJmLT5tZXRyaWNzX2tvYmogPSBOVUxMOwog CiBleGl0OgotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7CisJbXV0ZXhfdW5s b2NrKCZwZXJmLT5sb2NrKTsKIH0KIAogLyoqCiAgKiBpOTE1X3BlcmZfdW5yZWdpc3RlciAtIGhp ZGUgaTkxNS1wZXJmIGZyb20gdXNlcnNwYWNlCi0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGlu c3RhbmNlCisgKiBAaTkxNTogaTkxNSBkZXZpY2UgaW5zdGFuY2UKICAqCiAgKiBpOTE1LXBlcmYg c3RhdGUgY2xlYW51cCBpcyBzcGxpdCB1cCBpbnRvIGFuICd1bnJlZ2lzdGVyJyBhbmQKICAqICdk ZWluaXQnIHBoYXNlIHdoZXJlIHRoZSBpbnRlcmZhY2UgaXMgZmlyc3QgaGlkZGVuIGZyb20KICAq IHVzZXJzcGFjZSBieSBpOTE1X3BlcmZfdW5yZWdpc3RlcigpIGJlZm9yZSBjbGVhbmluZyB1cAog ICogcmVtYWluaW5nIHN0YXRlIGluIGk5MTVfcGVyZl9maW5pKCkuCiAgKi8KLXZvaWQgaTkxNV9w ZXJmX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQordm9pZCBp OTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsKLQlp ZiAoIWRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaikKKwlzdHJ1Y3QgaTkxNV9wZXJmICpwZXJm ID0gJmk5MTUtPnBlcmY7CisKKwlpZiAoIXBlcmYtPm1ldHJpY3Nfa29iaikKIAkJcmV0dXJuOwog Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKGRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaiwKLQkJCSAg ICZkZXZfcHJpdi0+cGVyZi50ZXN0X2NvbmZpZy5zeXNmc19tZXRyaWMpOworCXN5c2ZzX3JlbW92 ZV9ncm91cChwZXJmLT5tZXRyaWNzX2tvYmosCisJCQkgICAmcGVyZi0+dGVzdF9jb25maWcuc3lz ZnNfbWV0cmljKTsKIAotCWtvYmplY3RfcHV0KGRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaik7 Ci0JZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqID0gTlVMTDsKKwlrb2JqZWN0X3B1dChwZXJm LT5tZXRyaWNzX2tvYmopOworCXBlcmYtPm1ldHJpY3Nfa29iaiA9IE5VTEw7CiB9CiAKLXN0YXRp YyBib29sIGdlbjhfaXNfdmFsaWRfZmxleF9hZGRyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgdTMyIGFkZHIpCitzdGF0aWMgYm9vbCBnZW44X2lzX3ZhbGlkX2ZsZXhfYWRkcihz dHJ1Y3QgaTkxNV9wZXJmICpwZXJmLCB1MzIgYWRkcikKIHsKIAlzdGF0aWMgY29uc3QgaTkxNV9y ZWdfdCBmbGV4X2V1X3JlZ3NbXSA9IHsKIAkJRVVfUEVSRl9DTlRMMCwKQEAgLTMxMjMsNyArMzEx Myw3IEBAIHN0YXRpYyBib29sIGdlbjhfaXNfdmFsaWRfZmxleF9hZGRyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIGFkZHIpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0 aWMgYm9vbCBnZW43X2lzX3ZhbGlkX2JfY291bnRlcl9hZGRyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgdTMyIGFkZHIpCitzdGF0aWMgYm9vbCBnZW43X2lzX3ZhbGlkX2JfY291 bnRlcl9hZGRyKHN0cnVjdCBpOTE1X3BlcmYgKnBlcmYsIHUzMiBhZGRyKQogewogCXJldHVybiAo YWRkciA+PSBpOTE1X21taW9fcmVnX29mZnNldChPQVNUQVJUVFJJRzEpICYmCiAJCWFkZHIgPD0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoT0FTVEFSVFRSSUc4KSkgfHwKQEAgLTMxMzMsNyArMzEyMyw3 IEBAIHN0YXRpYyBib29sIGdlbjdfaXNfdmFsaWRfYl9jb3VudGVyX2FkZHIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIKIAkJIGFkZHIgPD0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoT0FDRUM3XzEpKTsKIH0KIAotc3RhdGljIGJvb2wgZ2VuN19pc192YWxpZF9tdXhfYWRkcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBhZGRyKQorc3RhdGljIGJvb2wg Z2VuN19pc192YWxpZF9tdXhfYWRkcihzdHJ1Y3QgaTkxNV9wZXJmICpwZXJmLCB1MzIgYWRkcikK IHsKIAlyZXR1cm4gYWRkciA9PSBpOTE1X21taW9fcmVnX29mZnNldChIQUxGX1NMSUNFX0NISUNL RU4yKSB8fAogCQkoYWRkciA+PSBpOTE1X21taW9fcmVnX29mZnNldChNSUNST19CUDBfMCkgJiYK QEAgLTMxNDQsMzQgKzMxMzQsMzQgQEAgc3RhdGljIGJvb2wgZ2VuN19pc192YWxpZF9tdXhfYWRk cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBhZGRyKQogCQkgYWRkciA8 PSBpOTE1X21taW9fcmVnX29mZnNldChPQV9QRVJGTUFUUklYX0hJKSk7CiB9CiAKLXN0YXRpYyBi b29sIGdlbjhfaXNfdmFsaWRfbXV4X2FkZHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCB1MzIgYWRkcikKK3N0YXRpYyBib29sIGdlbjhfaXNfdmFsaWRfbXV4X2FkZHIoc3RydWN0 IGk5MTVfcGVyZiAqcGVyZiwgdTMyIGFkZHIpCiB7Ci0JcmV0dXJuIGdlbjdfaXNfdmFsaWRfbXV4 X2FkZHIoZGV2X3ByaXYsIGFkZHIpIHx8CisJcmV0dXJuIGdlbjdfaXNfdmFsaWRfbXV4X2FkZHIo cGVyZiwgYWRkcikgfHwKIAkJYWRkciA9PSBpOTE1X21taW9fcmVnX29mZnNldChXQUlUX0ZPUl9S QzZfRVhJVCkgfHwKIAkJKGFkZHIgPj0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUlBNX0NPTkZJRzAp ICYmCiAJCSBhZGRyIDw9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KE5PQV9DT05GSUcoOCkpKTsKIH0K IAotc3RhdGljIGJvb2wgZ2VuMTBfaXNfdmFsaWRfbXV4X2FkZHIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCB1MzIgYWRkcikKK3N0YXRpYyBib29sIGdlbjEwX2lzX3ZhbGlkX211 eF9hZGRyKHN0cnVjdCBpOTE1X3BlcmYgKnBlcmYsIHUzMiBhZGRyKQogewotCXJldHVybiBnZW44 X2lzX3ZhbGlkX211eF9hZGRyKGRldl9wcml2LCBhZGRyKSB8fAorCXJldHVybiBnZW44X2lzX3Zh bGlkX211eF9hZGRyKHBlcmYsIGFkZHIpIHx8CiAJCWFkZHIgPT0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoR0VOMTBfTk9BX1dSSVRFX0hJR0gpIHx8CiAJCShhZGRyID49IGk5MTVfbW1pb19yZWdfb2Zm c2V0KE9BX1BFUkZDTlQzX0xPKSAmJgogCQkgYWRkciA8PSBpOTE1X21taW9fcmVnX29mZnNldChP QV9QRVJGQ05UNF9ISSkpOwogfQogCi1zdGF0aWMgYm9vbCBoc3dfaXNfdmFsaWRfbXV4X2FkZHIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgYWRkcikKK3N0YXRpYyBib29s IGhzd19pc192YWxpZF9tdXhfYWRkcihzdHJ1Y3QgaTkxNV9wZXJmICpwZXJmLCB1MzIgYWRkcikK IHsKLQlyZXR1cm4gZ2VuN19pc192YWxpZF9tdXhfYWRkcihkZXZfcHJpdiwgYWRkcikgfHwKKwly ZXR1cm4gZ2VuN19pc192YWxpZF9tdXhfYWRkcihwZXJmLCBhZGRyKSB8fAogCQkoYWRkciA+PSAw eDI1MTAwICYmIGFkZHIgPD0gMHgyRkY5MCkgfHwKIAkJKGFkZHIgPj0gaTkxNV9tbWlvX3JlZ19v ZmZzZXQoSFNXX01CVklEMl9OT0EwKSAmJgogCQkgYWRkciA8PSBpOTE1X21taW9fcmVnX29mZnNl dChIU1dfTUJWSUQyX05PQTkpKSB8fAogCQlhZGRyID09IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEhT V19NQlZJRDJfTUlTUjApOwogfQogCi1zdGF0aWMgYm9vbCBjaHZfaXNfdmFsaWRfbXV4X2FkZHIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgYWRkcikKK3N0YXRpYyBib29s IGNodl9pc192YWxpZF9tdXhfYWRkcihzdHJ1Y3QgaTkxNV9wZXJmICpwZXJmLCB1MzIgYWRkcikK IHsKLQlyZXR1cm4gZ2VuN19pc192YWxpZF9tdXhfYWRkcihkZXZfcHJpdiwgYWRkcikgfHwKKwly ZXR1cm4gZ2VuN19pc192YWxpZF9tdXhfYWRkcihwZXJmLCBhZGRyKSB8fAogCQkoYWRkciA+PSAw eDE4MjMwMCAmJiBhZGRyIDw9IDB4MTgyM0E0KTsKIH0KIApAQCAtMzE5NCw4ICszMTg0LDggQEAg c3RhdGljIHUzMiBtYXNrX3JlZ192YWx1ZSh1MzIgcmVnLCB1MzIgdmFsKQogCXJldHVybiB2YWw7 CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTkxNV9vYV9yZWcgKmFsbG9jX29hX3JlZ3Moc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCQkgYm9vbCAoKmlzX3ZhbGlkKShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBhZGRyKSwKK3N0YXRpYyBzdHJ1Y3QgaTkx NV9vYV9yZWcgKmFsbG9jX29hX3JlZ3Moc3RydWN0IGk5MTVfcGVyZiAqcGVyZiwKKwkJCQkJIGJv b2wgKCppc192YWxpZCkoc3RydWN0IGk5MTVfcGVyZiAqcGVyZiwgdTMyIGFkZHIpLAogCQkJCQkg dTMyIF9fdXNlciAqcmVncywKIAkJCQkJIHUzMiBuX3JlZ3MpCiB7CkBAIC0zMjI1LDcgKzMyMTUs NyBAQCBzdGF0aWMgc3RydWN0IGk5MTVfb2FfcmVnICphbGxvY19vYV9yZWdzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJaWYgKGVycikKIAkJCWdvdG8gYWRkcl9lcnI7CiAK LQkJaWYgKCFpc192YWxpZChkZXZfcHJpdiwgYWRkcikpIHsKKwkJaWYgKCFpc192YWxpZChwZXJm LCBhZGRyKSkgewogCQkJRFJNX0RFQlVHKCJJbnZhbGlkIG9hX3JlZyBhZGRyZXNzOiAlWFxuIiwg YWRkcik7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBhZGRyX2VycjsKQEAgLTMyNTgsNyAr MzI0OCw3IEBAIHN0YXRpYyBzc2l6ZV90IHNob3dfZHluYW1pY19pZChzdHJ1Y3QgZGV2aWNlICpk ZXYsCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG9hX2NvbmZpZy0+aWQpOwogfQogCi1z dGF0aWMgaW50IGNyZWF0ZV9keW5hbWljX29hX3N5c2ZzX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKK3N0YXRpYyBpbnQgY3JlYXRlX2R5bmFtaWNfb2Ffc3lzZnNfZW50 cnkoc3RydWN0IGk5MTVfcGVyZiAqcGVyZiwKIAkJCQkJIHN0cnVjdCBpOTE1X29hX2NvbmZpZyAq b2FfY29uZmlnKQogewogCXN5c2ZzX2F0dHJfaW5pdCgmb2FfY29uZmlnLT5zeXNmc19tZXRyaWNf aWQuYXR0cik7CkBAIC0zMjczLDcgKzMyNjMsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9keW5hbWlj X29hX3N5c2ZzX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAlvYV9j b25maWctPnN5c2ZzX21ldHJpYy5uYW1lID0gb2FfY29uZmlnLT51dWlkOwogCW9hX2NvbmZpZy0+ c3lzZnNfbWV0cmljLmF0dHJzID0gb2FfY29uZmlnLT5hdHRyczsKIAotCXJldHVybiBzeXNmc19j cmVhdGVfZ3JvdXAoZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqLAorCXJldHVybiBzeXNmc19j cmVhdGVfZ3JvdXAocGVyZi0+bWV0cmljc19rb2JqLAogCQkJCSAgJm9hX2NvbmZpZy0+c3lzZnNf bWV0cmljKTsKIH0KIApAQCAtMzI5MywxNyArMzI4MywxNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9k eW5hbWljX29hX3N5c2ZzX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK IGludCBpOTE1X3BlcmZfYWRkX2NvbmZpZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAogCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBp OTE1X3BlcmYgKnBlcmYgPSAmdG9faTkxNShkZXYpLT5wZXJmOwogCXN0cnVjdCBkcm1faTkxNV9w ZXJmX29hX2NvbmZpZyAqYXJncyA9IGRhdGE7CiAJc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9j b25maWcsICp0bXA7CiAJaW50IGVyciwgaWQ7CiAKLQlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRp YWxpemVkKSB7CisJaWYgKCFwZXJmLT5pOTE1KSB7CiAJCURSTV9ERUJVRygiaTkxNSBwZXJmIGlu dGVyZmFjZSBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHN5c3RlbVxuIik7CiAJCXJldHVybiAtRU5P VFNVUFA7CiAJfQogCi0JaWYgKCFkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmopIHsKKwlpZiAo IXBlcmYtPm1ldHJpY3Nfa29iaikgewogCQlEUk1fREVCVUcoIk9BIG1ldHJpY3Mgd2VyZW4ndCBh ZHZlcnRpc2VkIHZpYSBzeXNmc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTMzNDEs OCArMzMzMSw4IEBAIGludCBpOTE1X3BlcmZfYWRkX2NvbmZpZ19pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAogCiAJb2FfY29uZmlnLT5tdXhfcmVnc19sZW4gPSBhcmdz LT5uX211eF9yZWdzOwogCW9hX2NvbmZpZy0+bXV4X3JlZ3MgPQotCQlhbGxvY19vYV9yZWdzKGRl dl9wcml2LAotCQkJICAgICAgZGV2X3ByaXYtPnBlcmYub3BzLmlzX3ZhbGlkX211eF9yZWcsCisJ CWFsbG9jX29hX3JlZ3MocGVyZiwKKwkJCSAgICAgIHBlcmYtPm9wcy5pc192YWxpZF9tdXhfcmVn LAogCQkJICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPm11eF9yZWdzX3B0ciksCiAJCQkgICAg ICBhcmdzLT5uX211eF9yZWdzKTsKIApAQCAtMzM1NCw4ICszMzQ0LDggQEAgaW50IGk5MTVfcGVy Zl9hZGRfY29uZmlnX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAK IAlvYV9jb25maWctPmJfY291bnRlcl9yZWdzX2xlbiA9IGFyZ3MtPm5fYm9vbGVhbl9yZWdzOwog CW9hX2NvbmZpZy0+Yl9jb3VudGVyX3JlZ3MgPQotCQlhbGxvY19vYV9yZWdzKGRldl9wcml2LAot CQkJICAgICAgZGV2X3ByaXYtPnBlcmYub3BzLmlzX3ZhbGlkX2JfY291bnRlcl9yZWcsCisJCWFs bG9jX29hX3JlZ3MocGVyZiwKKwkJCSAgICAgIHBlcmYtPm9wcy5pc192YWxpZF9iX2NvdW50ZXJf cmVnLAogCQkJICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmJvb2xlYW5fcmVnc19wdHIpLAog CQkJICAgICAgYXJncy0+bl9ib29sZWFuX3JlZ3MpOwogCkBAIC0zMzY1LDcgKzMzNTUsNyBAQCBp bnQgaTkxNV9wZXJmX2FkZF9jb25maWdfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKIAkJZ290byByZWdfZXJyOwogCX0KIAotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp IDwgOCkgeworCWlmIChJTlRFTF9HRU4ocGVyZi0+aTkxNSkgPCA4KSB7CiAJCWlmIChhcmdzLT5u X2ZsZXhfcmVncyAhPSAwKSB7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byByZWdfZXJyOwpA QCAtMzM3Myw4ICszMzYzLDggQEAgaW50IGk5MTVfcGVyZl9hZGRfY29uZmlnX2lvY3RsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJfSBlbHNlIHsKIAkJb2FfY29uZmlnLT5m bGV4X3JlZ3NfbGVuID0gYXJncy0+bl9mbGV4X3JlZ3M7CiAJCW9hX2NvbmZpZy0+ZmxleF9yZWdz ID0KLQkJCWFsbG9jX29hX3JlZ3MoZGV2X3ByaXYsCi0JCQkJICAgICAgZGV2X3ByaXYtPnBlcmYu b3BzLmlzX3ZhbGlkX2ZsZXhfcmVnLAorCQkJYWxsb2Nfb2FfcmVncyhwZXJmLAorCQkJCSAgICAg IHBlcmYtPm9wcy5pc192YWxpZF9mbGV4X3JlZywKIAkJCQkgICAgICB1NjRfdG9fdXNlcl9wdHIo YXJncy0+ZmxleF9yZWdzX3B0ciksCiAJCQkJICAgICAgYXJncy0+bl9mbGV4X3JlZ3MpOwogCkBA IC0zMzg1LDE0ICszMzc1LDE0IEBAIGludCBpOTE1X3BlcmZfYWRkX2NvbmZpZ19pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQl9CiAJfQogCi0JZXJyID0gbXV0ZXhf bG9ja19pbnRlcnJ1cHRpYmxlKCZkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2xvY2spOworCWVyciA9 IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcGVyZi0+bWV0cmljc19sb2NrKTsKIAlpZiAoZXJy KQogCQlnb3RvIHJlZ19lcnI7CiAKIAkvKiBXZSBzaG91bGRuJ3QgaGF2ZSB0b28gbWFueSBjb25m aWdzLCBzbyB0aGlzIGl0ZXJhdGlvbiBzaG91bGRuJ3QgYmUKIAkgKiB0b28gY29zdGx5LgogCSAq LwotCWlkcl9mb3JfZWFjaF9lbnRyeSgmZGV2X3ByaXYtPnBlcmYubWV0cmljc19pZHIsIHRtcCwg aWQpIHsKKwlpZHJfZm9yX2VhY2hfZW50cnkoJnBlcmYtPm1ldHJpY3NfaWRyLCB0bXAsIGlkKSB7 CiAJCWlmICghc3RyY21wKHRtcC0+dXVpZCwgb2FfY29uZmlnLT51dWlkKSkgewogCQkJRFJNX0RF QlVHKCJPQSBjb25maWcgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGlzIHV1aWRcbiIpOwogCQkJZXJy ID0gLUVBRERSSU5VU0U7CkBAIC0zNDAwLDE0ICszMzkwLDE0IEBAIGludCBpOTE1X3BlcmZfYWRk X2NvbmZpZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQl9CiAJ fQogCi0JZXJyID0gY3JlYXRlX2R5bmFtaWNfb2Ffc3lzZnNfZW50cnkoZGV2X3ByaXYsIG9hX2Nv bmZpZyk7CisJZXJyID0gY3JlYXRlX2R5bmFtaWNfb2Ffc3lzZnNfZW50cnkocGVyZiwgb2FfY29u ZmlnKTsKIAlpZiAoZXJyKSB7CiAJCURSTV9ERUJVRygiRmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBl bnRyeSBmb3IgT0EgY29uZmlnXG4iKTsKIAkJZ290byBzeXNmc19lcnI7CiAJfQogCiAJLyogQ29u ZmlnIGlkIDAgaXMgaW52YWxpZCwgaWQgMSBmb3Iga2VybmVsIHN0b3JlZCB0ZXN0IGNvbmZpZy4g Ki8KLQlvYV9jb25maWctPmlkID0gaWRyX2FsbG9jKCZkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2lk ciwKKwlvYV9jb25maWctPmlkID0gaWRyX2FsbG9jKCZwZXJmLT5tZXRyaWNzX2lkciwKIAkJCQkg IG9hX2NvbmZpZywgMiwKIAkJCQkgIDAsIEdGUF9LRVJORUwpOwogCWlmIChvYV9jb25maWctPmlk IDwgMCkgewpAQCAtMzQxNiwxNiArMzQwNiwxNiBAQCBpbnQgaTkxNV9wZXJmX2FkZF9jb25maWdf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJZ290byBzeXNmc19l cnI7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2xvY2spOwor CW11dGV4X3VubG9jaygmcGVyZi0+bWV0cmljc19sb2NrKTsKIAogCURSTV9ERUJVRygiQWRkZWQg Y29uZmlnICVzIGlkPSVpXG4iLCBvYV9jb25maWctPnV1aWQsIG9hX2NvbmZpZy0+aWQpOwogCiAJ cmV0dXJuIG9hX2NvbmZpZy0+aWQ7CiAKIHN5c2ZzX2VycjoKLQltdXRleF91bmxvY2soJmRldl9w cml2LT5wZXJmLm1ldHJpY3NfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwZXJmLT5tZXRyaWNzX2xv Y2spOwogcmVnX2VycjoKLQlwdXRfb2FfY29uZmlnKGRldl9wcml2LCBvYV9jb25maWcpOworCXB1 dF9vYV9jb25maWcob2FfY29uZmlnKTsKIAlEUk1fREVCVUcoIkZhaWxlZCB0byBhZGQgbmV3IE9B IGNvbmZpZ1xuIik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTM0NDQsMTIgKzM0MzQsMTIgQEAgaW50 IGk5MTVfcGVyZl9hZGRfY29uZmlnX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCiBpbnQgaTkxNV9wZXJmX3JlbW92ZV9jb25maWdfaW9jdGwoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0 cnVjdCBpOTE1X3BlcmYgKnBlcmYgPSAmdG9faTkxNShkZXYpLT5wZXJmOwogCXU2NCAqYXJnID0g ZGF0YTsKIAlzdHJ1Y3QgaTkxNV9vYV9jb25maWcgKm9hX2NvbmZpZzsKIAlpbnQgcmV0OwogCi0J aWYgKCFkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCkgeworCWlmICghcGVyZi0+aTkxNSkgewog CQlEUk1fREVCVUcoImk5MTUgcGVyZiBpbnRlcmZhY2Ugbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBz eXN0ZW1cbiIpOwogCQlyZXR1cm4gLUVOT1RTVVBQOwogCX0KQEAgLTM0NTksMTEgKzM0NDksMTEg QEAgaW50IGk5MTVfcGVyZl9yZW1vdmVfY29uZmlnX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEsCiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAotCXJldCA9IG11dGV4X2xv Y2tfaW50ZXJydXB0aWJsZSgmZGV2X3ByaXYtPnBlcmYubWV0cmljc19sb2NrKTsKKwlyZXQgPSBt dXRleF9sb2NrX2ludGVycnVwdGlibGUoJnBlcmYtPm1ldHJpY3NfbG9jayk7CiAJaWYgKHJldCkK IAkJZ290byBsb2NrX2VycjsKIAotCW9hX2NvbmZpZyA9IGlkcl9maW5kKCZkZXZfcHJpdi0+cGVy Zi5tZXRyaWNzX2lkciwgKmFyZyk7CisJb2FfY29uZmlnID0gaWRyX2ZpbmQoJnBlcmYtPm1ldHJp Y3NfaWRyLCAqYXJnKTsKIAlpZiAoIW9hX2NvbmZpZykgewogCQlEUk1fREVCVUcoIkZhaWxlZCB0 byByZW1vdmUgdW5rbm93biBPQSBjb25maWdcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwpAQCAtMzQ3 MiwxNyArMzQ2MiwxNyBAQCBpbnQgaTkxNV9wZXJmX3JlbW92ZV9jb25maWdfaW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAogCUdFTV9CVUdfT04oKmFyZyAhPSBvYV9j b25maWctPmlkKTsKIAotCXN5c2ZzX3JlbW92ZV9ncm91cChkZXZfcHJpdi0+cGVyZi5tZXRyaWNz X2tvYmosCisJc3lzZnNfcmVtb3ZlX2dyb3VwKHBlcmYtPm1ldHJpY3Nfa29iaiwKIAkJCSAgICZv YV9jb25maWctPnN5c2ZzX21ldHJpYyk7CiAKLQlpZHJfcmVtb3ZlKCZkZXZfcHJpdi0+cGVyZi5t ZXRyaWNzX2lkciwgKmFyZyk7CisJaWRyX3JlbW92ZSgmcGVyZi0+bWV0cmljc19pZHIsICphcmcp OwogCiAJRFJNX0RFQlVHKCJSZW1vdmVkIGNvbmZpZyAlcyBpZD0laVxuIiwgb2FfY29uZmlnLT51 dWlkLCBvYV9jb25maWctPmlkKTsKIAotCXB1dF9vYV9jb25maWcoZGV2X3ByaXYsIG9hX2NvbmZp Zyk7CisJcHV0X29hX2NvbmZpZyhvYV9jb25maWcpOwogCiBjb25maWdfZXJyOgotCW11dGV4X3Vu bG9jaygmZGV2X3ByaXYtPnBlcmYubWV0cmljc19sb2NrKTsKKwltdXRleF91bmxvY2soJnBlcmYt Pm1ldHJpY3NfbG9jayk7CiBsb2NrX2VycjoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzUzMSwxMDMg KzM1MjEsMTA0IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRldl9yb290W10gPSB7CiAKIC8q KgogICogaTkxNV9wZXJmX2luaXQgLSBpbml0aWFsaXplIGk5MTUtcGVyZiBzdGF0ZSBvbiBtb2R1 bGUgbG9hZAotICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQorICogQGk5MTU6IGk5 MTUgZGV2aWNlIGluc3RhbmNlCiAgKgogICogSW5pdGlhbGl6ZXMgaTkxNS1wZXJmIHN0YXRlIHdp dGhvdXQgZXhwb3NpbmcgYW55dGhpbmcgdG8gdXNlcnNwYWNlLgogICoKICAqIE5vdGU6IGk5MTUt cGVyZiBpbml0aWFsaXphdGlvbiBpcyBzcGxpdCBpbnRvIGFuICdpbml0JyBhbmQgJ3JlZ2lzdGVy JwogICogcGhhc2Ugd2l0aCB0aGUgaTkxNV9wZXJmX3JlZ2lzdGVyKCkgZXhwb3Npbmcgc3RhdGUg dG8gdXNlcnNwYWNlLgogICovCi12b2lkIGk5MTVfcGVyZl9pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKLXsKLQlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikpIHsKLQkJZGV2 X3ByaXYtPnBlcmYub3BzLmlzX3ZhbGlkX2JfY291bnRlcl9yZWcgPQotCQkJZ2VuN19pc192YWxp ZF9iX2NvdW50ZXJfYWRkcjsKLQkJZGV2X3ByaXYtPnBlcmYub3BzLmlzX3ZhbGlkX211eF9yZWcg PQotCQkJaHN3X2lzX3ZhbGlkX211eF9hZGRyOwotCQlkZXZfcHJpdi0+cGVyZi5vcHMuaXNfdmFs aWRfZmxleF9yZWcgPSBOVUxMOwotCQlkZXZfcHJpdi0+cGVyZi5vcHMuZW5hYmxlX21ldHJpY19z ZXQgPSBoc3dfZW5hYmxlX21ldHJpY19zZXQ7Ci0JCWRldl9wcml2LT5wZXJmLm9wcy5kaXNhYmxl X21ldHJpY19zZXQgPSBoc3dfZGlzYWJsZV9tZXRyaWNfc2V0OwotCQlkZXZfcHJpdi0+cGVyZi5v cHMub2FfZW5hYmxlID0gZ2VuN19vYV9lbmFibGU7Ci0JCWRldl9wcml2LT5wZXJmLm9wcy5vYV9k aXNhYmxlID0gZ2VuN19vYV9kaXNhYmxlOwotCQlkZXZfcHJpdi0+cGVyZi5vcHMucmVhZCA9IGdl bjdfb2FfcmVhZDsKLQkJZGV2X3ByaXYtPnBlcmYub3BzLm9hX2h3X3RhaWxfcmVhZCA9Ci0JCQln ZW43X29hX2h3X3RhaWxfcmVhZDsKLQotCQlkZXZfcHJpdi0+cGVyZi5vYV9mb3JtYXRzID0gaHN3 X29hX2Zvcm1hdHM7Ci0JfSBlbHNlIGlmIChIQVNfTE9HSUNBTF9SSU5HX0NPTlRFWFRTKGRldl9w cml2KSkgewordm9pZCBpOTE1X3BlcmZfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKK3sKKwlzdHJ1Y3QgaTkxNV9wZXJmICpwZXJmID0gJmk5MTUtPnBlcmY7CisKKwkvKiBYWFgg Y29uc3Qgc3RydWN0IGk5MTVfcGVyZl9vcHMhICovCisKKwlpZiAoSVNfSEFTV0VMTChpOTE1KSkg eworCQlwZXJmLT5vcHMuaXNfdmFsaWRfYl9jb3VudGVyX3JlZyA9IGdlbjdfaXNfdmFsaWRfYl9j b3VudGVyX2FkZHI7CisJCXBlcmYtPm9wcy5pc192YWxpZF9tdXhfcmVnID0gaHN3X2lzX3ZhbGlk X211eF9hZGRyOworCQlwZXJmLT5vcHMuaXNfdmFsaWRfZmxleF9yZWcgPSBOVUxMOworCQlwZXJm LT5vcHMuZW5hYmxlX21ldHJpY19zZXQgPSBoc3dfZW5hYmxlX21ldHJpY19zZXQ7CisJCXBlcmYt Pm9wcy5kaXNhYmxlX21ldHJpY19zZXQgPSBoc3dfZGlzYWJsZV9tZXRyaWNfc2V0OworCQlwZXJm LT5vcHMub2FfZW5hYmxlID0gZ2VuN19vYV9lbmFibGU7CisJCXBlcmYtPm9wcy5vYV9kaXNhYmxl ID0gZ2VuN19vYV9kaXNhYmxlOworCQlwZXJmLT5vcHMucmVhZCA9IGdlbjdfb2FfcmVhZDsKKwkJ cGVyZi0+b3BzLm9hX2h3X3RhaWxfcmVhZCA9IGdlbjdfb2FfaHdfdGFpbF9yZWFkOworCisJCXBl cmYtPm9hX2Zvcm1hdHMgPSBoc3dfb2FfZm9ybWF0czsKKwl9IGVsc2UgaWYgKEhBU19MT0dJQ0FM X1JJTkdfQ09OVEVYVFMoaTkxNSkpIHsKIAkJLyogTm90ZTogdGhhdCBhbHRob3VnaCB3ZSBjb3Vs ZCB0aGVvcmV0aWNhbGx5IGFsc28gc3VwcG9ydCB0aGUKIAkJICogbGVnYWN5IHJpbmdidWZmZXIg bW9kZSBvbiBCRFcgKGFuZCBlYXJsaWVyIGl0ZXJhdGlvbnMgb2YKIAkJICogdGhpcyBkcml2ZXIs IGJlZm9yZSB1cHN0cmVhbWluZyBkaWQgdGhpcykgaXQgZGlkbid0IHNlZW0KIAkJICogd29ydGgg dGhlIGNvbXBsZXhpdHkgdG8gbWFpbnRhaW4gbm93IHRoYXQgQkRXKyBlbmFibGUKIAkJICogZXhl Y2xpc3QgbW9kZSBieSBkZWZhdWx0LgogCQkgKi8KLQkJZGV2X3ByaXYtPnBlcmYub2FfZm9ybWF0 cyA9IGdlbjhfcGx1c19vYV9mb3JtYXRzOworCQlwZXJmLT5vYV9mb3JtYXRzID0gZ2VuOF9wbHVz X29hX2Zvcm1hdHM7CiAKLQkJZGV2X3ByaXYtPnBlcmYub3BzLm9hX2VuYWJsZSA9IGdlbjhfb2Ff ZW5hYmxlOwotCQlkZXZfcHJpdi0+cGVyZi5vcHMub2FfZGlzYWJsZSA9IGdlbjhfb2FfZGlzYWJs ZTsKLQkJZGV2X3ByaXYtPnBlcmYub3BzLnJlYWQgPSBnZW44X29hX3JlYWQ7Ci0JCWRldl9wcml2 LT5wZXJmLm9wcy5vYV9od190YWlsX3JlYWQgPSBnZW44X29hX2h3X3RhaWxfcmVhZDsKKwkJcGVy Zi0+b3BzLm9hX2VuYWJsZSA9IGdlbjhfb2FfZW5hYmxlOworCQlwZXJmLT5vcHMub2FfZGlzYWJs ZSA9IGdlbjhfb2FfZGlzYWJsZTsKKwkJcGVyZi0+b3BzLnJlYWQgPSBnZW44X29hX3JlYWQ7CisJ CXBlcmYtPm9wcy5vYV9od190YWlsX3JlYWQgPSBnZW44X29hX2h3X3RhaWxfcmVhZDsKIAotCQlp ZiAoSVNfR0VOX1JBTkdFKGRldl9wcml2LCA4LCA5KSkgewotCQkJZGV2X3ByaXYtPnBlcmYub3Bz LmlzX3ZhbGlkX2JfY291bnRlcl9yZWcgPQorCQlpZiAoSVNfR0VOX1JBTkdFKGk5MTUsIDgsIDkp KSB7CisJCQlwZXJmLT5vcHMuaXNfdmFsaWRfYl9jb3VudGVyX3JlZyA9CiAJCQkJZ2VuN19pc192 YWxpZF9iX2NvdW50ZXJfYWRkcjsKLQkJCWRldl9wcml2LT5wZXJmLm9wcy5pc192YWxpZF9tdXhf cmVnID0KKwkJCXBlcmYtPm9wcy5pc192YWxpZF9tdXhfcmVnID0KIAkJCQlnZW44X2lzX3ZhbGlk X211eF9hZGRyOwotCQkJZGV2X3ByaXYtPnBlcmYub3BzLmlzX3ZhbGlkX2ZsZXhfcmVnID0KKwkJ CXBlcmYtPm9wcy5pc192YWxpZF9mbGV4X3JlZyA9CiAJCQkJZ2VuOF9pc192YWxpZF9mbGV4X2Fk ZHI7CiAKLQkJCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewotCQkJCWRldl9wcml2LT5w ZXJmLm9wcy5pc192YWxpZF9tdXhfcmVnID0KKwkJCWlmIChJU19DSEVSUllWSUVXKGk5MTUpKSB7 CisJCQkJcGVyZi0+b3BzLmlzX3ZhbGlkX211eF9yZWcgPQogCQkJCQljaHZfaXNfdmFsaWRfbXV4 X2FkZHI7CiAJCQl9CiAKLQkJCWRldl9wcml2LT5wZXJmLm9wcy5lbmFibGVfbWV0cmljX3NldCA9 IGdlbjhfZW5hYmxlX21ldHJpY19zZXQ7Ci0JCQlkZXZfcHJpdi0+cGVyZi5vcHMuZGlzYWJsZV9t ZXRyaWNfc2V0ID0gZ2VuOF9kaXNhYmxlX21ldHJpY19zZXQ7CisJCQlwZXJmLT5vcHMuZW5hYmxl X21ldHJpY19zZXQgPSBnZW44X2VuYWJsZV9tZXRyaWNfc2V0OworCQkJcGVyZi0+b3BzLmRpc2Fi bGVfbWV0cmljX3NldCA9IGdlbjhfZGlzYWJsZV9tZXRyaWNfc2V0OwogCi0JCQlpZiAoSVNfR0VO KGRldl9wcml2LCA4KSkgewotCQkJCWRldl9wcml2LT5wZXJmLmN0eF9vYWN0eGN0cmxfb2Zmc2V0 ID0gMHgxMjA7Ci0JCQkJZGV2X3ByaXYtPnBlcmYuY3R4X2ZsZXhldTBfb2Zmc2V0ID0gMHgyY2U7 CisJCQlpZiAoSVNfR0VOKGk5MTUsIDgpKSB7CisJCQkJcGVyZi0+Y3R4X29hY3R4Y3RybF9vZmZz ZXQgPSAweDEyMDsKKwkJCQlwZXJmLT5jdHhfZmxleGV1MF9vZmZzZXQgPSAweDJjZTsKIAotCQkJ CWRldl9wcml2LT5wZXJmLmdlbjhfdmFsaWRfY3R4X2JpdCA9IEJJVCgyNSk7CisJCQkJcGVyZi0+ Z2VuOF92YWxpZF9jdHhfYml0ID0gQklUKDI1KTsKIAkJCX0gZWxzZSB7Ci0JCQkJZGV2X3ByaXYt PnBlcmYuY3R4X29hY3R4Y3RybF9vZmZzZXQgPSAweDEyODsKLQkJCQlkZXZfcHJpdi0+cGVyZi5j dHhfZmxleGV1MF9vZmZzZXQgPSAweDNkZTsKKwkJCQlwZXJmLT5jdHhfb2FjdHhjdHJsX29mZnNl dCA9IDB4MTI4OworCQkJCXBlcmYtPmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4M2RlOwogCi0JCQkJ ZGV2X3ByaXYtPnBlcmYuZ2VuOF92YWxpZF9jdHhfYml0ID0gQklUKDE2KTsKKwkJCQlwZXJmLT5n ZW44X3ZhbGlkX2N0eF9iaXQgPSBCSVQoMTYpOwogCQkJfQotCQl9IGVsc2UgaWYgKElTX0dFTl9S QU5HRShkZXZfcHJpdiwgMTAsIDExKSkgewotCQkJZGV2X3ByaXYtPnBlcmYub3BzLmlzX3ZhbGlk X2JfY291bnRlcl9yZWcgPQorCQl9IGVsc2UgaWYgKElTX0dFTl9SQU5HRShpOTE1LCAxMCwgMTEp KSB7CisJCQlwZXJmLT5vcHMuaXNfdmFsaWRfYl9jb3VudGVyX3JlZyA9CiAJCQkJZ2VuN19pc192 YWxpZF9iX2NvdW50ZXJfYWRkcjsKLQkJCWRldl9wcml2LT5wZXJmLm9wcy5pc192YWxpZF9tdXhf cmVnID0KKwkJCXBlcmYtPm9wcy5pc192YWxpZF9tdXhfcmVnID0KIAkJCQlnZW4xMF9pc192YWxp ZF9tdXhfYWRkcjsKLQkJCWRldl9wcml2LT5wZXJmLm9wcy5pc192YWxpZF9mbGV4X3JlZyA9CisJ CQlwZXJmLT5vcHMuaXNfdmFsaWRfZmxleF9yZWcgPQogCQkJCWdlbjhfaXNfdmFsaWRfZmxleF9h ZGRyOwogCi0JCQlkZXZfcHJpdi0+cGVyZi5vcHMuZW5hYmxlX21ldHJpY19zZXQgPSBnZW44X2Vu YWJsZV9tZXRyaWNfc2V0OwotCQkJZGV2X3ByaXYtPnBlcmYub3BzLmRpc2FibGVfbWV0cmljX3Nl dCA9IGdlbjEwX2Rpc2FibGVfbWV0cmljX3NldDsKKwkJCXBlcmYtPm9wcy5lbmFibGVfbWV0cmlj X3NldCA9IGdlbjhfZW5hYmxlX21ldHJpY19zZXQ7CisJCQlwZXJmLT5vcHMuZGlzYWJsZV9tZXRy aWNfc2V0ID0gZ2VuMTBfZGlzYWJsZV9tZXRyaWNfc2V0OwogCi0JCQlpZiAoSVNfR0VOKGRldl9w cml2LCAxMCkpIHsKLQkJCQlkZXZfcHJpdi0+cGVyZi5jdHhfb2FjdHhjdHJsX29mZnNldCA9IDB4 MTI4OwotCQkJCWRldl9wcml2LT5wZXJmLmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4M2RlOworCQkJ aWYgKElTX0dFTihpOTE1LCAxMCkpIHsKKwkJCQlwZXJmLT5jdHhfb2FjdHhjdHJsX29mZnNldCA9 IDB4MTI4OworCQkJCXBlcmYtPmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4M2RlOwogCQkJfSBlbHNl IHsKLQkJCQlkZXZfcHJpdi0+cGVyZi5jdHhfb2FjdHhjdHJsX29mZnNldCA9IDB4MTI0OwotCQkJ CWRldl9wcml2LT5wZXJmLmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4NzhlOworCQkJCXBlcmYtPmN0 eF9vYWN0eGN0cmxfb2Zmc2V0ID0gMHgxMjQ7CisJCQkJcGVyZi0+Y3R4X2ZsZXhldTBfb2Zmc2V0 ID0gMHg3OGU7CiAJCQl9Ci0JCQlkZXZfcHJpdi0+cGVyZi5nZW44X3ZhbGlkX2N0eF9iaXQgPSBC SVQoMTYpOworCQkJcGVyZi0+Z2VuOF92YWxpZF9jdHhfYml0ID0gQklUKDE2KTsKIAkJfQogCX0K IAotCWlmIChkZXZfcHJpdi0+cGVyZi5vcHMuZW5hYmxlX21ldHJpY19zZXQpIHsKLQkJSU5JVF9M SVNUX0hFQUQoJmRldl9wcml2LT5wZXJmLnN0cmVhbXMpOwotCQltdXRleF9pbml0KCZkZXZfcHJp di0+cGVyZi5sb2NrKTsKKwlpZiAocGVyZi0+b3BzLmVuYWJsZV9tZXRyaWNfc2V0KSB7CisJCUlO SVRfTElTVF9IRUFEKCZwZXJmLT5zdHJlYW1zKTsKKwkJbXV0ZXhfaW5pdCgmcGVyZi0+bG9jayk7 CiAKIAkJb2Ffc2FtcGxlX3JhdGVfaGFyZF9saW1pdCA9IDEwMDAgKgotCQkJKFJVTlRJTUVfSU5G TyhkZXZfcHJpdiktPmNzX3RpbWVzdGFtcF9mcmVxdWVuY3lfa2h6IC8gMik7Ci0JCWRldl9wcml2 LT5wZXJmLnN5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoZGV2X3Jvb3QpOwor CQkJKFJVTlRJTUVfSU5GTyhpOTE1KS0+Y3NfdGltZXN0YW1wX2ZyZXF1ZW5jeV9raHogLyAyKTsK KwkJcGVyZi0+c3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShkZXZfcm9vdCk7 CiAKLQkJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBlcmYubWV0cmljc19sb2NrKTsKLQkJaWRyX2lu aXQoJmRldl9wcml2LT5wZXJmLm1ldHJpY3NfaWRyKTsKKwkJbXV0ZXhfaW5pdCgmcGVyZi0+bWV0 cmljc19sb2NrKTsKKwkJaWRyX2luaXQoJnBlcmYtPm1ldHJpY3NfaWRyKTsKIAogCQkvKiBXZSBz ZXQgdXAgc29tZSByYXRlbGltaXQgc3RhdGUgdG8gcG90ZW50aWFsbHkgdGhyb3R0bGUgYW55CiAJ CSAqIF9OT1RFUyBhYm91dCBzcHVyaW91cywgaW52YWxpZCBPQSByZXBvcnRzIHdoaWNoIHdlIGRv bid0CkBAIC0zNjM5LDQ0ICszNjMwLDQwIEBAIHZvaWQgaTkxNV9wZXJmX2luaXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQkgKgogCQkgKiBVc2luZyB0aGUgc2FtZSBsaW1p dGluZyBmYWN0b3JzIGFzIHByaW50a19yYXRlbGltaXQoKQogCQkgKi8KLQkJcmF0ZWxpbWl0X3N0 YXRlX2luaXQoJmRldl9wcml2LT5wZXJmLnNwdXJpb3VzX3JlcG9ydF9ycywKLQkJCQkgICAgIDUg KiBIWiwgMTApOworCQlyYXRlbGltaXRfc3RhdGVfaW5pdCgmcGVyZi0+c3B1cmlvdXNfcmVwb3J0 X3JzLCA1ICogSFosIDEwKTsKIAkJLyogU2luY2Ugd2UgdXNlIGEgRFJNX05PVEUgZm9yIHNwdXJp b3VzIHJlcG9ydHMgaXQgd291bGQgYmUKIAkJICogaW5jb25zaXN0ZW50IHRvIGxldCBfX3JhdGVs aW1pdCgpIGF1dG9tYXRpY2FsbHkgcHJpbnQgYQogCQkgKiB3YXJuaW5nIGZvciB0aHJvdHRsaW5n LgogCQkgKi8KLQkJcmF0ZWxpbWl0X3NldF9mbGFncygmZGV2X3ByaXYtPnBlcmYuc3B1cmlvdXNf cmVwb3J0X3JzLAorCQlyYXRlbGltaXRfc2V0X2ZsYWdzKCZwZXJmLT5zcHVyaW91c19yZXBvcnRf cnMsCiAJCQkJICAgIFJBVEVMSU1JVF9NU0dfT05fUkVMRUFTRSk7CiAKLQkJZGV2X3ByaXYtPnBl cmYuaW5pdGlhbGl6ZWQgPSB0cnVlOworCQlwZXJmLT5pOTE1ID0gaTkxNTsKIAl9CiB9CiAKIHN0 YXRpYyBpbnQgZGVzdHJveV9jb25maWcoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQogewot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRhdGE7Ci0Jc3RydWN0IGk5MTVf b2FfY29uZmlnICpvYV9jb25maWcgPSBwOwotCi0JcHV0X29hX2NvbmZpZyhkZXZfcHJpdiwgb2Ff Y29uZmlnKTsKLQorCXB1dF9vYV9jb25maWcocCk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgogICog aTkxNV9wZXJmX2ZpbmkgLSBDb3VudGVyIHBhcnQgdG8gaTkxNV9wZXJmX2luaXQoKQotICogQGRl dl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQorICogQGk5MTU6IGk5MTUgZGV2aWNlIGluc3Rh bmNlCiAgKi8KLXZvaWQgaTkxNV9wZXJmX2Zpbmkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQordm9pZCBpOTE1X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKIHsKLQlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKQotCQlyZXR1cm47CisJc3Ry dWN0IGk5MTVfcGVyZiAqcGVyZiA9ICZpOTE1LT5wZXJmOwogCi0JaWRyX2Zvcl9lYWNoKCZkZXZf cHJpdi0+cGVyZi5tZXRyaWNzX2lkciwgZGVzdHJveV9jb25maWcsIGRldl9wcml2KTsKLQlpZHJf ZGVzdHJveSgmZGV2X3ByaXYtPnBlcmYubWV0cmljc19pZHIpOworCWlmICghcGVyZi0+aTkxNSkK KwkJcmV0dXJuOwogCi0JdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoZGV2X3ByaXYtPnBlcmYuc3lz Y3RsX2hlYWRlcik7CisJaWRyX2Zvcl9lYWNoKCZwZXJmLT5tZXRyaWNzX2lkciwgZGVzdHJveV9j b25maWcsIHBlcmYpOworCWlkcl9kZXN0cm95KCZwZXJmLT5tZXRyaWNzX2lkcik7CiAKLQltZW1z ZXQoJmRldl9wcml2LT5wZXJmLm9wcywgMCwgc2l6ZW9mKGRldl9wcml2LT5wZXJmLm9wcykpOwor CXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHBlcmYtPnN5c2N0bF9oZWFkZXIpOwogCi0JZGV2X3By aXYtPnBlcmYuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwltZW1zZXQoJnBlcmYtPm9wcywgMCwgc2l6 ZW9mKHBlcmYtPm9wcykpOworCXBlcmYtPmk5MTUgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BlcmZfdHlwZXMuaAppbmRleCBlZGNhYjJkZjc0ZmIuLjNjNjI0NjA2NGEwYiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmX3R5cGVzLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmX3R5cGVzLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNp bmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUg PGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51 eC91dWlkLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCkBAIC0xMjQsOSArMTI1LDE0IEBA IHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtX29wcyB7CiAgKi8KIHN0cnVjdCBpOTE1X3BlcmZfc3Ry ZWFtIHsKIAkvKioKLQkgKiBAZGV2X3ByaXY6IGk5MTUgZHJtIGRldmljZQorCSAqIEBwZXJmOiBp OTE1X3BlcmYgYmFja3BvaW50ZXIKIAkgKi8KLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXY7CisJc3RydWN0IGk5MTVfcGVyZiAqcGVyZjsKKworCS8qKgorCSAqIEBndDogaW50ZWxf Z3QgY29udGFpbmVyCisJICovCisJc3RydWN0IGludGVsX2d0ICpndDsKIAogCS8qKgogCSAqIEBs aW5rOiBMaW5rcyB0aGUgc3RyZWFtIGludG8gYGAmZHJtX2k5MTVfcHJpdmF0ZS0+c3RyZWFtc2Bg CkBAIC0yNjYsMjAgKzI3MiwxOSBAQCBzdHJ1Y3QgaTkxNV9vYV9vcHMgewogCSAqIEBpc192YWxp ZF9iX2NvdW50ZXJfcmVnOiBWYWxpZGF0ZXMgcmVnaXN0ZXIncyBhZGRyZXNzIGZvcgogCSAqIHBy b2dyYW1taW5nIGJvb2xlYW4gY291bnRlcnMgZm9yIGEgcGFydGljdWxhciBwbGF0Zm9ybS4KIAkg Ki8KLQlib29sICgqaXNfdmFsaWRfYl9jb3VudGVyX3JlZykoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAotCQkJCSAgICAgICB1MzIgYWRkcik7CisJYm9vbCAoKmlzX3ZhbGlkX2Jf Y291bnRlcl9yZWcpKHN0cnVjdCBpOTE1X3BlcmYgKnBlcmYsIHUzMiBhZGRyKTsKIAogCS8qKgog CSAqIEBpc192YWxpZF9tdXhfcmVnOiBWYWxpZGF0ZXMgcmVnaXN0ZXIncyBhZGRyZXNzIGZvciBw cm9ncmFtbWluZyBtdXgKIAkgKiBmb3IgYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLgogCSAqLwotCWJv b2wgKCppc192YWxpZF9tdXhfcmVnKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IHUzMiBhZGRyKTsKKwlib29sICgqaXNfdmFsaWRfbXV4X3JlZykoc3RydWN0IGk5MTVfcGVyZiAq cGVyZiwgdTMyIGFkZHIpOwogCiAJLyoqCiAJICogQGlzX3ZhbGlkX2ZsZXhfcmVnOiBWYWxpZGF0 ZXMgcmVnaXN0ZXIncyBhZGRyZXNzIGZvciBwcm9ncmFtbWluZwogCSAqIGZsZXggRVUgZmlsdGVy aW5nIGZvciBhIHBhcnRpY3VsYXIgcGxhdGZvcm0uCiAJICovCi0JYm9vbCAoKmlzX3ZhbGlkX2Zs ZXhfcmVnKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBhZGRyKTsKKwli b29sICgqaXNfdmFsaWRfZmxleF9yZWcpKHN0cnVjdCBpOTE1X3BlcmYgKnBlcmYsIHUzMiBhZGRy KTsKIAogCS8qKgogCSAqIEBlbmFibGVfbWV0cmljX3NldDogU2VsZWN0cyBhbmQgYXBwbGllcyBh bnkgTVVYIGNvbmZpZ3VyYXRpb24gdG8gc2V0CkBAIC0zMjQsNCArMzI5LDYwIEBAIHN0cnVjdCBp OTE1X29hX29wcyB7CiAJdTMyICgqb2FfaHdfdGFpbF9yZWFkKShzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtKTsKIH07CiAKK3N0cnVjdCBpOTE1X3BlcmYgeworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1OworCisJc3RydWN0IGtvYmplY3QgKm1ldHJpY3Nfa29iajsKKwlzdHJ1 Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3lzY3RsX2hlYWRlcjsKKworCS8qCisJICogTG9jayBhc3Nv Y2lhdGVkIHdpdGggYWRkaW5nL21vZGlmeWluZy9yZW1vdmluZyBPQSBjb25maWdzCisJICogaW4g ZGV2X3ByaXYtPnBlcmYubWV0cmljc19pZHIuCisJICovCisJc3RydWN0IG11dGV4IG1ldHJpY3Nf bG9jazsKKworCS8qCisJICogTGlzdCBvZiBkeW5hbWljIGNvbmZpZ3VyYXRpb25zLCB5b3UgbmVl ZCB0byBob2xkCisJICogZGV2X3ByaXYtPnBlcmYubWV0cmljc19sb2NrIHRvIGFjY2VzcyBpdC4K KwkgKi8KKwlzdHJ1Y3QgaWRyIG1ldHJpY3NfaWRyOworCisJLyoKKwkgKiBMb2NrIGFzc29jaWF0 ZWQgd2l0aCBhbnl0aGluZyBiZWxvdyB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUKKwkgKiBleGNlcHQg ZXhjbHVzaXZlX3N0cmVhbS4KKwkgKi8KKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgbGlz dF9oZWFkIHN0cmVhbXM7CisKKwkvKgorCSAqIFRoZSBzdHJlYW0gY3VycmVudGx5IHVzaW5nIHRo ZSBPQSB1bml0LiBJZiBhY2Nlc3NlZAorCSAqIG91dHNpZGUgYSBzeXNjYWxsIGFzc29jaWF0ZWQg dG8gaXRzIGZpbGUKKwkgKiBkZXNjcmlwdG9yLCB5b3UgbmVlZCB0byBob2xkCisJICogZGV2X3By aXYtPmRybS5zdHJ1Y3RfbXV0ZXguCisJICovCisJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKmV4 Y2x1c2l2ZV9zdHJlYW07CisKKwkvKioKKwkgKiBGb3IgcmF0ZSBsaW1pdGluZyBhbnkgbm90aWZp Y2F0aW9ucyBvZiBzcHVyaW91cworCSAqIGludmFsaWQgT0EgcmVwb3J0cworCSAqLworCXN0cnVj dCByYXRlbGltaXRfc3RhdGUgc3B1cmlvdXNfcmVwb3J0X3JzOworCisJc3RydWN0IGk5MTVfb2Ff Y29uZmlnIHRlc3RfY29uZmlnOworCisJdTMyIGdlbjdfbGF0Y2hlZF9vYXN0YXR1czE7CisJdTMy IGN0eF9vYWN0eGN0cmxfb2Zmc2V0OworCXUzMiBjdHhfZmxleGV1MF9vZmZzZXQ7CisKKwkvKioK KwkgKiBUaGUgUlBUX0lEL3JlYXNvbiBmaWVsZCBmb3IgR2VuOCsgaW5jbHVkZXMgYSBiaXQKKwkg KiB0byBkZXRlcm1pbmUgaWYgdGhlIENUWCBJRCBpbiB0aGUgcmVwb3J0IGlzIHZhbGlkCisJICog YnV0IHRoZSBzcGVjaWZpYyBiaXQgZGlmZmVycyBiZXR3ZWVuIEdlbiA4IGFuZCA5CisJICovCisJ dTMyIGdlbjhfdmFsaWRfY3R4X2JpdDsKKworCXN0cnVjdCBpOTE1X29hX29wcyBvcHM7CisJY29u c3Qgc3RydWN0IGk5MTVfb2FfZm9ybWF0ICpvYV9mb3JtYXRzOworfTsKKwogI2VuZGlmIC8qIF9J OTE1X1BFUkZfVFlQRVNfSF8gKi8KLS0gCjIuMjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4