From mboxrd@z Thu Jan 1 00:00:00 1970 From: Miquel Raynal Subject: [PATCH 13/27] thermal: armada: add overheat interrupt support Date: Sat, 21 Apr 2018 17:12:41 +0200 Message-ID: <20180421151255.29929-14-miquel.raynal@bootlin.com> References: <20180421151255.29929-1-miquel.raynal@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180421151255.29929-1-miquel.raynal@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Gregory Clement , Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Zhang Rui , Eduardo Valentin Cc: Mark Rutland , devicetree@vger.kernel.org, linux-pm@vger.kernel.org, Antoine Tenart , Catalin Marinas , Will Deacon , Maxime Chevallier , Nadav Haklai , David Sniatkiwicz , Rob Herring , Thomas Petazzoni , Miquel Raynal , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhlIElQIGNhbiBtYW5hZ2UgdG8gdHJpZ2dlciBpbnRlcnJ1cHRzIG9uIG92ZXJoZWF0IHNpdHVh dGlvbiBmcm9tIGFsbAp0aGUgc2Vuc29ycy4KCkhvd2V2ZXIsIHRoZSBpbnRlcnJ1cHQgc291cmNl IGNoYW5nZXMgYWxvbmcgd2l0aCB0aGUgbGFzdCBzZWxlY3RlZApzb3VyY2UgKGllLiB0aGUgbGFz dCByZWFkIHNlbnNvciksIHdoaWNoIGlzIGFuIGluY29uc2lzdGVudCBiZWhhdmlvci4KQXZvaWQg cG9zc2libGUgZ2xpdGNoZXMgYnkgYWx3YXlzIHNlbGVjdGluZyBiYWNrIG9ubHkgb25lIGNoYW5u ZWwgd2hpY2gKd2lsbCB0aGVuIGJlIHJlZmVyZW5jZWQgYXMgdGhlICJvdmVyaGVhdF9zZW5zb3Ii IChhcmJpdHJhcmlseTogdGhlIGZpcnN0CmluIHRoZSBEVCB3aGljaCBoYXMgYSBjcml0aWNhbCB0 cmlwIHBvaW50IGZpbGxlZCBpbikuCgpJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzY2FuIG9mIGFs bCB0aGVybWFsIHpvbmUgbm9kZXMgZGlkIG5vdCBicmluZyBhCmNyaXRpY2FsIHRyaXAgcG9pbnQg ZnJvbSB3aGljaCB0aGUgb3ZlcmhlYXQgaW50ZXJydXB0IGNvdWxkIGJlCmNvbmZpZ3VyZWQuIElu IHRoaXMgY2FzZSBqdXN0IGNvbXBsYWluIGJ1dCBkbyBub3QgZmFpbCB0aGUgcHJvYmUuCgpBbHNv IGRpc2FibGUgc2Vuc29yIHN3aXRjaCBkdXJpbmcgb3ZlcmhlYXQgc2l0dWF0aW9ucyBiZWNhdXNl IGNoYW5naW5nCnRoZSBjaGFubmVsIHdoaWxlIHRoZSBzeXN0ZW0gaXMgdG9vIGhvdCBjb3VsZCBj bGVhciB0aGUgb3ZlcmhlYXQgc3RhdGUKYnkgY2hhbmdpbmcgdGhlIHNvdXJjZSB3aGlsZSB0aGUg dGVtcGVyYXR1cmUgaXMgc3RpbGwgdmVyeSBoaWdoLgoKRXZlbiBpZiB0aGUgb3ZlcmhlYXQgc3Rh dGUgaXMgbm90IGRlY2xhcmVkLCBvdmVyaGVhdCBpbnRlcnJ1cHQgbXVzdCBiZQpjbGVhcmVkIGJ5 IHJlYWRpbmcgdGhlIERGWCBpbnRlcnJ1cHQgY2F1c2UgX2FmdGVyXyB0aGUgdGVtcGVyYXR1cmUg aGFzCmZhbGxlbiBkb3duIHRvIHRoZSBsb3cgdGhyZXNob2xkLCBvdGhlcndpc2UgZnV0dXJlIHBv c3NpYmxlIGludGVycnVwdHMKd291bGQgbm90IGJlIHNlcnZlZC4gQSB3b3JrIHBvbGxzIHRoZSBj b3JyZXNwb25kaW5nIHJlZ2lzdGVyIHVudGlsIHRoZQpvdmVyaGVhdCBmbGFnIGdldHMgY2xlYXJl ZCBpbiB0aGlzIGNhc2UuCgpTdWdnZXN0ZWQtYnk6IERhdmlkIFNuaWF0a2l3aWN6IDxkYXZpZHNu QG1hcnZlbGwuY29tPgpTaWduZWQtb2ZmLWJ5OiBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwucmF5bmFs QGJvb3RsaW4uY29tPgotLS0KIGRyaXZlcnMvdGhlcm1hbC9hcm1hZGFfdGhlcm1hbC5jIHwgMzM1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQs IDMzNSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2FybWFkYV90 aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvYXJtYWRhX3RoZXJtYWwuYwppbmRleCA2NjMyNGZj ODUzYTMuLjZjZWYyOWQ1MWZiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2FybWFkYV90 aGVybWFsLmMKKysrIGIvZHJpdmVycy90aGVybWFsL2FybWFkYV90aGVybWFsLmMKQEAgLTI0LDgg KzI0LDE0IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgv dGhlcm1hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KICNpbmNsdWRlIDxsaW51 eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgInRo ZXJtYWxfY29yZS5oIgorCisjZGVmaW5lIFRPX01DRUxTSVVTKGMpCQkJKGMgKiAxMDAwKQogCiAv KiBUaGVybWFsIE1hbmFnZXIgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5l IFBNVV9UREMwX1NXX1JTVF9NQVNLCQkoMHgxIDw8IDEpCkBAIC02MSw5ICs2NywxMyBAQAogI2Rl ZmluZSBDT05UUk9MMV9UU0VOX0FWR19NQVNLCQkweDcKICNkZWZpbmUgQ09OVFJPTDFfRVhUX1RT RU5fU1dfUkVTRVQJQklUKDcpCiAjZGVmaW5lIENPTlRST0wxX0VYVF9UU0VOX0hXX1JFU0VUbglC SVQoOCkKKyNkZWZpbmUgQ09OVFJPTDFfVFNFTl9JTlRfRU4JCUJJVCgyNSkKKyNkZWZpbmUgQ09O VFJPTDFfVFNFTl9TRUxFQ1RfT0ZGCTIxCisjZGVmaW5lIENPTlRST0wxX1RTRU5fU0VMRUNUX01B U0sJMHgzCiAKICNkZWZpbmUgU1RBVFVTX1BPTExfUEVSSU9EX1VTCQkxMDAwCiAjZGVmaW5lIFNU QVRVU19QT0xMX1RJTUVPVVRfVVMJCTEwMDAwMAorI2RlZmluZSBPVkVSSEVBVF9JTlRfUE9MTF9E RUxBWQkJKDEgKiBIWikKIAogc3RydWN0IGFybWFkYV90aGVybWFsX2RhdGE7CiAKQEAgLTczLDgg KzgzLDE1IEBAIHN0cnVjdCBhcm1hZGFfdGhlcm1hbF9wcml2IHsKIAlzdHJ1Y3QgcmVnbWFwICpz eXNjb247CiAJY2hhciB6b25lX25hbWVbVEhFUk1BTF9OQU1FX0xFTkdUSF07CiAJc3RydWN0IG11 dGV4IHVwZGF0ZV9sb2NrOworCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICpvdmVyaGVhdF9z ZW5zb3I7CiAJc3RydWN0IGFybWFkYV90aGVybWFsX2RhdGEgKmRhdGE7CiAJaW50IGN1cnJlbnRf Y2hhbm5lbDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdhaXRfZW5kX292ZXJoZWF0X3dvcms7CisJ Ym9vbCBvdmVyaGVhdF9pbnRfZW5hYmxlZDsKKwlsb25nIGN1cnJlbnRfdGhyZXNob2xkOworCWxv bmcgY3VycmVudF9oeXN0ZXJlc2lzOworCWJvb2wgb3ZlcmhlYXRfc2l0dWF0aW9uOworCWludCBp bnRlcnJ1cHRfc291cmNlOwogfTsKIAogc3RydWN0IGFybWFkYV90aGVybWFsX2RhdGEgewpAQCAt OTIsMTIgKzEwOSwyMCBAQCBzdHJ1Y3QgYXJtYWRhX3RoZXJtYWxfZGF0YSB7CiAJLyogUmVnaXN0 ZXIgc2hpZnQgYW5kIG1hc2sgdG8gYWNjZXNzIHRoZSBzZW5zb3IgdGVtcGVyYXR1cmUgKi8KIAl1 bnNpZ25lZCBpbnQgdGVtcF9zaGlmdDsKIAl1bnNpZ25lZCBpbnQgdGVtcF9tYXNrOworCXVuc2ln bmVkIGludCB0aHJlc2hfc2hpZnQ7CisJdW5zaWduZWQgaW50IGh5c3Rfc2hpZnQ7CisJdW5zaWdu ZWQgaW50IGh5c3RfbWFzazsKIAl1MzIgaXNfdmFsaWRfYml0OwogCiAJLyogU3lzY29uIGFjY2Vz cyAqLwogCXVuc2lnbmVkIGludCBzeXNjb25fY29udHJvbDBfb2ZmOwogCXVuc2lnbmVkIGludCBz eXNjb25fY29udHJvbDFfb2ZmOwogCXVuc2lnbmVkIGludCBzeXNjb25fc3RhdHVzX29mZjsKKwl1 bnNpZ25lZCBpbnQgZGZ4X2lycV9jYXVzZV9vZmY7CisJdW5zaWduZWQgaW50IGRmeF9pcnFfbWFz a19vZmY7CisJdW5zaWduZWQgaW50IGRmeF9vdmVyaGVhdF9pcnE7CisJdW5zaWduZWQgaW50IGRm eF9zZXJ2ZXJfaXJxX21hc2tfb2ZmOworCXVuc2lnbmVkIGludCBkZnhfc2VydmVyX2lycV9lbjsK IAogCS8qIE9uZSBzZW5zb3IgaXMgaW4gdGhlIHRoZXJtYWwgSUMsIHRoZSBvdGhlcnMgYXJlIGlu IHRoZSBDUFVzIGlmIGFueSAqLwogCXVuc2lnbmVkIGludCBjcHVfbnI7CkBAIC0xMjUsNiArMTUw LDEyIEBAIHN0cnVjdCBhcm1hZGFfdGhlcm1hbF9zZW5zb3IgewogCWludCBpZDsKIH07CiAKK3N0 cnVjdCBhcm1hZGFfdGhlcm1hbF9wcml2ICp3b3JrX3RvX3RoZXJtYWwoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQoreworCXJldHVybiBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFybWFkYV90 aGVybWFsX3ByaXYsCisJCQkgICAgd2FpdF9lbmRfb3ZlcmhlYXRfd29yay53b3JrKTsKK30KKwog c3RhdGljIHZvaWQgYXJtYWRheHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAog CQkJICBzdHJ1Y3QgYXJtYWRhX3RoZXJtYWxfcHJpdiAqcHJpdikKIHsKQEAgLTI3MSw2ICszMDIs NDQgQEAgc3RhdGljIGJvb2wgYXJtYWRhX2lzX3ZhbGlkKHN0cnVjdCBhcm1hZGFfdGhlcm1hbF9w cml2ICpwcml2KQogCXJldHVybiByZWcgJiBwcml2LT5kYXRhLT5pc192YWxpZF9iaXQ7CiB9CiAK K3N0YXRpYyB2b2lkIGFybWFkYV9lbmFibGVfb3ZlcmhlYXRfaW50ZXJydXB0KHN0cnVjdCBhcm1h ZGFfdGhlcm1hbF9wcml2ICpwcml2KQoreworCXN0cnVjdCBhcm1hZGFfdGhlcm1hbF9kYXRhICpk YXRhID0gcHJpdi0+ZGF0YTsKKwl1MzIgcmVnOworCisJLyogQ2xlYXIgREZYIHRlbXBlcmF0dXJl IElSUSBjYXVzZSAqLworCXJlZ21hcF9yZWFkKHByaXYtPnN5c2NvbiwgZGF0YS0+ZGZ4X2lycV9j YXVzZV9vZmYsICZyZWcpOworCisJLyogRW5hYmxlIERGWCBUZW1wZXJhdHVyZSBJUlEgKi8KKwly ZWdtYXBfcmVhZChwcml2LT5zeXNjb24sIGRhdGEtPmRmeF9pcnFfbWFza19vZmYsICZyZWcpOwor CXJlZyB8PSBkYXRhLT5kZnhfb3ZlcmhlYXRfaXJxOworCXJlZ21hcF93cml0ZShwcml2LT5zeXNj b24sIGRhdGEtPmRmeF9pcnFfbWFza19vZmYsIHJlZyk7CisKKwkvKiBFbmFibGUgREZYIHNlcnZl ciBJUlEgKi8KKwlyZWdtYXBfcmVhZChwcml2LT5zeXNjb24sIGRhdGEtPmRmeF9zZXJ2ZXJfaXJx X21hc2tfb2ZmLCAmcmVnKTsKKwlyZWcgfD0gZGF0YS0+ZGZ4X3NlcnZlcl9pcnFfZW47CisJcmVn bWFwX3dyaXRlKHByaXYtPnN5c2NvbiwgZGF0YS0+ZGZ4X3NlcnZlcl9pcnFfbWFza19vZmYsIHJl Zyk7CisKKwkvKiBFbmFibGUgb3ZlcmhlYXQgaW50ZXJydXB0ICovCisJcmVnbWFwX3JlYWQocHJp di0+c3lzY29uLCBkYXRhLT5zeXNjb25fY29udHJvbDFfb2ZmLCAmcmVnKTsKKwlyZWcgfD0gQ09O VFJPTDFfVFNFTl9JTlRfRU47CisJcmVnbWFwX3dyaXRlKHByaXYtPnN5c2NvbiwgZGF0YS0+c3lz Y29uX2NvbnRyb2wxX29mZiwgcmVnKTsKKworCXByaXYtPm92ZXJoZWF0X2ludF9lbmFibGVkID0g dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgYXJtYWRhX2Rpc2FibGVfb3ZlcmhlYXRfaW50ZXJydXB0 KHN0cnVjdCBhcm1hZGFfdGhlcm1hbF9wcml2ICpwcml2KQoreworCXN0cnVjdCBhcm1hZGFfdGhl cm1hbF9kYXRhICpkYXRhID0gcHJpdi0+ZGF0YTsKKwl1MzIgcmVnOworCisJcmVnbWFwX3JlYWQo cHJpdi0+c3lzY29uLCBkYXRhLT5zeXNjb25fY29udHJvbDFfb2ZmLCAmcmVnKTsKKwlyZWcgJj0g fkNPTlRST0wxX1RTRU5fSU5UX0VOOworCXJlZ21hcF93cml0ZShwcml2LT5zeXNjb24sIGRhdGEt PnN5c2Nvbl9jb250cm9sMV9vZmYsIHJlZyk7CisKKwlwcml2LT5vdmVyaGVhdF9pbnRfZW5hYmxl ZCA9IGZhbHNlOworfQorCiAvKiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gYm9hcmQgd2l0aCBtb3Jl IHRoYW4gb25lIHNlbnNvciBwZXIgY2hhbm5lbCAqLwogc3RhdGljIGludCBhcm1hZGFfc2VsZWN0 X2NoYW5uZWwoc3RydWN0IGFybWFkYV90aGVybWFsX3ByaXYgKnByaXYsIGludCBjaGFubmVsKQog ewpAQCAtMjgzLDYgKzM1MiwxNCBAQCBzdGF0aWMgaW50IGFybWFkYV9zZWxlY3RfY2hhbm5lbChz dHJ1Y3QgYXJtYWRhX3RoZXJtYWxfcHJpdiAqcHJpdiwgaW50IGNoYW5uZWwpCiAJaWYgKHByaXYt PmN1cnJlbnRfY2hhbm5lbCA9PSBjaGFubmVsKQogCQlyZXR1cm4gMDsKIAorCS8qCisJICogQ2hh bmdpbmcgdGhlIGNoYW5uZWwgd2hpbGUgdGhlIHN5c3RlbSBpcyB0b28gaG90IGNvdWxkIGNsZWFy IHRoZQorCSAqIG92ZXJoZWF0IHN0YXRlIGJ5IGNoYW5naW5nIHRoZSBzb3VyY2Ugd2hpbGUgdGhl IHRlbXBlcmF0dXJlIGlzIHN0aWxsCisJICogdmVyeSBoaWdoLiBGb3JiaWQgYW55IGNoYW5uZWwg Y2hhbmdlIGluIHRoaXMgc2l0dWF0aW9uLgorCSAqLworCWlmIChwcml2LT5vdmVyaGVhdF9zaXR1 YXRpb24pCisJCXJldHVybiAtRUJVU1k7CisKIAkvKiBTdG9wIHRoZSBtZWFzdXJlbWVudHMgKi8K IAlyZWdtYXBfcmVhZChwcml2LT5zeXNjb24sIGRhdGEtPnN5c2Nvbl9jb250cm9sMF9vZmYsICZj dHJsMCk7CiAJY3RybDAgJj0gfkNPTlRST0wwX1RTRU5fU1RBUlQ7CkBAIC0zNzgsMTEgKzQ1NSwx OCBAQCBzdGF0aWMgaW50IGFybWFkYV9nZXRfdGVtcCh2b2lkICpfc2Vuc29yLCBpbnQgKnRlbXAp CiB7CiAJc3RydWN0IGFybWFkYV90aGVybWFsX3NlbnNvciAqc2Vuc29yID0gX3NlbnNvcjsKIAlz dHJ1Y3QgYXJtYWRhX3RoZXJtYWxfcHJpdiAqcHJpdiA9IHNlbnNvci0+cHJpdjsKKwlib29sIHRv Z2dsZV9pbnQgPSBwcml2LT5vdmVyaGVhdF9pbnRfZW5hYmxlZCAmJgorCQkJICAhcHJpdi0+b3Zl cmhlYXRfc2l0dWF0aW9uICYmCisJCQkgIHNlbnNvci0+aWQgIT0gcHJpdi0+aW50ZXJydXB0X3Nv dXJjZTsKIAlsb25nIHRlbXBlcmF0dXJlOwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZwcml2 LT51cGRhdGVfbG9jayk7CiAKKwkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgdGhlIHRpbWUgdG8g cmVhZCBhbm90aGVyIHNlbnNvciAqLworCWlmICh0b2dnbGVfaW50KQorCQlhcm1hZGFfZGlzYWJs ZV9vdmVyaGVhdF9pbnRlcnJ1cHQocHJpdik7CisKIAkvKiBTZWxlY3QgdGhlIGRlc2lyZWQgY2hh bm5lbCAqLwogCXJldCA9IGFybWFkYV9zZWxlY3RfY2hhbm5lbChwcml2LCBzZW5zb3ItPmlkKTsK IAlpZiAocmV0KQpAQCAtMzkzLDYgKzQ3NywxNCBAQCBzdGF0aWMgaW50IGFybWFkYV9nZXRfdGVt cCh2b2lkICpfc2Vuc29yLCBpbnQgKnRlbXApCiAJaWYgKHJldCkKIAkJZ290byB1bmxvY2tfbXV0 ZXg7CiAKKwkvKiBTZWxlY3QgYmFjayB0aGUgaW50ZXJydXB0IHNvdXJjZSBjaGFubmVsICovCisJ cmV0ID0gYXJtYWRhX3NlbGVjdF9jaGFubmVsKHByaXYsIHByaXYtPmludGVycnVwdF9zb3VyY2Up OworCWlmIChyZXQpCisJCWdvdG8gdW5sb2NrX211dGV4OworCisJaWYgKHRvZ2dsZV9pbnQpCisJ CWFybWFkYV9lbmFibGVfb3ZlcmhlYXRfaW50ZXJydXB0KHByaXYpOworCiAJKnRlbXAgPSB0ZW1w ZXJhdHVyZTsKIAogdW5sb2NrX211dGV4OgpAQCAtNDA1LDYgKzQ5NywxNjIgQEAgc3RhdGljIHN0 cnVjdCB0aGVybWFsX3pvbmVfb2ZfZGV2aWNlX29wcyBvZl9vcHMgPSB7CiAJLmdldF90ZW1wID0g YXJtYWRhX2dldF90ZW1wLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBhcm1hZGFfbWNfdG9f cmVnX3RlbXAoc3RydWN0IGFybWFkYV90aGVybWFsX2RhdGEgKmRhdGEsCisJCQkJCSAgdW5zaWdu ZWQgaW50IHRlbXBfbWMpCit7CisJczY0IGIgPSBkYXRhLT5jb2VmX2I7CisJczY0IG0gPSBkYXRh LT5jb2VmX207CisJczY0IGRpdiA9IGRhdGEtPmNvZWZfZGl2OworCXVuc2lnbmVkIGludCBzYW1w bGU7CisKKwlpZiAoZGF0YS0+aW52ZXJ0ZWQpCisJCXNhbXBsZSA9IGRpdl9zNjQoKCh0ZW1wX21j ICogZGl2KSArIGIpLCBtKTsKKwllbHNlCisJCXNhbXBsZSA9IGRpdl9zNjQoKGIgLSAodGVtcF9t YyAqIGRpdikpLCBtKTsKKworCXJldHVybiBzYW1wbGUgJiBkYXRhLT50ZW1wX21hc2s7Cit9CisK K3N0YXRpYyB1bnNpZ25lZCBpbnQgYXJtYWRhX21jX3RvX3JlZ19oeXN0KHN0cnVjdCBhcm1hZGFf dGhlcm1hbF9kYXRhICpkYXRhLAorCQkJCQkgIHVuc2lnbmVkIGludCBoeXN0X21jKQoreworCS8q CisJICogVGhlIGRvY3VtZW50YXRpb24gc3RhdGVzOgorCSAqIGhpZ2gvbG93IHdhdGVybWFyayA9 IHRocmVzaG9sZCArLy0gMC40NzYxICogMl4oaHlzdGVyZXNpcyArIDIpCisJICogd2hpY2ggaXMg dGhlIG1hdGhlbWF0aWNhbCBkZXJpdmF0aW9uIGZvcjoKKwkgKiAweDAgPD0+IDEuOcKwQywgMHgx IDw9PiAzLjjCsEMsIDB4MiA8PT4gNy42wrBDLCAweDMgPD0+IDE1LjIKKwkgKi8KKwl1bnNpZ25l ZCBpbnQgaHlzdF9sZXZlbHNfbWNbXSA9IHsxOTAwLCAzODAwLCA3NjAwLCAxNTIwMH07CisJaW50 IGk7CisKKwkvKgorCSAqIFdlIHdpbGwgYWx3YXlzIHRha2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxl IGh5c3RlcmVzaXMgdG8gYXZvaWQgcmlza2luZworCSAqIHRoZSBoYXJkd2FyZSBpbnRlZ3JpdHkg YnkgZW5sYXJnaW5nIHRoZSB0aHJlc2hvbGQgYnkgKzjCsEMgaW4gdGhlCisJICogd29yc3QgY2Fz ZS4KKwkgKi8KKwlmb3IgKGkgPSBBUlJBWV9TSVpFKGh5c3RfbGV2ZWxzX21jKSAtIDE7IGkgPiAw OyBpLS0pCisJCWlmIChoeXN0X21jID49IGh5c3RfbGV2ZWxzX21jW2ldKQorCQkJYnJlYWs7CisK KwlyZXR1cm4gaSAmIGRhdGEtPmh5c3RfbWFzazsKK30KKworc3RhdGljIHZvaWQgYXJtYWRhX3Nl dF9vdmVyaGVhdF90aHJlc2hvbGRzKHN0cnVjdCBhcm1hZGFfdGhlcm1hbF9wcml2ICpwcml2LAor CQkJCQkgICBpbnQgdGhyZXNoX21jLCBpbnQgaHlzdF9tYykKK3sKKwlzdHJ1Y3QgYXJtYWRhX3Ro ZXJtYWxfZGF0YSAqZGF0YSA9IHByaXYtPmRhdGE7CisJdW5zaWduZWQgaW50IHRocmVzaG9sZCA9 IGFybWFkYV9tY190b19yZWdfdGVtcChkYXRhLCB0aHJlc2hfbWMpOworCXVuc2lnbmVkIGludCBo eXN0ZXJlc2lzID0gYXJtYWRhX21jX3RvX3JlZ19oeXN0KGRhdGEsIGh5c3RfbWMpOworCXUzMiBj dHJsMTsKKworCXJlZ21hcF9yZWFkKHByaXYtPnN5c2NvbiwgZGF0YS0+c3lzY29uX2NvbnRyb2wx X29mZiwgJmN0cmwxKTsKKworCS8qIFNldCBUaHJlc2hvbGQgKi8KKwlpZiAodGhyZXNoX21jID49 IDApIHsKKwkJY3RybDEgJj0gfihkYXRhLT50ZW1wX21hc2sgPDwgZGF0YS0+dGhyZXNoX3NoaWZ0 KTsKKwkJY3RybDEgfD0gdGhyZXNob2xkIDw8IGRhdGEtPnRocmVzaF9zaGlmdDsKKwkJcHJpdi0+ Y3VycmVudF90aHJlc2hvbGQgPSB0aHJlc2hfbWM7CisJfQorCisJLyogU2V0IEh5c3RlcmVzaXMg Ki8KKwlpZiAoaHlzdF9tYyA+PSAwKSB7CisJCWN0cmwxICY9IH4oZGF0YS0+aHlzdF9tYXNrIDw8 IGRhdGEtPmh5c3Rfc2hpZnQpOworCQljdHJsMSB8PSBoeXN0ZXJlc2lzIDw8IGRhdGEtPmh5c3Rf c2hpZnQ7CisJCXByaXYtPmN1cnJlbnRfaHlzdGVyZXNpcyA9IGh5c3RfbWM7CisJfQorCisJcmVn bWFwX3dyaXRlKHByaXYtPnN5c2NvbiwgZGF0YS0+c3lzY29uX2NvbnRyb2wxX29mZiwgY3RybDEp OworfQorCitzdGF0aWMgYm9vbCBhcm1hZGFfdGVtcF9pc19vdmVyX3RocmVzaG9sZChzdHJ1Y3Qg YXJtYWRhX3RoZXJtYWxfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXJtYWRhX3RoZXJtYWxfZGF0 YSAqZGF0YSA9IHByaXYtPmRhdGE7CisJdTMyIHJlZzsKKworCS8qCisJICogV2hlbiBhbiBvdmVy aGVhdCBpbnRlcnJ1cHQgb2NjdXJzLCBwb2xsIERGWCBvdmVyaGVhdCBJUlEgY2F1c2UKKwkgKiBy ZWdpc3RlciB1bnRpbCB0aGUgcmlnaHQgYml0IGdldHMgY2xlYXJlZC4KKwkgKi8KKwlyZWdtYXBf cmVhZChwcml2LT5zeXNjb24sIGRhdGEtPmRmeF9pcnFfY2F1c2Vfb2ZmLCAmcmVnKTsKKwlpZiAo cmVnICYgZGF0YS0+ZGZ4X292ZXJoZWF0X2lycSkgeworCQkvKgorCQkgKiBUaHJlc2hvbGQgcmVh Y2hlZCwgYXMgZGlmZmVyZW50IENQcyBtYXkgc2hhcmUgdGhlIHNhbWUKKwkJICogaW50ZXJydXB0 LCB3ZSBuZWVkIHRvIG1hc2sgdGhlIG92ZXJoZWF0IGludGVycnVwdCB1bnRpbCB0aGUKKwkJICog dGVtcGVyYXR1cmUgY2xpbWJzIGRvd24gdG8gdGhlIGxvdy10aHJlc2hvbGQsIG90aGVyd2lzZSBp ZgorCQkgKiBhbm90aGVyIENQIHJlYWNoZXMgaXRzIHRocmVzaG9sZCB0ZW1wZXJhdHVyZSB0b28s IGl0IHdpbGwKKwkJICogcmUtdHJpZ2dlciBhbiBpbnRlcnJ1cHQgZm9yIHRoZSBDUHMgdGhhdCBh cmUgYWxyZWFkeSBvdmVyCisJCSAqIGhlYXRpbmcuCisJCSAqLworCQlyZWdtYXBfcmVhZChwcml2 LT5zeXNjb24sIGRhdGEtPmRmeF9pcnFfbWFza19vZmYsICZyZWcpOworCQlyZWcgJj0gfmRhdGEt PmRmeF9vdmVyaGVhdF9pcnE7CisJCXJlZ21hcF93cml0ZShwcml2LT5zeXNjb24sIGRhdGEtPmRm eF9pcnFfbWFza19vZmYsIHJlZyk7CisKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT53 YWl0X2VuZF9vdmVyaGVhdF93b3JrLAorCQkJCSAgICAgIE9WRVJIRUFUX0lOVF9QT0xMX0RFTEFZ KTsKKworCQlwcml2LT5vdmVyaGVhdF9zaXR1YXRpb24gPSB0cnVlOworCisJCXJldHVybiB0cnVl OworCX0KKworCS8qCisJICogVGhlIHRlbXBlcmF0dXJlIGxldmVsIGlzIGFjY2VwdGFibGUgYWdh aW4sIHVubWFzayB0aGUgb3ZlcmhlYXQKKwkgKiBpbnRlcnJ1cHQuCisJICovCisJcmVnbWFwX3Jl YWQocHJpdi0+c3lzY29uLCBkYXRhLT5kZnhfaXJxX21hc2tfb2ZmLCAmcmVnKTsKKwlyZWcgfD0g ZGF0YS0+ZGZ4X292ZXJoZWF0X2lycTsKKwlyZWdtYXBfd3JpdGUocHJpdi0+c3lzY29uLCBkYXRh LT5kZnhfaXJxX21hc2tfb2ZmLCByZWcpOworCisJcHJpdi0+b3ZlcmhlYXRfc2l0dWF0aW9uID0g ZmFsc2U7CisKKwkvKiBOb3RpZnkgdGhlIHRoZXJtYWwgY29yZSB0aGF0IHRoZSB0ZW1wZXJhdHVy ZSBpcyBhY2NlcHRhYmxlIGFnYWluICovCisJdGhlcm1hbF96b25lX2RldmljZV91cGRhdGUocHJp di0+b3ZlcmhlYXRfc2Vuc29yLAorCQkJCSAgIFRIRVJNQUxfRVZFTlRfVU5TUEVDSUZJRUQpOwor CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogT3ZlcmhlYXQgaW50ZXJydXB0IG11c3QgYmUg Y2xlYXJlZCBieSByZWFkaW5nIHRoZSBERlggaW50ZXJydXB0IGNhdXNlIGFmdGVyCisgKiB0aGUg dGVtcGVyYXR1cmUgaGFzIGZhbGxlbiBkb3duIHRvIHRoZSBsb3cgdGhyZXNob2xkLCBvdGhlcndp c2UgZnV0dXJlCisgKiBpbnRlcnJ1cHRzIHdpbGwgbm90IGJlIHNlcnZlZC4gVGhpcyB3b3JrIHBv bGxzIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyCisgKiB1bnRpbCB0aGUgb3ZlcmhlYXQgZmxh ZyBnZXRzIGNsZWFyZWQuCisgKi8KK3N0YXRpYyB2b2lkIGFybWFkYV93YWl0X2VuZF9vdmVyaGVh dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJYXJtYWRhX3RlbXBfaXNfb3Zlcl90aHJl c2hvbGQod29ya190b190aGVybWFsKHdvcmspKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGFy bWFkYV9vdmVyaGVhdF9pc3IoaW50IGlycSwgdm9pZCAqYmxvYikKK3sKKwlzdHJ1Y3QgYXJtYWRh X3RoZXJtYWxfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgYXJtYWRhX3RoZXJtYWxfcHJpdiAqKWJsb2I7 CisJdTMyIHJlZzsKKwlsb25nIHRlbXBlcmF0dXJlOworCisJLyoKKwkgKiBBcyB0aGUgaW50ZXJy dXB0IGxpbmUgaXMgc2hhcmVkIGJldHdlZW4gQ1BzLCB0aGlzIGhhbmRsZXIgd2lsbCBiZQorCSAq IGV4ZWN1dGVkIGVhY2ggdGltZSBhIENQIHRyaWdnZXJzIGFuIG92ZXJoZWF0IGludGVycnVwdC4g T25jZSB0aGUKKwkgKiBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkIGZvciBvbmUgQ1AsIGl0IGlzIG1h c2tlZCBpbiB0aGUgREZYIHJlZ2lzdGVyCisJICogdW50aWwgdGhlIHRlbXBlcmF0dXJlIGZhbGxz IHVuZGVyIHRoZSB0aHJlc2hvbGQsIHdoZW4gaXQgaXMgdW5tYXNrZWQuCisJICoKKwkgKiBDaGVj ayBpZiB0aGUgaW50ZXJydXB0IGlzIG1hc2tlZCwgaW4gdGhpcyBjYXNlIGl0IG1lYW5zIHRoZSBj b2RlIGlzCisJICogcnVubmluZyBvbiB0aGUgd3JvbmcgQ1AgYW5kIHdlIHNob3VsZCByZXR1cm4g SVJRX05PTkUuCisJICovCisJcmVnbWFwX3JlYWQocHJpdi0+c3lzY29uLCBwcml2LT5kYXRhLT5k ZnhfaXJxX21hc2tfb2ZmLCAmcmVnKTsKKwlpZiAoIShyZWcgJiBwcml2LT5kYXRhLT5kZnhfb3Zl cmhlYXRfaXJxKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKGFybWFkYV90ZW1wX2lzX292 ZXJfdGhyZXNob2xkKHByaXYpKSB7CisJCWFybWFkYV9yZWFkX3NlbnNvcihwcml2LCAmdGVtcGVy YXR1cmUpOworCisJCS8qIE5vdGlmeSB0aGUgY29yZSBhYm91dCB0aGUgdW5leHBlY3RlZCBoZWF0 IGxldmVsICovCisJCXRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRlKHByaXYtPm92ZXJoZWF0X3Nl bnNvciwKKwkJCQkJICAgVEhFUk1BTF9FVkVOVF9VTlNQRUNJRklFRCk7CisJfQorCisJcmV0dXJu IElSUV9IQU5ETEVEOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFybWFkYV90aGVybWFsX2Rh dGEgYXJtYWRheHBfZGF0YSA9IHsKIAkuaW5pdCA9IGFybWFkYXhwX2luaXQsCiAJLnRlbXBfc2hp ZnQgPSAxMCwKQEAgLTQ2MCw2ICs3MDgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybWFkYV90 aGVybWFsX2RhdGEgYXJtYWRhX2FwODA2X2RhdGEgPSB7CiAJLmlzX3ZhbGlkX2JpdCA9IEJJVCgx NiksCiAJLnRlbXBfc2hpZnQgPSAwLAogCS50ZW1wX21hc2sgPSAweDNmZiwKKwkudGhyZXNoX3No aWZ0ID0gMywKKwkuaHlzdF9zaGlmdCA9IDE5LAorCS5oeXN0X21hc2sgPSAweDMsCiAJLmNvZWZf YiA9IC0xNTAwMDBMTCwKIAkuY29lZl9tID0gNDIzVUxMLAogCS5jb2VmX2RpdiA9IDEsCkBAIC00 NjgsNiArNzE5LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtYWRhX3RoZXJtYWxfZGF0YSBh cm1hZGFfYXA4MDZfZGF0YSA9IHsKIAkuc3lzY29uX2NvbnRyb2wwX29mZiA9IDB4ODQsCiAJLnN5 c2Nvbl9jb250cm9sMV9vZmYgPSAweDg4LAogCS5zeXNjb25fc3RhdHVzX29mZiA9IDB4OEMsCisJ LmRmeF9pcnFfY2F1c2Vfb2ZmID0gMHgxMDgsCisJLmRmeF9pcnFfbWFza19vZmYgPSAweDEwQywK KwkuZGZ4X292ZXJoZWF0X2lycSA9IEJJVCgyMiksCisJLmRmeF9zZXJ2ZXJfaXJxX21hc2tfb2Zm ID0gMHgxMDQsCisJLmRmeF9zZXJ2ZXJfaXJxX2VuID0gQklUKDEpLAogCS5jcHVfbnIgPSA0LAog fTsKIApAQCAtNDc2LDYgKzczMiw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtYWRhX3RoZXJt YWxfZGF0YSBhcm1hZGFfY3AxMTBfZGF0YSA9IHsKIAkuaXNfdmFsaWRfYml0ID0gQklUKDEwKSwK IAkudGVtcF9zaGlmdCA9IDAsCiAJLnRlbXBfbWFzayA9IDB4M2ZmLAorCS50aHJlc2hfc2hpZnQg PSAxNiwKKwkuaHlzdF9zaGlmdCA9IDI2LAorCS5oeXN0X21hc2sgPSAweDMsCiAJLmNvZWZfYiA9 IDExNzI0OTkxMDBVTEwsCiAJLmNvZWZfbSA9IDIwMDAwOTZVTEwsCiAJLmNvZWZfZGl2ID0gNDIw MSwKQEAgLTQ4Myw2ICs3NDIsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1hZGFfdGhlcm1h bF9kYXRhIGFybWFkYV9jcDExMF9kYXRhID0gewogCS5zeXNjb25fY29udHJvbDBfb2ZmID0gMHg3 MCwKIAkuc3lzY29uX2NvbnRyb2wxX29mZiA9IDB4NzQsCiAJLnN5c2Nvbl9zdGF0dXNfb2ZmID0g MHg3OCwKKwkuZGZ4X2lycV9jYXVzZV9vZmYgPSAweDEwOCwKKwkuZGZ4X2lycV9tYXNrX29mZiA9 IDB4MTBDLAorCS5kZnhfb3ZlcmhlYXRfaXJxID0gQklUKDIwKSwKKwkuZGZ4X3NlcnZlcl9pcnFf bWFza19vZmYgPSAweDEwNCwKKwkuZGZ4X3NlcnZlcl9pcnFfZW4gPSBCSVQoMSksCiB9OwogCiBz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhcm1hZGFfdGhlcm1hbF9pZF90YWJsZVtd ID0gewpAQCAtNTYwLDEwICs4MjQsMjggQEAgc3RhdGljIGludCBhcm1hZGFfdGhlcm1hbF9wcm9i ZV9sZWdhY3koc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIHN0YXRpYyBpbnQgYXJtYWRh X3RoZXJtYWxfcHJvYmVfc3lzY29uKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJ ICAgICAgIHN0cnVjdCBhcm1hZGFfdGhlcm1hbF9wcml2ICpwcml2KQogeworCWludCBpcnEsIHJl dDsKKwogCXByaXYtPnN5c2NvbiA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChwZGV2LT5kZXYucGFy ZW50LT5vZl9ub2RlKTsKIAlpZiAoSVNfRVJSKHByaXYtPnN5c2NvbikpCiAJCXJldHVybiBQVFJf RVJSKHByaXYtPnN5c2Nvbik7CiAKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwor CWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJLyoKKwkgKiBPbmUgU0VJIGludGVycnVw dCBpbiB0aGUgR0lDIGNhbiBiZSB0cmlnZ2VyZWQgYnkgZWFjaCBERlggc2VydmVyIChvbmUKKwkg KiBwZXIgQ1ApIHVwb24gaGFyZHdhcmUgaW50ZXJydXB0IGZyb20gdGhlIHRoZXJtYWwgSVAgaXRz ZWxmLgorCSAqLworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBhcm1h ZGFfb3ZlcmhlYXRfaXNyLCAwLAorCQkJICAgICAgIE5VTEwsIHByaXYpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d2FpdF9lbmRfb3Zlcmhl YXRfd29yaywKKwkJCSAgYXJtYWRhX3dhaXRfZW5kX292ZXJoZWF0KTsKKwogCXJldHVybiAwOwog fQogCkBAIC01OTcsNiArODc5LDQ3IEBAIHN0YXRpYyB2b2lkIGFybWFkYV9zZXRfc2FuZV9uYW1l KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJfSB3aGlsZSAoaW5zYW5lX2NoYXIpOwog fQogCisvKgorICogVGhlIElQIGNhbiBtYW5hZ2UgdG8gdHJpZ2dlciBpbnRlcnJ1cHRzIG9uIG92 ZXJoZWF0IHNpdHVhdGlvbiBmcm9tIGFsbCB0aGUKKyAqIHNlbnNvcnMuIEhvd2V2ZXIsIHRoZSBp bnRlcnJ1cHQgc291cmNlIGNoYW5nZXMgYWxvbmcgd2l0aCB0aGUgbGFzdCBzZWxlY3RlZAorICog c291cmNlIChpZS4gdGhlIGxhc3QgcmVhZCBzZW5zb3IpLCB3aGljaCBpcyBhbiBpbmNvbnNpc3Rl bnQgYmVoYXZpb3IuIEF2b2lkCisgKiBwb3NzaWJsZSBnbGl0Y2hlcyBieSBhbHdheXMgc2VsZWN0 aW5nIGJhY2sgb25seSBvbmUgY2hhbm5lbCAoYXJiaXRyYXJpbHk6IHRoZQorICogZmlyc3QgaW4g dGhlIERUIHdoaWNoIGhhcyBhIGNyaXRpY2FsIHRyaXAgcG9pbnQpLiBXZSBhbHNvIGRpc2FibGUg c2Vuc29yCisgKiBzd2l0Y2ggZHVyaW5nIG92ZXJoZWF0IHNpdHVhdGlvbnMuCisgKi8KK3N0YXRp YyBpbnQgYXJtYWRhX2NvbmZpZ3VyZV9vdmVyaGVhdF9pbnQoc3RydWN0IGFybWFkYV90aGVybWFs X3ByaXYgKnByaXYsCisJCQkJCSBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHopCit7CisJ LyogUmV0cmlldmUgdGhlIGNyaXRpY2FsIHRyaXAgcG9pbnQgdG8gZW5hYmxlIHRoZSBvdmVyaGVh dCBpbnRlcnJ1cHQgKi8KKwljb25zdCBzdHJ1Y3QgdGhlcm1hbF90cmlwICp0cmlwcyA9IG9mX3Ro ZXJtYWxfZ2V0X3RyaXBfcG9pbnRzKHR6KTsKKwlzdHJ1Y3QgYXJtYWRhX3RoZXJtYWxfc2Vuc29y ICpzZW5zb3IgPSB0ei0+ZGV2ZGF0YTsKKwlpbnQgcmV0OworCWludCBpOworCisJaWYgKCF0cmlw cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgb2ZfdGhlcm1hbF9nZXRf bnRyaXBzKHR6KTsgaSsrKQorCQlpZiAodHJpcHNbaV0udHlwZSA9PSBUSEVSTUFMX1RSSVBfQ1JJ VElDQUwpCisJCQlicmVhazsKKworCWlmIChpID09IG9mX3RoZXJtYWxfZ2V0X250cmlwcyh0eikp CisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gYXJtYWRhX3NlbGVjdF9jaGFubmVsKHByaXYs IHNlbnNvci0+aWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlhcm1hZGFfc2V0X292 ZXJoZWF0X3RocmVzaG9sZHMocHJpdiwKKwkJCQkgICAgICAgdHJpcHNbaV0udGVtcGVyYXR1cmUs CisJCQkJICAgICAgIHRyaXBzW2ldLmh5c3RlcmVzaXMpOworCWFybWFkYV9lbmFibGVfb3Zlcmhl YXRfaW50ZXJydXB0KHByaXYpOworCXByaXYtPm92ZXJoZWF0X3NlbnNvciA9IHR6OworCXByaXYt PmludGVycnVwdF9zb3VyY2UgPSBzZW5zb3ItPmlkOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRp YyBpbnQgYXJtYWRhX3RoZXJtYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK IHsKIAlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHo7CkBAIC02OTQsOCArMTAxNywyMCBA QCBzdGF0aWMgaW50IGFybWFkYV90aGVybWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCiAJCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIHNlbnNvcik7CiAJCQljb250aW51ZTsK IAkJfQorCisJCS8qCisJCSAqIFRoZSBmaXJzdCBjaGFubmVsIHRoYXQgaGFzIGEgY3JpdGljYWwg dHJpcCBwb2ludCByZWdpc3RlcmVkCisJCSAqIGluIHRoZSBEVCB3aWxsIHNlcnZlIGFzIGludGVy cnVwdCBzb3VyY2UuIE90aGVycyBwb3NzaWJsZQorCQkgKiBjcml0aWNhbCB0cmlwIHBvaW50cyB3 aWxsIHNpbXBseSBiZSBpZ25vcmVkIGJ5IHRoZSBkcml2ZXIuCisJCSAqLworCQlpZiAoIXByaXYt Pm92ZXJoZWF0X3NlbnNvcikKKwkJCWFybWFkYV9jb25maWd1cmVfb3ZlcmhlYXRfaW50KHByaXYs IHR6KTsKIAl9CiAKKwkvKiBKdXN0IGNvbXBsYWluIGlmIG5vIG92ZXJoZWF0IGludGVycnVwdCB3 YXMgc2V0IHVwICovCisJaWYgKCFwcml2LT5vdmVyaGVhdF9zZW5zb3IpCisJCWRldl93YXJuKCZw ZGV2LT5kZXYsICJPdmVyaGVhdCBpbnRlcnJ1cHQgZmVhdHVyZSBkaXNhYmxlZFxuIik7CisKIAlk cnZkYXRhLT50eXBlID0gU1lTQ09OOwogCWRydmRhdGEtPmRhdGEucHJpdiA9IHByaXY7CiAJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2ZGF0YSk7Ci0tIAoyLjE0LjEKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==