From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH] drm/i915: Check whitelist registers across resets Date: Thu, 12 Apr 2018 16:13:57 +0100 Message-ID: <20180412151357.601-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id D0CC06E141 for ; Thu, 12 Apr 2018 15:14:14 +0000 (UTC) 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 QWRkIGEgc2VsZnRlc3QgdG8gZW5zdXJlIHRoYXQgd2UgcmVzdG9yZSB0aGUgd2hpdGVsaXN0ZWQg cmVnaXN0ZXJzIGFmdGVyCnJld3JpdGUgdGhlIHJlZ2lzdGVycyBldmVyeXRpbWUgdGhleSBtaWdo dCBiZSBzY3J1YmJlZCwgZS5nLiBtb2R1bGUKbG9hZCwgcmVzZXQgYW5kIHJlc3VtZS4gRm9yIHRo ZSBvdGhlciB2b2xhdGlsZSB3b3JrYXJvdW5kIHJlZ2lzdGVycywgd2UKZXhwb3J0IHRoZWlyIHBy ZXNlbmNlIHZpYSBkZWJ1Z2ZzIGFuZCBjaGVjayBpbiBpZ3QvZ2VtX3dvcmthcm91bmRzLgpIb3dl dmVyLCB3ZSBkb24ndCBleHBvcnQgdGhlIHdoaXRlbGlzdCBhbmQgcmF0aGVyIHRoYW4gZG8gc28s IGxldCdzIHRlc3QKdGhlbSBkaXJlY3RseSBpbiB0aGUga2VybmVsLgoKVGhlIHRlc3Qgd2UgdXNl IGlzIHRvIHJlYWQgdGhlIHJlZ2lzdGVycyBiYWNrIGZyb20gdGhlIENTICh0aGlzIGhlbHBzIHVz CmJlIHN1cmUgdGhhdCB0aGUgcmVnaXN0ZXJzIHdpbGwgYmUgdmFsaWQgZm9yIE1JX0xSSSBldGMp LiBJbiBvcmRlciB0bwpnZW5lcmF0ZSB0aGUgZXhwZWN0ZWQgbGlzdCwgd2Ugc3BsaXQgaW50ZWxf d2hpdGVsaXN0X3dvcmthcm91bmRzX2VtaXQKaW50byB0d28gcGhhc2VzLCB0aGUgZmlyc3QgdG8g YnVpbGQgdGhlIGxpc3QgYW5kIHRoZSBzZWNvbmQgdG8gYXBwbHkuCkluc2lkZSB0aGUgdGVzdCwg d2Ugb25seSBidWlsZCB0aGUgbGlzdCBhbmQgdGhlbiBjaGVjayB0aGF0IGxpc3QgYWdhaW5zdAp0 aGUgaHcuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KQ2M6IE9zY2FyIE1hdGVvIDxvc2Nhci5tYXRlb0BpbnRlbC5jb20+CkNjOiBNaWthIEt1 b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IEpvb25hcyBMYWh0aW5l biA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgICAgICAgfCAgMTQgKy0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuYyAgICAgICAgICAgICAgfCAgIDggKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuYyAgICAgICB8ICAgNCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfd29ya2Fyb3VuZHMuYyAgICAgIHwgMjEyICsrKysrKy0tLS0tLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmggICAgICB8ICAgMiArLQogLi4uL2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmggIHwgICAxICsKIC4uLi9kcm0vaTkxNS9z ZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3VuZHMuYyAgICB8IDI4MiArKysrKysrKysrKysrKysrKysK IDggZmlsZXMgY2hhbmdlZCwgMzg0IGluc2VydGlvbnMoKyksIDE0MCBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfd29y a2Fyb3VuZHMuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdm cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggMmU2NjUyYTli YjllLi5lMDI3NGY0MWJjNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC0z MzA0LDI0ICszMzA0LDEzIEBAIHN0YXRpYyBpbnQgaTkxNV9zaGFyZWRfZHBsbHNfaW5mbyhzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAogc3RhdGljIGludCBpOTE1X3dhX3JlZ2lz dGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIHsKLQlpbnQgaTsKLQlpbnQg cmV0OwotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwogCXN0cnVjdCBpOTE1X3dvcmthcm91bmRz ICp3b3JrYXJvdW5kcyA9ICZkZXZfcHJpdi0+d29ya2Fyb3VuZHM7Ci0JZW51bSBpbnRlbF9lbmdp bmVfaWQgaWQ7Ci0KLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+c3RydWN0 X211dGV4KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWludCBpOwogCiAJaW50ZWxfcnVu dGltZV9wbV9nZXQoZGV2X3ByaXYpOwogCiAJc2VxX3ByaW50ZihtLCAiV29ya2Fyb3VuZHMgYXBw bGllZDogJWRcbiIsIHdvcmthcm91bmRzLT5jb3VudCk7Ci0JZm9yX2VhY2hfZW5naW5lKGVuZ2lu ZSwgZGV2X3ByaXYsIGlkKQotCQlzZXFfcHJpbnRmKG0sICJIVyB3aGl0ZWxpc3QgY291bnQgZm9y ICVzOiAlZFxuIiwKLQkJCSAgIGVuZ2luZS0+bmFtZSwgd29ya2Fyb3VuZHMtPmh3X3doaXRlbGlz dF9jb3VudFtpZF0pOwogCWZvciAoaSA9IDA7IGkgPCB3b3JrYXJvdW5kcy0+Y291bnQ7ICsraSkg ewogCQlpOTE1X3JlZ190IGFkZHI7CiAJCXUzMiBtYXNrLCB2YWx1ZSwgcmVhZDsKQEAgLTMzMzcs NyArMzMyNiw2IEBAIHN0YXRpYyBpbnQgaTkxNV93YV9yZWdpc3RlcnMoc3RydWN0IHNlcV9maWxl ICptLCB2b2lkICp1bnVzZWQpCiAJfQogCiAJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYp OwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA2NDljMGYyZjNiYWUuLjE1ZTEyNjBiZTU4ZSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xMjk3LDcgKzEyOTcsNiBAQCBzdHJ1Y3QgaTkxNV93 YV9yZWcgewogc3RydWN0IGk5MTVfd29ya2Fyb3VuZHMgewogCXN0cnVjdCBpOTE1X3dhX3JlZyBy ZWdbSTkxNV9NQVhfV0FfUkVHU107CiAJdTMyIGNvdW50OwotCXUzMiBod193aGl0ZWxpc3RfY291 bnRbSTkxNV9OVU1fRU5HSU5FU107CiB9OwogCiBzdHJ1Y3QgaTkxNV92aXJ0dWFsX2dwdSB7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4IGM3Yzg1MTM0YTg0YS4uNGY3Mjg1ODdhNzU2IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwpAQCAtMTc0NCw5ICsxNzQ0LDcgQEAgc3RhdGljIGlu dCBnZW44X2luaXRfcmVuZGVyX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQog CWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBpbnRlbF93aGl0ZWxpc3Rfd29ya2Fy b3VuZHNfYXBwbHkoZW5naW5lKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWludGVsX3do aXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwogCiAJLyogV2UgbmVlZCB0byBkaXNh YmxlIHRoZSBBc3luY0ZsaXAgcGVyZm9ybWFuY2Ugb3B0aW1pc2F0aW9ucyBpbiBvcmRlcgogCSAq IHRvIHVzZSBNSV9XQUlUX0ZPUl9FVkVOVCB3aXRoaW4gdGhlIENTLiBJdCBzaG91bGQgYWxyZWFk eSBiZQpAQCAtMTc2OSw5ICsxNzY3LDcgQEAgc3RhdGljIGludCBnZW45X2luaXRfcmVuZGVyX3Jp bmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWlmIChyZXQpCiAJCXJldHVybiBy ZXQ7CiAKLQlyZXQgPSBpbnRlbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsK LQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWludGVsX3doaXRlbGlzdF93b3JrYXJvdW5kc19h cHBseShlbmdpbmUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y aW5nYnVmZmVyLmMKaW5kZXggNzU3YmIwOTkwYzA3Li5jNjhhYzYwNWI4YTkgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKQEAgLTYxOCw5ICs2MTgsNyBAQCBzdGF0aWMg aW50IGluaXRfcmVuZGVyX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWlm IChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBpbnRlbF93aGl0ZWxpc3Rfd29ya2Fyb3Vu ZHNfYXBwbHkoZW5naW5lKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWludGVsX3doaXRl bGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwogCiAJLyogV2FUaW1lZFNpbmdsZVZlcnRl eERpc3BhdGNoOmNsLGJ3LGN0ZyxlbGssaWxrLHNuYiAqLwogCWlmIChJU19HRU4oZGV2X3ByaXYs IDQsIDYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3Vu ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmMKaW5kZXggYmJi ZjRlZDRhYTk3Li4yNzY1ZTUzOThhMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3dvcmthcm91bmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29y a2Fyb3VuZHMuYwpAQCAtNjg3LDE3MCArNjg3LDE1MCBAQCB2b2lkIGludGVsX2d0X3dvcmthcm91 bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJTUlTU0lOR19D QVNFKElOVEVMX0dFTihkZXZfcHJpdikpOwogfQogCi1zdGF0aWMgaW50IHdhX3Jpbmdfd2hpdGVs aXN0X3JlZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkJIGk5MTVfcmVnX3Qg cmVnKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkx NTsKLQlzdHJ1Y3QgaTkxNV93b3JrYXJvdW5kcyAqd2EgPSAmZGV2X3ByaXYtPndvcmthcm91bmRz OwotCWNvbnN0IHVuc2lnbmVkIGludCBpbmRleCA9IHdhLT5od193aGl0ZWxpc3RfY291bnRbZW5n aW5lLT5pZF07Ci0KLQlpZiAoV0FSTl9PTihpbmRleCA+PSBSSU5HX01BWF9OT05QUklWX1NMT1RT KSkKLQkJcmV0dXJuIC1FSU5WQUw7CitzdHJ1Y3Qgd2hpdGVsaXN0IHsKKwlpOTE1X3JlZ190IHJl Z1tSSU5HX01BWF9OT05QUklWX1NMT1RTXTsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdTMyIG5v cGlkOworfTsKIAotCUk5MTVfV1JJVEUoUklOR19GT1JDRV9UT19OT05QUklWKGVuZ2luZS0+bW1p b19iYXNlLCBpbmRleCksCi0JCSAgIGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJlZykpOwotCXdhLT5o d193aGl0ZWxpc3RfY291bnRbZW5naW5lLT5pZF0rKzsKK3N0YXRpYyB2b2lkIHdoaXRlbGlzdF9y ZWcoc3RydWN0IHdoaXRlbGlzdCAqdywgaTkxNV9yZWdfdCByZWcpCit7CisJaWYgKEdFTV9XQVJO X09OKHctPmNvdW50ID49IFJJTkdfTUFYX05PTlBSSVZfU0xPVFMpKQorCQlyZXR1cm47CiAKLQly ZXR1cm4gMDsKKwl3LT5yZWdbdy0+Y291bnQrK10gPSByZWc7CiB9CiAKLXN0YXRpYyBpbnQgYmR3 X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCitzdGF0aWMgdm9pZCBiZHdfd2hpdGVsaXN0X2J1aWxkKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKKwkJCQlzdHJ1Y3Qgd2hpdGVsaXN0ICp3KQogewotCXJldHVybiAwOwogfQog Ci1zdGF0aWMgaW50IGNodl93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIHZvaWQgY2h2X3doaXRlbGlzdF9idWlsZChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJCQkJc3RydWN0IHdoaXRlbGlzdCAqdykKIHsK LQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW45X3doaXRlbGlzdF93b3JrYXJvdW5kc19h cHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCitzdGF0aWMgdm9pZCBnZW45X3do aXRlbGlzdF9idWlsZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJCQkJIHN0cnVj dCB3aGl0ZWxpc3QgKncpCiB7Ci0JaW50IHJldDsKLQogCS8qIFdhVkZFU3RhdGVBZnRlclBpcGVD b250cm9sd2l0aE1lZGlhU3RhdGVDbGVhcjpza2wsYnh0LGdsayxjZmwgKi8KLQlyZXQgPSB3YV9y aW5nX3doaXRlbGlzdF9yZWcoZW5naW5lLCBHRU45X0NUWF9QUkVFTVBUX1JFRyk7Ci0JaWYgKHJl dCkKLQkJcmV0dXJuIHJldDsKKwl3aGl0ZWxpc3RfcmVnKHcsIEdFTjlfQ1RYX1BSRUVNUFRfUkVH KTsKIAogCS8qIFdhRW5hYmxlUHJlZW1wdGlvbkdyYW51bGFyaXR5Q29udHJvbEJ5VU1EOnNrbCxi eHQsa2JsLGNmbCxbY25sXSAqLwotCXJldCA9IHdhX3Jpbmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUs IEdFTjhfQ1NfQ0hJQ0tFTjEpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJd2hpdGVsaXN0 X3JlZyh3LCBHRU44X0NTX0NISUNLRU4xKTsKIAogCS8qIFdhQWxsb3dVTURUb01vZGlmeUhEQ0No aWNrZW4xOnNrbCxieHQsa2JsLGdsayxjZmwgKi8KLQlyZXQgPSB3YV9yaW5nX3doaXRlbGlzdF9y ZWcoZW5naW5lLCBHRU44X0hEQ19DSElDS0VOMSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsK LQotCXJldHVybiAwOworCXdoaXRlbGlzdF9yZWcodywgR0VOOF9IRENfQ0hJQ0tFTjEpOwogfQog Ci1zdGF0aWMgaW50IHNrbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIHZvaWQgc2tsX3doaXRlbGlzdF9idWlsZChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJCQkJc3RydWN0IHdoaXRlbGlzdCAqdykKIHsK LQlpbnQgcmV0OwotCi0JcmV0ID0gZ2VuOV93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5n aW5lKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWdlbjlfd2hpdGVsaXN0X2J1aWxkKGVu Z2luZSwgdyk7CiAKIAkvKiBXYURpc2FibGVMU1FDUk9QRVJGZm9yT0NMOnNrbCAqLwotCXJldCA9 IHdhX3Jpbmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUsIEdFTjhfTDNTUUNSRUc0KTsKLQlpZiAocmV0 KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7CisJd2hpdGVsaXN0X3JlZyh3LCBHRU44X0wz U1FDUkVHNCk7CiB9CiAKLXN0YXRpYyBpbnQgYnh0X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBs eShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCitzdGF0aWMgdm9pZCBieHRfd2hpdGVs aXN0X2J1aWxkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQlzdHJ1Y3Qgd2hp dGVsaXN0ICp3KQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBnZW45X3doaXRlbGlzdF93b3JrYXJv dW5kc19hcHBseShlbmdpbmUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4g MDsKKwlnZW45X3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOwogfQogCi1zdGF0aWMgaW50IGti bF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQorc3RhdGljIHZvaWQga2JsX3doaXRlbGlzdF9idWlsZChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsCisJCQkJc3RydWN0IHdoaXRlbGlzdCAqdykKIHsKLQlpbnQgcmV0OwotCi0J cmV0ID0gZ2VuOV93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKLQlpZiAocmV0 KQotCQlyZXR1cm4gcmV0OworCWdlbjlfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgdyk7CiAKIAkv KiBXYURpc2FibGVMU1FDUk9QRVJGZm9yT0NMOmtibCAqLwotCXJldCA9IHdhX3Jpbmdfd2hpdGVs aXN0X3JlZyhlbmdpbmUsIEdFTjhfTDNTUUNSRUc0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0 OwotCi0JcmV0dXJuIDA7CisJd2hpdGVsaXN0X3JlZyh3LCBHRU44X0wzU1FDUkVHNCk7CiB9CiAK LXN0YXRpYyBpbnQgZ2xrX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCitzdGF0aWMgdm9pZCBnbGtfd2hpdGVsaXN0X2J1aWxkKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQlzdHJ1Y3Qgd2hpdGVsaXN0ICp3KQogewot CWludCByZXQ7Ci0KLQlyZXQgPSBnZW45X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdp bmUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZ2VuOV93aGl0ZWxpc3RfYnVpbGQoZW5n aW5lLCB3KTsKIAogCS8qIFdBICMwODYyOiBVc2Vyc3BhY2UgaGFzIHRvIHNldCAiQmFycmllciBN b2RlIiB0byBhdm9pZCBoYW5ncy4gKi8KLQlyZXQgPSB3YV9yaW5nX3doaXRlbGlzdF9yZWcoZW5n aW5lLCBHRU45X1NMSUNFX0NPTU1PTl9FQ09fQ0hJQ0tFTjEpOwotCWlmIChyZXQpCi0JCXJldHVy biByZXQ7Ci0KLQlyZXR1cm4gMDsKKwl3aGl0ZWxpc3RfcmVnKHcsIEdFTjlfU0xJQ0VfQ09NTU9O X0VDT19DSElDS0VOMSk7CiB9CiAKLXN0YXRpYyBpbnQgY2ZsX3doaXRlbGlzdF93b3JrYXJvdW5k c19hcHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCitzdGF0aWMgdm9pZCBjZmxf d2hpdGVsaXN0X2J1aWxkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQlzdHJ1 Y3Qgd2hpdGVsaXN0ICp3KQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBnZW45X3doaXRlbGlzdF93 b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQly ZXR1cm4gMDsKKwlnZW45X3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOwogfQogCi1zdGF0aWMg aW50IGNubF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQorc3RhdGljIHZvaWQgY25sX3doaXRlbGlzdF9idWlsZChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCisJCQkJc3RydWN0IHdoaXRlbGlzdCAqdykKIHsKLQlpbnQgcmV0 OwotCiAJLyogV2FFbmFibGVQcmVlbXB0aW9uR3JhbnVsYXJpdHlDb250cm9sQnlVTUQ6Y25sICov Ci0JcmV0ID0gd2FfcmluZ193aGl0ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOF9DU19DSElDS0VOMSk7 Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwl3aGl0ZWxpc3RfcmVnKHcsIEdFTjhfQ1NfQ0hJ Q0tFTjEpOworfQorCitzdGF0aWMgc3RydWN0IHdoaXRlbGlzdCAqd2hpdGVsaXN0X2J1aWxkKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQkJIHN0cnVjdCB3aGl0ZWxpc3QgKncp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdpbmUtPmk5MTU7CisKKwlH RU1fQlVHX09OKGVuZ2luZS0+aWQgIT0gUkNTKTsKKworCXctPmNvdW50ID0gMDsKKwl3LT5ub3Bp ZCA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfTk9QSUQoZW5naW5lLT5tbWlvX2Jhc2UpKTsK KworCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA4KQorCQk7CisJZWxzZSBpZiAoSVNfQlJPQURXRUxM KGk5MTUpKQorCQliZHdfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgdyk7CisJZWxzZSBpZiAoSVNf Q0hFUlJZVklFVyhpOTE1KSkKKwkJY2h2X3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOworCWVs c2UgaWYgKElTX1NLWUxBS0UoaTkxNSkpCisJCXNrbF93aGl0ZWxpc3RfYnVpbGQoZW5naW5lLCB3 KTsKKwllbHNlIGlmIChJU19CUk9YVE9OKGk5MTUpKQorCQlieHRfd2hpdGVsaXN0X2J1aWxkKGVu Z2luZSwgdyk7CisJZWxzZSBpZiAoSVNfS0FCWUxBS0UoaTkxNSkpCisJCWtibF93aGl0ZWxpc3Rf YnVpbGQoZW5naW5lLCB3KTsKKwllbHNlIGlmIChJU19HRU1JTklMQUtFKGk5MTUpKQorCQlnbGtf d2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgdyk7CisJZWxzZSBpZiAoSVNfQ09GRkVFTEFLRShpOTE1 KSkKKwkJY2ZsX3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOworCWVsc2UgaWYgKElTX0NBTk5P TkxBS0UoaTkxNSkpCisJCWNubF93aGl0ZWxpc3RfYnVpbGQoZW5naW5lLCB3KTsKKwllbHNlCisJ CU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oaTkxNSkpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHc7 CiB9CiAKLWludCBpbnRlbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIHZvaWQgd2hpdGVsaXN0X2FwcGx5KHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgd2hpdGVsaXN0ICp3 KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsK LQlpbnQgZXJyID0gMDsKKwljb25zdCB1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOworCXVu c2lnbmVkIGludCBpOwogCi0JV0FSTl9PTihlbmdpbmUtPmlkICE9IFJDUyk7CisJaW50ZWxfdW5j b3JlX2ZvcmNld2FrZV9nZXQoZW5naW5lLT5pOTE1LCBGT1JDRVdBS0VfQUxMKTsKIAotCWRldl9w cml2LT53b3JrYXJvdW5kcy5od193aGl0ZWxpc3RfY291bnRbZW5naW5lLT5pZF0gPSAwOworCWZv ciAoaSA9IDA7IGkgPCB3LT5jb3VudDsgaSsrKQorCQlJOTE1X1dSSVRFX0ZXKFJJTkdfRk9SQ0Vf VE9fTk9OUFJJVihiYXNlLCBpKSwKKwkJCSAgICAgIGk5MTVfbW1pb19yZWdfb2Zmc2V0KHctPnJl Z1tpXSkpOwogCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA4KQotCQllcnIgPSAwOwotCWVs c2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikpCi0JCWVyciA9IGJkd193aGl0ZWxpc3Rfd29y a2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKLQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2 KSkKLQkJZXJyID0gY2h2X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwotCWVs c2UgaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpKQotCQllcnIgPSBza2xfd2hpdGVsaXN0X3dvcmth cm91bmRzX2FwcGx5KGVuZ2luZSk7Ci0JZWxzZSBpZiAoSVNfQlJPWFRPTihkZXZfcHJpdikpCi0J CWVyciA9IGJ4dF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKLQllbHNlIGlm IChJU19LQUJZTEFLRShkZXZfcHJpdikpCi0JCWVyciA9IGtibF93aGl0ZWxpc3Rfd29ya2Fyb3Vu ZHNfYXBwbHkoZW5naW5lKTsKLQllbHNlIGlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJ ZXJyID0gZ2xrX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwotCWVsc2UgaWYg KElTX0NPRkZFRUxBS0UoZGV2X3ByaXYpKQotCQllcnIgPSBjZmxfd2hpdGVsaXN0X3dvcmthcm91 bmRzX2FwcGx5KGVuZ2luZSk7Ci0JZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpCi0J CWVyciA9IGNubF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKLQllbHNlCi0J CU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oZGV2X3ByaXYpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4g ZXJyOworCS8qIEFuZCBjbGVhciB0aGUgcmVzdCBqdXN0IGluIGNhc2Ugb2YgZ2FyYmFnZSAqLwor CWZvciAoOyBpIDwgUklOR19NQVhfTk9OUFJJVl9TTE9UUzsgaSsrKQorCQlJOTE1X1dSSVRFX0ZX KFJJTkdfRk9SQ0VfVE9fTk9OUFJJVihiYXNlLCBpKSwgdy0+bm9waWQpOwogCi0JRFJNX0RFQlVH X0RSSVZFUigiJXM6IE51bWJlciBvZiB3aGl0ZWxpc3Qgdy9hOiAlZFxuIiwgZW5naW5lLT5uYW1l LAotCQkJIGRldl9wcml2LT53b3JrYXJvdW5kcy5od193aGl0ZWxpc3RfY291bnRbZW5naW5lLT5p ZF0pOwotCXJldHVybiAwOworCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGVuZ2luZS0+aTkx NSwgRk9SQ0VXQUtFX0FMTCk7CiB9CisKK3ZvaWQgaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91bmRz X2FwcGx5KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3Qgd2hpdGVs aXN0IHc7CisKKwl3aGl0ZWxpc3RfYXBwbHkoZW5naW5lLCB3aGl0ZWxpc3RfYnVpbGQoZW5naW5l LCAmdykpOworfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCisj aW5jbHVkZSAic2VsZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMiCisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oCmluZGV4IGQ5YjBjYzVhZmI0YS4uYjExZDA2 MjNlNjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5k cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmgKQEAgLTEy LDYgKzEyLDYgQEAgaW50IGludGVsX2N0eF93b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxKTsKIAogdm9pZCBpbnRlbF9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogCi1pbnQgaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91 bmRzX2FwcGx5KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cit2b2lkIGludGVsX3do aXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2xpdmVfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkx NV9saXZlX3NlbGZ0ZXN0cy5oCmluZGV4IDhiZjZhYTU3MzIyNi4uYTAwZTJiZDA4YmNlIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0 cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRl c3RzLmgKQEAgLTExLDYgKzExLDcgQEAKICAqLwogc2VsZnRlc3Qoc2FuaXR5Y2hlY2ssIGk5MTVf bGl2ZV9zYW5pdHljaGVjaykgLyoga2VlcCBmaXJzdCAoaWd0IHNlbGZjaGVjaykgKi8KIHNlbGZ0 ZXN0KHVuY29yZSwgaW50ZWxfdW5jb3JlX2xpdmVfc2VsZnRlc3RzKQorc2VsZnRlc3Qod29ya2Fy b3VuZHMsIGludGVsX3dvcmthcm91bmRzX2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QocmVxdWVz dHMsIGk5MTVfcmVxdWVzdF9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KG9iamVjdHMsIGk5MTVf Z2VtX29iamVjdF9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1fZG1h YnVmX2xpdmVfc2VsZnRlc3RzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaW50ZWxfd29ya2Fyb3VuZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjkwMjBjZDQwOWE1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgor ICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE4 IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIK KworI2luY2x1ZGUgIm1vY2tfY29udGV4dC5oIgorCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKgorcmVhZF9ub25wcml2cyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKnJlc3VsdDsKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKwlzdHJ1Y3QgaTkxNV92 bWEgKnZtYTsKKwljb25zdCB1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOworCXUzMiBzcm0s ICpjczsKKwlpbnQgZXJyOworCWludCBpOworCisJcmVzdWx0ID0gaTkxNV9nZW1fb2JqZWN0X2Ny ZWF0ZV9pbnRlcm5hbChlbmdpbmUtPmk5MTUsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihyZXN1 bHQpKQorCQlyZXR1cm4gcmVzdWx0OworCisJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9sZXZl bChyZXN1bHQsIEk5MTVfQ0FDSEVfTExDKTsKKworCWNzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9t YXAocmVzdWx0LCBJOTE1X01BUF9XQik7CisJaWYgKElTX0VSUihjcykpIHsKKwkJZXJyID0gUFRS X0VSUihjcyk7CisJCWdvdG8gZXJyX29iajsKKwl9CisJbWVtc2V0KGNzLCAweGM1LCBQQUdFX1NJ WkUpOworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAocmVzdWx0KTsKKworCXZtYSA9IGk5MTVf dm1hX2luc3RhbmNlKHJlc3VsdCwgJmVuZ2luZS0+aTkxNS0+Z2d0dC5iYXNlLCBOVUxMKTsKKwlp ZiAoSVNfRVJSKHZtYSkpIHsKKwkJZXJyID0gUFRSX0VSUih2bWEpOworCQlnb3RvIGVycl9vYmo7 CisJfQorCisJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX0dMT0JBTCk7CisJaWYg KGVycikKKwkJZ290byBlcnJfb2JqOworCisJcnEgPSBpOTE1X3JlcXVlc3RfYWxsb2MoZW5naW5l LCBjdHgpOworCWlmIChJU19FUlIocnEpKSB7CisJCWVyciA9IFBUUl9FUlIocnEpOworCQlnb3Rv IGVycl9waW47CisJfQorCisJc3JtID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgTUlfU1JNX0xS TV9HTE9CQUxfR1RUOworCWlmIChJTlRFTF9HRU4oY3R4LT5pOTE1KSA+PSA4KQorCQlzcm0rKzsK KworCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCAqIFJJTkdfTUFYX05PTlBSSVZfU0xPVFMp OworCWZvciAoaSA9IDA7IGkgPCBSSU5HX01BWF9OT05QUklWX1NMT1RTOyBpKyspIHsKKwkJKmNz KysgPSBzcm07CisJCSpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19GT1JDRV9UT19O T05QUklWKGJhc2UsIGkpKTsKKwkJKmNzKysgPSBpOTE1X2dndHRfb2Zmc2V0KHZtYSkgKyBzaXpl b2YodTMyKSAqIGk7CisJCSpjcysrID0gMDsKKwl9CisJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBj cyk7CisKKwlpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZSh2bWEsIHJxLCBFWEVDX09CSkVDVF9XUklU RSk7CisJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2sodm1hLT5yZXN2LCBOVUxMKTsKKwlyZXNlcnZh dGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2Uodm1hLT5yZXN2LCAmcnEtPmZlbmNlKTsKKwlyZXNl cnZhdGlvbl9vYmplY3RfdW5sb2NrKHZtYS0+cmVzdik7CisKKwlpOTE1X2dlbV9vYmplY3RfZ2V0 KHJlc3VsdCk7CisJaTkxNV9nZW1fb2JqZWN0X3NldF9hY3RpdmVfcmVmZXJlbmNlKHJlc3VsdCk7 CisKKwlfX2k5MTVfcmVxdWVzdF9hZGQocnEsIHRydWUpOworCWk5MTVfdm1hX3VucGluKHZtYSk7 CisKKwlyZXR1cm4gcmVzdWx0OworCitlcnJfcGluOgorCWk5MTVfdm1hX3VucGluKHZtYSk7Citl cnJfb2JqOgorCWk5MTVfZ2VtX29iamVjdF9wdXQocmVzdWx0KTsKKwlyZXR1cm4gRVJSX1BUUihl cnIpOworfQorCitzdGF0aWMgdTMyIGdldF93aGl0ZWxpc3RfcmVnKGNvbnN0IHN0cnVjdCB3aGl0 ZWxpc3QgKncsIHVuc2lnbmVkIGludCBpKQoreworCXJldHVybiBpIDwgdy0+Y291bnQgPyBpOTE1 X21taW9fcmVnX29mZnNldCh3LT5yZWdbaV0pIDogdy0+bm9waWQ7Cit9CisKK3N0YXRpYyB2b2lk IHByaW50X3Jlc3VsdHMoY29uc3Qgc3RydWN0IHdoaXRlbGlzdCAqdywgY29uc3QgdTMyICpyZXN1 bHRzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJJTkdfTUFYX05P TlBSSVZfU0xPVFM7IGkrKykgeworCQl1MzIgZXhwZWN0ZWQgPSBnZXRfd2hpdGVsaXN0X3JlZyh3 LCBpKTsKKwkJdTMyIGFjdHVhbCA9IHJlc3VsdHNbaV07CisKKwkJcHJfaW5mbygiUklOR19OT05Q UklWWyVkXTogZXhwZWN0ZWQgMHglMDh4LCBmb3VuZCAweCUwOHhcbiIsCisJCQlpLCBleHBlY3Rl ZCwgYWN0dWFsKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfd2hpdGVsaXN0KGNvbnN0IHN0 cnVjdCB3aGl0ZWxpc3QgKncsCisJCQkgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAor CQkJICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpyZXN1bHRzOworCXUzMiAqdmFkZHI7CisJaW50IGVycjsKKwlpbnQgaTsK KworCXJlc3VsdHMgPSByZWFkX25vbnByaXZzKGN0eCwgZW5naW5lKTsKKwlpZiAoSVNfRVJSKHJl c3VsdHMpKQorCQlyZXR1cm4gUFRSX0VSUihyZXN1bHRzKTsKKworCWVyciA9IGk5MTVfZ2VtX29i amVjdF9zZXRfdG9fY3B1X2RvbWFpbihyZXN1bHRzLCBmYWxzZSk7CisJaWYgKGVycikKKwkJZ290 byBvdXRfcHV0OworCisJdmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChyZXN1bHRzLCBJ OTE1X01BUF9XQik7CisJaWYgKElTX0VSUih2YWRkcikpIHsKKwkJZXJyID0gUFRSX0VSUih2YWRk cik7CisJCWdvdG8gb3V0X3B1dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgUklOR19NQVhfTk9O UFJJVl9TTE9UUzsgaSsrKSB7CisJCXUzMiBleHBlY3RlZCA9IGdldF93aGl0ZWxpc3RfcmVnKHcs IGkpOworCQl1MzIgYWN0dWFsID0gdmFkZHJbaV07CisKKwkJaWYgKGV4cGVjdGVkICE9IGFjdHVh bCkgeworCQkJcHJpbnRfcmVzdWx0cyh3LCB2YWRkcik7CisJCQlwcl9lcnIoIkludmFsaWQgUklO R19OT05QUklWWyVkXSwgZXhwZWN0ZWQgMHglMDh4LCBmb3VuZCAweCUwOHhcbiIsCisJCQkgICAg ICAgaSwgZXhwZWN0ZWQsIGFjdHVhbCk7CisKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsK KwkJfQorCX0KKworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAocmVzdWx0cyk7CitvdXRfcHV0 OgorCWk5MTVfZ2VtX29iamVjdF9wdXQocmVzdWx0cyk7CisJcmV0dXJuIGVycjsKK30KKworc3Rh dGljIGludCBkb19kZXZpY2VfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQor eworCWk5MTVfcmVzZXQoZW5naW5lLT5pOTE1LCBFTkdJTkVfTUFTSyhlbmdpbmUtPmlkKSwgTlVM TCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlyZXR1cm4gaTkxNV9yZXNldF9lbmdpbmUoZW5n aW5lLCBOVUxMKTsKK30KKworc3RhdGljIGludCBzd2l0Y2hfdG9fc2NyYXRjaF9jb250ZXh0KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCAqY3R4OworCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOworCisJY3R4ID0ga2VybmVsX2NvbnRl eHQoZW5naW5lLT5pOTE1KTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0 eCk7CisKKwlycSA9IGk5MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7CisJa2VybmVsX2Nv bnRleHRfY2xvc2UoY3R4KTsKKwlpZiAoSVNfRVJSKHJxKSkKKwkJcmV0dXJuIFBUUl9FUlIocnEp OworCisJaTkxNV9yZXF1ZXN0X2FkZChycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBjaGVja193aGl0ZWxpc3RfYWNyb3NzX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKKwkJCQkJaW50ICgqcmVzZXQpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKiksCisJCQkJ CWNvbnN0IHN0cnVjdCB3aGl0ZWxpc3QgKncsCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJ c3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKKwlpbnQgZXJyOworCisJY3R4ID0ga2VybmVs X2NvbnRleHQoZW5naW5lLT5pOTE1KTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJf RVJSKGN0eCk7CisKKwllcnIgPSBjaGVja193aGl0ZWxpc3QodywgY3R4LCBlbmdpbmUpOworCWlm IChlcnIpIHsKKwkJcHJfZXJyKCJJbnZhbGlkIHdoaXRlbGlzdCAqYmVmb3JlKiAlcyByZXNldCFc biIsIG5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBzd2l0Y2hfdG9fc2NyYXRjaF9j b250ZXh0KGVuZ2luZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSByZXNldChl bmdpbmUpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCIlcyByZXNldCBmYWlsZWRcbiIsIG5hbWUp OworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBjaGVja193aGl0ZWxpc3QodywgY3R4LCBlbmdp bmUpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJXaGl0ZWxpc3Qgbm90IHByZXNlcnZlZCBpbiBj b250ZXh0IGFjcm9zcyAlcyByZXNldCFcbiIsCisJCSAgICAgICBuYW1lKTsKKwkJZ290byBvdXQ7 CisJfQorCisJa2VybmVsX2NvbnRleHRfY2xvc2UoY3R4KTsKKworCWN0eCA9IGtlcm5lbF9jb250 ZXh0KGVuZ2luZS0+aTkxNSk7CisJaWYgKElTX0VSUihjdHgpKQorCQlyZXR1cm4gUFRSX0VSUihj dHgpOworCisJZXJyID0gY2hlY2tfd2hpdGVsaXN0KHcsIGN0eCwgZW5naW5lKTsKKwlpZiAoZXJy KSB7CisJCXByX2VycigiSW52YWxpZCB3aGl0ZWxpc3QgKmFmdGVyKiAlcyByZXNldCBpbiBmcmVz aCBjb250ZXh0IVxuIiwKKwkJICAgICAgIG5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoK KwlrZXJuZWxfY29udGV4dF9jbG9zZShjdHgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBp bnQgbGl2ZV9yZXNldF93aGl0ZWxpc3Qodm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gYXJnOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IGk5 MTUtPmVuZ2luZVtSQ1NdOworCXN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IgPSAmaTkxNS0+ Z3B1X2Vycm9yOworCXN0cnVjdCB3aGl0ZWxpc3QgdzsKKwlpbnQgZXJyOworCisJLyogSWYgd2Ug cmVzZXQgdGhlIGdwdSwgd2Ugc2hvdWxkIG5vdCBsb3NlIHRoZSBSSU5HX05PTlBSSVYgKi8KKwor CWlmICghZW5naW5lKQorCQlyZXR1cm4gMDsKKworCXdoaXRlbGlzdF9idWlsZChlbmdpbmUsICZ3 KTsKKwlwcl9pbmZvKCJDaGVja2luZyAlZCB3aGl0ZWxpc3RlZCByZWdpc3RlcnMgKFJJTkdfTk9O UFJJVilcbiIsIHcuY291bnQpOworCisJc2V0X2JpdChJOTE1X1JFU0VUX0JBQ0tPRkYsICZlcnJv ci0+ZmxhZ3MpOworCXNldF9iaXQoSTkxNV9SRVNFVF9FTkdJTkUgKyBlbmdpbmUtPmlkLCAmZXJy b3ItPmZsYWdzKTsKKworCWlmIChpbnRlbF9oYXNfcmVzZXRfZW5naW5lKGk5MTUpKSB7CisJCWVy ciA9IGNoZWNrX3doaXRlbGlzdF9hY3Jvc3NfcmVzZXQoZW5naW5lLAorCQkJCQkJICAgZG9fZW5n aW5lX3Jlc2V0LCAmdywKKwkJCQkJCSAgICJlbmdpbmUiKTsKKwkJaWYgKGVycikKKwkJCWdvdG8g b3V0OworCX0KKworCWlmIChpbnRlbF9oYXNfZ3B1X3Jlc2V0KGk5MTUpKSB7CisJCWVyciA9IGNo ZWNrX3doaXRlbGlzdF9hY3Jvc3NfcmVzZXQoZW5naW5lLAorCQkJCQkJICAgZG9fZGV2aWNlX3Jl c2V0LCAmdywKKwkJCQkJCSAgICJkZXZpY2UiKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0Owor CX0KKworb3V0OgorCWNsZWFyX2JpdChJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQsICZl cnJvci0+ZmxhZ3MpOworCWNsZWFyX2JpdChJOTE1X1JFU0VUX0JBQ0tPRkYsICZlcnJvci0+Zmxh Z3MpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBpbnRlbF93b3JrYXJvdW5kc19saXZlX3NlbGZ0 ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlzdGF0aWMgY29uc3Qgc3Ry dWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0geworCQlTVUJURVNUKGxpdmVfcmVzZXRfd2hpdGVs aXN0KSwKKwl9OworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211 dGV4KTsKKwllcnIgPSBpOTE1X3N1YnRlc3RzKHRlc3RzLCBpOTE1KTsKKwltdXRleF91bmxvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIGVycjsKK30KLS0gCjIuMTcuMAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==