From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v2] drm/i915: Check whitelist registers across resets Date: Thu, 12 Apr 2018 16:21:34 +0100 Message-ID: <20180412152134.21673-1-chris@chris-wilson.co.uk> References: <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 13EE06E8AE for ; Thu, 12 Apr 2018 15:21:54 +0000 (UTC) In-Reply-To: <20180412151357.601-1-chris@chris-wilson.co.uk> 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 aGUgaHcuCgp2MjogRmlsdGVyIG91dCBwcmUtZ2VuOCBhcyB0aGV5IGRvIG5vdCBoYXZlIFJJTkdf Tk9OUFJJVi4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29u LmNvLnVrPgpDYzogT3NjYXIgTWF0ZW8gPG9zY2FyLm1hdGVvQGludGVsLmNvbT4KQ2M6IE1pa2Eg S3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAbGludXguaW50ZWwuY29tPgpDYzogSm9vbmFzIExhaHRp bmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8ICAxNCArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jICAgICAgICAgICAgICB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5jICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF93b3JrYXJvdW5kcy5jICAgICAgfCAyMTUgKysrKysrLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaCAgICAgIHwgICAyICstCiAuLi4vZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCAgfCAgIDEgKwogLi4uL2RybS9pOTE1 L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jICAgIHwgMjg0ICsrKysrKysrKysrKysrKysr KwogOCBmaWxlcyBjaGFuZ2VkLCAzODkgaW5zZXJ0aW9ucygrKSwgMTQwIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF93 b3JrYXJvdW5kcy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1 Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCAyZTY2NTJh OWJiOWUuLmUwMjc0ZjQxYmM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAg LTMzMDQsMjQgKzMzMDQsMTMgQEAgc3RhdGljIGludCBpOTE1X3NoYXJlZF9kcGxsc19pbmZvKHN0 cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCiBzdGF0aWMgaW50IGk5MTVfd2FfcmVn aXN0ZXJzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogewotCWludCBpOwotCWlu dCByZXQ7Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwogCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKLQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07CiAJc3RydWN0IGk5MTVfd29ya2Fyb3Vu ZHMgKndvcmthcm91bmRzID0gJmRldl9wcml2LT53b3JrYXJvdW5kczsKLQllbnVtIGludGVsX2Vu Z2luZV9pZCBpZDsKLQotCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1 Y3RfbXV0ZXgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaW50IGk7CiAKIAlpbnRlbF9y dW50aW1lX3BtX2dldChkZXZfcHJpdik7CiAKIAlzZXFfcHJpbnRmKG0sICJXb3JrYXJvdW5kcyBh cHBsaWVkOiAlZFxuIiwgd29ya2Fyb3VuZHMtPmNvdW50KTsKLQlmb3JfZWFjaF9lbmdpbmUoZW5n aW5lLCBkZXZfcHJpdiwgaWQpCi0JCXNlcV9wcmludGYobSwgIkhXIHdoaXRlbGlzdCBjb3VudCBm b3IgJXM6ICVkXG4iLAotCQkJICAgZW5naW5lLT5uYW1lLCB3b3JrYXJvdW5kcy0+aHdfd2hpdGVs aXN0X2NvdW50W2lkXSk7CiAJZm9yIChpID0gMDsgaSA8IHdvcmthcm91bmRzLT5jb3VudDsgKytp KSB7CiAJCWk5MTVfcmVnX3QgYWRkcjsKIAkJdTMyIG1hc2ssIHZhbHVlLCByZWFkOwpAQCAtMzMz Nyw3ICszMzI2LDYgQEAgc3RhdGljIGludCBpOTE1X3dhX3JlZ2lzdGVycyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKnVudXNlZCkKIAl9CiAKIAlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJp dik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDY0OWMwZjJmM2JhZS4uMTVlMTI2MGJlNThlIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTEyOTcsNyArMTI5Nyw2IEBAIHN0cnVjdCBpOTE1 X3dhX3JlZyB7CiBzdHJ1Y3QgaTkxNV93b3JrYXJvdW5kcyB7CiAJc3RydWN0IGk5MTVfd2FfcmVn IHJlZ1tJOTE1X01BWF9XQV9SRUdTXTsKIAl1MzIgY291bnQ7Ci0JdTMyIGh3X3doaXRlbGlzdF9j b3VudFtJOTE1X05VTV9FTkdJTkVTXTsKIH07CiAKIHN0cnVjdCBpOTE1X3ZpcnR1YWxfZ3B1IHsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKaW5kZXggYzdjODUxMzRhODRhLi40ZjcyODU4N2E3NTYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC0xNzQ0LDkgKzE3NDQsNyBAQCBzdGF0aWMg aW50IGdlbjhfaW5pdF9yZW5kZXJfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGludGVsX3doaXRlbGlzdF93b3Jr YXJvdW5kc19hcHBseShlbmdpbmUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaW50ZWxf d2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7CiAKIAkvKiBXZSBuZWVkIHRvIGRp c2FibGUgdGhlIEFzeW5jRmxpcCBwZXJmb3JtYW5jZSBvcHRpbWlzYXRpb25zIGluIG9yZGVyCiAJ ICogdG8gdXNlIE1JX1dBSVRfRk9SX0VWRU5UIHdpdGhpbiB0aGUgQ1MuIEl0IHNob3VsZCBhbHJl YWR5IGJlCkBAIC0xNzY5LDkgKzE3NjcsNyBAQCBzdGF0aWMgaW50IGdlbjlfaW5pdF9yZW5kZXJf cmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJaWYgKHJldCkKIAkJcmV0dXJu IHJldDsKIAotCXJldCA9IGludGVsX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUp OwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91bmRz X2FwcGx5KGVuZ2luZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuYwppbmRleCA3NTdiYjA5OTBjMDcuLmM2OGFjNjA1YjhhOSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtNjE4LDkgKzYxOCw3IEBAIHN0YXRp YyBpbnQgaW5pdF9yZW5kZXJfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJ aWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGludGVsX3doaXRlbGlzdF93b3JrYXJv dW5kc19hcHBseShlbmdpbmUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaW50ZWxfd2hp dGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7CiAKIAkvKiBXYVRpbWVkU2luZ2xlVmVy dGV4RGlzcGF0Y2g6Y2wsYncsY3RnLGVsayxpbGssc25iICovCiAJaWYgKElTX0dFTihkZXZfcHJp diwgNCwgNikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJv dW5kcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYwppbmRleCBi YmJmNGVkNGFhOTcuLjE2NGJiM2E0NWY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfd29ya2Fyb3VuZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93 b3JrYXJvdW5kcy5jCkBAIC02ODcsMTcwICs2ODcsMTUzIEBAIHZvaWQgaW50ZWxfZ3Rfd29ya2Fy b3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlNSVNTSU5H X0NBU0UoSU5URUxfR0VOKGRldl9wcml2KSk7CiB9CiAKLXN0YXRpYyBpbnQgd2FfcmluZ193aGl0 ZWxpc3RfcmVnKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCQkgaTkxNV9yZWdf dCByZWcpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5p OTE1OwotCXN0cnVjdCBpOTE1X3dvcmthcm91bmRzICp3YSA9ICZkZXZfcHJpdi0+d29ya2Fyb3Vu ZHM7Ci0JY29uc3QgdW5zaWduZWQgaW50IGluZGV4ID0gd2EtPmh3X3doaXRlbGlzdF9jb3VudFtl bmdpbmUtPmlkXTsKLQotCWlmIChXQVJOX09OKGluZGV4ID49IFJJTkdfTUFYX05PTlBSSVZfU0xP VFMpKQotCQlyZXR1cm4gLUVJTlZBTDsKK3N0cnVjdCB3aGl0ZWxpc3QgeworCWk5MTVfcmVnX3Qg cmVnW1JJTkdfTUFYX05PTlBSSVZfU0xPVFNdOworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1MzIg bm9waWQ7Cit9OwogCi0JSTkxNV9XUklURShSSU5HX0ZPUkNFX1RPX05PTlBSSVYoZW5naW5lLT5t bWlvX2Jhc2UsIGluZGV4KSwKLQkJICAgaTkxNV9tbWlvX3JlZ19vZmZzZXQocmVnKSk7Ci0Jd2Et Pmh3X3doaXRlbGlzdF9jb3VudFtlbmdpbmUtPmlkXSsrOworc3RhdGljIHZvaWQgd2hpdGVsaXN0 X3JlZyhzdHJ1Y3Qgd2hpdGVsaXN0ICp3LCBpOTE1X3JlZ190IHJlZykKK3sKKwlpZiAoR0VNX1dB Uk5fT04ody0+Y291bnQgPj0gUklOR19NQVhfTk9OUFJJVl9TTE9UUykpCisJCXJldHVybjsKIAot CXJldHVybiAwOworCXctPnJlZ1t3LT5jb3VudCsrXSA9IHJlZzsKIH0KIAotc3RhdGljIGludCBi ZHdfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKK3N0YXRpYyB2b2lkIGJkd193aGl0ZWxpc3RfYnVpbGQoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAorCQkJCXN0cnVjdCB3aGl0ZWxpc3QgKncpCiB7Ci0JcmV0dXJuIDA7CiB9 CiAKLXN0YXRpYyBpbnQgY2h2X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCitzdGF0aWMgdm9pZCBjaHZfd2hpdGVsaXN0X2J1aWxkKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQlzdHJ1Y3Qgd2hpdGVsaXN0ICp3KQog ewotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdlbjlfd2hpdGVsaXN0X3dvcmthcm91bmRz X2FwcGx5KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3N0YXRpYyB2b2lkIGdlbjlf d2hpdGVsaXN0X2J1aWxkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQkgc3Ry dWN0IHdoaXRlbGlzdCAqdykKIHsKLQlpbnQgcmV0OwotCiAJLyogV2FWRkVTdGF0ZUFmdGVyUGlw ZUNvbnRyb2x3aXRoTWVkaWFTdGF0ZUNsZWFyOnNrbCxieHQsZ2xrLGNmbCAqLwotCXJldCA9IHdh X3Jpbmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUsIEdFTjlfQ1RYX1BSRUVNUFRfUkVHKTsKLQlpZiAo cmV0KQotCQlyZXR1cm4gcmV0OworCXdoaXRlbGlzdF9yZWcodywgR0VOOV9DVFhfUFJFRU1QVF9S RUcpOwogCiAJLyogV2FFbmFibGVQcmVlbXB0aW9uR3JhbnVsYXJpdHlDb250cm9sQnlVTUQ6c2ts LGJ4dCxrYmwsY2ZsLFtjbmxdICovCi0JcmV0ID0gd2FfcmluZ193aGl0ZWxpc3RfcmVnKGVuZ2lu ZSwgR0VOOF9DU19DSElDS0VOMSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwl3aGl0ZWxp c3RfcmVnKHcsIEdFTjhfQ1NfQ0hJQ0tFTjEpOwogCiAJLyogV2FBbGxvd1VNRFRvTW9kaWZ5SERD Q2hpY2tlbjE6c2tsLGJ4dCxrYmwsZ2xrLGNmbCAqLwotCXJldCA9IHdhX3Jpbmdfd2hpdGVsaXN0 X3JlZyhlbmdpbmUsIEdFTjhfSERDX0NISUNLRU4xKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0 OwotCi0JcmV0dXJuIDA7CisJd2hpdGVsaXN0X3JlZyh3LCBHRU44X0hEQ19DSElDS0VOMSk7CiB9 CiAKLXN0YXRpYyBpbnQgc2tsX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCitzdGF0aWMgdm9pZCBza2xfd2hpdGVsaXN0X2J1aWxkKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQlzdHJ1Y3Qgd2hpdGVsaXN0ICp3KQog ewotCWludCByZXQ7Ci0KLQlyZXQgPSBnZW45X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShl bmdpbmUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZ2VuOV93aGl0ZWxpc3RfYnVpbGQo ZW5naW5lLCB3KTsKIAogCS8qIFdhRGlzYWJsZUxTUUNST1BFUkZmb3JPQ0w6c2tsICovCi0JcmV0 ID0gd2FfcmluZ193aGl0ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOF9MM1NRQ1JFRzQpOwotCWlmIChy ZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKKwl3aGl0ZWxpc3RfcmVnKHcsIEdFTjhf TDNTUUNSRUc0KTsKIH0KIAotc3RhdGljIGludCBieHRfd2hpdGVsaXN0X3dvcmthcm91bmRzX2Fw cGx5KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3N0YXRpYyB2b2lkIGJ4dF93aGl0 ZWxpc3RfYnVpbGQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJCXN0cnVjdCB3 aGl0ZWxpc3QgKncpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IGdlbjlfd2hpdGVsaXN0X3dvcmth cm91bmRzX2FwcGx5KGVuZ2luZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVy biAwOworCWdlbjlfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgdyk7CiB9CiAKLXN0YXRpYyBpbnQg a2JsX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCitzdGF0aWMgdm9pZCBrYmxfd2hpdGVsaXN0X2J1aWxkKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKKwkJCQlzdHJ1Y3Qgd2hpdGVsaXN0ICp3KQogewotCWludCByZXQ7Ci0K LQlyZXQgPSBnZW45X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwotCWlmIChy ZXQpCi0JCXJldHVybiByZXQ7CisJZ2VuOV93aGl0ZWxpc3RfYnVpbGQoZW5naW5lLCB3KTsKIAog CS8qIFdhRGlzYWJsZUxTUUNST1BFUkZmb3JPQ0w6a2JsICovCi0JcmV0ID0gd2FfcmluZ193aGl0 ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOF9MM1NRQ1JFRzQpOwotCWlmIChyZXQpCi0JCXJldHVybiBy ZXQ7Ci0KLQlyZXR1cm4gMDsKKwl3aGl0ZWxpc3RfcmVnKHcsIEdFTjhfTDNTUUNSRUc0KTsKIH0K IAotc3RhdGljIGludCBnbGtfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKK3N0YXRpYyB2b2lkIGdsa193aGl0ZWxpc3RfYnVpbGQoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJCXN0cnVjdCB3aGl0ZWxpc3QgKncpCiB7 Ci0JaW50IHJldDsKLQotCXJldCA9IGdlbjlfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVu Z2luZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlnZW45X3doaXRlbGlzdF9idWlsZChl bmdpbmUsIHcpOwogCiAJLyogV0EgIzA4NjI6IFVzZXJzcGFjZSBoYXMgdG8gc2V0ICJCYXJyaWVy IE1vZGUiIHRvIGF2b2lkIGhhbmdzLiAqLwotCXJldCA9IHdhX3Jpbmdfd2hpdGVsaXN0X3JlZyhl bmdpbmUsIEdFTjlfU0xJQ0VfQ09NTU9OX0VDT19DSElDS0VOMSk7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKLQotCXJldHVybiAwOworCXdoaXRlbGlzdF9yZWcodywgR0VOOV9TTElDRV9DT01N T05fRUNPX0NISUNLRU4xKTsKIH0KIAotc3RhdGljIGludCBjZmxfd2hpdGVsaXN0X3dvcmthcm91 bmRzX2FwcGx5KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3N0YXRpYyB2b2lkIGNm bF93aGl0ZWxpc3RfYnVpbGQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJCXN0 cnVjdCB3aGl0ZWxpc3QgKncpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IGdlbjlfd2hpdGVsaXN0 X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQot CXJldHVybiAwOworCWdlbjlfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgdyk7CiB9CiAKLXN0YXRp YyBpbnQgY25sX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCitzdGF0aWMgdm9pZCBjbmxfd2hpdGVsaXN0X2J1aWxkKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQlzdHJ1Y3Qgd2hpdGVsaXN0ICp3KQogewotCWludCBy ZXQ7Ci0KIAkvKiBXYUVuYWJsZVByZWVtcHRpb25HcmFudWxhcml0eUNvbnRyb2xCeVVNRDpjbmwg Ki8KLQlyZXQgPSB3YV9yaW5nX3doaXRlbGlzdF9yZWcoZW5naW5lLCBHRU44X0NTX0NISUNLRU4x KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCXdoaXRlbGlzdF9yZWcodywgR0VOOF9DU19D SElDS0VOMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd2hpdGVsaXN0ICp3aGl0ZWxpc3RfYnVpbGQo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJCQkgc3RydWN0IHdoaXRlbGlzdCAq dykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVuZ2luZS0+aTkxNTsKKwor CUdFTV9CVUdfT04oZW5naW5lLT5pZCAhPSBSQ1MpOworCisJdy0+Y291bnQgPSAwOworCXctPm5v cGlkID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19OT1BJRChlbmdpbmUtPm1taW9fYmFzZSkp OworCisJaWYgKElOVEVMX0dFTihpOTE1KSA8IDgpCisJCXJldHVybiBOVUxMOworCWVsc2UgaWYg KElTX0JST0FEV0VMTChpOTE1KSkKKwkJYmR3X3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOwor CWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCWNodl93aGl0ZWxpc3RfYnVpbGQoZW5n aW5lLCB3KTsKKwllbHNlIGlmIChJU19TS1lMQUtFKGk5MTUpKQorCQlza2xfd2hpdGVsaXN0X2J1 aWxkKGVuZ2luZSwgdyk7CisJZWxzZSBpZiAoSVNfQlJPWFRPTihpOTE1KSkKKwkJYnh0X3doaXRl bGlzdF9idWlsZChlbmdpbmUsIHcpOworCWVsc2UgaWYgKElTX0tBQllMQUtFKGk5MTUpKQorCQlr Ymxfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgdyk7CisJZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShp OTE1KSkKKwkJZ2xrX3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOworCWVsc2UgaWYgKElTX0NP RkZFRUxBS0UoaTkxNSkpCisJCWNmbF93aGl0ZWxpc3RfYnVpbGQoZW5naW5lLCB3KTsKKwllbHNl IGlmIChJU19DQU5OT05MQUtFKGk5MTUpKQorCQljbmxfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwg dyk7CisJZWxzZQorCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGk5MTUpKTsKIAotCXJldHVybiAw OworCXJldHVybiB3OwogfQogCi1pbnQgaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3N0YXRpYyB2b2lkIHdoaXRlbGlzdF9h cHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJCQkgICAgY29uc3Qgc3RydWN0 IHdoaXRlbGlzdCAqdykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBl bmdpbmUtPmk5MTU7Ci0JaW50IGVyciA9IDA7CisJY29uc3QgdTMyIGJhc2UgPSBlbmdpbmUtPm1t aW9fYmFzZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghdykKKwkJcmV0dXJuOwogCi0JV0FS Tl9PTihlbmdpbmUtPmlkICE9IFJDUyk7CisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZW5n aW5lLT5pOTE1LCBGT1JDRVdBS0VfQUxMKTsKIAotCWRldl9wcml2LT53b3JrYXJvdW5kcy5od193 aGl0ZWxpc3RfY291bnRbZW5naW5lLT5pZF0gPSAwOworCWZvciAoaSA9IDA7IGkgPCB3LT5jb3Vu dDsgaSsrKQorCQlJOTE1X1dSSVRFX0ZXKFJJTkdfRk9SQ0VfVE9fTk9OUFJJVihiYXNlLCBpKSwK KwkJCSAgICAgIGk5MTVfbW1pb19yZWdfb2Zmc2V0KHctPnJlZ1tpXSkpOwogCi0JaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPCA4KQotCQllcnIgPSAwOwotCWVsc2UgaWYgKElTX0JST0FEV0VMTChk ZXZfcHJpdikpCi0JCWVyciA9IGJkd193aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5naW5l KTsKLQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJZXJyID0gY2h2X3doaXRl bGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwotCWVsc2UgaWYgKElTX1NLWUxBS0UoZGV2 X3ByaXYpKQotCQllcnIgPSBza2xfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7 Ci0JZWxzZSBpZiAoSVNfQlJPWFRPTihkZXZfcHJpdikpCi0JCWVyciA9IGJ4dF93aGl0ZWxpc3Rf d29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKLQllbHNlIGlmIChJU19LQUJZTEFLRShkZXZfcHJp dikpCi0JCWVyciA9IGtibF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKLQll bHNlIGlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJZXJyID0gZ2xrX3doaXRlbGlzdF93 b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwotCWVsc2UgaWYgKElTX0NPRkZFRUxBS0UoZGV2X3By aXYpKQotCQllcnIgPSBjZmxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7Ci0J ZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpCi0JCWVyciA9IGNubF93aGl0ZWxpc3Rf d29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKLQllbHNlCi0JCU1JU1NJTkdfQ0FTRShJTlRFTF9H RU4oZGV2X3ByaXYpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCS8qIEFuZCBjbGVhciB0 aGUgcmVzdCBqdXN0IGluIGNhc2Ugb2YgZ2FyYmFnZSAqLworCWZvciAoOyBpIDwgUklOR19NQVhf Tk9OUFJJVl9TTE9UUzsgaSsrKQorCQlJOTE1X1dSSVRFX0ZXKFJJTkdfRk9SQ0VfVE9fTk9OUFJJ VihiYXNlLCBpKSwgdy0+bm9waWQpOwogCi0JRFJNX0RFQlVHX0RSSVZFUigiJXM6IE51bWJlciBv ZiB3aGl0ZWxpc3Qgdy9hOiAlZFxuIiwgZW5naW5lLT5uYW1lLAotCQkJIGRldl9wcml2LT53b3Jr YXJvdW5kcy5od193aGl0ZWxpc3RfY291bnRbZW5naW5lLT5pZF0pOwotCXJldHVybiAwOworCWlu dGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGVuZ2luZS0+aTkxNSwgRk9SQ0VXQUtFX0FMTCk7CiB9 CisKK3ZvaWQgaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3Qgd2hpdGVsaXN0IHc7CisKKwl3aGl0ZWxpc3Rf YXBwbHkoZW5naW5lLCB3aGl0ZWxpc3RfYnVpbGQoZW5naW5lLCAmdykpOworfQorCisjaWYgSVNf RU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCisjaW5jbHVkZSAic2VsZnRlc3RzL2lu dGVsX3dvcmthcm91bmRzLmMiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3dvcmthcm91bmRzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3Jr YXJvdW5kcy5oCmluZGV4IGQ5YjBjYzVhZmI0YS4uYjExZDA2MjNlNjI2IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmgKQEAgLTEyLDYgKzEyLDYgQEAgaW50IGludGVs X2N0eF93b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKTsKIAogdm9pZCBp bnRlbF9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwogCi1pbnQgaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSk7Cit2b2lkIGludGVsX3doaXRlbGlzdF93b3JrYXJvdW5kc19h cHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogCiAjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCmlu ZGV4IDhiZjZhYTU3MzIyNi4uYTAwZTJiZDA4YmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKQEAgLTExLDYgKzExLDcg QEAKICAqLwogc2VsZnRlc3Qoc2FuaXR5Y2hlY2ssIGk5MTVfbGl2ZV9zYW5pdHljaGVjaykgLyog a2VlcCBmaXJzdCAoaWd0IHNlbGZjaGVjaykgKi8KIHNlbGZ0ZXN0KHVuY29yZSwgaW50ZWxfdW5j b3JlX2xpdmVfc2VsZnRlc3RzKQorc2VsZnRlc3Qod29ya2Fyb3VuZHMsIGludGVsX3dvcmthcm91 bmRzX2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QocmVxdWVzdHMsIGk5MTVfcmVxdWVzdF9saXZl X3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KG9iamVjdHMsIGk5MTVfZ2VtX29iamVjdF9saXZlX3NlbGZ0 ZXN0cykKIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1fZG1hYnVmX2xpdmVfc2VsZnRlc3RzKQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX3dvcmthcm91 bmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3VuZHMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZlN2RlY2EzM2Q3Nwot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF93 b3JrYXJvdW5kcy5jCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisg Ki8KKworI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIKKworI2luY2x1ZGUgIm1vY2tfY29u dGV4dC5oIgorCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgorcmVhZF9ub25w cml2cyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnJlc3VsdDsKKwlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwljb25zdCB1MzIg YmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOworCXUzMiBzcm0sICpjczsKKwlpbnQgZXJyOworCWlu dCBpOworCisJcmVzdWx0ID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChlbmdpbmUt Pmk5MTUsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihyZXN1bHQpKQorCQlyZXR1cm4gcmVzdWx0 OworCisJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9sZXZlbChyZXN1bHQsIEk5MTVfQ0FDSEVf TExDKTsKKworCWNzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAocmVzdWx0LCBJOTE1X01BUF9X Qik7CisJaWYgKElTX0VSUihjcykpIHsKKwkJZXJyID0gUFRSX0VSUihjcyk7CisJCWdvdG8gZXJy X29iajsKKwl9CisJbWVtc2V0KGNzLCAweGM1LCBQQUdFX1NJWkUpOworCWk5MTVfZ2VtX29iamVj dF91bnBpbl9tYXAocmVzdWx0KTsKKworCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKHJlc3VsdCwg JmVuZ2luZS0+aTkxNS0+Z2d0dC5iYXNlLCBOVUxMKTsKKwlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJ ZXJyID0gUFRSX0VSUih2bWEpOworCQlnb3RvIGVycl9vYmo7CisJfQorCisJZXJyID0gaTkxNV92 bWFfcGluKHZtYSwgMCwgMCwgUElOX0dMT0JBTCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb2Jq OworCisJcnEgPSBpOTE1X3JlcXVlc3RfYWxsb2MoZW5naW5lLCBjdHgpOworCWlmIChJU19FUlIo cnEpKSB7CisJCWVyciA9IFBUUl9FUlIocnEpOworCQlnb3RvIGVycl9waW47CisJfQorCisJc3Jt ID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOworCWlmIChJ TlRFTF9HRU4oY3R4LT5pOTE1KSA+PSA4KQorCQlzcm0rKzsKKworCWNzID0gaW50ZWxfcmluZ19i ZWdpbihycSwgNCAqIFJJTkdfTUFYX05PTlBSSVZfU0xPVFMpOworCWZvciAoaSA9IDA7IGkgPCBS SU5HX01BWF9OT05QUklWX1NMT1RTOyBpKyspIHsKKwkJKmNzKysgPSBzcm07CisJCSpjcysrID0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19GT1JDRV9UT19OT05QUklWKGJhc2UsIGkpKTsKKwkJ KmNzKysgPSBpOTE1X2dndHRfb2Zmc2V0KHZtYSkgKyBzaXplb2YodTMyKSAqIGk7CisJCSpjcysr ID0gMDsKKwl9CisJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7CisKKwlpOTE1X3ZtYV9tb3Zl X3RvX2FjdGl2ZSh2bWEsIHJxLCBFWEVDX09CSkVDVF9XUklURSk7CisJcmVzZXJ2YXRpb25fb2Jq ZWN0X2xvY2sodm1hLT5yZXN2LCBOVUxMKTsKKwlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xf ZmVuY2Uodm1hLT5yZXN2LCAmcnEtPmZlbmNlKTsKKwlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2Nr KHZtYS0+cmVzdik7CisKKwlpOTE1X2dlbV9vYmplY3RfZ2V0KHJlc3VsdCk7CisJaTkxNV9nZW1f b2JqZWN0X3NldF9hY3RpdmVfcmVmZXJlbmNlKHJlc3VsdCk7CisKKwlfX2k5MTVfcmVxdWVzdF9h ZGQocnEsIHRydWUpOworCWk5MTVfdm1hX3VucGluKHZtYSk7CisKKwlyZXR1cm4gcmVzdWx0Owor CitlcnJfcGluOgorCWk5MTVfdm1hX3VucGluKHZtYSk7CitlcnJfb2JqOgorCWk5MTVfZ2VtX29i amVjdF9wdXQocmVzdWx0KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgdTMy IGdldF93aGl0ZWxpc3RfcmVnKGNvbnN0IHN0cnVjdCB3aGl0ZWxpc3QgKncsIHVuc2lnbmVkIGlu dCBpKQoreworCXJldHVybiBpIDwgdy0+Y291bnQgPyBpOTE1X21taW9fcmVnX29mZnNldCh3LT5y ZWdbaV0pIDogdy0+bm9waWQ7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Jlc3VsdHMoY29uc3Qg c3RydWN0IHdoaXRlbGlzdCAqdywgY29uc3QgdTMyICpyZXN1bHRzKQoreworCXVuc2lnbmVkIGlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IFJJTkdfTUFYX05PTlBSSVZfU0xPVFM7IGkrKykgewor CQl1MzIgZXhwZWN0ZWQgPSBnZXRfd2hpdGVsaXN0X3JlZyh3LCBpKTsKKwkJdTMyIGFjdHVhbCA9 IHJlc3VsdHNbaV07CisKKwkJcHJfaW5mbygiUklOR19OT05QUklWWyVkXTogZXhwZWN0ZWQgMHgl MDh4LCBmb3VuZCAweCUwOHhcbiIsCisJCQlpLCBleHBlY3RlZCwgYWN0dWFsKTsKKwl9Cit9CisK K3N0YXRpYyBpbnQgY2hlY2tfd2hpdGVsaXN0KGNvbnN0IHN0cnVjdCB3aGl0ZWxpc3QgKncsCisJ CQkgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkJICAgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpyZXN1bHRz OworCXUzMiAqdmFkZHI7CisJaW50IGVycjsKKwlpbnQgaTsKKworCXJlc3VsdHMgPSByZWFkX25v bnByaXZzKGN0eCwgZW5naW5lKTsKKwlpZiAoSVNfRVJSKHJlc3VsdHMpKQorCQlyZXR1cm4gUFRS X0VSUihyZXN1bHRzKTsKKworCWVyciA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFp bihyZXN1bHRzLCBmYWxzZSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfcHV0OworCisJdmFkZHIg PSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChyZXN1bHRzLCBJOTE1X01BUF9XQik7CisJaWYgKElT X0VSUih2YWRkcikpIHsKKwkJZXJyID0gUFRSX0VSUih2YWRkcik7CisJCWdvdG8gb3V0X3B1dDsK Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgUklOR19NQVhfTk9OUFJJVl9TTE9UUzsgaSsrKSB7CisJ CXUzMiBleHBlY3RlZCA9IGdldF93aGl0ZWxpc3RfcmVnKHcsIGkpOworCQl1MzIgYWN0dWFsID0g dmFkZHJbaV07CisKKwkJaWYgKGV4cGVjdGVkICE9IGFjdHVhbCkgeworCQkJcHJpbnRfcmVzdWx0 cyh3LCB2YWRkcik7CisJCQlwcl9lcnIoIkludmFsaWQgUklOR19OT05QUklWWyVkXSwgZXhwZWN0 ZWQgMHglMDh4LCBmb3VuZCAweCUwOHhcbiIsCisJCQkgICAgICAgaSwgZXhwZWN0ZWQsIGFjdHVh bCk7CisKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KKworCWk5MTVfZ2Vt X29iamVjdF91bnBpbl9tYXAocmVzdWx0cyk7CitvdXRfcHV0OgorCWk5MTVfZ2VtX29iamVjdF9w dXQocmVzdWx0cyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkb19kZXZpY2VfcmVz ZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCWk5MTVfcmVzZXQoZW5naW5l LT5pOTE1LCBFTkdJTkVfTUFTSyhlbmdpbmUtPmlkKSwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKK3sKKwlyZXR1cm4gaTkxNV9yZXNldF9lbmdpbmUoZW5naW5lLCBOVUxMKTsKK30KKworc3Rh dGljIGludCBzd2l0Y2hfdG9fc2NyYXRjaF9jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OworCXN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxOworCisJY3R4ID0ga2VybmVsX2NvbnRleHQoZW5naW5lLT5pOTE1KTsKKwlp ZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwlycSA9IGk5MTVfcmVx dWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7CisJa2VybmVsX2NvbnRleHRfY2xvc2UoY3R4KTsKKwlp ZiAoSVNfRVJSKHJxKSkKKwkJcmV0dXJuIFBUUl9FUlIocnEpOworCisJaTkxNV9yZXF1ZXN0X2Fk ZChycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja193aGl0ZWxpc3RfYWNy b3NzX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQkJaW50ICgqcmVz ZXQpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKiksCisJCQkJCWNvbnN0IHN0cnVjdCB3aGl0ZWxp c3QgKncsCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eDsKKwlpbnQgZXJyOworCisJY3R4ID0ga2VybmVsX2NvbnRleHQoZW5naW5lLT5pOTE1 KTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwllcnIgPSBj aGVja193aGl0ZWxpc3QodywgY3R4LCBlbmdpbmUpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJJ bnZhbGlkIHdoaXRlbGlzdCAqYmVmb3JlKiAlcyByZXNldCFcbiIsIG5hbWUpOworCQlnb3RvIG91 dDsKKwl9CisKKwllcnIgPSBzd2l0Y2hfdG9fc2NyYXRjaF9jb250ZXh0KGVuZ2luZSk7CisJaWYg KGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSByZXNldChlbmdpbmUpOworCWlmIChlcnIpIHsK KwkJcHJfZXJyKCIlcyByZXNldCBmYWlsZWRcbiIsIG5hbWUpOworCQlnb3RvIG91dDsKKwl9CisK KwllcnIgPSBjaGVja193aGl0ZWxpc3QodywgY3R4LCBlbmdpbmUpOworCWlmIChlcnIpIHsKKwkJ cHJfZXJyKCJXaGl0ZWxpc3Qgbm90IHByZXNlcnZlZCBpbiBjb250ZXh0IGFjcm9zcyAlcyByZXNl dCFcbiIsCisJCSAgICAgICBuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJa2VybmVsX2NvbnRl eHRfY2xvc2UoY3R4KTsKKworCWN0eCA9IGtlcm5lbF9jb250ZXh0KGVuZ2luZS0+aTkxNSk7CisJ aWYgKElTX0VSUihjdHgpKQorCQlyZXR1cm4gUFRSX0VSUihjdHgpOworCisJZXJyID0gY2hlY2tf d2hpdGVsaXN0KHcsIGN0eCwgZW5naW5lKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiSW52YWxp ZCB3aGl0ZWxpc3QgKmFmdGVyKiAlcyByZXNldCBpbiBmcmVzaCBjb250ZXh0IVxuIiwKKwkJICAg ICAgIG5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZXJuZWxfY29udGV4dF9jbG9z ZShjdHgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbGl2ZV9yZXNldF93aGl0ZWxp c3Qodm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwor CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IGk5MTUtPmVuZ2luZVtSQ1NdOworCXN0 cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IgPSAmaTkxNS0+Z3B1X2Vycm9yOworCXN0cnVjdCB3 aGl0ZWxpc3QgdzsKKwlpbnQgZXJyOworCisJLyogSWYgd2UgcmVzZXQgdGhlIGdwdSwgd2Ugc2hv dWxkIG5vdCBsb3NlIHRoZSBSSU5HX05PTlBSSVYgKi8KKworCWlmICghZW5naW5lKQorCQlyZXR1 cm4gMDsKKworCWlmICghd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgJncpKQorCQlyZXR1cm4gMDsK KworCXByX2luZm8oIkNoZWNraW5nICVkIHdoaXRlbGlzdGVkIHJlZ2lzdGVycyAoUklOR19OT05Q UklWKVxuIiwgdy5jb3VudCk7CisKKwlzZXRfYml0KEk5MTVfUkVTRVRfQkFDS09GRiwgJmVycm9y LT5mbGFncyk7CisJc2V0X2JpdChJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQsICZlcnJv ci0+ZmxhZ3MpOworCisJaWYgKGludGVsX2hhc19yZXNldF9lbmdpbmUoaTkxNSkpIHsKKwkJZXJy ID0gY2hlY2tfd2hpdGVsaXN0X2Fjcm9zc19yZXNldChlbmdpbmUsCisJCQkJCQkgICBkb19lbmdp bmVfcmVzZXQsICZ3LAorCQkJCQkJICAgImVuZ2luZSIpOworCQlpZiAoZXJyKQorCQkJZ290byBv dXQ7CisJfQorCisJaWYgKGludGVsX2hhc19ncHVfcmVzZXQoaTkxNSkpIHsKKwkJZXJyID0gY2hl Y2tfd2hpdGVsaXN0X2Fjcm9zc19yZXNldChlbmdpbmUsCisJCQkJCQkgICBkb19kZXZpY2VfcmVz ZXQsICZ3LAorCQkJCQkJICAgImRldmljZSIpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJ fQorCitvdXQ6CisJY2xlYXJfYml0KEk5MTVfUkVTRVRfRU5HSU5FICsgZW5naW5lLT5pZCwgJmVy cm9yLT5mbGFncyk7CisJY2xlYXJfYml0KEk5MTVfUkVTRVRfQkFDS09GRiwgJmVycm9yLT5mbGFn cyk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGludGVsX3dvcmthcm91bmRzX2xpdmVfc2VsZnRl c3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCXN0YXRpYyBjb25zdCBzdHJ1 Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CisJCVNVQlRFU1QobGl2ZV9yZXNldF93aGl0ZWxp c3QpLAorCX07CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOworCWVyciA9IGk5MTVfc3VidGVzdHModGVzdHMsIGk5MTUpOworCW11dGV4X3VubG9jaygm aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gZXJyOworfQotLSAKMi4xNy4wCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK