From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hidetoshi Seto Date: Thu, 05 Aug 2004 11:05:40 +0000 Subject: [PATCH&RFC 2/2] OS_MCA Recovery from poisoned memory read Message-Id: <41121484.40804@jp.fujitsu.com> MIME-Version: 1 Content-Type: multipart/mixed; boundary="------------040704060600030208070703" List-Id: To: linux-ia64@vger.kernel.org This is a multi-part message in MIME format. --------------040704060600030208070703 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit This is the body of OS_MCA_handler. - init mca_external_handler_init init_record_index_pools kmalloc - exit mca_external_handler_exit kfree - handler mca_try_to_recover mca_make_slidx : pick up pointers in SAL log record mca_make_peidx : pick up pointers in Processor section is_mca_global : treat only local MCA recover_from_processor_error : treat only external bus error recover_from_platform_error : treat only read error recover_from_read_error : set new restarting address - handler_bh mca_handler_bhhook mca_handler_bh mca_page_isolate force_sig(SIGKILL, current) The MCA offending process will restart from handler_bh, and will suicide after isolating the poisoned page. Thanks, H.Seto Signed-off-by: Hidetoshi Seto --------------040704060600030208070703 Content-Type: text/plain; name="patch-268rc3-mcadrv2" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="patch-268rc3-mcadrv2" ZGlmZiAtTnVyIGxpbnV4LTIuNi44LXJjMy9hcmNoL2lhNjQvS2NvbmZpZyBsaW51eC0yLjYu OC1yYzMtbWNhZHJ2LXYyL2FyY2gvaWE2NC9LY29uZmlnCi0tLSBsaW51eC0yLjYuOC1yYzMv YXJjaC9pYTY0L0tjb25maWcJMjAwNC0wOC0wNCAwNjoyODo0NC4wMDAwMDAwMDAgKzA5MDAK KysrIGxpbnV4LTIuNi44LXJjMy1tY2FkcnYtdjIvYXJjaC9pYTY0L0tjb25maWcJMjAwNC0w OC0wNCAxODowODozOS4wMDAwMDAwMDAgKzA5MDAKQEAgLTI3MCw2ICsyNzAsOSBAQAogCWRl cGVuZHMgb24gSUEzMl9TVVBQT1JUCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBJQTY0X01DQV9S RUNPVkVSWQorCXRyaXN0YXRlICJNQ0EgcmVjb3ZlcnkgZnJvbSBlcnJvcnMgb3RoZXIgdGhh biBUTEIuIgorCiBjb25maWcgUEVSRk1PTgogCWJvb2wgIlBlcmZvcm1hbmNlIG1vbml0b3Ig c3VwcG9ydCIKIAloZWxwCmRpZmYgLU51ciBsaW51eC0yLjYuOC1yYzMvYXJjaC9pYTY0L2tl cm5lbC9NYWtlZmlsZSBsaW51eC0yLjYuOC1yYzMtbWNhZHJ2LXYyL2FyY2gvaWE2NC9rZXJu ZWwvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi44LXJjMy9hcmNoL2lhNjQva2VybmVsL01ha2Vm aWxlCTIwMDQtMDgtMDQgMDY6Mjg6NTEuMDAwMDAwMDAwICswOTAwCisrKyBsaW51eC0yLjYu OC1yYzMtbWNhZHJ2LXYyL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUJMjAwNC0wOC0wNCAx ODowODozOS4wMDAwMDAwMDAgKzA5MDAKQEAgLTE3LDYgKzE3LDggQEAKIG9iai0kKENPTkZJ R19TTVApCQkrPSBzbXAubyBzbXBib290Lm8KIG9iai0kKENPTkZJR19QRVJGTU9OKQkJKz0g cGVyZm1vbl9kZWZhdWx0X3NtcGwubwogb2JqLSQoQ09ORklHX0lBNjRfQ1lDTE9ORSkJKz0g Y3ljbG9uZS5vCitvYmotJChDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlkpCSs9IG1jYV9yZWNv dmVyeS5vCittY2FfcmVjb3ZlcnkteQkJCSs9IG1jYV9kcnYubyBtY2FfZHJ2X2FzbS5vCiAK ICMgVGhlIGdhdGUgRFNPIGltYWdlIGlzIGJ1aWx0IHVzaW5nIGEgc3BlY2lhbCBsaW5rZXIg c2NyaXB0LgogdGFyZ2V0cyArPSBnYXRlLnNvIGdhdGUtc3ltcy5vCmRpZmYgLU51ciBsaW51 eC0yLjYuOC1yYzMvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMgbGludXgtMi42LjgtcmMz LW1jYWRydi12Mi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwotLS0gbGludXgtMi42Ljgt cmMzL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCTE5NzAtMDEtMDEgMDk6MDA6MDAuMDAw MDAwMDAwICswOTAwCisrKyBsaW51eC0yLjYuOC1yYzMtbWNhZHJ2LXYyL2FyY2gvaWE2NC9r ZXJuZWwvbWNhX2Rydi5jCTIwMDQtMDgtMDQgMTk6MTc6MDkuNjc2NzczNjk2ICswOTAwCkBA IC0wLDAgKzEsNjQ3IEBACisvKgorICogRmlsZToJbWNhX2Rydi5jCisgKiBQdXJwb3NlOglH ZW5lcmljIE1DQSBoYW5kbGluZyBsYXllcgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmln Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5o PgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1l bS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5o PgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNp bmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVk ZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxh c20vc2FsLmg+CisjaW5jbHVkZSA8YXNtL21jYS5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5o PgorI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKworI2luY2x1ZGUgIm1jYV9kcnYuaCIKKwor LyogbWF4IHNpemUgb2YgU0FMIGVycm9yIHJlY29yZCAoZGVmYXVsdCkgKi8KK3N0YXRpYyBp bnQgc2FsX3JlY19tYXggPSAxMDAwMDsKKworLyogZnJvbSBtY2EuYyAqLworc3RhdGljIGlh NjRfbWNhX3NhbF90b19vc19zdGF0ZV90ICpzYWxfdG9fb3NfaGFuZG9mZl9zdGF0ZTsKK3N0 YXRpYyBpYTY0X21jYV9vc190b19zYWxfc3RhdGVfdCAqb3NfdG9fc2FsX2hhbmRvZmZfc3Rh dGU7CisKKy8qIGZyb20gbWNhX2Rydl9hc20uUyAqLworZXh0ZXJuIHZvaWQgKm1jYV9oYW5k bGVyX2JoaG9vayh2b2lkKTsKKwordHlwZWRlZiBlbnVtIHsKKwlNQ0FfSVNfTE9DQUwgID0g MCwKKwlNQ0FfSVNfR0xPQkFMID0gMQorfSBtY2FfdHlwZV90OworCisjZGVmaW5lIE1BWF9Q QUdFX0lTT0xBVEUgMzIKKworc3RhdGljIHN0cnVjdCBwYWdlICpwYWdlX2lzb2xhdGVbTUFY X1BBR0VfSVNPTEFURV07CitzdGF0aWMgaW50IG51bV9wYWdlX2lzb2xhdGUgPSAwOworCit0 eXBlZGVmIGVudW0geworCUZBSUxfVE9fSVNPTEFURSA9IDAsCisJSVNPTEFURV9PSwk9IDEK K30gaXNvbGF0ZV9zdGF0dXNfdDsKKworLyoKKyAqICBUaGlzIHBvb2wga2VlcHMgcG9pbnRl cnMgdG8gdGhlIHNlY3Rpb24gcGFydCBvZiBTQUwgZXJyb3IgcmVjb3JkCisgKi8KK3N0YXRp YyBzdHJ1Y3QgeworCXNsaWR4X2xpc3RfdCAqYnVmZmVyOyAvKiBzZWN0aW9uIHBvaW50ZXIg bGlzdCBwb29sICovCisJaW50CSAgICAgY3VyX2lkeDsgLyogQ3VycmVudCBpbmRleCBvZiBz ZWN0aW9uIHBvaW50ZXIgbGlzdCBwb29sICovCisJaW50CSAgICAgbWF4X2lkeDsgLyogTWF4 aW11bSBpbmRleCBvZiBzZWN0aW9uIHBvaW50ZXIgbGlzdCBwb29sICovCit9IHNsaWR4X3Bv b2w7CisKKy8qCisgKiBtY2FfcGFnZV9pc29sYXRlCisgKgorICoJaXNvbGF0ZSBhIHBvaXNv bmVkIHBhZ2UJaW4gb3JkZXIgbm90IHRvIHVzZSBpdCBsYXRlcgorICogCisgKiAgSW5wdXQJ OiBwYWRkciAocG9pc29uZWQgbWVtb3J5IGxvY2F0aW9uKQorICogIE91dHB1dAk6IGlzb2xh dGVfc3RhdHVzIChpc29sYXRpb24gd2FzIHN1Y2NlZWRlZCBvciBmYWlsZWQuKQorICovCisK K3N0YXRpYyBpc29sYXRlX3N0YXR1c190CittY2FfcGFnZV9pc29sYXRlKHVuc2lnbmVkIGxv bmcgcGFkZHIpCit7CisJaW50IGk7CisJc3RydWN0IHBhZ2UgKnA7CisKKwkvKiB3aGV0aGVy IHBoeXNpY2FsIGFkZHJlc3MgaXMgdmFsaWQgb3Igbm90ICovCisJaWYgKCAhaWE2NF9waHlz X2FkZHJfdmFsaWQocGFkZHIpICkgCisJCXJldHVybiBGQUlMX1RPX0lTT0xBVEU7CisKKwkv KiBjb252ZXJ0IHBoeXNpY2FsIGFkZHJlc3MgdG8gcGh5c2ljYWwgcGFnZSBudW1iZXIgKi8K KwlwID0gcGZuX3RvX3BhZ2UocGFkZHI+PlBBR0VfU0hJRlQpOworCisJLyogY2hlY2sgd2hl dGhlciBhIHBhZ2UgbnVtYmVyIGhhdmUgYmVlbiBhbHJlYWR5IHJlZ2lzdGVyZWQgb3Igbm90 ICovCisJZm9yKCBpID0gMDsgaSA8IG51bV9wYWdlX2lzb2xhdGU7IGkrKyApCisJCWlmKCBw YWdlX2lzb2xhdGVbaV0gPT0gcCApCisJCQlyZXR1cm4gSVNPTEFURV9PSzsgLyogYWxyZWFk eSBsaXN0ZWQgKi8KKyAgCisJLyogbGltaXRhdGlvbiBjaGVjayAqLworCWlmKCBudW1fcGFn ZV9pc29sYXRlID09IE1BWF9QQUdFX0lTT0xBVEUgKSAKKwkJcmV0dXJuIEZBSUxfVE9fSVNP TEFURTsKKworCS8qIGtpY2sgcGFnZXMgaGF2aW5nIGF0dHJpYnV0ZSAnU0xBQicgb3IgJ1Jl c2VydmVkJyAqLworCWlmKCBQYWdlU2xhYihwKSB8fCBQYWdlUmVzZXJ2ZWQocCkgKSAKKwkJ cmV0dXJuIEZBSUxfVE9fSVNPTEFURTsKKworCS8qIGFkZCBhdHRyaWJ1dGUgJ1Jlc2VydmVk JyBhbmQgcmVnaXN0ZXIgdGhlIHBhZ2UgKi8KKwlTZXRQYWdlUmVzZXJ2ZWQocCk7CisJcGFn ZV9pc29sYXRlW251bV9wYWdlX2lzb2xhdGUrK10gPSBwOworCisJcmV0dXJuIElTT0xBVEVf T0s7Cit9CisKKy8qCisgKiBtY2FfaGFubGRlcl9iaAorICoKKyAqICBLaWxsIHRoZSBwcm9j ZXNzIHdoaWNoIG9jY3VycmVkIG1lbW9yeSByZWFkIGVycm9yCisgKiAgYW5kIGlzb2xhdGUg YSBwb2lzb25lZCBhZGRyZXNzLiAKKyAqCisgKiAgSW5wdXQJOiBwYWRkciAocG9pc29uZWQg YWRkcmVzcyByZWNlaXZlZCBmcm9tIE1DQSBIYW5kbGVyKQorICovCisKK3ZvaWQKK21jYV9o YW5kbGVyX2JoKHVuc2lnbmVkIGxvbmcgcGFkZHIpCit7CisJcHJpbnRrKEtFUk5fREVCVUcg Ik9TX01DQTogcHJvY2VzcyBbcGlkOiAlZF0oJXMpIGVuY291bnRlcnMgTUNBLlxuIiwKKwkJ Y3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tKTsKKworCWlmIChtY2FfcGFnZV9pc29sYXRl KHBhZGRyKSA9PSBJU09MQVRFX09LKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJQYWdlIGlz b2xhdGlvbjogKCAlbHggKSBzdWNjZXNzLlxuIiwgcGFkZHIpOworCX0gZWxzZSB7CisJCXBy aW50ayhLRVJOX0RFQlVHICJQYWdlIGlzb2xhdGlvbjogKCAlbHggKSBmYWlsdXJlLlxuIiwg cGFkZHIpOworCX0KKworCS8qIFRoaXMgcHJvY2VzcyBpcyBhYm91dCB0byBiZSBraWxsZWQg aXRzZWxmICovCisJZm9yY2Vfc2lnKFNJR0tJTEwsIGN1cnJlbnQpOworCXNjaGVkdWxlKCk7 Cit9CisKKy8qCisgKiBtY2FfbWFrZV9wZWlkeAorICoKKyAqICBNYWtlIGluZGV4IG9mIHBy b2Nlc3NvciBlcnJvciBzZWN0aW9uCisgKgorICogIElucHV0cyAgICAgIDogc2xwaSAgKHBv aW50ZXIgdG8gcmVjb3JkIG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uKQorICogIEluL091 dHB1dHMJOiBwZWlkeCAocG9pbnRlciB0byBpbmRleCBvZiBwcm9jZXNzb3IgZXJyb3Igc2Vj dGlvbikKKyAqICBPdXRwdXRzICAgICA6IE5vbmUKKyAqLworCitzdGF0aWMgdm9pZCAKK21j YV9tYWtlX3BlaWR4KHNhbF9sb2dfcHJvY2Vzc29yX2luZm9fdCAqc2xwaSwgcGVpZHhfdGFi bGVfdCAqcGVpZHgpCit7CisJLyogCisJICogY2FsY3VsYXRlIHRoZSBzdGFydCBhZGRyZXNz IG9mCisJICogICAic3RydWN0IGNwdWlkX2luZm8iIGFuZCAic2FsX3Byb2Nlc3Nvcl9zdGF0 aWNfaW5mb190Ii4KKwkgKi8KKwl1NjQgdG90YWxfY2hlY2tfbnVtID0gc2xwaS0+dmFsaWQu bnVtX2NhY2hlX2NoZWNrCisJCQkJKyBzbHBpLT52YWxpZC5udW1fdGxiX2NoZWNrCisJCQkJ KyBzbHBpLT52YWxpZC5udW1fYnVzX2NoZWNrCisJCQkJKyBzbHBpLT52YWxpZC5udW1fcmVn X2ZpbGVfY2hlY2sKKwkJCQkrIHNscGktPnZhbGlkLm51bV9tc19jaGVjazsKKwl1NjQgaGVh ZF9zaXplID0Jc2l6ZW9mKHNhbF9sb2dfbW9kX2Vycm9yX2luZm9fdCkgKiB0b3RhbF9jaGVj a19udW0KKwkJCSsgc2l6ZW9mKHNhbF9sb2dfcHJvY2Vzc29yX2luZm9fdCk7CisJdTY0IG1p ZF9zaXplICA9IHNscGktPnZhbGlkLmNwdWlkX2luZm8gKiBzaXplb2Yoc3RydWN0IHNhbF9j cHVpZF9pbmZvKTsKKworCXBlaWR4X2hlYWQocGVpZHgpICAgPSBzbHBpOworCXBlaWR4X21p ZChwZWlkeCkgICAgPSAoc3RydWN0IHNhbF9jcHVpZF9pbmZvICopCisJCShzbHBpLT52YWxp ZC5jcHVpZF9pbmZvID8gKChjaGFyKilzbHBpICsgaGVhZF9zaXplKSA6IE5VTEwpOworCXBl aWR4X2JvdHRvbShwZWlkeCkgPSAoc2FsX3Byb2Nlc3Nvcl9zdGF0aWNfaW5mb190ICopCisJ CShzbHBpLT52YWxpZC5wc2lfc3RhdGljX3N0cnVjdCA/CisJCQkoKGNoYXIqKXNscGkgKyBo ZWFkX3NpemUgKyBtaWRfc2l6ZSkgOiBOVUxMKTsKK30KKworLyoKKyAqIG1jYV9tYWtlX3Ns aWR4CisgKgorICogIE1ha2UgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZCAKKyAqCisgKiAg SW5wdXRzCTogIGJ1ZmZlciAocG9pbnRlciB0byBTQUwgZXJyb3IgcmVjb3JkKQorICogIElu L091dHB1dHMJOiAgc2xpZHggIChwb2ludGVyIHRvIGluZGV4IG9mIFNBTCBlcnJvciByZWNv cmQpCisgKiAgT3V0cHV0cwk6ICBwbGF0Zm9ybSBlcnJvciBzdGF0dXMKKyAqLworI2RlZmlu ZSBMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNlY3QsIHB0cikgXAorICAgICAgICB7IHNsaWR4 X2xpc3RfdCAqaGwgPSAmc2xpZHhfcG9vbC5idWZmZXJbc2xpZHhfcG9vbC5jdXJfaWR4XTsg XAorICAgICAgICAgIGhsLT5oZHIgPSBwdHI7IFwKKyAgICAgICAgICBsaXN0X2FkZCgmaGwt Pmxpc3QsICYoc2VjdCkpOyBcCisgICAgICAgICAgc2xpZHhfcG9vbC5jdXJfaWR4ID0gKHNs aWR4X3Bvb2wuY3VyX2lkeCArIDEpJXNsaWR4X3Bvb2wubWF4X2lkeDsgfQorCitzdGF0aWMg aW50IAorbWNhX21ha2Vfc2xpZHgodm9pZCAqYnVmZmVyLCBzbGlkeF90YWJsZV90ICpzbGlk eCkKK3sKKwlpbnQgcGxhdGZvcm1fZXJyID0gMDsKKwlpbnQgcmVjb3JkX2xlbiA9ICgoc2Fs X2xvZ19yZWNvcmRfaGVhZGVyX3QqKWJ1ZmZlciktPmxlbjsKKwl1MzIgZXJjZF9wb3M7CisJ aW50IHNlY3RzOworCXNhbF9sb2dfc2VjdGlvbl9oZHJfdCAqc3A7CisKKwkvKgorCSAqIElu aXRpYWxpemUgaW5kZXggcmVmZXJyaW5nIGN1cnJlbnQgcmVjb3JkCisJICovCisJSU5JVF9M SVNUX0hFQUQoJihzbGlkeC0+cHJvY19lcnIpKTsKKwlJTklUX0xJU1RfSEVBRCgmKHNsaWR4 LT5tZW1fZGV2X2VycikpOworCUlOSVRfTElTVF9IRUFEKCYoc2xpZHgtPnNlbF9kZXZfZXJy KSk7CisJSU5JVF9MSVNUX0hFQUQoJihzbGlkeC0+cGNpX2J1c19lcnIpKTsKKwlJTklUX0xJ U1RfSEVBRCgmKHNsaWR4LT5zbWJpb3NfZGV2X2VycikpOworCUlOSVRfTElTVF9IRUFEKCYo c2xpZHgtPnBjaV9jb21wX2VycikpOworCUlOSVRfTElTVF9IRUFEKCYoc2xpZHgtPnBsYXRf c3BlY2lmaWNfZXJyKSk7CisJSU5JVF9MSVNUX0hFQUQoJihzbGlkeC0+aG9zdF9jdGxyX2Vy cikpOworCUlOSVRfTElTVF9IRUFEKCYoc2xpZHgtPnBsYXRfYnVzX2VycikpOworCUlOSVRf TElTVF9IRUFEKCYoc2xpZHgtPnVuc3VwcG9ydGVkKSk7CisKKwkvKgorCSAqIEV4dHJhY3Qg YSBSZWNvcmQgSGVhZGVyCisJICovCisJc2xpZHgtPmhlYWRlciA9IGJ1ZmZlcjsKKworCS8q CisJICogRXh0cmFjdCBlYWNoIHNlY3Rpb24gcmVjb3JkcworCSAqIChhcnJhbmdlZCBmcm9t ICJpbnQgaWE2NF9sb2dfcGxhdGZvcm1faW5mb19wcmludCgpIikKKwkgKi8KKwlmb3IgKGVy Y2RfcG9zID0gc2l6ZW9mKHNhbF9sb2dfcmVjb3JkX2hlYWRlcl90KSwgc2VjdHMgPSAwOwor CQllcmNkX3BvcyA8IHJlY29yZF9sZW47IGVyY2RfcG9zICs9IHNwLT5sZW4sIHNlY3RzKysp IHsKKwkJc3AgPSAoc2FsX2xvZ19zZWN0aW9uX2hkcl90ICopKChjaGFyKilidWZmZXIgKyBl cmNkX3Bvcyk7CisJCWlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9QUk9DX0RFVl9F UlJfU0VDVF9HVUlEKSkgeworCQkJTE9HX0lOREVYX0FERF9TRUNUX1BUUihzbGlkeC0+cHJv Y19lcnIsIHNwKTsKKwkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9Q TEFUX01FTV9ERVZfRVJSX1NFQ1RfR1VJRCkpIHsKKwkJCXBsYXRmb3JtX2VyciA9IDE7CisJ CQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5tZW1fZGV2X2Vyciwgc3ApOworCQl9 IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwgU0FMX1BMQVRfU0VMX0RFVl9FUlJf U0VDVF9HVUlEKSkgeworCQkJcGxhdGZvcm1fZXJyID0gMTsKKwkJCUxPR19JTkRFWF9BRERf U0VDVF9QVFIoc2xpZHgtPnNlbF9kZXZfZXJyLCBzcCk7CisJCX0gZWxzZSBpZiAoIWVmaV9n dWlkY21wKHNwLT5ndWlkLCBTQUxfUExBVF9QQ0lfQlVTX0VSUl9TRUNUX0dVSUQpKSB7CisJ CQlwbGF0Zm9ybV9lcnIgPSAxOworCQkJTE9HX0lOREVYX0FERF9TRUNUX1BUUihzbGlkeC0+ cGNpX2J1c19lcnIsIHNwKTsKKwkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQs IFNBTF9QTEFUX1NNQklPU19ERVZfRVJSX1NFQ1RfR1VJRCkpIHsKKwkJCXBsYXRmb3JtX2Vy ciA9IDE7CisJCQlMT0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5zbWJpb3NfZGV2X2Vy ciwgc3ApOworCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChzcC0+Z3VpZCwgU0FMX1BMQVRf UENJX0NPTVBfRVJSX1NFQ1RfR1VJRCkpIHsKKwkJCXBsYXRmb3JtX2VyciA9IDE7CisJCQlM T0dfSU5ERVhfQUREX1NFQ1RfUFRSKHNsaWR4LT5wY2lfY29tcF9lcnIsIHNwKTsKKwkJfSBl bHNlIGlmICghZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9QTEFUX1NQRUNJRklDX0VSUl9T RUNUX0dVSUQpKSB7CisJCQlwbGF0Zm9ybV9lcnIgPSAxOworCQkJTE9HX0lOREVYX0FERF9T RUNUX1BUUihzbGlkeC0+cGxhdF9zcGVjaWZpY19lcnIsIHNwKTsKKwkJfSBlbHNlIGlmICgh ZWZpX2d1aWRjbXAoc3AtPmd1aWQsIFNBTF9QTEFUX0hPU1RfQ1RMUl9FUlJfU0VDVF9HVUlE KSkgeworCQkJcGxhdGZvcm1fZXJyID0gMTsKKwkJCUxPR19JTkRFWF9BRERfU0VDVF9QVFIo c2xpZHgtPmhvc3RfY3Rscl9lcnIsIHNwKTsKKwkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAo c3AtPmd1aWQsIFNBTF9QTEFUX0JVU19FUlJfU0VDVF9HVUlEKSkgeworCQkJcGxhdGZvcm1f ZXJyID0gMTsKKwkJCUxPR19JTkRFWF9BRERfU0VDVF9QVFIoc2xpZHgtPnBsYXRfYnVzX2Vy ciwgc3ApOworCQl9IGVsc2UgeworCQkJTE9HX0lOREVYX0FERF9TRUNUX1BUUihzbGlkeC0+ dW5zdXBwb3J0ZWQsIHNwKTsKKwkJfQorCX0KKwlzbGlkeC0+bl9zZWN0aW9ucyA9IHNlY3Rz OworCisJcmV0dXJuIHBsYXRmb3JtX2VycjsKK30KKworLyoKKyAqIGluaXRfcmVjb3JkX2lu ZGV4X3Bvb2xzCisgKgorICogIEluaXRpYWxpemUgcG9vbCBvZiBzZWN0aW9uIHBvaW50ZXIg bGlzdHMgZm9yIFNBTCByZWNvcmQgaW5kZXgKKyAqCisgKiAgSW5wdXRzIDogTm9uZQorICog IE91dHB1dHM6IHN0YXR1cyB3aGV0aGVyIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSBvciBu b3QuCisgKi8KK3N0YXRpYyBpbnQgCitpbml0X3JlY29yZF9pbmRleF9wb29scyh2b2lkKQor eworCWludCBpOworCWludCByZWNfbWF4X3NpemU7ICAvKiBNYXhpbXVtIHNpemUgb2YgU0FM IGVycm9yIHJlY29yZHMgKi8KKwlpbnQgc2VjdF9taW5fc2l6ZTsgLyogTWluaW11bSBzaXpl IG9mIFNBTCBlcnJvciBzZWN0aW9ucyAqLworCS8qIG1pbmltdW0gc2l6ZSB0YWJsZSBvZiBl YWNoIHNlY3Rpb24gKi8KKwlzdGF0aWMgaW50IHNhbF9sb2dfc2VjdF9taW5fc2l6ZXNbXSA9 IHsgCisJCXNpemVvZihzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QpICsgc2l6ZW9mKHNhbF9w cm9jZXNzb3Jfc3RhdGljX2luZm9fdCksCisJCXNpemVvZihzYWxfbG9nX21lbV9kZXZfZXJy X2luZm9fdCksCisJCXNpemVvZihzYWxfbG9nX3NlbF9kZXZfZXJyX2luZm9fdCksCisJCXNp emVvZihzYWxfbG9nX3BjaV9idXNfZXJyX2luZm9fdCksCisJCXNpemVvZihzYWxfbG9nX3Nt Ymlvc19kZXZfZXJyX2luZm9fdCksCisJCXNpemVvZihzYWxfbG9nX3BjaV9jb21wX2Vycl9p bmZvX3QpLAorCQlzaXplb2Yoc2FsX2xvZ19wbGF0X3NwZWNpZmljX2Vycl9pbmZvX3QpLAor CQlzaXplb2Yoc2FsX2xvZ19ob3N0X2N0bHJfZXJyX2luZm9fdCksCisJCXNpemVvZihzYWxf bG9nX3BsYXRfYnVzX2Vycl9pbmZvX3QpLAorCX07CisKKwkvKgorCSAqIE1DQSBoYW5kbGVy IGNhbm5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5IG9uIGZsaWdodCwKKwkgKiBzbyB3ZSBwcmVh bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBhIFNBTCByZWNvcmQuCisJICoKKwkg KiBJbml0aWFsaXplIGEgaGFuZGxpbmcgc2V0IG9mIHNsaWR4X3Bvb2w6CisJICogICAxLiBQ aWNrIHVwIHRoZSBtYXggc2l6ZSBvZiBTQUwgZXJyb3IgcmVjb3JkcworCSAqICAgMi4gUGlj ayB1cCB0aGUgbWluIHNpemUgb2YgU0FMIGVycm9yIHNlY3Rpb25zCisJICogICAzLiBBbGxv Y2F0ZSB0aGUgcG9vbCBhcyBlbm91Z2ggdG8gMiBTQUwgcmVjb3JkcworCSAqICAgICAobm93 IHdlIGNhbiBlc3RpbWF0ZSB0aGUgbWF4aW51bSBvZiBzZWN0aW9uIGluIGEgcmVjb3JkLikK KwkgKi8KKworCS8qIC0gMSAtICovCisJcmVjX21heF9zaXplID0gc2FsX3JlY19tYXg7CisK KwkvKiAtIDIgLSAqLworCXNlY3RfbWluX3NpemUgPSBzYWxfbG9nX3NlY3RfbWluX3NpemVz WzBdOworCWZvciAoaSA9IDE7IGkgPCBzaXplb2Ygc2FsX2xvZ19zZWN0X21pbl9zaXplcy9z aXplb2Yoc2l6ZV90KTsgaSsrKQorCQlpZiAoc2VjdF9taW5fc2l6ZSA+IHNhbF9sb2dfc2Vj dF9taW5fc2l6ZXNbaV0pCisJCQlzZWN0X21pbl9zaXplID0gc2FsX2xvZ19zZWN0X21pbl9z aXplc1tpXTsKKworCS8qIC0gMyAtICovCisJc2xpZHhfcG9vbC5tYXhfaWR4ID0gKHJlY19t YXhfc2l6ZS9zZWN0X21pbl9zaXplKSAqIDIgKyAxOworCXNsaWR4X3Bvb2wuYnVmZmVyID0g KHNsaWR4X2xpc3RfdCAqKSBrbWFsbG9jKHNsaWR4X3Bvb2wubWF4X2lkeCAqIHNpemVvZihz bGlkeF9saXN0X3QpLCBHRlBfS0VSTkVMKTsKKworCXJldHVybiBzbGlkeF9wb29sLmJ1ZmZl ciA/IDAgOiAtRU5PTUVNOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICog UmVjb3ZlcnkgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8q CisgKiBpc19tY2FfZ2xvYmFsCisgKgorICoJQ2hlY2sgd2hldGhlciB0aGlzIE1DQSBpcyBn bG9iYWwgb3Igbm90LgorICoKKyAqICBJbnB1dHMJOiBwZWlkeCAocG9pbnRlciBvZiBpbmRl eCBvZiBwcm9jZXNzb3IgZXJyb3Igc2VjdGlvbikKKyAqCQk6IHBiY2kJKHBvaW50ZXIgdG8g cGFsX2J1c19jaGVja19pbmZvX3QpCisgKiAgT3V0cHV0cwk6IGlzX2dsb2JhbCAod2hldGhl ciBNQ0EgaXMgZ2xvYmFsIG9yIG5vdCkKKyAqLworCitzdGF0aWMgbWNhX3R5cGVfdAoraXNf bWNhX2dsb2JhbChwZWlkeF90YWJsZV90ICpwZWlkeCwgcGFsX2J1c19jaGVja19pbmZvX3Qg KnBiY2kpCit7CisJcGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QgKnBzcCA9IChwYWxfcHJv Y2Vzc29yX3N0YXRlX2luZm9fdCopcGVpZHhfcHNwKHBlaWR4KTsKKworCS8qIAorCSAqIFBB TCBjYW4gcmVxdWVzdCBhIHJlbmRlenZvdXMsIGlmIHRoZSBNQ0EgaGFzIGEgZ2xvYmFsIHNj b3BlLgorCSAqIElmICJyel9hbHdheXMiIGZsYWcgaXMgc2V0LCBTQUwgcmVxdWVzdHMgTUNB IHJlbmRlenZvdXMgCisJICogaW4gc3BpdGUgb2YgZ2xvYmFsIE1DQS4KKwkgKiBUaGVyZWZv cmUgaXQgaXMgbG9jYWwgTUNBIHdoZW4gcmVuZGV6dm91cyBoYXMgbm90IGJlZW4gcmVxdWVz dGVkLgorCSAqIEZhaWxlZCB0byByZW5kZXp2b3VzLCB0aGUgc3lzdGVtIG11c3QgYmUgZG93 bi4KKwkgKi8KKwlzd2l0Y2ggKHNhbF90b19vc19oYW5kb2ZmX3N0YXRlLT5pbXN0b19yZW5k ZXpfc3RhdGUpIHsKKwkJY2FzZSAtMTogLyogU0FMIHJlbmRlenZvdXMgdW5zdWNjZXNzZnVs ICovCisJCQlyZXR1cm4gTUNBX0lTX0dMT0JBTDsKKwkJY2FzZSAgMDogLyogU0FMIHJlbmRl enZvdXMgbm90IHJlcXVpcmVkICovCisJCQlyZXR1cm4gTUNBX0lTX0xPQ0FMOworCQljYXNl ICAxOiAvKiBTQUwgcmVuZGV6dm91cyBzdWNjZXNzZnVsIGludCAqLworCQljYXNlICAyOiAv KiBTQUwgcmVuZGV6dm91cyBzdWNjZXNzZnVsIGludCB3aXRoIGluaXQgKi8KKwkJZGVmYXVs dDoKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogSWYgT25lIG9yIG1vcmUgQ2FjaGUvVExC L1JlZ19GaWxlL1VhcmNoX0NoZWNrIGlzIGhlcmUsCisJICogaXQgd291bGQgYmUgYSBsb2Nh bCBNQ0EuIChpLmUuIHByb2Nlc3NvciBpbnRlcm5hbCBlcnJvcikKKwkgKi8KKwlpZiAocHNw LT50YyB8fCBwc3AtPmNjIHx8IHBzcC0+cmMgfHwgcHNwLT51YykKKwkJcmV0dXJuIE1DQV9J U19MT0NBTDsKKwkKKwkvKgorCSAqIEJ1c19DaGVjayBzdHJ1Y3R1cmUgd2l0aCBCdXNfQ2hl Y2suaWIgKGludGVybmFsIGJ1cyBlcnJvcikgZmxhZyBzZXQKKwkgKiB3b3VsZCBiZSBhIGds b2JhbCBNQ0EuIChlLmcuIGEgc3lzdGVtIGJ1cyBhZGRyZXNzIHBhcml0eSBlcnJvcikKKwkg Ki8KKwlpZiAoIXBiY2kgfHwgcGJjaS0+aWIpCisJCXJldHVybiBNQ0FfSVNfR0xPQkFMOwor CisJLyoKKwkgKiBCdXNfQ2hlY2sgc3RydWN0dXJlIHdpdGggQnVzX0NoZWNrLmViIChleHRl cm5hbCBidXMgZXJyb3IpIGZsYWcgc2V0CisJICogY291bGQgYmUgZWl0aGVyIGEgbG9jYWwg TUNBIG9yIGEgZ2xvYmFsIE1DQS4KKwkgKgorCSAqIFJlZmVycmluZyBCdXNfQ2hlY2suYnNp OgorCSAqICAgMDogVW5rbm93bi91bmNsYXNzaWZpZWQKKwkgKiAgIDE6IEJFUlIjCisJICog ICAyOiBCSU5JVCMKKwkgKiAgIDM6IEhhcmQgRmFpbAorCSAqIChGSVhNRTogQXJlIHRoZXNl IFNHSSBzcGVjaWZpYyBvciBnZW5lcmljIGJzaSB2YWx1ZXM/KQorCSAqLworCWlmIChwYmNp LT5lYikKKwkJc3dpdGNoIChwYmNpLT5ic2kpIHsKKwkJCWNhc2UgMDoKKwkJCQkvKiBlLmcu IGEgbG9hZCBmcm9tIHBvaXNvbmVkIG1lbW9yeSAqLworCQkJCXJldHVybiBNQ0FfSVNfTE9D QUw7CisJCQljYXNlIDE6CisJCQljYXNlIDI6CisJCQljYXNlIDM6CisJCQkJcmV0dXJuIE1D QV9JU19HTE9CQUw7CisJCX0KKworCXJldHVybiBNQ0FfSVNfR0xPQkFMOworfQorCisvKgor ICogcmVjb3Zlcl9mcm9tX3JlYWRfZXJyb3IKKyAqCisgKiAgSGVyZSB3ZSB0cnkgdG8gcmVj b3ZlciB0aGUgZXJyb3JzIHdoaWNoIHR5cGUgYXJlICJyZWFkInMuCisgKiAgKGZ1bGwgbGlu ZSByZWFkLCBwYXJ0aWFsIHJlYWQsIEkvTyBzcGFjZSByZWFkKQorICoKKyAqICBJbnB1dHMJ OiBzbGlkeCAocG9pbnRlciBvZiBpbmRleCBvZiBTQUwgZXJyb3IgcmVjb3JkKQorICoJCSAg cGVpZHggKHBvaW50ZXIgb2YgaW5kZXggb2YgcHJvY2Vzc29yIGVycm9yIHNlY3Rpb24pCisg KgkJICBwYmNpICAocG9pbnRlciBvZiBwYWxfYnVzX2NoZWNrX2luZm8pCisgKiAgT3V0cHV0 cwk6IG9zIHJlY292ZXJ5IHN0YXR1cworICovCisKK3N0YXRpYyBpbnQKK3JlY292ZXJfZnJv bV9yZWFkX2Vycm9yKHNsaWR4X3RhYmxlX3QgKnNsaWR4LCBwZWlkeF90YWJsZV90ICpwZWlk eCwgcGFsX2J1c19jaGVja19pbmZvX3QgKnBiY2kpCit7CisJc2FsX2xvZ19tb2RfZXJyb3Jf aW5mb190ICpzbWVpOworCXBhbF9taW5fc3RhdGVfYXJlYV90ICpwbXNhOworCXN0cnVjdCBp YTY0X3BzciAqcHNyMSwgKnBzcjI7CisJdHlwZWRlZiBzdHJ1Y3QgaWE2NF9mcHRyIHsKKwkJ dW5zaWduZWQgbG9uZyBmcDsKKwkJdW5zaWduZWQgbG9uZyBncDsKKwl9IGlhNjRfZnB0cl90 OworCWlhNjRfZnB0cl90ICptY2FfaGRscl9iaCA9IChpYTY0X2ZwdHJfdCopbWNhX2hhbmRs ZXJfYmhob29rOworCisJLyogSXMgdGFyZ2V0IGFkZHJlc3MgdmFsaWQ/ICovCisJaWYgKCFw YmNpLT50dikKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIGNwdSByZWFkIG9yIG1lbW9yeS1t YXBwZWQgaW8gcmVhZAorCSAqCisJICogICAgb2ZmZW5kaW5nIHByb2Nlc3MgIGFmZmVjdGVk IHByb2Nlc3MgIE9TIE1DQSBkbworCSAqICAgICBrZXJuZWwgbW9kZSAgICAgICAga2VybmVs IG1vZGUgICAgICAgZG93biBzeXN0ZW0KKwkgKiAgICAga2VybmVsIG1vZGUgICAgICAgIHVz ZXIgICBtb2RlICAgICAgIGtpbGwgdGhlIHByb2Nlc3MKKwkgKiAgICAgdXNlciAgIG1vZGUg ICAgICAgIGtlcm5lbCBtb2RlICAgICAgIGtpbGwgdGhlIHByb2Nlc3MKKwkgKiAgICAgdXNl ciAgIG1vZGUgICAgICAgIHVzZXIgICBtb2RlICAgICAgIGtpbGwgdGhlIHByb2Nlc3MKKwkg Ki8KKwlwc3IxID0oc3RydWN0IGlhNjRfcHNyICopJihwZWlkeF9taW5zdGF0ZV9hcmVhKHBl aWR4KS0+cG1zYV9pcHNyKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogIENoZWNrIHRoZSBw cml2aWxlZ2UgbGV2ZWwgb2YgaW50ZXJydXB0ZWQgY29udGV4dC4KKyAgICAgICAgICogICBJ ZiBpdCBpcyB1c2VyLW1vZGUsIHRoZW4gdGVybWluYXRlIGFmZmVjdGVkIHByb2Nlc3MuCisg ICAgICAgICAqLworCWlmICgocHNyMS0+Y3BsICE9IDApCisgICAgICAgICAgICAgICAgLyoK KyAgICAgICAgICAgICAgICAgKiBDaGVjayB0aGUgcHJpdmlsZWdlIGxldmVsIHdoZW4gcmVj ZWl2ZWQgcG9pc29uZWQgZGF0YS4KKyAgICAgICAgICAgICAgICAgKiAgSWYgaXQgaXMgdXNl ci1tb2RlLCB0aGVuIHRlcm1pbmF0ZSBvZmZlbmRpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgICAgICB8fCAocGJjaS0+cHYgJiYgcGJjaS0+cGwgIT0g MCkpIHsKKyAgICAgICAgICAgICAgICBzbWVpID0gcGVpZHhfYnVzX2NoZWNrKHBlaWR4LCAw KTsKKyAgICAgICAgICAgICAgICBpZiAoc21laS0+dmFsaWQudGFyZ2V0X2lkZW50aWZpZXIp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAg ICAgKiAgc2V0dXAgZm9yIHJlc3VtZSB0byBib3R0b20gaGFsZiBvZiBNQ0EsCisgICAgICAg ICAgICAgICAgICAgICAgICAgKiAibWNhX2hhbmRsZXJfYmhob29rIgorICAgICAgICAgICAg ICAgICAgICAgICAgICovCisJCQlwbXNhID0gKHBhbF9taW5fc3RhdGVfYXJlYV90ICopKHNh bF90b19vc19oYW5kb2ZmX3N0YXRlLT5wYWxfbWluX3N0YXRlIHwgKDZ1bDw8NjEpKTsKKwkJ CS8qIHBhc3MgdG8gYmhob29rIGFzIDFzdCBhcmd1bWVudCAoZ3I4KSAqLworCQkJcG1zYS0+ cG1zYV9ncls4LTFdID0gc21laS0+dGFyZ2V0X2lkZW50aWZpZXI7CisJCQkvKiBzZXQgaW50 ZXJydXB0ZWQgcmV0dXJuIGFkZHJlc3MgKGJ1dCBubyB1c2UpICovCisJCQlwbXNhLT5wbXNh X2JyMCA9IHBtc2EtPnBtc2FfaWlwOworCQkJLyogY2hhbmdlIHJlc3VtZSBhZGRyZXNzIHRv IGJvdHRvbSBoYWxmICovCisJCQlwbXNhLT5wbXNhX2lpcCA9IG1jYV9oZGxyX2JoLT5mcDsK KwkJCXBtc2EtPnBtc2FfZ3JbMS0xXSA9IG1jYV9oZGxyX2JoLT5ncDsKKwkJCS8qIHNldCBj cGwgd2l0aCBrZXJuZWwgbW9kZSAqLworCQkJcHNyMiA9IChzdHJ1Y3QgaWE2NF9wc3IgKikm cG1zYS0+cG1zYV9pcHNyOworCQkJcHNyMi0+Y3BsID0gMDsKKworCQkJcmV0dXJuIDE7CisJ CX0KKworCX0gCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlY292ZXJfZnJvbV9wbGF0 Zm9ybV9lcnJvcgorICoKKyAqICBSZWNvdmVyIGZyb20gcGxhdGZvcm0gZXJyb3IuCisgKiAg Tm93LCB3ZSBkZWFsIHdpdGggcmVhZCBlcnJvcnMgb25seS4KKyAqCisgKiAgSW5wdXRzCTog c2xpZHggKHBvaW50ZXIgb2YgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZCkKKyAqCQk6IHBl aWR4IChwb2ludGVyIG9mIGluZGV4IG9mIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uKQorICoJ CTogcGJjaSAgKHBvaW50ZXIgb2YgcGFsIGJ1cyBjaGVjayBpbmZvKQorICogIE91dHB1dHMJ OiBzdGF0dXMgKHJlY292ZXJlZCBvciBub3QpCisgKi8KKworc3RhdGljIGludAorcmVjb3Zl cl9mcm9tX3BsYXRmb3JtX2Vycm9yKHNsaWR4X3RhYmxlX3QgKnNsaWR4LCBwZWlkeF90YWJs ZV90ICpwZWlkeCwgcGFsX2J1c19jaGVja19pbmZvX3QgKnBiY2kpCit7CisJaW50IHN0YXR1 cyA9IDA7CisJcGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QgKnBzcCA9IChwYWxfcHJvY2Vz c29yX3N0YXRlX2luZm9fdCopcGVpZHhfcHNwKHBlaWR4KTsKKworCWlmIChwc3AtPmJjICYm IHBiY2ktPmViICYmIHBiY2ktPmJzaSA9PSAwKSB7CisJCXN3aXRjaChwYmNpLT50eXBlKSB7 CisJCWNhc2UgMTogLyogcGFydGlhbCByZWFkICovCisJCWNhc2UgMzogLyogZnVsbCBsaW5l KGNwdSkgcmVhZCAqLworCQljYXNlIDk6IC8qIEkvTyBzcGFjZSByZWFkICovCisJCQlzdGF0 dXMgPSByZWNvdmVyX2Zyb21fcmVhZF9lcnJvcihzbGlkeCwgcGVpZHgsIHBiY2kpOworCQkJ YnJlYWs7CisJCWNhc2UgMDogLyogdW5rbm93biAqLworCQljYXNlIDI6IC8qIHBhcnRpYWwg d3JpdGUgKi8KKwkJY2FzZSA0OiAvKiBmdWxsIGxpbmUgd3JpdGUgKi8KKwkJY2FzZSA1OiAv KiBpbXBsaWNpdCBvciBleHBsaWNpdCB3cml0ZS1iYWNrIG9wZXJhdGlvbiAqLworCQljYXNl IDY6IC8qIHNub29wIHByb2JlICovCisJCWNhc2UgNzogLyogaW5jb21pbmcgb3Igb3V0Z29p bmcgcHRjLmcgKi8KKwkJY2FzZSA4OiAvKiB3cml0ZSBjb2FsZXNjaW5nIHRyYW5zYWN0aW9u cyAqLworCQljYXNlIDEwOiAvKiBJL08gc3BhY2Ugd3JpdGUgKi8KKwkJY2FzZSAxMTogLyog aW50ZXItcHJvY2Vzc29yIGludGVycnVwdCBtZXNzYWdlKElQSSkgKi8KKwkJY2FzZSAxMjog LyogaW50ZXJydXB0IGFja25vd2xlZGdlIG9yIGV4dGVybmFsIHRhc2sgcHJpb3JpdHkgY3lj bGUgKi8KKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1 czsKK30KKworLyoKKyAqIHJlY292ZXJfZnJvbV9wcm9jZXNzb3JfZXJyb3IKKyAqCisgKiAg TGF0ZXIgd2UgdHJ5IHRvIHJlY292ZXIgd2hlbiBiZWxvdyBhbGwgY29uZGl0aW9ucyBhcmUg c2F0aXNmaWVkLgorICogICAxLiBPbmx5IG9uZSBwcm9jZXNzb3IgZXJyb3Igc2VjdGlvbiBp cyBleGlzdC4KKyAqICAgMi4gQlVTX0NIRUNLIGlzIGV4aXN0IGFuZCB0aGUgb3RoZXJzIGFy ZSBub3QgZXhpc3QuKEV4Y2VwdCBUTEJfQ0hFQ0spCisgKiAgIDMuIFRoZSBlbnRyeSBvZiBC VVNfQ0hFQ0tfSU5GTyBpcyAxLgorICogICA0LiAiRXh0ZXJuYWwgYnVzIGVycm9yIiBmbGFn IGlzIHNldCBhbmQgdGhlIG90aGVycyBhcmUgbm90IHNldC4KKyAqCisgKiAgSW5wdXRzCTog cGxhdGZvcm0gKHdoZXRoZXIgdGhlcmUgYXJlIHNvbWUgcGxhdGZvcm0gZXJyb3Igc2VjdGlv biBvciBub3QpCisgKiAJCTogc2xpZHggKHBvaW50ZXIgdG8gaW5kZXggb2YgU0FMIGVycm9y IHJlY29yZCkKKyAqCQk6IHBlaWR4IChwb2ludGVyIHRvIGluZGV4IG9mIHByb2Nlc3NvciBl cnJvciBzZWN0aW9uKQorICoJCTogcGJjaSAgKHBvaW50ZXIgdG8gcGFsIGJ1cyBjaGVjayBp bmZvKQorICogIE91dHB1dHMJOiBzdGF0dXMgKHJlY292ZXJlZCBvciBub3QpCisgKi8KKwor c3RhdGljIGludAorcmVjb3Zlcl9mcm9tX3Byb2Nlc3Nvcl9lcnJvcihpbnQgcGxhdGZvcm0s IHNsaWR4X3RhYmxlX3QgKnNsaWR4LCBwZWlkeF90YWJsZV90ICpwZWlkeCwgcGFsX2J1c19j aGVja19pbmZvX3QgKnBiY2kpCit7CisJcGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QgKnBz cCA9IChwYWxfcHJvY2Vzc29yX3N0YXRlX2luZm9fdCopcGVpZHhfcHNwKHBlaWR4KTsKKwor CS8qIAorCSAqIFdlIGNhbm5vdCByZWNvdmVyIGVycm9ycyB3aXRoIG90aGVyIHRoYW4gYnVz X2NoZWNrLgorCSAqLworCWlmIChwc3AtPmNjIHx8IHBzcC0+cmMgfHwgcHNwLT51YykgCisJ CXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBubyBidXMgZXJyb3IsIHJlY29y ZCBpcyB3ZWlyZCBidXQgd2UgbmVlZCBub3QgdG8gcmVjb3Zlci4KKwkgKi8KKwlpZiAocHNw LT5iYyA9PSAwIHx8IHBiY2kgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFNv cnJ5LCB3ZSBjYW5ub3QgaGFuZGxlIHNvIG1hbnkuCisJICovCisJaWYgKHBlaWR4X2J1c19j aGVja19udW0ocGVpZHgpID4gMSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBXZWxsLCBoZXJl IGlzIG9ubHkgb25lIGJ1cyBlcnJvci4KKwkgKi8KKwlpZiAocGJjaS0+aWIgfHwgcGJjaS0+ Y2MpCisJCXJldHVybiAwOworCWlmIChwYmNpLT5lYiAmJiBwYmNpLT5ic2kgPiAwKQorCQly ZXR1cm4gMDsKKwlpZiAocHNwLT5jaSA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICog VGhpcyBpcyBhIGxvY2FsIE1DQSBhbmQgZXN0aW1hdGVkIGFzIHJlY292ZXJibGUgZXh0ZXJu YWwgYnVzIGVycm9yLgorCSAqIChlLmcuIGEgbG9hZCBmcm9tIHBvaXNvbmVkIG1lbW9yeSkK KwkgKiBUaGlzIG1lYW5zICJ0aGVyZSBhcmUgc29tZSBwbGF0Zm9ybSBlcnJvcnMiLgorCSAq LworCWlmIChwbGF0Zm9ybSkgCisJCXJldHVybiByZWNvdmVyX2Zyb21fcGxhdGZvcm1fZXJy b3Ioc2xpZHgsIHBlaWR4LCBwYmNpKTsKKwkvKiAKKwkgKiBPbiBhY2NvdW50IG9mIHN0cmFu Z2UgU0FMIGVycm9yIHJlY29yZCwgd2UgY2Fubm90IHJlY292ZXIuIAorCSAqLworCXJldHVy biAwOworfQorCisvKgorICogbWNhX3RyeV90b19yZWNvdmVyCisgKgorICogIFRyeSB0byBy ZWNvdmVyIGZyb20gTUNBCisgKgorICogSW5wdXRzCTogcmVjIAkgICAgKHBvaW50ZXIgdG8g YSBTQUwgZXJyb3IgcmVjb3JkKQorICogT3V0cHV0cwk6IChvcyByZWNvdmVyeSBzdGF0dXMp CisgKi8KKworc3RhdGljIGludAorbWNhX3RyeV90b19yZWNvdmVyKHZvaWQgKnJlYywgCisJ aWE2NF9tY2Ffc2FsX3RvX29zX3N0YXRlX3QgKnNhbF90b19vc19zdGF0ZSwKKwlpYTY0X21j YV9vc190b19zYWxfc3RhdGVfdCAqb3NfdG9fc2FsX3N0YXRlKQoreworCWludCBwbGF0Zm9y bV9lcnI7CisJaW50IG5fcHJvY19lcnI7CisJc2xpZHhfdGFibGVfdCBzbGlkeDsKKwlwZWlk eF90YWJsZV90IHBlaWR4OworCXBhbF9idXNfY2hlY2tfaW5mb190IHBiY2k7CisKKwkvKiBo YW5kb2ZmIHN0YXRlIGZyb20vdG8gbWNhLmMgKi8KKwlzYWxfdG9fb3NfaGFuZG9mZl9zdGF0 ZSA9IHNhbF90b19vc19zdGF0ZTsKKwlvc190b19zYWxfaGFuZG9mZl9zdGF0ZSA9IG9zX3Rv X3NhbF9zdGF0ZTsKKworCS8qIE1ha2UgaW5kZXggb2YgU0FMIGVycm9yIHJlY29yZCAqLwor CXBsYXRmb3JtX2VyciA9IG1jYV9tYWtlX3NsaWR4KHJlYywgJnNsaWR4KTsKKworCS8qIENv dW50IHByb2Nlc3NvciBlcnJvciBzZWN0aW9ucyAqLworCW5fcHJvY19lcnIgPSBzbGlkeF9j b3VudCgmc2xpZHgsIHByb2NfZXJyKTsKKworCSAvKiBOb3csIE9TIGNhbiByZWNvdmVyIHdo ZW4gdGhlcmUgaXMgb25lIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uICovCisJaWYgKG5fcHJv Y19lcnIgPiAxKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmIChuX3Byb2NfZXJyID09IDApIHsK KwkJLyogV2VpcmQgU0FMIHJlY29yZCAuLi4gV2UgbmVlZCBub3QgdG8gcmVjb3ZlciAqLwor CisJCXJldHVybiAxOworCX0KKworCS8qIE1ha2UgaW5kZXggb2YgcHJvY2Vzc29yIGVycm9y IHNlY3Rpb24gKi8KKwltY2FfbWFrZV9wZWlkeCgoc2FsX2xvZ19wcm9jZXNzb3JfaW5mb190 KilzbGlkeF9maXJzdF9lbnRyeSgmc2xpZHgucHJvY19lcnIpLT5oZHIsICZwZWlkeCk7CisK KwkvKiBFeHRyYWN0IFByb2Nlc3NvciBCVVNfQ0hFQ0tbMF0gKi8KKwkqKCh1NjQqKSZwYmNp KSA9IHBlaWR4X2NoZWNrX2luZm8oJnBlaWR4LCBidXNfY2hlY2ssIDApOworCisJLyogQ2hl Y2sgd2hldGhlciBNQ0EgaXMgZ2xvYmFsIG9yIG5vdCAqLworCWlmIChpc19tY2FfZ2xvYmFs KCZwZWlkeCwgJnBiY2kpKQorCQlyZXR1cm4gMDsKKwkKKwkvKiBUcnkgdG8gcmVjb3ZlciBh IHByb2Nlc3NvciBlcnJvciAqLworCXJldHVybiByZWNvdmVyX2Zyb21fcHJvY2Vzc29yX2Vy cm9yKHBsYXRmb3JtX2VyciwgJnNsaWR4LCAmcGVpZHgsICZwYmNpKTsKK30KKworLyoKKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworaW50IF9faW5pdCBtY2FfZXh0ZXJu YWxfaGFuZGxlcl9pbml0KHZvaWQpCit7CisJaWYgKGluaXRfcmVjb3JkX2luZGV4X3Bvb2xz KCkpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogcmVnaXN0ZXIgZXh0ZXJuYWwgbWNhIGhh bmRsZXJzICovCisJaWE2NF9tY2FfdWNtY19vdGhlcl9yZWNvdmVyX2ZwID0gbWNhX3RyeV90 b19yZWNvdmVyOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19leGl0IG1jYV9leHRlcm5h bF9oYW5kbGVyX2V4aXQodm9pZCkKK3sKKwkvKiB1bnJlZ2lzdGVyIGV4dGVybmFsIG1jYSBo YW5kbGVycyAqLworCWlhNjRfbWNhX3VjbWNfb3RoZXJfcmVjb3Zlcl9mcCA9IE5VTEw7CisJ a2ZyZWUoc2xpZHhfcG9vbC5idWZmZXIpOworfQorCittb2R1bGVfaW5pdChtY2FfZXh0ZXJu YWxfaGFuZGxlcl9pbml0KTsKK21vZHVsZV9leGl0KG1jYV9leHRlcm5hbF9oYW5kbGVyX2V4 aXQpOworCisjaWZkZWYgTU9EVUxFCitNT0RVTEVfUEFSTShzYWxfcmVjX21heCwgImkiKTsK K01PRFVMRV9ERVNDUklQVElPTigiaWE2NCBwbGF0Zm9ybSBkZXBlbmRlbnQgbWNhIGhhbmRs ZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisjZW5kaWYKZGlmZiAtTnVy IGxpbnV4LTIuNi44LXJjMy9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuaCBsaW51eC0yLjYu OC1yYzMtbWNhZHJ2LXYyL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5oCi0tLSBsaW51eC0y LjYuOC1yYzMvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmgJMTk3MC0wMS0wMSAwOTowMDow MC4wMDAwMDAwMDAgKzA5MDAKKysrIGxpbnV4LTIuNi44LXJjMy1tY2FkcnYtdjIvYXJjaC9p YTY0L2tlcm5lbC9tY2FfZHJ2LmgJMjAwNC0wOC0wNCAxODowODozOS4wMDAwMDAwMDAgKzA5 MDAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBGaWxlOgltY2FfZHJ2LmgKKyAqIFB1cnBv c2U6CURlZmluZSBoZWxwZXJzIGZvciBHZW5lcmljIE1DQSBoYW5kbGluZworICovCisKKy8q IAorICogUHJvY2Vzc29yIGVycm9yIHNlY3Rpb246IAorICogCisgKiAgKy1zYWxfbG9nX3By b2Nlc3Nvcl9pbmZvX3QgKmluZm8tLS0tLS0tLS0tLS0tKworICogIHwgc2FsX2xvZ19zZWN0 aW9uX2hkcl90IGhlYWRlcjsgICAgICAgICAgICAgIHwKKyAqICB8IC4uLiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgfCBzYWxfbG9nX21vZF9lcnJv cl9pbmZvX3QgaW5mb1swXTsgICAgICAgICAgfAorICogICstKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgIHwgQ0FDSEVfQ0hFQ0sgICAgfCAg XiBudW1fY2FjaGVfY2hlY2sgdgorICogICAgKy0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICB8 IFRMQl9DSEVDSyAgICAgIHwgIF4gbnVtX3RsYl9jaGVjayB2CisgKiAgICArLS0tLS0tLS0t LS0tLS0tLSsKKyAqICAgIHwgQlVTX0NIRUNLICAgICAgfCAgXiBudW1fYnVzX2NoZWNrIHYK KyAqICAgICstLS0tLS0tLS0tLS0tLS0tKworICogICAgfCBSRUdfRklMRV9DSEVDSyB8ICBe IG51bV9yZWdfZmlsZV9jaGVjayB2CisgKiAgICArLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAg IHwgTVNfQ0hFQ0sgICAgICAgfCAgXiBudW1fbXNfY2hlY2sgdgorICogICstc3RydWN0IGNw dWlkX2luZm8gKmlkLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICB8IHJlZ3NbNV07ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgfCByZXNlcnZlZDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICstc2FsX3Byb2Nlc3Nvcl9z dGF0aWNfaW5mb190ICpyZWdzLS0tLS0tLS0tLSsKKyAqICB8IHZhbGlkOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgfCAuLi4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAorICogIHwgZnJbMTI4XTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKi8KKworLyogcGVpZHg6IGluZGV4IG9mIHByb2Nl c3NvciBlcnJvciBzZWN0aW9uICovCit0eXBlZGVmIHN0cnVjdCBwZWlkeF90YWJsZSB7CisJ c2FsX2xvZ19wcm9jZXNzb3JfaW5mb190ICAgICAgICAqaW5mbzsKKwlzdHJ1Y3Qgc2FsX2Nw dWlkX2luZm8gICAgICAgICAgICppZDsKKwlzYWxfcHJvY2Vzc29yX3N0YXRpY19pbmZvX3Qg ICAgICpyZWdzOworfSBwZWlkeF90YWJsZV90OworCisjZGVmaW5lIHBlaWR4X2hlYWQocCkg ICAoKChwKS0+aW5mbykpCisjZGVmaW5lIHBlaWR4X21pZChwKSAgICAoKChwKS0+aWQpKQor I2RlZmluZSBwZWlkeF9ib3R0b20ocCkgKCgocCktPnJlZ3MpKQorCisjZGVmaW5lIHBlaWR4 X3BzcChwKSAgICAgICAgICAgKCYocGVpZHhfaGVhZChwKS0+cHJvY19zdGF0ZV9wYXJhbWV0 ZXIpKQorI2RlZmluZSBwZWlkeF9maWVsZF92YWxpZChwKSAgICgmKHBlaWR4X2hlYWQocCkt PnZhbGlkKSkKKyNkZWZpbmUgcGVpZHhfbWluc3RhdGVfYXJlYShwKSAoJihwZWlkeF9ib3R0 b20ocCktPm1pbl9zdGF0ZV9hcmVhKSkKKworI2RlZmluZSBwZWlkeF9jYWNoZV9jaGVja19u dW0ocCkgICAgKHBlaWR4X2hlYWQocCktPnZhbGlkLm51bV9jYWNoZV9jaGVjaykKKyNkZWZp bmUgcGVpZHhfdGxiX2NoZWNrX251bShwKSAgICAgIChwZWlkeF9oZWFkKHApLT52YWxpZC5u dW1fdGxiX2NoZWNrKQorI2RlZmluZSBwZWlkeF9idXNfY2hlY2tfbnVtKHApICAgICAgKHBl aWR4X2hlYWQocCktPnZhbGlkLm51bV9idXNfY2hlY2spCisjZGVmaW5lIHBlaWR4X3JlZ19m aWxlX2NoZWNrX251bShwKSAocGVpZHhfaGVhZChwKS0+dmFsaWQubnVtX3JlZ19maWxlX2No ZWNrKQorI2RlZmluZSBwZWlkeF9tc19jaGVja19udW0ocCkgICAgICAgKHBlaWR4X2hlYWQo cCktPnZhbGlkLm51bV9tc19jaGVjaykKKworI2RlZmluZSBwZWlkeF9jYWNoZV9jaGVja19p ZHgocCwgbikgICAgKG4pCisjZGVmaW5lIHBlaWR4X3RsYl9jaGVja19pZHgocCwgbikgICAg ICAocGVpZHhfY2FjaGVfY2hlY2tfaWR4KHAsIHBlaWR4X2NhY2hlX2NoZWNrX251bShwKSkg KyBuKQorI2RlZmluZSBwZWlkeF9idXNfY2hlY2tfaWR4KHAsIG4pICAgICAgKHBlaWR4X3Rs Yl9jaGVja19pZHgocCwgcGVpZHhfdGxiX2NoZWNrX251bShwKSkgKyBuKQorI2RlZmluZSBw ZWlkeF9yZWdfZmlsZV9jaGVja19pZHgocCwgbikgKHBlaWR4X2J1c19jaGVja19pZHgocCwg cGVpZHhfYnVzX2NoZWNrX251bShwKSkgKyBuKQorI2RlZmluZSBwZWlkeF9tc19jaGVja19p ZHgocCwgbikgICAgICAgKHBlaWR4X3JlZ19maWxlX2NoZWNrX2lkeChwLCBwZWlkeF9yZWdf ZmlsZV9jaGVja19udW0ocCkpICsgbikKKworI2RlZmluZSBwZWlkeF9tb2RfZXJyb3JfaW5m byhwLCBuYW1lLCBuKSBcCisoewlpbnQgX19pZHggPSBwZWlkeF8jI25hbWUjI19pZHgocCwg bik7IFwKKwlzYWxfbG9nX21vZF9lcnJvcl9pbmZvX3QgKl9fcmV0ID0gTlVMTDsgXAorCWlm IChwZWlkeF8jI25hbWUjI19udW0ocCkgPiBuKSAvKkJVRyovIFwKKwkJX19yZXQgPSAmKHBl aWR4X2hlYWQocCktPmluZm9bX19pZHhdKTsgXAorCV9fcmV0OyB9KQorCisjZGVmaW5lIHBl aWR4X2NhY2hlX2NoZWNrKHAsIG4pICAgIHBlaWR4X21vZF9lcnJvcl9pbmZvKHAsIGNhY2hl X2NoZWNrLCBuKQorI2RlZmluZSBwZWlkeF90bGJfY2hlY2socCwgbikgICAgICBwZWlkeF9t b2RfZXJyb3JfaW5mbyhwLCB0bGJfY2hlY2ssIG4pCisjZGVmaW5lIHBlaWR4X2J1c19jaGVj ayhwLCBuKSAgICAgIHBlaWR4X21vZF9lcnJvcl9pbmZvKHAsIGJ1c19jaGVjaywgbikKKyNk ZWZpbmUgcGVpZHhfcmVnX2ZpbGVfY2hlY2socCwgbikgcGVpZHhfbW9kX2Vycm9yX2luZm8o cCwgcmVnX2ZpbGVfY2hlY2ssIG4pCisjZGVmaW5lIHBlaWR4X21zX2NoZWNrKHAsIG4pICAg ICAgIHBlaWR4X21vZF9lcnJvcl9pbmZvKHAsIG1zX2NoZWNrLCBuKQorCisjZGVmaW5lIHBl aWR4X2NoZWNrX2luZm8ocHJvYywgbmFtZSwgbikgXAorKHsgXAorCXNhbF9sb2dfbW9kX2Vy cm9yX2luZm9fdCAqX19pbmZvID0gcGVpZHhfbW9kX2Vycm9yX2luZm8ocHJvYywgbmFtZSwg bik7XAorCXU2NCBfX3RlbXAgPSBfX2luZm8gJiYgX19pbmZvLT52YWxpZC5jaGVja19pbmZv IFwKKwkJPyBfX2luZm8tPmNoZWNrX2luZm8gOiAwOyBcCisJX190ZW1wOyB9KQorCisvKiBz bGlkeDogaW5kZXggb2YgU0FMIGxvZyBlcnJvciByZWNvcmQgKi8KKwordHlwZWRlZiBzdHJ1 Y3Qgc2xpZHhfbGlzdCB7CisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyAgICAg ICAgc2FsX2xvZ19zZWN0aW9uX2hkcl90ICpoZHI7Cit9IHNsaWR4X2xpc3RfdDsKKwordHlw ZWRlZiBzdHJ1Y3Qgc2xpZHhfdGFibGUgeworICAgICAgICBzYWxfbG9nX3JlY29yZF9oZWFk ZXJfdCAqaGVhZGVyOworICAgICAgICBpbnQgbl9zZWN0aW9uczsJCQkvKiAjIG9mIHNlY3Rp b24gaGVhZGVycyAqLworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHByb2NfZXJyOworICAg ICAgICBzdHJ1Y3QgbGlzdF9oZWFkIG1lbV9kZXZfZXJyOworICAgICAgICBzdHJ1Y3QgbGlz dF9oZWFkIHNlbF9kZXZfZXJyOworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHBjaV9idXNf ZXJyOworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNtYmlvc19kZXZfZXJyOworICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIHBjaV9jb21wX2VycjsKKyAgICAgICAgc3RydWN0IGxpc3Rf aGVhZCBwbGF0X3NwZWNpZmljX2VycjsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBob3N0 X2N0bHJfZXJyOworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHBsYXRfYnVzX2VycjsKKyAg ICAgICAgc3RydWN0IGxpc3RfaGVhZCB1bnN1cHBvcnRlZDsJLyogbGlzdCBvZiB1bnN1cHBv cnRlZCBzZWN0aW9ucyAqLworfSBzbGlkeF90YWJsZV90OworCisjZGVmaW5lIHNsaWR4X2Zv cmVhY2hfZW50cnkocG9zLCBoZWFkKSBcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhl YWQsIGxpc3QpCisjZGVmaW5lIHNsaWR4X2ZpcnN0X2VudHJ5KGhlYWQpIFwKKwkoKChoZWFk KS0+bmV4dCAhPSAoaGVhZCkpID8gbGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZihz bGlkeF9saXN0X3QpLCBsaXN0KSA6IE5VTEwpCisjZGVmaW5lIHNsaWR4X2NvdW50KHNsaWR4 LCBzZWMpIFwKKyh7CWludCBfX2NvdW50ID0gMDsgXAorCXNsaWR4X2xpc3RfdCAqX19wb3M7 IFwKKwlzbGlkeF9mb3JlYWNoX2VudHJ5KF9fcG9zLCAmKChzbGlkeCktPnNlYykpIHsgX19j b3VudCsrOyB9XAorCV9fY291bnQ7IH0pCisKZGlmZiAtTnVyIGxpbnV4LTIuNi44LXJjMy9h cmNoL2lhNjQva2VybmVsL21jYV9kcnZfYXNtLlMgbGludXgtMi42LjgtcmMzLW1jYWRydi12 Mi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnZfYXNtLlMKLS0tIGxpbnV4LTIuNi44LXJjMy9h cmNoL2lhNjQva2VybmVsL21jYV9kcnZfYXNtLlMJMTk3MC0wMS0wMSAwOTowMDowMC4wMDAw MDAwMDAgKzA5MDAKKysrIGxpbnV4LTIuNi44LXJjMy1tY2FkcnYtdjIvYXJjaC9pYTY0L2tl cm5lbC9tY2FfZHJ2X2FzbS5TCTIwMDQtMDgtMDQgMTk6MTY6NTEuMDQ1OTE0NTQ5ICswOTAw CkBAIC0wLDAgKzEsMzggQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRl IDxsaW51eC90aHJlYWRzLmg+CisKKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KKyNpbmNs dWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK0dMT0JBTF9FTlRSWShtY2FfaGFuZGxlcl9iaGhv b2spCisJaW52YWxhCQkJCQkJLy8gY2xlYXIgUlNFID8KKwk7OwkJCQkJCS8vCisJY292ZXIJ CQkJCQkvLyAKKwk7OwkJCQkJCS8vCisJY2xycnJiCQkJCQkJLy8KKwk7OwkJCQkJCQorCWFs bG9jCQlyMTY9YXIucGZzLDAsMiwxLDAJCS8vIG1ha2UgYSBuZXcgZnJhbWUKKwk7OworCW1v dgkJcjEzPUlBNjRfS1IoQ1VSUkVOVCkJCS8vIGN1cnJlbnQgdGFzayBwb2ludGVyCisJOzsK KwlhZGRzCQlyMTI9SUE2NF9UQVNLX1RIUkVBRF9LU1BfT0ZGU0VULHIxMworCTs7CisJbGQ4 CQlyMTI9W3IxMl0JCQkvLyBzdGFjayBwb2ludGVyCisJOzsKKwltb3YJCWxvYzA9cjE2CisJ bW92bAkJbG9jMT1tY2FfaGFuZGxlcl9iaAkJLy8gcmVjb3ZlcnkgQyBmdW5jdGlvbiAKKwk7 OworCW1vdgkJb3V0MD1yOAkJCQkvLyBwb2lzb25lZCBhZGRyZXNzCisJbW92CQliNj1sb2Mx CisJOzsKKwltb3YJCWxvYzE9cnAKKwk7OworCWJyLmNhbGwuc3B0ay5tYW55ICAgIHJwPWI2 CQkJLy8gbm90IHJldHVybiAuLi4gCisJOzsKKwltb3YJCWFyLnBmcz1sb2MwCisJbW92IAkJ cnA9bG9jMQorCTs7CisJbW92CQlyOD1yMAorCWJyLnJldC5zcHRrLm1hbnkgcnAKKwk7Owor RU5EKG1jYV9oYW5kbGVyX2JoaG9vaykK --------------040704060600030208070703--