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: Thu, 2 Jun 2016 10:48:43 +0530 Message-ID: <1464844729-2774-10-git-send-email-sourab.gupta@intel.com> References: <1464844729-2774-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 mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id B688A6E365 for ; Thu, 2 Jun 2016 05:17:24 +0000 (UTC) In-Reply-To: <1464844729-2774-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: Daniel Vetter , Sourab Gupta , Deepak S 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 OTE1X2Rydi5oICB8ICAzMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMgfCA2 NDggKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlZy5oICB8ICAgMiArCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgg ICAgICB8ICAgNyArCiA0IGZpbGVzIGNoYW5nZWQsIDQ2NSBpbnNlcnRpb25zKCspLCAyMjQgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggOWRhNTAwNy4uMmEzMWI3OSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xNzk3LDcgKzE3OTcsOCBAQCBzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbV9vcHMgewogCSAqIFJvdXRpbmUgdG8gZW1pdCB0aGUgY29tbWFuZHMgaW4g dGhlIGNvbW1hbmQgc3RyZWFtZXIgYXNzb2NpYXRlZAogCSAqIHdpdGggdGhlIGNvcnJlc3BvbmRp bmcgZ3B1IGVuZ2luZS4KIAkgKi8KLQl2b2lkICgqY29tbWFuZF9zdHJlYW1faG9vaykoc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIHUzMiB0YWcpOworCXZvaWQgKCpjb21tYW5kX3N0 cmVhbV9ob29rKShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAorCQkJCXN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCB1MzIgdGFnKTsKIH07CiAKIGVudW0gaTkxNV9wZXJm X3N0cmVhbV9zdGF0ZSB7CkBAIC0xODIxLDYgKzE4MjIsOSBAQCBzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSB7CiAJLyogV2hldGhlciBjb21tYW5kIHN0cmVhbSBiYXNlZCBkYXRhIGNvbGxlY3Rpb24g aXMgZW5hYmxlZCAqLwogCWJvb2wgY3NfbW9kZTsKIAorCS8qIFdoZXRoZXIgdGhlIE9BIHVuaXQg aXMgaW4gdXNlICovCisJYm9vbCB1c2luZ19vYTsKKwogCWNvbnN0IHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtX29wcyAqb3BzOwogfTsKIApAQCAtMTg1MCw3ICsxODU0LDE2IEBAIHN0cnVjdCBpOTE1 X29hX29wcyB7CiBzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9kZSB7CiAJc3RydWN0IGxpc3Rf aGVhZCBsaW5rOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKLQl1MzIg b2Zmc2V0OworCisJLyogT2Zmc2V0cyBpbnRvIHRoZSBHRU0gb2JqIGhvbGRpbmcgdGhlIGRhdGEg Ki8KKwl1MzIgc3RhcnRfb2Zmc2V0OworCXUzMiBvYV9vZmZzZXQ7CisJdTMyIHRzX29mZnNldDsK KworCS8qIGJ1ZmZlciBzaXplIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBlbnRyeSAqLworCXUzMiBz aXplOworCisJLyogT3RoZXIgbWV0YWRhdGEgKi8KIAl1MzIgY3R4X2lkOwogCXUzMiBwaWQ7CiAJ dTMyIHRhZzsKQEAgLTIxNDcsMTQgKzIxNjAsMTMgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg ewogCiAJCXNwaW5sb2NrX3QgaG9va19sb2NrOwogCi0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqZXhjbHVzaXZlX3N0cmVhbTsKKwkJc3RydWN0IGhydGltZXIgcG9sbF9j aGVja190aW1lcjsKKwkJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKmV4Y2x1c2l2ZV9zdHJlYW07 CisJCXdhaXRfcXVldWVfaGVhZF90IHBvbGxfd3FbSTkxNV9OVU1fRU5HSU5FU107CiAKKwkJc3Ry dWN0IHsKIAkJCXUzMiBzcGVjaWZpY19jdHhfaWQ7CiAKLQkJCXN0cnVjdCBocnRpbWVyIHBvbGxf Y2hlY2tfdGltZXI7Ci0JCQl3YWl0X3F1ZXVlX2hlYWRfdCBwb2xsX3dxOwotCiAJCQlib29sIHBl cmlvZGljOwogCQkJaW50IHBlcmlvZF9leHBvbmVudDsKIAkJCWludCB0aW1lc3RhbXBfZnJlcXVl bmN5OwpAQCAtMjE5NywxMyArMjIwOSwxMyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJ CQl1OCAqYWRkcjsKICNkZWZpbmUgSTkxNV9QRVJGX0NNRF9TVFJFQU1fQlVGX1NUQVRVU19PVkVS RkxPVyAoMTw8MCkKIAkJCXUzMiBzdGF0dXM7Ci0JCX0gY29tbWFuZF9zdHJlYW1fYnVmOworCQl9 IGNvbW1hbmRfc3RyZWFtX2J1ZltJOTE1X05VTV9FTkdJTkVTXTsKIAogCQl1MzIgbGFzdF9jdHhf aWQ7CiAJCXUzMiBsYXN0X3BpZDsKIAkJdTMyIGxhc3RfdGFnOwotCQlzdHJ1Y3QgbGlzdF9oZWFk IG5vZGVfbGlzdDsKLQkJc3BpbmxvY2tfdCBub2RlX2xpc3RfbG9jazsKKwkJc3RydWN0IGxpc3Rf aGVhZCBub2RlX2xpc3RbSTkxNV9OVU1fRU5HSU5FU107CisJCXNwaW5sb2NrX3Qgbm9kZV9saXN0 X2xvY2tbSTkxNV9OVU1fRU5HSU5FU107CiAJfSBwZXJmOwogCiAJLyogQWJzdHJhY3QgdGhlIHN1 Ym1pc3Npb24gbWVjaGFuaXNtIChsZWdhY3kgcmluZ2J1ZmZlciBvciBleGVjbGlzdHMpIGF3YXkg Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKaW5kZXggOTAyZjg0Zi4uNGE2ZmM1ZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9wZXJmLmMKQEAgLTg0LDEyICs4NCwxNyBAQCBzdGF0aWMgdTMyIGk5MTVf cGVyZl9zdHJlYW1fcGFyYW5vaWQgPSB0cnVlOwogLyogRm9yIGRldGVybWluaW5nIHRoZSBiZWhh dmlvciBvbiBvdmVyZmxvdyBvZiBjb21tYW5kIHN0cmVhbSBzYW1wbGVzICovCiAjZGVmaW5lIENN RF9TVFJFQU1fQlVGX09WRVJGTE9XX0FMTE9XRUQKIAotLyogRGF0YSBjb21tb24gdG8gcGVyaW9k aWMgYW5kIFJDUyBiYXNlZCBzYW1wbGVzICovCi1zdHJ1Y3Qgb2Ffc2FtcGxlX2RhdGEgeworI2Rl ZmluZSBPQV9BRERSX0FMSUdOIDY0CisjZGVmaW5lIFRTX0FERFJfQUxJR04gOAorI2RlZmluZSBJ OTE1X1BFUkZfVFNfU0FNUExFX1NJWkUgOAorCisvKiBEYXRhIGNvbW1vbiB0byBhbGwgc2FtcGxl cyAocGVyaW9kaWMgT0EgLyBDUyBiYXNlZCBPQSAvIFRpbWVzdGFtcHMpICovCitzdHJ1Y3Qgc2Ft cGxlX2RhdGEgewogCXUzMiBzb3VyY2U7CiAJdTMyIGN0eF9pZDsKIAl1MzIgcGlkOwogCXUzMiB0 YWc7CisJdTY0IHRzOwogCWNvbnN0IHU4ICpyZXBvcnQ7CiB9OwogCkBAIC0xNDcsNiArMTUyLDcg QEAgc3RhdGljIGNvbnN0IGVudW0gaW50ZWxfZW5naW5lX2lkIHVzZXJfcmluZ19tYXBbSTkxNV9V U0VSX1JJTkdTICsgMV0gPSB7CiAjZGVmaW5lIFNBTVBMRV9DVFhfSUQJCSgxPDwyKQogI2RlZmlu ZSBTQU1QTEVfUElECQkoMTw8MykKICNkZWZpbmUgU0FNUExFX1RBRwkJKDE8PDQpCisjZGVmaW5l IFNBTVBMRV9UUwkJKDE8PDUpCiAKIHN0cnVjdCBwZXJmX29wZW5fcHJvcGVydGllcyB7CiAJdTMy IHNhbXBsZV9mbGFnczsKQEAgLTE4NCw4ICsxOTAsOSBAQCB2b2lkIGk5MTVfcGVyZl9jb21tYW5k X3N0cmVhbV9ob29rKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCwKIAltdXRl eF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50 cnkoc3RyZWFtLCAmZGV2X3ByaXYtPnBlcmYuc3RyZWFtcywgbGluaykgewogCQlpZiAoKHN0cmVh bS0+c3RhdGUgPT0gSTkxNV9QRVJGX1NUUkVBTV9FTkFCTEVEKSAmJgotCQkJCQlzdHJlYW0tPmNz X21vZGUpCi0JCQlzdHJlYW0tPm9wcy0+Y29tbWFuZF9zdHJlYW1faG9vayhyZXF1ZXN0LCB0YWcp OworCQkJCXN0cmVhbS0+Y3NfbW9kZSAmJgorCQkJCShzdHJlYW0tPmVuZ2luZSA9PSBlbmdpbmUt PmlkKSkKKwkJCXN0cmVhbS0+b3BzLT5jb21tYW5kX3N0cmVhbV9ob29rKHN0cmVhbSwgcmVxdWVz dCwgdGFnKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5zdHJlYW1zX2xvY2sp OwogfQpAQCAtMTk5LDE2ICsyMDYsMTUgQEAgdm9pZCBpOTE1X3BlcmZfY29tbWFuZF9zdHJlYW1f aG9vayhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsCiAgKiBldmVudHVhbGx5 LCB3aGVuIHRoZSByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBuZXcgZW50cnkgY29tcGxldGVzLgog ICovCiBzdGF0aWMgdm9pZCByZWxlYXNlX3NvbWVfcGVyZl9lbnRyaWVzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkJdTMyIHRhcmdldF9zaXplKQorCQkJCWVudW0gaW50 ZWxfZW5naW5lX2lkIGlkLCB1MzIgdGFyZ2V0X3NpemUpCiB7CiAJc3RydWN0IGk5MTVfcGVyZl9j c19kYXRhX25vZGUgKmVudHJ5LCAqbmV4dDsKLQl1MzIgZW50cnlfc2l6ZSA9IGRldl9wcml2LT5w ZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6ZTsKIAl1MzIgc2l6ZSA9IDA7CiAKIAlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUKLQkJKGVudHJ5LCBuZXh0LCAmZGV2X3ByaXYtPnBlcmYubm9kZV9s aXN0LCBsaW5rKSB7CisJCShlbnRyeSwgbmV4dCwgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdFtp ZF0sIGxpbmspIHsKIAotCQlzaXplICs9IGVudHJ5X3NpemU7CisJCXNpemUgKz0gZW50cnktPnNp emU7CiAJCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UoZW50cnktPnJlcXVlc3QpOwogCQls aXN0X2RlbCgmZW50cnktPmxpbmspOwogCQlrZnJlZShlbnRyeSk7CkBAIC0yMjYsNDMgKzIzMiw2 MSBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3NvbWVfcGVyZl9lbnRyaWVzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKICAqIGFwcHJvcHJpYXRlIHN0YXR1cyBmbGFnIGlzIHNldCwg YW5kIGZ1bmN0aW9uIHJldHVybnMgLUVOT1NQQy4KICAqLwogc3RhdGljIGludCBpbnNlcnRfcGVy Zl9lbnRyeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCQlzdHJ1Y3QgaTkxNV9wZXJmX2NzX2RhdGFfbm9k ZSAqZW50cnkpCiB7CiAJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgKmZpcnN0X2VudHJ5 LCAqbGFzdF9lbnRyeTsKLQlpbnQgbWF4X29mZnNldCA9IGRldl9wcml2LT5wZXJmLmNvbW1hbmRf c3RyZWFtX2J1Zi5vYmotPmJhc2Uuc2l6ZTsKLQl1MzIgZW50cnlfc2l6ZSA9IGRldl9wcml2LT5w ZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6ZTsKKwl1MzIgc2FtcGxlX2ZsYWdzID0gc3RyZWFt LT5zYW1wbGVfZmxhZ3M7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQgPSBzdHJlYW0tPmVuZ2lu ZTsKKwlpbnQgbWF4X29mZnNldCA9IGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zltp ZF0ub2JqLT5iYXNlLnNpemU7CisJdTMyIG9mZnNldCwgZW50cnlfc2l6ZSA9IDA7CisJYm9vbCBz YW1wbGVfdHMgPSBmYWxzZTsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9jaygmZGV2X3ByaXYt PnBlcmYubm9kZV9saXN0X2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZkZXZfcHJpdi0+cGVyZi5u b2RlX2xpc3QpKSB7Ci0JCWVudHJ5LT5vZmZzZXQgPSAwOworCWlmIChzdHJlYW0tPnNhbXBsZV9m bGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpCisJCWVudHJ5X3NpemUgKz0gZGV2X3ByaXYtPnBlcmYu b2Eub2FfYnVmZmVyLmZvcm1hdF9zaXplOworCWVsc2UgaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBM RV9UUykgeworCQkvKgorCQkgKiBYWFg6IFNpbmNlIFRTIGRhdGEgY2FuIGFueXdheXMgYmUgZGVy aXZlZCBmcm9tIE9BIHJlcG9ydCwgc28KKwkJICogbm8gbmVlZCB0byBjYXB0dXJlIGl0IGZvciBS Q1MgZW5naW5lLCBpZiBjYXB0dXJlIG9hIGRhdGEgaXMKKwkJICogY2FsbGVkIGFscmVhZHkuCisJ CSAqLworCQllbnRyeV9zaXplICs9IEk5MTVfUEVSRl9UU19TQU1QTEVfU0laRTsKKwkJc2FtcGxl X3RzID0gdHJ1ZTsKKwl9CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9s b2NrW2lkXSk7CisJaWYgKGxpc3RfZW1wdHkoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdFtpZF0p KSB7CisJCW9mZnNldCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIAotCWZpcnN0X2VudHJ5ID0gbGlz dF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0LAorCWZpcnN0X2VudHJ5ID0g bGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0W2lkXSwKIAkJCQkgICAg ICAgdHlwZW9mKCpmaXJzdF9lbnRyeSksIGxpbmspOwotCWxhc3RfZW50cnkgPSBsaXN0X2xhc3Rf ZW50cnkoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCwKKwlsYXN0X2VudHJ5ID0gbGlzdF9sYXN0 X2VudHJ5KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RbaWRdLAogCQkJCSAgICAgdHlwZW9mKCps YXN0X2VudHJ5KSwgbGluayk7CiAKLQlpZiAobGFzdF9lbnRyeS0+b2Zmc2V0ID49IGZpcnN0X2Vu dHJ5LT5vZmZzZXQpIHsKKwlpZiAobGFzdF9lbnRyeS0+c3RhcnRfb2Zmc2V0ID49IGZpcnN0X2Vu dHJ5LT5zdGFydF9vZmZzZXQpIHsKIAkJLyogU3VmZmljaWVudCBzcGFjZSBhdmFpbGFibGUgYXQg dGhlIGVuZCBvZiBidWZmZXI/ICovCi0JCWlmIChsYXN0X2VudHJ5LT5vZmZzZXQgKyAyKmVudHJ5 X3NpemUgPCBtYXhfb2Zmc2V0KQotCQkJZW50cnktPm9mZnNldCA9IGxhc3RfZW50cnktPm9mZnNl dCArIGVudHJ5X3NpemU7CisJCWlmIChsYXN0X2VudHJ5LT5zdGFydF9vZmZzZXQgKyBsYXN0X2Vu dHJ5LT5zaXplICsgZW50cnlfc2l6ZQorCQkJCQkJCTwgbWF4X29mZnNldCkKKwkJCW9mZnNldCA9 IGxhc3RfZW50cnktPnN0YXJ0X29mZnNldCArIGxhc3RfZW50cnktPnNpemU7CiAJCS8qCiAJCSAq IFdyYXBhcm91bmQgY29uZGl0aW9uLiBJcyBzdWZmaWNpZW50IHNwYWNlIGF2YWlsYWJsZSBhdAog CQkgKiBiZWdpbm5pbmcgb2YgYnVmZmVyPwogCQkgKi8KLQkJZWxzZSBpZiAoZW50cnlfc2l6ZSA8 IGZpcnN0X2VudHJ5LT5vZmZzZXQpCi0JCQllbnRyeS0+b2Zmc2V0ID0gMDsKKwkJZWxzZSBpZiAo ZW50cnlfc2l6ZSA8IGZpcnN0X2VudHJ5LT5zdGFydF9vZmZzZXQpCisJCQlvZmZzZXQgPSAwOwog CQkvKiBJbnN1ZmZpY2llbnQgc3BhY2UgKi8KIAkJZWxzZSB7CiAjaWZkZWYgQ01EX1NUUkVBTV9C VUZfT1ZFUkZMT1dfQUxMT1dFRAotCQkJdTMyIHRhcmdldF9zaXplID0gZW50cnlfc2l6ZSAtIGZp cnN0X2VudHJ5LT5vZmZzZXQ7CisJCQl1MzIgdGFyZ2V0X3NpemUgPSBlbnRyeV9zaXplIC0KKwkJ CQkJCWZpcnN0X2VudHJ5LT5zdGFydF9vZmZzZXQ7CiAKLQkJCXJlbGVhc2Vfc29tZV9wZXJmX2Vu dHJpZXMoZGV2X3ByaXYsIHRhcmdldF9zaXplKTsKLQkJCWVudHJ5LT5vZmZzZXQgPSAwOworCQkJ cmVsZWFzZV9zb21lX3BlcmZfZW50cmllcyhkZXZfcHJpdiwgaWQsIHRhcmdldF9zaXplKTsKKwkJ CW9mZnNldCA9IDA7CiAjZWxzZQotCQkJZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVm LnN0YXR1cyB8PQorCQkJZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5zdGF0 dXMgfD0KIAkJCQlJOTE1X1BFUkZfQ01EX1NUUkVBTV9CVUZfU1RBVFVTX09WRVJGTE9XOwogCQkJ cmV0ID0gLUVOT1NQQzsKIAkJCWdvdG8gb3V0X3VubG9jazsKQEAgLTI3MCwxOSArMjk0LDIxIEBA IHN0YXRpYyBpbnQgaW5zZXJ0X3BlcmZfZW50cnkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAogCQl9CiAJfSBlbHNlIHsKIAkJLyogU3VmZmljaWVudCBzcGFjZSBhdmFpbGFibGU/ ICovCi0JCWlmIChsYXN0X2VudHJ5LT5vZmZzZXQgKyAyKmVudHJ5X3NpemUgPCBmaXJzdF9lbnRy eS0+b2Zmc2V0KQotCQkJZW50cnktPm9mZnNldCA9IGxhc3RfZW50cnktPm9mZnNldCArIGVudHJ5 X3NpemU7CisJCWlmIChsYXN0X2VudHJ5LT5zdGFydF9vZmZzZXQgKyBsYXN0X2VudHJ5LT5zaXpl ICsgZW50cnlfc2l6ZQorCQkJCQkJPCBmaXJzdF9lbnRyeS0+c3RhcnRfb2Zmc2V0KQorCQkJb2Zm c2V0ID0gbGFzdF9lbnRyeS0+c3RhcnRfb2Zmc2V0ICsgbGFzdF9lbnRyeS0+c2l6ZTsKIAkJLyog SW5zdWZmaWNpZW50IHNwYWNlICovCiAJCWVsc2UgewogI2lmZGVmIENNRF9TVFJFQU1fQlVGX09W RVJGTE9XX0FMTE9XRUQKIAkJCXUzMiB0YXJnZXRfc2l6ZSA9IGVudHJ5X3NpemUgLQotCQkJCShm aXJzdF9lbnRyeS0+b2Zmc2V0IC0gbGFzdF9lbnRyeS0+b2Zmc2V0IC0KLQkJCQllbnRyeV9zaXpl KTsKKwkJCQkoZmlyc3RfZW50cnktPnN0YXJ0X29mZnNldCAtCisJCQkJCWxhc3RfZW50cnktPnN0 YXJ0X29mZnNldCAtCisJCQkJCWxhc3RfZW50cnktPnNpemUpOwogCi0JCQlyZWxlYXNlX3NvbWVf cGVyZl9lbnRyaWVzKGRldl9wcml2LCB0YXJnZXRfc2l6ZSk7Ci0JCQllbnRyeS0+b2Zmc2V0ID0g bGFzdF9lbnRyeS0+b2Zmc2V0ICsgZW50cnlfc2l6ZTsKKwkJCXJlbGVhc2Vfc29tZV9wZXJmX2Vu dHJpZXMoZGV2X3ByaXYsIGlkLCB0YXJnZXRfc2l6ZSk7CisJCQlvZmZzZXQgPSBsYXN0X2VudHJ5 LT5zdGFydF9vZmZzZXQgKyBsYXN0X2VudHJ5LT5zaXplOwogI2Vsc2UKLQkJCWRldl9wcml2LT5w ZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi5zdGF0dXMgfD0KKwkJCWRldl9wcml2LT5wZXJmLmNvbW1h bmRfc3RyZWFtX2J1ZltpZF0uc3RhdHVzIHw9CiAJCQkJSTkxNV9QRVJGX0NNRF9TVFJFQU1fQlVG X1NUQVRVU19PVkVSRkxPVzsKIAkJCXJldCA9IC1FTk9TUEM7CiAJCQlnb3RvIG91dF91bmxvY2s7 CkBAIC0yOTEsNDkgKzMxNyw0NyBAQCBzdGF0aWMgaW50IGluc2VydF9wZXJmX2VudHJ5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAl9CiAKIG91dDoKLQlsaXN0X2FkZF90YWls KCZlbnRyeS0+bGluaywgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCk7CisJZW50cnktPnN0YXJ0 X29mZnNldCA9IG9mZnNldDsKKwllbnRyeS0+c2l6ZSA9IGVudHJ5X3NpemU7CisJaWYgKHN0cmVh bS0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkgeworCQllbnRyeS0+b2Ffb2Zmc2V0 ID0gb2Zmc2V0OworCQkvKiBFbnN1cmUgNjQgYnl0ZSBhbGlnbm1lbnQgb2Ygb2Ffb2Zmc2V0ICov CisJCWVudHJ5LT5vYV9vZmZzZXQgPSBBTElHTihlbnRyeS0+b2Ffb2Zmc2V0LCBPQV9BRERSX0FM SUdOKTsKKwkJb2Zmc2V0ID0gZW50cnktPm9hX29mZnNldCArCisJCQkJZGV2X3ByaXYtPnBlcmYu b2Eub2FfYnVmZmVyLmZvcm1hdF9zaXplOworCX0KKwlpZiAoc2FtcGxlX3RzKSB7CisJCWVudHJ5 LT50c19vZmZzZXQgPSBvZmZzZXQ7CisJCS8qIEVuc3VyZSA4IGJ5dGUgYWxpZ25tZW50IG9mIHRz X29mZnNldCAqLworCQllbnRyeS0+dHNfb2Zmc2V0ID0gQUxJR04oZW50cnktPnRzX29mZnNldCwg VFNfQUREUl9BTElHTik7CisJCW9mZnNldCA9IGVudHJ5LT50c19vZmZzZXQgKyBJOTE1X1BFUkZf VFNfU0FNUExFX1NJWkU7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpbmssICZkZXZf cHJpdi0+cGVyZi5ub2RlX2xpc3RbaWRdKTsKICNpZm5kZWYgQ01EX1NUUkVBTV9CVUZfT1ZFUkZM T1dfQUxMT1dFRAogb3V0X3VubG9jazoKICNlbmRpZgotCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+ cGVyZi5ub2RlX2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5vZGVf bGlzdF9sb2NrW2lkXSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV9wZXJm X2NvbW1hbmRfc3RyZWFtX2hvb2tfb2Eoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEs Ci0JCQkJCQl1MzIgdGFnKQorc3RhdGljIGludCBpOTE1X3Jpbmdfc3RyZWFtX2NhcHR1cmVfb2Eo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCisJCQkJdTMyIG9mZnNldCkKIHsKIAlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSByZXEtPmVuZ2luZTsKIAlzdHJ1Y3QgaW50 ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiA9IHJlcS0+cmluZ2J1ZjsKLQlzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY3R4ID0gcmVxLT5jdHg7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZW5naW5lLT5kZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9u b2RlICplbnRyeTsKIAl1MzIgYWRkciA9IDA7CiAJaW50IHJldDsKIAogCS8qIE9BIGNvdW50ZXJz IGFyZSBvbmx5IHN1cHBvcnRlZCBvbiB0aGUgcmVuZGVyIGVuZ2luZSAqLwogCUJVR19PTihlbmdp bmUtPmlkICE9IFJDUyk7CiAKLQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9L RVJORUwpOwotCWlmIChlbnRyeSA9PSBOVUxMKSB7Ci0JCURSTV9FUlJPUigiYWxsb2MgZmFpbGVk XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJldCA9IGluc2VydF9wZXJmX2VudHJ5KGRldl9wcml2 LCBlbnRyeSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZTsKLQogCXJldCA9IGludGVsX3Jp bmdfYmVnaW4ocmVxLCA0KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCWVudHJ5LT5jdHhf aWQgPSBjdHgtPmh3X2lkOwotCWVudHJ5LT5waWQgPSBjdXJyZW50LT5waWQ7Ci0JZW50cnktPnRh ZyA9IHRhZzsKLQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmZW50cnktPnJlcXVlc3QsIHJlcSk7 CisJCXJldHVybiByZXQ7CiAKLQlhZGRyID0gZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1f YnVmLnZtYS0+bm9kZS5zdGFydCArCi0JCWVudHJ5LT5vZmZzZXQ7CisJYWRkciA9IGRldl9wcml2 LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1ZltSQ1NdLnZtYS0+bm9kZS5zdGFydCArIG9mZnNldDsK IAogCS8qIGFkZHIgc2hvdWxkIGJlIDY0IGJ5dGUgYWxpZ25lZCAqLwogCUJVR19PTihhZGRyICYg MHgzZik7CkBAIC0zNjEsMTcgKzM4NSwxNTMgQEAgc3RhdGljIHZvaWQgaTkxNV9wZXJmX2NvbW1h bmRfc3RyZWFtX2hvb2tfb2Eoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiAJCX0K IAkJaW50ZWxfcmluZ19hZHZhbmNlKGVuZ2luZSk7CiAJfQotCWk5MTVfdm1hX21vdmVfdG9fYWN0 aXZlKGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi52bWEsIHJlcSk7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9yaW5nX3N0cmVhbV9jYXB0dXJlX3RzKHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAorCQkJCQkJdTMyIG9mZnNldCkKK3sKKwlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSByZXEtPmVuZ2luZTsKKwlzdHJ1Y3QgaW50ZWxfcmlu Z2J1ZmZlciAqcmluZ2J1ZiA9IHJlcS0+cmluZ2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGFkZHIgPSAwOwor CWludCByZXQ7CisKKwlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcSwgNik7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCWFkZHIgPSBkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9i dWZbZW5naW5lLT5pZF0udm1hLT5ub2RlLnN0YXJ0ICsKKwkJb2Zmc2V0OworCisJaWYgKGk5MTUu ZW5hYmxlX2V4ZWNsaXN0cykgeworCQlpZiAoZW5naW5lLT5pZCA9PSBSQ1MpIHsKKwkJCWludGVs X2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsCisJCQkJCQlHRlhfT1BfUElQRV9DT05UUk9MKDYp KTsKKwkJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsCisJCQkJCQlQSVBFX0NPTlRS T0xfR0xPQkFMX0dUVF9JVkIgfAorCQkJCQkJUElQRV9DT05UUk9MX1RJTUVTVEFNUF9XUklURSk7 CisJCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBhZGRyIHwKKwkJCQkJCVBJUEVf Q09OVFJPTF9HTE9CQUxfR1RUKTsKKwkJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYs IDApOworCQkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgMCk7CisJCQlpbnRlbF9s b2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCAwKTsKKwkJfSBlbHNlIHsKKwkJCXVpbnQzMl90IGNt ZDsKKworCQkJY21kID0gTUlfRkxVU0hfRFcgKyAyOyAvKiBHZW44KyAqLworCisJCQljbWQgfD0g TUlfRkxVU0hfRFdfT1BfU1RBTVA7CisKKwkJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdi dWYsIGNtZCk7CisJCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCBhZGRyIHwKKwkJ CQkJCU1JX0ZMVVNIX0RXX1VTRV9HVFQpOworCQkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmlu Z2J1ZiwgMCk7CisJCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCAwKTsKKwkJCWlu dGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIDApOworCQkJaW50ZWxfbG9naWNhbF9yaW5n X2VtaXQocmluZ2J1ZiwgTUlfTk9PUCk7CisJCX0KKwkJaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFu Y2UocmluZ2J1Zik7CisJfSBlbHNlIHsKKwkJaWYgKGVuZ2luZS0+aWQgPT0gUkNTKSB7CisJCQlp ZiAoSU5URUxfSU5GTyhlbmdpbmUtPmRldiktPmdlbiA+PSA4KQorCQkJCWludGVsX3JpbmdfZW1p dChlbmdpbmUsIEdGWF9PUF9QSVBFX0NPTlRST0woNikpOworCQkJZWxzZQorCQkJCWludGVsX3Jp bmdfZW1pdChlbmdpbmUsIEdGWF9PUF9QSVBFX0NPTlRST0woNSkpOworCQkJaW50ZWxfcmluZ19l bWl0KGVuZ2luZSwKKwkJCQkJUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCIHwKKwkJCQkJUElQ RV9DT05UUk9MX1RJTUVTVEFNUF9XUklURSk7CisJCQlpbnRlbF9yaW5nX2VtaXQoZW5naW5lLCBh ZGRyIHwgUElQRV9DT05UUk9MX0dMT0JBTF9HVFQpOworCQkJaW50ZWxfcmluZ19lbWl0KGVuZ2lu ZSwgMCk7CisJCQlpZiAoSU5URUxfSU5GTyhlbmdpbmUtPmRldiktPmdlbiA+PSA4KSB7CisJCQkJ aW50ZWxfcmluZ19lbWl0KGVuZ2luZSwgMCk7CisJCQkJaW50ZWxfcmluZ19lbWl0KGVuZ2luZSwg MCk7CisJCQl9IGVsc2UgeworCQkJCWludGVsX3JpbmdfZW1pdChlbmdpbmUsIDApOworCQkJCWlu dGVsX3JpbmdfZW1pdChlbmdpbmUsIE1JX05PT1ApOworCQkJfQorCQl9IGVsc2UgeworCQkJdWlu dDMyX3QgY21kOworCisJCQljbWQgPSBNSV9GTFVTSF9EVyArIDE7CisJCQlpZiAoSU5URUxfSU5G TyhlbmdpbmUtPmRldiktPmdlbiA+PSA4KQorCQkJCWNtZCArPSAxOworCisJCQljbWQgfD0gTUlf RkxVU0hfRFdfT1BfU1RBTVA7CisKKwkJCWludGVsX3JpbmdfZW1pdChlbmdpbmUsIGNtZCk7CisJ CQlpbnRlbF9yaW5nX2VtaXQoZW5naW5lLCBhZGRyIHwgTUlfRkxVU0hfRFdfVVNFX0dUVCk7CisJ CQlpZiAoSU5URUxfSU5GTyhlbmdpbmUtPmRldiktPmdlbiA+PSA4KSB7CisJCQkJaW50ZWxfcmlu Z19lbWl0KGVuZ2luZSwgMCk7CisJCQkJaW50ZWxfcmluZ19lbWl0KGVuZ2luZSwgMCk7CisJCQkJ aW50ZWxfcmluZ19lbWl0KGVuZ2luZSwgMCk7CisJCQl9IGVsc2UgeworCQkJCWludGVsX3Jpbmdf ZW1pdChlbmdpbmUsIDApOworCQkJCWludGVsX3JpbmdfZW1pdChlbmdpbmUsIDApOworCQkJCWlu dGVsX3JpbmdfZW1pdChlbmdpbmUsIE1JX05PT1ApOworCQkJfQorCQkJaW50ZWxfcmluZ19lbWl0 KGVuZ2luZSwgTUlfTk9PUCk7CisJCX0KKwkJaW50ZWxfcmluZ19hZHZhbmNlKGVuZ2luZSk7CisJ fQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3Jpbmdfc3RyZWFtX2NzX2hvb2so c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwgdTMyIHRhZykKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUgPSByZXEtPmVuZ2luZTsKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4ID0gcmVxLT5jdHg7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5kZXYtPmRldl9w cml2YXRlOworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkID0gc3RyZWFtLT5lbmdpbmU7CisJdTMy IHNhbXBsZV9mbGFncyA9IHN0cmVhbS0+c2FtcGxlX2ZsYWdzOworCXN0cnVjdCBpOTE1X3BlcmZf Y3NfZGF0YV9ub2RlICplbnRyeTsKKwlpbnQgcmV0ID0gMDsKKworCWVudHJ5ID0ga3phbGxvYyhz aXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVudHJ5ID09IE5VTEwpIHsKKwkJRFJN X0VSUk9SKCJhbGxvYyBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gaW5zZXJ0 X3BlcmZfZW50cnkoZGV2X3ByaXYsIHN0cmVhbSwgZW50cnkpOworCWlmIChyZXQpCisJCWdvdG8g ZXJyX2ZyZWU7CisKKwllbnRyeS0+Y3R4X2lkID0gY3R4LT5od19pZDsKKwllbnRyeS0+cGlkID0g Y3VycmVudC0+cGlkOworCWVudHJ5LT50YWcgPSB0YWc7CisJaTkxNV9nZW1fcmVxdWVzdF9hc3Np Z24oJmVudHJ5LT5yZXF1ZXN0LCByZXEpOworCisJaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9P QV9SRVBPUlQpIHsKKwkJcmV0ID0gaTkxNV9yaW5nX3N0cmVhbV9jYXB0dXJlX29hKHJlcSwgZW50 cnktPm9hX29mZnNldCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl91bnJlZjsKKwl9IGVsc2Ug aWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9UUykgeworCQkvKgorCQkgKiBYWFg6IFNpbmNlIFRT IGRhdGEgY2FuIGFueXdheXMgYmUgZGVyaXZlZCBmcm9tIE9BIHJlcG9ydCwgc28KKwkJICogbm8g bmVlZCB0byBjYXB0dXJlIGl0IGZvciBSQ1MgZW5naW5lLCBpZiBjYXB0dXJlIG9hIGRhdGEgaXMK KwkJICogY2FsbGVkIGFscmVhZHkuCisJCSAqLworCQlyZXQgPSBpOTE1X3Jpbmdfc3RyZWFtX2Nh cHR1cmVfdHMocmVxLCBlbnRyeS0+dHNfb2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJy X3VucmVmOworCX0KKworCWk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKGRldl9wcml2LT5wZXJmLmNv bW1hbmRfc3RyZWFtX2J1ZltpZF0udm1hLCByZXEpOwogCXJldHVybjsKLW91dDoKLQlzcGluX2xv Y2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKworZXJyX3VucmVmOgorCWk5MTVf Z2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UoZW50cnktPnJlcXVlc3QpOworCXNwaW5fbG9jaygmZGV2 X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2tbaWRdKTsKIAlsaXN0X2RlbCgmZW50cnktPmxpbmsp OwotCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7Ci1vdXRfZnJl ZToKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2tbaWRdKTsKK2Vy cl9mcmVlOgogCWtmcmVlKGVudHJ5KTsKIH0KIAotc3RhdGljIGludCBpOTE1X29hX3Jjc193YWl0 X2dwdShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgaW50IGk5MTVf cmluZ19zdHJlYW1fd2FpdF9ncHUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAor CQkJCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkKQogewogCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0 YV9ub2RlICpsYXN0X2VudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcSA9IE5VTEw7CkBAIC0zODIsMTQgKzU0MiwxNCBAQCBzdGF0aWMgaW50IGk5MTVfb2FfcmNz X3dhaXRfZ3B1KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkgKiBpbXBsaWNp dGx5IHdhaXQgZm9yIHRoZSBwcmlvciBzdWJtaXR0ZWQgcmVxdWVzdHMuIFRoZSByZWZjb3VudAog CSAqIG9mIHRoZSByZXF1ZXN0cyBpcyBub3QgZGVjcmVtZW50ZWQgaGVyZS4KIAkgKi8KLQlzcGlu X2xvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2soJmRldl9w cml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrW2lkXSk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmRldl9w cml2LT5wZXJmLm5vZGVfbGlzdCkpIHsKLQkJbGFzdF9lbnRyeSA9IGxpc3RfbGFzdF9lbnRyeSgm ZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0LAorCWlmICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPnBl cmYubm9kZV9saXN0W2lkXSkpIHsKKwkJbGFzdF9lbnRyeSA9IGxpc3RfbGFzdF9lbnRyeSgmZGV2 X3ByaXYtPnBlcmYubm9kZV9saXN0W2lkXSwKIAkJCXN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9u b2RlLCBsaW5rKTsKIAkJcmVxID0gbGFzdF9lbnRyeS0+cmVxdWVzdDsKIAl9Ci0Jc3Bpbl91bmxv Y2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKwlzcGluX3VubG9jaygmZGV2X3By aXYtPnBlcmYubm9kZV9saXN0X2xvY2tbaWRdKTsKIAogCWlmICghcmVxKQogCQlyZXR1cm4gMDsK QEAgLTQwMiwxNyArNTYyLDE4IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9yY3Nfd2FpdF9ncHUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMg dm9pZCBpOTE1X29hX3Jjc19mcmVlX3JlcXVlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKK3N0YXRpYyB2b2lkIGk5MTVfcmluZ19zdHJlYW1fZnJlZV9yZXF1ZXN0cyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJZW51bSBpbnRlbF9lbmdpbmVfaWQg aWQpCiB7CiAJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgKmVudHJ5LCAqbmV4dDsKIAog CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZQotCQkoZW50cnksIG5leHQsICZkZXZfcHJpdi0+cGVy Zi5ub2RlX2xpc3QsIGxpbmspIHsKKwkJKGVudHJ5LCBuZXh0LCAmZGV2X3ByaXYtPnBlcmYubm9k ZV9saXN0W2lkXSwgbGluaykgewogCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKGVudHJ5 LT5yZXF1ZXN0KTsKIAotCQlzcGluX2xvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2Nr KTsKKwkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9ja1tpZF0pOwogCQls aXN0X2RlbCgmZW50cnktPmxpbmspOwotCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9k ZV9saXN0X2xvY2spOworCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xv Y2tbaWRdKTsKIAkJa2ZyZWUoZW50cnkpOwogCX0KIH0KQEAgLTU1NSwxMSArNzE2LDExIEBAIHN0 YXRpYyBpbnQgYXBwZW5kX29hX3N0YXR1cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt LAogfQogCiAvKioKLSAqIENvcGllcyBzaW5nbGUgT0EgcmVwb3J0IGludG8gdXNlcnNwYWNlIHJl YWQoKSBidWZmZXIuCisgKiBDb3BpZXMgc2luZ2xlIHNhbXBsZSBpbnRvIHVzZXJzcGFjZSByZWFk KCkgYnVmZmVyLgogICovCi1zdGF0aWMgaW50IGFwcGVuZF9vYV9zYW1wbGUoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSwKK3N0YXRpYyBpbnQgYXBwZW5kX3NhbXBsZShzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJICAgIHN0cnVjdCBpOTE1X3BlcmZfcmVhZF9zdGF0 ZSAqcmVhZF9zdGF0ZSwKLQkJCSAgICBzdHJ1Y3Qgb2Ffc2FtcGxlX2RhdGEgKmRhdGEpCisJCQkg ICAgc3RydWN0IHNhbXBsZV9kYXRhICpkYXRhKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CiAJaW50IHJlcG9ydF9zaXplID0gZGV2X3By aXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1hdF9zaXplOwpAQCAtNjAyLDYgKzc2MywxMiBAQCBz dGF0aWMgaW50IGFwcGVuZF9vYV9zYW1wbGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSwKIAkJYnVmICs9IDQ7CiAJfQogCisJaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9UUykgewor CQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmRhdGEtPnRzLCBJOTE1X1BFUkZfVFNfU0FNUExFX1NJ WkUpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJ1ZiArPSBJOTE1X1BFUkZfVFNfU0FNUExFX1NJ WkU7CisJfQorCiAJaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpIHsKIAkJaWYg KGNvcHlfdG9fdXNlcihidWYsIGRhdGEtPnJlcG9ydCwgcmVwb3J0X3NpemUpKQogCQkJcmV0dXJu IC1FRkFVTFQ7CkBAIC02MjAsNyArNzg3LDcgQEAgc3RhdGljIGludCBhcHBlbmRfb2FfYnVmZmVy X3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogewogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CiAJdTMyIHNhbXBsZV9m bGFncyA9IHN0cmVhbS0+c2FtcGxlX2ZsYWdzOwotCXN0cnVjdCBvYV9zYW1wbGVfZGF0YSBkYXRh ID0geyAwIH07CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGEgPSB7IDAgfTsKIAogCWlmIChzYW1w bGVfZmxhZ3MgJiBTQU1QTEVfT0FfU09VUkNFX0lORk8pIHsKIAkJZW51bSBkcm1faTkxNV9wZXJm X29hX2V2ZW50X3NvdXJjZSBzb3VyY2U7CkBAIC02NTAsMTAgKzgxNywxNSBAQCBzdGF0aWMgaW50 IGFwcGVuZF9vYV9idWZmZXJfc2FtcGxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0s CiAJaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9UQUcpCiAJCWRhdGEudGFnID0gZGV2X3ByaXYt PnBlcmYubGFzdF90YWc7CiAKKwkvKiBEZXJpdmUgdGltZXN0YW1wIGZyb20gT0EgcmVwb3J0LCBh ZnRlciBzY2FsaW5nIHdpdGggdGhlIHRzIGJhc2UgKi8KKyN3YXJuaW5nICJGSVhNRTogYXBwZW5k X29hX2J1ZmZlcl9zYW1wbGU6IGRlcml2ZSB0aGUgdGltZXN0YW1wIGZyb20gT0EgcmVwb3J0Igor CWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfVFMpCisJCWRhdGEudHMgPSAwOworCiAJaWYgKHNh bXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpCiAJCWRhdGEucmVwb3J0ID0gcmVwb3J0Owog Ci0JcmV0dXJuIGFwcGVuZF9vYV9zYW1wbGUoc3RyZWFtLCByZWFkX3N0YXRlLCAmZGF0YSk7CisJ cmV0dXJuIGFwcGVuZF9zYW1wbGUoc3RyZWFtLCByZWFkX3N0YXRlLCAmZGF0YSk7CiB9CiAKIC8q KgpAQCAtNzU1LDcgKzkyNyw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhz dHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkgKiBhbiBpbnZhbGlkIElELiBJdCBj b3VsZCBiZSBnb29kIHRvIGFubm90YXRlIHRoZXNlCiAJCSAqIHJlcG9ydHMgd2l0aCBhIF9DVFhf U1dJVENIX0FXQVkgcmVhc29uIGxhdGVyLgogCQkgKi8KLQkJaWYgKCFkZXZfcHJpdi0+cGVyZi5v YS5leGNsdXNpdmVfc3RyZWFtLT5jdHggfHwKKwkJaWYgKCFkZXZfcHJpdi0+cGVyZi5leGNsdXNp dmVfc3RyZWFtLT5jdHggfHwKIAkJICAgIGRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmljX2N0eF9p ZCA9PSBjdHhfaWQgfHwKIAkJICAgIGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5sYXN0X2N0 eF9pZCA9PSBjdHhfaWQpIHsKIApAQCAtNzY2LDcgKzkzOCw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9h cHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJICog dGhlIHN3aXRjaC1hd2F5IHJlcG9ydHMgd2l0aCBhbiBpbnZhbGlkCiAJCQkgKiBjb250ZXh0IGlk IHRvIGJlIHJlY29nbmlzYWJsZSBieSB1c2Vyc3BhY2UuCiAJCQkgKi8KLQkJCWlmIChkZXZfcHJp di0+cGVyZi5vYS5leGNsdXNpdmVfc3RyZWFtLT5jdHggJiYKKwkJCWlmIChkZXZfcHJpdi0+cGVy Zi5leGNsdXNpdmVfc3RyZWFtLT5jdHggJiYKIAkJCSAgICBkZXZfcHJpdi0+cGVyZi5vYS5zcGVj aWZpY19jdHhfaWQgIT0gY3R4X2lkKQogCQkJCXJlcG9ydDMyWzJdID0gMHgxZmZmZmY7CiAKQEAg LTEwODQsMzEgKzEyNTYsMzkgQEAgc3RhdGljIGludCBnZW43X29hX3JlYWQoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSwKIH0KIAogLyoqCi0gKiBDb3BpZXMgYSBjb21tYW5kIHN0cmVh bSBPQSByZXBvcnQgaW50byB1c2Vyc3BhY2UgcmVhZCgpIGJ1ZmZlciwgd2hpbGUgYWxzbwotICog Zm9yd2FyZGluZyB0aGUgcGVyaW9kaWMgT0EgcmVwb3J0cyB3aXRoIHRpbWVzdGFtcCBsb3dlciB0 aGFuIENTIHJlcG9ydC4KKyAqIENvcHkgb25lIGNvbW1hbmQgc3RyZWFtIHJlcG9ydCBpbnRvIHVz ZXJzcGFjZSByZWFkKCkgYnVmZmVyLgorICogRm9yIE9BIHJlcG9ydHMsIGFsc28gZm9yd2FyZCB0 aGUgcGVyaW9kaWMgT0EgcmVwb3J0cyB3aXRoIHRpbWVzdGFtcAorICogbG93ZXIgdGhhbiBjdXJy ZW50IENTIE9BIHNhbXBsZS4KICAqCiAgKiBOQjogc29tZSBkYXRhIG1heSBiZSBzdWNjZXNzZnVs bHkgY29waWVkIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyCiAgKiBldmVuIGlmIGFuIGVycm9yIGlz IHJldHVybmVkLCBhbmQgdGhpcyBpcyByZWZsZWN0ZWQgaW4gdGhlCiAgKiB1cGRhdGVkIEByZWFk X3N0YXRlLgogICovCi1zdGF0aWMgaW50IGFwcGVuZF9vYV9yY3Nfc2FtcGxlKHN0cnVjdCBpOTE1 X3BlcmZfc3RyZWFtICpzdHJlYW0sCitzdGF0aWMgaW50IGFwcGVuZF9vbmVfY3Nfc2FtcGxlKHN0 cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQkJIHN0cnVjdCBpOTE1X3BlcmZfcmVh ZF9zdGF0ZSAqcmVhZF9zdGF0ZSwKIAkJCQkgc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUg Km5vZGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5k ZXZfcHJpdjsKLQlzdHJ1Y3Qgb2Ffc2FtcGxlX2RhdGEgZGF0YSA9IHsgMCB9OwotCWNvbnN0IHU4 ICpyZXBvcnQgPSBkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYuYWRkciArCi0JCQkJ bm9kZS0+b2Zmc2V0OworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkID0gc3RyZWFtLT5lbmdpbmU7 CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGEgPSB7IDAgfTsKIAl1MzIgc2FtcGxlX2ZsYWdzID0g c3RyZWFtLT5zYW1wbGVfZmxhZ3M7Ci0JdTMyIHJlcG9ydF90czsKLQlpbnQgcmV0OworCWludCBy ZXQgPSAwOwogCi0JLyogRmlyc3QsIGFwcGVuZCB0aGUgcGVyaW9kaWMgT0Egc2FtcGxlcyBoYXZp bmcgbG93ZXIgdGltZXN0YW1wcyAqLwotCXJlcG9ydF90cyA9ICoodTMyICopKHJlcG9ydCArIDQp OwotCXJldCA9IGRldl9wcml2LT5wZXJmLm9hLm9wcy5yZWFkKHN0cmVhbSwgcmVhZF9zdGF0ZSwK LQkJCQkJcmVwb3J0X3RzLCBVMzJfTUFYKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWlm IChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKSB7CisJCWNvbnN0IHU4ICpyZXBvcnQg PSBkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWZbaWRdLmFkZHIgKworCQkJCSAgIG5v ZGUtPm9hX29mZnNldDsKKwkJdTMyIHNhbXBsZV90cyA9ICoodTMyICopKHJlcG9ydCArIDQpOwor CisJCWRhdGEucmVwb3J0ID0gcmVwb3J0OworCisJCS8qIEZpcnN0LCBhcHBlbmQgdGhlIHBlcmlv ZGljIE9BIHNhbXBsZXMgaGF2aW5nIGxvd2VyCisJCSAqIHRpbWVzdGFtcCB2YWx1ZXMKKwkJICov CisJCXJldCA9IGRldl9wcml2LT5wZXJmLm9hLm9wcy5yZWFkKHN0cmVhbSwgcmVhZF9zdGF0ZSwg c2FtcGxlX3RzLAorCQkJCQkJVTMyX01BWCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0Owor CX0KIAogCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfU09VUkNFX0lORk8pCiAJCWRhdGEu c291cmNlID0gSTkxNV9QRVJGX09BX0VWRU5UX1NPVVJDRV9SQ1M7CkBAIC0xMTI4LDI1ICsxMzA4 LDM3IEBAIHN0YXRpYyBpbnQgYXBwZW5kX29hX3Jjc19zYW1wbGUoc3RydWN0IGk5MTVfcGVyZl9z dHJlYW0gKnN0cmVhbSwKIAkJZGV2X3ByaXYtPnBlcmYubGFzdF90YWcgPSBub2RlLT50YWc7CiAJ fQogCi0JaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpCi0JCWRhdGEucmVwb3J0 ID0gcmVwb3J0OworCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfVFMpIHsKKwkJLyogRm9yIFJD UywgaWYgT0Egc2FtcGxlcyBhcmUgYWxzbyBiZWluZyBjb2xsZWN0ZWQsIGRlcml2ZSB0aGUKKwkJ ICogdGltZXN0YW1wIGZyb20gT0EgcmVwb3J0LCBhZnRlciBzY2FsaW5nIHdpdGggdGhlIFRTIGJh c2UuCisJCSAqIEVsc2UsIGZvcndhcmQgdGhlIHRpbWVzdGFtcCBjb2xsZWN0ZWQgdmlhIGNvbW1h bmQgc3RyZWFtLgorCQkgKi8KKyN3YXJuaW5nICJGSVhNRTogYXBwZW5kX29uZV9jc19zYW1wbGU6 IGRlcml2ZSB0aGUgdGltZXN0YW1wIGZyb20gT0EgcmVwb3J0IgorCQlpZiAoc2FtcGxlX2ZsYWdz ICYgU0FNUExFX09BX1JFUE9SVCkKKwkJCWRhdGEudHMgPSAwOworCQllbHNlCisJCQlkYXRhLnRz ID0gKih1NjQgKikKKwkJCQkoZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5h ZGRyICsKKwkJCQkJbm9kZS0+dHNfb2Zmc2V0KTsKKwl9CiAKLQlyZXR1cm4gYXBwZW5kX29hX3Nh bXBsZShzdHJlYW0sIHJlYWRfc3RhdGUsICZkYXRhKTsKKwlyZXR1cm4gYXBwZW5kX3NhbXBsZShz dHJlYW0sIHJlYWRfc3RhdGUsICZkYXRhKTsKIH0KIAogLyoqCi0gKiBDb3BpZXMgYWxsIE9BIHJl cG9ydHMgaW50byB1c2Vyc3BhY2UgcmVhZCgpIGJ1ZmZlci4gVGhpcyBpbmNsdWRlcyBjb21tYW5k Ci0gKiBzdHJlYW0gYXMgd2VsbCBhcyBwZXJpb2RpYyBPQSByZXBvcnRzLgorICogQ29waWVzIGFs bCBzYW1wbGVzIGludG8gdXNlcnNwYWNlIHJlYWQoKSBidWZmZXIuIFRoaXMgaW5jbHVkZXMgY29t bWFuZAorICogc3RyZWFtIHNhbXBsZXMgYXMgd2VsbCBhcyBwZXJpb2RpYyBPQSByZXBvcnRzIChp ZiBlbmFibGVkKS4KICAqCiAgKiBOQjogc29tZSBkYXRhIG1heSBiZSBzdWNjZXNzZnVsbHkgY29w aWVkIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyCiAgKiBldmVuIGlmIGFuIGVycm9yIGlzIHJldHVy bmVkLCBhbmQgdGhpcyBpcyByZWZsZWN0ZWQgaW4gdGhlCiAgKiB1cGRhdGVkIEByZWFkX3N0YXRl LgogICovCi1zdGF0aWMgaW50IG9hX3Jjc19hcHBlbmRfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtLAorc3RhdGljIGludCBhcHBlbmRfY29tbWFuZF9zdHJlYW1fc2FtcGxl cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJCSAgc3RydWN0IGk5MTVfcGVy Zl9yZWFkX3N0YXRlICpyZWFkX3N0YXRlKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CiAJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25v ZGUgKmVudHJ5LCAqbmV4dDsKKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZCA9IHN0cmVhbS0+ZW5n aW5lOwogCUxJU1RfSEVBRChmcmVlX2xpc3QpOwogCWludCByZXQgPSAwOwogI2lmbmRlZiBDTURf U1RSRUFNX0JVRl9PVkVSRkxPV19BTExPV0VECkBAIC0xMTYzLDI0ICsxMzU1LDI0IEBAIHN0YXRp YyBpbnQgb2FfcmNzX2FwcGVuZF9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0sCiAJCQkJfkk5MTVfUEVSRl9DTURfU1RSRUFNX0JVRl9TVEFUVVNfT1ZFUkZMT1c7CiAJfQog I2VuZGlmCi0Jc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7Ci0JaWYg KGxpc3RfZW1wdHkoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCkpIHsKLQkJc3Bpbl91bmxvY2so JmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2soJmRldl9wcml2LT5w ZXJmLm5vZGVfbGlzdF9sb2NrW2lkXSk7CisJaWYgKGxpc3RfZW1wdHkoJmRldl9wcml2LT5wZXJm Lm5vZGVfbGlzdFtpZF0pKSB7CisJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xp c3RfbG9ja1tpZF0pOwogCQlnb3RvIHBlbmRpbmdfcGVyaW9kaWM7CiAJfQogCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwKLQkJCQkgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlz dCwgbGluaykgeworCQkJCSAmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0W2lkXSwgbGluaykgewog CQlpZiAoIWk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKGVudHJ5LT5yZXF1ZXN0LCB0cnVlKSkK IAkJCWJyZWFrOwogCQlsaXN0X21vdmVfdGFpbCgmZW50cnktPmxpbmssICZmcmVlX2xpc3QpOwog CX0KLQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2spOworCXNwaW5f dW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9ja1tpZF0pOwogCiAJaWYgKGxpc3Rf ZW1wdHkoJmZyZWVfbGlzdCkpCiAJCWdvdG8gcGVuZGluZ19wZXJpb2RpYzsKIAogCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgJmZyZWVfbGlzdCwgbGluaykgewotCQlyZXQg PSBhcHBlbmRfb2FfcmNzX3NhbXBsZShzdHJlYW0sIHJlYWRfc3RhdGUsIGVudHJ5KTsKKwkJcmV0 ID0gYXBwZW5kX29uZV9jc19zYW1wbGUoc3RyZWFtLCByZWFkX3N0YXRlLCBlbnRyeSk7CiAJCWlm IChyZXQpCiAJCQlicmVhazsKIApAQCAtMTE5MCwxNCArMTM4MiwxNSBAQCBzdGF0aWMgaW50IG9h X3Jjc19hcHBlbmRfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCX0K IAogCS8qIERvbid0IGRpc2NhcmQgcmVtYWluaW5nIGVudHJpZXMsIGtlZXAgdGhlbSBmb3IgbmV4 dCByZWFkICovCi0Jc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7Ci0J bGlzdF9zcGxpY2UoJmZyZWVfbGlzdCwgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCk7Ci0Jc3Bp bl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2soJmRl dl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrW2lkXSk7CisJbGlzdF9zcGxpY2UoJmZyZWVfbGlz dCwgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdFtpZF0pOworCXNwaW5fdW5sb2NrKCZkZXZfcHJp di0+cGVyZi5ub2RlX2xpc3RfbG9ja1tpZF0pOwogCiAJcmV0dXJuIHJldDsKIAogcGVuZGluZ19w ZXJpb2RpYzoKLQlpZiAoIWRldl9wcml2LT5wZXJmLm9hLm5fcGVuZGluZ19wZXJpb2RpY19zYW1w bGVzKQorCWlmICghKChzdHJlYW0tPnNhbXBsZV9mbGFncyAmIFNBTVBMRV9PQV9SRVBPUlQpICYm CisJCQlkZXZfcHJpdi0+cGVyZi5vYS5uX3BlbmRpbmdfcGVyaW9kaWNfc2FtcGxlcykpCiAJCXJl dHVybiAwOwogCiAJcmV0ID0gZGV2X3ByaXYtPnBlcmYub2Eub3BzLnJlYWQoc3RyZWFtLCByZWFk X3N0YXRlLApAQCAtMTIyNiwxNSArMTQxOSwxNiBAQCBzdGF0aWMgZW51bSBjc19idWZfZGF0YV9z dGF0ZSBjb21tYW5kX3N0cmVhbV9idWZfc3RhdGUoCiAJCQkJc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJl YW0tPmRldl9wcml2OworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkID0gc3RyZWFtLT5lbmdpbmU7 CiAJc3RydWN0IGk5MTVfcGVyZl9jc19kYXRhX25vZGUgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrKCZkZXZf cHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9jayk7Ci0JZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5X29y X251bGwoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCwKKwlzcGluX2xvY2soJmRldl9wcml2LT5w ZXJmLm5vZGVfbGlzdF9sb2NrW2lkXSk7CisJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251 bGwoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdFtpZF0sCiAJCQlzdHJ1Y3QgaTkxNV9wZXJmX2Nz X2RhdGFfbm9kZSwgbGluayk7CiAJaWYgKGVudHJ5KQogCQlyZXF1ZXN0ID0gZW50cnktPnJlcXVl c3Q7Ci0Jc3Bpbl91bmxvY2soJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdF9sb2NrKTsKKwlzcGlu X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2tbaWRdKTsKIAogCWlmICghZW50 cnkpCiAJCXJldHVybiBDU19CVUZfRU1QVFk7CkBAIC0xMjUyLDIzICsxNDQ2LDIzIEBAIHN0YXRp YyBlbnVtIGNzX2J1Zl9kYXRhX3N0YXRlIGNvbW1hbmRfc3RyZWFtX2J1Zl9zdGF0ZSgKIHN0YXRp YyBib29sIHN0cmVhbV9oYXZlX2RhdGFfX3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0pCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFt LT5kZXZfcHJpdjsKLQllbnVtIGNzX2J1Zl9kYXRhX3N0YXRlIGNzX2J1Zl9zdGF0ZTsKLQl1MzIg bnVtX3NhbXBsZXMsIGxhc3RfdHMgPSAwOwotCi0JLyogTm90ZTogb2FfYnVmZmVyX251bV9zYW1w bGVzKCkgaXMgb2sgdG8gcnVuIHVubG9ja2VkIGFzIGl0IGp1c3QKLQkgKiBwZXJmb3JtcyBtbWlv IHJlYWRzIG9mIHRoZSBPQSBidWZmZXIgaGVhZCArIHRhaWwgcG9pbnRlcnMgYW5kCi0JICogaXQn cyBhc3N1bWVkIHdlJ3JlIGhhbmRsaW5nIHNvbWUgb3BlcmF0aW9uIHRoYXQgaW1wbGllcyB0aGUg c3RyZWFtCi0JICogY2FuJ3QgYmUgZGVzdHJveWVkIHVudGlsIGNvbXBsZXRpb24gKHN1Y2ggYXMg YSByZWFkKCkpIHRoYXQgZW5zdXJlcwotCSAqIHRoZSBkZXZpY2UgKyBPQSBidWZmZXIgY2FuJ3Qg ZGlzYXBwZWFyCi0JICovCi0JZGV2X3ByaXYtPnBlcmYub2Eubl9wZW5kaW5nX3BlcmlvZGljX3Nh bXBsZXMgPSAwOwotCWRldl9wcml2LT5wZXJmLm9hLnBlbmRpbmdfcGVyaW9kaWNfdHMgPSAwOwot CW51bV9zYW1wbGVzID0gZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2J1ZmZlcl9udW1fc2FtcGxl cyhkZXZfcHJpdiwKLQkJCQkJCQkJJmxhc3RfdHMpOwotCWlmIChzdHJlYW0tPmNzX21vZGUpCisJ ZW51bSBjc19idWZfZGF0YV9zdGF0ZSBjc19idWZfc3RhdGUgPSBDU19CVUZfRU1QVFk7CisJdTMy IG51bV9zYW1wbGVzID0gMCwgbGFzdF90cyA9IDA7CisKKwlpZiAoc3RyZWFtLT5zYW1wbGVfZmxh Z3MgJiBTQU1QTEVfT0FfUkVQT1JUKSB7CisJCS8qIE5vdGU6IG9hX2J1ZmZlcl9udW1fc2FtcGxl cygpIGlzIG9rIHRvIHJ1biB1bmxvY2tlZCBhcyBpdAorCQkgKiBqdXN0IHBlcmZvcm1zIG1taW8g cmVhZHMgb2YgdGhlIE9BIGJ1ZmZlciBoZWFkICsgdGFpbAorCQkgKiBwb2ludGVycyBhbmQgaXQn cyBhc3N1bWVkIHdlJ3JlIGhhbmRsaW5nIHNvbWUgb3BlcmF0aW9uIHRoYXQKKwkJICogaW1wbGll cyB0aGUgc3RyZWFtIGNhbid0IGJlIGRlc3Ryb3llZCB1bnRpbCBjb21wbGV0aW9uIChzdWNoCisJ CSAqIGFzIGEgcmVhZCgpKSB0aGF0IGVuc3VyZXMgdGhlIGRldmljZSArIE9BIGJ1ZmZlciBjYW4n dAorCQkgKiBkaXNhcHBlYXIKKwkJICovCisJCWRldl9wcml2LT5wZXJmLm9hLm5fcGVuZGluZ19w ZXJpb2RpY19zYW1wbGVzID0gMDsKKwkJZGV2X3ByaXYtPnBlcmYub2EucGVuZGluZ19wZXJpb2Rp Y190cyA9IDA7CisJCW51bV9zYW1wbGVzID0gZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2J1ZmZl cl9udW1fc2FtcGxlcygKKwkJCQkJCQlkZXZfcHJpdiwgJmxhc3RfdHMpOworCX0gZWxzZSBpZiAo c3RyZWFtLT5jc19tb2RlKQogCQljc19idWZfc3RhdGUgPSBjb21tYW5kX3N0cmVhbV9idWZfc3Rh dGUoc3RyZWFtKTsKLQllbHNlCi0JCWNzX2J1Zl9zdGF0ZSA9IENTX0JVRl9FTVBUWTsKIAogCS8q CiAJICogTm90ZTogV2UgY2FuIHNhZmVseSBmb3J3YXJkIHRoZSBwZXJpb2RpYyBPQSBzYW1wbGVz IGluIHRoZSBjYXNlIHdlCkBAIC0xMjgwLDkgKzE0NzQsMTMgQEAgc3RhdGljIGJvb2wgc3RyZWFt X2hhdmVfZGF0YV9fdW5sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAkg Ki8KIAlzd2l0Y2ggKGNzX2J1Zl9zdGF0ZSkgewogCWNhc2UgQ1NfQlVGX0VNUFRZOgotCQlkZXZf cHJpdi0+cGVyZi5vYS5uX3BlbmRpbmdfcGVyaW9kaWNfc2FtcGxlcyA9IG51bV9zYW1wbGVzOwot CQlkZXZfcHJpdi0+cGVyZi5vYS5wZW5kaW5nX3BlcmlvZGljX3RzID0gbGFzdF90czsKLQkJcmV0 dXJuIChudW1fc2FtcGxlcyAhPSAwKTsKKwkJaWYgKHN0cmVhbS0+c2FtcGxlX2ZsYWdzICYgU0FN UExFX09BX1JFUE9SVCkgeworCQkJZGV2X3ByaXYtPnBlcmYub2Eubl9wZW5kaW5nX3BlcmlvZGlj X3NhbXBsZXMgPQorCQkJCQkJCQludW1fc2FtcGxlczsKKwkJCWRldl9wcml2LT5wZXJmLm9hLnBl bmRpbmdfcGVyaW9kaWNfdHMgPSBsYXN0X3RzOworCQkJcmV0dXJuIChudW1fc2FtcGxlcyAhPSAw KTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gZmFsc2U7CiAKIAljYXNlIENTX0JVRl9IQVZFX0RBVEE6 CiAJCXJldHVybiB0cnVlOwpAQCAtMTI5MywxNSArMTQ5MSwxNiBAQCBzdGF0aWMgYm9vbCBzdHJl YW1faGF2ZV9kYXRhX191bmxvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQog CX0KIH0KIAotc3RhdGljIGJvb2wgaTkxNV9vYV9jYW5fcmVhZF91bmxvY2tlZChzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtKQorc3RhdGljIGJvb2wgaTkxNV9yaW5nX3N0cmVhbV9jYW5f cmVhZF91bmxvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQogewogCiAJcmV0 dXJuIHN0cmVhbV9oYXZlX2RhdGFfX3VubG9ja2VkKHN0cmVhbSk7CiB9CiAKLXN0YXRpYyBpbnQg aTkxNV9vYV93YWl0X3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCitz dGF0aWMgaW50IGk5MTVfcmluZ19zdHJlYW1fd2FpdF91bmxvY2tlZChzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHN0cmVhbS0+ZGV2X3ByaXY7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQgPSBzdHJlYW0tPmVu Z2luZTsKIAlpbnQgcmV0OwogCiAJLyogV2Ugd291bGQgd2FpdCBpbmRlZmluaXRseSBpZiBwZXJp b2RpYyBzYW1wbGluZyBpcyBub3QgZW5hYmxlZCAqLwpAQCAtMTMwOSw0OSArMTUwOCw1MiBAQCBz dGF0aWMgaW50IGk5MTVfb2Ffd2FpdF91bmxvY2tlZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAq c3RyZWFtKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChzdHJlYW0tPmNzX21vZGUpIHsKLQkJcmV0 ID0gaTkxNV9vYV9yY3Nfd2FpdF9ncHUoZGV2X3ByaXYpOworCQlyZXQgPSBpOTE1X3Jpbmdfc3Ry ZWFtX3dhaXRfZ3B1KGRldl9wcml2LCBpZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0Owog CX0KIAotCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2X3ByaXYtPnBlcmYub2Eu cG9sbF93cSwKKwlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldl9wcml2LT5wZXJm LnBvbGxfd3FbaWRdLAogCQkJCQlzdHJlYW1faGF2ZV9kYXRhX191bmxvY2tlZChzdHJlYW0pKTsK IH0KIAotc3RhdGljIHZvaWQgaTkxNV9vYV9wb2xsX3dhaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSwKK3N0YXRpYyB2b2lkIGk5MTVfcmluZ19zdHJlYW1fcG9sbF93YWl0KHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwK IAkJCSAgICAgIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKIAotCXBvbGxfd2FpdChmaWxlLCAmZGV2X3By aXYtPnBlcmYub2EucG9sbF93cSwgd2FpdCk7CisJcG9sbF93YWl0KGZpbGUsICZkZXZfcHJpdi0+ cGVyZi5wb2xsX3dxW3N0cmVhbS0+ZW5naW5lXSwgd2FpdCk7CiB9CiAKLXN0YXRpYyBpbnQgaTkx NV9vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCitzdGF0aWMgaW50IGk5 MTVfcmluZ19zdHJlYW1fcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJ c3RydWN0IGk5MTVfcGVyZl9yZWFkX3N0YXRlICpyZWFkX3N0YXRlKQogewogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CiAKIAlpZiAoc3RyZWFt LT5jc19tb2RlKQotCQlyZXR1cm4gb2FfcmNzX2FwcGVuZF9yZXBvcnRzKHN0cmVhbSwgcmVhZF9z dGF0ZSk7Ci0JZWxzZQorCQlyZXR1cm4gYXBwZW5kX2NvbW1hbmRfc3RyZWFtX3NhbXBsZXMoc3Ry ZWFtLCByZWFkX3N0YXRlKTsKKwllbHNlIGlmIChzdHJlYW0tPnNhbXBsZV9mbGFncyAmIFNBTVBM RV9PQV9SRVBPUlQpCiAJCXJldHVybiBkZXZfcHJpdi0+cGVyZi5vYS5vcHMucmVhZChzdHJlYW0s IHJlYWRfc3RhdGUsCiAJCQkJCQlVMzJfTUFYLCBVMzJfTUFYKTsKKwllbHNlCisJCXJldHVybiAt RUlOVkFMOwogfQogCiBzdGF0aWMgdm9pZAotZnJlZV9jb21tYW5kX3N0cmVhbV9idWYoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorZnJlZV9jb21tYW5kX3N0cmVhbV9idWYoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCWVudW0gaW50ZWxfZW5naW5lX2lk IGlkKQogewogCW11dGV4X2xvY2soJmRldl9wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlp OTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1 Zi5vYmopOwotCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGRldl9wcml2LT5wZXJmLmNvbW1h bmRfc3RyZWFtX2J1Zi5vYmopOworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoZGV2X3ByaXYt PnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5vYmopOworCWk5MTVfZ2VtX29iamVjdF9nZ3R0 X3VucGluKGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1ZltpZF0ub2JqKTsKIAlkcm1f Z2VtX29iamVjdF91bnJlZmVyZW5jZSgKLQkJCSZkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVh bV9idWYub2JqLT5iYXNlKTsKKwkJCSZkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWZb aWRdLm9iai0+YmFzZSk7CiAKLQlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYub2Jq ID0gTlVMTDsKLQlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYudm1hID0gTlVMTDsK LQlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYuYWRkciA9IE5VTEw7CisJZGV2X3By aXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5vYmogPSBOVUxMOworCWRldl9wcml2LT5w ZXJmLmNvbW1hbmRfc3RyZWFtX2J1ZltpZF0udm1hID0gTlVMTDsKKwlkZXZfcHJpdi0+cGVyZi5j b21tYW5kX3N0cmVhbV9idWZbaWRdLmFkZHIgPSBOVUxMOwogCiAJbXV0ZXhfdW5sb2NrKCZkZXZf cHJpdi0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogfQpAQCAtMTM3MiwxNiArMTU3NCwxMyBAQCBmcmVl X29hX2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAltdXRleF91bmxvY2so Jmk5MTUtPmRldi0+c3RydWN0X211dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV9vYV9zdHJl YW1fZGVzdHJveShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQorc3RhdGljIHZvaWQg aTkxNV9yaW5nX3N0cmVhbV9kZXN0cm95KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0p CiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJp djsKIAotCUJVR19PTihzdHJlYW0gIT0gZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVh bSk7Ci0KLQlpZiAoc3RyZWFtLT5jc19tb2RlKQotCQlmcmVlX2NvbW1hbmRfc3RyZWFtX2J1Zihk ZXZfcHJpdik7CisJQlVHX09OKHN0cmVhbSAhPSBkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVfc3Ry ZWFtKTsKIAotCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIub2JqKSB7CisJaWYgKHN0 cmVhbS0+dXNpbmdfb2EpIHsKIAkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLmRpc2FibGVfbWV0cmlj X3NldChkZXZfcHJpdik7CiAKIAkJZnJlZV9vYV9idWZmZXIoZGV2X3ByaXYpOwpAQCAtMTM5MCw3 ICsxNTg5LDEwIEBAIHN0YXRpYyB2b2lkIGk5MTVfb2Ffc3RyZWFtX2Rlc3Ryb3koc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIAkJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYp OwogCX0KIAotCWRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0gPSBOVUxMOworCWlm IChzdHJlYW0tPmNzX21vZGUpCisJCWZyZWVfY29tbWFuZF9zdHJlYW1fYnVmKGRldl9wcml2LCBz dHJlYW0tPmVuZ2luZSk7CisKKwlkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFtID0gTlVM TDsKIH0KIAogc3RhdGljIHZvaWQgZ2VuN19pbml0X29hX2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCkBAIC0xNTIxLDI5ICsxNzIzLDMwIEBAIHN0YXRpYyBpbnQgYWxs b2Nfb2FfYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlyZXR1cm4g MDsKIH0KIAotc3RhdGljIGludCBhbGxvY19jb21tYW5kX3N0cmVhbV9idWYoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIGludCBhbGxvY19jb21tYW5kX3N0cmVhbV9i dWYoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQllbnVtIGludGVsX2Vu Z2luZV9pZCBpZCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYm87CiAJdTggKm9i al9hZGRyOwogCWludCByZXQ7CiAKLQlCVUdfT04oZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJl YW1fYnVmLm9iaik7CisJQlVHX09OKGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zltp ZF0ub2JqKTsKIAogCXJldCA9IGFsbG9jX29iaihkZXZfcHJpdiwgJmJvLCAmb2JqX2FkZHIpOwog CWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVh bV9idWYub2JqID0gYm87Ci0JZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmLmFkZHIg PSBvYmpfYWRkcjsKLQlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWYudm1hID0gaTkx NV9nZW1fb2JqX3RvX2dndHQoYm8pOwotCWlmIChXQVJOX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJp di0+cGVyZi5ub2RlX2xpc3QpKSkKLQkJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5wZXJmLm5v ZGVfbGlzdCk7CisJZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5vYmogPSBi bzsKKwlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWZbaWRdLmFkZHIgPSBvYmpfYWRk cjsKKwlkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVhbV9idWZbaWRdLnZtYSA9IGk5MTVfZ2Vt X29ial90b19nZ3R0KGJvKTsKKwlpZiAoV0FSTl9PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPnBl cmYubm9kZV9saXN0W2lkXSkpKQorCQlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnBlcmYubm9k ZV9saXN0W2lkXSk7CiAKIAlEUk1fREVCVUdfRFJJVkVSKAogCQkiY29tbWFuZCBzdHJlYW0gYnVm IGluaXRpYWxpemVkLCBndHQgb2Zmc2V0ID0gMHgleCwgdmFkZHIgPSAlcCIsCiAJCSAodW5zaWdu ZWQgaW50KQotCQkgZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmLnZtYS0+bm9kZS5z dGFydCwKLQkJIGRldl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1Zi5hZGRyKTsKKwkJIGRl dl9wcml2LT5wZXJmLmNvbW1hbmRfc3RyZWFtX2J1ZltpZF0udm1hLT5ub2RlLnN0YXJ0LAorCQkg ZGV2X3ByaXYtPnBlcmYuY29tbWFuZF9zdHJlYW1fYnVmW2lkXS5hZGRyKTsKIAogCXJldHVybiAw OwogfQpAQCAtMTc5MSwxNCArMTk5NCwxNCBAQCBzdGF0aWMgdm9pZCBnZW43X3VwZGF0ZV9vYWNv bnRyb2xfbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlhc3Nl cnRfc3Bpbl9sb2NrZWQoJmRldl9wcml2LT5wZXJmLmhvb2tfbG9jayk7CiAKLQlpZiAoZGV2X3By aXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbS0+c3RhdGUgIT0KKwlpZiAoZGV2X3ByaXYtPnBl cmYuZXhjbHVzaXZlX3N0cmVhbS0+c3RhdGUgIT0KIAkJCQkJSTkxNV9QRVJGX1NUUkVBTV9ESVNB QkxFRCkgewogCQl1bnNpZ25lZCBsb25nIGN0eF9pZCA9IDA7CiAKLQkJaWYgKGRldl9wcml2LT5w ZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0tPmN0eCkKKwkJaWYgKGRldl9wcml2LT5wZXJmLmV4Y2x1 c2l2ZV9zdHJlYW0tPmN0eCkKIAkJCWN0eF9pZCA9IGRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmlj X2N0eF9pZDsKIAotCQlpZiAoZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbS0+Y3R4 ID09IE5VTEwgfHwgY3R4X2lkKSB7CisJCWlmIChkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVfc3Ry ZWFtLT5jdHggPT0gTlVMTCB8fCBjdHhfaWQpIHsKIAkJCWJvb2wgcGVyaW9kaWMgPSBkZXZfcHJp di0+cGVyZi5vYS5wZXJpb2RpYzsKIAkJCXUzMiBwZXJpb2RfZXhwb25lbnQgPSBkZXZfcHJpdi0+ cGVyZi5vYS5wZXJpb2RfZXhwb25lbnQ7CiAJCQl1MzIgcmVwb3J0X2Zvcm1hdCA9IGRldl9wcml2 LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXQ7CkBAIC0xODQ4LDE0ICsyMDUxLDE1IEBAIHN0YXRp YyB2b2lkIGdlbjhfb2FfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IAkJCQkgICBHRU44X09BX0NPVU5URVJfRU5BQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV9v YV9zdHJlYW1fZW5hYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCitzdGF0aWMg dm9pZCBpOTE1X3Jpbmdfc3RyZWFtX2VuYWJsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3Ry ZWFtKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2 X3ByaXY7CiAKLQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZW5hYmxlKGRldl9wcml2KTsKKwlp ZiAoc3RyZWFtLT5zYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JUKQorCQlkZXZfcHJpdi0+ cGVyZi5vYS5vcHMub2FfZW5hYmxlKGRldl9wcml2KTsKIAotCWlmIChkZXZfcHJpdi0+cGVyZi5v YS5wZXJpb2RpYykKLQkJaHJ0aW1lcl9zdGFydCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF9jaGVj a190aW1lciwKKwlpZiAoc3RyZWFtLT5jc19tb2RlIHx8IGRldl9wcml2LT5wZXJmLm9hLnBlcmlv ZGljKQorCQlocnRpbWVyX3N0YXJ0KCZkZXZfcHJpdi0+cGVyZi5wb2xsX2NoZWNrX3RpbWVyLAog CQkJICAgICAgbnNfdG9fa3RpbWUoUE9MTF9QRVJJT0QpLAogCQkJICAgICAgSFJUSU1FUl9NT0RF X1JFTF9QSU5ORUQpOwogfQpAQCAtMTg3MCwxOSArMjA3NCwyMCBAQCBzdGF0aWMgdm9pZCBnZW44 X29hX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCUk5MTVfV1JJ VEUoR0VOOF9PQUNPTlRST0wsIDApOwogfQogCi1zdGF0aWMgdm9pZCBpOTE1X29hX3N0cmVhbV9k aXNhYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCitzdGF0aWMgdm9pZCBpOTE1 X3Jpbmdfc3RyZWFtX2Rpc2FibGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKIHsK IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owog Ci0JaWYgKGRldl9wcml2LT5wZXJmLm9hLnBlcmlvZGljKQotCQlocnRpbWVyX2NhbmNlbCgmZGV2 X3ByaXYtPnBlcmYub2EucG9sbF9jaGVja190aW1lcik7CisJaWYgKHN0cmVhbS0+Y3NfbW9kZSB8 fCBkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYykKKwkJaHJ0aW1lcl9jYW5jZWwoJmRldl9wcml2 LT5wZXJmLnBvbGxfY2hlY2tfdGltZXIpOwogCiAJaWYgKHN0cmVhbS0+Y3NfbW9kZSkgewotCQlp OTE1X29hX3Jjc193YWl0X2dwdShkZXZfcHJpdik7Ci0JCWk5MTVfb2FfcmNzX2ZyZWVfcmVxdWVz dHMoZGV2X3ByaXYpOworCQlpOTE1X3Jpbmdfc3RyZWFtX3dhaXRfZ3B1KGRldl9wcml2LCBzdHJl YW0tPmVuZ2luZSk7CisJCWk5MTVfcmluZ19zdHJlYW1fZnJlZV9yZXF1ZXN0cyhkZXZfcHJpdiwg c3RyZWFtLT5lbmdpbmUpOwogCX0KIAotCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9kaXNhYmxl KGRldl9wcml2KTsKKwlpZiAoc3RyZWFtLT5zYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0FfUkVQT1JU KQorCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZGlzYWJsZShkZXZfcHJpdik7CiB9CiAKIHN0 YXRpYyB1NjQgb2FfZXhwb25lbnRfdG9fbnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBpbnQgZXhwb25lbnQpCkBAIC0xODkyLDE3ICsyMDk3LDE3IEBAIHN0YXRpYyB1NjQgb2Ff ZXhwb25lbnRfdG9fbnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgZXhw b25lbnQpCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbV9vcHMgaTkx NV9vYV9zdHJlYW1fb3BzID0gewotCS5kZXN0cm95ID0gaTkxNV9vYV9zdHJlYW1fZGVzdHJveSwK LQkuZW5hYmxlID0gaTkxNV9vYV9zdHJlYW1fZW5hYmxlLAotCS5kaXNhYmxlID0gaTkxNV9vYV9z dHJlYW1fZGlzYWJsZSwKLQkuY2FuX3JlYWRfdW5sb2NrZWQgPSBpOTE1X29hX2Nhbl9yZWFkX3Vu bG9ja2VkLAotCS53YWl0X3VubG9ja2VkID0gaTkxNV9vYV93YWl0X3VubG9ja2VkLAotCS5wb2xs X3dhaXQgPSBpOTE1X29hX3BvbGxfd2FpdCwKLQkucmVhZCA9IGk5MTVfb2FfcmVhZCwKLQkuY29t bWFuZF9zdHJlYW1faG9vayA9IGk5MTVfcGVyZl9jb21tYW5kX3N0cmVhbV9ob29rX29hLAorCS5k ZXN0cm95ID0gaTkxNV9yaW5nX3N0cmVhbV9kZXN0cm95LAorCS5lbmFibGUgPSBpOTE1X3Jpbmdf c3RyZWFtX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGk5MTVfcmluZ19zdHJlYW1fZGlzYWJsZSwKKwku Y2FuX3JlYWRfdW5sb2NrZWQgPSBpOTE1X3Jpbmdfc3RyZWFtX2Nhbl9yZWFkX3VubG9ja2VkLAor CS53YWl0X3VubG9ja2VkID0gaTkxNV9yaW5nX3N0cmVhbV93YWl0X3VubG9ja2VkLAorCS5wb2xs X3dhaXQgPSBpOTE1X3Jpbmdfc3RyZWFtX3BvbGxfd2FpdCwKKwkucmVhZCA9IGk5MTVfcmluZ19z dHJlYW1fcmVhZCwKKwkuY29tbWFuZF9zdHJlYW1faG9vayA9IGk5MTVfcmluZ19zdHJlYW1fY3Nf aG9vaywKIH07CiAKLXN0YXRpYyBpbnQgaTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9w ZXJmX3N0cmVhbSAqc3RyZWFtLAorc3RhdGljIGludCBpOTE1X3Jpbmdfc3RyZWFtX2luaXQoc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVf cGVyZl9vcGVuX3BhcmFtICpwYXJhbSwKIAkJCSAgICAgICBzdHJ1Y3QgcGVyZl9vcGVuX3Byb3Bl cnRpZXMgKnByb3BzKQogewpAQCAtMTkxMSwxNSArMjExNiwxNiBAQCBzdGF0aWMgaW50IGk5MTVf b2Ffc3RyZWFtX2luaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCQkJCSAg ICAgIFNBTVBMRV9PQV9TT1VSQ0VfSU5GTyk7CiAJYm9vbCByZXF1aXJlX2NzX21vZGUgPSBwcm9w cy0+c2FtcGxlX2ZsYWdzICYgKFNBTVBMRV9QSUQgfAogCQkJCQkJICAgICAgU0FNUExFX1RBRyk7 Ci0JYm9vbCBjc19zYW1wbGVfZGF0YSA9IHByb3BzLT5zYW1wbGVfZmxhZ3MgJiBTQU1QTEVfT0Ff UkVQT1JUOworCWJvb2wgY3Nfc2FtcGxlX2RhdGEgPSBwcm9wcy0+c2FtcGxlX2ZsYWdzICYgKFNB TVBMRV9PQV9SRVBPUlQgfAorCQkJCQkJCVNBTVBMRV9UUyk7CiAJaW50IHJldDsKIAogCS8qIFRv IGF2b2lkIHRoZSBjb21wbGV4aXR5IG9mIGhhdmluZyB0byBhY2N1cmF0ZWx5IGZpbHRlcgogCSAq IGNvdW50ZXIgcmVwb3J0cyBhbmQgbWFyc2hhbCB0byB0aGUgYXBwcm9wcmlhdGUgY2xpZW50CiAJ ICogd2UgY3VycmVudGx5IG9ubHkgYWxsb3cgZXhjbHVzaXZlIGFjY2VzcwogCSAqLwotCWlmIChk ZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNpdmVfc3RyZWFtKSB7Ci0JCURSTV9FUlJPUigiT0EgdW5p dCBhbHJlYWR5IGluIHVzZVxuIik7CisJaWYgKGRldl9wcml2LT5wZXJmLmV4Y2x1c2l2ZV9zdHJl YW0pIHsKKwkJRFJNX0VSUk9SKCJTdHJlYW0gYWxyZWFkeSBpbiB1c2VcbiIpOwogCQlyZXR1cm4g LUVCVVNZOwogCX0KIApAQCAtMTk2MSw2ICsyMTY3LDcgQEAgc3RhdGljIGludCBpOTE1X29hX3N0 cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQlyZXR1cm4gLUVJ TlZBTDsKIAkJfQogCQlzdHJlYW0tPmVuZ2luZT0gUkNTOworCQlzdHJlYW0tPnVzaW5nX29hID0g dHJ1ZTsKIAogCQlmb3JtYXRfc2l6ZSA9CiAJCQlkZXZfcHJpdi0+cGVyZi5vYS5vYV9mb3JtYXRz W3Byb3BzLT5vYV9mb3JtYXRdLnNpemU7CkBAIC0yMDUzLDggKzIyNjAsMjIgQEAgc3RhdGljIGlu dCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJ CQlyZXF1aXJlX2NzX21vZGUgPSB0cnVlOwogCX0KIAorCWlmIChwcm9wcy0+c2FtcGxlX2ZsYWdz ICYgU0FNUExFX1RTKSB7CisJCXN0cmVhbS0+c2FtcGxlX2ZsYWdzIHw9IFNBTVBMRV9UUzsKKwkJ c3RyZWFtLT5zYW1wbGVfc2l6ZSArPSBJOTE1X1BFUkZfVFNfU0FNUExFX1NJWkU7CisKKwkJLyoK KwkJICogTkI6IGl0J3MgbWVhbmluZ2Z1bCB0byByZXF1ZXN0IFNBTVBMRV9UUyB3aXRoIGp1c3Qg Q1MKKwkJICogbW9kZSBvciBwZXJpb2RpYyBPQSBtb2RlIHNhbXBsaW5nIGJ1dCB3ZSBkb24ndCBh bGxvdworCQkgKiBTQU1QTEVfVFMgd2l0aG91dCBlaXRoZXIgbW9kZQorCQkgKi8KKwkJaWYgKCFy ZXF1aXJlX29hX3VuaXQpCisJCQlyZXF1aXJlX2NzX21vZGUgPSB0cnVlOworCX0KKwogCWlmIChy ZXF1aXJlX2NzX21vZGUgJiYgIXByb3BzLT5jc19tb2RlKSB7Ci0JCURSTV9FUlJPUigiUElEIG9y IFRBRyBzYW1wbGluZyByZXF1aXJlIGEgcmluZyB0byBiZSBzcGVjaWZpZWQiKTsKKwkJRFJNX0VS Uk9SKAorCQkJIlBJRCwgVEFHIG9yIFRTIHNhbXBsaW5nIHJlcXVpcmUgYSByaW5nIHRvIGJlIHNw ZWNpZmllZCIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGNzX2Vycm9yOwogCX0KQEAgLTIw NjksMTEgKzIyOTAsMTEgQEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBp OTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAKIAkJLyoKIAkJICogVGhlIG9ubHkgdGltZSB3ZSBz aG91bGQgYWxsb3cgZW5hYmxpbmcgQ1MgbW9kZSBpZiBpdCdzIG5vdAotCQkgKiBzdHJpY3RseSBy ZXF1aXJlZCwgaXMgaWYgU0FNUExFX0NUWF9JRCBoYXMgYmVlbiByZXF1ZXN0ZWQKLQkJICogYXMg aXQncyB1c2FibGUgd2l0aCBwZXJpb2RpYyBPQSBvciBDUyBzYW1wbGluZy4KKwkJICogc3RyaWN0 bHkgcmVxdWlyZWQsIGlzIGlmIFNBTVBMRV9DVFhfSUQgIG9yIFNBTVBMRV9UUyBoYXMgYmVlbgor CQkgKiByZXF1ZXN0ZWQsIGFzIHRoZXkncmUgdXNhYmxlIHdpdGggcGVyaW9kaWMgT0Egb3IgQ1Mg c2FtcGxpbmcuCiAJCSAqLwogCQlpZiAoIXJlcXVpcmVfY3NfbW9kZSAmJgotCQkgICAgIShwcm9w cy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX0NUWF9JRCkpIHsKKwkJICAgICEocHJvcHMtPnNhbXBs ZV9mbGFncyAmIChTQU1QTEVfQ1RYX0lEfFNBTVBMRV9UUykpKSB7CiAJCQlEUk1fRVJST1IoCiAJ CQkJIlJpbmcgZ2l2ZW4gd2l0aG91dCByZXF1ZXN0aW5nIGFueSBDUyBzcGVjaWZpYyBwcm9wZXJ0 eSIpOwogCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTIwODEsNiArMjMwMiw3IEBAIHN0YXRpYyBpbnQg aTkxNV9vYV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQl9 CiAKIAkJc3RyZWFtLT5jc19tb2RlID0gdHJ1ZTsKKwkJc3RyZWFtLT5lbmdpbmUgPSBwcm9wcy0+ ZW5naW5lOwogCiAJCWlmIChwcm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX1BJRCkgewogCQkJ c3RyZWFtLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX1BJRDsKQEAgLTIwOTIsMTQgKzIzMTQsMTQg QEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0sCiAJCQlzdHJlYW0tPnNhbXBsZV9zaXplICs9IDQ7CiAJCX0KIAotCQlyZXQgPSBh bGxvY19jb21tYW5kX3N0cmVhbV9idWYoZGV2X3ByaXYpOworCQlyZXQgPSBhbGxvY19jb21tYW5k X3N0cmVhbV9idWYoZGV2X3ByaXYsIHN0cmVhbS0+ZW5naW5lKTsKIAkJaWYgKHJldCkKIAkJCWdv dG8gY3NfZXJyb3I7CiAJfQogCiAJc3RyZWFtLT5vcHMgPSAmaTkxNV9vYV9zdHJlYW1fb3BzOwog Ci0JZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbSA9IHN0cmVhbTsKKwlkZXZfcHJp di0+cGVyZi5leGNsdXNpdmVfc3RyZWFtID0gc3RyZWFtOwogCiAJcmV0dXJuIDA7CiAKQEAgLTIx MzMsOCArMjM1NSw4IEBAIHN0YXRpYyB2b2lkIGk5MTVfb2FfY29udGV4dF9waW5fbm90aWZ5X2xv Y2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJICAgIGRldl9wcml2LT5w ZXJmLm9hLm9wcy51cGRhdGVfaHdfY3R4X2lkX2xvY2tlZCA9PSBOVUxMKQogCQlyZXR1cm47CiAK LQlpZiAoZGV2X3ByaXYtPnBlcmYub2EuZXhjbHVzaXZlX3N0cmVhbSAmJgotCSAgICBkZXZfcHJp di0+cGVyZi5vYS5leGNsdXNpdmVfc3RyZWFtLT5jdHggPT0gY29udGV4dCkgeworCWlmIChkZXZf cHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFtICYmCisJICAgIGRldl9wcml2LT5wZXJmLmV4Y2x1 c2l2ZV9zdHJlYW0tPmN0eCA9PSBjb250ZXh0KSB7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmogPQogCQkJY29udGV4dC0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGU7CiAJCXUzMiBj dHhfaWQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKTsKQEAgLTIyMDMsOCArMjQyNSw4 IEBAIHZvaWQgaTkxNV9vYV9sZWdhY3lfY3R4X3N3aXRjaF9ub3RpZnkoc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXEpCiAJaWYgKGRldl9wcml2LT5wZXJmLm9hLm9wcy5sZWdhY3lfY3R4 X3N3aXRjaF91bmxvY2tlZCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlpZiAoZGV2X3ByaXYtPnBl cmYub2EuZXhjbHVzaXZlX3N0cmVhbSAmJgotCSAgICBkZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNp dmVfc3RyZWFtLT5zdGF0ZSAhPQorCWlmIChkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFt ICYmCisJICAgIGRldl9wcml2LT5wZXJmLmV4Y2x1c2l2ZV9zdHJlYW0tPnN0YXRlICE9CiAJCQkJ STkxNV9QRVJGX1NUUkVBTV9ESVNBQkxFRCkgewogCiAJCS8qIFhYWDogV2UgZG9uJ3QgdGFrZSBh IGxvY2sgaGVyZSBhbmQgdGhpcyBtYXkgcnVuCkBAIC0yMzQ1LDEzICsyNTY3LDEzIEBAIHN0YXRp YyBzc2l6ZV90IGk5MTVfcGVyZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAogCXJldHVybiByZXQ7 CiB9CiAKLXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBvYV9wb2xsX2NoZWNrX3RpbWVyX2Ni KHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQorc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHBv bGxfY2hlY2tfdGltZXJfY2Ioc3RydWN0IGhydGltZXIgKmhydGltZXIpCiB7CiAJc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0gKnN0cmVhbTsKIAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9CiAJCWNvbnRhaW5lcl9vZihocnRpbWVyLCB0eXBlb2YoKmRldl9wcml2KSwKLQkJCSAg ICAgcGVyZi5vYS5wb2xsX2NoZWNrX3RpbWVyKTsKKwkJCSAgICAgcGVyZi5wb2xsX2NoZWNrX3Rp bWVyKTsKIAogCS8qIE5vIG5lZWQgdG8gcHJvdGVjdCB0aGUgc3RyZWFtcyBsaXN0IGhlcmUsIHNp bmNlIHRoZSBocnRpbWVyIGlzCiAJICogZGlzYWJsZWQgYmVmb3JlIHRoZSBzdHJlYW0gaXMgcmVt b3ZlZCBmcm9tIGxpc3QsIGFuZCBjdXJyZW50bHkgYQpAQCAtMjM2MCw3ICsyNTgyLDcgQEAgc3Rh dGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IG9hX3BvbGxfY2hlY2tfdGltZXJfY2Ioc3RydWN0IGhy dGltZXIgKmhydGltZXIpCiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdHJlYW0sICZkZXZf cHJpdi0+cGVyZi5zdHJlYW1zLCBsaW5rKSB7CiAJCWlmIChzdHJlYW1faGF2ZV9kYXRhX191bmxv Y2tlZChzdHJlYW0pKQotCQkJd2FrZV91cCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSk7CisJ CQl3YWtlX3VwKCZkZXZfcHJpdi0+cGVyZi5wb2xsX3dxW3N0cmVhbS0+ZW5naW5lXSk7CiAJfQog CiAJaHJ0aW1lcl9mb3J3YXJkX25vdyhocnRpbWVyLCBuc190b19rdGltZShQT0xMX1BFUklPRCkp OwpAQCAtMjU2NCw3ICsyNzg2LDcgQEAgaW50IGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXN0cmVhbS0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKIAlz dHJlYW0tPmN0eCA9IHNwZWNpZmljX2N0eDsKIAotCXJldCA9IGk5MTVfb2Ffc3RyZWFtX2luaXQo c3RyZWFtLCBwYXJhbSwgcHJvcHMpOworCXJldCA9IGk5MTVfcmluZ19zdHJlYW1faW5pdChzdHJl YW0sIHBhcmFtLCBwcm9wcyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfYWxsb2M7CiAKQEAgLTI3 MDksMjEgKzI5MzEsMTIgQEAgc3RhdGljIGludCByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQljYXNlIERSTV9JOTE1X1BFUkZfUFJP UF9FTkdJTkU6IHsKIAkJCQl1bnNpZ25lZCBpbnQgdXNlcl9yaW5nX2lkID0KIAkJCQkJdmFsdWUg JiBJOTE1X0VYRUNfUklOR19NQVNLOwotCQkJCWVudW0gaW50ZWxfZW5naW5lX2lkIGVuZ2luZTsK IAogCQkJCWlmICh1c2VyX3JpbmdfaWQgPiBJOTE1X1VTRVJfUklOR1MpCiAJCQkJCXJldHVybiAt RUlOVkFMOwogCi0JCQkJLyogWFhYOiBDdXJyZW50bHkgb25seSBSQ1MgaXMgc3VwcG9ydGVkLgot CQkJCSAqIFJlbW92ZSB0aGlzIGNoZWNrIHdoZW4gc3VwcG9ydCBmb3Igb3RoZXIKLQkJCQkgKiBl bmdpbmVzIGlzIGFkZGVkCi0JCQkJICovCi0JCQkJZW5naW5lID0gdXNlcl9yaW5nX21hcFt1c2Vy X3JpbmdfaWRdOwotCQkJCWlmIChlbmdpbmUgIT0gUkNTKQotCQkJCQlyZXR1cm4gLUVJTlZBTDsK LQogCQkJCXByb3BzLT5jc19tb2RlID0gdHJ1ZTsKLQkJCQlwcm9wcy0+ZW5naW5lID0gZW5naW5l OworCQkJCXByb3BzLT5lbmdpbmUgPSB1c2VyX3JpbmdfbWFwW3VzZXJfcmluZ19pZF07CiAJCQl9 CiAJCQlicmVhazsKIAkJY2FzZSBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX0NUWF9JRDoKQEAg LTI3MzUsNiArMjk0OCw5IEBAIHN0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2VkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJY2FzZSBEUk1fSTkxNV9QRVJGX1BS T1BfU0FNUExFX1RBRzoKIAkJCXByb3BzLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX1RBRzsKIAkJ CWJyZWFrOworCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfVFM6CisJCQlwcm9wcy0+ c2FtcGxlX2ZsYWdzIHw9IFNBTVBMRV9UUzsKKwkJCWJyZWFrOwogCQljYXNlIERSTV9JOTE1X1BF UkZfUFJPUF9NQVg6CiAJCQlCVUcoKTsKIAkJfQpAQCAtMjgyNSw2ICszMDQxLDcgQEAgc3RhdGlj IHN0cnVjdCBjdGxfdGFibGUgZGV2X3Jvb3RbXSA9IHsKIHZvaWQgaTkxNV9wZXJmX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7CisJaW50IGk7CiAKIAlpZiAoIShJU19IQVNXRUxMKGRldikgfHwK IAkgICAgICBJU19CUk9BRFdFTEwoZGV2KSB8fCBJU19DSEVSUllWSUVXKGRldikgfHwKQEAgLTI4 MzYsMTcgKzMwNTMsMjAgQEAgdm9pZCBpOTE1X3BlcmZfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQogCWlmICghZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqKQogCQlyZXR1cm47CiAKLQlo cnRpbWVyX2luaXQoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxfY2hlY2tfdGltZXIsCisJaHJ0aW1l cl9pbml0KCZkZXZfcHJpdi0+cGVyZi5wb2xsX2NoZWNrX3RpbWVyLAogCQkgICAgIENMT0NLX01P Tk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7Ci0JZGV2X3ByaXYtPnBlcmYub2EucG9sbF9jaGVj a190aW1lci5mdW5jdGlvbiA9IG9hX3BvbGxfY2hlY2tfdGltZXJfY2I7Ci0JaW5pdF93YWl0cXVl dWVfaGVhZCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSk7CisJZGV2X3ByaXYtPnBlcmYucG9s bF9jaGVja190aW1lci5mdW5jdGlvbiA9IHBvbGxfY2hlY2tfdGltZXJfY2I7CisKKwlmb3IgKGkg PSAwOyBpIDwgSTkxNV9OVU1fRU5HSU5FUzsgaSsrKSB7CisJCUlOSVRfTElTVF9IRUFEKCZkZXZf cHJpdi0+cGVyZi5ub2RlX2xpc3RbaV0pOworCQlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnBl cmYubm9kZV9saXN0X2xvY2tbaV0pOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXZfcHJpdi0+ cGVyZi5wb2xsX3dxW2ldKTsKKwl9CiAKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnBlcmYu c3RyZWFtcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdCk7CiAJ bXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBlcmYubG9jayk7CiAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYt PnBlcmYuc3RyZWFtc19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnBlcmYuaG9v a19sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnBlcmYubm9kZV9saXN0X2xvY2sp OwogCiAJaWYgKElTX0hBU1dFTEwoZGV2KSkgewogCQlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuaW5p dF9vYV9idWZmZXIgPSBnZW43X2luaXRfb2FfYnVmZmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgK aW5kZXggNDMzMGM5Yi4uOTJmOWVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC00MTAs NiArNDEwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9y ZWdfdCByZWcpCiAjZGVmaW5lICAgTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVgJKDE8PDIxKQogI2Rl ZmluZSAgIE1JX0lOVkFMSURBVEVfVExCCQkoMTw8MTgpCiAjZGVmaW5lICAgTUlfRkxVU0hfRFdf T1BfU1RPUkVEVwkoMTw8MTQpCisjZGVmaW5lICAgTUlfRkxVU0hfRFdfT1BfU1RBTVAJCSgzPDwx NCkKICNkZWZpbmUgICBNSV9GTFVTSF9EV19PUF9NQVNLCQkoMzw8MTQpCiAjZGVmaW5lICAgTUlf RkxVU0hfRFdfTk9USUZZCQkoMTw8OCkKICNkZWZpbmUgICBNSV9JTlZBTElEQVRFX0JTRAkJKDE8 PDcpCkBAIC00OTEsNiArNDkyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdf dmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVmaW5lICAgUElQRV9DT05UUk9MX1RMQl9JTlZBTElE QVRFCQkJKDE8PDE4KQogI2RlZmluZSAgIFBJUEVfQ09OVFJPTF9NRURJQV9TVEFURV9DTEVBUgkJ KDE8PDE2KQogI2RlZmluZSAgIFBJUEVfQ09OVFJPTF9RV19XUklURQkJCQkoMTw8MTQpCisjZGVm aW5lICAgUElQRV9DT05UUk9MX1RJTUVTVEFNUF9XUklURQkJCSgzPDwxNCkKICNkZWZpbmUgICBQ SVBFX0NPTlRST0xfUE9TVF9TWU5DX09QX01BU0sgICAgICAgICAgICAgICAgKDM8PDE0KQogI2Rl ZmluZSAgIFBJUEVfQ09OVFJPTF9ERVBUSF9TVEFMTAkJCSgxPDwxMykKICNkZWZpbmUgICBQSVBF X0NPTlRST0xfV1JJVEVfRkxVU0gJCQkoMTw8MTIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkv ZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggYmQwZTQ4 ZC4uMDJkNDNhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBi L2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaApAQCAtMTI3Miw2ICsxMjcyLDEyIEBAIGVudW0g ZHJtX2k5MTVfcGVyZl9wcm9wZXJ0eV9pZCB7CiAJICovCiAJRFJNX0k5MTVfUEVSRl9QUk9QX1NB TVBMRV9UQUcsCiAKKwkvKioKKwkgKiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBzZXQgdG8g MSByZXF1ZXN0cyBpbmNsdXNpb24gb2YgdGltZXN0YW1wCisJICogaW4gdGhlIHBlcmYgc2FtcGxl IGRhdGEuCisJICovCisJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9UUywKKwogCURSTV9JOTE1 X1BFUkZfUFJPUF9NQVggLyogbm9uLUFCSSAqLwogfTsKIApAQCAtMTM0MCw2ICsxMzQ2LDcgQEAg ZW51bSBkcm1faTkxNV9wZXJmX3JlY29yZF90eXBlIHsKIAkgKiAgICAgeyB1MzIgY3R4X2lkOyB9 ICYmIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfQ1RYX0lECiAJICogICAgIHsgdTMyIHBpZDsg fSAmJiBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX1BJRAogCSAqICAgICB7IHUzMiB0YWc7IH0g JiYgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9UQUcKKwkgKiAgICAgeyB1NjQgdGltZXN0YW1w OyB9ICYmIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfVFMKIAkgKiAgICAgeyB1MzIgb2FfcmVw b3J0W107IH0gJiYgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQQogCSAqIH07CiAJICovCi0t IAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==