From mboxrd@z Thu Jan 1 00:00:00 1970 From: sourab.gupta@intel.com Subject: [PATCH 09/15] drm/i915: Extend i915 perf framework for collecting timestamps on all gpu engines Date: Fri, 4 Nov 2016 15:00:38 +0530 Message-ID: <1478251844-23509-10-git-send-email-sourab.gupta@intel.com> References: <1478251844-23509-1-git-send-email-sourab.gupta@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id B6C016E903 for ; Fri, 4 Nov 2016 09:29:27 +0000 (UTC) In-Reply-To: <1478251844-23509-1-git-send-email-sourab.gupta@intel.com> 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 Cc: "Christopher S . Hall" , Daniel Vetter , Sourab Gupta , Matthew Auld , Thomas Gleixner List-Id: intel-gfx@lists.freedesktop.org RnJvbTogU291cmFiIEd1cHRhIDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29tPgoKVGhpcyBwYXRjaCBl eHRlbmRzIHRoZSBpOTE1ICBwZXJmIGZyYW1ld29yayB0byBoYW5kbGUgdGhlIHBlcmYgc2FtcGxl CmNvbGxlY3Rpb24gZm9yIGFueSBnaXZlbiBncHUgZW5naW5lLiBQYXJ0aWN1bGFybHksIHRoZSBz dXBwb3J0CmZvciBjb2xsZWN0aW5nIHRpbWVzdGFtcCBzYW1wbGUgdHlwZSBpcyBhZGRlZCwgd2hp Y2ggY2FuIGJlIHJlcXVlc3RlZCBmb3IKYW55IGVuZ2luZS4KV2l0aCB0aGlzLCBmb3IgUkNTLCB0 aW1lc3RhbXBzIGFuZCBPQSByZXBvcnRzIGNhbiBiZSBjb2xsZWN0ZWQgdG9nZXRoZXIsCmFuZCBw cm92aWRlZCB0byB1c2Vyc3BhY2UgaW4gc2VwYXJhdGUgc2FtcGxlIGZpZWxkcy4gRm9yIG90aGVy IGVuZ2luZXMsCnRoZSBjYXBhYmlsaWxpdHkgdG8gY29sbGVjdCB0aW1lc3RhbXBzIGlzIGFkZGVk LgoKVGhlIHRoaW5nIHRvIG5vdGUgaXMgdGhhdCwgc3RpbGwgb25seSBhIHNpbmdsZSBzdHJlYW0g aW5zdGFuY2UgY2FuIGJlCm9wZW5lZCBhdCBhbnkgcGFydGljdWxhciB0aW1lLiBUaG91Z2ggdGhh dCBzdHJlYW0gbWF5IG5vdyBiZSBvcGVuZWQgZm9yIGFueQpncHUgZW5naW5lLCBmb3IgY29sbGVj dGlvbiBvZiB0aW1lc3RhbXAgc2FtcGxlcy4KClNvLCB0aGlzIHBhdGNoIGRvZXNuJ3QgYWRkIHRo ZSBzdXBwb3J0IHRvIG9wZW4gbXVsdGlwbGUgY29uY3VycmVudCBzdHJlYW1zLAphcyB5ZXQuIFRo b3VnaCBpdCBsYXlzIHRoZSBncm91bmR3b3JrIGZvciB0aGlzIHN1cHBvcnQgdG8gYmUgYWRkZWQK c3VzZXF1ZW50bHkuIFBhcnQgb2YgdGhpcyBncm91bmR3b3JrIGludm9sdmVzIGhhdmluZyBzZXBh cmF0ZSBjb21tYW5kCnN0cmVhbSBidWZmZXJzLCBwZXIgZW5naW5lLCBmb3IgaG9sZGluZyB0aGUg c2FtcGxlcyBnZW5lcmF0ZWQuCkxpa2V3aXNlIGZvciBhIGZldyBvdGhlciBkYXRhIHN0cnVjdHVy ZXMgbWFpbnRhaW5pbmcgcGVyLWVuZ2luZSBzdGF0ZS4KClNpZ25lZC1vZmYtYnk6IFNvdXJhYiBH dXB0YSA8c291cmFiLmd1cHRhQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oICB8ICAzNSArKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIHwg NjM1ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaCAgfCAgIDIgKwogaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5o ICAgICAgfCAgIDcgKwogNCBmaWxlcyBjaGFuZ2VkLCA0NDUgaW5zZXJ0aW9ucygrKSwgMjM0IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDBmMTcxZjguLmEwNTMzNWEg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTgxNCw3ICsxODE0LDggQEAgc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW1fb3BzIHsKIAkgKiBSb3V0aW5lIHRvIGVtaXQgdGhlIGNvbW1hbmRzIGlu IHRoZSBjb21tYW5kIHN0cmVhbWVyIGFzc29jaWF0ZWQKIAkgKiB3aXRoIHRoZSBjb3JyZXNwb25k aW5nIGdwdSBlbmdpbmUuCiAJICovCi0Jdm9pZCAoKmNvbW1hbmRfc3RyZWFtX2hvb2spKHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCB1MzIgdGFnKTsKKwl2b2lkICgqY29tbWFuZF9z dHJlYW1faG9vaykoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgdTMyIHRhZyk7CiB9OwogCiBlbnVtIGk5MTVfcGVy Zl9zdHJlYW1fc3RhdGUgewpAQCAtMTgzOSw2ICsxODQwLDkgQEAgc3RydWN0IGk5MTVfcGVyZl9z dHJlYW0gewogCS8qIFdoZXRoZXIgY29tbWFuZCBzdHJlYW0gYmFzZWQgZGF0YSBjb2xsZWN0aW9u IGlzIGVuYWJsZWQgKi8KIAlib29sIGNzX21vZGU7CiAKKwkvKiBXaGV0aGVyIHRoZSBPQSB1bml0 IGlzIGluIHVzZSAqLworCWJvb2wgdXNpbmdfb2E7CisKIAljb25zdCBzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbV9vcHMgKm9wczsKIH07CiAKQEAgLTE4NzAsNyArMTg3NCwxNiBAQCBzdHJ1Y3QgaTkx NV9vYV9vcHMgewogc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgewogCXN0cnVjdCBsaXN0 X2hlYWQgbGluazsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7Ci0JdTMy IG9mZnNldDsKKworCS8qIE9mZnNldHMgaW50byB0aGUgR0VNIG9iaiBob2xkaW5nIHRoZSBkYXRh ICovCisJdTMyIHN0YXJ0X29mZnNldDsKKwl1MzIgb2Ffb2Zmc2V0OworCXUzMiB0c19vZmZzZXQ7 CisKKwkvKiBidWZmZXIgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZW50cnkgKi8KKwl1MzIg c2l6ZTsKKworCS8qIE90aGVyIG1ldGFkYXRhICovCiAJdTMyIGN0eF9pZDsKIAl1MzIgcGlkOwog CXUzMiB0YWc7CkBAIC0yMTg5LDE0ICsyMjAyLDE0IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl IHsKIAogCQlzcGlubG9ja190IGhvb2tfbG9jazsKIAotCQlzdHJ1Y3QgewotCQkJc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0gKmV4Y2x1c2l2ZV9zdHJlYW07CiAKLQkJCXUzMiBzcGVjaWZpY19jdHhf aWQ7CisJCXN0cnVjdCBocnRpbWVyIHBvbGxfY2hlY2tfdGltZXI7CisJCXN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpleGNsdXNpdmVfc3RyZWFtOworCQl3YWl0X3F1ZXVlX2hlYWRfdCBwb2xsX3dx W0k5MTVfTlVNX0VOR0lORVNdOworCQlhdG9taWNfdCBwb2xsaW5bSTkxNV9OVU1fRU5HSU5FU107 CiAKLQkJCXN0cnVjdCBocnRpbWVyIHBvbGxfY2hlY2tfdGltZXI7Ci0JCQl3YWl0X3F1ZXVlX2hl YWRfdCBwb2xsX3dxOwotCQkJYXRvbWljX3QgcG9sbGluOworCQlzdHJ1Y3QgeworCQkJdTMyIHNw ZWNpZmljX2N0eF9pZDsKIAogCQkJYm9vbCBwZXJpb2RpYzsKIAkJCWludCBwZXJpb2RfZXhwb25l bnQ7CkBAIC0yMjQxLDEzICsyMjU0LDEzIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAkJ CXU4ICphZGRyOwogI2RlZmluZSBJOTE1X1BFUkZfQ01EX1NUUkVBTV9CVUZfU1RBVFVTX09WRVJG TE9XICgxPDwwKQogCQkJdTMyIHN0YXR1czsKLQkJfSBjb21tYW5kX3N0cmVhbV9idWY7CisJCX0g Y29tbWFuZF9zdHJlYW1fYnVmW0k5MTVfTlVNX0VOR0lORVNdOwogCiAJCXUzMiBsYXN0X2N0eF9p ZDsKIAkJdTMyIGxhc3RfcGlkOwogCQl1MzIgbGFzdF90YWc7Ci0JCXN0cnVjdCBsaXN0X2hlYWQg bm9kZV9saXN0OwotCQlzcGlubG9ja190IG5vZGVfbGlzdF9sb2NrOworCQlzdHJ1Y3QgbGlzdF9o ZWFkIG5vZGVfbGlzdFtJOTE1X05VTV9FTkdJTkVTXTsKKwkJc3BpbmxvY2tfdCBub2RlX2xpc3Rf bG9ja1tJOTE1X05VTV9FTkdJTkVTXTsKIAl9IHBlcmY7CiAKIAkvKiBBYnN0cmFjdCB0aGUgc3Vi bWlzc2lvbiBtZWNoYW5pc20gKGxlZ2FjeSByaW5nYnVmZmVyIG9yIGV4ZWNsaXN0cykgYXdheSAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwppbmRleCBjYTUyM2IxLi41MTZmZDU0IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3BlcmYuYwpAQCAtMjUwLDEyICsyNTAsMTcgQEAgc3RhdGljIHUzMiBpOTE1 X3BlcmZfc3RyZWFtX3BhcmFub2lkID0gdHJ1ZTsKIC8qIEZvciBkZXRlcm1pbmluZyB0aGUgYmVo YXZpb3Igb24gb3ZlcmZsb3cgb2YgY29tbWFuZCBzdHJlYW0gc2FtcGxlcyAqLwogI2RlZmluZSBD TURfU1RSRUFNX0JVRl9PVkVSRkxPV19BTExPV0VECiAKLS8qIERhdGEgY29tbW9uIHRvIHBlcmlv ZGljIGFuZCBSQ1MgYmFzZWQgc2FtcGxlcyAqLwotc3RydWN0IG9hX3NhbXBsZV9kYXRhIHsKKyNk ZWZpbmUgT0FfQUREUl9BTElHTiA2NAorI2RlZmluZSBUU19BRERSX0FMSUdOIDgKKyNkZWZpbmUg STkxNV9QRVJGX1RTX1NBTVBMRV9TSVpFIDgKKworLyogRGF0YSBjb21tb24gdG8gYWxsIHNhbXBs ZXMgKHBlcmlvZGljIE9BIC8gQ1MgYmFzZWQgT0EgLyBUaW1lc3RhbXBzKSAqLworc3RydWN0IHNh bXBsZV9kYXRhIHsKIAl1MzIgc291cmNlOwogCXUzMiBjdHhfaWQ7CiAJdTMyIHBpZDsKIAl1MzIg dGFnOworCXU2NCB0czsKIAljb25zdCB1OCAqcmVwb3J0OwogfTsKIApAQCAtMzEzLDYgKzMxOCw3 IEBAIHN0YXRpYyBjb25zdCBlbnVtIGludGVsX2VuZ2luZV9pZCB1c2VyX3JpbmdfbWFwW0k5MTVf VVNFUl9SSU5HUyArIDFdID0gewogI2RlZmluZSBTQU1QTEVfQ1RYX0lECQkoMTw8MikKICNkZWZp bmUgU0FNUExFX1BJRAkJKDE8PDMpCiAjZGVmaW5lIFNBTVBMRV9UQUcJCSgxPDw0KQorI2RlZmlu ZSBTQU1QTEVfVFMJCSgxPDw1KQogCiBzdHJ1Y3QgcGVyZl9vcGVuX3Byb3BlcnRpZXMgewogCXUz MiBzYW1wbGVfZmxhZ3M7CkBAIC0zNTAsOCArMzU2LDkgQEAgdm9pZCBpOTE1X3BlcmZfY29tbWFu ZF9zdHJlYW1faG9vayhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsCiAJbXV0 ZXhfbG9jaygmZGV2X3ByaXYtPnBlcmYuc3RyZWFtc19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHN0cmVhbSwgJmRldl9wcml2LT5wZXJmLnN0cmVhbXMsIGxpbmspIHsKIAkJaWYgKChzdHJl YW0tPnN0YXRlID09IEk5MTVfUEVSRl9TVFJFQU1fRU5BQkxFRCkgJiYKLQkJCQkJc3RyZWFtLT5j c19tb2RlKQotCQkJc3RyZWFtLT5vcHMtPmNvbW1hbmRfc3RyZWFtX2hvb2socmVxdWVzdCwgdGFn KTsKKwkJCQlzdHJlYW0tPmNzX21vZGUgJiYKKwkJCQkoc3RyZWFtLT5lbmdpbmUgPT0gZW5naW5l LT5pZCkpCisJCQlzdHJlYW0tPm9wcy0+Y29tbWFuZF9zdHJlYW1faG9vayhzdHJlYW0sIHJlcXVl c3QsIHRhZyk7CiAJfQogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYuc3RyZWFtc19sb2Nr KTsKIH0KQEAgLTM2NSwxNiArMzcyLDE1IEBAIHZvaWQgaTkxNV9wZXJmX2NvbW1hbmRfc3RyZWFt X2hvb2soc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0LAogICogZXZlbnR1YWxs eSwgd2hlbiB0aGUgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggbmV3IGVudHJ5IGNvbXBsZXRlcy4K ICAqLwogc3RhdGljIHZvaWQgcmVsZWFzZV9zb21lX3BlcmZfZW50cmllcyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCXUzMiB0YXJnZXRfc2l6ZSkKKwkJCQllbnVtIGlu dGVsX2VuZ2luZV9pZCBpZCwgdTMyIHRhcmdldF9zaXplKQogewogCXN0cnVjdCBpOTE1X3BlcmZf Y3NfZGF0YV9ub2RlICplbnRyeSwgKm5leHQ7Ci0JdTMyIGVudHJ5X3NpemUgPSBkZXZfcHJpdi0+ cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemU7CiAJdTMyIHNpemUgPSAwOwogCiAJbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlCi0JCShlbnRyeSwgbmV4dCwgJmRldl9wcml2LT5wZXJmLm5vZGVf bGlzdCwgbGluaykgeworCQkoZW50cnksIG5leHQsICZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3Rb aWRdLCBsaW5rKSB7CiAKLQkJc2l6ZSArPSBlbnRyeV9zaXplOworCQlzaXplICs9IGVudHJ5LT5z aXplOwogCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChlbnRyeS0+cmVxdWVzdCk7CiAJCWxpc3RfZGVs KCZlbnRyeS0+bGluayk7CiAJCWtmcmVlKGVudHJ5KTsKQEAgLTM5Miw0MyArMzk4LDYxIEBAIHN0 YXRpYyB2b2lkIHJlbGVhc2Vfc29tZV9wZXJmX2VudHJpZXMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAogICogYXBwcm9wcmlhdGUgc3RhdHVzIGZsYWcgaXMgc2V0LCBhbmQgZnVu Y3Rpb24gcmV0dXJucyAtRU5PU1BDLgogICovCiBzdGF0aWMgaW50IGluc2VydF9wZXJmX2VudHJ5 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQlzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtLAogCQkJCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlICplbnRy eSkKIHsKIAlzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9kZSAqZmlyc3RfZW50cnksICpsYXN0 X2VudHJ5OwotCWludCBtYXhfb2Zmc2V0ID0gZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1f YnVmLm9iai0+YmFzZS5zaXplOwotCXUzMiBlbnRyeV9zaXplID0gZGV2X3ByaXYtPnBlcmYub2Eu b2FfYnVmZmVyLmZvcm1hdF9zaXplOworCXUzMiBzYW1wbGVfZmxhZ3MgPSBzdHJlYW0tPnNhbXBs ZV9mbGFnczsKKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZCA9IHN0cmVhbS0+ZW5naW5lOworCWlu dCBtYXhfb2Zmc2V0ID0gZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5vYmot PmJhc2Uuc2l6ZTsKKwl1MzIgb2Zmc2V0LCBlbnRyeV9zaXplID0gMDsKKwlib29sIHNhbXBsZV90 cyA9IGZhbHNlOwogCWludCByZXQgPSAwOwogCi0Jc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cGVyZi5u b2RlX2xpc3RfbG9jayk7Ci0JaWYgKGxpc3RfZW1wdHkoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlz dCkpIHsKLQkJZW50cnktPm9mZnNldCA9IDA7CisJaWYgKHN0cmVhbS0+c2FtcGxlX2ZsYWdzICYg U0FNUExFX09BX1JFUE9SVCkKKwkJZW50cnlfc2l6ZSArPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9i dWZmZXIuZm9ybWF0X3NpemU7CisJZWxzZSBpZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExFX1RTKSB7 CisJCS8qCisJCSAqIFhYWDogU2luY2UgVFMgZGF0YSBjYW4gYW55d2F5cyBiZSBkZXJpdmVkIGZy b20gT0EgcmVwb3J0LCBzbworCQkgKiBubyBuZWVkIHRvIGNhcHR1cmUgaXQgZm9yIFJDUyBlbmdp bmUsIGlmIGNhcHR1cmUgb2EgZGF0YSBpcworCQkgKiBjYWxsZWQgYWxyZWFkeS4KKwkJICovCisJ CWVudHJ5X3NpemUgKz0gSTkxNV9QRVJGX1RTX1NBTVBMRV9TSVpFOworCQlzYW1wbGVfdHMgPSB0 cnVlOworCX0KKworCXNwaW5fbG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2tbaWRd KTsKKwlpZiAobGlzdF9lbXB0eSgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0W2lkXSkpIHsKKwkJ b2Zmc2V0ID0gMDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZmlyc3RfZW50cnkgPSBsaXN0X2ZpcnN0 X2VudHJ5KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3QsCisJZmlyc3RfZW50cnkgPSBsaXN0X2Zp cnN0X2VudHJ5KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RbaWRdLAogCQkJCSAgICAgICB0eXBl b2YoKmZpcnN0X2VudHJ5KSwgbGluayk7Ci0JbGFzdF9lbnRyeSA9IGxpc3RfbGFzdF9lbnRyeSgm ZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0LAorCWxhc3RfZW50cnkgPSBsaXN0X2xhc3RfZW50cnko JmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdFtpZF0sCiAJCQkJICAgICB0eXBlb2YoKmxhc3RfZW50 cnkpLCBsaW5rKTsKIAotCWlmIChsYXN0X2VudHJ5LT5vZmZzZXQgPj0gZmlyc3RfZW50cnktPm9m ZnNldCkgeworCWlmIChsYXN0X2VudHJ5LT5zdGFydF9vZmZzZXQgPj0gZmlyc3RfZW50cnktPnN0 YXJ0X29mZnNldCkgewogCQkvKiBTdWZmaWNpZW50IHNwYWNlIGF2YWlsYWJsZSBhdCB0aGUgZW5k IG9mIGJ1ZmZlcj8gKi8KLQkJaWYgKGxhc3RfZW50cnktPm9mZnNldCArIDIqZW50cnlfc2l6ZSA8 IG1heF9vZmZzZXQpCi0JCQllbnRyeS0+b2Zmc2V0ID0gbGFzdF9lbnRyeS0+b2Zmc2V0ICsgZW50 cnlfc2l6ZTsKKwkJaWYgKGxhc3RfZW50cnktPnN0YXJ0X29mZnNldCArIGxhc3RfZW50cnktPnNp emUgKyBlbnRyeV9zaXplCisJCQkJCQkJPCBtYXhfb2Zmc2V0KQorCQkJb2Zmc2V0ID0gbGFzdF9l bnRyeS0+c3RhcnRfb2Zmc2V0ICsgbGFzdF9lbnRyeS0+c2l6ZTsKIAkJLyoKIAkJICogV3JhcGFy b3VuZCBjb25kaXRpb24uIElzIHN1ZmZpY2llbnQgc3BhY2UgYXZhaWxhYmxlIGF0CiAJCSAqIGJl Z2lubmluZyBvZiBidWZmZXI/CiAJCSAqLwotCQllbHNlIGlmIChlbnRyeV9zaXplIDwgZmlyc3Rf ZW50cnktPm9mZnNldCkKLQkJCWVudHJ5LT5vZmZzZXQgPSAwOworCQllbHNlIGlmIChlbnRyeV9z aXplIDwgZmlyc3RfZW50cnktPnN0YXJ0X29mZnNldCkKKwkJCW9mZnNldCA9IDA7CiAJCS8qIElu c3VmZmljaWVudCBzcGFjZSAqLwogCQllbHNlIHsKICNpZmRlZiBDTURfU1RSRUFNX0JVRl9PVkVS RkxPV19BTExPV0VECi0JCQl1MzIgdGFyZ2V0X3NpemUgPSBlbnRyeV9zaXplIC0gZmlyc3RfZW50 cnktPm9mZnNldDsKKwkJCXUzMiB0YXJnZXRfc2l6ZSA9IGVudHJ5X3NpemUgLQorCQkJCQkJZmly c3RfZW50cnktPnN0YXJ0X29mZnNldDsKIAotCQkJcmVsZWFzZV9zb21lX3BlcmZfZW50cmllcyhk ZXZfcHJpdiwgdGFyZ2V0X3NpemUpOwotCQkJZW50cnktPm9mZnNldCA9IDA7CisJCQlyZWxlYXNl X3NvbWVfcGVyZl9lbnRyaWVzKGRldl9wcml2LCBpZCwgdGFyZ2V0X3NpemUpOworCQkJb2Zmc2V0 ID0gMDsKICNlbHNlCi0JCQlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYuc3RhdHVz IHw9CisJCQlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWZbaWRdLnN0YXR1cyB8PQog CQkJCUk5MTVfUEVSRl9DTURfU1RSRUFNX0JVRl9TVEFUVVNfT1ZFUkZMT1c7CiAJCQlyZXQgPSAt RU5PU1BDOwogCQkJZ290byBvdXRfdW5sb2NrOwpAQCAtNDM2LDE5ICs0NjAsMjEgQEAgc3RhdGlj IGludCBpbnNlcnRfcGVyZl9lbnRyeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CiAJCX0KIAl9IGVsc2UgewogCQkvKiBTdWZmaWNpZW50IHNwYWNlIGF2YWlsYWJsZT8gKi8KLQkJ aWYgKGxhc3RfZW50cnktPm9mZnNldCArIDIqZW50cnlfc2l6ZSA8IGZpcnN0X2VudHJ5LT5vZmZz ZXQpCi0JCQllbnRyeS0+b2Zmc2V0ID0gbGFzdF9lbnRyeS0+b2Zmc2V0ICsgZW50cnlfc2l6ZTsK KwkJaWYgKGxhc3RfZW50cnktPnN0YXJ0X29mZnNldCArIGxhc3RfZW50cnktPnNpemUgKyBlbnRy eV9zaXplCisJCQkJCQk8IGZpcnN0X2VudHJ5LT5zdGFydF9vZmZzZXQpCisJCQlvZmZzZXQgPSBs YXN0X2VudHJ5LT5zdGFydF9vZmZzZXQgKyBsYXN0X2VudHJ5LT5zaXplOwogCQkvKiBJbnN1ZmZp Y2llbnQgc3BhY2UgKi8KIAkJZWxzZSB7CiAjaWZkZWYgQ01EX1NUUkVBTV9CVUZfT1ZFUkZMT1df QUxMT1dFRAogCQkJdTMyIHRhcmdldF9zaXplID0gZW50cnlfc2l6ZSAtCi0JCQkJKGZpcnN0X2Vu dHJ5LT5vZmZzZXQgLSBsYXN0X2VudHJ5LT5vZmZzZXQgLQotCQkJCWVudHJ5X3NpemUpOworCQkJ CShmaXJzdF9lbnRyeS0+c3RhcnRfb2Zmc2V0IC0KKwkJCQkJbGFzdF9lbnRyeS0+c3RhcnRfb2Zm c2V0IC0KKwkJCQkJbGFzdF9lbnRyeS0+c2l6ZSk7CiAKLQkJCXJlbGVhc2Vfc29tZV9wZXJmX2Vu dHJpZXMoZGV2X3ByaXYsIHRhcmdldF9zaXplKTsKLQkJCWVudHJ5LT5vZmZzZXQgPSBsYXN0X2Vu dHJ5LT5vZmZzZXQgKyBlbnRyeV9zaXplOworCQkJcmVsZWFzZV9zb21lX3BlcmZfZW50cmllcyhk ZXZfcHJpdiwgaWQsIHRhcmdldF9zaXplKTsKKwkJCW9mZnNldCA9IGxhc3RfZW50cnktPnN0YXJ0 X29mZnNldCArIGxhc3RfZW50cnktPnNpemU7CiAjZWxzZQotCQkJZGV2X3ByaXYtPnBlcmYuY29t bWFuZF9zdHJlYW1fYnVmLnN0YXR1cyB8PQorCQkJZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJl YW1fYnVmW2lkXS5zdGF0dXMgfD0KIAkJCQlJOTE1X1BFUkZfQ01EX1NUUkVBTV9CVUZfU1RBVFVT X09WRVJGTE9XOwogCQkJcmV0ID0gLUVOT1NQQzsKIAkJCWdvdG8gb3V0X3VubG9jazsKQEAgLTQ1 Nyw0NSArNDgzLDQzIEBAIHN0YXRpYyBpbnQgaW5zZXJ0X3BlcmZfZW50cnkoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAogCX0KIAogb3V0OgotCWxpc3RfYWRkX3RhaWwoJmVudHJ5 LT5saW5rLCAmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0KTsKKwllbnRyeS0+c3RhcnRfb2Zmc2V0 ID0gb2Zmc2V0OworCWVudHJ5LT5zaXplID0gZW50cnlfc2l6ZTsKKwlpZiAoc3RyZWFtLT5zYW1w bGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKSB7CisJCWVudHJ5LT5vYV9vZmZzZXQgPSBvZmZz ZXQ7CisJCS8qIEVuc3VyZSA2NCBieXRlIGFsaWdubWVudCBvZiBvYV9vZmZzZXQgKi8KKwkJZW50 cnktPm9hX29mZnNldCA9IEFMSUdOKGVudHJ5LT5vYV9vZmZzZXQsIE9BX0FERFJfQUxJR04pOwor CQlvZmZzZXQgPSBlbnRyeS0+b2Ffb2Zmc2V0ICsKKwkJCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9i dWZmZXIuZm9ybWF0X3NpemU7CisJfQorCWlmIChzYW1wbGVfdHMpIHsKKwkJZW50cnktPnRzX29m ZnNldCA9IG9mZnNldDsKKwkJLyogRW5zdXJlIDggYnl0ZSBhbGlnbm1lbnQgb2YgdHNfb2Zmc2V0 ICovCisJCWVudHJ5LT50c19vZmZzZXQgPSBBTElHTihlbnRyeS0+dHNfb2Zmc2V0LCBUU19BRERS X0FMSUdOKTsKKwkJb2Zmc2V0ID0gZW50cnktPnRzX29mZnNldCArIEk5MTVfUEVSRl9UU19TQU1Q TEVfU0laRTsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGluaywgJmRldl9wcml2LT5w ZXJmLm5vZGVfbGlzdFtpZF0pOwogI2lmbmRlZiBDTURfU1RSRUFNX0JVRl9PVkVSRkxPV19BTExP V0VECiBvdXRfdW5sb2NrOgogI2VuZGlmCi0Jc3Bpbl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5v ZGVfbGlzdF9sb2NrKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xv Y2tbaWRdKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBpOTE1X3BlcmZfY29tbWFu ZF9zdHJlYW1faG9va19vYShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKLQkJCQkJ CXUzMiB0YWcpCitzdGF0aWMgaW50IGk5MTVfcmluZ19zdHJlYW1fY2FwdHVyZV9vYShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJCQl1MzIgb2Zmc2V0KQogewogCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJlcS0+aTkxNTsKIAlzdHJ1Y3QgaW50ZWxfcmlu ZyAqcmluZyA9IHJlcS0+cmluZzsKLQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gcmVx LT5jdHg7Ci0Jc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgKmVudHJ5OwogCXUzMiBhZGRy ID0gMDsKIAlpbnQgcmV0OwogCi0JZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBf S0VSTkVMKTsKLQlpZiAoZW50cnkgPT0gTlVMTCkgewotCQlEUk1fRVJST1IoImFsbG9jIGZhaWxl ZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZXQgPSBpbnNlcnRfcGVyZl9lbnRyeShkZXZfcHJp diwgZW50cnkpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KIAlyZXQgPSBpbnRlbF9y aW5nX2JlZ2luKHJlcSwgNCk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQllbnRyeS0+Y3R4 X2lkID0gY3R4LT5od19pZDsKLQllbnRyeS0+cGlkID0gY3VycmVudC0+cGlkOwotCWVudHJ5LT50 YWcgPSB0YWc7Ci0JaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJmVudHJ5LT5yZXF1ZXN0LCByZXEp OworCQlyZXR1cm4gcmV0OwogCi0JYWRkciA9IGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFt X2J1Zi52bWEtPm5vZGUuc3RhcnQgKwotCQllbnRyeS0+b2Zmc2V0OworCWFkZHIgPSBkZXZfcHJp di0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWZbUkNTXS52bWEtPm5vZGUuc3RhcnQgKyBvZmZzZXQ7 CiAKIAkvKiBhZGRyIHNob3VsZCBiZSA2NCBieXRlIGFsaWduZWQgKi8KIAlCVUdfT04oYWRkciAm IDB4M2YpOwpAQCAtNTEyLDE4ICs1MzYsMTI0IEBAIHN0YXRpYyB2b2lkIGk5MTVfcGVyZl9jb21t YW5kX3N0cmVhbV9ob29rX29hKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAogCQlp bnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CiAJfQogCWludGVsX3JpbmdfYWR2YW5jZShy aW5nKTsKLQlpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0 cmVhbV9idWYudm1hLCByZXEsCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9yaW5n X3N0cmVhbV9jYXB0dXJlX3RzKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAorCQkJ CQkJdTMyIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBy ZXEtPmk5MTU7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQgPSByZXEtPmVuZ2luZS0+aWQ7CisJ c3RydWN0IGludGVsX3JpbmcgKnJpbmcgPSByZXEtPnJpbmc7CisJdTMyIGFkZHIgPSAwOworCWlu dCByZXQ7CisKKwlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcSwgNik7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCWFkZHIgPSBkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWZb aWRdLnZtYS0+bm9kZS5zdGFydCArIG9mZnNldDsKKworCWlmIChpZCA9PSBSQ1MpIHsKKwkJaWYg KElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gOCkKKwkJCWludGVsX3JpbmdfZW1pdChyaW5n LCBHRlhfT1BfUElQRV9DT05UUk9MKDYpKTsKKwkJZWxzZQorCQkJaW50ZWxfcmluZ19lbWl0KHJp bmcsIEdGWF9PUF9QSVBFX0NPTlRST0woNSkpOworCQlpbnRlbF9yaW5nX2VtaXQocmluZywKKwkJ CQlQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAorCQkJCVBJUEVfQ09OVFJPTF9USU1FU1RB TVBfV1JJVEUpOworCQlpbnRlbF9yaW5nX2VtaXQocmluZywgYWRkciB8IFBJUEVfQ09OVFJPTF9H TE9CQUxfR1RUKTsKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOworCQlpZiAoSU5URUxfSU5G TyhkZXZfcHJpdiktPmdlbiA+PSA4KSB7CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJ CQlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJCX0gZWxzZSB7CisJCQlpbnRlbF9yaW5nX2Vt aXQocmluZywgMCk7CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CisJCX0KKwl9 IGVsc2UgeworCQl1aW50MzJfdCBjbWQ7CisKKwkJY21kID0gTUlfRkxVU0hfRFcgKyAxOworCQlp ZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA4KQorCQkJY21kICs9IDE7CisKKwkJY21k IHw9IE1JX0ZMVVNIX0RXX09QX1NUQU1QOworCisJCWludGVsX3JpbmdfZW1pdChyaW5nLCBjbWQp OworCQlpbnRlbF9yaW5nX2VtaXQocmluZywgYWRkciB8IE1JX0ZMVVNIX0RXX1VTRV9HVFQpOwor CQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA4KSB7CisJCQlpbnRlbF9yaW5nX2Vt aXQocmluZywgMCk7CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJCQlpbnRlbF9yaW5n X2VtaXQocmluZywgMCk7CisJCX0gZWxzZSB7CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7 CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywg TUlfTk9PUCk7CisJCX0KKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOworCX0KKwlp bnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg aTkxNV9yaW5nX3N0cmVhbV9jc19ob29rKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0s CisJCQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIHUzMiB0YWcpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmVxLT5pOTE1OworCXN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHggPSByZXEtPmN0eDsKKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZCA9 IHN0cmVhbS0+ZW5naW5lOworCXUzMiBzYW1wbGVfZmxhZ3MgPSBzdHJlYW0tPnNhbXBsZV9mbGFn czsKKwlzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9kZSAqZW50cnk7CisJaW50IHJldCA9IDA7 CisKKwllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmIChl bnRyeSA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiYWxsb2MgZmFpbGVkXG4iKTsKKwkJcmV0dXJu OworCX0KKworCXJldCA9IGluc2VydF9wZXJmX2VudHJ5KGRldl9wcml2LCBzdHJlYW0sIGVudHJ5 KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCisJZW50cnktPmN0eF9pZCA9IGN0eC0+ aHdfaWQ7CisJZW50cnktPnBpZCA9IGN1cnJlbnQtPnBpZDsKKwllbnRyeS0+dGFnID0gdGFnOwor CWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZlbnRyeS0+cmVxdWVzdCwgcmVxKTsKKworCWlmIChz YW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKSB7CisJCXJldCA9IGk5MTVfcmluZ19zdHJl YW1fY2FwdHVyZV9vYShyZXEsIGVudHJ5LT5vYV9vZmZzZXQpOworCQlpZiAocmV0KQorCQkJZ290 byBlcnJfdW5yZWY7CisJfSBlbHNlIGlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfVFMpIHsKKwkJ LyoKKwkJICogWFhYOiBTaW5jZSBUUyBkYXRhIGNhbiBhbnl3YXlzIGJlIGRlcml2ZWQgZnJvbSBP QSByZXBvcnQsIHNvCisJCSAqIG5vIG5lZWQgdG8gY2FwdHVyZSBpdCBmb3IgUkNTIGVuZ2luZSwg aWYgY2FwdHVyZSBvYSBkYXRhIGlzCisJCSAqIGNhbGxlZCBhbHJlYWR5LgorCQkgKi8KKwkJcmV0 ID0gaTkxNV9yaW5nX3N0cmVhbV9jYXB0dXJlX3RzKHJlcSwgZW50cnktPnRzX29mZnNldCk7CisJ CWlmIChyZXQpCisJCQlnb3RvIGVycl91bnJlZjsKKwl9CisKKworCWk5MTVfdm1hX21vdmVfdG9f YWN0aXZlKGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1ZltpZF0udm1hLCByZXEsCiAJ CQkJCUVYRUNfT0JKRUNUX1dSSVRFKTsKIAlyZXR1cm47Ci1vdXQ6Ci0Jc3Bpbl9sb2NrKCZkZXZf cHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7CisKK2Vycl91bnJlZjoKKwlpOTE1X2dlbV9yZXF1 ZXN0X3B1dChlbnRyeS0+cmVxdWVzdCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2Rl X2xpc3RfbG9ja1tpZF0pOwogCWxpc3RfZGVsKCZlbnRyeS0+bGluayk7Ci0Jc3Bpbl91bmxvY2so JmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKLW91dF9mcmVlOgorCXNwaW5fdW5sb2Nr KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9ja1tpZF0pOworZXJyX2ZyZWU6CiAJa2ZyZWUo ZW50cnkpOwogfQogCi1zdGF0aWMgaW50IGk5MTVfb2FfcmNzX3dhaXRfZ3B1KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyBpbnQgaTkxNV9yaW5nX3N0cmVhbV93YWl0 X2dwdShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJZW51bSBpbnRlbF9l bmdpbmVfaWQgaWQpCiB7CiAJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgKmxhc3RfZW50 cnkgPSBOVUxMOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxID0gTlVMTDsKQEAg LTUzNCwxNCArNjY0LDE0IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9yY3Nfd2FpdF9ncHUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCSAqIGltcGxpY2l0bHkgd2FpdCBmb3IgdGhl IHByaW9yIHN1Ym1pdHRlZCByZXF1ZXN0cy4gVGhlIHJlZmNvdW50CiAJICogb2YgdGhlIHJlcXVl c3RzIGlzIG5vdCBkZWNyZW1lbnRlZCBoZXJlLgogCSAqLwotCXNwaW5fbG9jaygmZGV2X3ByaXYt PnBlcmYubm9kZV9saXN0X2xvY2spOworCXNwaW5fbG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9s aXN0X2xvY2tbaWRdKTsKIAotCWlmICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPnBlcmYubm9kZV9s aXN0KSkgewotCQlsYXN0X2VudHJ5ID0gbGlzdF9sYXN0X2VudHJ5KCZkZXZfcHJpdi0+cGVyZi5u b2RlX2xpc3QsCisJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RbaWRd KSkgeworCQlsYXN0X2VudHJ5ID0gbGlzdF9sYXN0X2VudHJ5KCZkZXZfcHJpdi0+cGVyZi5ub2Rl X2xpc3RbaWRdLAogCQkJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUsIGxpbmspOwogCQly ZXEgPSBsYXN0X2VudHJ5LT5yZXF1ZXN0OwogCX0KLQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBl cmYubm9kZV9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xp c3RfbG9ja1tpZF0pOwogCiAJaWYgKCFyZXEpCiAJCXJldHVybiAwOwpAQCAtNTU0LDE3ICs2ODQs MTggQEAgc3RhdGljIGludCBpOTE1X29hX3Jjc193YWl0X2dwdShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGk5MTVfb2FfcmNz X2ZyZWVfcmVxdWVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGlj IHZvaWQgaTkxNV9yaW5nX3N0cmVhbV9mcmVlX3JlcXVlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKKwkJCQllbnVtIGludGVsX2VuZ2luZV9pZCBpZCkKIHsKIAlzdHJ1Y3Qg aTkxNV9wZXJmX2NzX2RhdGFfbm9kZSAqZW50cnksICpuZXh0OwogCiAJbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlCi0JCShlbnRyeSwgbmV4dCwgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCwgbGlu aykgeworCQkoZW50cnksIG5leHQsICZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RbaWRdLCBsaW5r KSB7CiAJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KGVudHJ5LT5yZXF1ZXN0KTsKIAotCQlzcGluX2xv Y2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkZXZfcHJp di0+cGVyZi5ub2RlX2xpc3RfbG9ja1tpZF0pOwogCQlsaXN0X2RlbCgmZW50cnktPmxpbmspOwot CQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2spOworCQlzcGluX3Vu bG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2tbaWRdKTsKIAkJa2ZyZWUoZW50cnkp OwogCX0KIH0KQEAgLTcwOCwxMSArODM5LDExIEBAIHN0YXRpYyBpbnQgYXBwZW5kX29hX3N0YXR1 cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogfQogCiAvKioKLSAqIENvcGllcyBz aW5nbGUgT0EgcmVwb3J0IGludG8gdXNlcnNwYWNlIHJlYWQoKSBidWZmZXIuCisgKiBDb3BpZXMg c2luZ2xlIHNhbXBsZSBpbnRvIHVzZXJzcGFjZSByZWFkKCkgYnVmZmVyLgogICovCi1zdGF0aWMg aW50IGFwcGVuZF9vYV9zYW1wbGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKK3N0 YXRpYyBpbnQgYXBwZW5kX3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAog CQkJICAgIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKLQkJCSAgICBzaXplX3QgKm9m ZnNldCwgc3RydWN0IG9hX3NhbXBsZV9kYXRhICpkYXRhKQorCQkJICAgIHNpemVfdCAqb2Zmc2V0 LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAlpbnQgcmVwb3J0X3NpemUgPSBkZXZfcHJp di0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemU7CkBAIC03NTUsNiArODg2LDEyIEBAIHN0 YXRpYyBpbnQgYXBwZW5kX29hX3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt LAogCQlidWYgKz0gNDsKIAl9CiAKKwlpZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExFX1RTKSB7CisJ CWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmZGF0YS0+dHMsIEk5MTVfUEVSRl9UU19TQU1QTEVfU0la RSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnVmICs9IEk5MTVfUEVSRl9UU19TQU1QTEVfU0la RTsKKwl9CisKIAlpZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkgewogCQlpZiAo Y29weV90b191c2VyKGJ1ZiwgZGF0YS0+cmVwb3J0LCByZXBvcnRfc2l6ZSkpCiAJCQlyZXR1cm4g LUVGQVVMVDsKQEAgLTc3Miw3ICs5MDksNyBAQCBzdGF0aWMgaW50IGFwcGVuZF9vYV9idWZmZXJf c2FtcGxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiB7CiAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAl1MzIgc2FtcGxlX2Zs YWdzID0gc3RyZWFtLT5zYW1wbGVfZmxhZ3M7Ci0Jc3RydWN0IG9hX3NhbXBsZV9kYXRhIGRhdGEg PSB7IDAgfTsKKwlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YSA9IHsgMCB9OwogCiAJaWYgKHNhbXBs ZV9mbGFncyAmIFNBTVBMRV9PQV9TT1VSQ0VfSU5GTykgewogCQllbnVtIGRybV9pOTE1X3BlcmZf b2FfZXZlbnRfc291cmNlIHNvdXJjZTsKQEAgLTgwMywxMCArOTQwLDE1IEBAIHN0YXRpYyBpbnQg YXBwZW5kX29hX2J1ZmZlcl9zYW1wbGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwK IAlpZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExFX1RBRykKIAkJZGF0YS50YWcgPSBkZXZfcHJpdi0+ cGVyZi5sYXN0X3RhZzsKIAorCS8qIERlcml2ZSB0aW1lc3RhbXAgZnJvbSBPQSByZXBvcnQsIGFm dGVyIHNjYWxpbmcgd2l0aCB0aGUgdHMgYmFzZSAqLworI3dhcm5pbmcgIkZJWE1FOiBhcHBlbmRf b2FfYnVmZmVyX3NhbXBsZTogZGVyaXZlIHRoZSB0aW1lc3RhbXAgZnJvbSBPQSByZXBvcnQiCisJ aWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9UUykKKwkJZGF0YS50cyA9IDA7CisKIAlpZiAoc2Ft cGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkKIAkJZGF0YS5yZXBvcnQgPSByZXBvcnQ7CiAK LQlyZXR1cm4gYXBwZW5kX29hX3NhbXBsZShzdHJlYW0sIGJ1ZiwgY291bnQsIG9mZnNldCwgJmRh dGEpOworCXJldHVybiBhcHBlbmRfc2FtcGxlKHN0cmVhbSwgYnVmLCBjb3VudCwgb2Zmc2V0LCAm ZGF0YSk7CiB9CiAKIC8qKgpAQCAtOTI3LDcgKzEwNjksNyBAQCBzdGF0aWMgaW50IGdlbjhfYXBw ZW5kX29hX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJICogYW4g aW52YWxpZCBJRC4gSXQgY291bGQgYmUgZ29vZCB0byBhbm5vdGF0ZSB0aGVzZQogCQkgKiByZXBv cnRzIHdpdGggYSBfQ1RYX1NXSVRDSF9BV0FZIHJlYXNvbiBsYXRlci4KIAkJICovCi0JCWlmICgh ZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbS0+Y3R4IHx8CisJCWlmICghZGV2X3By aXYtPnBlcmYuZXhjbHVzaXZlX3N0cmVhbS0+Y3R4IHx8CiAJCSAgICBkZXZfcHJpdi0+cGVyZi5v YS5zcGVjaWZpY19jdHhfaWQgPT0gY3R4X2lkIHx8CiAJCSAgICBkZXZfcHJpdi0+cGVyZi5vYS5v YV9idWZmZXIubGFzdF9jdHhfaWQgPT0gY3R4X2lkKSB7CiAKQEAgLTkzOCw3ICsxMDgwLDcgQEAg c3RhdGljIGludCBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0sCiAJCQkgKiB0aGUgc3dpdGNoLWF3YXkgcmVwb3J0cyB3aXRoIGFuIGludmFsaWQK IAkJCSAqIGNvbnRleHQgaWQgdG8gYmUgcmVjb2duaXNhYmxlIGJ5IHVzZXJzcGFjZS4KIAkJCSAq LwotCQkJaWYgKGRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0tPmN0eCAmJgorCQkJ aWYgKGRldl9wcml2LT5wZXJmLmV4Y2x1c2l2ZV9zdHJlYW0tPmN0eCAmJgogCQkJICAgIGRldl9w cml2LT5wZXJmLm9hLnNwZWNpZmljX2N0eF9pZCAhPSBjdHhfaWQpCiAJCQkJcmVwb3J0MzJbMl0g PSAweGZmZmZmZmZmOwogCkBAIC0xMjg0LDMyICsxNDI2LDQwIEBAIHN0YXRpYyBpbnQgZ2VuN19v YV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiB9CiAKIC8qKgotICogQ29w aWVzIGEgY29tbWFuZCBzdHJlYW0gT0EgcmVwb3J0IGludG8gdXNlcnNwYWNlIHJlYWQoKSBidWZm ZXIsIHdoaWxlIGFsc28KLSAqIGZvcndhcmRpbmcgdGhlIHBlcmlvZGljIE9BIHJlcG9ydHMgd2l0 aCB0aW1lc3RhbXAgbG93ZXIgdGhhbiBDUyByZXBvcnQuCisgKiBDb3B5IG9uZSBjb21tYW5kIHN0 cmVhbSByZXBvcnQgaW50byB1c2Vyc3BhY2UgcmVhZCgpIGJ1ZmZlci4KKyAqIEZvciBPQSByZXBv cnRzLCBhbHNvIGZvcndhcmQgdGhlIHBlcmlvZGljIE9BIHJlcG9ydHMgd2l0aCB0aW1lc3RhbXAK KyAqIGxvd2VyIHRoYW4gY3VycmVudCBDUyBPQSBzYW1wbGUuCiAgKgogICogTkI6IHNvbWUgZGF0 YSBtYXkgYmUgc3VjY2Vzc2Z1bGx5IGNvcGllZCB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlcgogICog ZXZlbiBpZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgYW5kIHRoaXMgaXMgcmVmbGVjdGVkIGluIHRo ZQogICogdXBkYXRlZCBAcmVhZF9zdGF0ZS4KICAqLwotc3RhdGljIGludCBhcHBlbmRfb2FfcmNz X3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorc3RhdGljIGludCBhcHBl bmRfb25lX2NzX3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJCWNo YXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKIAkJCQlzaXplX3QgKm9mZnNldCwKIAkJCQlz dHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9kZSAqbm9kZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OwotCXN0cnVjdCBvYV9zYW1wbGVf ZGF0YSBkYXRhID0geyAwIH07Ci0JY29uc3QgdTggKnJlcG9ydCA9IGRldl9wcml2LT5wZXJmLmNv bW1hbmRfc3RyZWFtX2J1Zi5hZGRyICsKLQkJCQlub2RlLT5vZmZzZXQ7CisJZW51bSBpbnRlbF9l bmdpbmVfaWQgaWQgPSBzdHJlYW0tPmVuZ2luZTsKKwlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YSA9 IHsgMCB9OwogCXUzMiBzYW1wbGVfZmxhZ3MgPSBzdHJlYW0tPnNhbXBsZV9mbGFnczsKLQl1MzIg cmVwb3J0X3RzOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKLQkvKiBGaXJzdCwgYXBwZW5k IHRoZSBwZXJpb2RpYyBPQSBzYW1wbGVzIGhhdmluZyBsb3dlciB0aW1lc3RhbXBzICovCi0JcmVw b3J0X3RzID0gKih1MzIgKikocmVwb3J0ICsgNCk7Ci0JcmV0ID0gZGV2X3ByaXYtPnBlcmYub2Eu b3BzLnJlYWQoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQsCi0JCQkJCXJlcG9ydF90cywgVTMy X01BWCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpZiAoc2FtcGxlX2ZsYWdzICYgU0FN UExFX09BX1JFUE9SVCkgeworCQljb25zdCB1OCAqcmVwb3J0ID0gZGV2X3ByaXYtPnBlcmYuY29t bWFuZF9zdHJlYW1fYnVmW2lkXS5hZGRyICsKKwkJCQkgICBub2RlLT5vYV9vZmZzZXQ7CisJCXUz MiBzYW1wbGVfdHMgPSAqKHUzMiAqKShyZXBvcnQgKyA0KTsKKworCQlkYXRhLnJlcG9ydCA9IHJl cG9ydDsKKworCQkvKiBGaXJzdCwgYXBwZW5kIHRoZSBwZXJpb2RpYyBPQSBzYW1wbGVzIGhhdmlu ZyBsb3dlcgorCQkgKiB0aW1lc3RhbXAgdmFsdWVzCisJCSAqLworCQlyZXQgPSBkZXZfcHJpdi0+ cGVyZi5vYS5vcHMucmVhZChzdHJlYW0sIGJ1ZiwgY291bnQsIG9mZnNldCwKKwkJCQkJCXNhbXBs ZV90cywgVTMyX01BWCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KIAogCWlmIChz YW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfU09VUkNFX0lORk8pCiAJCWRhdGEuc291cmNlID0gSTkx NV9QRVJGX09BX0VWRU5UX1NPVVJDRV9SQ1M7CkBAIC0xMzI5LDI1ICsxNDc5LDM4IEBAIHN0YXRp YyBpbnQgYXBwZW5kX29hX3Jjc19zYW1wbGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSwKIAkJZGV2X3ByaXYtPnBlcmYubGFzdF90YWcgPSBub2RlLT50YWc7CiAJfQogCi0JaWYgKHNh bXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpCi0JCWRhdGEucmVwb3J0ID0gcmVwb3J0Owor CWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfVFMpIHsKKwkJLyogRm9yIFJDUywgaWYgT0Egc2Ft cGxlcyBhcmUgYWxzbyBiZWluZyBjb2xsZWN0ZWQsIGRlcml2ZSB0aGUKKwkJICogdGltZXN0YW1w IGZyb20gT0EgcmVwb3J0LCBhZnRlciBzY2FsaW5nIHdpdGggdGhlIFRTIGJhc2UuCisJCSAqIEVs c2UsIGZvcndhcmQgdGhlIHRpbWVzdGFtcCBjb2xsZWN0ZWQgdmlhIGNvbW1hbmQgc3RyZWFtLgor CQkgKi8KKyN3YXJuaW5nICJGSVhNRTogYXBwZW5kX29uZV9jc19zYW1wbGU6IGRlcml2ZSB0aGUg dGltZXN0YW1wIGZyb20gT0EgcmVwb3J0IgorCQlpZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExFX09B X1JFUE9SVCkKKwkJCWRhdGEudHMgPSAwOworCQllbHNlCisJCQlkYXRhLnRzID0gKih1NjQgKikK KwkJCQkoZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5hZGRyICsKKwkJCQkJ bm9kZS0+dHNfb2Zmc2V0KTsKKwl9CisKIAotCXJldHVybiBhcHBlbmRfb2Ffc2FtcGxlKHN0cmVh bSwgYnVmLCBjb3VudCwgb2Zmc2V0LCAmZGF0YSk7CisJcmV0dXJuIGFwcGVuZF9zYW1wbGUoc3Ry ZWFtLCBidWYsIGNvdW50LCBvZmZzZXQsICZkYXRhKTsKIH0KIAogLyoqCi0gKiBDb3BpZXMgYWxs IE9BIHJlcG9ydHMgaW50byB1c2Vyc3BhY2UgcmVhZCgpIGJ1ZmZlci4gVGhpcyBpbmNsdWRlcyBj b21tYW5kCi0gKiBzdHJlYW0gYXMgd2VsbCBhcyBwZXJpb2RpYyBPQSByZXBvcnRzLgorICogQ29w aWVzIGFsbCBzYW1wbGVzIGludG8gdXNlcnNwYWNlIHJlYWQoKSBidWZmZXIuIFRoaXMgaW5jbHVk ZXMgY29tbWFuZAorICogc3RyZWFtIHNhbXBsZXMgYXMgd2VsbCBhcyBwZXJpb2RpYyBPQSByZXBv cnRzIChpZiBlbmFibGVkKS4KICAqCiAgKiBOQjogc29tZSBkYXRhIG1heSBiZSBzdWNjZXNzZnVs bHkgY29waWVkIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyCiAgKiBldmVuIGlmIGFuIGVycm9yIGlz IHJldHVybmVkLCBhbmQgdGhpcyBpcyByZWZsZWN0ZWQgaW4gdGhlCiAgKiB1cGRhdGVkIEByZWFk X3N0YXRlLgogICovCi1zdGF0aWMgaW50IG9hX3Jjc19hcHBlbmRfcmVwb3J0cyhzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorc3RhdGljIGludCBhcHBlbmRfY29tbWFuZF9zdHJlYW1f c2FtcGxlcyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJCWNoYXIgX191c2Vy ICpidWYsIHNpemVfdCBjb3VudCwgc2l6ZV90ICpvZmZzZXQpCiB7CiAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAlzdHJ1Y3QgaTkxNV9wZXJm X2NzX2RhdGFfbm9kZSAqZW50cnksICpuZXh0OworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkID0g c3RyZWFtLT5lbmdpbmU7CiAJTElTVF9IRUFEKGZyZWVfbGlzdCk7CiAJaW50IHJldCA9IDA7CiAj aWZuZGVmIENNRF9TVFJFQU1fQlVGX09WRVJGTE9XX0FMTE9XRUQKQEAgLTEzNjQsMjQgKzE1Mjcs MjQgQEAgc3RhdGljIGludCBvYV9yY3NfYXBwZW5kX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9z dHJlYW0gKnN0cmVhbSwKIAkJCQl+STkxNV9QRVJGX0NNRF9TVFJFQU1fQlVGX1NUQVRVU19PVkVS RkxPVzsKIAl9CiAjZW5kaWYKLQlzcGluX2xvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9s b2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0KSkgewotCQlz cGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2spOworCXNwaW5fbG9jaygm ZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2tbaWRdKTsKKwlpZiAobGlzdF9lbXB0eSgmZGV2 X3ByaXYtPnBlcmYubm9kZV9saXN0W2lkXSkpIHsKKwkJc3Bpbl91bmxvY2soJmRldl9wcml2LT5w ZXJmLm5vZGVfbGlzdF9sb2NrW2lkXSk7CiAJCWdvdG8gcGVuZGluZ19wZXJpb2RpYzsKIAl9CiAJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LAotCQkJCSAmZGV2X3ByaXYtPnBl cmYubm9kZV9saXN0LCBsaW5rKSB7CisJCQkJICZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RbaWRd LCBsaW5rKSB7CiAJCWlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQoZW50cnktPnJlcXVl c3QpKQogCQkJYnJlYWs7CiAJCWxpc3RfbW92ZV90YWlsKCZlbnRyeS0+bGluaywgJmZyZWVfbGlz dCk7CiAJfQotCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7CisJ c3Bpbl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrW2lkXSk7CiAKIAlpZiAo bGlzdF9lbXB0eSgmZnJlZV9saXN0KSkKIAkJZ290byBwZW5kaW5nX3BlcmlvZGljOwogCiAJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmZnJlZV9saXN0LCBsaW5rKSB7Ci0J CXJldCA9IGFwcGVuZF9vYV9yY3Nfc2FtcGxlKHN0cmVhbSwgYnVmLCBjb3VudCwgb2Zmc2V0LCBl bnRyeSk7CisJCXJldCA9IGFwcGVuZF9vbmVfY3Nfc2FtcGxlKHN0cmVhbSwgYnVmLCBjb3VudCwg b2Zmc2V0LCBlbnRyeSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIApAQCAtMTM5MSwxNCArMTU1 NCwxNSBAQCBzdGF0aWMgaW50IG9hX3Jjc19hcHBlbmRfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtLAogCX0KIAogCS8qIERvbid0IGRpc2NhcmQgcmVtYWluaW5nIGVudHJp ZXMsIGtlZXAgdGhlbSBmb3IgbmV4dCByZWFkICovCi0Jc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cGVy Zi5ub2RlX2xpc3RfbG9jayk7Ci0JbGlzdF9zcGxpY2UoJmZyZWVfbGlzdCwgJmRldl9wcml2LT5w ZXJmLm5vZGVfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9s b2NrKTsKKwlzcGluX2xvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrW2lkXSk7CisJ bGlzdF9zcGxpY2UoJmZyZWVfbGlzdCwgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdFtpZF0pOwor CXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9ja1tpZF0pOwogCiAJcmV0 dXJuIHJldDsKIAogcGVuZGluZ19wZXJpb2RpYzoKLQlpZiAoIWRldl9wcml2LT5wZXJmLm9hLm5f cGVuZGluZ19wZXJpb2RpY19zYW1wbGVzKQorCWlmICghKChzdHJlYW0tPnNhbXBsZV9mbGFncyAm IFNBTVBMRV9PQV9SRVBPUlQpICYmCisJCQlkZXZfcHJpdi0+cGVyZi5vYS5uX3BlbmRpbmdfcGVy aW9kaWNfc2FtcGxlcykpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gZGV2X3ByaXYtPnBlcmYub2Eu b3BzLnJlYWQoc3RyZWFtLCBidWYsIGNvdW50LCBvZmZzZXQsCkBAIC0xNDI3LDE1ICsxNTkxLDE2 IEBAIHN0YXRpYyBlbnVtIGNzX2J1Zl9kYXRhX3N0YXRlIGNvbW1hbmRfc3RyZWFtX2J1Zl9zdGF0 ZSgKIAkJCQlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogewogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJZW51bSBpbnRlbF9l bmdpbmVfaWQgaWQgPSBzdHJlYW0tPmVuZ2luZTsKIAlzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFf bm9kZSAqZW50cnkgPSBOVUxMOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVz dCA9IE5VTEw7CiAKLQlzcGluX2xvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsK LQllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmZGV2X3ByaXYtPnBlcmYubm9kZV9s aXN0LAorCXNwaW5fbG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2tbaWRdKTsKKwll bnRyeSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0 W2lkXSwKIAkJCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlLCBsaW5rKTsKIAlpZiAoZW50 cnkpCiAJCXJlcXVlc3QgPSBlbnRyeS0+cmVxdWVzdDsKLQlzcGluX3VubG9jaygmZGV2X3ByaXYt PnBlcmYubm9kZV9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2Rl X2xpc3RfbG9ja1tpZF0pOwogCiAJaWYgKCFlbnRyeSkKIAkJcmV0dXJuIENTX0JVRl9FTVBUWTsK QEAgLTE0NTMsMjMgKzE2MTgsMjMgQEAgc3RhdGljIGVudW0gY3NfYnVmX2RhdGFfc3RhdGUgY29t bWFuZF9zdHJlYW1fYnVmX3N0YXRlKAogc3RhdGljIGJvb2wgc3RyZWFtX2hhdmVfZGF0YV9fdW5s b2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIHsKIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OwotCWVudW0gY3NfYnVmX2Rh dGFfc3RhdGUgY3NfYnVmX3N0YXRlOwotCXUzMiBudW1fc2FtcGxlcywgbGFzdF90cyA9IDA7Ci0K LQkvKiBOb3RlOiBvYV9idWZmZXJfbnVtX3NhbXBsZXMoKSBpcyBvayB0byBydW4gdW5sb2NrZWQg YXMgaXQganVzdAotCSAqIHBlcmZvcm1zIG1taW8gcmVhZHMgb2YgdGhlIE9BIGJ1ZmZlciBoZWFk ICsgdGFpbCBwb2ludGVycyBhbmQKLQkgKiBpdCdzIGFzc3VtZWQgd2UncmUgaGFuZGxpbmcgc29t ZSBvcGVyYXRpb24gdGhhdCBpbXBsaWVzIHRoZSBzdHJlYW0KLQkgKiBjYW4ndCBiZSBkZXN0cm95 ZWQgdW50aWwgY29tcGxldGlvbiAoc3VjaCBhcyBhIHJlYWQoKSkgdGhhdCBlbnN1cmVzCi0JICog dGhlIGRldmljZSArIE9BIGJ1ZmZlciBjYW4ndCBkaXNhcHBlYXIKLQkgKi8KLQlkZXZfcHJpdi0+ cGVyZi5vYS5uX3BlbmRpbmdfcGVyaW9kaWNfc2FtcGxlcyA9IDA7Ci0JZGV2X3ByaXYtPnBlcmYu b2EucGVuZGluZ19wZXJpb2RpY190cyA9IDA7Ci0JbnVtX3NhbXBsZXMgPSBkZXZfcHJpdi0+cGVy Zi5vYS5vcHMub2FfYnVmZmVyX251bV9zYW1wbGVzKGRldl9wcml2LAotCQkJCQkJCQkmbGFzdF90 cyk7Ci0JaWYgKHN0cmVhbS0+Y3NfbW9kZSkKKwllbnVtIGNzX2J1Zl9kYXRhX3N0YXRlIGNzX2J1 Zl9zdGF0ZSA9IENTX0JVRl9FTVBUWTsKKwl1MzIgbnVtX3NhbXBsZXMgPSAwLCBsYXN0X3RzID0g MDsKKworCWlmIChzdHJlYW0tPnNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpIHsKKwkJ LyogTm90ZTogb2FfYnVmZmVyX251bV9zYW1wbGVzKCkgaXMgb2sgdG8gcnVuIHVubG9ja2VkIGFz IGl0CisJCSAqIGp1c3QgcGVyZm9ybXMgbW1pbyByZWFkcyBvZiB0aGUgT0EgYnVmZmVyIGhlYWQg KyB0YWlsCisJCSAqIHBvaW50ZXJzIGFuZCBpdCdzIGFzc3VtZWQgd2UncmUgaGFuZGxpbmcgc29t ZSBvcGVyYXRpb24gdGhhdAorCQkgKiBpbXBsaWVzIHRoZSBzdHJlYW0gY2FuJ3QgYmUgZGVzdHJv eWVkIHVudGlsIGNvbXBsZXRpb24gKHN1Y2gKKwkJICogYXMgYSByZWFkKCkpIHRoYXQgZW5zdXJl cyB0aGUgZGV2aWNlICsgT0EgYnVmZmVyIGNhbid0CisJCSAqIGRpc2FwcGVhcgorCQkgKi8KKwkJ ZGV2X3ByaXYtPnBlcmYub2Eubl9wZW5kaW5nX3BlcmlvZGljX3NhbXBsZXMgPSAwOworCQlkZXZf cHJpdi0+cGVyZi5vYS5wZW5kaW5nX3BlcmlvZGljX3RzID0gMDsKKwkJbnVtX3NhbXBsZXMgPSBk ZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfYnVmZmVyX251bV9zYW1wbGVzKAorCQkJCQkJCWRldl9w cml2LCAmbGFzdF90cyk7CisJfSBlbHNlIGlmIChzdHJlYW0tPmNzX21vZGUpCiAJCWNzX2J1Zl9z dGF0ZSA9IGNvbW1hbmRfc3RyZWFtX2J1Zl9zdGF0ZShzdHJlYW0pOwotCWVsc2UKLQkJY3NfYnVm X3N0YXRlID0gQ1NfQlVGX0VNUFRZOwogCiAJLyoKIAkgKiBOb3RlOiBXZSBjYW4gc2FmZWx5IGZv cndhcmQgdGhlIHBlcmlvZGljIE9BIHNhbXBsZXMgaW4gdGhlIGNhc2Ugd2UKQEAgLTE0ODEsOSAr MTY0NiwxMyBAQCBzdGF0aWMgYm9vbCBzdHJlYW1faGF2ZV9kYXRhX191bmxvY2tlZChzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCSAqLwogCXN3aXRjaCAoY3NfYnVmX3N0YXRlKSB7 CiAJY2FzZSBDU19CVUZfRU1QVFk6Ci0JCWRldl9wcml2LT5wZXJmLm9hLm5fcGVuZGluZ19wZXJp b2RpY19zYW1wbGVzID0gbnVtX3NhbXBsZXM7Ci0JCWRldl9wcml2LT5wZXJmLm9hLnBlbmRpbmdf cGVyaW9kaWNfdHMgPSBsYXN0X3RzOwotCQlyZXR1cm4gKG51bV9zYW1wbGVzICE9IDApOworCQlp ZiAoc3RyZWFtLT5zYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKSB7CisJCQlkZXZfcHJp di0+cGVyZi5vYS5uX3BlbmRpbmdfcGVyaW9kaWNfc2FtcGxlcyA9CisJCQkJCQkJCW51bV9zYW1w bGVzOworCQkJZGV2X3ByaXYtPnBlcmYub2EucGVuZGluZ19wZXJpb2RpY190cyA9IGxhc3RfdHM7 CisJCQlyZXR1cm4gKG51bV9zYW1wbGVzICE9IDApOworCQl9IGVsc2UKKwkJCXJldHVybiBmYWxz ZTsKIAogCWNhc2UgQ1NfQlVGX0hBVkVfREFUQToKIAkJcmV0dXJuIHRydWU7CkBAIC0xNDk0LDkg KzE2NjMsMTAgQEAgc3RhdGljIGJvb2wgc3RyZWFtX2hhdmVfZGF0YV9fdW5sb2NrZWQoc3RydWN0 IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9vYV93 YWl0X3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCitzdGF0aWMgaW50 IGk5MTVfcmluZ19zdHJlYW1fd2FpdF91bmxvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAq c3RyZWFtKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ ZGV2X3ByaXY7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQgPSBzdHJlYW0tPmVuZ2luZTsKIAlp bnQgcmV0OwogCiAJLyogV2Ugd291bGQgd2FpdCBpbmRlZmluaXRseSBpZiBwZXJpb2RpYyBzYW1w bGluZyBpcyBub3QgZW5hYmxlZCAqLwpAQCAtMTUwNCwyNSArMTY3NCwyNSBAQCBzdGF0aWMgaW50 IGk5MTVfb2Ffd2FpdF91bmxvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQog CQlyZXR1cm4gLUVJTzsKIAogCWlmIChzdHJlYW0tPmNzX21vZGUpIHsKLQkJcmV0ID0gaTkxNV9v YV9yY3Nfd2FpdF9ncHUoZGV2X3ByaXYpOworCQlyZXQgPSBpOTE1X3Jpbmdfc3RyZWFtX3dhaXRf Z3B1KGRldl9wcml2LCBpZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCXJl dHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSwK KwlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldl9wcml2LT5wZXJmLnBvbGxfd3Fb aWRdLAogCQkJCQlzdHJlYW1faGF2ZV9kYXRhX191bmxvY2tlZChzdHJlYW0pKTsKIH0KIAotc3Rh dGljIHZvaWQgaTkxNV9vYV9wb2xsX3dhaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSwKK3N0YXRpYyB2b2lkIGk5MTVfcmluZ19zdHJlYW1fcG9sbF93YWl0KHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpzdHJlYW0sCiAJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICAg IHBvbGxfdGFibGUgKndhaXQpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAotCXBvbGxfd2FpdChmaWxlLCAmZGV2X3ByaXYtPnBlcmYu b2EucG9sbF93cSwgd2FpdCk7CisJcG9sbF93YWl0KGZpbGUsICZkZXZfcHJpdi0+cGVyZi5wb2xs X3dxW3N0cmVhbS0+ZW5naW5lXSwgd2FpdCk7CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9vYV9yZWFk KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCitzdGF0aWMgaW50IGk5MTVfcmluZ19z dHJlYW1fcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJY2hhciBfX3Vz ZXIgKmJ1ZiwKIAkJCXNpemVfdCBjb3VudCwKIAkJCXNpemVfdCAqb2Zmc2V0KQpAQCAtMTUzMCwy NCArMTcwMCwyNyBAQCBzdGF0aWMgaW50IGk5MTVfb2FfcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtLAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVh bS0+ZGV2X3ByaXY7CiAKIAlpZiAoc3RyZWFtLT5jc19tb2RlKQotCQlyZXR1cm4gb2FfcmNzX2Fw cGVuZF9yZXBvcnRzKHN0cmVhbSwgYnVmLCBjb3VudCwgb2Zmc2V0KTsKLQllbHNlCisJCXJldHVy biBhcHBlbmRfY29tbWFuZF9zdHJlYW1fc2FtcGxlcyhzdHJlYW0sIGJ1ZiwgY291bnQsIG9mZnNl dCk7CisJZWxzZSBpZiAoc3RyZWFtLT5zYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKQog CQlyZXR1cm4gZGV2X3ByaXYtPnBlcmYub2Eub3BzLnJlYWQoc3RyZWFtLCBidWYsIGNvdW50LCBv ZmZzZXQsCiAJCQkJCQlVMzJfTUFYLCBVMzJfTUFYKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFM OwogfQogCiBzdGF0aWMgdm9pZAotZnJlZV9jb21tYW5kX3N0cmVhbV9idWYoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQorZnJlZV9jb21tYW5kX3N0cmVhbV9idWYoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkKQog ewogCW11dGV4X2xvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKIAotCWk5MTVfZ2Vt X29iamVjdF91bnBpbl9tYXAoZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmLm9iaik7 Ci0JX19pOTE1X3ZtYV91bnBpbihkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYudm1h KTsKLQlpOTE1X2dlbV9vYmplY3RfcHV0KGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1 Zi5vYmopOworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoZGV2X3ByaXYtPnBlcmYuY29tbWFu ZF9zdHJlYW1fYnVmW2lkXS5vYmopOworCV9faTkxNV92bWFfdW5waW4oZGV2X3ByaXYtPnBlcmYu Y29tbWFuZF9zdHJlYW1fYnVmW2lkXS52bWEpOworCWk5MTVfZ2VtX29iamVjdF9wdXQoZGV2X3By aXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5vYmopOwogCi0JZGV2X3ByaXYtPnBlcmYu Y29tbWFuZF9zdHJlYW1fYnVmLm9iaiA9IE5VTEw7Ci0JZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9z dHJlYW1fYnVmLnZtYSA9IE5VTEw7Ci0JZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVm LmFkZHIgPSBOVUxMOworCWRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1ZltpZF0ub2Jq ID0gTlVMTDsKKwlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWZbaWRdLnZtYSA9IE5V TEw7CisJZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5hZGRyID0gTlVMTDsK IAogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogfQpAQCAtMTU2 OSwxNiArMTc0MiwxMyBAQCBmcmVlX29hX2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKIAltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogfQogCi1zdGF0 aWMgdm9pZCBpOTE1X29hX3N0cmVhbV9kZXN0cm95KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpz dHJlYW0pCitzdGF0aWMgdm9pZCBpOTE1X3Jpbmdfc3RyZWFtX2Rlc3Ryb3koc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBzdHJlYW0tPmRldl9wcml2OwogCi0JQlVHX09OKHN0cmVhbSAhPSBkZXZfcHJpdi0+cGVy Zi5vYS5leGNsdXNpdmVfc3RyZWFtKTsKLQotCWlmIChzdHJlYW0tPmNzX21vZGUpCi0JCWZyZWVf Y29tbWFuZF9zdHJlYW1fYnVmKGRldl9wcml2KTsKKwlCVUdfT04oc3RyZWFtICE9IGRldl9wcml2 LT5wZXJmLmV4Y2x1c2l2ZV9zdHJlYW0pOwogCi0JaWYgKGRldl9wcml2LT5wZXJmLm9hLm9hX2J1 ZmZlci5vYmopIHsKKwlpZiAoc3RyZWFtLT51c2luZ19vYSkgewogCQlkZXZfcHJpdi0+cGVyZi5v YS5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0KGRldl9wcml2KTsKIAogCQlmcmVlX29hX2J1ZmZlcihk ZXZfcHJpdik7CkBAIC0xNTg3LDcgKzE3NTcsMTAgQEAgc3RhdGljIHZvaWQgaTkxNV9vYV9zdHJl YW1fZGVzdHJveShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogCQlpbnRlbF9ydW50 aW1lX3BtX3B1dChkZXZfcHJpdik7CiAJfQogCi0JZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZl X3N0cmVhbSA9IE5VTEw7CisJaWYgKHN0cmVhbS0+Y3NfbW9kZSkKKwkJZnJlZV9jb21tYW5kX3N0 cmVhbV9idWYoZGV2X3ByaXYsIHN0cmVhbS0+ZW5naW5lKTsKKworCWRldl9wcml2LT5wZXJmLmV4 Y2x1c2l2ZV9zdHJlYW0gPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBnZW43X2luaXRfb2FfYnVm ZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKQEAgLTE2MjAsOSArMTc5Myw3 IEBAIHN0YXRpYyB2b2lkIGdlbjdfaW5pdF9vYV9idWZmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogCSAqLwogCW1lbXNldChkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIu YWRkciwgMCwgU1pfMTZNKTsKIAotCS8qIE1heWJlIG1ha2UgLT5wb2xsaW4gcGVyLXN0cmVhbSBz dGF0ZSBpZiB3ZSBzdXBwb3J0IG11bHRpcGxlCi0JICogY29uY3VycmVudCBzdHJlYW1zIGluIHRo ZSBmdXR1cmUuICovCi0JYXRvbWljX3NldCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbGluLCBmYWxz ZSk7CisJYXRvbWljX3NldCgmZGV2X3ByaXYtPnBlcmYucG9sbGluW1JDU10sIGZhbHNlKTsKIH0K IAogc3RhdGljIHZvaWQgZ2VuOF9pbml0X29hX2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCkBAIC0xNjU4LDkgKzE4MjksNyBAQCBzdGF0aWMgdm9pZCBnZW44X2luaXRf b2FfYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkgKi8KIAltZW1z ZXQoZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmFkZHIsIDAsIFNaXzE2TSk7CiAKLQkvKiBN YXliZSBtYWtlIC0+cG9sbGluIHBlci1zdHJlYW0gc3RhdGUgaWYgd2Ugc3VwcG9ydCBtdWx0aXBs ZQotCSAqIGNvbmN1cnJlbnQgc3RyZWFtcyBpbiB0aGUgZnV0dXJlLiAqLwotCWF0b21pY19zZXQo JmRldl9wcml2LT5wZXJmLm9hLnBvbGxpbiwgZmFsc2UpOworCWF0b21pY19zZXQoJmRldl9wcml2 LT5wZXJmLnBvbGxpbltSQ1NdLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbnQgYWxsb2Nfb2JqKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKQEAgLTE3NDYsMzAgKzE5MTUsMzMgQEAg c3RhdGljIGludCBhbGxvY19vYV9idWZmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFsbG9jX2NvbW1hbmRfc3RyZWFtX2J1 ZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgaW50IGFsbG9jX2Nv bW1hbmRfc3RyZWFtX2J1ZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJ CWVudW0gaW50ZWxfZW5naW5lX2lkIGlkKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpibzsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKIAl1OCAqb2JqX2FkZHI7CiAJaW50IHJldDsK IAotCUJVR19PTihkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYub2JqKTsKKwlCVUdf T04oZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5vYmopOwogCiAJcmV0ID0g YWxsb2Nfb2JqKGRldl9wcml2LCAmYm8sICZ2bWEsICZvYmpfYWRkcik7CiAJaWYgKHJldCkKIAkJ cmV0dXJuIHJldDsKIAotCWRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi5vYmogPSBi bzsKLQlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYudm1hID0gdm1hOyAKLQlkZXZf cHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYuYWRkciA9IG9ial9hZGRyOwotCWlmIChXQVJO X09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3QpKSkKLQkJSU5JVF9MSVNU X0hFQUQoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCk7CisJZGV2X3ByaXYtPnBlcmYuY29tbWFu ZF9zdHJlYW1fYnVmW2lkXS5vYmogPSBibzsKKwlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVh bV9idWZbaWRdLnZtYSA9IHZtYTsgCisJZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVm W2lkXS5hZGRyID0gb2JqX2FkZHI7CisJaWYgKFdBUk5fT04oIWxpc3RfZW1wdHkoJmRldl9wcml2 LT5wZXJmLm5vZGVfbGlzdFtpZF0pKSkKKwkJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5wZXJm Lm5vZGVfbGlzdFtpZF0pOworCisJYXRvbWljX3NldCgmZGV2X3ByaXYtPnBlcmYucG9sbGluW2lk XSwgZmFsc2UpOwogCiAJRFJNX0RFQlVHX0RSSVZFUigKIAkJImNvbW1hbmQgc3RyZWFtIGJ1ZiBp bml0aWFsaXplZCwgZ3R0IG9mZnNldCA9IDB4JXgsIHZhZGRyID0gJXAiLAogCQkgKHVuc2lnbmVk IGludCkKLQkJIGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi52bWEtPm5vZGUuc3Rh cnQsCi0JCSBkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYuYWRkcik7CisJCSBkZXZf cHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWZbaWRdLnZtYS0+bm9kZS5zdGFydCwKKwkJIGRl dl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1ZltpZF0uYWRkcik7CiAKIAlyZXR1cm4gMDsK IH0KQEAgLTIwMzEsMTQgKzIyMDMsMTQgQEAgc3RhdGljIHZvaWQgZ2VuN191cGRhdGVfb2Fjb250 cm9sX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJYXNzZXJ0 X3NwaW5fbG9ja2VkKCZkZXZfcHJpdi0+cGVyZi5ob29rX2xvY2spOwogCi0JaWYgKGRldl9wcml2 LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0tPnN0YXRlICE9CisJaWYgKGRldl9wcml2LT5wZXJm LmV4Y2x1c2l2ZV9zdHJlYW0tPnN0YXRlICE9CiAJCQkJCUk5MTVfUEVSRl9TVFJFQU1fRElTQUJM RUQpIHsKIAkJdW5zaWduZWQgbG9uZyBjdHhfaWQgPSAwOwogCi0JCWlmIChkZXZfcHJpdi0+cGVy Zi5vYS5leGNsdXNpdmVfc3RyZWFtLT5jdHgpCisJCWlmIChkZXZfcHJpdi0+cGVyZi5leGNsdXNp dmVfc3RyZWFtLT5jdHgpCiAJCQljdHhfaWQgPSBkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19j dHhfaWQ7CiAKLQkJaWYgKGRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0tPmN0eCA9 PSBOVUxMIHx8IGN0eF9pZCkgeworCQlpZiAoZGV2X3ByaXYtPnBlcmYuZXhjbHVzaXZlX3N0cmVh bS0+Y3R4ID09IE5VTEwgfHwgY3R4X2lkKSB7CiAJCQlib29sIHBlcmlvZGljID0gZGV2X3ByaXYt PnBlcmYub2EucGVyaW9kaWM7CiAJCQl1MzIgcGVyaW9kX2V4cG9uZW50ID0gZGV2X3ByaXYtPnBl cmYub2EucGVyaW9kX2V4cG9uZW50OwogCQkJdTMyIHJlcG9ydF9mb3JtYXQgPSBkZXZfcHJpdi0+ cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0OwpAQCAtMjEwMywxNCArMjI3NSwxNSBAQCBzdGF0aWMg dm9pZCBnZW44X29hX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJ CQkJICAgR0VOOF9PQV9DT1VOVEVSX0VOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGk5MTVfb2Ff c3RyZWFtX2VuYWJsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQorc3RhdGljIHZv aWQgaTkxNV9yaW5nX3N0cmVhbV9lbmFibGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9w cml2OwogCi0JZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2VuYWJsZShkZXZfcHJpdik7CisJaWYg KHN0cmVhbS0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkKKwkJZGV2X3ByaXYtPnBl cmYub2Eub3BzLm9hX2VuYWJsZShkZXZfcHJpdik7CiAKLQlpZiAoZGV2X3ByaXYtPnBlcmYub2Eu cGVyaW9kaWMpCi0JCWhydGltZXJfc3RhcnQoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxfY2hlY2tf dGltZXIsCisJaWYgKHN0cmVhbS0+Y3NfbW9kZSB8fCBkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2Rp YykKKwkJaHJ0aW1lcl9zdGFydCgmZGV2X3ByaXYtPnBlcmYucG9sbF9jaGVja190aW1lciwKIAkJ CSAgICAgIG5zX3RvX2t0aW1lKFBPTExfUEVSSU9EKSwKIAkJCSAgICAgIEhSVElNRVJfTU9ERV9S RUxfUElOTkVEKTsKIH0KQEAgLTIxMjUsMTkgKzIyOTgsMjAgQEAgc3RhdGljIHZvaWQgZ2VuOF9v YV9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlJOTE1X1dSSVRF KEdFTjhfT0FDT05UUk9MLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV9vYV9zdHJlYW1fZGlz YWJsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQorc3RhdGljIHZvaWQgaTkxNV9y aW5nX3N0cmVhbV9kaXNhYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCiB7CiAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAot CWlmIChkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYykKLQkJaHJ0aW1lcl9jYW5jZWwoJmRldl9w cml2LT5wZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIpOworCWlmIChzdHJlYW0tPmNzX21vZGUgfHwg ZGV2X3ByaXYtPnBlcmYub2EucGVyaW9kaWMpCisJCWhydGltZXJfY2FuY2VsKCZkZXZfcHJpdi0+ cGVyZi5wb2xsX2NoZWNrX3RpbWVyKTsKIAogCWlmIChzdHJlYW0tPmNzX21vZGUpIHsKLQkJaTkx NV9vYV9yY3Nfd2FpdF9ncHUoZGV2X3ByaXYpOwotCQlpOTE1X29hX3Jjc19mcmVlX3JlcXVlc3Rz KGRldl9wcml2KTsKKwkJaTkxNV9yaW5nX3N0cmVhbV93YWl0X2dwdShkZXZfcHJpdiwgc3RyZWFt LT5lbmdpbmUpOworCQlpOTE1X3Jpbmdfc3RyZWFtX2ZyZWVfcmVxdWVzdHMoZGV2X3ByaXYsIHN0 cmVhbS0+ZW5naW5lKTsKIAl9CiAKLQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZGlzYWJsZShk ZXZfcHJpdik7CisJaWYgKHN0cmVhbS0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkK KwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2Rpc2FibGUoZGV2X3ByaXYpOwogfQogCiBzdGF0 aWMgdTY0IG9hX2V4cG9uZW50X3RvX25zKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgaW50IGV4cG9uZW50KQpAQCAtMjE0NywxNiArMjMyMSwxNiBAQCBzdGF0aWMgdTY0IG9hX2V4 cG9uZW50X3RvX25zKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IGV4cG9u ZW50KQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcGVyZl9zdHJlYW1fb3BzIGk5MTVf b2Ffc3RyZWFtX29wcyA9IHsKLQkuZGVzdHJveSA9IGk5MTVfb2Ffc3RyZWFtX2Rlc3Ryb3ksCi0J LmVuYWJsZSA9IGk5MTVfb2Ffc3RyZWFtX2VuYWJsZSwKLQkuZGlzYWJsZSA9IGk5MTVfb2Ffc3Ry ZWFtX2Rpc2FibGUsCi0JLndhaXRfdW5sb2NrZWQgPSBpOTE1X29hX3dhaXRfdW5sb2NrZWQsCi0J LnBvbGxfd2FpdCA9IGk5MTVfb2FfcG9sbF93YWl0LAotCS5yZWFkID0gaTkxNV9vYV9yZWFkLAot CS5jb21tYW5kX3N0cmVhbV9ob29rID0gaTkxNV9wZXJmX2NvbW1hbmRfc3RyZWFtX2hvb2tfb2Es CisJLmRlc3Ryb3kgPSBpOTE1X3Jpbmdfc3RyZWFtX2Rlc3Ryb3ksCisJLmVuYWJsZSA9IGk5MTVf cmluZ19zdHJlYW1fZW5hYmxlLAorCS5kaXNhYmxlID0gaTkxNV9yaW5nX3N0cmVhbV9kaXNhYmxl LAorCS53YWl0X3VubG9ja2VkID0gaTkxNV9yaW5nX3N0cmVhbV93YWl0X3VubG9ja2VkLAorCS5w b2xsX3dhaXQgPSBpOTE1X3Jpbmdfc3RyZWFtX3BvbGxfd2FpdCwKKwkucmVhZCA9IGk5MTVfcmlu Z19zdHJlYW1fcmVhZCwKKwkuY29tbWFuZF9zdHJlYW1faG9vayA9IGk5MTVfcmluZ19zdHJlYW1f Y3NfaG9vaywKIH07CiAKLXN0YXRpYyBpbnQgaTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorc3RhdGljIGludCBpOTE1X3Jpbmdfc3RyZWFtX2luaXQo c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5 MTVfcGVyZl9vcGVuX3BhcmFtICpwYXJhbSwKIAkJCSAgICAgICBzdHJ1Y3QgcGVyZl9vcGVuX3By b3BlcnRpZXMgKnByb3BzKQogewpAQCAtMjE2NSwxNSArMjMzOSwxNiBAQCBzdGF0aWMgaW50IGk5 MTVfb2Ffc3RyZWFtX2luaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCQkJ CSAgICAgIFNBTVBMRV9PQV9TT1VSQ0VfSU5GTyk7CiAJYm9vbCByZXF1aXJlX2NzX21vZGUgPSBw cm9wcy0+c2FtcGxlX2ZsYWdzICYgKFNBTVBMRV9QSUQgfAogCQkJCQkJICAgICAgU0FNUExFX1RB Ryk7Ci0JYm9vbCBjc19zYW1wbGVfZGF0YSA9IHByb3BzLT5zYW1wbGVfZmxhZ3MgJiBTQU1QTEVf T0FfUkVQT1JUOworCWJvb2wgY3Nfc2FtcGxlX2RhdGEgPSBwcm9wcy0+c2FtcGxlX2ZsYWdzICYg KFNBTVBMRV9PQV9SRVBPUlQgfAorCQkJCQkJCVNBTVBMRV9UUyk7CiAJaW50IHJldDsKIAogCS8q IFRvIGF2b2lkIHRoZSBjb21wbGV4aXR5IG9mIGhhdmluZyB0byBhY2N1cmF0ZWx5IGZpbHRlcgog CSAqIGNvdW50ZXIgcmVwb3J0cyBhbmQgbWFyc2hhbCB0byB0aGUgYXBwcm9wcmlhdGUgY2xpZW50 CiAJICogd2UgY3VycmVudGx5IG9ubHkgYWxsb3cgZXhjbHVzaXZlIGFjY2VzcwogCSAqLwotCWlm IChkZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNpdmVfc3RyZWFtKSB7Ci0JCURSTV9FUlJPUigiT0Eg dW5pdCBhbHJlYWR5IGluIHVzZVxuIik7CisJaWYgKGRldl9wcml2LT5wZXJmLmV4Y2x1c2l2ZV9z dHJlYW0pIHsKKwkJRFJNX0VSUk9SKCJTdHJlYW0gYWxyZWFkeSBpbiB1c2VcbiIpOwogCQlyZXR1 cm4gLUVCVVNZOwogCX0KIApAQCAtMjIyNCw2ICsyMzk5LDcgQEAgc3RhdGljIGludCBpOTE1X29h X3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQlyZXR1cm4g LUVJTlZBTDsKIAkJfQogCQlzdHJlYW0tPmVuZ2luZT0gUkNTOworCQlzdHJlYW0tPnVzaW5nX29h ID0gdHJ1ZTsKIAogCQlmb3JtYXRfc2l6ZSA9CiAJCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9mb3Jt YXRzW3Byb3BzLT5vYV9mb3JtYXRdLnNpemU7CkBAIC0yMzE2LDggKzI0OTIsMjIgQEAgc3RhdGlj IGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0s CiAJCQlyZXF1aXJlX2NzX21vZGUgPSB0cnVlOwogCX0KIAorCWlmIChwcm9wcy0+c2FtcGxlX2Zs YWdzICYgU0FNUExFX1RTKSB7CisJCXN0cmVhbS0+c2FtcGxlX2ZsYWdzIHw9IFNBTVBMRV9UUzsK KwkJc3RyZWFtLT5zYW1wbGVfc2l6ZSArPSBJOTE1X1BFUkZfVFNfU0FNUExFX1NJWkU7CisKKwkJ LyoKKwkJICogTkI6IGl0J3MgbWVhbmluZ2Z1bCB0byByZXF1ZXN0IFNBTVBMRV9UUyB3aXRoIGp1 c3QgQ1MKKwkJICogbW9kZSBvciBwZXJpb2RpYyBPQSBtb2RlIHNhbXBsaW5nIGJ1dCB3ZSBkb24n dCBhbGxvdworCQkgKiBTQU1QTEVfVFMgd2l0aG91dCBlaXRoZXIgbW9kZQorCQkgKi8KKwkJaWYg KCFyZXF1aXJlX29hX3VuaXQpCisJCQlyZXF1aXJlX2NzX21vZGUgPSB0cnVlOworCX0KKwogCWlm IChyZXF1aXJlX2NzX21vZGUgJiYgIXByb3BzLT5jc19tb2RlKSB7Ci0JCURSTV9FUlJPUigiUElE IG9yIFRBRyBzYW1wbGluZyByZXF1aXJlIGEgcmluZyB0byBiZSBzcGVjaWZpZWQiKTsKKwkJRFJN X0VSUk9SKAorCQkJIlBJRCwgVEFHIG9yIFRTIHNhbXBsaW5nIHJlcXVpcmUgYSByaW5nIHRvIGJl IHNwZWNpZmllZCIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGNzX2Vycm9yOwogCX0KQEAg LTIzMzIsMTEgKzI1MjIsMTEgQEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAKIAkJLyoKIAkJICogVGhlIG9ubHkgdGltZSB3 ZSBzaG91bGQgYWxsb3cgZW5hYmxpbmcgQ1MgbW9kZSBpZiBpdCdzIG5vdAotCQkgKiBzdHJpY3Rs eSByZXF1aXJlZCwgaXMgaWYgU0FNUExFX0NUWF9JRCBoYXMgYmVlbiByZXF1ZXN0ZWQKLQkJICog YXMgaXQncyB1c2FibGUgd2l0aCBwZXJpb2RpYyBPQSBvciBDUyBzYW1wbGluZy4KKwkJICogc3Ry aWN0bHkgcmVxdWlyZWQsIGlzIGlmIFNBTVBMRV9DVFhfSUQgIG9yIFNBTVBMRV9UUyBoYXMgYmVl bgorCQkgKiByZXF1ZXN0ZWQsIGFzIHRoZXkncmUgdXNhYmxlIHdpdGggcGVyaW9kaWMgT0Egb3Ig Q1Mgc2FtcGxpbmcuCiAJCSAqLwogCQlpZiAoIXJlcXVpcmVfY3NfbW9kZSAmJgotCQkgICAgIShw cm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX0NUWF9JRCkpIHsKKwkJICAgICEocHJvcHMtPnNh bXBsZV9mbGFncyAmIChTQU1QTEVfQ1RYX0lEfFNBTVBMRV9UUykpKSB7CiAJCQlEUk1fRVJST1Io CiAJCQkJIlJpbmcgZ2l2ZW4gd2l0aG91dCByZXF1ZXN0aW5nIGFueSBDUyBzcGVjaWZpYyBwcm9w ZXJ0eSIpOwogCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTIzNDQsNiArMjUzNCw3IEBAIHN0YXRpYyBp bnQgaTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAog CQl9CiAKIAkJc3RyZWFtLT5jc19tb2RlID0gdHJ1ZTsKKwkJc3RyZWFtLT5lbmdpbmUgPSBwcm9w cy0+ZW5naW5lOwogCiAJCWlmIChwcm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX1BJRCkgewog CQkJc3RyZWFtLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX1BJRDsKQEAgLTIzNTUsMTQgKzI1NDYs MTQgQEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3Ry ZWFtICpzdHJlYW0sCiAJCQlzdHJlYW0tPnNhbXBsZV9zaXplICs9IDQ7CiAJCX0KIAotCQlyZXQg PSBhbGxvY19jb21tYW5kX3N0cmVhbV9idWYoZGV2X3ByaXYpOworCQlyZXQgPSBhbGxvY19jb21t YW5kX3N0cmVhbV9idWYoZGV2X3ByaXYsIHN0cmVhbS0+ZW5naW5lKTsKIAkJaWYgKHJldCkKIAkJ CWdvdG8gY3NfZXJyb3I7CiAJfQogCiAJc3RyZWFtLT5vcHMgPSAmaTkxNV9vYV9zdHJlYW1fb3Bz OwogCi0JZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbSA9IHN0cmVhbTsKKwlkZXZf cHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFtID0gc3RyZWFtOwogCiAJcmV0dXJuIDA7CiAKQEAg LTIzOTgsOCArMjU4OSw4IEBAIGk5MTVfb2FfbGVnYWN5X2NvbnRleHRfcGluX25vdGlmeV9sb2Nr ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCWlmIChkZXZfcHJpdi0+cGVy Zi5vYS5vcHMudXBkYXRlX2h3X2N0eF9pZF9sb2NrZWQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0J aWYgKGRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0gJiYKLQkgICAgZGV2X3ByaXYt PnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbS0+Y3R4ID09IGN0eCkgeworCWlmIChkZXZfcHJpdi0+ cGVyZi5leGNsdXNpdmVfc3RyZWFtICYmCisJICAgIGRldl9wcml2LT5wZXJmLmV4Y2x1c2l2ZV9z dHJlYW0tPmN0eCA9PSBjdHgpIHsKIAkJc3RydWN0IGk5MTVfdm1hICp2bWEgPSBjdHgtPmVuZ2lu ZVtSQ1NdLnN0YXRlOwogCQl1MzIgY3R4X2lkID0gaTkxNV9nZ3R0X29mZnNldCh2bWEpOwogCkBA IC0yNDY4LDggKzI2NTksOCBAQCB2b2lkIGk5MTVfb2FfbGVnYWN5X2N0eF9zd2l0Y2hfbm90aWZ5 KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQogCWlmIChkZXZfcHJpdi0+cGVyZi5v YS5vcHMubGVnYWN5X2N0eF9zd2l0Y2hfdW5sb2NrZWQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0J aWYgKGRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0gJiYKLQkgICAgZGV2X3ByaXYt PnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbS0+c3RhdGUgIT0KKwlpZiAoZGV2X3ByaXYtPnBlcmYu ZXhjbHVzaXZlX3N0cmVhbSAmJgorCSAgICBkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFt LT5zdGF0ZSAhPQogCQkJCUk5MTVfUEVSRl9TVFJFQU1fRElTQUJMRUQpIHsKIAogCQkvKiBYWFg6 IFdlIGRvbid0IHRha2UgYSBsb2NrIGhlcmUgYW5kIHRoaXMgbWF5IHJ1bgpAQCAtMjYyNiwyMSAr MjgxNywxOSBAQCBzdGF0aWMgc3NpemVfdCBpOTE1X3BlcmZfcmVhZChzdHJ1Y3QgZmlsZSAqZmls ZSwKIAl9CiAKIAlpZiAocmV0ID49IDApIHsKLQkJLyogTWF5YmUgbWFrZSAtPnBvbGxpbiBwZXIt c3RyZWFtIHN0YXRlIGlmIHdlIHN1cHBvcnQgbXVsdGlwbGUKLQkJICogY29uY3VycmVudCBzdHJl YW1zIGluIHRoZSBmdXR1cmUuICovCi0JCWF0b21pY19zZXQoJmRldl9wcml2LT5wZXJmLm9hLnBv bGxpbiwgZmFsc2UpOworCQlhdG9taWNfc2V0KCZkZXZfcHJpdi0+cGVyZi5wb2xsaW5bc3RyZWFt LT5lbmdpbmVdLCBmYWxzZSk7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGVudW0g aHJ0aW1lcl9yZXN0YXJ0IG9hX3BvbGxfY2hlY2tfdGltZXJfY2Ioc3RydWN0IGhydGltZXIgKmhy dGltZXIpCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcG9sbF9jaGVja190aW1lcl9jYihz dHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKIHsKIAlzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3Ry ZWFtOwogCiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KIAkJY29udGFpbmVy X29mKGhydGltZXIsIHR5cGVvZigqZGV2X3ByaXYpLAotCQkJICAgICBwZXJmLm9hLnBvbGxfY2hl Y2tfdGltZXIpOworCQkJICAgICBwZXJmLnBvbGxfY2hlY2tfdGltZXIpOwogCiAJLyogTm8gbmVl ZCB0byBwcm90ZWN0IHRoZSBzdHJlYW1zIGxpc3QgaGVyZSwgc2luY2UgdGhlIGhydGltZXIgaXMK IAkgKiBkaXNhYmxlZCBiZWZvcmUgdGhlIHN0cmVhbSBpcyByZW1vdmVkIGZyb20gbGlzdCwgYW5k IGN1cnJlbnRseSBhCkBAIC0yNjQ5LDggKzI4MzgsOSBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jl c3RhcnQgb2FfcG9sbF9jaGVja190aW1lcl9jYihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKIAkg Ki8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0cmVhbSwgJmRldl9wcml2LT5wZXJmLnN0cmVhbXMs IGxpbmspIHsKIAkJaWYgKHN0cmVhbV9oYXZlX2RhdGFfX3VubG9ja2VkKHN0cmVhbSkpIHsKLQkJ CWF0b21pY19zZXQoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxpbiwgdHJ1ZSk7Ci0JCQl3YWtlX3Vw KCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX3dxKTsKKwkJCWF0b21pY19zZXQoJmRldl9wcml2LT5w ZXJmLnBvbGxpbltzdHJlYW0tPmVuZ2luZV0sCisJCQkJCXRydWUpOworCQkJd2FrZV91cCgmZGV2 X3ByaXYtPnBlcmYucG9sbF93cVtzdHJlYW0tPmVuZ2luZV0pOwogCQl9CiAJfQogCkBAIC0yNjc0 LDcgKzI4NjQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGk5MTVfcGVyZl9wb2xsX2xvY2tlZChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJICogdGhlIGhydGltZXIvb2FfcG9s bF9jaGVja190aW1lcl9jYiB0byBub3RpZnkgdXMgd2hlbiB0aGVyZSBhcmUKIAkgKiBzYW1wbGVz IHRvIHJlYWQuCiAJICovCi0JaWYgKGF0b21pY19yZWFkKCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xs aW4pKQorCWlmIChhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnBlcmYucG9sbGluW3N0cmVhbS0+ZW5n aW5lXSkpCiAJCWV2ZW50cyB8PSBQT0xMSU47CiAKIAlyZXR1cm4gZXZlbnRzOwpAQCAtMjg2Miw3 ICszMDUyLDcgQEAgaW50IGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAogCXN0cmVhbS0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKIAlzdHJlYW0tPmN0eCA9 IHNwZWNpZmljX2N0eDsKIAotCXJldCA9IGk5MTVfb2Ffc3RyZWFtX2luaXQoc3RyZWFtLCBwYXJh bSwgcHJvcHMpOworCXJldCA9IGk5MTVfcmluZ19zdHJlYW1faW5pdChzdHJlYW0sIHBhcmFtLCBw cm9wcyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfYWxsb2M7CiAKQEAgLTMwMDcsMjEgKzMxOTcs MTIgQEAgc3RhdGljIGludCByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAogCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9FTkdJTkU6IHsK IAkJCQl1bnNpZ25lZCBpbnQgdXNlcl9yaW5nX2lkID0KIAkJCQkJdmFsdWUgJiBJOTE1X0VYRUNf UklOR19NQVNLOwotCQkJCWVudW0gaW50ZWxfZW5naW5lX2lkIGVuZ2luZTsKIAogCQkJCWlmICh1 c2VyX3JpbmdfaWQgPiBJOTE1X1VTRVJfUklOR1MpCiAJCQkJCXJldHVybiAtRUlOVkFMOwogCi0J CQkJLyogWFhYOiBDdXJyZW50bHkgb25seSBSQ1MgaXMgc3VwcG9ydGVkLgotCQkJCSAqIFJlbW92 ZSB0aGlzIGNoZWNrIHdoZW4gc3VwcG9ydCBmb3Igb3RoZXIKLQkJCQkgKiBlbmdpbmVzIGlzIGFk ZGVkCi0JCQkJICovCi0JCQkJZW5naW5lID0gdXNlcl9yaW5nX21hcFt1c2VyX3JpbmdfaWRdOwot CQkJCWlmIChlbmdpbmUgIT0gUkNTKQotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQkJCXByb3Bz LT5jc19tb2RlID0gdHJ1ZTsKLQkJCQlwcm9wcy0+ZW5naW5lID0gZW5naW5lOworCQkJCXByb3Bz LT5lbmdpbmUgPSB1c2VyX3JpbmdfbWFwW3VzZXJfcmluZ19pZF07CiAJCQl9CiAJCQlicmVhazsK IAkJY2FzZSBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX0NUWF9JRDoKQEAgLTMwMzMsNiArMzIx NCw5IEBAIHN0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2VkKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKIAkJY2FzZSBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX1RB RzoKIAkJCXByb3BzLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX1RBRzsKIAkJCWJyZWFrOworCQlj YXNlIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfVFM6CisJCQlwcm9wcy0+c2FtcGxlX2ZsYWdz IHw9IFNBTVBMRV9UUzsKKwkJCWJyZWFrOwogCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9NQVg6 CiAJCQlCVUcoKTsKIAkJfQpAQCAtMzE4MCwyMiArMzM2NCwyNyBAQCBzdGF0aWMgc3RydWN0IGN0 bF90YWJsZSBkZXZfcm9vdFtdID0gewogCiB2b2lkIGk5MTVfcGVyZl9pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKKwlpbnQgaTsKKwogCWlmICghKElTX0hBU1dFTEwo ZGV2X3ByaXYpIHx8CiAJICAgICAgSVNfQlJPQURXRUxMKGRldl9wcml2KSB8fCBJU19DSEVSUllW SUVXKGRldl9wcml2KSB8fAogCSAgICAgIElTX1NLWUxBS0UoZGV2X3ByaXYpKSkKIAkJcmV0dXJu OwogCi0JaHJ0aW1lcl9pbml0KCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX2NoZWNrX3RpbWVyLAor CWhydGltZXJfaW5pdCgmZGV2X3ByaXYtPnBlcmYucG9sbF9jaGVja190aW1lciwKIAkJICAgICBD TE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWRldl9wcml2LT5wZXJmLm9hLnBv bGxfY2hlY2tfdGltZXIuZnVuY3Rpb24gPSBvYV9wb2xsX2NoZWNrX3RpbWVyX2NiOwotCWluaXRf d2FpdHF1ZXVlX2hlYWQoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxfd3EpOworCWRldl9wcml2LT5w ZXJmLnBvbGxfY2hlY2tfdGltZXIuZnVuY3Rpb24gPSBwb2xsX2NoZWNrX3RpbWVyX2NiOworCisJ Zm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX0VOR0lORVM7IGkrKykgeworCQlJTklUX0xJU1RfSEVB RCgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0W2ldKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmRldl9w cml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrW2ldKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2 X3ByaXYtPnBlcmYucG9sbF93cVtpXSk7CisJfQogCiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2 LT5wZXJmLnN0cmVhbXMpOwotCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xp c3QpOwogCW11dGV4X2luaXQoJmRldl9wcml2LT5wZXJmLmxvY2spOwogCW11dGV4X2luaXQoJmRl dl9wcml2LT5wZXJmLnN0cmVhbXNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5w ZXJmLmhvb2tfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlz dF9sb2NrKTsKIAogCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSkgewogCQlkZXZfcHJpdi0+cGVy Zi5vYS5vcHMuaW5pdF9vYV9idWZmZXIgPSBnZW43X2luaXRfb2FfYnVmZmVyOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmgKaW5kZXggZWYyMWQxNy4uODlhNzA3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCkBAIC00MTMsNiArNDEzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdf dmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVmaW5lICAgTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVgJ KDE8PDIxKQogI2RlZmluZSAgIE1JX0lOVkFMSURBVEVfVExCCQkoMTw8MTgpCiAjZGVmaW5lICAg TUlfRkxVU0hfRFdfT1BfU1RPUkVEVwkoMTw8MTQpCisjZGVmaW5lICAgTUlfRkxVU0hfRFdfT1Bf U1RBTVAJCSgzPDwxNCkKICNkZWZpbmUgICBNSV9GTFVTSF9EV19PUF9NQVNLCQkoMzw8MTQpCiAj ZGVmaW5lICAgTUlfRkxVU0hfRFdfTk9USUZZCQkoMTw8OCkKICNkZWZpbmUgICBNSV9JTlZBTElE QVRFX0JTRAkJKDE8PDcpCkBAIC00OTYsNiArNDk3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGk5 MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVmaW5lICAgUElQRV9DT05UUk9M X1RMQl9JTlZBTElEQVRFCQkJKDE8PDE4KQogI2RlZmluZSAgIFBJUEVfQ09OVFJPTF9NRURJQV9T VEFURV9DTEVBUgkJKDE8PDE2KQogI2RlZmluZSAgIFBJUEVfQ09OVFJPTF9RV19XUklURQkJCQko MTw8MTQpCisjZGVmaW5lICAgUElQRV9DT05UUk9MX1RJTUVTVEFNUF9XUklURQkJCSgzPDwxNCkK ICNkZWZpbmUgICBQSVBFX0NPTlRST0xfUE9TVF9TWU5DX09QX01BU0sgICAgICAgICAgICAgICAg KDM8PDE0KQogI2RlZmluZSAgIFBJUEVfQ09OVFJPTF9ERVBUSF9TVEFMTAkJCSgxPDwxMykKICNk ZWZpbmUgICBQSVBFX0NPTlRST0xfV1JJVEVfRkxVU0gJCQkoMTw8MTIpCmRpZmYgLS1naXQgYS9p bmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgK aW5kZXggMTU5MjFjNy4uMGRjYzMyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1 X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaApAQCAtMTMyNCw2ICsxMzI0 LDEyIEBAIGVudW0gZHJtX2k5MTVfcGVyZl9wcm9wZXJ0eV9pZCB7CiAJICovCiAJRFJNX0k5MTVf UEVSRl9QUk9QX1NBTVBMRV9UQUcsCiAKKwkvKioKKwkgKiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9w ZXJ0eSBzZXQgdG8gMSByZXF1ZXN0cyBpbmNsdXNpb24gb2YgdGltZXN0YW1wCisJICogaW4gdGhl IHBlcmYgc2FtcGxlIGRhdGEuCisJICovCisJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9UUywK KwogCURSTV9JOTE1X1BFUkZfUFJPUF9NQVggLyogbm9uLUFCSSAqLwogfTsKIApAQCAtMTM5Miw2 ICsxMzk4LDcgQEAgZW51bSBkcm1faTkxNV9wZXJmX3JlY29yZF90eXBlIHsKIAkgKiAgICAgeyB1 MzIgY3R4X2lkOyB9ICYmIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfQ1RYX0lECiAJICogICAg IHsgdTMyIHBpZDsgfSAmJiBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX1BJRAogCSAqICAgICB7 IHUzMiB0YWc7IH0gJiYgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9UQUcKKwkgKiAgICAgeyB1 NjQgdGltZXN0YW1wOyB9ICYmIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfVFMKIAkgKiAgICAg eyB1MzIgb2FfcmVwb3J0W107IH0gJiYgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQQogCSAq IH07CiAJICovCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==