From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 6/7] drm/i915: Fuse per-context workaround handling with the common framework Date: Fri, 30 Nov 2018 17:44:11 +0000 Message-ID: <20181130174412.15767-7-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 7DB756E65A for ; Fri, 30 Nov 2018 17:44:26 +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 RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkNvbnZlcnQg dGhlIHBlciBjb250ZXh0IHdvcmthcm91bmQgaGFuZGxpbmcgY29kZSB0byBydW4gYWdhaW5zdCB0 aGUgbmV3bHkKaW50cm9kdWNlZCBjb21tb24gd29ya2Fyb3VuZCBmcmFtZXdvcmsgYW5kIGZ1c2Ug dGhlIHR3byB0byB1c2UgdGhlCmV4aXN0aW5nIHNtYXJ0ZXIgbGlzdCBhZGQgaGVscGVyLCB0aGUg b25lIHdoaWNoIGRvZXMgdGhlIHNvcnRlZCBpbnNlcnQgYW5kCm1lcmdlcyByZWdpc3RlcnMgd2hl cmUgcG9zc2libGUuCgpUaGlzIGNvbXBsZXRlcyBtaWdyYXRpb24gb2YgYWxsIGZvdXIgY2xhc3Nl cyBvZiB3b3JrYXJvdW5kcyBvbnRvIHRoZQpjb21tb24gZnJhbWV3b3JrLgoKRXhpc3RpbmcgbWFj cm9zIGFyZSBrZXB0IHVudG91Y2hlZCBmb3Igc21hbGxlciBjb2RlIGNodXJuLgoKdjI6CiAqIFJl bmFtZSB0byBsaXN0IG5hbWUgY3R4X3dhX2xpc3QgYW5kIG1vdmUgZnJvbSBkZXZfcHJpdiB0byBl bmdpbmUuCgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50 ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgfCAg MTIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgfCAgMTUgLS0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyAgfCAgIDYgKy0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF93b3JrYXJvdW5kcy5jIHwgMjY3ICsrKysrKysrKystLS0tLS0tLS0tLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oIHwgICAzICstCiA3IGZpbGVzIGNo YW5nZWQsIDEyOSBpbnNlcnRpb25zKCspLCAxNzYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYwppbmRleCAxMjliOWE2ZjgzMDkuLjM4ZGNlZTFjYTA2MiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTMzNzUsMTMgKzMzNzUsMTUgQEAgc3RhdGlj IGludCBpOTE1X3NoYXJlZF9kcGxsc19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51 c2VkKQogCiBzdGF0aWMgaW50IGk5MTVfd2FfcmVnaXN0ZXJzKHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqdW51c2VkKQogewotCXN0cnVjdCBpOTE1X3dvcmthcm91bmRzICp3YSA9ICZub2RlX3Rv X2k5MTUobS0+cHJpdmF0ZSktPndvcmthcm91bmRzOwotCWludCBpOworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOworCWNvbnN0IHN0cnVj dCBpOTE1X3dhX2xpc3QgKndhbCA9ICZpOTE1LT5lbmdpbmVbUkNTXS0+Y3R4X3dhX2xpc3Q7CisJ c3RydWN0IGk5MTVfd2EgKndhOworCXVuc2lnbmVkIGludCBpOwogCi0Jc2VxX3ByaW50ZihtLCAi V29ya2Fyb3VuZHMgYXBwbGllZDogJWRcbiIsIHdhLT5jb3VudCk7Ci0JZm9yIChpID0gMDsgaSA8 IHdhLT5jb3VudDsgKytpKQorCXNlcV9wcmludGYobSwgIldvcmthcm91bmRzIGFwcGxpZWQ6ICV1 XG4iLCB3YWwtPmNvdW50KTsKKwlmb3IgKGkgPSAwLCB3YSA9IHdhbC0+bGlzdDsgaSA8IHdhbC0+ Y291bnQ7IGkrKywgd2ErKykKIAkJc2VxX3ByaW50ZihtLCAiMHglWDogMHglMDhYLCBtYXNrOiAw eCUwOFhcbiIsCi0JCQkgICB3YS0+cmVnW2ldLmFkZHIsIHdhLT5yZWdbaV0udmFsdWUsIHdhLT5y ZWdbaV0ubWFzayk7CisJCQkgICBpOTE1X21taW9fcmVnX29mZnNldCh3YS0+cmVnKSwgd2EtPnZh bCwgd2EtPm1hc2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRl eCA5ZGRiY2MxZjM1NTQuLjQ0M2UwOGY0NzM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBA IC0xMTg5LDIwICsxMTg5LDYgQEAgc3RydWN0IGk5MTVfZnJvbnRidWZmZXJfdHJhY2tpbmcgewog CXVuc2lnbmVkIGZsaXBfYml0czsKIH07CiAKLXN0cnVjdCBpOTE1X3dhX3JlZyB7Ci0JdTMyIGFk ZHI7Ci0JdTMyIHZhbHVlOwotCS8qIGJpdG1hc2sgcmVwcmVzZW50aW5nIFdBIGJpdHMgKi8KLQl1 MzIgbWFzazsKLX07Ci0KLSNkZWZpbmUgSTkxNV9NQVhfV0FfUkVHUyAxNgotCi1zdHJ1Y3QgaTkx NV93b3JrYXJvdW5kcyB7Ci0Jc3RydWN0IGk5MTVfd2FfcmVnIHJlZ1tJOTE1X01BWF9XQV9SRUdT XTsKLQl1MzIgY291bnQ7Ci19OwotCiBzdHJ1Y3QgaTkxNV92aXJ0dWFsX2dwdSB7CiAJYm9vbCBh Y3RpdmU7CiAJdTMyIGNhcHM7CkBAIC0xNjUyLDcgKzE2MzgsNiBAQCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSB7CiAKIAlpbnQgZHBpb19waHlfaW9zZl9wb3J0W0k5MTVfTlVNX1BIWVNfVkxWXTsK IAotCXN0cnVjdCBpOTE1X3dvcmthcm91bmRzIHdvcmthcm91bmRzOwogCXN0cnVjdCBpOTE1X3dh X2xpc3QgZ3Rfd2FfbGlzdDsKIAogCXN0cnVjdCBpOTE1X2Zyb250YnVmZmVyX3RyYWNraW5nIGZi X3RyYWNraW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29u dGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCmluZGV4IGI5 Nzk2M2RiMDI4Ny4uYWFlN2UxM2M3NDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Y29udGV4dC5jCkBAIC01MzUsMTYgKzUzNSwxMiBAQCBzdGF0aWMgYm9vbCBuZWVkc19wcmVlbXB0 X2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiBpbnQgaTkxNV9nZW1fY29u dGV4dHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKLQlpbnQgcmV0OwogCiAJLyogUmVhc3N1cmUgb3Vyc2Vs dmVzIHdlIGFyZSBvbmx5IGNhbGxlZCBvbmNlICovCiAJR0VNX0JVR19PTihkZXZfcHJpdi0+a2Vy bmVsX2NvbnRleHQpOwogCUdFTV9CVUdfT04oZGV2X3ByaXYtPnByZWVtcHRfY29udGV4dCk7CiAK LQlyZXQgPSBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7Ci0JaWYgKHJldCkK LQkJcmV0dXJuIHJldDsKLQorCWludGVsX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsK IAlpbml0X2NvbnRleHRzKGRldl9wcml2KTsKIAogCS8qIGxvd2VzdCBwcmlvcml0eTsgaWRsZSB0 YXNrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3Mu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCmluZGV4IDQ5NjQ2MmQ3 N2ViYy4uNmI0MjdiYzUyZjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9lbmdpbmVfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3Mu YwpAQCAtNzI0LDYgKzcyNCw3IEBAIHZvaWQgaW50ZWxfZW5naW5lX2NsZWFudXBfY29tbW9uKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCWk5MTVfdGltZWxpbmVfZmluaSgmZW5n aW5lLT50aW1lbGluZSk7CiAKKwlpbnRlbF93YV9saXN0X2ZyZWUoJmVuZ2luZS0+Y3R4X3dhX2xp c3QpOwogCWludGVsX3dhX2xpc3RfZnJlZSgmZW5naW5lLT53YV9saXN0KTsKIAlpbnRlbF93YV9s aXN0X2ZyZWUoJmVuZ2luZS0+d2hpdGVsaXN0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuaAppbmRleCA5MWE3NTBlOTBkYzQuLjhmOTg1YzM1ZWM5MiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaApAQCAtNDUyLDYgKzQ1Miw3IEBAIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgewogCiAJc3RydWN0IGludGVsX2h3X3N0YXR1c19wYWdlIHN0YXR1 c19wYWdlOwogCXN0cnVjdCBpOTE1X2N0eF93b3JrYXJvdW5kcyB3YV9jdHg7CisJc3RydWN0IGk5 MTVfd2FfbGlzdCBjdHhfd2FfbGlzdDsKIAlzdHJ1Y3QgaTkxNV93YV9saXN0IHdhX2xpc3Q7CiAJ c3RydWN0IGk5MTVfd2FfbGlzdCB3aGl0ZWxpc3Q7CiAJc3RydWN0IGk5MTVfdm1hICpzY3JhdGNo OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmMKaW5kZXggOWJkMDQ0Yjhl NTQ1Li4zZTZiMzg4ZWEwMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3dvcmthcm91bmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3Vu ZHMuYwpAQCAtNTcsNjEgKzU3LDg1IEBAIHN0YXRpYyB2b2lkIHdhX2luaXRfZmluaXNoKHN0cnVj dCBpOTE1X3dhX2xpc3QgKndhbCkKIHsKIAlpZiAod2FsLT5jb3VudCkKIAkJRFJNX0RFQlVHX0RS SVZFUigiSW5pdGlhbGl6ZWQgJXUgJXMgd29ya2Fyb3VuZHNcbiIsCi0JCQkJIHdhbC0+Y291bnQs IHdhbC0+bmFtZSk7CisJCQkJIHdhbC0+d2FfY291bnQsIHdhbC0+bmFtZSk7CiB9CiAKLXN0YXRp YyB2b2lkIHdhX2FkZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKLQkJICAgaTkxNV9y ZWdfdCByZWcsIGNvbnN0IHUzMiBtYXNrLCBjb25zdCB1MzIgdmFsKQorc3RhdGljIHZvaWQgX3dh X2FkZChzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwsIGNvbnN0IHN0cnVjdCBpOTE1X3dhICp3YSkK IHsKLQlzdHJ1Y3QgaTkxNV93b3JrYXJvdW5kcyAqd2EgPSAmaTkxNS0+d29ya2Fyb3VuZHM7Ci0J dW5zaWduZWQgaW50IHN0YXJ0ID0gMCwgZW5kID0gd2EtPmNvdW50OwotCXVuc2lnbmVkIGludCBh ZGRyID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQocmVnKTsKLQlzdHJ1Y3QgaTkxNV93YV9yZWcgKnI7 CisJdW5zaWduZWQgaW50IGFkZHIgPSBpOTE1X21taW9fcmVnX29mZnNldCh3YS0+cmVnKTsKKwl1 bnNpZ25lZCBpbnQgc3RhcnQgPSAwLCBlbmQgPSB3YWwtPmNvdW50OworCWNvbnN0IHVuc2lnbmVk IGludCBncm93ID0gMTY7CisJc3RydWN0IGk5MTVfd2EgKndhXzsKKworCWlmICh3YWwtPl9fc2l6 ZSA9PSB3YWwtPmNvdW50KSB7CisJCXN0cnVjdCBpOTE1X3dhICpsaXN0OworCisJCWxpc3QgPSBr Y2FsbG9jKHdhbC0+X19zaXplICsgZ3Jvdywgc2l6ZW9mKCp3YSksIEdGUF9LRVJORUwpOworCQlp ZiAoIWxpc3QpIHsKKwkJCURSTV9FUlJPUigiTm8gc3BhY2UgZm9yIHdvcmthcm91bmQgaW5pdCFc biIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHdhbC0+bGlzdCkKKwkJCW1lbWNweShsaXN0 LCB3YWwtPmxpc3QsIHNpemVvZigqd2EpICogd2FsLT5jb3VudCk7CisKKwkJd2FsLT5saXN0ID0g bGlzdDsKKwkJd2FsLT5fX3NpemUgKz0gZ3JvdzsKKwl9CiAKIAl3aGlsZSAoc3RhcnQgPCBlbmQp IHsKIAkJdW5zaWduZWQgaW50IG1pZCA9IHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAvIDI7CiAKLQkJ aWYgKHdhLT5yZWdbbWlkXS5hZGRyIDwgYWRkcikgeworCQlpZiAoaTkxNV9tbWlvX3JlZ19vZmZz ZXQod2FsLT5saXN0W21pZF0ucmVnKSA8IGFkZHIpIHsKIAkJCXN0YXJ0ID0gbWlkICsgMTsKLQkJ fSBlbHNlIGlmICh3YS0+cmVnW21pZF0uYWRkciA+IGFkZHIpIHsKKwkJfSBlbHNlIGlmIChpOTE1 X21taW9fcmVnX29mZnNldCh3YWwtPmxpc3RbbWlkXS5yZWcpID4gYWRkcikgewogCQkJZW5kID0g bWlkOwogCQl9IGVsc2UgewotCQkJciA9ICZ3YS0+cmVnW21pZF07CisJCQl3YV8gPSAmd2FsLT5s aXN0W21pZF07CiAKLQkJCWlmICgobWFzayAmIH5yLT5tYXNrKSA9PSAwKSB7CisJCQlpZiAoKHdh LT5tYXNrICYgfndhXy0+bWFzaykgPT0gMCkgewogCQkJCURSTV9FUlJPUigiRGlzY2FyZGluZyBv dmVyd3JpdHRlbiB3L2EgZm9yIHJlZyAlMDR4IChtYXNrOiAlMDh4LCB2YWx1ZTogJTA4eClcbiIs Ci0JCQkJCSAgYWRkciwgci0+bWFzaywgci0+dmFsdWUpOworCQkJCQkgIGk5MTVfbW1pb19yZWdf b2Zmc2V0KHdhXy0+cmVnKSwKKwkJCQkJICB3YV8tPm1hc2ssIHdhXy0+dmFsKTsKIAotCQkJCXIt PnZhbHVlICY9IH5tYXNrOworCQkJCXdhXy0+dmFsICY9IH53YS0+bWFzazsKIAkJCX0KIAotCQkJ ci0+dmFsdWUgfD0gdmFsOwotCQkJci0+bWFzayAgfD0gbWFzazsKKwkJCXdhbC0+d2FfY291bnQr KzsKKwkJCXdhXy0+dmFsIHw9IHdhLT52YWw7CisJCQl3YV8tPm1hc2sgfD0gd2EtPm1hc2s7CiAJ CQlyZXR1cm47CiAJCX0KIAl9CiAKLQlpZiAoV0FSTl9PTl9PTkNFKHdhLT5jb3VudCA+PSBJOTE1 X01BWF9XQV9SRUdTKSkgewotCQlEUk1fRVJST1IoIkRyb3BwaW5nIHcvYSBmb3IgcmVnICUwNHgg KG1hc2s6ICUwOHgsIHZhbHVlOiAlMDh4KVxuIiwKLQkJCSAgYWRkciwgbWFzaywgdmFsKTsKLQkJ cmV0dXJuOwotCX0KKwl3YWwtPndhX2NvdW50Kys7CisJd2FfID0gJndhbC0+bGlzdFt3YWwtPmNv dW50KytdOworCSp3YV8gPSAqd2E7CiAKLQlyID0gJndhLT5yZWdbd2EtPmNvdW50KytdOwotCXIt PmFkZHIgID0gYWRkcjsKLQlyLT52YWx1ZSA9IHZhbDsKLQlyLT5tYXNrICA9IG1hc2s7Ci0KLQl3 aGlsZSAoci0tID4gd2EtPnJlZykgewotCQlHRU1fQlVHX09OKHJbMF0uYWRkciA9PSByWzFdLmFk ZHIpOwotCQlpZiAoclsxXS5hZGRyID4gclswXS5hZGRyKQorCXdoaWxlICh3YV8tLSA+IHdhbC0+ bGlzdCkgeworCQlHRU1fQlVHX09OKGk5MTVfbW1pb19yZWdfb2Zmc2V0KHdhX1swXS5yZWcpID09 CisJCQkgICBpOTE1X21taW9fcmVnX29mZnNldCh3YV9bMV0ucmVnKSk7CisJCWlmIChpOTE1X21t aW9fcmVnX29mZnNldCh3YV9bMV0ucmVnKSA+CisJCSAgICBpOTE1X21taW9fcmVnX29mZnNldCh3 YV9bMF0ucmVnKSkKIAkJCWJyZWFrOwogCi0JCXN3YXAoclsxXSwgclswXSk7CisJCXN3YXAod2Ff WzFdLCB3YV9bMF0pOwogCX0KIH0KIAotI2RlZmluZSBXQV9SRUcoYWRkciwgbWFzaywgdmFsKSB3 YV9hZGQoZGV2X3ByaXYsIChhZGRyKSwgKG1hc2spLCAodmFsKSkKK3N0YXRpYyB2b2lkCitfX3dh X2FkZChzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwsIGk5MTVfcmVnX3QgcmVnLCB1MzIgbWFzaywg dTMyIHZhbCkKK3sKKwlzdHJ1Y3QgaTkxNV93YSB3YSA9IHsKKwkJLnJlZyA9IHJlZywKKwkJLm1h c2sgPSBtYXNrLAorCQkudmFsID0gdmFsCisJfTsKKworCV93YV9hZGQod2FsLCAmd2EpOworfQor CisjZGVmaW5lIFdBX1JFRyhhZGRyLCBtYXNrLCB2YWwpIF9fd2FfYWRkKHdhbCwgKGFkZHIpLCAo bWFzayksICh2YWwpKQogCiAjZGVmaW5lIFdBX1NFVF9CSVRfTUFTS0VEKGFkZHIsIG1hc2spIFwK IAlXQV9SRUcoYWRkciwgKG1hc2spLCBfTUFTS0VEX0JJVF9FTkFCTEUobWFzaykpCkBAIC0xMjIs OCArMTQ2LDEwIEBAIHN0YXRpYyB2b2lkIHdhX2FkZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwKICNkZWZpbmUgV0FfU0VUX0ZJRUxEX01BU0tFRChhZGRyLCBtYXNrLCB2YWx1ZSkgXAog CVdBX1JFRyhhZGRyLCAobWFzayksIF9NQVNLRURfRklFTEQobWFzaywgdmFsdWUpKQogCi1zdGF0 aWMgaW50IGdlbjhfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQorc3RhdGljIHZvaWQgZ2VuOF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2Fs ID0gJmRldl9wcml2LT5lbmdpbmVbUkNTXS0+Y3R4X3dhX2xpc3Q7CisKIAlXQV9TRVRfQklUX01B U0tFRChJTlNUUE0sIElOU1RQTV9GT1JDRV9PUkRFUklORyk7CiAKIAkvKiBXYURpc2FibGVBc3lu Y0ZsaXBQZXJmTW9kZTpiZHcsY2h2ICovCkBAIC0xNjcsMTcgKzE5MywxMyBAQCBzdGF0aWMgaW50 IGdlbjhfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQogCVdBX1NFVF9GSUVMRF9NQVNLRUQoR0VON19HVF9NT0RFLAogCQkJICAgIEdFTjZfV0la X0hBU0hJTkdfTUFTSywKIAkJCSAgICBHRU42X1dJWl9IQVNISU5HXzE2eDQpOwotCi0JcmV0dXJu IDA7CiB9CiAKLXN0YXRpYyBpbnQgYmR3X2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGJkd19jdHhfd29ya2Fyb3VuZHNf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JaW50IHJldDsKKwlz dHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYtPmVuZ2luZVtSQ1NdLT5jdHhfd2Ff bGlzdDsKIAotCXJldCA9IGdlbjhfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOwotCWlm IChyZXQpCi0JCXJldHVybiByZXQ7CisJZ2VuOF9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJp dik7CiAKIAkvKiBXYURpc2FibGVUaHJlYWRTdGFsbERvcENsb2NrR2F0aW5nOmJkdyAocHJlLXBy b2R1Y3Rpb24pICovCiAJV0FfU0VUX0JJVF9NQVNLRUQoR0VOOF9ST1dfQ0hJQ0tFTiwgU1RBTExf RE9QX0dBVElOR19ESVNBQkxFKTsKQEAgLTE5OCwyOSArMjIwLDI1IEBAIHN0YXRpYyBpbnQgYmR3 X2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IAkJCSAgSERDX0ZPUkNFX0NPTlRFWFRfU0FWRV9SRVNUT1JFX05PTl9DT0hFUkVOVCB8CiAJCQkg IC8qIFdhRGlzYWJsZUZlbmNlRGVzdGluYXRpb25Ub1NMTTpiZHcgKHByZS1wcm9kKSAqLwogCQkJ ICAoSVNfQkRXX0dUMyhkZXZfcHJpdikgPyBIRENfRkVOQ0VfREVTVF9TTE1fRElTQUJMRSA6IDAp KTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNodl9jdHhfd29ya2Fyb3VuZHNfaW5p dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBjaHZfY3R4 X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewot CWludCByZXQ7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmRldl9wcml2LT5lbmdpbmVb UkNTXS0+Y3R4X3dhX2xpc3Q7CiAKLQlyZXQgPSBnZW44X2N0eF93b3JrYXJvdW5kc19pbml0KGRl dl9wcml2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWdlbjhfY3R4X3dvcmthcm91bmRz X2luaXQoZGV2X3ByaXYpOwogCiAJLyogV2FEaXNhYmxlVGhyZWFkU3RhbGxEb3BDbG9ja0dhdGlu ZzpjaHYgKi8KIAlXQV9TRVRfQklUX01BU0tFRChHRU44X1JPV19DSElDS0VOLCBTVEFMTF9ET1Bf R0FUSU5HX0RJU0FCTEUpOwogCiAJLyogSW1wcm92ZSBIaVogdGhyb3VnaHB1dCBvbiBDSFYuICov CiAJV0FfU0VUX0JJVF9NQVNLRUQoSElaX0NISUNLRU4sIENIVl9IWl84WDhfTU9ERV9JTl8xWCk7 Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW45X2N0eF93b3JrYXJvdW5kc19pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGdlbjlfY3R4 X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewor CXN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9ICZkZXZfcHJpdi0+ZW5naW5lW1JDU10tPmN0eF93 YV9saXN0OworCiAJaWYgKEhBU19MTEMoZGV2X3ByaXYpKSB7CiAJCS8qIFdhQ29tcHJlc3NlZFJl c291cmNlU2FtcGxlclBiZU1lZGlhTmV3SGFzaE1vZGU6c2tsLGtibAogCQkgKgpAQCAtMzE0LDEy ICszMzIsMTEgQEAgc3RhdGljIGludCBnZW45X2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkvKiBXYUNsZWFySElaX1dNX0NISUNLRU4zOmJ4 dCxnbGsgKi8KIAlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpCiAJCVdBX1NFVF9CSVRfTUFTS0VE KEdFTjlfV01fQ0hJQ0tFTjMsIEdFTjlfRkFDVE9SX0lOX0NMUl9WQUxfSElaKTsKLQotCXJldHVy biAwOwogfQogCi1zdGF0aWMgaW50IHNrbF90dW5lX2l6X2hhc2hpbmcoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgc2tsX3R1bmVfaXpfaGFzaGluZyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAq d2FsID0gJmRldl9wcml2LT5lbmdpbmVbUkNTXS0+Y3R4X3dhX2xpc3Q7CiAJdTggdmFsc1szXSA9 IHsgMCwgMCwgMCB9OwogCXVuc2lnbmVkIGludCBpOwogCkBAIC0zNDQsNyArMzYxLDcgQEAgc3Rh dGljIGludCBza2xfdHVuZV9pel9oYXNoaW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIAl9CiAKIAlpZiAodmFsc1swXSA9PSAwICYmIHZhbHNbMV0gPT0gMCAmJiB2YWxzWzJd ID09IDApCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAkvKiBUdW5lIElaIGhhc2hpbmcuIFNl ZSBpbnRlbF9kZXZpY2VfaW5mb19ydW50aW1lX2luaXQoKSAqLwogCVdBX1NFVF9GSUVMRF9NQVNL RUQoR0VON19HVF9NT0RFLApAQCAtMzU0LDI4ICszNzEsMTkgQEAgc3RhdGljIGludCBza2xfdHVu ZV9pel9oYXNoaW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJCSAgICBH RU45X0laX0hBU0hJTkcoMiwgdmFsc1syXSkgfAogCQkJICAgIEdFTjlfSVpfSEFTSElORygxLCB2 YWxzWzFdKSB8CiAJCQkgICAgR0VOOV9JWl9IQVNISU5HKDAsIHZhbHNbMF0pKTsKLQotCXJldHVy biAwOwogfQogCi1zdGF0aWMgaW50IHNrbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBza2xfY3R4X3dvcmthcm91bmRz X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCWludCByZXQ7Ci0K LQlyZXQgPSBnZW45X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKLQlpZiAocmV0KQot CQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHNrbF90dW5lX2l6X2hhc2hpbmcoZGV2X3ByaXYpOwor CWdlbjlfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCXNrbF90dW5lX2l6X2hhc2hp bmcoZGV2X3ByaXYpOwogfQogCi1zdGF0aWMgaW50IGJ4dF9jdHhfd29ya2Fyb3VuZHNfaW5pdChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBieHRfY3R4X3dv cmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCWlu dCByZXQ7CisJc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmRldl9wcml2LT5lbmdpbmVbUkNT XS0+Y3R4X3dhX2xpc3Q7CiAKLQlyZXQgPSBnZW45X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9w cml2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWdlbjlfY3R4X3dvcmthcm91bmRzX2lu aXQoZGV2X3ByaXYpOwogCiAJLyogV2FEaXNhYmxlVGhyZWFkU3RhbGxEb3BDbG9ja0dhdGluZzpi eHQgKi8KIAlXQV9TRVRfQklUX01BU0tFRChHRU44X1JPV19DSElDS0VOLApAQCAtMzg0LDE3ICsz OTIsMTMgQEAgc3RhdGljIGludCBieHRfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQogCS8qIFdhVG9FbmFibGVId0ZpeEZvclB1c2hDb25zdEhX QnVnOmJ4dCAqLwogCVdBX1NFVF9CSVRfTUFTS0VEKENPTU1PTl9TTElDRV9DSElDS0VOMiwKIAkJ CSAgR0VOOF9TQkVfRElTQUJMRV9SRVBMQVlfQlVGX09QVElNSVpBVElPTik7Ci0KLQlyZXR1cm4g MDsKIH0KIAotc3RhdGljIGludCBrYmxfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQga2JsX2N0eF93b3JrYXJvdW5kc19p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlpbnQgcmV0OworCXN0 cnVjdCBpOTE1X3dhX2xpc3QgKndhbCA9ICZkZXZfcHJpdi0+ZW5naW5lW1JDU10tPmN0eF93YV9s aXN0OwogCi0JcmV0ID0gZ2VuOV9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7Ci0JaWYg KHJldCkKLQkJcmV0dXJuIHJldDsKKwlnZW45X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2 KTsKIAogCS8qIFdhVG9FbmFibGVId0ZpeEZvclB1c2hDb25zdEhXQnVnOmtibCAqLwogCWlmIChJ U19LQkxfUkVWSUQoZGV2X3ByaXYsIEtCTF9SRVZJRF9DMCwgUkVWSURfRk9SRVZFUikpCkBAIC00 MDQsMzIgKzQwOCwyNCBAQCBzdGF0aWMgaW50IGtibF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJLyogV2FEaXNhYmxlU2JlQ2FjaGVEaXNw YXRjaFBvcnRTaGFyaW5nOmtibCAqLwogCVdBX1NFVF9CSVRfTUFTS0VEKEdFTjdfSEFMRl9TTElD RV9DSElDS0VOMSwKIAkJCSAgR0VON19TQkVfU1NfQ0FDSEVfRElTUEFUQ0hfUE9SVF9TSEFSSU5H X0RJU0FCTEUpOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2xrX2N0eF93b3JrYXJv dW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lk IGdsa19jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCiB7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYt PmVuZ2luZVtSQ1NdLT5jdHhfd2FfbGlzdDsKIAotCXJldCA9IGdlbjlfY3R4X3dvcmthcm91bmRz X2luaXQoZGV2X3ByaXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZ2VuOV9jdHhfd29y a2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAKIAkvKiBXYVRvRW5hYmxlSHdGaXhGb3JQdXNoQ29u c3RIV0J1ZzpnbGsgKi8KIAlXQV9TRVRfQklUX01BU0tFRChDT01NT05fU0xJQ0VfQ0hJQ0tFTjIs CiAJCQkgIEdFTjhfU0JFX0RJU0FCTEVfUkVQTEFZX0JVRl9PUFRJTUlaQVRJT04pOwotCi0JcmV0 dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2ZsX2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGNmbF9jdHhfd29ya2Fyb3Vu ZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JaW50IHJldDsK KwlzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYtPmVuZ2luZVtSQ1NdLT5jdHhf d2FfbGlzdDsKIAotCXJldCA9IGdlbjlfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOwot CWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZ2VuOV9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZf cHJpdik7CiAKIAkvKiBXYVRvRW5hYmxlSHdGaXhGb3JQdXNoQ29uc3RIV0J1ZzpjZmwgKi8KIAlX QV9TRVRfQklUX01BU0tFRChDT01NT05fU0xJQ0VfQ0hJQ0tFTjIsCkBAIC00MzgsMTIgKzQzNCwx MiBAQCBzdGF0aWMgaW50IGNmbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiAJLyogV2FEaXNhYmxlU2JlQ2FjaGVEaXNwYXRjaFBvcnRTaGFy aW5nOmNmbCAqLwogCVdBX1NFVF9CSVRfTUFTS0VEKEdFTjdfSEFMRl9TTElDRV9DSElDS0VOMSwK IAkJCSAgR0VON19TQkVfU1NfQ0FDSEVfRElTUEFUQ0hfUE9SVF9TSEFSSU5HX0RJU0FCTEUpOwot Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY25sX2N0eF93b3JrYXJvdW5kc19pbml0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGNubF9jdHhfd29y a2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CisJc3Ry dWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmRldl9wcml2LT5lbmdpbmVbUkNTXS0+Y3R4X3dhX2xp c3Q7CisKIAkvKiBXYUZvcmNlQ29udGV4dFNhdmVSZXN0b3JlTm9uQ29oZXJlbnQ6Y25sICovCiAJ V0FfU0VUX0JJVF9NQVNLRUQoQ05MX0hEQ19DSElDS0VOMCwKIAkJCSAgSERDX0ZPUkNFX0NPTlRF WFRfU0FWRV9SRVNUT1JFX05PTl9DT0hFUkVOVCk7CkBAIC00NzcsMTIgKzQ3MywxMiBAQCBzdGF0 aWMgaW50IGNubF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCiAKIAkvKiBXYURpc2FibGVFYXJseUVPVDpjbmwgKi8KIAlXQV9TRVRfQklUX01B U0tFRChHRU44X1JPV19DSElDS0VOLCBESVNBQkxFX0VBUkxZX0VPVCk7Ci0KLQlyZXR1cm4gMDsK IH0KIAotc3RhdGljIGludCBpY2xfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgaWNsX2N0eF93b3JrYXJvdW5kc19pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKKwlzdHJ1Y3QgaTkxNV93YV9s aXN0ICp3YWwgPSAmZGV2X3ByaXYtPmVuZ2luZVtSQ1NdLT5jdHhfd2FfbGlzdDsKKwogCS8qIFdh XzE2MDQzNzA1ODU6aWNsIChwcmUtcHJvZCkKIAkgKiBGb3JtZXJseSBrbm93biBhcyBXYVB1c2hD b25zdGFudERlcmVmZXJlbmNlSG9sZERpc2FibGUKIAkgKi8KQEAgLTUxNCw2NyArNTEwLDYzIEBA IHN0YXRpYyBpbnQgaWNsX2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKIAlpZiAoSVNfSUNMX1JFVklEKGRldl9wcml2LCBJQ0xfUkVWSURfQTAs IElDTF9SRVZJRF9BMCkpCiAJCVdBX1NFVF9CSVRfTUFTS0VEKEdFTjExX0NPTU1PTl9TTElDRV9D SElDS0VOMywKIAkJCQkgIEdFTjExX0JMRU5EX0VNQl9GSVhfRElTQUJMRV9JTl9SQ0MpOwotCi0J cmV0dXJuIDA7CiB9CiAKLWludCBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit2b2lkIGludGVsX2N0eF93b3JrYXJvdW5kc19pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlpbnQgZXJyID0gMDsKKwlz dHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwgPSAmZGV2X3ByaXYtPmVuZ2luZVtSQ1NdLT5jdHhfd2Ff bGlzdDsKIAotCWRldl9wcml2LT53b3JrYXJvdW5kcy5jb3VudCA9IDA7CisJd2FfaW5pdF9zdGFy dCh3YWwsICJjb250ZXh0Iik7CiAKIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDgpCi0JCWVy ciA9IDA7CisJCXJldHVybjsKIAllbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKQotCQll cnIgPSBiZHdfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCQliZHdfY3R4X3dvcmth cm91bmRzX2luaXQoZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYp KQotCQllcnIgPSBjaHZfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCQljaHZfY3R4 X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX1NLWUxBS0UoZGV2X3By aXYpKQotCQllcnIgPSBza2xfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCQlza2xf Y3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX0JST1hUT04oZGV2 X3ByaXYpKQotCQllcnIgPSBieHRfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCQli eHRfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX0tBQllMQUtF KGRldl9wcml2KSkKLQkJZXJyID0ga2JsX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsK KwkJa2JsX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKIAllbHNlIGlmIChJU19HRU1J TklMQUtFKGRldl9wcml2KSkKLQkJZXJyID0gZ2xrX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9w cml2KTsKKwkJZ2xrX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKIAllbHNlIGlmIChJ U19DT0ZGRUVMQUtFKGRldl9wcml2KSkKLQkJZXJyID0gY2ZsX2N0eF93b3JrYXJvdW5kc19pbml0 KGRldl9wcml2KTsKKwkJY2ZsX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKIAllbHNl IGlmIChJU19DQU5OT05MQUtFKGRldl9wcml2KSkKLQkJZXJyID0gY25sX2N0eF93b3JrYXJvdW5k c19pbml0KGRldl9wcml2KTsKKwkJY25sX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsK IAllbHNlIGlmIChJU19JQ0VMQUtFKGRldl9wcml2KSkKLQkJZXJyID0gaWNsX2N0eF93b3JrYXJv dW5kc19pbml0KGRldl9wcml2KTsKKwkJaWNsX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2 KTsKIAllbHNlCiAJCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oZGV2X3ByaXYpKTsKLQlpZiAoZXJy KQotCQlyZXR1cm4gZXJyOwogCi0JRFJNX0RFQlVHX0RSSVZFUigiTnVtYmVyIG9mIGNvbnRleHQg c3BlY2lmaWMgdy9hOiAlZFxuIiwKLQkJCSBkZXZfcHJpdi0+d29ya2Fyb3VuZHMuY291bnQpOwot CXJldHVybiAwOworCXdhX2luaXRfZmluaXNoKHdhbCk7CiB9CiAKIGludCBpbnRlbF9jdHhfd29y a2Fyb3VuZHNfZW1pdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgaTkxNV93 b3JrYXJvdW5kcyAqdyA9ICZycS0+aTkxNS0+d29ya2Fyb3VuZHM7CisJc3RydWN0IGk5MTVfd2Ff bGlzdCAqd2FsID0gJnJxLT5lbmdpbmUtPmN0eF93YV9saXN0OworCXN0cnVjdCBpOTE1X3dhICp3 YTsKKwl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgKmNzOwotCWludCByZXQsIGk7CisJaW50IHJldDsK IAotCWlmICh3LT5jb3VudCA9PSAwKQorCWlmICh3YWwtPmNvdW50ID09IDApCiAJCXJldHVybiAw OwogCiAJcmV0ID0gcnEtPmVuZ2luZS0+ZW1pdF9mbHVzaChycSwgRU1JVF9CQVJSSUVSKTsKIAlp ZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAody0+ Y291bnQgKiAyICsgMikpOworCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgKHdhbC0+Y291bnQg KiAyICsgMikpOwogCWlmIChJU19FUlIoY3MpKQogCQlyZXR1cm4gUFRSX0VSUihjcyk7CiAKLQkq Y3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKHctPmNvdW50KTsKLQlmb3IgKGkgPSAwOyBpIDwg dy0+Y291bnQ7IGkrKykgewotCQkqY3MrKyA9IHctPnJlZ1tpXS5hZGRyOwotCQkqY3MrKyA9IHct PnJlZ1tpXS52YWx1ZTsKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKHdhbC0+Y291bnQp OworCWZvciAoaSA9IDAsIHdhID0gd2FsLT5saXN0OyBpIDwgd2FsLT5jb3VudDsgaSsrLCB3YSsr KSB7CisJCSpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQod2EtPnJlZyk7CisJCSpjcysrID0g d2EtPnZhbDsKIAl9CiAJKmNzKysgPSBNSV9OT09QOwogCkBAIC01ODcsMzEgKzU3OSw2IEBAIGlu dCBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfZW1pdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIAly ZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLXdhbF9hZGQoc3RydWN0IGk5MTVfd2FfbGlzdCAq d2FsLCBjb25zdCBzdHJ1Y3QgaTkxNV93YSAqd2EpCi17Ci0JY29uc3QgdW5zaWduZWQgaW50IGdy b3cgPSA0OwotCi0JaWYgKHdhbC0+X19zaXplID09IHdhbC0+Y291bnQpIHsKLQkJc3RydWN0IGk5 MTVfd2EgKmxpc3Q7Ci0KLQkJbGlzdCA9IGtjYWxsb2Mod2FsLT5fX3NpemUgKyBncm93LCBzaXpl b2YoKndhKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbGlzdCkgewotCQkJRFJNX0VSUk9SKCJObyBz cGFjZSBmb3Igd29ya2Fyb3VuZCBpbml0IVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAo d2FsLT5saXN0KQotCQkJbWVtY3B5KGxpc3QsIHdhbC0+bGlzdCwgc2l6ZW9mKCp3YSkgKiB3YWwt PmNvdW50KTsKLQotCQl3YWwtPmxpc3QgPSBsaXN0OwotCQl3YWwtPl9fc2l6ZSArPSBncm93Owot CX0KLQotCW1lbWNweSgmd2FsLT5saXN0W3dhbC0+Y291bnRdLCB3YSwgc2l6ZW9mKCp3YSkpOwot CXdhbC0+Y291bnQrKzsKLX0KLQogc3RhdGljIHZvaWQKIHdhX21hc2tlZF9lbihzdHJ1Y3QgaTkx NV93YV9saXN0ICp3YWwsIGk5MTVfcmVnX3QgcmVnLCB1MzIgdmFsKQogewpAQCAtNjIxLDcgKzU4 OCw3IEBAIHdhX21hc2tlZF9lbihzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwsIGk5MTVfcmVnX3Qg cmVnLCB1MzIgdmFsKQogCQkudmFsID0gX01BU0tFRF9CSVRfRU5BQkxFKHZhbCkKIAl9OwogCi0J d2FsX2FkZCh3YWwsICZ3YSk7CisJX3dhX2FkZCh3YWwsICZ3YSk7CiB9CiAKIHN0YXRpYyB2b2lk CkBAIC02MzQsNyArNjAxLDcgQEAgd2Ffd3JpdGVfbWFza2VkX29yKHN0cnVjdCBpOTE1X3dhX2xp c3QgKndhbCwgaTkxNV9yZWdfdCByZWcsIHUzMiBtYXNrLAogCQkudmFsID0gdmFsCiAJfTsKIAot CXdhbF9hZGQod2FsLCAmd2EpOworCV93YV9hZGQod2FsLCAmd2EpOwogfQogCiBzdGF0aWMgdm9p ZApAQCAtMTAyNSw3ICs5OTIsNyBAQCB3aGl0ZWxpc3RfcmVnKHN0cnVjdCBpOTE1X3dhX2xpc3Qg KndhbCwgaTkxNV9yZWdfdCByZWcpCiAJaWYgKEdFTV9ERUJVR19XQVJOX09OKHdhbC0+Y291bnQg Pj0gUklOR19NQVhfTk9OUFJJVl9TTE9UUykpCiAJCXJldHVybjsKIAotCXdhbF9hZGQod2FsLCAm d2EpOworCV93YV9hZGQod2FsLCAmd2EpOwogfQogCiBzdGF0aWMgdm9pZCBnZW45X3doaXRlbGlz dF9idWlsZChzdHJ1Y3QgaTkxNV93YV9saXN0ICp3KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3dvcmthcm91bmRzLmgKaW5kZXggZTZkYTMxZjBjZWI2Li4yMTI5ZDZlOWZjYzkgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaApAQCAtMTgsNiArMTgsNyBAQCBzdHJ1 Y3QgaTkxNV93YSB7CiBzdHJ1Y3QgaTkxNV93YV9saXN0IHsKIAljb25zdCBjaGFyCSpuYW1lOwog CXVuc2lnbmVkIGludCAJY291bnQ7CisJdW5zaWduZWQgaW50CXdhX2NvdW50OwogCXN0cnVjdCBp OTE1X3dhCSpsaXN0OwogCXVuc2lnbmVkIGludAlfX3NpemU7CiB9OwpAQCAtMjgsNyArMjksNyBA QCBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfd2FfbGlzdF9mcmVlKHN0cnVjdCBpOTE1X3dhX2xp c3QgKndhbCkKIAltZW1zZXQod2FsLCAwLCBzaXplb2YoKndhbCkpOwogfQogCi1pbnQgaW50ZWxf Y3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK K3ZvaWQgaW50ZWxfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KTsKIGludCBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfZW1pdChzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSk7CiAKIHZvaWQgaW50ZWxfZ3Rfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotLSAKMi4xOS4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK