From mboxrd@z Thu Jan 1 00:00:00 1970 From: sourab.gupta@intel.com Subject: [PATCH 15/15] drm/i915: Support for capturing MMIO register values Date: Fri, 4 Nov 2016 15:00:44 +0530 Message-ID: <1478251844-23509-16-git-send-email-sourab.gupta@intel.com> References: <1478251844-23509-1-git-send-email-sourab.gupta@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id C34FC6E908 for ; Fri, 4 Nov 2016 09:29:47 +0000 (UTC) In-Reply-To: <1478251844-23509-1-git-send-email-sourab.gupta@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 Cc: "Christopher S . Hall" , Daniel Vetter , Sourab Gupta , Matthew Auld , Thomas Gleixner List-Id: intel-gfx@lists.freedesktop.org RnJvbTogU291cmFiIEd1cHRhIDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29tPgoKVGhpcyBwYXRjaCBh ZGRzIHN1cHBvcnQgZm9yIGNhcHR1cmluZyBNTUlPIHJlZ2lzdGVyIHZhbHVlcyB0aHJvdWdoCmk5 MTUgcGVyZiBpbnRlcmZhY2UuClRoZSB1c2Vyc3BhY2UgY2FuIHJlcXVlc3QgdXB0byA4IE1NSU8g cmVnaXN0ZXIgdmFsdWVzIHRvIGJlIGR1bXBlZC4KVGhlIGFkZHJlc3NlcyBvZiB0aGVzZSByZWdp c3RlcnMgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIHRoZSBjb3JyZXNwb25kaW5nCnByb3BlcnR5ICd2 YWx1ZScgZmllbGQgd2hpbGUgb3BlbmluZyB0aGUgc3RyZWFtLgpUaGUgY29tbWFuZHMgdG8gZHVt cCB0aGUgdmFsdWVzIG9mIHRoZXNlIE1NSU8gcmVnaXN0ZXJzIGFyZSB0aGVuCmluc2VydGVkIGlu dG8gdGhlIHJpbmcgYWxvbmd3aXRoIG90aGVyIGNvbW1hbmRzLgoKU2lnbmVkLW9mZi1ieTogU291 cmFiIEd1cHRhIDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggIHwgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5j IHwgMTUzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogaW5jbHVkZS91 YXBpL2RybS9pOTE1X2RybS5oICAgICAgfCAgMTQgKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxNjgg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRl eCA1NTdhMTI0Li4xNGNkOWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE4ODUsNiAr MTg4NSw3IEBAIHN0cnVjdCBpOTE1X3BlcmZfY3NfZGF0YV9ub2RlIHsKIAl1MzIgc3RhcnRfb2Zm c2V0OwogCXUzMiBvYV9vZmZzZXQ7CiAJdTMyIHRzX29mZnNldDsKKwl1MzIgbW1pb19vZmZzZXQ7 CiAKIAkvKiBidWZmZXIgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZW50cnkgKi8KIAl1MzIg c2l6ZTsKQEAgLTIyMzAsNiArMjIzMSw5IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAkJ d2FpdF9xdWV1ZV9oZWFkX3QgcG9sbF93cVtJOTE1X05VTV9FTkdJTkVTXTsKIAkJYXRvbWljX3Qg cG9sbGluW0k5MTVfTlVNX0VOR0lORVNdOwogCisJCXUzMiBudW1fbW1pbzsKKwkJdTMyIG1taW9f bGlzdFtJOTE1X1BFUkZfTU1JT19OVU1fTUFYXTsKKwogCQlzdHJ1Y3QgewogCQkJdTMyIHNwZWNp ZmljX2N0eF9pZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJm LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwppbmRleCBiMTFlOTUzLi5lZDZi MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwpAQCAtMjc3LDYgKzI3Nyw3IEBAIHN0cnVj dCBzYW1wbGVfZGF0YSB7CiAJdTY0IGdwdV90czsKIAl1NjQgY2xrX21vbm9yYXc7CiAJY29uc3Qg dTggKnJlcG9ydDsKKwljb25zdCB1OCAqbW1pbzsKIH07CiAKIC8qIGZvciBzeXNjdGwgcHJvY19k b2ludHZlY19taW5tYXggb2YgaTkxNV9vYV9taW5fdGltZXJfZXhwb25lbnQgKi8KQEAgLTMzNSw2 ICszMzYsNyBAQCBzdGF0aWMgY29uc3QgZW51bSBpbnRlbF9lbmdpbmVfaWQgdXNlcl9yaW5nX21h cFtJOTE1X1VTRVJfUklOR1MgKyAxXSA9IHsKICNkZWZpbmUgU0FNUExFX1RBRwkJKDE8PDQpCiAj ZGVmaW5lIFNBTVBMRV9UUwkJKDE8PDUpCiAjZGVmaW5lIFNBTVBMRV9DTEtfTU9OT19SQVcJKDE8 PDYpCisjZGVmaW5lIFNBTVBMRV9NTUlPCQkoMTw8NykKIAogc3RydWN0IHBlcmZfb3Blbl9wcm9w ZXJ0aWVzIHsKIAl1MzIgc2FtcGxlX2ZsYWdzOwpAQCAtNTY3LDYgKzU2OSw5IEBAIHN0YXRpYyBp bnQgaW5zZXJ0X3BlcmZfZW50cnkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAog CQlzYW1wbGVfdHMgPSB0cnVlOwogCX0KIAorCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfTU1J TykKKwkJZW50cnlfc2l6ZSArPSA0KmRldl9wcml2LT5wZXJmLm51bV9tbWlvOworCiAJc3Bpbl9s b2NrKCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RfbG9ja1tpZF0pOwogCWlmIChsaXN0X2VtcHR5 KCZkZXZfcHJpdi0+cGVyZi5ub2RlX2xpc3RbaWRdKSkgewogCQlvZmZzZXQgPSAwOwpAQCAtNjQ0 LDYgKzY0OSwxMCBAQCBvdXQ6CiAJCWVudHJ5LT50c19vZmZzZXQgPSBBTElHTihlbnRyeS0+dHNf b2Zmc2V0LCBUU19BRERSX0FMSUdOKTsKIAkJb2Zmc2V0ID0gZW50cnktPnRzX29mZnNldCArIEk5 MTVfUEVSRl9UU19TQU1QTEVfU0laRTsKIAl9CisJaWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9N TUlPKSB7CisJCWVudHJ5LT5tbWlvX29mZnNldCA9IG9mZnNldDsKKwkJb2Zmc2V0ID0gZW50cnkt Pm1taW9fb2Zmc2V0ICsgNCpkZXZfcHJpdi0+cGVyZi5udW1fbW1pbzsKKwl9CiAKIAlsaXN0X2Fk ZF90YWlsKCZlbnRyeS0+bGluaywgJmRldl9wcml2LT5wZXJmLm5vZGVfbGlzdFtpZF0pOwogI2lm bmRlZiBDTURfU1RSRUFNX0JVRl9PVkVSRkxPV19BTExPV0VECkBAIC03NDQsNiArNzUzLDQ3IEBA IHN0YXRpYyBpbnQgaTkxNV9yaW5nX3N0cmVhbV9jYXB0dXJlX3RzKHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxLAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGk5MTVfcmluZ19z dHJlYW1fY2FwdHVyZV9tbWlvKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAorCQkJ CQkJdTMyIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBy ZXEtPmk5MTU7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQgPSByZXEtPmVuZ2luZS0+aWQ7CisJ c3RydWN0IGludGVsX3JpbmcgKnJpbmcgPSByZXEtPnJpbmc7CisJaW50IG51bV9tbWlvID0gZGV2 X3ByaXYtPnBlcmYubnVtX21taW87CisJdTMyIG1taW9fYWRkciwgYWRkciA9IDA7CisJaW50IHJl dCwgaTsKKworCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmVxLCA0Km51bV9tbWlvKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJbW1pb19hZGRyID0KKwkJZGV2X3ByaXYtPnBlcmYuY29t bWFuZF9zdHJlYW1fYnVmW2lkXS52bWEtPm5vZGUuc3RhcnQgKyBvZmZzZXQ7CisKKwlmb3IgKGkg PSAwOyBpIDwgbnVtX21taW87IGkrKykgeworCQl1aW50MzJfdCBjbWQ7CisKKwkJYWRkciA9IG1t aW9fYWRkciArIDQqaTsKKworCQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA4KQor CQkJY21kID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNX0dFTjggfAorCQkJCU1JX1NSTV9MUk1fR0xP QkFMX0dUVDsKKwkJZWxzZQorCQkJY21kID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwKKwkJCQlN SV9TUk1fTFJNX0dMT0JBTF9HVFQ7CisKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGNtZCk7CisJ CWludGVsX3JpbmdfZW1pdChyaW5nLCBkZXZfcHJpdi0+cGVyZi5tbWlvX2xpc3RbaV0pOworCQlp bnRlbF9yaW5nX2VtaXQocmluZywgYWRkcik7CisJCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+ Z2VuID49IDgpCisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJCWVsc2UKKwkJCWludGVs X3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKKwl9CisJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcp OworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBpOTE1X3Jpbmdfc3RyZWFtX2NzX2hvb2so c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAkJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwgdTMyIHRhZykKIHsKQEAgLTc4NCw2ICs4MzQsMTIgQEAgc3RhdGljIHZv aWQgaTkxNV9yaW5nX3N0cmVhbV9jc19ob29rKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0sCiAJCQlnb3RvIGVycl91bnJlZjsKIAl9CiAKKwlpZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExF X01NSU8pIHsKKwkJcmV0ID0gaTkxNV9yaW5nX3N0cmVhbV9jYXB0dXJlX21taW8ocmVxLAorCQkJ CWVudHJ5LT5tbWlvX29mZnNldCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl91bnJlZjsKKwl9 CiAKIAlpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShkZXZfcHJpdi0+cGVyZi5jb21tYW5kX3N0cmVh bV9idWZbaWRdLnZtYSwgcmVxLAogCQkJCQlFWEVDX09CSkVDVF9XUklURSk7CkBAIC0xMDQ1LDYg KzExMDEsMTIgQEAgc3RhdGljIGludCBhcHBlbmRfc2FtcGxlKHN0cnVjdCBpOTE1X3BlcmZfc3Ry ZWFtICpzdHJlYW0sCiAJCWJ1ZiArPSBJOTE1X1BFUkZfVFNfU0FNUExFX1NJWkU7CiAJfQogCisJ aWYgKHNhbXBsZV9mbGFncyAmIFNBTVBMRV9NTUlPKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVm LCBkYXRhLT5tbWlvLCA0KmRldl9wcml2LT5wZXJmLm51bV9tbWlvKSkKKwkJCXJldHVybiAtRUZB VUxUOworCQlidWYgKz0gNCpkZXZfcHJpdi0+cGVyZi5udW1fbW1pbzsKKwl9CisKIAlpZiAoc2Ft cGxlX2ZsYWdzICYgU0FNUExFX09BX1JFUE9SVCkgewogCQlpZiAoY29weV90b191c2VyKGJ1Ziwg ZGF0YS0+cmVwb3J0LCByZXBvcnRfc2l6ZSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExMDIs NiArMTE2NCw3IEBAIHN0YXRpYyBpbnQgYXBwZW5kX29hX2J1ZmZlcl9zYW1wbGUoc3RydWN0IGk5 MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBzdHJlYW0tPmRldl9wcml2OwogCXUzMiBzYW1wbGVfZmxhZ3MgPSBzdHJlYW0tPnNhbXBs ZV9mbGFnczsKIAlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YSA9IHsgMCB9OworCXUzMiBtbWlvX2xp c3RfZHVtbXlbSTkxNV9QRVJGX01NSU9fTlVNX01BWF0gPSB7IDAgfTsKIAogCWlmIChzYW1wbGVf ZmxhZ3MgJiBTQU1QTEVfT0FfU09VUkNFX0lORk8pIHsKIAkJZW51bSBkcm1faTkxNV9wZXJmX29h X2V2ZW50X3NvdXJjZSBzb3VyY2U7CkBAIC0xMTQyLDYgKzEyMDUsMTAgQEAgc3RhdGljIGludCBh cHBlbmRfb2FfYnVmZmVyX3NhbXBsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAog CQlkYXRhLmNsa19tb25vcmF3ID0gZ2V0X2Nsa19tb25vcmF3X2Zyb21fZ3B1X3RzKHN0cmVhbSwg Z3B1X3RzKTsKIAl9CiAKKwkvKiBQZXJpb2RpYyBPQSBzYW1wbGVzIGRvbid0IGhhdmUgbW1pbyBh c3NvY2lhdGVkIHdpdGggdGhlbSAqLworCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1QTEVfTU1JTykK KwkJZGF0YS5tbWlvID0gKHU4ICopbW1pb19saXN0X2R1bW15OworCiAJaWYgKHNhbXBsZV9mbGFn cyAmIFNBTVBMRV9PQV9SRVBPUlQpCiAJCWRhdGEucmVwb3J0ID0gcmVwb3J0OwogCkBAIC0xNjk2 LDYgKzE3NjMsMTAgQEAgc3RhdGljIGludCBhcHBlbmRfb25lX2NzX3NhbXBsZShzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJCQkJCXN0cmVhbSwJZ3B1X3RzKTsKIAl9CiAKKwlp ZiAoc2FtcGxlX2ZsYWdzICYgU0FNUExFX01NSU8pCisJCWRhdGEubW1pbyA9IGRldl9wcml2LT5w ZXJmLmNvbW1hbmRfc3RyZWFtX2J1ZltpZF0uYWRkciArCisJCQkJbm9kZS0+bW1pb19vZmZzZXQ7 CisKIAlyZXR1cm4gYXBwZW5kX3NhbXBsZShzdHJlYW0sIGJ1ZiwgY291bnQsIG9mZnNldCwgJmRh dGEpOwogfQogCkBAIC0yNTY0LDEwICsyNjM1LDEyIEBAIHN0YXRpYyBpbnQgaTkxNV9yaW5nX3N0 cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJYm9vbCByZXF1aXJl X29hX3VuaXQgPSBwcm9wcy0+c2FtcGxlX2ZsYWdzICYgKFNBTVBMRV9PQV9SRVBPUlQgfAogCQkJ CQkJICAgICAgU0FNUExFX09BX1NPVVJDRV9JTkZPKTsKIAlib29sIHJlcXVpcmVfY3NfbW9kZSA9 IHByb3BzLT5zYW1wbGVfZmxhZ3MgJiAoU0FNUExFX1BJRCB8Ci0JCQkJCQkgICAgICBTQU1QTEVf VEFHKTsKKwkJCQkJCSAgICAgIFNBTVBMRV9UQUcgfAorCQkJCQkJICAgICAgU0FNUExFX01NSU8p OwogCWJvb2wgY3Nfc2FtcGxlX2RhdGEgPSBwcm9wcy0+c2FtcGxlX2ZsYWdzICYgKFNBTVBMRV9P QV9SRVBPUlQgfAogCQkJCQkJCVNBTVBMRV9UUyB8Ci0JCQkJCQkJU0FNUExFX0NMS19NT05PX1JB Vyk7CisJCQkJCQkJU0FNUExFX0NMS19NT05PX1JBVyB8CisJCQkJCQkJU0FNUExFX01NSU8pOwog CWludCByZXQ7CiAKIAlpZiAoKHByb3BzLT5zYW1wbGVfZmxhZ3MgJiBTQU1QTEVfQ1RYX0lEKSAm JiAhcHJvcHMtPmNzX21vZGUpIHsKQEAgLTI3NDQsNyArMjgxNyw3IEBAIHN0YXRpYyBpbnQgaTkx NV9yaW5nX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAKIAlp ZiAocmVxdWlyZV9jc19tb2RlICYmICFwcm9wcy0+Y3NfbW9kZSkgewogCQlEUk1fRVJST1IoCi0J CQkiUElELCBUQUcgb3IgVFMgc2FtcGxpbmcgcmVxdWlyZSBhIHJpbmcgdG8gYmUgc3BlY2lmaWVk Iik7CisJCQkiUElELCBUQUcsIFRTIG9yIE1NSU8gc2FtcGxpbmcgcmVxdWlyZSBhIHJpbmcgdG8g YmUgc3BlY2lmaWVkIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gY3NfZXJyb3I7CiAJfQpA QCAtMjc5Miw2ICsyODY1LDExIEBAIHN0YXRpYyBpbnQgaTkxNV9yaW5nX3N0cmVhbV9pbml0KHN0 cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQlzdHJlYW0tPnNhbXBsZV9zaXplICs9 IDQ7CiAJCX0KIAorCQlpZiAocHJvcHMtPnNhbXBsZV9mbGFncyAmIFNBTVBMRV9NTUlPKSB7CisJ CQlzdHJlYW0tPnNhbXBsZV9mbGFncyB8PSBTQU1QTEVfTU1JTzsKKwkJCXN0cmVhbS0+c2FtcGxl X3NpemUgKz0gNCAqIGRldl9wcml2LT5wZXJmLm51bV9tbWlvOworCQl9CisKIAkJcmV0ID0gYWxs b2NfY29tbWFuZF9zdHJlYW1fYnVmKGRldl9wcml2LCBzdHJlYW0tPmVuZ2luZSk7CiAJCWlmIChy ZXQpCiAJCQlnb3RvIGNzX2Vycm9yOwpAQCAtMzM0OSw2ICszNDI3LDY5IEBAIGVycjoKIAlyZXR1 cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGNoZWNrX21taW9fd2hpdGVsaXN0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIG51bV9tbWlvKQoreworI2RlZmluZSBHRU5fUkFO R0UobCwgaCkgR0VOTUFTSyhoLCBsKQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfd2hp dGVsaXN0IHsKKwkJaTkxNV9yZWdfdCBtbWlvOworCQl1aW50MzJfdCBzaXplOworCQkvKiBzdXBw b3J0ZWQgZ2VucywgMHgxMCBmb3IgNCwgMHgzMCBmb3IgNCBhbmQgNSwgZXRjLiAqLworCQl1aW50 MzJfdCBnZW5fYml0bWFzazsKKwl9IHdoaXRlbGlzdFtdID0geworCQl7IEdFTjZfR1RfR0ZYX1JD NiwgNCwgR0VOX1JBTkdFKDcsIDkpIH0sCisJCXsgR0VONl9HVF9HRlhfUkM2cCwgNCwgR0VOX1JB TkdFKDcsIDkpIH0sCisJfTsKKwlpbnQgaSwgY291bnQ7CisKKwlmb3IgKGNvdW50ID0gMDsgY291 bnQgPCBudW1fbW1pbzsgY291bnQrKykgeworCQkvKiBDb2Fyc2UgY2hlY2sgb24gbW1pbyByZWcg YWRkcmVzc2VzIGJlaW5nIG5vbiB6ZXJvICovCisJCWlmICghZGV2X3ByaXYtPnBlcmYubW1pb19s aXN0W2NvdW50XSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHdoaXRlbGlzdCk7IGkrKykgeworCQkJaWYgKCggaTkxNV9tbWlvX3JlZ19vZmZzZXQo d2hpdGVsaXN0W2ldLm1taW8pID09CisJCQkJZGV2X3ByaXYtPnBlcmYubW1pb19saXN0W2NvdW50 XSkgJiYKKwkJCSAgICAoMSA8PCBJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuICYKKwkJCQkJd2hp dGVsaXN0W2ldLmdlbl9iaXRtYXNrKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpID09IEFS UkFZX1NJWkUod2hpdGVsaXN0KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBjb3B5X21taW9fbGlzdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCisJCQkJdm9pZCBfX3VzZXIgKm1taW8pCit7CisJdm9pZCBfX3VzZXIgKm1taW9f bGlzdCA9ICgodTggX191c2VyICopbW1pbyArIDQpOworCXUzMiBudW1fbW1pbzsKKwlpbnQgcmV0 OworCisJaWYgKCFtbWlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGdldF91c2VyKG51 bV9tbWlvLCAodTMyIF9fdXNlciAqKW1taW8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlpZiAobnVtX21taW8gPiBJOTE1X1BFUkZfTU1JT19OVU1fTUFYKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCW1lbXNldChkZXZfcHJpdi0+cGVyZi5tbWlvX2xpc3QsIDAsIEk5MTVfUEVSRl9NTUlP X05VTV9NQVgpOworCWlmIChjb3B5X2Zyb21fdXNlcihkZXZfcHJpdi0+cGVyZi5tbWlvX2xpc3Qs IG1taW9fbGlzdCwgNCpudW1fbW1pbykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gY2hl Y2tfbW1pb193aGl0ZWxpc3QoZGV2X3ByaXYsIG51bV9tbWlvKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJZGV2X3ByaXYtPnBlcmYubnVtX21taW8gPSBudW1fbW1pbzsKKworCXJldHVy biAwOworfQorCiAvKiBOb3RlIHdlIGNvcHkgdGhlIHByb3BlcnRpZXMgZnJvbSB1c2Vyc3BhY2Ug b3V0c2lkZSBvZiB0aGUgaTkxNSBwZXJmCiAgKiBtdXRleCB0byBhdm9pZCBhbiBhd2t3YXJkIGxv Y2tkZXAgd2l0aCBtbWFwX3NlbS4KICAqCkBAIC0zNDY5LDYgKzM2MTAsMTIgQEAgc3RhdGljIGlu dCByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAogCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfQ0xPQ0tfTU9OT1RPTklDX1JB VzoKIAkJCXByb3BzLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX0NMS19NT05PX1JBVzsKIAkJCWJy ZWFrOworCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfTU1JTzoKKwkJCXJldCA9IGNv cHlfbW1pb19saXN0KGRldl9wcml2LCAodTY0IF9fdXNlciAqKXZhbHVlKTsKKwkJCWlmIChyZXQp CisJCQkJcmV0dXJuIHJldDsKKwkJCXByb3BzLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX01NSU87 CisJCQlicmVhazsKIAkJY2FzZSBEUk1fSTkxNV9QRVJGX1BST1BfTUFYOgogCQkJQlVHKCk7CiAJ CX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFw aS9kcm0vaTkxNV9kcm0uaAppbmRleCAwMTA4Mjg0Li5lZjVkNzM3IDEwMDY0NAotLS0gYS9pbmNs dWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5o CkBAIC0xMjU4LDYgKzEyNTgsMTIgQEAgZW51bSBkcm1faTkxNV9wZXJmX29hX2V2ZW50X3NvdXJj ZSB7CiAJSTkxNV9QRVJGX09BX0VWRU5UX1NPVVJDRV9NQVgJLyogbm9uLUFCSSAqLwogfTsKIAor I2RlZmluZSBJOTE1X1BFUkZfTU1JT19OVU1fTUFYCTgKK3N0cnVjdCBkcm1faTkxNV9wZXJmX21t aW9fbGlzdCB7CisJX191MzIgbnVtX21taW87CisJX191MzIgbW1pb19saXN0W0k5MTVfUEVSRl9N TUlPX05VTV9NQVhdOworfTsKKwogZW51bSBkcm1faTkxNV9wZXJmX3Byb3BlcnR5X2lkIHsKIAkv KioKIAkgKiBPcGVuIHRoZSBzdHJlYW0gZm9yIGEgc3BlY2lmaWMgY29udGV4dCBoYW5kbGUgKGFz IHVzZWQgd2l0aApAQCAtMTMzNiw2ICsxMzQyLDEzIEBAIGVudW0gZHJtX2k5MTVfcGVyZl9wcm9w ZXJ0eV9pZCB7CiAJICovCiAJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9DTE9DS19NT05PVE9O SUNfUkFXLAogCisJLyoqCisJICogVGhpcyBwcm9wZXJ0eSByZXF1ZXN0cyBpbmNsdXNpb24gb2Yg bW1pbyByZWdpc3RlciB2YWx1ZXMgaW4gdGhlIHBlcmYKKwkgKiBzYW1wbGUgZGF0YS4gVGhlIHZh bHVlIG9mIHRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBhZGRyZXNzIG9mIHVzZXIKKwkgKiBz dHJ1Y3QgaGF2aW5nIHRoZSByZWdpc3RlciBhZGRyZXNzZXMuCisJICovCisJRFJNX0k5MTVfUEVS Rl9QUk9QX1NBTVBMRV9NTUlPLAorCiAJRFJNX0k5MTVfUEVSRl9QUk9QX01BWCAvKiBub24tQUJJ ICovCiB9OwogCkBAIC0xNDA2LDYgKzE0MTksNyBAQCBlbnVtIGRybV9pOTE1X3BlcmZfcmVjb3Jk X3R5cGUgewogCSAqICAgICB7IHUzMiB0YWc7IH0gJiYgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBM RV9UQUcKIAkgKiAgICAgeyB1NjQgZ3B1X3RzOyB9ICYmIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1Q TEVfVFMKIAkgKiAgICAgeyB1NjQgY2xrX21vbm87IH0gJiYgRFJNX0k5MTVfUEVSRl9QUk9QX1NB TVBMRV9DTE9DS19NT05PVE9OSUMKKwkgKiAgICAgeyB1MzIgbW1pb1tdOyB9ICYmIERSTV9JOTE1 X1BFUkZfUFJPUF9TQU1QTEVfTU1JTwogCSAqICAgICB7IHUzMiBvYV9yZXBvcnRbXTsgfSAmJiBE Uk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09BCiAJICogfTsKIAkgKi8KLS0gCjEuOS4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK