From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kay Sievers Date: Tue, 02 Jun 2009 04:58:14 +0000 Subject: Re: [GIT] Experimental threaded udev Message-Id: MIME-Version: 1 Content-Type: multipart/mixed; boundary="001485f85a94d9cc1e046b56648a" List-Id: References: <4A1EA138.10400@tuffmail.co.uk> In-Reply-To: <4A1EA138.10400@tuffmail.co.uk> To: linux-hotplug@vger.kernel.org --001485f85a94d9cc1e046b56648a Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Mon, Jun 1, 2009 at 21:39, Kay Sievers wrote: > On Mon, Jun 1, 2009 at 18:24, Alan Jenkins = wrote: > >> I don't think the signal handler should be doing list traversal, in case= it >> interrupts list manipulation in the main loop. =C2=A0Or perhaps the main= loop >> should only allow signals during ppoll(). > > Make sense. we can block them during list mangling, or just go for > signalfd, and convert all the signal handling to it. Here is a version that uses signalfd(), and a socketpair() from the workers to pass data back. Same numbers so far, but the code looks a lot simpler. Kay --001485f85a94d9cc1e046b56648a Content-Type: text/x-patch; charset=US-ASCII; name="worker4.patch" Content-Disposition: attachment; filename="worker4.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fvg4zhw60 ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBmMWQwMDhlLi5m MTI2MTQ2IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0y MywxMCArMjMsNiBAQCBBQ19TVUJTVChMSUJVREVWX0xUX0FHRSkKIAogQUNfUEFUSF9QUk9HKFtY U0xUUFJPQ10sIFt4c2x0cHJvY10pCiAKLUFDX0NIRUNLX0xJQihjLCBpbm90aWZ5X2luaXQsCi0J W0FDX0RFRklORShbSEFWRV9JTk9USUZZXSwgMSwgW2lub3RpZnkgYXZhaWxhYmxlXSldLAotCVtB Q19NU0dfV0FSTihbaW5vdGlmeSBzdXBwb3J0IGRpc2FibGVkXSldKQotCiBBQ19BUkdfV0lUSCh1 ZGV2LXByZWZpeCwKIAlBU19IRUxQX1NUUklORyhbLS13aXRoLXVkZXYtcHJlZml4PURJUl0sIFth ZGQgcHJlZml4IHRvIGludGVybmFsIHVkZXYgcGF0aCBuYW1lc10pLAogCVtdLCBbd2l0aF91ZGV2 X3ByZWZpeD0nJHtleGVjX3ByZWZpeH0nXSkKZGlmZiAtLWdpdCBhL3VkZXYvTWFrZWZpbGUuYW0g Yi91ZGV2L01ha2VmaWxlLmFtCmluZGV4IDZjZDJmMjMuLjk0OTg5ZTYgMTAwNjQ0Ci0tLSBhL3Vk ZXYvTWFrZWZpbGUuYW0KKysrIGIvdWRldi9NYWtlZmlsZS5hbQpAQCAtMTQsNyArMTQsNiBAQCBj b21tb25fbGRhZGQgPQogCiBjb21tb25fZmlsZXMgPSBcCiAJdWRldi5oIFwKLQl1ZGV2LXN5c2Rl cHMuaCBcCiAJdWRldi1ldmVudC5jIFwKIAl1ZGV2LXdhdGNoLmMgXAogCXVkZXYtbm9kZS5jIFwK ZGlmZiAtLWdpdCBhL3VkZXYvbGliL2xpYnVkZXYtbW9uaXRvci5jIGIvdWRldi9saWIvbGlidWRl di1tb25pdG9yLmMKaW5kZXggMzk1YTRkMi4uNTRjOTU3NiAxMDA2NDQKLS0tIGEvdWRldi9saWIv bGlidWRldi1tb25pdG9yLmMKKysrIGIvdWRldi9saWIvbGlidWRldi1tb25pdG9yLmMKQEAgLTMy LDcgKzMyLDYgQEAgc3RydWN0IHVkZXZfbW9uaXRvciB7CiAJaW50IHJlZmNvdW50OwogCWludCBz b2NrOwogCXN0cnVjdCBzb2NrYWRkcl9ubCBzbmw7Ci0Jc3RydWN0IHNvY2thZGRyX25sIHNubF9w ZWVyOwogCXN0cnVjdCBzb2NrYWRkcl91biBzdW47CiAJc29ja2xlbl90IGFkZHJsZW47CiAJc3Ry dWN0IHVkZXZfbGlzdF9ub2RlIGZpbHRlcl9zdWJzeXN0ZW1fbGlzdDsKQEAgLTE3MSw4ICsxNzAs OCBAQCBzdHJ1Y3QgdWRldl9tb25pdG9yICp1ZGV2X21vbml0b3JfbmV3X2Zyb21fbmV0bGluayhz dHJ1Y3QgdWRldiAqdWRldiwgY29uc3QgY2hhcgogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChuYW1l ID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCWlmIChzdHJjbXAobmFtZSwgImtlcm5lbCIpID09 IDApCisJCWdyb3VwID0gMDsKKwllbHNlIGlmIChzdHJjbXAobmFtZSwgImtlcm5lbCIpID09IDAp CiAJCWdyb3VwID0gVURFVl9NT05JVE9SX0tFUk5FTDsKIAllbHNlIGlmIChzdHJjbXAobmFtZSwg InVkZXYiKSA9PSAwKQogCQlncm91cCA9IFVERVZfTU9OSVRPUl9VREVWOwpAQCAtMTkzLDggKzE5 Miw2IEBAIHN0cnVjdCB1ZGV2X21vbml0b3IgKnVkZXZfbW9uaXRvcl9uZXdfZnJvbV9uZXRsaW5r KHN0cnVjdCB1ZGV2ICp1ZGV2LCBjb25zdCBjaGFyCiAKIAl1ZGV2X21vbml0b3ItPnNubC5ubF9m YW1pbHkgPSBBRl9ORVRMSU5LOwogCXVkZXZfbW9uaXRvci0+c25sLm5sX2dyb3VwcyA9IGdyb3Vw OwotCXVkZXZfbW9uaXRvci0+c25sX3BlZXIubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKLQl1ZGV2 X21vbml0b3ItPnNubF9wZWVyLm5sX2dyb3VwcyA9IFVERVZfTU9OSVRPUl9VREVWOwogCiAJZGJn KHVkZXYsICJtb25pdG9yICVwIGNyZWF0ZWQgd2l0aCBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UICgl dSlcbiIsIHVkZXZfbW9uaXRvciwgZ3JvdXApOwogCXJldHVybiB1ZGV2X21vbml0b3I7CkBAIC00 MzQsNyArNDMxLDYgQEAgc3RydWN0IHVkZXZfZGV2aWNlICp1ZGV2X21vbml0b3JfcmVjZWl2ZV9k ZXZpY2Uoc3RydWN0IHVkZXZfbW9uaXRvciAqdWRldl9tb25pdG8KIAlzdHJ1Y3QgaW92ZWMgaW92 OwogCWNoYXIgY3JlZF9tc2dbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHVjcmVkKSldOwogCXN0 cnVjdCBjbXNnaGRyICpjbXNnOwotCXN0cnVjdCBzb2NrYWRkcl9ubCBzbmw7CiAJc3RydWN0IHVj cmVkICpjcmVkOwogCWNoYXIgYnVmWzgxOTJdOwogCXNzaXplX3QgYnVmbGVuOwpAQCAtNDU5LDEx ICs0NTUsNiBAQCByZXRyeToKIAlzbXNnLm1zZ19jb250cm9sID0gY3JlZF9tc2c7CiAJc21zZy5t c2dfY29udHJvbGxlbiA9IHNpemVvZihjcmVkX21zZyk7CiAKLQlpZiAodWRldl9tb25pdG9yLT5z bmwubmxfZmFtaWx5ICE9IDApIHsKLQkJc21zZy5tc2dfbmFtZSA9ICZzbmw7Ci0JCXNtc2cubXNn X25hbWVsZW4gPSBzaXplb2Yoc25sKTsKLQl9Ci0KIAlidWZsZW4gPSByZWN2bXNnKHVkZXZfbW9u aXRvci0+c29jaywgJnNtc2csIDApOwogCWlmIChidWZsZW4gPCAwKSB7CiAJCWlmIChlcnJubyAh PSBFSU5UUikKQEAgLTQ3NiwyMCArNDY3LDYgQEAgcmV0cnk6CiAJCXJldHVybiBOVUxMOwogCX0K IAotCWlmICh1ZGV2X21vbml0b3ItPnNubC5ubF9mYW1pbHkgIT0gMCkgewotCQlpZiAoc25sLm5s X2dyb3VwcyA9PSAwKSB7Ci0JCQlpbmZvKHVkZXZfbW9uaXRvci0+dWRldiwgInVuaWNhc3QgbmV0 bGluayBtZXNzYWdlIGlnbm9yZWRcbiIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJaWYgKHNu bC5ubF9ncm91cHMgPT0gVURFVl9NT05JVE9SX0tFUk5FTCkgewotCQkJaWYgKHNubC5ubF9waWQg PiAwKSB7Ci0JCQkJaW5mbyh1ZGV2X21vbml0b3ItPnVkZXYsICJtdWx0aWNhc3Qga2VybmVsIG5l dGxpbmsgbWVzc2FnZSBmcm9tIHBpZCAlZCBpZ25vcmVkXG4iLCBzbmwubmxfcGlkKTsKLQkJCQly ZXR1cm4gTlVMTDsKLQkJCX0KLQkJCWlzX2tlcm5lbCA9IDE7Ci0JCX0KLQl9Ci0KIAljbXNnID0g Q01TR19GSVJTVEhEUigmc21zZyk7CiAJaWYgKGNtc2cgPT0gTlVMTCB8fCBjbXNnLT5jbXNnX3R5 cGUgIT0gU0NNX0NSRURFTlRJQUxTKSB7CiAJCWluZm8odWRldl9tb25pdG9yLT51ZGV2LCAibm8g c2VuZGVyIGNyZWRlbnRpYWxzIHJlY2VpdmVkLCBtZXNzYWdlIGlnbm9yZWRcbiIpOwpAQCAtNjIx LDcgKzU5OCw3IEBAIHJldHJ5OgogCXJldHVybiB1ZGV2X2RldmljZTsKIH0KIAotaW50IHVkZXZf bW9uaXRvcl9zZW5kX2RldmljZShzdHJ1Y3QgdWRldl9tb25pdG9yICp1ZGV2X21vbml0b3IsIHN0 cnVjdCB1ZGV2X2RldmljZSAqdWRldl9kZXZpY2UpCitpbnQgdWRldl9tb25pdG9yX3NlbmRfZGV2 aWNlKHN0cnVjdCB1ZGV2X21vbml0b3IgKnVkZXZfbW9uaXRvciwgc3RydWN0IHVkZXZfZGV2aWNl ICp1ZGV2X2RldmljZSwgcGlkX3QgcGlkKQogewogCXN0cnVjdCBtc2doZHIgc21zZzsKIAlzdHJ1 Y3QgaW92ZWMgaW92WzJdOwpAQCAtNjYwLDYgKzYzNyw3IEBAIGludCB1ZGV2X21vbml0b3Jfc2Vu ZF9kZXZpY2Uoc3RydWN0IHVkZXZfbW9uaXRvciAqdWRldl9tb25pdG9yLCBzdHJ1Y3QgdWRldl9k ZXZpCiAJfSBlbHNlIGlmICh1ZGV2X21vbml0b3ItPnNubC5ubF9mYW1pbHkgIT0gMCkgewogCQlj b25zdCBjaGFyICp2YWw7CiAJCXN0cnVjdCB1ZGV2X21vbml0b3JfbmV0bGlua19oZWFkZXIgbmxo OworCQlzdHJ1Y3Qgc29ja2FkZHJfbmwgc25sX3BlZXI7CiAKIAogCQkvKiBhZGQgdmVyc2lvbmVk IGhlYWRlciAqLwpAQCAtNjgwLDExICs2NTgsMTggQEAgaW50IHVkZXZfbW9uaXRvcl9zZW5kX2Rl dmljZShzdHJ1Y3QgdWRldl9tb25pdG9yICp1ZGV2X21vbml0b3IsIHN0cnVjdCB1ZGV2X2RldmkK IAkJaW92WzFdLmlvdl9iYXNlID0gKGNoYXIgKilidWY7CiAJCWlvdlsxXS5pb3ZfbGVuID0gYmxl bjsKIAorCQkvKiB3ZSB3aWxsIGFsd2F5cyBnZXQgRUNPTk5SRUZVU0VEIHdoZW4gc2VuZGluZyB0 byB0aGUgbXV0aWNhc3QgZ3JvdXAgKi8KKwkJbWVtc2V0KCZzbmxfcGVlciwgMHgwMCwgc2l6ZW9m KHN0cnVjdCBzb2NrYWRkcl9ubCkpOworCQlzbmxfcGVlci5ubF9mYW1pbHkgPSBBRl9ORVRMSU5L OworCQlpZiAocGlkID4gMCkKKwkJCXNubF9wZWVyLm5sX3BpZCA9IHBpZDsKKwkJZWxzZQorCQkJ c25sX3BlZXIubmxfZ3JvdXBzID0gVURFVl9NT05JVE9SX1VERVY7CisKIAkJbWVtc2V0KCZzbXNn LCAweDAwLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpOwogCQlzbXNnLm1zZ19pb3YgPSBpb3Y7CiAJ CXNtc2cubXNnX2lvdmxlbiA9IDI7Ci0JCS8qIG5vIGRlc3RpbmF0aW9uIGJlc2lkZXMgdGhlIG11 dGljYXN0IGdyb3VwLCB3ZSB3aWxsIGFsd2F5cyBnZXQgRUNPTk5SRUZVU0VEICovCi0JCXNtc2cu bXNnX25hbWUgPSAmdWRldl9tb25pdG9yLT5zbmxfcGVlcjsKKwkJc21zZy5tc2dfbmFtZSA9ICZz bmxfcGVlcjsKIAkJc21zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwp OwogCX0gZWxzZSB7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3VkZXYvbGliL2xpYnVkZXYt cHJpdmF0ZS5oIGIvdWRldi9saWIvbGlidWRldi1wcml2YXRlLmgKaW5kZXggZGMwMmE4NC4uZTYw MDgwMiAxMDA2NDQKLS0tIGEvdWRldi9saWIvbGlidWRldi1wcml2YXRlLmgKKysrIGIvdWRldi9s aWIvbGlidWRldi1wcml2YXRlLmgKQEAgLTg2LDcgKzg2LDcgQEAgaW50IHVkZXZfZGV2aWNlX2Rl bGV0ZV9kYihzdHJ1Y3QgdWRldl9kZXZpY2UgKnVkZXZfZGV2aWNlKTsKIGludCB1ZGV2X2Rldmlj ZV9yZW5hbWVfZGIoc3RydWN0IHVkZXZfZGV2aWNlICp1ZGV2X2RldmljZSwgY29uc3QgY2hhciAq ZGV2cGF0aCk7CiAKIC8qIGxpYnVkZXYtbW9uaXRvciAtIG5ldGxpbmsvdW5peCBzb2NrZXQgY29t bXVuaWNhdGlvbiAgKi8KLWludCB1ZGV2X21vbml0b3Jfc2VuZF9kZXZpY2Uoc3RydWN0IHVkZXZf bW9uaXRvciAqdWRldl9tb25pdG9yLCBzdHJ1Y3QgdWRldl9kZXZpY2UgKnVkZXZfZGV2aWNlKTsK K2ludCB1ZGV2X21vbml0b3Jfc2VuZF9kZXZpY2Uoc3RydWN0IHVkZXZfbW9uaXRvciAqdWRldl9t b25pdG9yLCBzdHJ1Y3QgdWRldl9kZXZpY2UgKnVkZXZfZGV2aWNlLCBwaWRfdCBwaWQpOwogaW50 IHVkZXZfbW9uaXRvcl9zZXRfcmVjZWl2ZV9idWZmZXJfc2l6ZShzdHJ1Y3QgdWRldl9tb25pdG9y ICp1ZGV2X21vbml0b3IsIGludCBzaXplKTsKIAogLyogbGlidWRldi1jdHJsIC0gZGFlbW9uIHJ1 bnRpbWUgc2V0dXAgKi8KZGlmZiAtLWdpdCBhL3VkZXYvdWRldi1ldmVudC5jIGIvdWRldi91ZGV2 LWV2ZW50LmMKaW5kZXggZDUyMTI1MS4uOGFiMjYyYSAxMDA2NDQKLS0tIGEvdWRldi91ZGV2LWV2 ZW50LmMKKysrIGIvdWRldi91ZGV2LWV2ZW50LmMKQEAgLTczNCwxOCArNzM0LDEzIEBAIGludCB1 ZGV2X2V2ZW50X2V4ZWN1dGVfcnVuKHN0cnVjdCB1ZGV2X2V2ZW50ICpldmVudCkKIAkJCW1vbml0 b3IgPSB1ZGV2X21vbml0b3JfbmV3X2Zyb21fc29ja2V0KGV2ZW50LT51ZGV2LCAmY21kW3N0cmxl bigic29ja2V0OiIpXSk7CiAJCQlpZiAobW9uaXRvciA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwot CQkJdWRldl9tb25pdG9yX3NlbmRfZGV2aWNlKG1vbml0b3IsIGV2ZW50LT5kZXYpOworCQkJdWRl dl9tb25pdG9yX3NlbmRfZGV2aWNlKG1vbml0b3IsIGV2ZW50LT5kZXYsIDApOwogCQkJdWRldl9t b25pdG9yX3VucmVmKG1vbml0b3IpOwogCQl9IGVsc2UgewogCQkJY2hhciBwcm9ncmFtW1VUSUxf UEFUSF9TSVpFXTsKIAkJCWNoYXIgKiplbnZwOwogCiAJCQl1ZGV2X2V2ZW50X2FwcGx5X2Zvcm1h dChldmVudCwgY21kLCBwcm9ncmFtLCBzaXplb2YocHJvZ3JhbSkpOwotCQkJaWYgKGV2ZW50LT50 cmFjZSkKLQkJCQlmcHJpbnRmKHN0ZGVyciwgInJ1biAgJXMgKCVsbHUpICclcydcbiIsCi0JCQkJ ICAgICAgIHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGV2ZW50LT5kZXYpLAotCQkJCSAgICAgICB1 ZGV2X2RldmljZV9nZXRfc2VxbnVtKGV2ZW50LT5kZXYpLAotCQkJCSAgICAgICBwcm9ncmFtKTsK IAkJCWVudnAgPSB1ZGV2X2RldmljZV9nZXRfcHJvcGVydGllc19lbnZwKGV2ZW50LT5kZXYpOwog CQkJaWYgKHV0aWxfcnVuX3Byb2dyYW0oZXZlbnQtPnVkZXYsIHByb2dyYW0sIGVudnAsIE5VTEws IDAsIE5VTEwpICE9IDApIHsKIAkJCQlpZiAoIXVkZXZfbGlzdF9lbnRyeV9nZXRfZmxhZyhsaXN0 X2VudHJ5KSkKZGlmZiAtLWdpdCBhL3VkZXYvdWRldi1zeXNkZXBzLmggYi91ZGV2L3VkZXYtc3lz ZGVwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTY3MWJhLi4wMDAwMDAwCi0t LSBhL3VkZXYvdWRldi1zeXNkZXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0v KgotICogd3JhcHBpbmcgb2YgbGliYyBmZWF0dXJlcyBhbmQga2VybmVsIGludGVyZmFjZXMKLSAq Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBLYXkgU2lldmVycyA8a2F5LnNpZXZlcnNAdnJm eS5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgot ICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0jaWZuZGVm IF9VREVWX1NZU0RFUFNfSF8KLSNkZWZpbmUgX1VERVZfU1lTREVQU19IXwotCi0jaW5jbHVkZSA8 c3RkaW50Lmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmbmRlZiBIQVZFX0lOT1RJRlkKLXN0 YXRpYyBpbmxpbmUgaW50IGlub3RpZnlfaW5pdCh2b2lkKQotewotCWVycm5vID0gRU5PU1lTOwot CXJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaW5vdGlmeV9hZGRfd2F0Y2goaW50 IGZkLCBjb25zdCBjaGFyICpuYW1lLCB1aW50MzJfdCBtYXNrKQotewotCXJldHVybiAtMTsKLX0K LQotI2RlZmluZSBJTl9DUkVBVEUJMAotI2RlZmluZSBJTl9ERUxFVEUJMAotI2RlZmluZSBJTl9N T1ZFCQkwCi0jZGVmaW5lIElOX0NMT1NFX1dSSVRFCTAKLQotI2VuZGlmIC8qIEhBVkVfSU5PVElG WSAqLwotI2VuZGlmCmRpZmYgLS1naXQgYS91ZGV2L3VkZXYtd2F0Y2guYyBiL3VkZXYvdWRldi13 YXRjaC5jCmluZGV4IDUzNDkyZTUuLjVhNDljOTYgMTAwNjQ0Ci0tLSBhL3VkZXYvdWRldi13YXRj aC5jCisrKyBiL3VkZXYvdWRldi13YXRjaC5jCkBAIC0yNiwyNyArMjYsMjQgQEAKICNpbmNsdWRl IDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp ZmRlZiBIQVZFX0lOT1RJRlkKICNpbmNsdWRlIDxzeXMvaW5vdGlmeS5oPgotI2VuZGlmCiAKICNp bmNsdWRlICJ1ZGV2LmgiCiAKLWludCBpbm90aWZ5X2ZkID0gLTE7CitzdGF0aWMgaW50IGlub3Rp ZnlfZmQgPSAtMTsKIAogLyogaW5vdGlmeSBkZXNjcmlwdG9yLCB3aWxsIGJlIHNoYXJlZCB3aXRo IHJ1bGVzIGRpcmVjdG9yeTsKICAqIHNldCB0byBjbG9leGVjIHNpbmNlIHdlIG5lZWQgb3VyIGNo aWxkcmVuIHRvIGJlIGFibGUgdG8gYWRkCiAgKiB3YXRjaGVzIGZvciB1cwogICovCi12b2lkIHVk ZXZfd2F0Y2hfaW5pdChzdHJ1Y3QgdWRldiAqdWRldikKK2ludCB1ZGV2X3dhdGNoX2luaXQoc3Ry dWN0IHVkZXYgKnVkZXYpCiB7CiAJaW5vdGlmeV9mZCA9IGlub3RpZnlfaW5pdCgpOwogCWlmIChp bm90aWZ5X2ZkID49IDApCiAJCXV0aWxfc2V0X2ZkX2Nsb2V4ZWMoaW5vdGlmeV9mZCk7Ci0JZWxz ZSBpZiAoZXJybm8gPT0gRU5PU1lTKQotCQlpbmZvKHVkZXYsICJ1bmFibGUgdG8gdXNlIGlub3Rp ZnksIHVkZXZkIHdpbGwgbm90IG1vbml0b3IgcnVsZSBmaWxlcyBjaGFuZ2VzXG4iKTsKIAllbHNl CiAJCWVycih1ZGV2LCAiaW5vdGlmeV9pbml0IGZhaWxlZDogJW1cbiIpOworCXJldHVybiBpbm90 aWZ5X2ZkOwogfQogCiAvKiBtb3ZlIGFueSBvbGQgd2F0Y2hlcyBkaXJlY3Rvcnkgb3V0IG9mIHRo ZSB3YXksIGFuZCB0aGVuIHJlc3RvcmUKZGlmZiAtLWdpdCBhL3VkZXYvdWRldi5oIGIvdWRldi91 ZGV2LmgKaW5kZXggOGYyYzFjNi4uNzE4Nzk3NSAxMDA2NDQKLS0tIGEvdWRldi91ZGV2LmgKKysr IGIvdWRldi91ZGV2LmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K ICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KIAotI2luY2x1ZGUgInVkZXYtc3lzZGVwcy5oIgogI2lu Y2x1ZGUgImxpYi9saWJ1ZGV2LmgiCiAjaW5jbHVkZSAibGliL2xpYnVkZXYtcHJpdmF0ZS5oIgog CkBAIC01Myw3ICs1Miw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2dnaW5nX2Nsb3NlKHZvaWQp CiB9CiAKIHN0cnVjdCB1ZGV2X2V2ZW50IHsKLQlzdHJ1Y3QgdWRldl9saXN0X25vZGUgbm9kZTsK IAlzdHJ1Y3QgdWRldiAqdWRldjsKIAlzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qg dWRldl9kZXZpY2UgKmRldl9wYXJlbnQ7CkBAIC02NCwxMCArNjIsNiBAQCBzdHJ1Y3QgdWRldl9l dmVudCB7CiAJdWlkX3QgdWlkOwogCWdpZF90IGdpZDsKIAlzdHJ1Y3QgdWRldl9saXN0X25vZGUg cnVuX2xpc3Q7Ci0JcGlkX3QgcGlkOwotCWludCBleGl0c3RhdHVzOwotCXRpbWVfdCBxdWV1ZV90 aW1lOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgZGVsYXlpbmdfc2VxbnVtOwogCXVuc2lnbmVk IGludCBncm91cF9maW5hbDoxOwogCXVuc2lnbmVkIGludCBvd25lcl9maW5hbDoxOwogCXVuc2ln bmVkIGludCBtb2RlX2ZpbmFsOjE7CkBAIC03Niw3ICs3MCw2IEBAIHN0cnVjdCB1ZGV2X2V2ZW50 IHsKIAl1bnNpZ25lZCBpbnQgcnVuX2ZpbmFsOjE7CiAJdW5zaWduZWQgaW50IGlnbm9yZV9kZXZp Y2U6MTsKIAl1bnNpZ25lZCBpbnQgaW5vdGlmeV93YXRjaDoxOwotCXVuc2lnbmVkIGludCB0cmFj ZToxOwogfTsKIAogc3RydWN0IHVkZXZfd2F0Y2ggewpAQCAtMTAxLDggKzk0LDcgQEAgaW50IHVk ZXZfZXZlbnRfYXBwbHlfc3Vic3lzX2tlcm5lbChzdHJ1Y3QgdWRldl9ldmVudCAqZXZlbnQsIGNv bnN0IGNoYXIgKnN0cmluZywKIAkJCQkgICBjaGFyICpyZXN1bHQsIHNpemVfdCBtYXhzaXplLCBp bnQgcmVhZF92YWx1ZSk7CiAKIC8qIHVkZXYtd2F0Y2guYyAqLwotZXh0ZXJuIGludCBpbm90aWZ5 X2ZkOwotdm9pZCB1ZGV2X3dhdGNoX2luaXQoc3RydWN0IHVkZXYgKnVkZXYpOworaW50IHVkZXZf d2F0Y2hfaW5pdChzdHJ1Y3QgdWRldiAqdWRldik7CiB2b2lkIHVkZXZfd2F0Y2hfcmVzdG9yZShz dHJ1Y3QgdWRldiAqdWRldik7CiB2b2lkIHVkZXZfd2F0Y2hfYmVnaW4oc3RydWN0IHVkZXYgKnVk ZXYsIHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2KTsKIHZvaWQgdWRldl93YXRjaF9lbmQoc3RydWN0 IHVkZXYgKnVkZXYsIHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL3VkZXYv dWRldmQuYyBiL3VkZXYvdWRldmQuYwppbmRleCAzN2I1NDdhLi43ZTZkMjQ0IDEwMDY0NAotLS0g YS91ZGV2L3VkZXZkLmMKKysrIGIvdWRldi91ZGV2ZC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq IENvcHlyaWdodCAoQykgMjAwNC0yMDA4IEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9y Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2 cmZ5Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCBDaHJpcyBGcmllc2VuIDxjaHJpc19mcmll c2VuQHN5bXBhdGljby5jYT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBDYW5vbmljYWwgTHRkLgog ICogQ29weXJpZ2h0IChDKSAyMDA5IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0 LmNvbT4KQEAgLTMwLDIzICszMCwyMSBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxn ZXRvcHQuaD4KICNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNp bmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbGZkLmg+CiAjaW5jbHVk ZSA8c3lzL3NlbGVjdC5oPgogI2luY2x1ZGUgPHN5cy9wb2xsLmg+CiAjaW5jbHVkZSA8c3lzL3dh aXQuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2lm ZGVmIEhBVkVfSU5PVElGWQogI2luY2x1ZGUgPHN5cy9pbm90aWZ5Lmg+Ci0jZW5kaWYKIAogI2lu Y2x1ZGUgInVkZXYuaCIKIAogI2RlZmluZSBVREVWRF9QUklPUklUWQkJCS00CiAjZGVmaW5lIFVE RVZfUFJJT1JJVFkJCQktMgogCi0vKiBtYXhpbXVtIGxpbWl0IG9mIGZvcmtlZCBjaGlsZHMgKi8K LSNkZWZpbmUgVURFVkRfTUFYX0NISUxEUwkJMjU2Ci0KIHN0YXRpYyBpbnQgZGVidWc7CiAKIHN0 YXRpYyB2b2lkIGxvZ19mbihzdHJ1Y3QgdWRldiAqdWRldiwgaW50IHByaW9yaXR5LApAQCAtNjEs MTYzICs1OSwzMTEgQEAgc3RhdGljIHZvaWQgbG9nX2ZuKHN0cnVjdCB1ZGV2ICp1ZGV2LCBpbnQg cHJpb3JpdHksCiAJfQogfQogCi1zdGF0aWMgdm9pZCByZWFwX3NpZ2NoaWxkcyh2b2lkKTsKLQog c3RhdGljIGludCBkZWJ1Z190cmFjZTsKIHN0YXRpYyBzdHJ1Y3QgdWRldl9ydWxlcyAqcnVsZXM7 CiBzdGF0aWMgc3RydWN0IHVkZXZfcXVldWVfZXhwb3J0ICp1ZGV2X3F1ZXVlX2V4cG9ydDsKIHN0 YXRpYyBzdHJ1Y3QgdWRldl9jdHJsICp1ZGV2X2N0cmw7Ci1zdGF0aWMgc3RydWN0IHVkZXZfbW9u aXRvciAqa2VybmVsX21vbml0b3I7Ci1zdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHNpZ2No aWxkc193YWl0aW5nOwotc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCB1ZGV2X2V4aXQ7Ci1z dGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHJlbG9hZF9jb25maWc7Ci1zdGF0aWMgdm9sYXRp bGUgc2lnX2F0b21pY190IHNpZ25hbF9yZWNlaXZlZDsKLXN0YXRpYyB2b2xhdGlsZSBwaWRfdCBz ZXR0bGVfcGlkOwotc3RhdGljIGludCBydW5fZXhlY19xOwotc3RhdGljIGludCBzdG9wX2V4ZWNf cTsKK3N0YXRpYyBzdHJ1Y3QgdWRldl9tb25pdG9yICptb25pdG9yOworc3RhdGljIGludCB3b3Jr ZXJfc29ja2V0WzJdOworc3RhdGljIHBpZF90IHNldHRsZV9waWQ7CitzdGF0aWMgaW50IHN0b3Bf ZXhlY19xdWV1ZTsKK3N0YXRpYyBpbnQgcmVsb2FkX2NvbmZpZzsKIHN0YXRpYyBpbnQgbWF4X2No aWxkczsKIHN0YXRpYyBpbnQgY2hpbGRzOwogc3RhdGljIHN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSBl dmVudF9saXN0Oworc3RhdGljIHN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSB3b3JrZXJfbGlzdDsKK3N0 YXRpYyBpbnQgdWRldl9leGl0Oworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCB3b3JrZXJf ZXhpdDsKKworZW51bSBwb2xsX2ZkIHsKKwlGRF9DT05UUk9MLAorCUZEX05FVExJTkssCisJRkRf SU5PVElGWSwKKwlGRF9TSUdOQUwsCisJRkRfV09SS0VSLAorfTsKKworc3RhdGljIHN0cnVjdCBw b2xsZmQgcGZkW10gPSB7CisJW0ZEX05FVExJTktdID0geyAuZXZlbnRzID0gUE9MTElOIH0sCisJ W0ZEX1dPUktFUl0gPSAgeyAuZXZlbnRzID0gUE9MTElOIH0sCisJW0ZEX1NJR05BTF0gPSAgeyAu ZXZlbnRzID0gUE9MTElOIH0sCisJW0ZEX0lOT1RJRlldID0geyAuZXZlbnRzID0gUE9MTElOIH0s CisJW0ZEX0NPTlRST0xdID0geyAuZXZlbnRzID0gUE9MTElOIH0sCit9OworCitlbnVtIGV2ZW50 X3N0YXRlIHsKKwlFVkVOVF9VTkRFRiwKKwlFVkVOVF9RVUVVRUQsCisJRVZFTlRfUlVOTklORywK K307CisKK3N0cnVjdCBldmVudCB7CisJc3RydWN0IHVkZXZfbGlzdF9ub2RlIG5vZGU7CisJc3Ry dWN0IHVkZXYgKnVkZXY7CisJc3RydWN0IHVkZXZfZGV2aWNlICpkZXY7CisJZW51bSBldmVudF9z dGF0ZSBzdGF0ZTsKKwlpbnQgZXhpdGNvZGU7CisJdW5zaWduZWQgbG9uZyBsb25nIGludCBkZWxh eWluZ19zZXFudW07Cit9OwogCi1zdGF0aWMgc3RydWN0IHVkZXZfZXZlbnQgKm5vZGVfdG9fZXZl bnQoc3RydWN0IHVkZXZfbGlzdF9ub2RlICpub2RlKQorc3RhdGljIHN0cnVjdCBldmVudCAqbm9k ZV90b19ldmVudChzdHJ1Y3QgdWRldl9saXN0X25vZGUgKm5vZGUpCiB7CiAJY2hhciAqZXZlbnQ7 CiAKIAlldmVudCA9IChjaGFyICopbm9kZTsKLQlldmVudCAtPSBvZmZzZXRvZihzdHJ1Y3QgdWRl dl9ldmVudCwgbm9kZSk7Ci0JcmV0dXJuIChzdHJ1Y3QgdWRldl9ldmVudCAqKWV2ZW50OworCWV2 ZW50IC09IG9mZnNldG9mKHN0cnVjdCBldmVudCwgbm9kZSk7CisJcmV0dXJuIChzdHJ1Y3QgZXZl bnQgKilldmVudDsKK30KKworZW51bSB3b3JrZXJfc3RhdGUgeworCVdPUktFUl9VTkRFRiwKKwlX T1JLRVJfUlVOTklORywKKwlXT1JLRVJfSURMRSwKKwlXT1JLRVJfS0lMTEVELAorfTsKKworc3Ry dWN0IHdvcmtlciB7CisJc3RydWN0IHVkZXZfbGlzdF9ub2RlIG5vZGU7CisJcGlkX3QgcGlkOwor CWVudW0gd29ya2VyX3N0YXRlIHN0YXRlOworCXN0cnVjdCBldmVudCAqZXZlbnQ7Cit9OworCisv KiBwYXNzZWQgZnJvbSB3b3JrZXIgdG8gbWFpbiBwcm9jZXNzICovCitzdHJ1Y3Qgd29ya2VyX21l c3NhZ2UgeworCXBpZF90IHBpZDsKKwlpbnQgZXhpdGNvZGU7Cit9OworCitzdGF0aWMgc3RydWN0 IHdvcmtlciAqbm9kZV90b193b3JrZXIoc3RydWN0IHVkZXZfbGlzdF9ub2RlICpub2RlKQorewor CWNoYXIgKndvcmtlcjsKKworCXdvcmtlciA9IChjaGFyICopbm9kZTsKKwl3b3JrZXIgLT0gb2Zm c2V0b2Yoc3RydWN0IHdvcmtlciwgbm9kZSk7CisJcmV0dXJuIChzdHJ1Y3Qgd29ya2VyICopd29y a2VyOwogfQogCi1zdGF0aWMgdm9pZCBldmVudF9xdWV1ZV9kZWxldGUoc3RydWN0IHVkZXZfZXZl bnQgKmV2ZW50KQorc3RhdGljIHZvaWQgZXZlbnRfcXVldWVfZGVsZXRlKHN0cnVjdCBldmVudCAq ZXZlbnQpCiB7CiAJdWRldl9saXN0X25vZGVfcmVtb3ZlKCZldmVudC0+bm9kZSk7CiAKIAkvKiBt YXJrIGFzIGZhaWxlZCwgaWYgImFkZCIgZXZlbnQgcmV0dXJucyBub24temVybyAqLwotCWlmIChl dmVudC0+ZXhpdHN0YXR1cyAmJiBzdHJjbXAodWRldl9kZXZpY2VfZ2V0X2FjdGlvbihldmVudC0+ ZGV2KSwgImFkZCIpID09IDApCisJaWYgKGV2ZW50LT5leGl0Y29kZSAmJiBzdHJjbXAodWRldl9k ZXZpY2VfZ2V0X2FjdGlvbihldmVudC0+ZGV2KSwgImFkZCIpID09IDApCiAJCXVkZXZfcXVldWVf ZXhwb3J0X2RldmljZV9mYWlsZWQodWRldl9xdWV1ZV9leHBvcnQsIGV2ZW50LT5kZXYpOwogCWVs c2UKIAkJdWRldl9xdWV1ZV9leHBvcnRfZGV2aWNlX2ZpbmlzaGVkKHVkZXZfcXVldWVfZXhwb3J0 LCBldmVudC0+ZGV2KTsKIAogCXVkZXZfZGV2aWNlX3VucmVmKGV2ZW50LT5kZXYpOwotCXVkZXZf ZXZlbnRfdW5yZWYoZXZlbnQpOworCWZyZWUoZXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBldmVu dF9zaWdfaGFuZGxlcihpbnQgc2lnbnVtKQogewotCWlmIChzaWdudW0gPT0gU0lHQUxSTSkKKwlz d2l0Y2ggKHNpZ251bSkgeworCWNhc2UgU0lHQUxSTToKIAkJX2V4aXQoMSk7CisJCWJyZWFrOwor CWNhc2UgU0lHVEVSTToKKwkJd29ya2VyX2V4aXQgPSAxOworCQlicmVhazsKKwl9CiB9CiAKLXN0 YXRpYyB2b2lkIGV2ZW50X2Zvcmsoc3RydWN0IHVkZXZfZXZlbnQgKmV2ZW50KQorc3RhdGljIHZv aWQgd29ya2VyX25ldyhzdHJ1Y3QgZXZlbnQgKmV2ZW50KQogeworCXN0cnVjdCB3b3JrZXIgKndv cmtlcjsKIAlwaWRfdCBwaWQ7CiAJc3RydWN0IHNpZ2FjdGlvbiBhY3Q7Ci0JaW50IGVycjsKLQot I2lmIDAKLQkvKiBzaW5nbGUgcHJvY2Vzcywgbm8gZm9ya2luZywganVzdCBmb3IgdGVzdGluZy9w cm9maWxpbmcgKi8KLQllcnIgPSB1ZGV2X2V2ZW50X2V4ZWN1dGVfcnVsZXMoZXZlbnQsIHJ1bGVz KTsKLQlpZiAoZXJyID09IDAgJiYgIWV2ZW50LT5pZ25vcmVfZGV2aWNlICYmIHVkZXZfZ2V0X3J1 bihldmVudC0+dWRldikpCi0JCXVkZXZfZXZlbnRfZXhlY3V0ZV9ydW4oZXZlbnQpOwotCWluZm8o ZXZlbnQtPnVkZXYsICJzZXEgJWxsdSBleGl0IHdpdGggJWlcbiIsIHVkZXZfZGV2aWNlX2dldF9z ZXFudW0oZXZlbnQtPmRldiksIGVycik7Ci0JZXZlbnRfcXVldWVfZGVsZXRlKGV2ZW50KTsKLQly ZXR1cm47Ci0jZW5kaWYKIAotCWlmIChkZWJ1Z190cmFjZSkgewotCQlldmVudC0+dHJhY2UgPSAx OwotCQlmcHJpbnRmKHN0ZGVyciwgImZvcmsgJXMgKCVsbHUpXG4iLAotCQkgICAgICAgdWRldl9k ZXZpY2VfZ2V0X3N5c3BhdGgoZXZlbnQtPmRldiksCi0JCSAgICAgICB1ZGV2X2RldmljZV9nZXRf c2VxbnVtKGV2ZW50LT5kZXYpKTsKLQl9CisJd29ya2VyID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1 Y3Qgd29ya2VyKSk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm47CiAKIAlwaWQgPSBm b3JrKCk7CiAJc3dpdGNoIChwaWQpIHsKLQljYXNlIDA6Ci0JCS8qIGNoaWxkICovCisJY2FzZSAw OiB7CisJCXNpZ3NldF90IG1hc2s7CisJCXN0cnVjdCB1ZGV2X2RldmljZSAqZGV2OworCiAJCXVk ZXZfcXVldWVfZXhwb3J0X3VucmVmKHVkZXZfcXVldWVfZXhwb3J0KTsKIAkJdWRldl9jdHJsX3Vu cmVmKHVkZXZfY3RybCk7CisJCXVkZXZfbW9uaXRvcl91bnJlZihtb25pdG9yKTsKKwkJY2xvc2Uo cGZkW0ZEX1NJR05BTF0uZmQpOworCQljbG9zZSh3b3JrZXJfc29ja2V0W1JFQURfRU5EXSk7CiAJ CWxvZ2dpbmdfY2xvc2UoKTsKLQkJbG9nZ2luZ19pbml0KCJ1ZGV2ZC1ldmVudCIpOworCQlsb2dn aW5nX2luaXQoInVkZXZkLXdvcmsiKTsKIAkJc2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCAwLCBV REVWX1BSSU9SSVRZKTsKIAorCQkvKiByZS1vcGVuIHNvY2tldCB0byBsaXN0ZW4gdG8gdWRldmQg b25seSwgYW5kIHNlbmQgYmFjayBsaWJ1ZGV2IGV2ZW50cyAqLworCQltb25pdG9yID0gdWRldl9t b25pdG9yX25ld19mcm9tX25ldGxpbmsoZXZlbnQtPnVkZXYsIE5VTEwpOworCQlpZiAobW9uaXRv ciA9PSBOVUxMKQorCQkJX2V4aXQoMik7CisJCXVkZXZfbW9uaXRvcl9lbmFibGVfcmVjZWl2aW5n KG1vbml0b3IpOworCiAJCS8qIHNldCBzaWduYWwgaGFuZGxlcnMgKi8KIAkJbWVtc2V0KCZhY3Qs IDB4MDAsIHNpemVvZihhY3QpKTsKIAkJYWN0LnNhX2hhbmRsZXIgPSBldmVudF9zaWdfaGFuZGxl cjsKIAkJc2lnZW1wdHlzZXQgKCZhY3Quc2FfbWFzayk7CiAJCWFjdC5zYV9mbGFncyA9IDA7CisJ CXNpZ2FjdGlvbihTSUdURVJNLCAmYWN0LCBOVUxMKTsKIAkJc2lnYWN0aW9uKFNJR0FMUk0sICZh Y3QsIE5VTEwpOwogCi0JCS8qIHJlc2V0IHRvIGRlZmF1bHQgKi8KLQkJYWN0LnNhX2hhbmRsZXIg PSBTSUdfREZMOwotCQlzaWdhY3Rpb24oU0lHSU5ULCAmYWN0LCBOVUxMKTsKLQkJc2lnYWN0aW9u KFNJR1RFUk0sICZhY3QsIE5VTEwpOwotCQlzaWdhY3Rpb24oU0lHQ0hMRCwgJmFjdCwgTlVMTCk7 Ci0JCXNpZ2FjdGlvbihTSUdIVVAsICZhY3QsIE5VTEwpOworCQkvKiB1bmJsb2NrIHNpZ25hbHMg Ki8KKwkJc2lnZmlsbHNldCgmbWFzayk7CisJCXNpZ2RlbHNldCgmbWFzaywgU0lHVEVSTSk7CisJ CXNpZ2RlbHNldCgmbWFzaywgU0lHQUxSTSk7CisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAm bWFzaywgTlVMTCk7CiAKLQkJLyogc2V0IHRpbWVvdXQgdG8gcHJldmVudCBoYW5naW5nIHByb2Nl c3NlcyAqLwotCQlhbGFybShVREVWX0VWRU5UX1RJTUVPVVQpOworCQkvKiByZXF1ZXN0IFRFUk0g c2lnbmFsIGlmIG1haW4gZGFlbW9uIGV4aXRzICovCisJCXByY3RsKFBSX1NFVF9QREVBVEhTSUcs IFNJR1RFUk0pOwogCi0JCS8qIGFwcGx5IHJ1bGVzLCBjcmVhdGUgbm9kZSwgc3ltbGlua3MgKi8K LQkJZXJyID0gdWRldl9ldmVudF9leGVjdXRlX3J1bGVzKGV2ZW50LCBydWxlcyk7CisJCS8qIGlu aXRpYWwgZGV2aWNlICovCisJCWRldiA9IGV2ZW50LT5kZXY7CiAKLQkJLyogcnVsZXMgbWF5IGNo YW5nZS9kaXNhYmxlIHRoZSB0aW1lb3V0ICovCi0JCWlmICh1ZGV2X2RldmljZV9nZXRfZXZlbnRf dGltZW91dChldmVudC0+ZGV2KSA+PSAwKQotCQkJYWxhcm0odWRldl9kZXZpY2VfZ2V0X2V2ZW50 X3RpbWVvdXQoZXZlbnQtPmRldikpOworCQl3aGlsZSAoIXdvcmtlcl9leGl0KSB7CisJCQlzdHJ1 Y3QgdWRldl9ldmVudCAqdWRldl9ldmVudDsKKwkJCXN0cnVjdCB3b3JrZXJfbWVzc2FnZSBtc2c7 CisJCQlpbnQgZXJyOwogCi0JCS8qIGV4ZWN1dGUgUlVOPSAqLwotCQlpZiAoZXJyID09IDAgJiYg IWV2ZW50LT5pZ25vcmVfZGV2aWNlICYmIHVkZXZfZ2V0X3J1bihldmVudC0+dWRldikpCi0JCQl1 ZGV2X2V2ZW50X2V4ZWN1dGVfcnVuKGV2ZW50KTsKKwkJCXVkZXZfZXZlbnQgPSB1ZGV2X2V2ZW50 X25ldyhkZXYpOworCQkJaWYgKHVkZXZfZXZlbnQgPT0gTlVMTCkKKwkJCQlfZXhpdCgzKTsKIAot CQkvKiBhcHBseS9yZXN0b3JlIGlub3RpZnkgd2F0Y2ggKi8KLQkJaWYgKGVyciA9PSAwICYmIGV2 ZW50LT5pbm90aWZ5X3dhdGNoKSB7Ci0JCQl1ZGV2X3dhdGNoX2JlZ2luKGV2ZW50LT51ZGV2LCBl dmVudC0+ZGV2KTsKLQkJCXVkZXZfZGV2aWNlX3VwZGF0ZV9kYihldmVudC0+ZGV2KTsKLQkJfQor CQkJLyogc2V0IHRpbWVvdXQgdG8gcHJldmVudCBoYW5naW5nIHByb2Nlc3NlcyAqLworCQkJYWxh cm0oVURFVl9FVkVOVF9USU1FT1VUKTsKKworCQkJLyogYXBwbHkgcnVsZXMsIGNyZWF0ZSBub2Rl LCBzeW1saW5rcyAqLworCQkJZXJyID0gdWRldl9ldmVudF9leGVjdXRlX3J1bGVzKHVkZXZfZXZl bnQsIHJ1bGVzKTsKKworCQkJLyogcnVsZXMgbWF5IGNoYW5nZS9kaXNhYmxlIHRoZSB0aW1lb3V0 ICovCisJCQlpZiAodWRldl9kZXZpY2VfZ2V0X2V2ZW50X3RpbWVvdXQoZGV2KSA+PSAwKQorCQkJ CWFsYXJtKHVkZXZfZGV2aWNlX2dldF9ldmVudF90aW1lb3V0KGRldikpOworCisJCQkvKiBleGVj dXRlIFJVTj0gKi8KKwkJCWlmIChlcnIgPT0gMCAmJiAhdWRldl9ldmVudC0+aWdub3JlX2Rldmlj ZSAmJiB1ZGV2X2dldF9ydW4odWRldl9ldmVudC0+dWRldikpCisJCQkJdWRldl9ldmVudF9leGVj dXRlX3J1bih1ZGV2X2V2ZW50KTsKKworCQkJLyogcmVzZXQgYWxhcm0gKi8KKwkJCWFsYXJtKDAp OworCisJCQkvKiBhcHBseS9yZXN0b3JlIGlub3RpZnkgd2F0Y2ggKi8KKwkJCWlmIChlcnIgPT0g MCAmJiB1ZGV2X2V2ZW50LT5pbm90aWZ5X3dhdGNoKSB7CisJCQkJdWRldl93YXRjaF9iZWdpbih1 ZGV2X2V2ZW50LT51ZGV2LCBkZXYpOworCQkJCXVkZXZfZGV2aWNlX3VwZGF0ZV9kYihkZXYpOwor CQkJfQorCisJCQkvKiBzZW5kIHByb2Nlc3NlZCBldmVudCBiYWNrIHRvIGxpYnVkZXYgbGlzdGVu ZXJzICovCisJCQl1ZGV2X21vbml0b3Jfc2VuZF9kZXZpY2UobW9uaXRvciwgZGV2LCAwKTsKKwor CQkJaW5mbyhldmVudC0+dWRldiwgInNlcSAlbGx1IGZpbmlzaGVkIHdpdGggJWlcbiIsIHVkZXZf ZGV2aWNlX2dldF9zZXFudW0oZGV2KSwgZXJyKTsKKwkJCXVkZXZfZGV2aWNlX3VucmVmKGRldik7 CisJCQl1ZGV2X2V2ZW50X3VucmVmKHVkZXZfZXZlbnQpOworCisJCQkvKiBzZW5kIGJhY2sgdGhl IHJlc3VsdCBvZiB0aGUgZXZlbnQgZXhlY3V0aW9uICovCisJCQltc2cuZXhpdGNvZGUgPSBlcnI7 CisJCQltc2cucGlkID0gZ2V0cGlkKCk7CisJCQlzZW5kKHdvcmtlcl9zb2NrZXRbV1JJVEVfRU5E XSwgJm1zZywgc2l6ZW9mKHN0cnVjdCB3b3JrZXJfbWVzc2FnZSksIDApOwogCi0JCS8qIHNlbmQg cHJvY2Vzc2VkIGV2ZW50IGJhY2sgdG8gdGhlIGtlcm5lbCBuZXRsaW5rIHNvY2tldCAqLwotCQl1 ZGV2X21vbml0b3Jfc2VuZF9kZXZpY2Uoa2VybmVsX21vbml0b3IsIGV2ZW50LT5kZXYpOworCQkJ Lyogd2FpdCBmb3IgbW9yZSBkZXZpY2UgbWVzc2FnZXMgZnJvbSB1ZGV2ZCAqLworCQkJZG8KKwkJ CQlkZXYgPSB1ZGV2X21vbml0b3JfcmVjZWl2ZV9kZXZpY2UobW9uaXRvcik7CisJCQl3aGlsZSAo IXdvcmtlcl9leGl0ICYmIGRldiA9PSBOVUxMKTsKKwkJfQogCi0JCWluZm8oZXZlbnQtPnVkZXYs ICJzZXEgJWxsdSBleGl0IHdpdGggJWlcbiIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZXZlbnQt PmRldiksIGVycik7CisJCXVkZXZfbW9uaXRvcl91bnJlZihtb25pdG9yKTsKIAkJbG9nZ2luZ19j bG9zZSgpOwotCQlpZiAoZXJyICE9IDApCi0JCQlleGl0KDEpOwogCQlleGl0KDApOworCX0KIAlj YXNlIC0xOgorCQlldmVudC0+c3RhdGUgPSBFVkVOVF9RVUVVRUQ7CisJCWZyZWUod29ya2VyKTsK IAkJZXJyKGV2ZW50LT51ZGV2LCAiZm9yayBvZiBjaGlsZCBmYWlsZWQ6ICVtXG4iKTsKLQkJZXZl bnRfcXVldWVfZGVsZXRlKGV2ZW50KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJLyogZ2V0IFNJ R0NITEQgaW4gbWFpbiBsb29wICovCi0JCWluZm8oZXZlbnQtPnVkZXYsICJzZXEgJWxsdSBmb3Jr ZWQsIHBpZCBbJWRdLCAnJXMnICclcycsICVsZCBzZWNvbmRzIG9sZFxuIiwKLQkJICAgICB1ZGV2 X2RldmljZV9nZXRfc2VxbnVtKGV2ZW50LT5kZXYpLAotCQkgICAgIHBpZCwKLQkJICAgICB1ZGV2 X2RldmljZV9nZXRfYWN0aW9uKGV2ZW50LT5kZXYpLAotCQkgICAgIHVkZXZfZGV2aWNlX2dldF9z dWJzeXN0ZW0oZXZlbnQtPmRldiksCi0JCSAgICAgdGltZShOVUxMKSAtIGV2ZW50LT5xdWV1ZV90 aW1lKTsKLQkJZXZlbnQtPnBpZCA9IHBpZDsKKwkJZXZlbnQtPnN0YXRlID0gRVZFTlRfUlVOTklO RzsKKwkJd29ya2VyLT5ldmVudCA9IGV2ZW50OworCQl3b3JrZXItPnBpZCA9IHBpZDsKKwkJd29y a2VyLT5zdGF0ZSA9IFdPUktFUl9SVU5OSU5HOworCQl1ZGV2X2xpc3Rfbm9kZV9hcHBlbmQoJndv cmtlci0+bm9kZSwgJndvcmtlcl9saXN0KTsKIAkJY2hpbGRzKys7CisJCWJyZWFrOwogCX0KIH0K IAotc3RhdGljIHZvaWQgZXZlbnRfcXVldWVfaW5zZXJ0KHN0cnVjdCB1ZGV2X2V2ZW50ICpldmVu dCkKK3N0YXRpYyB2b2lkIGV2ZW50X3J1bihzdHJ1Y3QgZXZlbnQgKmV2ZW50KQogewotCWV2ZW50 LT5xdWV1ZV90aW1lID0gdGltZShOVUxMKTsKKwlzdHJ1Y3QgdWRldl9saXN0X25vZGUgKmxvb3A7 CiAKLQl1ZGV2X3F1ZXVlX2V4cG9ydF9kZXZpY2VfcXVldWVkKHVkZXZfcXVldWVfZXhwb3J0LCBl dmVudC0+ZGV2KTsKLQlpbmZvKGV2ZW50LT51ZGV2LCAic2VxICVsbHUgcXVldWVkLCAnJXMnICcl cydcbiIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZXZlbnQtPmRldiksCi0JICAgICB1ZGV2X2Rl dmljZV9nZXRfYWN0aW9uKGV2ZW50LT5kZXYpLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGV2 ZW50LT5kZXYpKTsKKwl1ZGV2X2xpc3Rfbm9kZV9mb3JlYWNoKGxvb3AsICZ3b3JrZXJfbGlzdCkg eworCQlzdHJ1Y3Qgd29ya2VyICp3b3JrZXIgPSBub2RlX3RvX3dvcmtlcihsb29wKTsKKwkJc3Np emVfdCBjb3VudDsKIAorCQlpZiAod29ya2VyLT5zdGF0ZSAhPSBXT1JLRVJfSURMRSkKKwkJCWNv bnRpbnVlOworCisJCXdvcmtlci0+ZXZlbnQgPSBldmVudDsKKwkJd29ya2VyLT5zdGF0ZSA9IFdP UktFUl9SVU5OSU5HOworCQlldmVudC0+c3RhdGUgPSBFVkVOVF9SVU5OSU5HOworCQljb3VudCA9 IHVkZXZfbW9uaXRvcl9zZW5kX2RldmljZShtb25pdG9yLCBldmVudC0+ZGV2LCB3b3JrZXItPnBp ZCk7CisJCWlmIChjb3VudCA8IDApIHsKKwkJCWVycihldmVudC0+dWRldiwgIndvcmtlciBbJXVd IGRpZCBub3QgYWNjZXB0IG1lc3NhZ2UsIGtpbGwgaXRcbiIsIHdvcmtlci0+cGlkKTsKKwkJCWV2 ZW50LT5zdGF0ZSA9IEVWRU5UX1FVRVVFRDsKKwkJCXdvcmtlci0+c3RhdGUgPSBXT1JLRVJfS0lM TEVEOworCQkJa2lsbCh3b3JrZXItPnBpZCwgU0lHS0lMTCk7CisJCQljb250aW51ZTsKKwkJfQor CQlyZXR1cm47CisJfQorCisJaWYgKGNoaWxkcyA+PSBtYXhfY2hpbGRzKSB7CisJCWluZm8oZXZl bnQtPnVkZXYsICJtYXhpbXVtIG51bWJlciAoJWkpIG9mIGNoaWxkcyByZWFjaGVkXG4iLCBjaGls ZHMpOworCQlyZXR1cm47CisJfQorCisJLyogc3RhcnQgbmV3IHdvcmtlciBhbmQgcGFzcyBpbml0 aWFsIGRldmljZSAqLworCXdvcmtlcl9uZXcoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBldmVu dF9xdWV1ZV9pbnNlcnQoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV2ZW50 ICpldmVudDsKKworCWV2ZW50ID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZXZlbnQpKTsKKwlp ZiAoZXZlbnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZXZlbnQtPnVkZXYgPSB1ZGV2X2Rldmlj ZV9nZXRfdWRldihkZXYpOworCWV2ZW50LT5kZXYgPSBkZXY7CisJdWRldl9xdWV1ZV9leHBvcnRf ZGV2aWNlX3F1ZXVlZCh1ZGV2X3F1ZXVlX2V4cG9ydCwgZGV2KTsKKwlpbmZvKGV2ZW50LT51ZGV2 LCAic2VxICVsbHUgcXVldWVkLCAnJXMnICclcydcbiIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0o ZGV2KSwKKwkgICAgIHVkZXZfZGV2aWNlX2dldF9hY3Rpb24oZGV2KSwgdWRldl9kZXZpY2VfZ2V0 X3N1YnN5c3RlbShkZXYpKTsKKworCWV2ZW50LT5zdGF0ZSA9IEVWRU5UX1FVRVVFRDsKIAl1ZGV2 X2xpc3Rfbm9kZV9hcHBlbmQoJmV2ZW50LT5ub2RlLCAmZXZlbnRfbGlzdCk7Ci0JcnVuX2V4ZWNf cSA9IDE7CiAKIAkvKiBydW4gYWxsIGV2ZW50cyB3aXRoIGEgdGltZW91dCBzZXQgaW1tZWRpYXRl bHkgKi8KLQlpZiAodWRldl9kZXZpY2VfZ2V0X3RpbWVvdXQoZXZlbnQtPmRldikgPiAwKSB7Ci0J CWV2ZW50X2ZvcmsoZXZlbnQpOworCWlmICh1ZGV2X2RldmljZV9nZXRfdGltZW91dChkZXYpID4g MCkgeworCQl3b3JrZXJfbmV3KGV2ZW50KTsKIAkJcmV0dXJuOwogCX0KIH0KIAorc3RhdGljIHZv aWQgd29ya2VyX2tpbGxfaWRsZSh2b2lkKQoreworCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbG9v cDsKKworCXVkZXZfbGlzdF9ub2RlX2ZvcmVhY2gobG9vcCwgJndvcmtlcl9saXN0KSB7CisJCXN0 cnVjdCB3b3JrZXIgKndvcmtlciA9IG5vZGVfdG9fd29ya2VyKGxvb3ApOworCisJCWlmICh3b3Jr ZXItPnN0YXRlICE9IFdPUktFUl9JRExFKQorCQkJY29udGludWU7CisKKwkJd29ya2VyLT5zdGF0 ZSA9IFdPUktFUl9LSUxMRUQ7CisJCWtpbGwod29ya2VyLT5waWQsIFNJR1RFUk0pOworCX0KK30K Kwogc3RhdGljIGludCBtZW1fc2l6ZV9tYih2b2lkKQogewogCUZJTEUgKmY7CkBAIC0yNjUsMTMg KzQxMSwxMyBAQCBzdGF0aWMgaW50IGNvbXBhcmVfZGV2cGF0aChjb25zdCBjaGFyICpydW5uaW5n LCBjb25zdCBjaGFyICp3YWl0aW5nKQogfQogCiAvKiBsb29rdXAgZXZlbnQgZm9yIGlkZW50aWNh bCwgcGFyZW50LCBjaGlsZCBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgZGV2cGF0aF9idXN5KHN0cnVj dCB1ZGV2X2V2ZW50ICpldmVudCkKK3N0YXRpYyBpbnQgZGV2cGF0aF9idXN5KHN0cnVjdCBldmVu dCAqZXZlbnQpCiB7CiAJc3RydWN0IHVkZXZfbGlzdF9ub2RlICpsb29wOwogCiAJLyogY2hlY2sg aWYgcXVldWUgY29udGFpbnMgZXZlbnRzIHdlIGRlcGVuZCBvbiAqLwogCXVkZXZfbGlzdF9ub2Rl X2ZvcmVhY2gobG9vcCwgJmV2ZW50X2xpc3QpIHsKLQkJc3RydWN0IHVkZXZfZXZlbnQgKmxvb3Bf ZXZlbnQgPSBub2RlX3RvX2V2ZW50KGxvb3ApOworCQlzdHJ1Y3QgZXZlbnQgKmxvb3BfZXZlbnQg PSBub2RlX3RvX2V2ZW50KGxvb3ApOwogCiAJCS8qIHdlIGFscmVhZHkgZm91bmQgYSBsYXRlciBl dmVudCwgZWFybGllciBjYW4gbm90IGJsb2NrIHVzLCBubyBuZWVkIHRvIGNoZWNrIGFnYWluICov CiAJCWlmICh1ZGV2X2RldmljZV9nZXRfc2VxbnVtKGxvb3BfZXZlbnQtPmRldikgPCBldmVudC0+ ZGVsYXlpbmdfc2VxbnVtKQpAQCAtMzA1LDUyICs0NTEsNiBAQCBzdGF0aWMgaW50IGRldnBhdGhf YnVzeShzdHJ1Y3QgdWRldl9ldmVudCAqZXZlbnQpCiAJcmV0dXJuIDA7CiB9CiAKLS8qIHNlcmlh bGl6ZXMgZXZlbnRzIGZvciB0aGUgaWRlbnRpY2FsIGFuZCBwYXJlbnQgYW5kIGNoaWxkIGRldmlj ZXMgKi8KLXN0YXRpYyB2b2lkIGV2ZW50X3F1ZXVlX21hbmFnZXIoc3RydWN0IHVkZXYgKnVkZXYp Ci17Ci0Jc3RydWN0IHVkZXZfbGlzdF9ub2RlICpsb29wOwotCXN0cnVjdCB1ZGV2X2xpc3Rfbm9k ZSAqdG1wOwotCi1zdGFydF9vdmVyOgotCWlmICh1ZGV2X2xpc3RfaXNfZW1wdHkoJmV2ZW50X2xp c3QpKSB7Ci0JCWlmIChjaGlsZHMgPiAwKSB7Ci0JCQllcnIodWRldiwgImV2ZW50IGxpc3QgZW1w dHksIGJ1dCBjaGlsZHMgY291bnQgaXMgJWkiLCBjaGlsZHMpOwotCQkJY2hpbGRzID0gMDsKLQkJ fQotCQlyZXR1cm47Ci0JfQotCi0JdWRldl9saXN0X25vZGVfZm9yZWFjaF9zYWZlKGxvb3AsIHRt cCwgJmV2ZW50X2xpc3QpIHsKLQkJc3RydWN0IHVkZXZfZXZlbnQgKmxvb3BfZXZlbnQgPSBub2Rl X3RvX2V2ZW50KGxvb3ApOwotCi0JCWlmIChjaGlsZHMgPj0gbWF4X2NoaWxkcykgewotCQkJaW5m byh1ZGV2LCAibWF4aW11bSBudW1iZXIgKCVpKSBvZiBjaGlsZHMgcmVhY2hlZFxuIiwgY2hpbGRz KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGxvb3BfZXZlbnQtPnBpZCAhPSAwKQotCQkJY29u dGludWU7Ci0KLQkJLyogZG8gbm90IHN0YXJ0IGV2ZW50IGlmIHBhcmVudCBvciBjaGlsZCBldmVu dCBpcyBzdGlsbCBydW5uaW5nICovCi0JCWlmIChkZXZwYXRoX2J1c3kobG9vcF9ldmVudCkgIT0g MCkgewotCQkJZGJnKHVkZXYsICJkZWxheSBzZXEgJWxsdSAoJXMpXG4iLAotCQkJICAgIHVkZXZf ZGV2aWNlX2dldF9zZXFudW0obG9vcF9ldmVudC0+ZGV2KSwKLQkJCSAgICB1ZGV2X2RldmljZV9n ZXRfZGV2cGF0aChsb29wX2V2ZW50LT5kZXYpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZXZl bnRfZm9yayhsb29wX2V2ZW50KTsKLQkJZGJnKHVkZXYsICJtb3ZlZCBzZXEgJWxsdSB0byBydW5u aW5nIGxpc3RcbiIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0obG9vcF9ldmVudC0+ZGV2KSk7Ci0K LQkJLyogcmV0cnkgaWYgZXZlbnRzIGZpbmlzaGVkIGluIHRoZSBtZWFudGltZSAqLwotCQlpZiAo c2lnY2hpbGRzX3dhaXRpbmcpIHsKLQkJCXNpZ2NoaWxkc193YWl0aW5nID0gMDsKLQkJCXJlYXBf c2lnY2hpbGRzKCk7Ci0JCQlnb3RvIHN0YXJ0X292ZXI7Ci0JCX0KLQl9Ci19Ci0KIC8qIHJlY2Vp dmUgdGhlIHVkZXZkIG1lc3NhZ2UgZnJvbSB1c2Vyc3BhY2UgKi8KIHN0YXRpYyB2b2lkIGhhbmRs ZV9jdHJsX21zZyhzdHJ1Y3QgdWRldl9jdHJsICp1Y3RybCkKIHsKQEAgLTM3MSwxMyArNDcxLDEy IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9jdHJsX21zZyhzdHJ1Y3QgdWRldl9jdHJsICp1Y3RybCkK IAogCWlmICh1ZGV2X2N0cmxfZ2V0X3N0b3BfZXhlY19xdWV1ZShjdHJsX21zZykgPiAwKSB7CiAJ CWluZm8odWRldiwgInVkZXZkIG1lc3NhZ2UgKFNUT1BfRVhFQ19RVUVVRSkgcmVjZWl2ZWRcbiIp OwotCQlzdG9wX2V4ZWNfcSA9IDE7CisJCXN0b3BfZXhlY19xdWV1ZSA9IDE7CiAJfQogCiAJaWYg KHVkZXZfY3RybF9nZXRfc3RhcnRfZXhlY19xdWV1ZShjdHJsX21zZykgPiAwKSB7CiAJCWluZm8o dWRldiwgInVkZXZkIG1lc3NhZ2UgKFNUQVJUX0VYRUNfUVVFVUUpIHJlY2VpdmVkXG4iKTsKLQkJ c3RvcF9leGVjX3EgPSAwOwotCQlldmVudF9xdWV1ZV9tYW5hZ2VyKHVkZXYpOworCQlzdG9wX2V4 ZWNfcXVldWUgPSAwOwogCX0KIAogCWlmICh1ZGV2X2N0cmxfZ2V0X3JlbG9hZF9ydWxlcyhjdHJs X21zZykgPiAwKSB7CkBAIC00MjAsNiArNTE5LDggQEAgc3RhdGljIHZvaWQgaGFuZGxlX2N0cmxf bXNnKHN0cnVjdCB1ZGV2X2N0cmwgKnVjdHJsKQogCXNldHRsZV9waWQgPSB1ZGV2X2N0cmxfZ2V0 X3NldHRsZShjdHJsX21zZyk7CiAJaWYgKHNldHRsZV9waWQgPiAwKSB7CiAJCWluZm8odWRldiwg InVkZXZkIG1lc3NhZ2UgKFNFVFRMRSkgcmVjZWl2ZWRcbiIpOworCQlraWxsKHNldHRsZV9waWQs IFNJR1VTUjEpOworCQlzZXR0bGVfcGlkID0gMDsKIAl9CiAJdWRldl9jdHJsX21zZ191bnJlZihj dHJsX21zZyk7CiB9CkBAIC00MjcsMjIgKzUyOCwyMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfY3Ry bF9tc2coc3RydWN0IHVkZXZfY3RybCAqdWN0cmwpCiAvKiByZWFkIGlub3RpZnkgbWVzc2FnZXMg Ki8KIHN0YXRpYyBpbnQgaGFuZGxlX2lub3RpZnkoc3RydWN0IHVkZXYgKnVkZXYpCiB7Ci0JaW50 IG5ieXRlcywgcG9zOworCXNzaXplX3QgbmJ5dGVzLCBwb3M7CiAJY2hhciAqYnVmOwogCXN0cnVj dCBpbm90aWZ5X2V2ZW50ICpldjsKIAotCWlmICgoaW9jdGwoaW5vdGlmeV9mZCwgRklPTlJFQUQs ICZuYnl0ZXMpIDwgMCkgfHwgKG5ieXRlcyA8PSAwKSkKKwlpZiAoKGlvY3RsKHBmZFtGRF9JTk9U SUZZXS5mZCwgRklPTlJFQUQsICZuYnl0ZXMpIDwgMCkgfHwgKG5ieXRlcyA8PSAwKSkKIAkJcmV0 dXJuIDA7CiAKIAlidWYgPSBtYWxsb2MobmJ5dGVzKTsKIAlpZiAoYnVmID09IE5VTEwpIHsKIAkJ ZXJyKHVkZXYsICJlcnJvciBnZXR0aW5nIGJ1ZmZlciBmb3IgaW5vdGlmeSwgZGlzYWJsZSB3YXRj aGluZ1xuIik7Ci0JCWNsb3NlKGlub3RpZnlfZmQpOwotCQlpbm90aWZ5X2ZkID0gLTE7Ci0JCXJl dHVybiAwOworCQlyZXR1cm4gLTE7CiAJfQogCi0JcmVhZChpbm90aWZ5X2ZkLCBidWYsIG5ieXRl cyk7CisJbmJ5dGVzID0gcmVhZChwZmRbRkRfSU5PVElGWV0uZmQsIGJ1ZiwgbmJ5dGVzKTsKIAog CWZvciAocG9zID0gMDsgcG9zIDwgbmJ5dGVzOyBwb3MgKz0gc2l6ZW9mKHN0cnVjdCBpbm90aWZ5 X2V2ZW50KSArIGV2LT5sZW4pIHsKIAkJc3RydWN0IHVkZXZfZGV2aWNlICpkZXY7CkBAIC00ODAs NzEgKzU3OSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lub3RpZnkoc3RydWN0IHVkZXYgKnVkZXYp CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNpZ19oYW5kbGVyKGludCBzaWdudW0pCi17 Ci0Jc3dpdGNoIChzaWdudW0pIHsKLQkJY2FzZSBTSUdJTlQ6Ci0JCWNhc2UgU0lHVEVSTToKLQkJ CXVkZXZfZXhpdCA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBTSUdDSExEOgotCQkJLyogc2V0IGZs YWcsIHRoZW4gd3JpdGUgdG8gcGlwZSBpZiBuZWVkZWQgKi8KLQkJCXNpZ2NoaWxkc193YWl0aW5n ID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIFNJR0hVUDoKLQkJCXJlbG9hZF9jb25maWcgPSAxOwot CQkJYnJlYWs7Ci0JfQotCi0Jc2lnbmFsX3JlY2VpdmVkID0gMTsKLX0KLQotc3RhdGljIHZvaWQg dWRldl9kb25lKGludCBwaWQsIGludCBleGl0c3RhdHVzKQotewotCXN0cnVjdCB1ZGV2X2xpc3Rf bm9kZSAqbG9vcDsKLQotCS8qIGZpbmQgZXZlbnQgYXNzb2NpYXRlZCB3aXRoIHBpZCBhbmQgZGVs ZXRlIGl0ICovCi0JdWRldl9saXN0X25vZGVfZm9yZWFjaChsb29wLCAmZXZlbnRfbGlzdCkgewot CQlzdHJ1Y3QgdWRldl9ldmVudCAqbG9vcF9ldmVudCA9IG5vZGVfdG9fZXZlbnQobG9vcCk7Ci0K LQkJaWYgKGxvb3BfZXZlbnQtPnBpZCA9PSBwaWQpIHsKLQkJCWluZm8obG9vcF9ldmVudC0+dWRl diwgInNlcSAlbGx1IGNsZWFudXAsIHBpZCBbJWRdLCBzdGF0dXMgJWksICVsZCBzZWNvbmRzIG9s ZFxuIiwKLQkJCSAgICAgdWRldl9kZXZpY2VfZ2V0X3NlcW51bShsb29wX2V2ZW50LT5kZXYpLCBs b29wX2V2ZW50LT5waWQsCi0JCQkgICAgIGV4aXRzdGF0dXMsIHRpbWUoTlVMTCkgLSBsb29wX2V2 ZW50LT5xdWV1ZV90aW1lKTsKLQkJCWxvb3BfZXZlbnQtPmV4aXRzdGF0dXMgPSBleGl0c3RhdHVz OwotCQkJaWYgKGRlYnVnX3RyYWNlKQotCQkJCWZwcmludGYoc3RkZXJyLCAiZXhpdCAlcyAoJWxs dSlcbiIsCi0JCQkJICAgICAgIHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGxvb3BfZXZlbnQtPmRl diksCi0JCQkJICAgICAgIHVkZXZfZGV2aWNlX2dldF9zZXFudW0obG9vcF9ldmVudC0+ZGV2KSk7 Ci0JCQlldmVudF9xdWV1ZV9kZWxldGUobG9vcF9ldmVudCk7Ci0JCQljaGlsZHMtLTsKLQotCQkJ LyogdGhlcmUgbWF5IGJlIGRlcGVuZGVudCBldmVudHMgd2FpdGluZyAqLwotCQkJcnVuX2V4ZWNf cSA9IDE7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlYXBfc2lnY2hp bGRzKHZvaWQpCi17Ci0JcGlkX3QgcGlkOwotCWludCBzdGF0dXM7Ci0KLQl3aGlsZSAoMSkgewot CQlwaWQgPSB3YWl0cGlkKC0xLCAmc3RhdHVzLCBXTk9IQU5HKTsKLQkJaWYgKHBpZCA8PSAwKQot CQkJYnJlYWs7Ci0JCWlmIChXSUZFWElURUQoc3RhdHVzKSkKLQkJCXN0YXR1cyA9IFdFWElUU1RB VFVTKHN0YXR1cyk7Ci0JCWVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpCi0JCQlzdGF0dXMg PSBXVEVSTVNJRyhzdGF0dXMpICsgMTI4OwotCQllbHNlCi0JCQlzdGF0dXMgPSAwOwotCQl1ZGV2 X2RvbmUocGlkLCBzdGF0dXMpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgc3RhcnR1cF9sb2coc3Ry dWN0IHVkZXYgKnVkZXYpCiB7CiAJRklMRSAqZjsKQEAgLTU3Niw3ICs2MTAsNyBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXN0cnVjdCB1ZGV2ICp1ZGV2OwogCWludCBm ZDsKLQlzdHJ1Y3Qgc2lnYWN0aW9uIGFjdDsKKwlzaWdzZXRfdCBtYXNrOwogCWNvbnN0IGNoYXIg KnZhbHVlOwogCWludCBkYWVtb25pemUgPSAwOwogCWludCByZXNvbHZlX25hbWVzID0gMTsKQEAg LTY2OSwyOSArNzAzLDc2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXJj ID0gMTsKIAkJZ290byBleGl0OwogCX0KLQogCWlmICh1ZGV2X2N0cmxfZW5hYmxlX3JlY2Vpdmlu Zyh1ZGV2X2N0cmwpIDwgMCkgewogCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIGJpbmRpbmcgY29u dHJvbCBzb2NrZXQsIHNlZW1zIHVkZXZkIGlzIGFscmVhZHkgcnVubmluZ1xuIik7CiAJCWVycih1 ZGV2LCAiZXJyb3IgYmluZGluZyBjb250cm9sIHNvY2tldCwgc2VlbXMgdWRldmQgaXMgYWxyZWFk eSBydW5uaW5nXG4iKTsKIAkJcmMgPSAxOwogCQlnb3RvIGV4aXQ7CiAJfQorCXBmZFtGRF9DT05U Uk9MXS5mZCA9IHVkZXZfY3RybF9nZXRfZmQodWRldl9jdHJsKTsKIAotCWtlcm5lbF9tb25pdG9y ID0gdWRldl9tb25pdG9yX25ld19mcm9tX25ldGxpbmsodWRldiwgImtlcm5lbCIpOwotCWlmIChr ZXJuZWxfbW9uaXRvciA9PSBOVUxMIHx8IHVkZXZfbW9uaXRvcl9lbmFibGVfcmVjZWl2aW5nKGtl cm5lbF9tb25pdG9yKSA8IDApIHsKKwltb25pdG9yID0gdWRldl9tb25pdG9yX25ld19mcm9tX25l dGxpbmsodWRldiwgImtlcm5lbCIpOworCWlmIChtb25pdG9yID09IE5VTEwgfHwgdWRldl9tb25p dG9yX2VuYWJsZV9yZWNlaXZpbmcobW9uaXRvcikgPCAwKSB7CiAJCWZwcmludGYoc3RkZXJyLCAi ZXJyb3IgaW5pdGlhbGl6aW5nIG5ldGxpbmsgc29ja2V0XG4iKTsKIAkJZXJyKHVkZXYsICJlcnJv ciBpbml0aWFsaXppbmcgbmV0bGluayBzb2NrZXRcbiIpOwogCQlyYyA9IDM7CiAJCWdvdG8gZXhp dDsKIAl9Ci0JdWRldl9tb25pdG9yX3NldF9yZWNlaXZlX2J1ZmZlcl9zaXplKGtlcm5lbF9tb25p dG9yLCAxMjgqMTAyNCoxMDI0KTsKKwl1ZGV2X21vbml0b3Jfc2V0X3JlY2VpdmVfYnVmZmVyX3Np emUobW9uaXRvciwgMTI4KjEwMjQqMTAyNCk7CisJcGZkW0ZEX05FVExJTktdLmZkID0gdWRldl9t b25pdG9yX2dldF9mZChtb25pdG9yKTsKKworCXBmZFtGRF9JTk9USUZZXS5mZCA9IHVkZXZfd2F0 Y2hfaW5pdCh1ZGV2KTsKKwlpZiAocGZkW0ZEX0lOT1RJRlldLmZkIDwgMCkgeworCQlmcHJpbnRm KHN0ZGVyciwgImVycm9yIGluaXRpYWxpemluZyBpbm90aWZ5XG4iKTsKKwkJZXJyKHVkZXYsICJl cnJvciBpbml0aWFsaXppbmcgaW5vdGlmeVxuIik7CisJCXJjID0gNDsKKwkJZ290byBleGl0Owor CX0KKworCWlmICh1ZGV2X2dldF9ydWxlc19wYXRoKHVkZXYpICE9IE5VTEwpIHsKKwkJaW5vdGlm eV9hZGRfd2F0Y2gocGZkW0ZEX05FVExJTktdLmZkLCB1ZGV2X2dldF9ydWxlc19wYXRoKHVkZXYp LAorCQkJCSAgSU5fQ1JFQVRFIHwgSU5fREVMRVRFIHwgSU5fTU9WRSB8IElOX0NMT1NFX1dSSVRF KTsKKwl9IGVsc2UgeworCQljaGFyIGZpbGVuYW1lW1VUSUxfUEFUSF9TSVpFXTsKKworCQlpbm90 aWZ5X2FkZF93YXRjaChwZmRbRkRfTkVUTElOS10uZmQsIFVERVZfUFJFRklYICIvbGliL3VkZXYv cnVsZXMuZCIsCisJCQkJICBJTl9DUkVBVEUgfCBJTl9ERUxFVEUgfCBJTl9NT1ZFIHwgSU5fQ0xP U0VfV1JJVEUpOworCQlpbm90aWZ5X2FkZF93YXRjaChwZmRbRkRfTkVUTElOS10uZmQsIFNZU0NP TkZESVIgIi91ZGV2L3J1bGVzLmQiLAorCQkJCSAgSU5fQ1JFQVRFIHwgSU5fREVMRVRFIHwgSU5f TU9WRSB8IElOX0NMT1NFX1dSSVRFKTsKKworCQkvKiB3YXRjaCBkeW5hbWljIHJ1bGVzIGRpcmVj dG9yeSAqLworCQl1dGlsX3N0cnNjcHlsKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCB1ZGV2 X2dldF9kZXZfcGF0aCh1ZGV2KSwgIi8udWRldi9ydWxlcy5kIiwgTlVMTCk7CisJCWlub3RpZnlf YWRkX3dhdGNoKHBmZFtGRF9ORVRMSU5LXS5mZCwgZmlsZW5hbWUsCisJCQkJICBJTl9DUkVBVEUg fCBJTl9ERUxFVEUgfCBJTl9NT1ZFIHwgSU5fQ0xPU0VfV1JJVEUpOworCX0KKwl1ZGV2X3dhdGNo X3Jlc3RvcmUodWRldik7CisKKwkvKiBibG9jayBhbmQgbGlzdGVuIHRvIGFsbCBzaWduYWxzIG9u IHNpZ25hbGZkICovCisJc2lnZmlsbHNldCgmbWFzayk7CisJc2lncHJvY21hc2soU0lHX1NFVE1B U0ssICZtYXNrLCBOVUxMKTsKKwlwZmRbRkRfU0lHTkFMXS5mZCA9IHNpZ25hbGZkKC0xLCAmbWFz aywgMCk7CisJaWYgKHBmZFtGRF9TSUdOQUxdLmZkIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwg ImVycm9yIGdldHRpbmcgc2lnbmFsZmRcbiIpOworCQllcnIodWRldiwgImVycm9yIGdldHRpbmcg c2lnbmFsZmRcbiIpOworCQlyYyA9IDU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiB1bm5hbWVk IHNvY2tldCBmcm9tIHdvcmtlcnMgdG8gdGhlIG1haW4gZGFlbW9uICovCisJaWYgKHNvY2tldHBh aXIoQUZfTE9DQUwsIFNPQ0tfREdSQU0sIDAsIHdvcmtlcl9zb2NrZXQpIDwgMCkgeworCQlmcHJp bnRmKHN0ZGVyciwgImVycm9yIGdldHRpbmcgc29ja2V0cGFpclxuIik7CisJCWVycih1ZGV2LCAi ZXJyb3IgZ2V0dGluZyBzb2NrZXRwYWlyXG4iKTsKKwkJcmMgPSA2OworCQlnb3RvIGV4aXQ7CisJ fQorCXBmZFtGRF9XT1JLRVJdLmZkID0gd29ya2VyX3NvY2tldFtSRUFEX0VORF07CiAKIAlydWxl cyA9IHVkZXZfcnVsZXNfbmV3KHVkZXYsIHJlc29sdmVfbmFtZXMpOwogCWlmIChydWxlcyA9PSBO VUxMKSB7CiAJCWVycih1ZGV2LCAiZXJyb3IgcmVhZGluZyBydWxlc1xuIik7CiAJCWdvdG8gZXhp dDsKIAl9Ci0JdWRldl9saXN0X2luaXQoJmV2ZW50X2xpc3QpOworCiAJdWRldl9xdWV1ZV9leHBv cnQgPSB1ZGV2X3F1ZXVlX2V4cG9ydF9uZXcodWRldik7CiAJaWYgKHVkZXZfcXVldWVfZXhwb3J0 ID09IE5VTEwpIHsKIAkJZXJyKHVkZXYsICJlcnJvciBjcmVhdGluZyBxdWV1ZSBmaWxlXG4iKTsK QEAgLTcwNCwxOSArNzg1LDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJ CXBpZCA9IGZvcmsoKTsKIAkJc3dpdGNoIChwaWQpIHsKIAkJY2FzZSAwOgotCQkJZGJnKHVkZXYs ICJkYWVtb25pemVkIGZvcmsgcnVubmluZ1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAtMToKIAkJ CWVycih1ZGV2LCAiZm9yayBvZiBkYWVtb24gZmFpbGVkOiAlbVxuIik7CiAJCQlyYyA9IDQ7CiAJ CQlnb3RvIGV4aXQ7CiAJCWRlZmF1bHQ6Ci0JCQlkYmcodWRldiwgImNoaWxkIFsldV0gcnVubmlu ZywgcGFyZW50IGV4aXRzXG4iLCBwaWQpOwogCQkJcmMgPSAwOwogCQkJZ290byBleGl0OwogCQl9 CiAJfQogCisJc3RhcnR1cF9sb2codWRldik7CisKIAkvKiByZWRpcmVjdCBzdGR7b3V0LGVycn0g Ki8KIAlpZiAoIWRlYnVnICYmICFkZWJ1Z190cmFjZSkgewogCQlkdXAyKGZkLCBTVERJTl9GSUxF Tk8pOwpAQCAtNzQyLDE1OSArODIzLDE4OSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQljbG9zZShmZCk7CiAJfQogCi0Jc3RhcnR1cF9sb2codWRldik7Ci0KLQkvKiBzZXQg c2lnbmFsIGhhbmRsZXJzICovCi0JbWVtc2V0KCZhY3QsIDB4MDAsIHNpemVvZihzdHJ1Y3Qgc2ln YWN0aW9uKSk7Ci0JYWN0LnNhX2hhbmRsZXIgPSBzaWdfaGFuZGxlcjsKLQlzaWdlbXB0eXNldCgm YWN0LnNhX21hc2spOwotCWFjdC5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7Ci0Jc2lnYWN0aW9uKFNJ R0lOVCwgJmFjdCwgTlVMTCk7Ci0Jc2lnYWN0aW9uKFNJR1RFUk0sICZhY3QsIE5VTEwpOwotCXNp Z2FjdGlvbihTSUdDSExELCAmYWN0LCBOVUxMKTsKLQlzaWdhY3Rpb24oU0lHSFVQLCAmYWN0LCBO VUxMKTsKLQotCS8qIHdhdGNoIHJ1bGVzIGRpcmVjdG9yeSAqLwotCXVkZXZfd2F0Y2hfaW5pdCh1 ZGV2KTsKLQlpZiAoaW5vdGlmeV9mZCA+PSAwKSB7Ci0JCWlmICh1ZGV2X2dldF9ydWxlc19wYXRo KHVkZXYpICE9IE5VTEwpIHsKLQkJCWlub3RpZnlfYWRkX3dhdGNoKGlub3RpZnlfZmQsIHVkZXZf Z2V0X3J1bGVzX3BhdGgodWRldiksCi0JCQkJCSAgSU5fQ1JFQVRFIHwgSU5fREVMRVRFIHwgSU5f TU9WRSB8IElOX0NMT1NFX1dSSVRFKTsKLQkJfSBlbHNlIHsKLQkJCWNoYXIgZmlsZW5hbWVbVVRJ TF9QQVRIX1NJWkVdOwotCi0JCQlpbm90aWZ5X2FkZF93YXRjaChpbm90aWZ5X2ZkLCBVREVWX1BS RUZJWCAiL2xpYi91ZGV2L3J1bGVzLmQiLAotCQkJCQkgIElOX0NSRUFURSB8IElOX0RFTEVURSB8 IElOX01PVkUgfCBJTl9DTE9TRV9XUklURSk7Ci0JCQlpbm90aWZ5X2FkZF93YXRjaChpbm90aWZ5 X2ZkLCBTWVNDT05GRElSICIvdWRldi9ydWxlcy5kIiwKLQkJCQkJICBJTl9DUkVBVEUgfCBJTl9E RUxFVEUgfCBJTl9NT1ZFIHwgSU5fQ0xPU0VfV1JJVEUpOwotCi0JCQkvKiB3YXRjaCBkeW5hbWlj IHJ1bGVzIGRpcmVjdG9yeSAqLwotCQkJdXRpbF9zdHJzY3B5bChmaWxlbmFtZSwgc2l6ZW9mKGZp bGVuYW1lKSwgdWRldl9nZXRfZGV2X3BhdGgodWRldiksICIvLnVkZXYvcnVsZXMuZCIsIE5VTEwp OwotCQkJaW5vdGlmeV9hZGRfd2F0Y2goaW5vdGlmeV9mZCwgZmlsZW5hbWUsCi0JCQkJCSAgSU5f Q1JFQVRFIHwgSU5fREVMRVRFIHwgSU5fTU9WRSB8IElOX0NMT1NFX1dSSVRFKTsKLQkJfQotCi0J CXVkZXZfd2F0Y2hfcmVzdG9yZSh1ZGV2KTsKLQl9Ci0KIAkvKiBpbiB0cmFjZSBtb2RlIHJ1biBv bmUgZXZlbnQgYWZ0ZXIgdGhlIG90aGVyICovCiAJaWYgKGRlYnVnX3RyYWNlKSB7CiAJCW1heF9j aGlsZHMgPSAxOwogCX0gZWxzZSB7CiAJCWludCBtZW1zaXplID0gbWVtX3NpemVfbWIoKTsKKwog CQlpZiAobWVtc2l6ZSA+IDApCiAJCQltYXhfY2hpbGRzID0gMTI4ICsgKG1lbXNpemUgLyA0KTsK IAkJZWxzZQotCQkJbWF4X2NoaWxkcyA9IFVERVZEX01BWF9DSElMRFM7CisJCQltYXhfY2hpbGRz ID0gMjU2OwogCX0KKwogCS8qIHBvc3NpYmx5IG92ZXJ3cml0ZSBtYXhpbXVtIGxpbWl0IG9mIGV4 ZWN1dGVkIGV2ZW50cyAqLwogCXZhbHVlID0gZ2V0ZW52KCJVREVWRF9NQVhfQ0hJTERTIik7CiAJ aWYgKHZhbHVlKQogCQltYXhfY2hpbGRzID0gc3RydG91bCh2YWx1ZSwgTlVMTCwgMTApOwogCWlu Zm8odWRldiwgImluaXRpYWxpemUgbWF4X2NoaWxkcyB0byAldVxuIiwgbWF4X2NoaWxkcyk7CiAK Kwl1ZGV2X2xpc3RfaW5pdCgmZXZlbnRfbGlzdCk7CisJdWRldl9saXN0X2luaXQoJndvcmtlcl9s aXN0KTsKKwogCXdoaWxlICghdWRldl9leGl0KSB7Ci0JCXNpZ3NldF90IGJsb2NrZWRfbWFzaywg b3JpZ19tYXNrOwotCQlzdHJ1Y3QgcG9sbGZkIHBmZFs0XTsKLQkJc3RydWN0IHBvbGxmZCAqY3Ry bF9wb2xsLCAqbW9uaXRvcl9wb2xsLCAqaW5vdGlmeV9wb2xsID0gTlVMTDsKLQkJaW50IG5mZHMg PSAwOwogCQlpbnQgZmRjb3VudDsKKwkJaW50IHRpbWVvdXQ7CiAKLQkJc2lnZmlsbHNldCgmYmxv Y2tlZF9tYXNrKTsKLQkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZibG9ja2VkX21hc2ssICZv cmlnX21hc2spOwotCQlpZiAoc2lnbmFsX3JlY2VpdmVkKSB7Ci0JCQlzaWdwcm9jbWFzayhTSUdf U0VUTUFTSywgJm9yaWdfbWFzaywgTlVMTCk7Ci0JCQlnb3RvIGhhbmRsZV9zaWduYWxzOwotCQl9 Ci0KLQkJY3RybF9wb2xsID0gJnBmZFtuZmRzKytdOwotCQljdHJsX3BvbGwtPmZkID0gdWRldl9j dHJsX2dldF9mZCh1ZGV2X2N0cmwpOwotCQljdHJsX3BvbGwtPmV2ZW50cyA9IFBPTExJTjsKLQot CQltb25pdG9yX3BvbGwgPSAmcGZkW25mZHMrK107Ci0JCW1vbml0b3JfcG9sbC0+ZmQgPSB1ZGV2 X21vbml0b3JfZ2V0X2ZkKGtlcm5lbF9tb25pdG9yKTsKLQkJbW9uaXRvcl9wb2xsLT5ldmVudHMg PSBQT0xMSU47CisJCS8qIHNldCB0aW1lb3V0IHRvIGtpbGwgaWRsZSB3b3JrZXJzICovCisJCWlm ICh1ZGV2X2xpc3RfaXNfZW1wdHkoJmV2ZW50X2xpc3QpICYmICF1ZGV2X2xpc3RfaXNfZW1wdHko Jndvcmtlcl9saXN0KSkKKwkJCXRpbWVvdXQgPSAxMCAqIDEwMDA7CisJCWVsc2UKKwkJCXRpbWVv dXQgPSAtMTsKKwkJLyogd2FpdCBmb3IgZXZlbnRzICovCisJCWZkY291bnQgPSBwb2xsKHBmZCwg QVJSQVlfU0laRShwZmQpLCB0aW1lb3V0KTsKKwkJaWYgKGZkY291bnQgPCAwKQorCQkJY29udGlu dWU7CiAKLQkJaWYgKGlub3RpZnlfZmQgPj0gMCkgewotCQkJaW5vdGlmeV9wb2xsID0gJnBmZFtu ZmRzKytdOwotCQkJaW5vdGlmeV9wb2xsLT5mZCA9IGlub3RpZnlfZmQ7Ci0JCQlpbm90aWZ5X3Bv bGwtPmV2ZW50cyA9IFBPTExJTjsKKwkJLyogdGltZW91dCAtIGtpbGwgaWRsZSB3b3JrZXJzICov CisJCWlmIChmZGNvdW50ID09IDApCisJCQl3b3JrZXJfa2lsbF9pZGxlKCk7CisKKwkJLyogZXZl bnQgaGFzIGZpbmlzaGVkICovCisJCWlmIChwZmRbRkRfV09SS0VSXS5yZXZlbnRzICYgUE9MTElO KSB7CisJCQl3aGlsZSAoMSkgeworCQkJCXN0cnVjdCB3b3JrZXJfbWVzc2FnZSBtc2c7CisJCQkJ c3NpemVfdCBzaXplOworCQkJCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbG9vcDsKKworCQkJCXNp emUgPSByZWN2KHBmZFtGRF9XT1JLRVJdLmZkLCAmbXNnLCBzaXplb2Yoc3RydWN0IHdvcmtlcl9t ZXNzYWdlKSwgTVNHX0RPTlRXQUlUKTsKKwkJCQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHdv cmtlcl9tZXNzYWdlKSkKKwkJCQkJYnJlYWs7CisKKwkJCQkvKiBsb29rdXAgd29ya2VyIHdobyBz ZW50IHRoZSBzaWduYWwgKi8KKwkJCQl1ZGV2X2xpc3Rfbm9kZV9mb3JlYWNoKGxvb3AsICZ3b3Jr ZXJfbGlzdCkgeworCQkJCQlzdHJ1Y3Qgd29ya2VyICp3b3JrZXIgPSBub2RlX3RvX3dvcmtlcihs b29wKTsKKworCQkJCQlpZiAod29ya2VyLT5waWQgIT0gbXNnLnBpZCkKKwkJCQkJCWNvbnRpbnVl OworCisJCQkJCS8qIHdvcmtlciByZXR1cm5lZCAqLworCQkJCQl3b3JrZXItPmV2ZW50LT5leGl0 Y29kZSA9IG1zZy5leGl0Y29kZTsKKwkJCQkJZXZlbnRfcXVldWVfZGVsZXRlKHdvcmtlci0+ZXZl bnQpOworCQkJCQl3b3JrZXItPmV2ZW50ID0gTlVMTDsKKwkJCQkJd29ya2VyLT5zdGF0ZSA9IFdP UktFUl9JRExFOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CiAJCX0KIAotCQlmZGNvdW50ID0g cHBvbGwocGZkLCBuZmRzLCBOVUxMLCAmb3JpZ19tYXNrKTsKLQkJc2lncHJvY21hc2soU0lHX1NF VE1BU0ssICZvcmlnX21hc2ssIE5VTEwpOwotCQlpZiAoZmRjb3VudCA8IDApIHsKLQkJCWlmIChl cnJubyA9PSBFSU5UUikKLQkJCQlnb3RvIGhhbmRsZV9zaWduYWxzOwotCQkJZXJyKHVkZXYsICJl cnJvciBpbiBzZWxlY3Q6ICVtXG4iKTsKLQkJCWNvbnRpbnVlOworCQkvKiBnZXQga2VybmVsIHVl dmVudCAqLworCQlpZiAocGZkW0ZEX05FVExJTktdLnJldmVudHMgJiBQT0xMSU4pIHsKKwkJCXN0 cnVjdCB1ZGV2X2RldmljZSAqZGV2OworCisJCQlkZXYgPSB1ZGV2X21vbml0b3JfcmVjZWl2ZV9k ZXZpY2UobW9uaXRvcik7CisJCQlpZiAoZGV2ICE9IE5VTEwpCisJCQkJZXZlbnRfcXVldWVfaW5z ZXJ0KGRldik7CisJCQllbHNlCisJCQkJdWRldl9kZXZpY2VfdW5yZWYoZGV2KTsKIAkJfQogCiAJ CS8qIGdldCBjb250cm9sIG1lc3NhZ2UgKi8KLQkJaWYgKGN0cmxfcG9sbC0+cmV2ZW50cyAmIFBP TExJTikKKwkJaWYgKHBmZFtGRF9DT05UUk9MXS5yZXZlbnRzICYgUE9MTElOKQogCQkJaGFuZGxl X2N0cmxfbXNnKHVkZXZfY3RybCk7CiAKLQkJLyogZ2V0IGtlcm5lbCB1ZXZlbnQgKi8KLQkJaWYg KG1vbml0b3JfcG9sbC0+cmV2ZW50cyAmIFBPTExJTikgewotCQkJc3RydWN0IHVkZXZfZGV2aWNl ICpkZXY7CisJCS8qIHN0YXJ0IG5ldyBldmVudHMgKi8KKwkJaWYgKCF1ZGV2X2xpc3RfaXNfZW1w dHkoJmV2ZW50X2xpc3QpICYmICFzdG9wX2V4ZWNfcXVldWUpIHsKKwkJCXN0cnVjdCB1ZGV2X2xp c3Rfbm9kZSAqbG9vcDsKIAotCQkJZGV2ID0gdWRldl9tb25pdG9yX3JlY2VpdmVfZGV2aWNlKGtl cm5lbF9tb25pdG9yKTsKLQkJCWlmIChkZXYgIT0gTlVMTCkgewotCQkJCXN0cnVjdCB1ZGV2X2V2 ZW50ICpldmVudDsKKwkJCXVkZXZfbGlzdF9ub2RlX2ZvcmVhY2gobG9vcCwgJmV2ZW50X2xpc3Qp IHsKKwkJCQlzdHJ1Y3QgZXZlbnQgKmV2ZW50ID0gbm9kZV90b19ldmVudChsb29wKTsKKworCQkJ CS8qIHNraXAgcnVubmluZyBldmVudHMgKi8KKwkJCQlpZiAoZXZlbnQtPnN0YXRlICE9IEVWRU5U X1FVRVVFRCkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBkbyBub3Qgc3RhcnQgZXZlbnQgaWYg cGFyZW50IG9yIGNoaWxkIGV2ZW50IGlzIHN0aWxsIHJ1bm5pbmcgKi8KKwkJCQlpZiAoZGV2cGF0 aF9idXN5KGV2ZW50KSAhPSAwKSB7CisJCQkJCWRiZyh1ZGV2LCAiZGVsYXkgc2VxICVsbHUgKCVz KVxuIiwKKwkJCQkJICAgIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZXZlbnQtPmRldiksCisJCQkJ CSAgICB1ZGV2X2RldmljZV9nZXRfZGV2cGF0aChldmVudC0+ZGV2KSk7CisJCQkJCWNvbnRpbnVl OworCQkJCX0KIAotCQkJCWV2ZW50ID0gdWRldl9ldmVudF9uZXcoZGV2KTsKLQkJCQlpZiAoZXZl bnQgIT0gTlVMTCkKLQkJCQkJZXZlbnRfcXVldWVfaW5zZXJ0KGV2ZW50KTsKLQkJCQllbHNlCi0J CQkJCXVkZXZfZGV2aWNlX3VucmVmKGRldik7CisJCQkJZXZlbnRfcnVuKGV2ZW50KTsKIAkJCX0K IAkJfQogCi0JCS8qIHJ1bGVzIGRpcmVjdG9yeSBpbm90aWZ5IHdhdGNoICovCi0JCWlmIChpbm90 aWZ5X3BvbGwgJiYgKGlub3RpZnlfcG9sbC0+cmV2ZW50cyAmIFBPTExJTikpCi0JCQloYW5kbGVf aW5vdGlmeSh1ZGV2KTsKKwkJLyogZ2V0IHNpZ25hbCAqLworCQlpZiAocGZkW0ZEX1NJR05BTF0u cmV2ZW50cyAmIFBPTExJTikgeworCQkJc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gZmRzaTsKKwkJ CXNzaXplX3Qgc2l6ZTsKKworCQkJc2l6ZSA9IHJlYWQocGZkW0ZEX1NJR05BTF0uZmQsICZmZHNp LCBzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pKTsKKwkJCWlmIChzaXplICE9IHNpemVv ZihzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbykpCisJCQkJY29udGludWU7CisJCQlzd2l0Y2ggKGZk c2kuc3NpX3NpZ25vKSB7CisJCQljYXNlIFNJR0lOVDoKKwkJCWNhc2UgU0lHVEVSTToKKwkJCQl1 ZGV2X2V4aXQgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBTSUdDSExEOgorCQkJCXdoaWxlICgx KSB7CisJCQkJCXBpZF90IHBpZDsKKwkJCQkJc3RydWN0IHVkZXZfbGlzdF9ub2RlICpsb29wLCAq dG1wOworCisJCQkJCXBpZCA9IHdhaXRwaWQoLTEsIE5VTEwsIFdOT0hBTkcpOworCQkJCQlpZiAo cGlkIDw9IDApCisJCQkJCQlicmVhazsKKworCQkJCQl1ZGV2X2xpc3Rfbm9kZV9mb3JlYWNoX3Nh ZmUobG9vcCwgdG1wLCAmd29ya2VyX2xpc3QpIHsKKwkJCQkJCXN0cnVjdCB3b3JrZXIgKndvcmtl ciA9IG5vZGVfdG9fd29ya2VyKGxvb3ApOworCisJCQkJCQlpZiAod29ya2VyLT5waWQgIT0gcGlk KQorCQkJCQkJCWNvbnRpbnVlOworCisJCQkJCQkvKiBmYWlsIGV2ZW50LCBpZiB3b3JrZXIgZGll ZCB1bmV4cGVjdGVkbHkgKi8KKwkJCQkJCWlmICh3b3JrZXItPmV2ZW50ICE9IE5VTEwpIHsKKwkJ CQkJCQl3b3JrZXItPmV2ZW50LT5leGl0Y29kZSA9IDEyNzsKKwkJCQkJCQlldmVudF9xdWV1ZV9k ZWxldGUod29ya2VyLT5ldmVudCk7CisJCQkJCQl9CisKKwkJCQkJCXVkZXZfbGlzdF9ub2RlX3Jl bW92ZSgmd29ya2VyLT5ub2RlKTsKKwkJCQkJCWZyZWUod29ya2VyKTsKKwkJCQkJCWNoaWxkcy0t OworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFNJR0hV UDoKKwkJCQlyZWxvYWRfY29uZmlnID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCi1oYW5k bGVfc2lnbmFsczoKLQkJc2lnbmFsX3JlY2VpdmVkID0gMDsKKwkJLyogZGV2aWNlIG5vZGUgYW5k IHJ1bGVzIGRpcmVjdG9yeSBpbm90aWZ5IHdhdGNoICovCisJCWlmIChwZmRbRkRfSU5PVElGWV0u cmV2ZW50cyAmIFBPTExJTikKKwkJCWhhbmRsZV9pbm90aWZ5KHVkZXYpOwogCiAJCS8qIHJ1bGVz IGNoYW5nZWQsIHNldCBieSBpbm90aWZ5IG9yIGEgSFVQIHNpZ25hbCAqLwogCQlpZiAocmVsb2Fk X2NvbmZpZykgewogCQkJc3RydWN0IHVkZXZfcnVsZXMgKnJ1bGVzX25ldzsKIAotCQkJcmVsb2Fk X2NvbmZpZyA9IDA7CisJCQl3b3JrZXJfa2lsbF9pZGxlKCk7CiAJCQlydWxlc19uZXcgPSB1ZGV2 X3J1bGVzX25ldyh1ZGV2LCByZXNvbHZlX25hbWVzKTsKIAkJCWlmIChydWxlc19uZXcgIT0gTlVM TCkgewogCQkJCXVkZXZfcnVsZXNfdW5yZWYocnVsZXMpOwogCQkJCXJ1bGVzID0gcnVsZXNfbmV3 OwogCQkJfQotCQl9Ci0KLQkJaWYgKHNpZ2NoaWxkc193YWl0aW5nKSB7Ci0JCQlzaWdjaGlsZHNf d2FpdGluZyA9IDA7Ci0JCQlyZWFwX3NpZ2NoaWxkcygpOwotCQl9Ci0KLQkJaWYgKHJ1bl9leGVj X3EpIHsKLQkJCXJ1bl9leGVjX3EgPSAwOwotCQkJaWYgKCFzdG9wX2V4ZWNfcSkKLQkJCQlldmVu dF9xdWV1ZV9tYW5hZ2VyKHVkZXYpOwotCQl9Ci0KLQkJaWYgKHNldHRsZV9waWQgPiAwKSB7Ci0J CQlraWxsKHNldHRsZV9waWQsIFNJR1VTUjEpOwotCQkJc2V0dGxlX3BpZCA9IDA7CisJCQlyZWxv YWRfY29uZmlnID0gMDsKIAkJfQogCX0KKwogCXVkZXZfcXVldWVfZXhwb3J0X2NsZWFudXAodWRl dl9xdWV1ZV9leHBvcnQpOwogCXJjID0gMDsKIGV4aXQ6Ci0KIAl1ZGV2X3F1ZXVlX2V4cG9ydF91 bnJlZih1ZGV2X3F1ZXVlX2V4cG9ydCk7CiAJdWRldl9ydWxlc191bnJlZihydWxlcyk7CiAJdWRl dl9jdHJsX3VucmVmKHVkZXZfY3RybCk7Ci0JaWYgKGlub3RpZnlfZmQgPj0gMCkKLQkJY2xvc2Uo aW5vdGlmeV9mZCk7Ci0JdWRldl9tb25pdG9yX3VucmVmKGtlcm5lbF9tb25pdG9yKTsKKwlpZiAo cGZkW0ZEX1NJR05BTF0uZmQgPj0gMCkKKwkJY2xvc2UocGZkW0ZEX1NJR05BTF0uZmQpOworCWlm ICh3b3JrZXJfc29ja2V0W1JFQURfRU5EXSA+PSAwKQorCQljbG9zZSh3b3JrZXJfc29ja2V0W1JF QURfRU5EXSk7CisJaWYgKHdvcmtlcl9zb2NrZXRbV1JJVEVfRU5EXSA+PSAwKQorCQljbG9zZSh3 b3JrZXJfc29ja2V0W1dSSVRFX0VORF0pOworCXVkZXZfbW9uaXRvcl91bnJlZihtb25pdG9yKTsK IAl1ZGV2X3NlbGludXhfZXhpdCh1ZGV2KTsKIAl1ZGV2X3VucmVmKHVkZXYpOwogCWxvZ2dpbmdf Y2xvc2UoKTsK --001485f85a94d9cc1e046b56648a--