From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 1/7] drm/i915: Record GT workarounds in a list Date: Fri, 30 Nov 2018 17:44:06 +0000 Message-ID: <20181130174412.15767-2-tvrtko.ursulin@linux.intel.com> References: <20181130174412.15767-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id ACF9E6E64D for ; Fri, 30 Nov 2018 17:44:18 +0000 (UTC) In-Reply-To: <20181130174412.15767-1-tvrtko.ursulin@linux.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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClRvIGVuYWJs ZSBsYXRlciB2ZXJpZmljYXRpb24gb2YgR1Qgd29ya2Fyb3VuZCBzdGF0ZSBhdCB2YXJpb3VzIHN0 YWdlcyBvZgpkcml2ZXIgbGlmZXRpbWUsIHdlIHJlY29yZCB0aGUgbGlzdCBvZiBhcHBsaWNhYmxl IG9uZXMgcGVyIHBsYXRmb3JtcyB0byBhCmxpc3QsIGZyb20gd2hpY2ggdGhleSBhcmUgYWxzbyBh cHBsaWVkLgoKVGhlIGFkZGVkIGRhdGEgc3RydWN0dXJlIGlzIGEgc2ltcGxlIGFycmF5IG9mIHJl Z2lzdGVyLCBtYXNrIGFuZCB2YWx1ZQppdGVtcywgd2hpY2ggaXMgYWxsb2NhdGVkIG9uIGRlbWFu ZCBhcyB3b3JrYXJvdW5kcyBhcmUgYWRkZWQgdG8gdGhlIGxpc3QuCgpUaGlzIGlzIGEgdGVtcG9y YXJ5IGltcGxlbWVudGF0aW9uIHdoaWNoIGxhdGVyIGluIHRoZSBzZXJpZXMgZ2V0cyBmdXNlZAp3 aXRoIHRoZSBleGlzdGluZyBwZXIgY29udGV4dCB3b3JrYXJvdW5kIGxpc3QgaGFuZGxpbmcuIEl0 IGlzIHNlcGFyYXRlZCBhdAp0aGlzIHN0YWdlIHNpbmNlIHRoZSBmb2xsb3dpbmcgcGF0Y2ggZml4 ZXMgYSBidWcgd2hpY2ggbmVlZHMgdG8gYmUgYXMgZWFzeQp0byBiYWNrcG9ydCBhcyBwb3NzaWJs ZS4KCkFsc28sIHNpbmNlIGluIHRoZSBmb2xsb3dpbmcgcGF0Y2ggd2Ugd2lsbCBiZSBhZGRpbmcg YSBuZXcgY2xhc3Mgb2YKd29ya2Fyb3VuZHMgKHBlciBlbmdpbmUpIHdoaWNoIGNhbiBiZSBhcHBs aWVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHdlCnN0cmFpZ2h0IGF3YXkgbWFrZSB0aGUgcHJv dmlzaW9uIGZvciBzYWZlIHJlYWQtbW9kaWZ5LXdyaXRlIGN5Y2xlLgoKU2lnbmVkLW9mZi1ieTog VHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uYyAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3Jr YXJvdW5kcy5jIHwgNDQzICsrKysrKysrKysrKysrKy0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oIHwgIDIyICsrCiA1IGZpbGVzIGNoYW5nZWQsIDMyNyBp bnNlcnRpb25zKCspLCAxNDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5k ZXggZTM5MDE2NzEzNDY0Li4yZjNkYzFjZjgzYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpA QCAtMTQ1Myw2ICsxNDUzLDcgQEAgc3RhdGljIGludCBpOTE1X2RyaXZlcl9pbml0X2h3KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAogCWludGVsX3VuY29yZV9zYW5pdGl6ZShk ZXZfcHJpdik7CiAKKwlpbnRlbF9ndF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKIAlpOTE1 X2dlbV9sb2FkX2luaXRfZmVuY2VzKGRldl9wcml2KTsKIAogCS8qIE9uIHRoZSA5NDVHL0dNLCB0 aGUgY2hpcHNldCByZXBvcnRzIHRoZSBNU0kgY2FwYWJpbGl0eSBvbiB0aGUKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCmluZGV4IDQzYWM2ODczYTJiYi4uOWRkYmNjMWYzNTU0IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVy LmgiCiAjaW5jbHVkZSAiaW50ZWxfdW5jb3JlLmgiCiAjaW5jbHVkZSAiaW50ZWxfd29wY20uaCIK KyNpbmNsdWRlICJpbnRlbF93b3JrYXJvdW5kcy5oIgogI2luY2x1ZGUgImludGVsX3VjLmgiCiAK ICNpbmNsdWRlICJpOTE1X2dlbS5oIgpAQCAtMTY1Miw2ICsxNjUzLDcgQEAgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgewogCWludCBkcGlvX3BoeV9pb3NmX3BvcnRbSTkxNV9OVU1fUEhZU19WTFZd OwogCiAJc3RydWN0IGk5MTVfd29ya2Fyb3VuZHMgd29ya2Fyb3VuZHM7CisJc3RydWN0IGk5MTVf d2FfbGlzdCBndF93YV9saXN0OwogCiAJc3RydWN0IGk5MTVfZnJvbnRidWZmZXJfdHJhY2tpbmcg ZmJfdHJhY2tpbmc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IGM1NWIxZjc1Yzk4MC4u MThhZGIzZGQxZmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTU3MDYsNiArNTcwNiw4 IEBAIHZvaWQgaTkxNV9nZW1fZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiAJaTkxNV9nZW1fY29udGV4dHNfZmluaShkZXZfcHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZkZXZf cHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CiAKKwlpbnRlbF93YV9saXN0X2ZyZWUoJmRldl9wcml2 LT5ndF93YV9saXN0KTsKKwogCWludGVsX2NsZWFudXBfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsK IAogCWludGVsX3VjX2ZpbmlfbWlzYyhkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfd29ya2Fyb3VuZHMuYwppbmRleCBlNWNkNmM2YzY2YzMuLmZmMjBlYmY5ZTA0MCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jCkBAIC00OCw2ICs0OCwxOCBAQAog ICogLSBQdWJsaWMgZnVuY3Rpb25zIHRvIGluaXQgb3IgYXBwbHkgdGhlIGdpdmVuIHdvcmthcm91 bmQgdHlwZS4KICAqLwogCitzdGF0aWMgdm9pZCB3YV9pbml0X3N0YXJ0KHN0cnVjdCBpOTE1X3dh X2xpc3QgKndhbCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl3YWwtPm5hbWUgPSBuYW1lOworfQor CitzdGF0aWMgdm9pZCB3YV9pbml0X2ZpbmlzaChzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCit7 CisJaWYgKHdhbC0+Y291bnQpCisJCURSTV9ERUJVR19EUklWRVIoIkluaXRpYWxpemVkICV1ICVz IHdvcmthcm91bmRzXG4iLAorCQkJCSB3YWwtPmNvdW50LCB3YWwtPm5hbWUpOworfQorCiBzdGF0 aWMgdm9pZCB3YV9hZGQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCSAgIGk5MTVf cmVnX3QgcmVnLCBjb25zdCB1MzIgbWFzaywgY29uc3QgdTMyIHZhbCkKIHsKQEAgLTU3NSwyOCAr NTg3LDg4IEBAIGludCBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfZW1pdChzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYmR3X2d0X3dvcmthcm91bmRz X2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkCit3 YWxfYWRkKHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCwgY29uc3Qgc3RydWN0IGk5MTVfd2EgKndh KQoreworCWNvbnN0IHVuc2lnbmVkIGludCBncm93ID0gNDsKKworCWlmICh3YWwtPl9fc2l6ZSA9 PSB3YWwtPmNvdW50KSB7CisJCXN0cnVjdCBpOTE1X3dhICpsaXN0OworCisJCWxpc3QgPSBrY2Fs bG9jKHdhbC0+X19zaXplICsgZ3Jvdywgc2l6ZW9mKCp3YSksIEdGUF9LRVJORUwpOworCQlpZiAo IWxpc3QpIHsKKwkJCURSTV9FUlJPUigiTm8gc3BhY2UgZm9yIHdvcmthcm91bmQgaW5pdCFcbiIp OworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHdhbC0+bGlzdCkKKwkJCW1lbWNweShsaXN0LCB3 YWwtPmxpc3QsIHNpemVvZigqd2EpICogd2FsLT5jb3VudCk7CisKKwkJd2FsLT5saXN0ID0gbGlz dDsKKwkJd2FsLT5fX3NpemUgKz0gZ3JvdzsKKwl9CisKKwltZW1jcHkoJndhbC0+bGlzdFt3YWwt PmNvdW50XSwgd2EsIHNpemVvZigqd2EpKTsKKwl3YWwtPmNvdW50Kys7Cit9CisKK3N0YXRpYyB2 b2lkCit3YV9tYXNrZWRfZW4oc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsLCBpOTE1X3JlZ190IHJl ZywgdTMyIHZhbCkKIHsKKwlzdHJ1Y3QgaTkxNV93YSB3YSA9IHsKKwkJLnJlZyA9IHJlZywKKwkJ Lm1hc2sgPSB2YWwsCisJCS52YWwgPSBfTUFTS0VEX0JJVF9FTkFCTEUodmFsKQorCX07CisKKwl3 YWxfYWRkKHdhbCwgJndhKTsKK30KKworc3RhdGljIHZvaWQKK3dhX3dyaXRlX21hc2tlZF9vcihz dHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwsIGk5MTVfcmVnX3QgcmVnLCB1MzIgbWFzaywKKwkJICAg dTMyIHZhbCkKK3sKKwlzdHJ1Y3QgaTkxNV93YSB3YSA9IHsKKwkJLnJlZyA9IHJlZywKKwkJLm1h c2sgPSBtYXNrLAorCQkudmFsID0gdmFsCisJfTsKKworCXdhbF9hZGQod2FsLCAmd2EpOwogfQog Ci1zdGF0aWMgdm9pZCBjaHZfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQKK3dhX3dyaXRlKHN0cnVjdCBpOTE1X3dhX2xp c3QgKndhbCwgaTkxNV9yZWdfdCByZWcsIHUzMiB2YWwpCiB7CisJd2Ffd3JpdGVfbWFza2VkX29y KHdhbCwgcmVnLCB+MCwgdmFsKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuOV9ndF93b3JrYXJvdW5k c19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZAor d2Ffd3JpdGVfb3Ioc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsLCBpOTE1X3JlZ190IHJlZywgdTMy IHZhbCkKIHsKKwl3YV93cml0ZV9tYXNrZWRfb3Iod2FsLCByZWcsIHZhbCwgdmFsKTsKK30KKwor c3RhdGljIHZvaWQgZ2VuOV9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYt Pmd0X3dhX2xpc3Q7CisKIAkvKiBXYUNvbnRleHRTd2l0Y2hXaXRoQ29uY3VycmVudFRMQkludmFs aWRhdGU6c2tsLGJ4dCxrYmwsZ2xrLGNmbCAqLwotCUk5MTVfV1JJVEUoR0VOOV9DU0ZFX0NISUNL RU4xX1JDUywKLQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjlfUFJFRU1QVF9HUEdQVV9TWU5D X1NXSVRDSF9ESVNBQkxFKSk7CisJd2FfbWFza2VkX2VuKHdhbCwKKwkJICAgICBHRU45X0NTRkVf Q0hJQ0tFTjFfUkNTLAorCQkgICAgIEdFTjlfUFJFRU1QVF9HUEdQVV9TWU5DX1NXSVRDSF9ESVNB QkxFKTsKKwogCiAJLyogV2FFbmFibGVMYnNTbGFSZXRyeVRpbWVyRGVjcmVtZW50OnNrbCxieHQs a2JsLGdsayxjZmwgKi8KLQlJOTE1X1dSSVRFKEJEV19TQ1JBVENIMSwgSTkxNV9SRUFEKEJEV19T Q1JBVENIMSkgfAotCQkgICBHRU45X0xCU19TTEFfUkVUUllfVElNRVJfREVDUkVNRU5UX0VOQUJM RSk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgQkRXX1NDUkFUQ0gxLAorCQkgICAgR0VOOV9M QlNfU0xBX1JFVFJZX1RJTUVSX0RFQ1JFTUVOVF9FTkFCTEUpOwogCiAJLyogV2FEaXNhYmxlS2ls bExvZ2ljOmJ4dCxza2wsa2JsICovCiAJaWYgKCFJU19DT0ZGRUVMQUtFKGRldl9wcml2KSkKLQkJ STkxNV9XUklURShHQU1fRUNPQ0hLLCBJOTE1X1JFQUQoR0FNX0VDT0NISykgfAotCQkJICAgRUNP Q0hLX0RJU19UTEIpOworCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgR0FNX0VDT0NISywKKwkJ CSAgICBFQ09DSEtfRElTX1RMQik7CiAKIAlpZiAoSEFTX0xMQyhkZXZfcHJpdikpIHsKIAkJLyog V2FDb21wcmVzc2VkUmVzb3VyY2VTYW1wbGVyUGJlTWVkaWFOZXdIYXNoTW9kZTpza2wsa2JsCkBA IC02MDQsODkgKzY3NiwxMDEgQEAgc3RhdGljIHZvaWQgZ2VuOV9ndF93b3JrYXJvdW5kc19hcHBs eShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCSAqIE11c3QgbWF0Y2ggRGlz cGxheSBFbmdpbmUuIFNlZQogCQkgKiBXYUNvbXByZXNzZWRSZXNvdXJjZURpc3BsYXlOZXdIYXNo TW9kZS4KIAkJICovCi0JCUk5MTVfV1JJVEUoTU1DRF9NSVNDX0NUUkwsCi0JCQkgICBJOTE1X1JF QUQoTU1DRF9NSVNDX0NUUkwpIHwKLQkJCSAgIE1NQ0RfUENMQSB8Ci0JCQkgICBNTUNEX0hPVFNQ T1RfRU4pOworCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgTU1DRF9NSVNDX0NUUkwsCisJCQkg ICAgTU1DRF9QQ0xBIHwgTU1DRF9IT1RTUE9UX0VOKTsKIAl9CiAKIAkvKiBXYURpc2FibGVIRENJ bnZhbGlkYXRpb246c2tsLGJ4dCxrYmwsY2ZsICovCi0JSTkxNV9XUklURShHQU1fRUNPQ0hLLCBJ OTE1X1JFQUQoR0FNX0VDT0NISykgfAotCQkgICBCRFdfRElTQUJMRV9IRENfSU5WQUxJREFUSU9O KTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHQU1fRUNPQ0hLLAorCQkgICAgQkRXX0RJU0FC TEVfSERDX0lOVkFMSURBVElPTik7CiAKIAkvKiBXYVByb2dyYW1MM1NxY1JlZzFEZWZhdWx0Rm9y UGVyZjpieHQsZ2xrICovCi0JaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKSB7Ci0JCXUzMiB2YWwg PSBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzEpOwotCi0JCXZhbCAmPSB+TDNfUFJJT19DUkVESVRT X01BU0s7Ci0JCXZhbCB8PSBMM19HRU5FUkFMX1BSSU9fQ1JFRElUUyg2MikgfCBMM19ISUdIX1BS SU9fQ1JFRElUUygyKTsKLQkJSTkxNV9XUklURShHRU44X0wzU1FDUkVHMSwgdmFsKTsKLQl9CisJ aWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKQorCQl3YV93cml0ZV9tYXNrZWRfb3Iod2FsLAorCQkJ CSAgIEdFTjhfTDNTUUNSRUcxLAorCQkJCSAgIEwzX1BSSU9fQ1JFRElUU19NQVNLLAorCQkJCSAg IEwzX0dFTkVSQUxfUFJJT19DUkVESVRTKDYyKSB8CisJCQkJICAgTDNfSElHSF9QUklPX0NSRURJ VFMoMikpOwogCiAJLyogV2FPQ0xDb2hlcmVudExpbmVGbHVzaDpza2wsYnh0LGtibCxjZmwgKi8K LQlJOTE1X1dSSVRFKEdFTjhfTDNTUUNSRUc0LAotCQkgICBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JF RzQpIHwgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVTKTsKKwl3YV93cml0ZV9vcih3YWws CisJCSAgICBHRU44X0wzU1FDUkVHNCwKKwkJICAgIEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9M SU5FUyk7CiAKIAkvKiBXYUVuYWJsZVByZWVtcHRpb25HcmFudWxhcml0eUNvbnRyb2xCeVVNRDpz a2wsYnh0LGtibCxjZmwsW2NubF0gKi8KLQlJOTE1X1dSSVRFKEdFTjdfRkZfU0xJQ0VfQ1NfQ0hJ Q0tFTjEsCi0JCSAgIF9NQVNLRURfQklUX0VOQUJMRShHRU45X0ZGU0NfUEVSQ1RYX1BSRUVNUFRf Q1RSTCkpOworCXdhX21hc2tlZF9lbih3YWwsCisJCSAgICAgR0VON19GRl9TTElDRV9DU19DSElD S0VOMSwKKwkJICAgICBHRU45X0ZGU0NfUEVSQ1RYX1BSRUVNUFRfQ1RSTCk7CiB9CiAKLXN0YXRp YyB2b2lkIHNrbF9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBza2xfZ3Rfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JZ2VuOV9ndF93b3JrYXJvdW5kc19hcHBseShk ZXZfcHJpdik7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmRldl9wcml2LT5ndF93YV9s aXN0OworCisJZ2VuOV9ndF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKIAogCS8qIFdhRW5h YmxlR2Fwc1RzdkNyZWRpdEZpeDpza2wgKi8KLQlJOTE1X1dSSVRFKEdFTjhfR0FSQkNOVEwsCi0J CSAgIEk5MTVfUkVBRChHRU44X0dBUkJDTlRMKSB8IEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJU0FC TEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FSQkNOVEwsCisJCSAgICBHRU45 X0dBUFNfVFNWX0NSRURJVF9ESVNBQkxFKTsKIAogCS8qIFdhRGlzYWJsZUdhZnNVbml0Q2xrR2F0 aW5nOnNrbCAqLwotCUk5MTVfV1JJVEUoR0VON19VQ0dDVEw0LAotCQkgICBJOTE1X1JFQUQoR0VO N19VQ0dDVEw0KSB8IEdFTjhfRVVfR0FVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJd2Ffd3Jp dGVfb3Iod2FsLAorCQkgICAgR0VON19VQ0dDVEw0LAorCQkgICAgR0VOOF9FVV9HQVVOSVRfQ0xP Q0tfR0FURV9ESVNBQkxFKTsKIAogCS8qIFdhSW5QbGFjZURlY29tcHJlc3Npb25IYW5nOnNrbCAq LwogCWlmIChJU19TS0xfUkVWSUQoZGV2X3ByaXYsIFNLTF9SRVZJRF9IMCwgUkVWSURfRk9SRVZF UikpCi0JCUk5MTVfV1JJVEUoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEsCi0JCQkgICBJOTE1X1JF QUQoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEpIHwKLQkJCSAgIEdBTVRfRUNPX0VOQUJMRV9JTl9Q TEFDRV9ERUNPTVBSRVNTKTsKKwkJd2Ffd3JpdGVfb3Iod2FsLAorCQkJICAgIEdFTjlfR0FNVF9F Q09fUkVHX1JXX0lBLAorCQkJICAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNT KTsKIH0KIAotc3RhdGljIHZvaWQgYnh0X2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGJ4dF9ndF93b3JrYXJvdW5kc19p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlnZW45X2d0X3dvcmth cm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmZGV2 X3ByaXYtPmd0X3dhX2xpc3Q7CisKKwlnZW45X2d0X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYp OwogCiAJLyogV2FEaXNhYmxlUG9vbGVkRXVMb2FkQmFsYW5jaW5nRml4OmJ4dCAqLwotCUk5MTVf V1JJVEUoRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjIsCi0JCSAgIF9NQVNLRURfQklUX0VOQUJMRShHRU45 X1BPT0xFRF9FVV9MT0FEX0JBTEFOQ0lOR19GSVhfRElTQUJMRSkpOworCXdhX21hc2tlZF9lbih3 YWwsCisJCSAgICAgRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjIsCisJCSAgICAgR0VOOV9QT09MRURfRVVf TE9BRF9CQUxBTkNJTkdfRklYX0RJU0FCTEUpOwogCiAJLyogV2FJblBsYWNlRGVjb21wcmVzc2lv bkhhbmc6Ynh0ICovCi0JSTkxNV9XUklURShHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKLQkJICAg STkxNV9SRUFEKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBKSB8Ci0JCSAgIEdBTVRfRUNPX0VOQUJM RV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHRU45X0dB TVRfRUNPX1JFR19SV19JQSwKKwkJICAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBS RVNTKTsKIH0KIAotc3RhdGljIHZvaWQga2JsX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGtibF9ndF93b3JrYXJvdW5k c19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlnZW45X2d0X3dv cmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAm ZGV2X3ByaXYtPmd0X3dhX2xpc3Q7CisKKwlnZW45X2d0X3dvcmthcm91bmRzX2luaXQoZGV2X3By aXYpOwogCiAJLyogV2FFbmFibGVHYXBzVHN2Q3JlZGl0Rml4OmtibCAqLwotCUk5MTVfV1JJVEUo R0VOOF9HQVJCQ05UTCwKLQkJICAgSTkxNV9SRUFEKEdFTjhfR0FSQkNOVEwpIHwgR0VOOV9HQVBT X1RTVl9DUkVESVRfRElTQUJMRSk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgR0VOOF9HQVJC Q05UTCwKKwkJICAgIEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJU0FCTEUpOwogCiAJLyogV2FEaXNh YmxlRHluYW1pY0NyZWRpdFNoYXJpbmc6a2JsICovCiAJaWYgKElTX0tCTF9SRVZJRChkZXZfcHJp diwgMCwgS0JMX1JFVklEX0IwKSkKLQkJSTkxNV9XUklURShHQU1UX0NIS05fQklUX1JFRywKLQkJ CSAgIEk5MTVfUkVBRChHQU1UX0NIS05fQklUX1JFRykgfAotCQkJICAgR0FNVF9DSEtOX0RJU0FC TEVfRFlOQU1JQ19DUkVESVRfU0hBUklORyk7CisJCXdhX3dyaXRlX29yKHdhbCwKKwkJCSAgICBH QU1UX0NIS05fQklUX1JFRywKKwkJCSAgICBHQU1UX0NIS05fRElTQUJMRV9EWU5BTUlDX0NSRURJ VF9TSEFSSU5HKTsKIAogCS8qIFdhRGlzYWJsZUdhZnNVbml0Q2xrR2F0aW5nOmtibCAqLwotCUk5 MTVfV1JJVEUoR0VON19VQ0dDVEw0LAotCQkgICBJOTE1X1JFQUQoR0VON19VQ0dDVEw0KSB8IEdF TjhfRVVfR0FVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJd2Ffd3JpdGVfb3Iod2FsLAorCQkg ICAgR0VON19VQ0dDVEw0LAorCQkgICAgR0VOOF9FVV9HQVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxF KTsKIAogCS8qIFdhSW5QbGFjZURlY29tcHJlc3Npb25IYW5nOmtibCAqLwotCUk5MTVfV1JJVEUo R0VOOV9HQU1UX0VDT19SRUdfUldfSUEsCi0JCSAgIEk5MTVfUkVBRChHRU45X0dBTVRfRUNPX1JF R19SV19JQSkgfAotCQkgICBHQU1UX0VDT19FTkFCTEVfSU5fUExBQ0VfREVDT01QUkVTUyk7CisJ d2Ffd3JpdGVfb3Iod2FsLAorCQkgICAgR0VOOV9HQU1UX0VDT19SRUdfUldfSUEsCisJCSAgICBH QU1UX0VDT19FTkFCTEVfSU5fUExBQ0VfREVDT01QUkVTUyk7CiAKIAkvKiBXYUtCTFZFQ1NTZW1h cGhvcmVXYWl0UG9sbDprYmwgKi8KIAlpZiAoSVNfS0JMX1JFVklEKGRldl9wcml2LCBLQkxfUkVW SURfQTAsIEtCTF9SRVZJRF9FMCkpIHsKQEAgLTY5NywzOCArNzgxLDQ0IEBAIHN0YXRpYyB2b2lk IGtibF9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCiAJCQlpZiAoZW5naW5lLT5pZCA9PSBSQ1MpCiAJCQkJY29udGludWU7CiAKLQkJCUk5MTVf V1JJVEUoUklOR19TRU1BX1dBSVRfUE9MTChlbmdpbmUtPm1taW9fYmFzZSksIDEpOworCQkJd2Ff d3JpdGUod2FsLAorCQkJCSBSSU5HX1NFTUFfV0FJVF9QT0xMKGVuZ2luZS0+bW1pb19iYXNlKSwK KwkJCQkgMSk7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdsa19ndF93b3JrYXJvdW5kc19h cHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBnbGtf Z3Rfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7 Ci0JZ2VuOV9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7CisJZ2VuOV9ndF93b3JrYXJv dW5kc19pbml0KGRldl9wcml2KTsKIH0KIAotc3RhdGljIHZvaWQgY2ZsX2d0X3dvcmthcm91bmRz X2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGNm bF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IHsKLQlnZW45X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwlzdHJ1Y3QgaTkxNV93 YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYtPmd0X3dhX2xpc3Q7CisKKwlnZW45X2d0X3dvcmthcm91 bmRzX2luaXQoZGV2X3ByaXYpOwogCiAJLyogV2FFbmFibGVHYXBzVHN2Q3JlZGl0Rml4OmNmbCAq LwotCUk5MTVfV1JJVEUoR0VOOF9HQVJCQ05UTCwKLQkJICAgSTkxNV9SRUFEKEdFTjhfR0FSQkNO VEwpIHwgR0VOOV9HQVBTX1RTVl9DUkVESVRfRElTQUJMRSk7CisJd2Ffd3JpdGVfb3Iod2FsLAor CQkgICAgR0VOOF9HQVJCQ05UTCwKKwkJICAgIEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJU0FCTEUp OwogCiAJLyogV2FEaXNhYmxlR2Fmc1VuaXRDbGtHYXRpbmc6Y2ZsICovCi0JSTkxNV9XUklURShH RU43X1VDR0NUTDQsCi0JCSAgIEk5MTVfUkVBRChHRU43X1VDR0NUTDQpIHwgR0VOOF9FVV9HQVVO SVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHRU43X1VD R0NUTDQsCisJCSAgICBHRU44X0VVX0dBVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwogCiAJLyog V2FJblBsYWNlRGVjb21wcmVzc2lvbkhhbmc6Y2ZsICovCi0JSTkxNV9XUklURShHRU45X0dBTVRf RUNPX1JFR19SV19JQSwKLQkJICAgSTkxNV9SRUFEKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBKSB8 Ci0JCSAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKKwl3YV93cml0ZV9v cih3YWwsCisJCSAgICBHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKKwkJICAgIEdBTVRfRUNPX0VO QUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKIH0KIAogc3RhdGljIHZvaWQgd2FfaW5pdF9tY3Io c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCWNvbnN0IHN0cnVjdCBzc2V1 X2Rldl9pbmZvICpzc2V1ID0gJihJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldSk7Ci0JdTMyIG1j cjsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYtPmd0X3dhX2xpc3Q7CiAJ dTMyIG1jcl9zbGljZV9zdWJzbGljZV9tYXNrOwogCiAJLyoKQEAgLTc2NSw4ICs4NTUsNiBAQCBz dGF0aWMgdm9pZCB3YV9pbml0X21jcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiAJCVdBUk5fT04oKGVuYWJsZWRfbWFzayAmIGRpc2FibGVkX21hc2spICE9IGVuYWJsZWRfbWFz ayk7CiAJfQogCi0JbWNyID0gSTkxNV9SRUFEKEdFTjhfTUNSX1NFTEVDVE9SKTsKLQogCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQogCQltY3Jfc2xpY2Vfc3Vic2xpY2VfbWFzayA9IEdF TjExX01DUl9TTElDRV9NQVNLIHwKIAkJCQkJICBHRU4xMV9NQ1JfU1VCU0xJQ0VfTUFTSzsKQEAg LTc4NCwxNTYgKzg3MiwyMjUgQEAgc3RhdGljIHZvaWQgd2FfaW5pdF9tY3Ioc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQogCSAqIG9jY2FzaW9ucywgc3VjaCBhcyBJTlNURE9ORSwg d2hlcmUgdGhpcyB2YWx1ZSBpcyBkZXBlbmRlbnQKIAkgKiBvbiBzL3NzIGNvbWJvLCB0aGUgcmVh ZCBzaG91bGQgYmUgZG9uZSB3aXRoIHJlYWRfc3Vic2xpY2VfcmVnLgogCSAqLwotCW1jciAmPSB+ bWNyX3NsaWNlX3N1YnNsaWNlX21hc2s7Ci0JbWNyIHw9IGludGVsX2NhbGN1bGF0ZV9tY3Jfc19z c19zZWxlY3QoZGV2X3ByaXYpOwotCUk5MTVfV1JJVEUoR0VOOF9NQ1JfU0VMRUNUT1IsIG1jcik7 CisJd2Ffd3JpdGVfbWFza2VkX29yKHdhbCwKKwkJCSAgIEdFTjhfTUNSX1NFTEVDVE9SLAorCQkJ ICAgbWNyX3NsaWNlX3N1YnNsaWNlX21hc2ssCisJCQkgICBpbnRlbF9jYWxjdWxhdGVfbWNyX3Nf c3Nfc2VsZWN0KGRldl9wcml2KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNubF9ndF93b3JrYXJvdW5k c19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBj bmxfZ3Rfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiB7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmRldl9wcml2LT5ndF93YV9saXN0Owor CiAJd2FfaW5pdF9tY3IoZGV2X3ByaXYpOwogCiAJLyogV2FEaXNhYmxlSTJtQ3ljbGVPbldSUG9y dDpjbmwgKHByZS1wcm9kKSAqLwogCWlmIChJU19DTkxfUkVWSUQoZGV2X3ByaXYsIENOTF9SRVZJ RF9CMCwgQ05MX1JFVklEX0IwKSkKLQkJSTkxNV9XUklURShHQU1UX0NIS05fQklUX1JFRywKLQkJ CSAgIEk5MTVfUkVBRChHQU1UX0NIS05fQklUX1JFRykgfAotCQkJICAgR0FNVF9DSEtOX0RJU0FC TEVfSTJNX0NZQ0xFX09OX1dSX1BPUlQpOworCQl3YV93cml0ZV9vcih3YWwsCisJCQkgICAgR0FN VF9DSEtOX0JJVF9SRUcsCisJCQkgICAgR0FNVF9DSEtOX0RJU0FCTEVfSTJNX0NZQ0xFX09OX1dS X1BPUlQpOwogCiAJLyogV2FJblBsYWNlRGVjb21wcmVzc2lvbkhhbmc6Y25sICovCi0JSTkxNV9X UklURShHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKLQkJICAgSTkxNV9SRUFEKEdFTjlfR0FNVF9F Q09fUkVHX1JXX0lBKSB8Ci0JCSAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNT KTsKKwl3YV93cml0ZV9vcih3YWwsCisJCSAgICBHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKKwkJ ICAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKTsKIAogCS8qIFdhRW5hYmxl UHJlZW1wdGlvbkdyYW51bGFyaXR5Q29udHJvbEJ5VU1EOmNubCAqLwotCUk5MTVfV1JJVEUoR0VO N19GRl9TTElDRV9DU19DSElDS0VOMSwKLQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjlfRkZT Q19QRVJDVFhfUFJFRU1QVF9DVFJMKSk7CisJd2FfbWFza2VkX2VuKHdhbCwKKwkJICAgICBHRU43 X0ZGX1NMSUNFX0NTX0NISUNLRU4xLAorCQkgICAgIEdFTjlfRkZTQ19QRVJDVFhfUFJFRU1QVF9D VFJMKTsKIH0KIAotc3RhdGljIHZvaWQgaWNsX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGljbF9ndF93b3JrYXJvdW5k c19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKKwlzdHJ1Y3QgaTkx NV93YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYtPmd0X3dhX2xpc3Q7CisKIAl3YV9pbml0X21jcihk ZXZfcHJpdik7CiAKIAkvKiBUaGlzIGlzIG5vdCBhbiBXYS4gRW5hYmxlIGZvciBiZXR0ZXIgaW1h Z2UgcXVhbGl0eSAqLwotCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4zLAotCQkgICBfTUFTS0VEX0JJ VF9FTkFCTEUoXzNEX0NISUNLRU4zX0FBX0xJTkVfUVVBTElUWV9GSVhfRU5BQkxFKSk7CisJd2Ff bWFza2VkX2VuKHdhbCwKKwkJICAgIF8zRF9DSElDS0VOMywKKwkJICAgIF8zRF9DSElDS0VOM19B QV9MSU5FX1FVQUxJVFlfRklYX0VOQUJMRSk7CiAKIAkvKiBXYUluUGxhY2VEZWNvbXByZXNzaW9u SGFuZzppY2wgKi8KLQlJOTE1X1dSSVRFKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAotCQkgICBJ OTE1X1JFQUQoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEpIHwKLQkJICAgR0FNVF9FQ09fRU5BQkxF X0lOX1BMQUNFX0RFQ09NUFJFU1MpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjlfR0FN VF9FQ09fUkVHX1JXX0lBLAorCQkgICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJF U1MpOwogCiAJLyogV2FQaXBlbGluZUZsdXNoQ29oZXJlbnRMaW5lczppY2wgKi8KLQlJOTE1X1dS SVRFKEdFTjhfTDNTUUNSRUc0LAotCQkgICBJOTE1X1JFQUQoR0VOOF9MM1NRQ1JFRzQpIHwKLQkJ ICAgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVTKTsKKwl3YV93cml0ZV9vcih3YWwsCisJ CSAgICBHRU44X0wzU1FDUkVHNCwKKwkJICAgIEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5F Uyk7CiAKIAkvKiBXYV8xNDA1NTQzNjIyOmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhR0FQ WlByaW9yaXR5U2NoZW1lCiAJICovCi0JSTkxNV9XUklURShHRU44X0dBUkJDTlRMLAotCQkgICBJ OTE1X1JFQUQoR0VOOF9HQVJCQ05UTCkgfAotCQkgICBHRU4xMV9BUkJJVFJBVElPTl9QUklPX09S REVSX01BU0spOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FSQkNOVEwsCisJCSAg ICBHRU4xMV9BUkJJVFJBVElPTl9QUklPX09SREVSX01BU0spOwogCiAJLyogV2FfMTYwNDIyMzY2 NDppY2wKIAkgKiBGb3JtZXJseSBrbm93biBhcyBXYUwzQmFua0FkZHJlc3NIYXNoaW5nCiAJICov Ci0JSTkxNV9XUklURShHRU44X0dBUkJDTlRMLAotCQkgICAoSTkxNV9SRUFEKEdFTjhfR0FSQkNO VEwpICYgfkdFTjExX0hBU0hfQ1RSTF9FWENMX01BU0spIHwKLQkJICAgR0VOMTFfSEFTSF9DVFJM X0VYQ0xfQklUMCk7Ci0JSTkxNV9XUklURShHRU4xMV9HTEJMSU5WTCwKLQkJICAgKEk5MTVfUkVB RChHRU4xMV9HTEJMSU5WTCkgJiB+R0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9NQVNLKSB8Ci0J CSAgIEdFTjExX0JBTktfSEFTSF9BRERSX0VYQ0xfQklUMCk7CisJd2Ffd3JpdGVfbWFza2VkX29y KHdhbCwKKwkJCSAgIEdFTjhfR0FSQkNOVEwsCisJCQkgICBHRU4xMV9IQVNIX0NUUkxfRVhDTF9N QVNLLAorCQkJICAgR0VOMTFfSEFTSF9DVFJMX0VYQ0xfQklUMCk7CisJd2Ffd3JpdGVfbWFza2Vk X29yKHdhbCwKKwkJCSAgIEdFTjExX0dMQkxJTlZMLAorCQkJICAgR0VOMTFfQkFOS19IQVNIX0FE RFJfRVhDTF9NQVNLLAorCQkJICAgR0VOMTFfQkFOS19IQVNIX0FERFJfRVhDTF9CSVQwKTsKIAog CS8qIFdhTW9kaWZ5R2FtVGxiUGFydGl0aW9uaW5nOmljbCAqLwotCUk5MTVfV1JJVEUoR0VOMTFf R0FDQl9QRVJGX0NUUkwsCi0JCSAgIChJOTE1X1JFQUQoR0VOMTFfR0FDQl9QRVJGX0NUUkwpICYg fkdFTjExX0hBU0hfQ1RSTF9NQVNLKSB8Ci0JCSAgIEdFTjExX0hBU0hfQ1RSTF9CSVQwIHwgR0VO MTFfSEFTSF9DVFJMX0JJVDQpOworCXdhX3dyaXRlX21hc2tlZF9vcih3YWwsCisJCQkgICBHRU4x MV9HQUNCX1BFUkZfQ1RSTCwKKwkJCSAgIEdFTjExX0hBU0hfQ1RSTF9NQVNLLAorCQkJICAgR0VO MTFfSEFTSF9DVFJMX0JJVDAgfCBHRU4xMV9IQVNIX0NUUkxfQklUNCk7CiAKIAkvKiBXYV8xNDA1 NzMzMjE2OmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhRGlzYWJsZUNsZWFuRXZpY3RzCiAJ ICovCi0JSTkxNV9XUklURShHRU44X0wzU1FDUkVHNCwKLQkJICAgSTkxNV9SRUFEKEdFTjhfTDNT UUNSRUc0KSB8Ci0JCSAgIEdFTjExX0xRU0NfQ0xFQU5fRVZJQ1RfRElTQUJMRSk7CisJd2Ffd3Jp dGVfb3Iod2FsLAorCQkgICAgR0VOOF9MM1NRQ1JFRzQsCisJCSAgICBHRU4xMV9MUVNDX0NMRUFO X0VWSUNUX0RJU0FCTEUpOwogCiAJLyogV2FfMTQwNTc2NjEwNzppY2wKIAkgKiBGb3JtZXJseSBr bm93biBhcyBXYUNMMlNGSGFsZk1heEFsbG9jCiAJICovCi0JSTkxNV9XUklURShHRU4xMV9MU05f VU5TTENWQywKLQkJICAgSTkxNV9SRUFEKEdFTjExX0xTTl9VTlNMQ1ZDKSB8Ci0JCSAgIEdFTjEx X0xTTl9VTlNMQ1ZDX0dBRlNfSEFMRl9TRl9NQVhBTExPQyB8Ci0JCSAgIEdFTjExX0xTTl9VTlNM Q1ZDX0dBRlNfSEFMRl9DTDJfTUFYQUxMT0MpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdF TjExX0xTTl9VTlNMQ1ZDLAorCQkgICAgR0VOMTFfTFNOX1VOU0xDVkNfR0FGU19IQUxGX1NGX01B WEFMTE9DIHwKKwkJICAgIEdFTjExX0xTTl9VTlNMQ1ZDX0dBRlNfSEFMRl9DTDJfTUFYQUxMT0Mp OwogCiAJLyogV2FfMjIwMTY2MTU0OmljbAogCSAqIEZvcm1lcmx5IGtub3duIGFzIFdhRGlzQ3R4 UmVsb2FkCiAJICovCi0JSTkxNV9XUklURShHRU44X0dBTVdfRUNPX0RFVl9SV19JQSwKLQkJICAg STkxNV9SRUFEKEdFTjhfR0FNV19FQ09fREVWX1JXX0lBKSB8Ci0JCSAgIEdBTVdfRUNPX0RFVl9D VFhfUkVMT0FEX0RJU0FCTEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdFTjhfR0FNV19F Q09fREVWX1JXX0lBLAorCQkgICAgR0FNV19FQ09fREVWX0NUWF9SRUxPQURfRElTQUJMRSk7CiAK IAkvKiBXYV8xNDA1Nzc5MDA0OmljbCAocHJlLXByb2QpICovCiAJaWYgKElTX0lDTF9SRVZJRChk ZXZfcHJpdiwgSUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQTApKQotCQlJOTE1X1dSSVRFKFNMSUNF X1VOSVRfTEVWRUxfQ0xLR0FURSwKLQkJCSAgIEk5MTVfUkVBRChTTElDRV9VTklUX0xFVkVMX0NM S0dBVEUpIHwKLQkJCSAgIE1TQ1VOSVRfQ0xLR0FURV9ESVMpOworCQl3YV93cml0ZV9vcih3YWws CisJCQkgICAgU0xJQ0VfVU5JVF9MRVZFTF9DTEtHQVRFLAorCQkJICAgIE1TQ1VOSVRfQ0xLR0FU RV9ESVMpOwogCiAJLyogV2FfMTQwNjY4MDE1OTppY2wgKi8KLQlJOTE1X1dSSVRFKFNVQlNMSUNF X1VOSVRfTEVWRUxfQ0xLR0FURSwKLQkJICAgSTkxNV9SRUFEKFNVQlNMSUNFX1VOSVRfTEVWRUxf Q0xLR0FURSkgfAotCQkgICBHV1VOSVRfQ0xLR0FURV9ESVMpOworCXdhX3dyaXRlX29yKHdhbCwK KwkJICAgIFNVQlNMSUNFX1VOSVRfTEVWRUxfQ0xLR0FURSwKKwkJICAgIEdXVU5JVF9DTEtHQVRF X0RJUyk7CiAKIAkvKiBXYV8xNDA2ODM4NjU5OmljbCAocHJlLXByb2QpICovCiAJaWYgKElTX0lD TF9SRVZJRChkZXZfcHJpdiwgSUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQjApKQotCQlJOTE1X1dS SVRFKElORl9VTklUX0xFVkVMX0NMS0dBVEUsCi0JCQkgICBJOTE1X1JFQUQoSU5GX1VOSVRfTEVW RUxfQ0xLR0FURSkgfAotCQkJICAgQ0dQU0ZfQ0xLR0FURV9ESVMpOworCQl3YV93cml0ZV9vcih3 YWwsCisJCQkgICAgSU5GX1VOSVRfTEVWRUxfQ0xLR0FURSwKKwkJCSAgICBDR1BTRl9DTEtHQVRF X0RJUyk7CiAKIAkvKiBXYUZvcndhcmRQcm9ncmVzc1NvZnRSZXNldDppY2wgKi8KLQlJOTE1X1dS SVRFKEdFTjEwX1NDUkFUQ0hfTE5DRjIsCi0JCSAgIEk5MTVfUkVBRChHRU4xMF9TQ1JBVENIX0xO Q0YyKSB8Ci0JCSAgIFBNRkxVU0hET05FX0xOSUNSU0RST1AgfAotCQkgICBQTUZMVVNIX0dBUEwz VU5CTE9DSyB8Ci0JCSAgIFBNRkxVU0hET05FX0xORUJMSyk7CisJd2Ffd3JpdGVfb3Iod2FsLAor CQkgICAgR0VOMTBfU0NSQVRDSF9MTkNGMiwKKwkJICAgIFBNRkxVU0hET05FX0xOSUNSU0RST1Ag fAorCQkgICAgUE1GTFVTSF9HQVBMM1VOQkxPQ0sgfAorCQkgICAgUE1GTFVTSERPTkVfTE5FQkxL KTsKIAogCS8qIFdhXzE0MDY0NjMwOTk6aWNsCiAJICogRm9ybWVybHkga25vd24gYXMgV2FHYW1U bGJQZW5kRXJyb3IKIAkgKi8KLQlJOTE1X1dSSVRFKEdBTVRfQ0hLTl9CSVRfUkVHLAotCQkgICBJ OTE1X1JFQUQoR0FNVF9DSEtOX0JJVF9SRUcpIHwKLQkJICAgR0FNVF9DSEtOX0RJU0FCTEVfTDNf Q09IX1BJUEUpOworCXdhX3dyaXRlX29yKHdhbCwKKwkJICAgIEdBTVRfQ0hLTl9CSVRfUkVHLAor CQkgICAgR0FNVF9DSEtOX0RJU0FCTEVfTDNfQ09IX1BJUEUpOwogCiAJLyogV2FfMTQwNjYwOTI1 NTppY2wgKHByZS1wcm9kKSAqLwogCWlmIChJU19JQ0xfUkVWSUQoZGV2X3ByaXYsIElDTF9SRVZJ RF9BMCwgSUNMX1JFVklEX0IwKSkKLQkJSTkxNV9XUklURShHRU43X1NBUkNIS01ELAotCQkJICAg STkxNV9SRUFEKEdFTjdfU0FSQ0hLTUQpIHwKLQkJCSAgIEdFTjdfRElTQUJMRV9ERU1BTkRfUFJF RkVUQ0ggfAotCQkJICAgR0VON19ESVNBQkxFX1NBTVBMRVJfUFJFRkVUQ0gpOworCQl3YV93cml0 ZV9vcih3YWwsCisJCQkgICAgR0VON19TQVJDSEtNRCwKKwkJCSAgICBHRU43X0RJU0FCTEVfREVN QU5EX1BSRUZFVENIIHwKKwkJCSAgICBHRU43X0RJU0FCTEVfU0FNUExFUl9QUkVGRVRDSCk7CiB9 CiAKLXZvaWQgaW50ZWxfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQordm9pZCBpbnRlbF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAm ZGV2X3ByaXYtPmd0X3dhX2xpc3Q7CisKKwl3YV9pbml0X3N0YXJ0KHdhbCwgIkdUIik7CisKIAlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDgpCiAJCXJldHVybjsKIAllbHNlIGlmIChJU19CUk9B RFdFTEwoZGV2X3ByaXYpKQotCQliZHdfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3ByaXYpOwor CQlyZXR1cm47CiAJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCWNodl9ndF93 b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7CisJCXJldHVybjsKIAllbHNlIGlmIChJU19TS1lM QUtFKGRldl9wcml2KSkKLQkJc2tsX2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwkJ c2tsX2d0X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX0JST1hUT04o ZGV2X3ByaXYpKQotCQlieHRfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3ByaXYpOworCQlieHRf Z3Rfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJZWxzZSBpZiAoSVNfS0FCWUxBS0UoZGV2 X3ByaXYpKQotCQlrYmxfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3ByaXYpOworCQlrYmxfZ3Rf d29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShkZXZf cHJpdikpCi0JCWdsa19ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7CisJCWdsa19ndF93 b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKIAllbHNlIGlmIChJU19DT0ZGRUVMQUtFKGRldl9w cml2KSkKLQkJY2ZsX2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsKKwkJY2ZsX2d0X3dv cmthcm91bmRzX2luaXQoZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoZGV2X3By aXYpKQotCQljbmxfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3ByaXYpOworCQljbmxfZ3Rfd29y a2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJZWxzZSBpZiAoSVNfSUNFTEFLRShkZXZfcHJpdikp Ci0JCWljbF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7CisJCWljbF9ndF93b3JrYXJv dW5kc19pbml0KGRldl9wcml2KTsKIAllbHNlCiAJCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oZGV2 X3ByaXYpKTsKKworCXdhX2luaXRfZmluaXNoKHdhbCk7Cit9CisKK3N0YXRpYyBlbnVtIGZvcmNl d2FrZV9kb21haW5zCit3YWxfZ2V0X2Z3X2Zvcl9ybXcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAorCQkgICBjb25zdCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCit7CisJZW51 bSBmb3JjZXdha2VfZG9tYWlucyBmdyA9IDA7CisJc3RydWN0IGk5MTVfd2EgKndhOworCXVuc2ln bmVkIGludCBpOworCisJZm9yIChpID0gMCwgd2EgPSB3YWwtPmxpc3Q7IGkgPCB3YWwtPmNvdW50 OyBpKyssIHdhKyspCisJCWZ3IHw9IGludGVsX3VuY29yZV9mb3JjZXdha2VfZm9yX3JlZyhkZXZf cHJpdiwKKwkJCQkJCSAgICAgd2EtPnJlZywKKwkJCQkJCSAgICAgRldfUkVHX1JFQUQgfAorCQkJ CQkJICAgICBGV19SRUdfV1JJVEUpOworCisJcmV0dXJuIGZ3OworfQorCitzdGF0aWMgdm9pZAor d2FfbGlzdF9hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGNvbnN0IHN0 cnVjdCBpOTE1X3dhX2xpc3QgKndhbCkKK3sKKwllbnVtIGZvcmNld2FrZV9kb21haW5zIGZ3Owor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGk5MTVfd2EgKndhOworCXVuc2lnbmVkIGlu dCBpOworCisJaWYgKCF3YWwtPmNvdW50KQorCQlyZXR1cm47CisKKwlmdyA9IHdhbF9nZXRfZndf Zm9yX3JtdyhkZXZfcHJpdiwgd2FsKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+ dW5jb3JlLmxvY2ssIGZsYWdzKTsKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldF9fbG9ja2Vk KGRldl9wcml2LCBmdyk7CisKKwlmb3IgKGkgPSAwLCB3YSA9IHdhbC0+bGlzdDsgaSA8IHdhbC0+ Y291bnQ7IGkrKywgd2ErKykgeworCQl1MzIgdmFsID0gSTkxNV9SRUFEX0ZXKHdhLT5yZWcpOwor CisJCXZhbCAmPSB+d2EtPm1hc2s7CisJCXZhbCB8PSB3YS0+dmFsOworCisJCUk5MTVfV1JJVEVf Rlcod2EtPnJlZywgdmFsKTsKKwl9CisKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dF9fbG9j a2VkKGRldl9wcml2LCBmdyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVu Y29yZS5sb2NrLCBmbGFncyk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJBcHBsaWVkICV1ICVzIHdv cmthcm91bmRzXG4iLCB3YWwtPmNvdW50LCB3YWwtPm5hbWUpOworfQorCit2b2lkIGludGVsX2d0 X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sK Kwl3YV9saXN0X2FwcGx5KGRldl9wcml2LCAmZGV2X3ByaXYtPmd0X3dhX2xpc3QpOwogfQogCiBz dHJ1Y3Qgd2hpdGVsaXN0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3dvcmthcm91bmRzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5o CmluZGV4IGIxMWQwNjIzZTYyNi4uNjRhZWQ5Y2YwMjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3dvcmthcm91bmRzLmgKQEAgLTcsOSArNywzMSBAQAogI2lmbmRlZiBfSTkxNV9XT1JL QVJPVU5EU19IXwogI2RlZmluZSBfSTkxNV9XT1JLQVJPVU5EU19IXwogCisjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgorCitzdHJ1Y3QgaTkxNV93YSB7CisJaTkxNV9yZWdfdAkgIHJlZzsKKwl1MzIJ CSAgbWFzazsKKwl1MzIJCSAgdmFsOworfTsKKworc3RydWN0IGk5MTVfd2FfbGlzdCB7CisJY29u c3QgY2hhcgkqbmFtZTsKKwl1bnNpZ25lZCBpbnQgCWNvdW50OworCXN0cnVjdCBpOTE1X3dhCSps aXN0OworCXVuc2lnbmVkIGludAlfX3NpemU7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgaW50 ZWxfd2FfbGlzdF9mcmVlKHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCkKK3sKKwlrZnJlZSh3YWwt Pmxpc3QpOworCW1lbXNldCh3YWwsIDAsIHNpemVvZigqd2FsKSk7Cit9CisKIGludCBpbnRlbF9j dHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwog aW50IGludGVsX2N0eF93b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKTsK IAordm9pZCBpbnRlbF9ndF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7CiB2b2lkIGludGVsX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiAKIHZvaWQgaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91 bmRzX2FwcGx5KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Ci0tIAoyLjE5LjEKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=