From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 7/8] drm/i915: Fuse per-context workaround handling with the common framework Date: Fri, 30 Nov 2018 11:32:00 +0000 Message-ID: <20181130113201.13007-8-tvrtko.ursulin@linux.intel.com> References: <20181130113201.13007-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 mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3246B6E5F9 for ; Fri, 30 Nov 2018 11:32:18 +0000 (UTC) In-Reply-To: <20181130113201.13007-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 RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkNvbnZlcnQg dGhlIHBlciBjb250ZXh0IHdvcmthcm91bmQgaGFuZGxpbmcgY29kZSB0byBydW4gYWdhaW5zdCB0 aGUgbmV3bHkKaW50cm9kdWNlZCBjb21tb24gd29ya2Fyb3VuZCBmcmFtZXdvcmsgYW5kIGZ1c2Ug dGhlIHR3byB0byB1c2UgdGhlCmV4aXN0aW5nIHNtYXJ0ZXIgbGlzdCBhZGQgaGVscGVyLCB0aGUg b25lIHdoaWNoIGRvZXMgdGhlIHNvcnRlZCBpbnNlcnQgYW5kCm1lcmdlcyByZWdpc3RlcnMgd2hl cmUgcG9zc2libGUuCgpUaGlzIGNvbXBsZXRlcyBtaWdyYXRpb24gb2YgYWxsIGZvdXIgY2xhc3Nl cyBvZiB3b3JrYXJvdW5kcyBvbnRvIHRoZQpjb21tb24gZnJhbWV3b3JrLgoKRXhpc3RpbmcgbWFj cm9zIGFyZSBrZXB0IHVudG91Y2hlZCBmb3Igc21hbGxlciBjb2RlIGNodXJuLgoKU2lnbmVkLW9m Zi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgIHwgIDExICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgIHwgIDE2ICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbS5jICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2NvbnRleHQuYyAgfCAgIDYgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dv cmthcm91bmRzLmMgfCAyNjcgKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmggfCAgIDMgKy0KIDYgZmlsZXMgY2hhbmdlZCwgMTI4 IGluc2VydGlvbnMoKyksIDE3NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVi dWdmcy5jCmluZGV4IDEyOWI5YTZmODMwOS4uYzY1Y2JiOTkwZDAyIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYwpAQCAtMzM3NSwxMyArMzM3NSwxNCBAQCBzdGF0aWMgaW50IGk5MTVf c2hhcmVkX2RwbGxzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiAKIHN0 YXRpYyBpbnQgaTkxNV93YV9yZWdpc3RlcnMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVz ZWQpCiB7Ci0Jc3RydWN0IGk5MTVfd29ya2Fyb3VuZHMgKndhID0gJm5vZGVfdG9faTkxNShtLT5w cml2YXRlKS0+d29ya2Fyb3VuZHM7Ci0JaW50IGk7CisJY29uc3Qgc3RydWN0IGk5MTVfd2FfbGlz dCAqd2FsID0gJm5vZGVfdG9faTkxNShtLT5wcml2YXRlKS0+d2FfbGlzdDsKKwlzdHJ1Y3QgaTkx NV93YSAqd2E7CisJdW5zaWduZWQgaW50IGk7CiAKLQlzZXFfcHJpbnRmKG0sICJXb3JrYXJvdW5k cyBhcHBsaWVkOiAlZFxuIiwgd2EtPmNvdW50KTsKLQlmb3IgKGkgPSAwOyBpIDwgd2EtPmNvdW50 OyArK2kpCisJc2VxX3ByaW50ZihtLCAiV29ya2Fyb3VuZHMgYXBwbGllZDogJXVcbiIsIHdhbC0+ Y291bnQpOworCWZvciAoaSA9IDAsIHdhID0gd2FsLT5saXN0OyBpIDwgd2FsLT5jb3VudDsgaSsr LCB3YSsrKQogCQlzZXFfcHJpbnRmKG0sICIweCVYOiAweCUwOFgsIG1hc2s6IDB4JTA4WFxuIiwK LQkJCSAgIHdhLT5yZWdbaV0uYWRkciwgd2EtPnJlZ1tpXS52YWx1ZSwgd2EtPnJlZ1tpXS5tYXNr KTsKKwkJCSAgIGk5MTVfbW1pb19yZWdfb2Zmc2V0KHdhLT5yZWcpLCB3YS0+dmFsLCB3YS0+bWFz ayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDlkZGJjYzFm MzU1NC4uMjc0ZTVjOGI2YzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTExODksMjAg KzExODksNiBAQCBzdHJ1Y3QgaTkxNV9mcm9udGJ1ZmZlcl90cmFja2luZyB7CiAJdW5zaWduZWQg ZmxpcF9iaXRzOwogfTsKIAotc3RydWN0IGk5MTVfd2FfcmVnIHsKLQl1MzIgYWRkcjsKLQl1MzIg dmFsdWU7Ci0JLyogYml0bWFzayByZXByZXNlbnRpbmcgV0EgYml0cyAqLwotCXUzMiBtYXNrOwot fTsKLQotI2RlZmluZSBJOTE1X01BWF9XQV9SRUdTIDE2Ci0KLXN0cnVjdCBpOTE1X3dvcmthcm91 bmRzIHsKLQlzdHJ1Y3QgaTkxNV93YV9yZWcgcmVnW0k5MTVfTUFYX1dBX1JFR1NdOwotCXUzMiBj b3VudDsKLX07Ci0KIHN0cnVjdCBpOTE1X3ZpcnR1YWxfZ3B1IHsKIAlib29sIGFjdGl2ZTsKIAl1 MzIgY2FwczsKQEAgLTE2NTIsNyArMTYzOCw3IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsK IAogCWludCBkcGlvX3BoeV9pb3NmX3BvcnRbSTkxNV9OVU1fUEhZU19WTFZdOwogCi0Jc3RydWN0 IGk5MTVfd29ya2Fyb3VuZHMgd29ya2Fyb3VuZHM7CisJc3RydWN0IGk5MTVfd2FfbGlzdCB3YV9s aXN0OwogCXN0cnVjdCBpOTE1X3dhX2xpc3QgZ3Rfd2FfbGlzdDsKIAogCXN0cnVjdCBpOTE1X2Zy b250YnVmZmVyX3RyYWNraW5nIGZiX3RyYWNraW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5k ZXggMWVmZjQ3MWQ0MzY2Li4wZmNiYzRlZDY5NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpA QCAtNTcwOSw2ICs1NzA5LDcgQEAgdm9pZCBpOTE1X2dlbV9maW5pKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKIAlpOTE1X2dlbV9jb250ZXh0c19maW5pKGRldl9wcml2KTsKIAlt dXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKIAorCWludGVsX3dhX2xp c3RfZnJlZSgmZGV2X3ByaXYtPndhX2xpc3QpOwogCWludGVsX3dhX2xpc3RfZnJlZSgmZGV2X3By aXYtPmd0X3dhX2xpc3QpOwogCiAJaW50ZWxfY2xlYW51cF9ndF9wb3dlcnNhdmUoZGV2X3ByaXYp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCmluZGV4IGI5Nzk2M2RiMDI4 Ny4uYWFlN2UxM2M3NDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5j CkBAIC01MzUsMTYgKzUzNSwxMiBAQCBzdGF0aWMgYm9vbCBuZWVkc19wcmVlbXB0X2NvbnRleHQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiBpbnQgaTkxNV9nZW1fY29udGV4dHNfaW5p dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eDsKLQlpbnQgcmV0OwogCiAJLyogUmVhc3N1cmUgb3Vyc2VsdmVzIHdlIGFy ZSBvbmx5IGNhbGxlZCBvbmNlICovCiAJR0VNX0JVR19PTihkZXZfcHJpdi0+a2VybmVsX2NvbnRl eHQpOwogCUdFTV9CVUdfT04oZGV2X3ByaXYtPnByZWVtcHRfY29udGV4dCk7CiAKLQlyZXQgPSBp bnRlbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7Ci0JaWYgKHJldCkKLQkJcmV0dXJu IHJldDsKLQorCWludGVsX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKIAlpbml0X2Nv bnRleHRzKGRldl9wcml2KTsKIAogCS8qIGxvd2VzdCBwcmlvcml0eTsgaWRsZSB0YXNrICovCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYwppbmRleCAyMTk2NDIwOWQ5NzAu LmRlMmJkZGJjNjRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29y a2Fyb3VuZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5j CkBAIC01Nyw2MSArNTcsODUgQEAgc3RhdGljIHZvaWQgd2FfaW5pdF9maW5pc2goc3RydWN0IGk5 MTVfd2FfbGlzdCAqd2FsKQogewogCWlmICh3YWwtPmNvdW50KQogCQlEUk1fREVCVUdfRFJJVkVS KCJJbml0aWFsaXplZCAldSAlcyB3b3JrYXJvdW5kc1xuIiwKLQkJCQkgd2FsLT5jb3VudCwgd2Fs LT5uYW1lKTsKKwkJCQkgd2FsLT53YV9jb3VudCwgd2FsLT5uYW1lKTsKIH0KIAotc3RhdGljIHZv aWQgd2FfYWRkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAotCQkgICBpOTE1X3JlZ190 IHJlZywgY29uc3QgdTMyIG1hc2ssIGNvbnN0IHUzMiB2YWwpCitzdGF0aWMgdm9pZCBfd2FfYWRk KHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCwgY29uc3Qgc3RydWN0IGk5MTVfd2EgKndhKQogewot CXN0cnVjdCBpOTE1X3dvcmthcm91bmRzICp3YSA9ICZpOTE1LT53b3JrYXJvdW5kczsKLQl1bnNp Z25lZCBpbnQgc3RhcnQgPSAwLCBlbmQgPSB3YS0+Y291bnQ7Ci0JdW5zaWduZWQgaW50IGFkZHIg PSBpOTE1X21taW9fcmVnX29mZnNldChyZWcpOwotCXN0cnVjdCBpOTE1X3dhX3JlZyAqcjsKKwl1 bnNpZ25lZCBpbnQgYWRkciA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KHdhLT5yZWcpOworCXVuc2ln bmVkIGludCBzdGFydCA9IDAsIGVuZCA9IHdhbC0+Y291bnQ7CisJY29uc3QgdW5zaWduZWQgaW50 IGdyb3cgPSAxNjsKKwlzdHJ1Y3QgaTkxNV93YSAqd2FfOworCisJaWYgKHdhbC0+X19zaXplID09 IHdhbC0+Y291bnQpIHsKKwkJc3RydWN0IGk5MTVfd2EgKmxpc3Q7CisKKwkJbGlzdCA9IGtjYWxs b2Mod2FsLT5fX3NpemUgKyBncm93LCBzaXplb2YoKndhKSwgR0ZQX0tFUk5FTCk7CisJCWlmICgh bGlzdCkgeworCQkJRFJNX0VSUk9SKCJObyBzcGFjZSBmb3Igd29ya2Fyb3VuZCBpbml0IVxuIik7 CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAod2FsLT5saXN0KQorCQkJbWVtY3B5KGxpc3QsIHdh bC0+bGlzdCwgc2l6ZW9mKCp3YSkgKiB3YWwtPmNvdW50KTsKKworCQl3YWwtPmxpc3QgPSBsaXN0 OworCQl3YWwtPl9fc2l6ZSArPSBncm93OworCX0KIAogCXdoaWxlIChzdGFydCA8IGVuZCkgewog CQl1bnNpZ25lZCBpbnQgbWlkID0gc3RhcnQgKyAoZW5kIC0gc3RhcnQpIC8gMjsKIAotCQlpZiAo d2EtPnJlZ1ttaWRdLmFkZHIgPCBhZGRyKSB7CisJCWlmIChpOTE1X21taW9fcmVnX29mZnNldCh3 YWwtPmxpc3RbbWlkXS5yZWcpIDwgYWRkcikgewogCQkJc3RhcnQgPSBtaWQgKyAxOwotCQl9IGVs c2UgaWYgKHdhLT5yZWdbbWlkXS5hZGRyID4gYWRkcikgeworCQl9IGVsc2UgaWYgKGk5MTVfbW1p b19yZWdfb2Zmc2V0KHdhbC0+bGlzdFttaWRdLnJlZykgPiBhZGRyKSB7CiAJCQllbmQgPSBtaWQ7 CiAJCX0gZWxzZSB7Ci0JCQlyID0gJndhLT5yZWdbbWlkXTsKKwkJCXdhXyA9ICZ3YWwtPmxpc3Rb bWlkXTsKIAotCQkJaWYgKChtYXNrICYgfnItPm1hc2spID09IDApIHsKKwkJCWlmICgod2EtPm1h c2sgJiB+d2FfLT5tYXNrKSA9PSAwKSB7CiAJCQkJRFJNX0VSUk9SKCJEaXNjYXJkaW5nIG92ZXJ3 cml0dGVuIHcvYSBmb3IgcmVnICUwNHggKG1hc2s6ICUwOHgsIHZhbHVlOiAlMDh4KVxuIiwKLQkJ CQkJICBhZGRyLCByLT5tYXNrLCByLT52YWx1ZSk7CisJCQkJCSAgaTkxNV9tbWlvX3JlZ19vZmZz ZXQod2FfLT5yZWcpLAorCQkJCQkgIHdhXy0+bWFzaywgd2FfLT52YWwpOwogCi0JCQkJci0+dmFs dWUgJj0gfm1hc2s7CisJCQkJd2FfLT52YWwgJj0gfndhLT5tYXNrOwogCQkJfQogCi0JCQlyLT52 YWx1ZSB8PSB2YWw7Ci0JCQlyLT5tYXNrICB8PSBtYXNrOworCQkJd2FsLT53YV9jb3VudCsrOwor CQkJd2FfLT52YWwgfD0gd2EtPnZhbDsKKwkJCXdhXy0+bWFzayB8PSB3YS0+bWFzazsKIAkJCXJl dHVybjsKIAkJfQogCX0KIAotCWlmIChXQVJOX09OX09OQ0Uod2EtPmNvdW50ID49IEk5MTVfTUFY X1dBX1JFR1MpKSB7Ci0JCURSTV9FUlJPUigiRHJvcHBpbmcgdy9hIGZvciByZWcgJTA0eCAobWFz azogJTA4eCwgdmFsdWU6ICUwOHgpXG4iLAotCQkJICBhZGRyLCBtYXNrLCB2YWwpOwotCQlyZXR1 cm47Ci0JfQorCXdhbC0+d2FfY291bnQrKzsKKwl3YV8gPSAmd2FsLT5saXN0W3dhbC0+Y291bnQr K107CisJKndhXyA9ICp3YTsKIAotCXIgPSAmd2EtPnJlZ1t3YS0+Y291bnQrK107Ci0Jci0+YWRk ciAgPSBhZGRyOwotCXItPnZhbHVlID0gdmFsOwotCXItPm1hc2sgID0gbWFzazsKLQotCXdoaWxl IChyLS0gPiB3YS0+cmVnKSB7Ci0JCUdFTV9CVUdfT04oclswXS5hZGRyID09IHJbMV0uYWRkcik7 Ci0JCWlmIChyWzFdLmFkZHIgPiByWzBdLmFkZHIpCisJd2hpbGUgKHdhXy0tID4gd2FsLT5saXN0 KSB7CisJCUdFTV9CVUdfT04oaTkxNV9tbWlvX3JlZ19vZmZzZXQod2FfWzBdLnJlZykgPT0KKwkJ CSAgIGk5MTVfbW1pb19yZWdfb2Zmc2V0KHdhX1sxXS5yZWcpKTsKKwkJaWYgKGk5MTVfbW1pb19y ZWdfb2Zmc2V0KHdhX1sxXS5yZWcpID4KKwkJICAgIGk5MTVfbW1pb19yZWdfb2Zmc2V0KHdhX1sw XS5yZWcpKQogCQkJYnJlYWs7CiAKLQkJc3dhcChyWzFdLCByWzBdKTsKKwkJc3dhcCh3YV9bMV0s IHdhX1swXSk7CiAJfQogfQogCi0jZGVmaW5lIFdBX1JFRyhhZGRyLCBtYXNrLCB2YWwpIHdhX2Fk ZChkZXZfcHJpdiwgKGFkZHIpLCAobWFzayksICh2YWwpKQorc3RhdGljIHZvaWQKK19fd2FfYWRk KHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCwgaTkxNV9yZWdfdCByZWcsIHUzMiBtYXNrLCB1MzIg dmFsKQoreworCXN0cnVjdCBpOTE1X3dhIHdhID0geworCQkucmVnID0gcmVnLAorCQkubWFzayA9 IG1hc2ssCisJCS52YWwgPSB2YWwKKwl9OworCisJX3dhX2FkZCh3YWwsICZ3YSk7Cit9CisKKyNk ZWZpbmUgV0FfUkVHKGFkZHIsIG1hc2ssIHZhbCkgX193YV9hZGQod2FsLCAoYWRkciksIChtYXNr KSwgKHZhbCkpCiAKICNkZWZpbmUgV0FfU0VUX0JJVF9NQVNLRUQoYWRkciwgbWFzaykgXAogCVdB X1JFRyhhZGRyLCAobWFzayksIF9NQVNLRURfQklUX0VOQUJMRShtYXNrKSkKQEAgLTEyMiw4ICsx NDYsMTAgQEAgc3RhdGljIHZvaWQgd2FfYWRkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 LAogI2RlZmluZSBXQV9TRVRfRklFTERfTUFTS0VEKGFkZHIsIG1hc2ssIHZhbHVlKSBcCiAJV0Ff UkVHKGFkZHIsIChtYXNrKSwgX01BU0tFRF9GSUVMRChtYXNrLCB2YWx1ZSkpCiAKLXN0YXRpYyBp bnQgZ2VuOF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCitzdGF0aWMgdm9pZCBnZW44X2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAm ZGV2X3ByaXYtPndhX2xpc3Q7CisKIAlXQV9TRVRfQklUX01BU0tFRChJTlNUUE0sIElOU1RQTV9G T1JDRV9PUkRFUklORyk7CiAKIAkvKiBXYURpc2FibGVBc3luY0ZsaXBQZXJmTW9kZTpiZHcsY2h2 ICovCkBAIC0xNjcsMTcgKzE5MywxMyBAQCBzdGF0aWMgaW50IGdlbjhfY3R4X3dvcmthcm91bmRz X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCVdBX1NFVF9GSUVMRF9N QVNLRUQoR0VON19HVF9NT0RFLAogCQkJICAgIEdFTjZfV0laX0hBU0hJTkdfTUFTSywKIAkJCSAg ICBHRU42X1dJWl9IQVNISU5HXzE2eDQpOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQg YmR3X2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKK3N0YXRpYyB2b2lkIGJkd19jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3 YWwgPSAmZGV2X3ByaXYtPndhX2xpc3Q7CiAKLQlyZXQgPSBnZW44X2N0eF93b3JrYXJvdW5kc19p bml0KGRldl9wcml2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWdlbjhfY3R4X3dvcmth cm91bmRzX2luaXQoZGV2X3ByaXYpOwogCiAJLyogV2FEaXNhYmxlVGhyZWFkU3RhbGxEb3BDbG9j a0dhdGluZzpiZHcgKHByZS1wcm9kdWN0aW9uKSAqLwogCVdBX1NFVF9CSVRfTUFTS0VEKEdFTjhf Uk9XX0NISUNLRU4sIFNUQUxMX0RPUF9HQVRJTkdfRElTQUJMRSk7CkBAIC0xOTgsMjkgKzIyMCwy NSBAQCBzdGF0aWMgaW50IGJkd19jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiAJCQkgIEhEQ19GT1JDRV9DT05URVhUX1NBVkVfUkVTVE9SRV9O T05fQ09IRVJFTlQgfAogCQkJICAvKiBXYURpc2FibGVGZW5jZURlc3RpbmF0aW9uVG9TTE06YmR3 IChwcmUtcHJvZCkgKi8KIAkJCSAgKElTX0JEV19HVDMoZGV2X3ByaXYpID8gSERDX0ZFTkNFX0RF U1RfU0xNX0RJU0FCTEUgOiAwKSk7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaHZf Y3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQor c3RhdGljIHZvaWQgY2h2X2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKIHsKLQlpbnQgcmV0OworCXN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9 ICZkZXZfcHJpdi0+d2FfbGlzdDsKIAotCXJldCA9IGdlbjhfY3R4X3dvcmthcm91bmRzX2luaXQo ZGV2X3ByaXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZ2VuOF9jdHhfd29ya2Fyb3Vu ZHNfaW5pdChkZXZfcHJpdik7CiAKIAkvKiBXYURpc2FibGVUaHJlYWRTdGFsbERvcENsb2NrR2F0 aW5nOmNodiAqLwogCVdBX1NFVF9CSVRfTUFTS0VEKEdFTjhfUk9XX0NISUNLRU4sIFNUQUxMX0RP UF9HQVRJTkdfRElTQUJMRSk7CiAKIAkvKiBJbXByb3ZlIEhpWiB0aHJvdWdocHV0IG9uIENIVi4g Ki8KIAlXQV9TRVRfQklUX01BU0tFRChISVpfQ0hJQ0tFTiwgQ0hWX0haXzhYOF9NT0RFX0lOXzFY KTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdlbjlfY3R4X3dvcmthcm91bmRzX2lu aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgZ2VuOV9j dHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7 CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmRldl9wcml2LT53YV9saXN0OworCiAJaWYg KEhBU19MTEMoZGV2X3ByaXYpKSB7CiAJCS8qIFdhQ29tcHJlc3NlZFJlc291cmNlU2FtcGxlclBi ZU1lZGlhTmV3SGFzaE1vZGU6c2tsLGtibAogCQkgKgpAQCAtMzE0LDEyICszMzIsMTEgQEAgc3Rh dGljIGludCBnZW45X2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKIAkvKiBXYUNsZWFySElaX1dNX0NISUNLRU4zOmJ4dCxnbGsgKi8KIAlpZiAo SVNfR0VOOV9MUChkZXZfcHJpdikpCiAJCVdBX1NFVF9CSVRfTUFTS0VEKEdFTjlfV01fQ0hJQ0tF TjMsIEdFTjlfRkFDVE9SX0lOX0NMUl9WQUxfSElaKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0 aWMgaW50IHNrbF90dW5lX2l6X2hhc2hpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQorc3RhdGljIHZvaWQgc2tsX3R1bmVfaXpfaGFzaGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiB7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmRldl9wcml2 LT53YV9saXN0OwogCXU4IHZhbHNbM10gPSB7IDAsIDAsIDAgfTsKIAl1bnNpZ25lZCBpbnQgaTsK IApAQCAtMzQ0LDcgKzM2MSw3IEBAIHN0YXRpYyBpbnQgc2tsX3R1bmVfaXpfaGFzaGluZyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJfQogCiAJaWYgKHZhbHNbMF0gPT0gMCAm JiB2YWxzWzFdID09IDAgJiYgdmFsc1syXSA9PSAwKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwog CiAJLyogVHVuZSBJWiBoYXNoaW5nLiBTZWUgaW50ZWxfZGV2aWNlX2luZm9fcnVudGltZV9pbml0 KCkgKi8KIAlXQV9TRVRfRklFTERfTUFTS0VEKEdFTjdfR1RfTU9ERSwKQEAgLTM1NCwyOCArMzcx LDE5IEBAIHN0YXRpYyBpbnQgc2tsX3R1bmVfaXpfaGFzaGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiAJCQkgICAgR0VOOV9JWl9IQVNISU5HKDIsIHZhbHNbMl0pIHwKIAkJ CSAgICBHRU45X0laX0hBU0hJTkcoMSwgdmFsc1sxXSkgfAogCQkJICAgIEdFTjlfSVpfSEFTSElO RygwLCB2YWxzWzBdKSk7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBza2xfY3R4X3dv cmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGlj IHZvaWQgc2tsX2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ2VuOV9jdHhfd29ya2Fyb3VuZHNfaW5p dChkZXZfcHJpdik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBza2xfdHVu ZV9pel9oYXNoaW5nKGRldl9wcml2KTsKKwlnZW45X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9w cml2KTsKKwlza2xfdHVuZV9pel9oYXNoaW5nKGRldl9wcml2KTsKIH0KIAotc3RhdGljIGludCBi eHRfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQorc3RhdGljIHZvaWQgYnh0X2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKIHsKLQlpbnQgcmV0OworCXN0cnVjdCBpOTE1X3dhX2xpc3QgKndh bCA9ICZkZXZfcHJpdi0+d2FfbGlzdDsKIAotCXJldCA9IGdlbjlfY3R4X3dvcmthcm91bmRzX2lu aXQoZGV2X3ByaXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZ2VuOV9jdHhfd29ya2Fy b3VuZHNfaW5pdChkZXZfcHJpdik7CiAKIAkvKiBXYURpc2FibGVUaHJlYWRTdGFsbERvcENsb2Nr R2F0aW5nOmJ4dCAqLwogCVdBX1NFVF9CSVRfTUFTS0VEKEdFTjhfUk9XX0NISUNLRU4sCkBAIC0z ODQsMTcgKzM5MiwxMyBAQCBzdGF0aWMgaW50IGJ4dF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJLyogV2FUb0VuYWJsZUh3Rml4Rm9yUHVz aENvbnN0SFdCdWc6Ynh0ICovCiAJV0FfU0VUX0JJVF9NQVNLRUQoQ09NTU9OX1NMSUNFX0NISUNL RU4yLAogCQkJICBHRU44X1NCRV9ESVNBQkxFX1JFUExBWV9CVUZfT1BUSU1JWkFUSU9OKTsKLQot CXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtibF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBrYmxfY3R4X3dvcmth cm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCWludCBy ZXQ7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmRldl9wcml2LT53YV9saXN0OwogCi0J cmV0ID0gZ2VuOV9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7Ci0JaWYgKHJldCkKLQkJ cmV0dXJuIHJldDsKKwlnZW45X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKIAogCS8q IFdhVG9FbmFibGVId0ZpeEZvclB1c2hDb25zdEhXQnVnOmtibCAqLwogCWlmIChJU19LQkxfUkVW SUQoZGV2X3ByaXYsIEtCTF9SRVZJRF9DMCwgUkVWSURfRk9SRVZFUikpCkBAIC00MDQsMzIgKzQw OCwyNCBAQCBzdGF0aWMgaW50IGtibF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJLyogV2FEaXNhYmxlU2JlQ2FjaGVEaXNwYXRjaFBvcnRT aGFyaW5nOmtibCAqLwogCVdBX1NFVF9CSVRfTUFTS0VEKEdFTjdfSEFMRl9TTElDRV9DSElDS0VO MSwKIAkJCSAgR0VON19TQkVfU1NfQ0FDSEVfRElTUEFUQ0hfUE9SVF9TSEFSSU5HX0RJU0FCTEUp OwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2xrX2N0eF93b3JrYXJvdW5kc19pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGdsa19jdHhf d29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0J aW50IHJldDsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYtPndhX2xpc3Q7 CiAKLQlyZXQgPSBnZW45X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKLQlpZiAocmV0 KQotCQlyZXR1cm4gcmV0OworCWdlbjlfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOwog CiAJLyogV2FUb0VuYWJsZUh3Rml4Rm9yUHVzaENvbnN0SFdCdWc6Z2xrICovCiAJV0FfU0VUX0JJ VF9NQVNLRUQoQ09NTU9OX1NMSUNFX0NISUNLRU4yLAogCQkJICBHRU44X1NCRV9ESVNBQkxFX1JF UExBWV9CVUZfT1BUSU1JWkFUSU9OKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNm bF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CitzdGF0aWMgdm9pZCBjZmxfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQogewotCWludCByZXQ7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2Fs ID0gJmRldl9wcml2LT53YV9saXN0OwogCi0JcmV0ID0gZ2VuOV9jdHhfd29ya2Fyb3VuZHNfaW5p dChkZXZfcHJpdik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlnZW45X2N0eF93b3JrYXJv dW5kc19pbml0KGRldl9wcml2KTsKIAogCS8qIFdhVG9FbmFibGVId0ZpeEZvclB1c2hDb25zdEhX QnVnOmNmbCAqLwogCVdBX1NFVF9CSVRfTUFTS0VEKENPTU1PTl9TTElDRV9DSElDS0VOMiwKQEAg LTQzOCwxMiArNDM0LDEyIEBAIHN0YXRpYyBpbnQgY2ZsX2N0eF93b3JrYXJvdW5kc19pbml0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkvKiBXYURpc2FibGVTYmVDYWNoZURp c3BhdGNoUG9ydFNoYXJpbmc6Y2ZsICovCiAJV0FfU0VUX0JJVF9NQVNLRUQoR0VON19IQUxGX1NM SUNFX0NISUNLRU4xLAogCQkJICBHRU43X1NCRV9TU19DQUNIRV9ESVNQQVRDSF9QT1JUX1NIQVJJ TkdfRElTQUJMRSk7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjbmxfY3R4X3dvcmth cm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZv aWQgY25sX2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIHsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYtPndhX2xpc3Q7 CisKIAkvKiBXYUZvcmNlQ29udGV4dFNhdmVSZXN0b3JlTm9uQ29oZXJlbnQ6Y25sICovCiAJV0Ff U0VUX0JJVF9NQVNLRUQoQ05MX0hEQ19DSElDS0VOMCwKIAkJCSAgSERDX0ZPUkNFX0NPTlRFWFRf U0FWRV9SRVNUT1JFX05PTl9DT0hFUkVOVCk7CkBAIC00NzcsMTIgKzQ3MywxMiBAQCBzdGF0aWMg aW50IGNubF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCiAKIAkvKiBXYURpc2FibGVFYXJseUVPVDpjbmwgKi8KIAlXQV9TRVRfQklUX01BU0tF RChHRU44X1JPV19DSElDS0VOLCBESVNBQkxFX0VBUkxZX0VPVCk7Ci0KLQlyZXR1cm4gMDsKIH0K IAotc3RhdGljIGludCBpY2xfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgaWNsX2N0eF93b3JrYXJvdW5kc19pbml0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0 ICp3YWwgPSAmZGV2X3ByaXYtPndhX2xpc3Q7CisKIAkvKiBXYV8xNjA0MzcwNTg1OmljbCAocHJl LXByb2QpCiAJICogRm9ybWVybHkga25vd24gYXMgV2FQdXNoQ29uc3RhbnREZXJlZmVyZW5jZUhv bGREaXNhYmxlCiAJICovCkBAIC01MTQsNjcgKzUxMCw2MyBAQCBzdGF0aWMgaW50IGljbF9jdHhf d29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaWYg KElTX0lDTF9SRVZJRChkZXZfcHJpdiwgSUNMX1JFVklEX0EwLCBJQ0xfUkVWSURfQTApKQogCQlX QV9TRVRfQklUX01BU0tFRChHRU4xMV9DT01NT05fU0xJQ0VfQ0hJQ0tFTjMsCiAJCQkJICBHRU4x MV9CTEVORF9FTUJfRklYX0RJU0FCTEVfSU5fUkNDKTsKLQotCXJldHVybiAwOwogfQogCi1pbnQg aW50ZWxfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQordm9pZCBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiB7Ci0JaW50IGVyciA9IDA7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAq d2FsID0gJmRldl9wcml2LT53YV9saXN0OwogCi0JZGV2X3ByaXYtPndvcmthcm91bmRzLmNvdW50 ID0gMDsKKwl3YV9pbml0X3N0YXJ0KHdhbCwgImNvbnRleHQiKTsKIAogCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpIDwgOCkKLQkJZXJyID0gMDsKKwkJcmV0dXJuOwogCWVsc2UgaWYgKElTX0JST0FE V0VMTChkZXZfcHJpdikpCi0JCWVyciA9IGJkd19jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJp dik7CisJCWJkd19jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJZWxzZSBpZiAoSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCWVyciA9IGNodl9jdHhfd29ya2Fyb3VuZHNfaW5pdChk ZXZfcHJpdik7CisJCWNodl9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJZWxzZSBp ZiAoSVNfU0tZTEFLRShkZXZfcHJpdikpCi0JCWVyciA9IHNrbF9jdHhfd29ya2Fyb3VuZHNfaW5p dChkZXZfcHJpdik7CisJCXNrbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJZWxz ZSBpZiAoSVNfQlJPWFRPTihkZXZfcHJpdikpCi0JCWVyciA9IGJ4dF9jdHhfd29ya2Fyb3VuZHNf aW5pdChkZXZfcHJpdik7CisJCWJ4dF9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJ ZWxzZSBpZiAoSVNfS0FCWUxBS0UoZGV2X3ByaXYpKQotCQllcnIgPSBrYmxfY3R4X3dvcmthcm91 bmRzX2luaXQoZGV2X3ByaXYpOworCQlrYmxfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYp OwogCWVsc2UgaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQllcnIgPSBnbGtfY3R4X3dv cmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCQlnbGtfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2 X3ByaXYpOwogCWVsc2UgaWYgKElTX0NPRkZFRUxBS0UoZGV2X3ByaXYpKQotCQllcnIgPSBjZmxf Y3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCQljZmxfY3R4X3dvcmthcm91bmRzX2lu aXQoZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpKQotCQllcnIg PSBjbmxfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCQljbmxfY3R4X3dvcmthcm91 bmRzX2luaXQoZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX0lDRUxBS0UoZGV2X3ByaXYpKQotCQll cnIgPSBpY2xfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCQlpY2xfY3R4X3dvcmth cm91bmRzX2luaXQoZGV2X3ByaXYpOwogCWVsc2UKIAkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihk ZXZfcHJpdikpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiAKLQlEUk1fREVCVUdfRFJJVkVS KCJOdW1iZXIgb2YgY29udGV4dCBzcGVjaWZpYyB3L2E6ICVkXG4iLAotCQkJIGRldl9wcml2LT53 b3JrYXJvdW5kcy5jb3VudCk7Ci0JcmV0dXJuIDA7CisJd2FfaW5pdF9maW5pc2god2FsKTsKIH0K IAogaW50IGludGVsX2N0eF93b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQogewotCXN0cnVjdCBpOTE1X3dvcmthcm91bmRzICp3ID0gJnJxLT5pOTE1LT53b3JrYXJvdW5k czsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmcnEtPmk5MTUtPndhX2xpc3Q7CisJc3Ry dWN0IGk5MTVfd2EgKndhOworCXVuc2lnbmVkIGludCBpOwogCXUzMiAqY3M7Ci0JaW50IHJldCwg aTsKKwlpbnQgcmV0OwogCi0JaWYgKHctPmNvdW50ID09IDApCisJaWYgKHdhbC0+Y291bnQgPT0g MCkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBycS0+ZW5naW5lLT5lbWl0X2ZsdXNoKHJxLCBFTUlU X0JBUlJJRVIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQljcyA9IGludGVsX3Jpbmdf YmVnaW4ocnEsICh3LT5jb3VudCAqIDIgKyAyKSk7CisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJx LCAod2FsLT5jb3VudCAqIDIgKyAyKSk7CiAJaWYgKElTX0VSUihjcykpCiAJCXJldHVybiBQVFJf RVJSKGNzKTsKIAotCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0ody0+Y291bnQpOwotCWZv ciAoaSA9IDA7IGkgPCB3LT5jb3VudDsgaSsrKSB7Ci0JCSpjcysrID0gdy0+cmVnW2ldLmFkZHI7 Ci0JCSpjcysrID0gdy0+cmVnW2ldLnZhbHVlOworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9J TU0od2FsLT5jb3VudCk7CisJZm9yIChpID0gMCwgd2EgPSB3YWwtPmxpc3Q7IGkgPCB3YWwtPmNv dW50OyBpKyssIHdhKyspIHsKKwkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldCh3YS0+cmVn KTsKKwkJKmNzKysgPSB3YS0+dmFsOwogCX0KIAkqY3MrKyA9IE1JX05PT1A7CiAKQEAgLTU4Nywz MSArNTc5LDYgQEAgaW50IGludGVsX2N0eF93b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotd2FsX2FkZChzdHJ1Y3Qg aTkxNV93YV9saXN0ICp3YWwsIGNvbnN0IHN0cnVjdCBpOTE1X3dhICp3YSkKLXsKLQljb25zdCB1 bnNpZ25lZCBpbnQgZ3JvdyA9IDQ7Ci0KLQlpZiAod2FsLT5fX3NpemUgPT0gd2FsLT5jb3VudCkg ewotCQlzdHJ1Y3QgaTkxNV93YSAqbGlzdDsKLQotCQlsaXN0ID0ga2NhbGxvYyh3YWwtPl9fc2l6 ZSArIGdyb3csIHNpemVvZigqd2EpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFsaXN0KSB7Ci0JCQlE Uk1fRVJST1IoIk5vIHNwYWNlIGZvciB3b3JrYXJvdW5kIGluaXQhXG4iKTsKLQkJCXJldHVybjsK LQkJfQotCi0JCWlmICh3YWwtPmxpc3QpCi0JCQltZW1jcHkobGlzdCwgd2FsLT5saXN0LCBzaXpl b2YoKndhKSAqIHdhbC0+Y291bnQpOwotCi0JCXdhbC0+bGlzdCA9IGxpc3Q7Ci0JCXdhbC0+X19z aXplICs9IGdyb3c7Ci0JfQotCi0JbWVtY3B5KCZ3YWwtPmxpc3Rbd2FsLT5jb3VudF0sIHdhLCBz aXplb2YoKndhKSk7Ci0Jd2FsLT5jb3VudCsrOwotfQotCiBzdGF0aWMgdm9pZAogd2FfbWFza2Vk X2VuKHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCwgaTkxNV9yZWdfdCByZWcsIHUzMiB2YWwpCiB7 CkBAIC02MjEsNyArNTg4LDcgQEAgd2FfbWFza2VkX2VuKHN0cnVjdCBpOTE1X3dhX2xpc3QgKndh bCwgaTkxNV9yZWdfdCByZWcsIHUzMiB2YWwpCiAJCS52YWwgPSBfTUFTS0VEX0JJVF9FTkFCTEUo dmFsKQogCX07CiAKLQl3YWxfYWRkKHdhbCwgJndhKTsKKwlfd2FfYWRkKHdhbCwgJndhKTsKIH0K IAogc3RhdGljIHZvaWQKQEAgLTYzNCw3ICs2MDEsNyBAQCB3YV93cml0ZV9tYXNrZWRfb3Ioc3Ry dWN0IGk5MTVfd2FfbGlzdCAqd2FsLCBpOTE1X3JlZ190IHJlZywgdTMyIG1hc2ssCiAJCS52YWwg PSB2YWwKIAl9OwogCi0Jd2FsX2FkZCh3YWwsICZ3YSk7CisJX3dhX2FkZCh3YWwsICZ3YSk7CiB9 CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDQyLDcgKzEwMDksNyBAQCB3aGl0ZWxpc3RfcmVnKHN0cnVj dCBpOTE1X3dhX2xpc3QgKndhbCwgaTkxNV9yZWdfdCByZWcpCiAJaWYgKEdFTV9XQVJOX09OKHdh bC0+Y291bnQgPj0gUklOR19NQVhfTk9OUFJJVl9TTE9UUykpCiAJCXJldHVybjsKIAotCXdhbF9h ZGQod2FsLCAmd2EpOworCV93YV9hZGQod2FsLCAmd2EpOwogfQogCiBzdGF0aWMgdm9pZCBnZW45 X3doaXRlbGlzdF9idWlsZChzdHJ1Y3QgaTkxNV93YV9saXN0ICp3KQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3dvcmthcm91bmRzLmgKaW5kZXggMDU0MGQwMDk1M2VjLi5iZDg2MjllYzRkM2Eg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaApAQCAtMTgsNiArMTgs NyBAQCBzdHJ1Y3QgaTkxNV93YSB7CiBzdHJ1Y3QgaTkxNV93YV9saXN0IHsKIAljb25zdCBjaGFy CSpuYW1lOwogCXVuc2lnbmVkIGludCAJY291bnQ7CisJdW5zaWduZWQgaW50CXdhX2NvdW50Owog CXN0cnVjdCBpOTE1X3dhCSpsaXN0OwogCXVuc2lnbmVkIGludAlfX3NpemU7CiB9OwpAQCAtMjgs NyArMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfd2FfbGlzdF9mcmVlKHN0cnVjdCBp OTE1X3dhX2xpc3QgKndhbCkKIAltZW1zZXQod2FsLCAwLCBzaXplb2YoKndhbCkpOwogfQogCi1p bnQgaW50ZWxfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKK3ZvaWQgaW50ZWxfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKIGludCBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfZW1pdChzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSk7CiAKIHZvaWQgaW50ZWxfZ3Rfd29ya2Fyb3VuZHNfaW5pdChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotLSAKMi4xOS4xCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK