From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kay Sievers Date: Mon, 01 Jun 2009 16:22:10 +0000 Subject: Re: [GIT] Experimental threaded udev Message-Id: MIME-Version: 1 Content-Type: multipart/mixed; boundary="001485f85a94e99084046b4bd49b" List-Id: References: <4A1EA138.10400@tuffmail.co.uk> In-Reply-To: <4A1EA138.10400@tuffmail.co.uk> To: linux-hotplug@vger.kernel.org --001485f85a94e99084046b4bd49b Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Mon, Jun 1, 2009 at 15:57, Kay Sievers wrote: >> The code looked like you freed the worker, but left the event RUNNING, a= nd >> it would never be released. =C2=A0I would delete the event instead, just= like the >> old system. >> >> I haven't read V2 yet though, maybe you fixed it. > > I just set it back to QUEUED for now. Not sure if droppin git or > re-trying it a few times would be better. Version 3, which should clean up events with a worker that died. Also kills all workers if the config has changed. I guess we should find out if we go for rtsignals, a pipe and/or signalfd. Any ideas? Would be good to start with something in a repository, instead of sending huge patches, I guess. It's so much faster than the current clone per event, seems we want to have something like that in a released version. Thanks, Kay --001485f85a94e99084046b4bd49b Content-Type: text/x-patch; charset=US-ASCII; name="worker3.patch" Content-Disposition: attachment; filename="worker3.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fvfe0l5d0 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 cHJpdmF0ZS5oIGIvdWRldi9saWIvbGlidWRldi1wcml2YXRlLmgKaW5kZXggM2ViM2Q3OS4uMzAx OTkyMCAxMDA2NDQKLS0tIGEvdWRldi9saWIvbGlidWRldi1wcml2YXRlLmgKKysrIGIvdWRldi9s 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 X2VudHJ5KSkKZGlmZiAtLWdpdCBhL3VkZXYvdWRldi5oIGIvdWRldi91ZGV2LmgKaW5kZXggOGYy YzFjNi4uZWQyOWM0YiAxMDA2NDQKLS0tIGEvdWRldi91ZGV2LmgKKysrIGIvdWRldi91ZGV2LmgK QEAgLTUzLDcgKzUzLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGxvZ2dpbmdfY2xvc2Uodm9pZCkK IH0KIAogc3RydWN0IHVkZXZfZXZlbnQgewotCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSBub2RlOwog CXN0cnVjdCB1ZGV2ICp1ZGV2OwogCXN0cnVjdCB1ZGV2X2RldmljZSAqZGV2OwogCXN0cnVjdCB1 ZGV2X2RldmljZSAqZGV2X3BhcmVudDsKQEAgLTY0LDEwICs2Myw2IEBAIHN0cnVjdCB1ZGV2X2V2 ZW50IHsKIAl1aWRfdCB1aWQ7CiAJZ2lkX3QgZ2lkOwogCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSBy dW5fbGlzdDsKLQlwaWRfdCBwaWQ7Ci0JaW50IGV4aXRzdGF0dXM7Ci0JdGltZV90IHF1ZXVlX3Rp bWU7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGludCBkZWxheWluZ19zZXFudW07CiAJdW5zaWduZWQg aW50IGdyb3VwX2ZpbmFsOjE7CiAJdW5zaWduZWQgaW50IG93bmVyX2ZpbmFsOjE7CiAJdW5zaWdu ZWQgaW50IG1vZGVfZmluYWw6MTsKQEAgLTc2LDcgKzcxLDYgQEAgc3RydWN0IHVkZXZfZXZlbnQg ewogCXVuc2lnbmVkIGludCBydW5fZmluYWw6MTsKIAl1bnNpZ25lZCBpbnQgaWdub3JlX2Rldmlj ZToxOwogCXVuc2lnbmVkIGludCBpbm90aWZ5X3dhdGNoOjE7Ci0JdW5zaWduZWQgaW50IHRyYWNl OjE7CiB9OwogCiBzdHJ1Y3QgdWRldl93YXRjaCB7CmRpZmYgLS1naXQgYS91ZGV2L3VkZXZkLmMg Yi91ZGV2L3VkZXZkLmMKaW5kZXggMzdiNTQ3YS4uODg5MGVlMCAxMDA2NDQKLS0tIGEvdWRldi91 ZGV2ZC5jCisrKyBiL3VkZXYvdWRldmQuYwpAQCAtNDQsOCArNDQsNyBAQAogI2RlZmluZSBVREVW RF9QUklPUklUWQkJCS00CiAjZGVmaW5lIFVERVZfUFJJT1JJVFkJCQktMgogCi0vKiBtYXhpbXVt IGxpbWl0IG9mIGZvcmtlZCBjaGlsZHMgKi8KLSNkZWZpbmUgVURFVkRfTUFYX0NISUxEUwkJMjU2 CisjZGVmaW5lIFNJR1JUX1dPUktFUgkJCVNJR1JUTUlOKzEKIAogc3RhdGljIGludCBkZWJ1ZzsK IApAQCAtNjEsMzQgKzYwLDc1IEBAIHN0YXRpYyB2b2lkIGxvZ19mbihzdHJ1Y3QgdWRldiAqdWRl diwgaW50IHByaW9yaXR5LAogCX0KIH0KIAotc3RhdGljIHZvaWQgcmVhcF9zaWdjaGlsZHModm9p ZCk7Ci0KIHN0YXRpYyBpbnQgZGVidWdfdHJhY2U7CiBzdGF0aWMgc3RydWN0IHVkZXZfcnVsZXMg KnJ1bGVzOwogc3RhdGljIHN0cnVjdCB1ZGV2X3F1ZXVlX2V4cG9ydCAqdWRldl9xdWV1ZV9leHBv cnQ7CiBzdGF0aWMgc3RydWN0IHVkZXZfY3RybCAqdWRldl9jdHJsOwotc3RhdGljIHN0cnVjdCB1 ZGV2X21vbml0b3IgKmtlcm5lbF9tb25pdG9yOwotc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNf dCBzaWdjaGlsZHNfd2FpdGluZzsKK3N0YXRpYyBzdHJ1Y3QgdWRldl9tb25pdG9yICptb25pdG9y Oworc3RhdGljIHBpZF90IG1haW5fcGlkOworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBl dmVudF9maW5pc2hlZDsKK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3Qgd29ya2VyX2RlYWQ7 CiBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHVkZXZfZXhpdDsKIHN0YXRpYyB2b2xhdGls ZSBzaWdfYXRvbWljX3QgcmVsb2FkX2NvbmZpZzsKIHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWlj X3Qgc2lnbmFsX3JlY2VpdmVkOwotc3RhdGljIHZvbGF0aWxlIHBpZF90IHNldHRsZV9waWQ7Ci1z dGF0aWMgaW50IHJ1bl9leGVjX3E7CitzdGF0aWMgcGlkX3Qgc2V0dGxlX3BpZDsKIHN0YXRpYyBp bnQgc3RvcF9leGVjX3E7CiBzdGF0aWMgaW50IG1heF9jaGlsZHM7Ci1zdGF0aWMgaW50IGNoaWxk czsKK3N0YXRpYyB2b2xhdGlsZSBpbnQgY2hpbGRzOwogc3RhdGljIHN0cnVjdCB1ZGV2X2xpc3Rf bm9kZSBldmVudF9saXN0Oworc3RhdGljIHN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSB3b3JrZXJfbGlz dDsKK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3Qgd29ya2VyX2V4aXQ7CisKK2VudW0gZXZl bnRfc3RhdGUgeworCUVWRU5UX1VOREVGLAorCUVWRU5UX1FVRVVFRCwKKwlFVkVOVF9SVU5OSU5H LAorCUVWRU5UX0ZJTklTSEVELAorfTsKKworc3RydWN0IGV2ZW50IHsKKwlzdHJ1Y3QgdWRldl9s aXN0X25vZGUgbm9kZTsKKwlzdHJ1Y3QgdWRldiAqdWRldjsKKwlzdHJ1Y3QgdWRldl9kZXZpY2Ug KmRldjsKKwllbnVtIGV2ZW50X3N0YXRlIHN0YXRlOworCWludCBleGl0c3RhdHVzOworCXVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgZGVsYXlpbmdfc2VxbnVtOworfTsKIAotc3RhdGljIHN0cnVjdCB1 ZGV2X2V2ZW50ICpub2RlX3RvX2V2ZW50KHN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbm9kZSkKK3N0 YXRpYyBzdHJ1Y3QgZXZlbnQgKm5vZGVfdG9fZXZlbnQoc3RydWN0IHVkZXZfbGlzdF9ub2RlICpu b2RlKQogewogCWNoYXIgKmV2ZW50OwogCiAJZXZlbnQgPSAoY2hhciAqKW5vZGU7Ci0JZXZlbnQg LT0gb2Zmc2V0b2Yoc3RydWN0IHVkZXZfZXZlbnQsIG5vZGUpOwotCXJldHVybiAoc3RydWN0IHVk ZXZfZXZlbnQgKilldmVudDsKKwlldmVudCAtPSBvZmZzZXRvZihzdHJ1Y3QgZXZlbnQsIG5vZGUp OworCXJldHVybiAoc3RydWN0IGV2ZW50ICopZXZlbnQ7Cit9CisKK2VudW0gd29ya2VyX3N0YXRl IHsKKwlXT1JLRVJfVU5ERUYsCisJV09SS0VSX1JVTk5JTkcsCisJV09SS0VSX0lETEUsCisJV09S S0VSX0tJTExFRCwKKwlXT1JLRVJfREVBRCwKK307CisKK3N0cnVjdCB3b3JrZXIgeworCXN0cnVj dCB1ZGV2X2xpc3Rfbm9kZSBub2RlOworCXBpZF90IHBpZDsKKwllbnVtIHdvcmtlcl9zdGF0ZSBz dGF0ZTsKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworfTsKKworc3RhdGljIHN0cnVjdCB3b3JrZXIg Km5vZGVfdG9fd29ya2VyKHN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbm9kZSkKK3sKKwljaGFyICp3 b3JrZXI7CisKKwl3b3JrZXIgPSAoY2hhciAqKW5vZGU7CisJd29ya2VyIC09IG9mZnNldG9mKHN0 cnVjdCB3b3JrZXIsIG5vZGUpOworCXJldHVybiAoc3RydWN0IHdvcmtlciAqKXdvcmtlcjsKIH0K IAotc3RhdGljIHZvaWQgZXZlbnRfcXVldWVfZGVsZXRlKHN0cnVjdCB1ZGV2X2V2ZW50ICpldmVu dCkKK3N0YXRpYyB2b2lkIGV2ZW50X3F1ZXVlX2RlbGV0ZShzdHJ1Y3QgZXZlbnQgKmV2ZW50KQog ewogCXVkZXZfbGlzdF9ub2RlX3JlbW92ZSgmZXZlbnQtPm5vZGUpOwogCkBAIC05OSwxMjUgKzEz OSwyMTkgQEAgc3RhdGljIHZvaWQgZXZlbnRfcXVldWVfZGVsZXRlKHN0cnVjdCB1ZGV2X2V2ZW50 ICpldmVudCkKIAkJdWRldl9xdWV1ZV9leHBvcnRfZGV2aWNlX2ZpbmlzaGVkKHVkZXZfcXVldWVf ZXhwb3J0LCBldmVudC0+ZGV2KTsKIAogCXVkZXZfZGV2aWNlX3VucmVmKGV2ZW50LT5kZXYpOwot CXVkZXZfZXZlbnRfdW5yZWYoZXZlbnQpOworCWZyZWUoZXZlbnQpOwogfQogCiBzdGF0aWMgdm9p ZCBldmVudF9zaWdfaGFuZGxlcihpbnQgc2lnbnVtKQogewotCWlmIChzaWdudW0gPT0gU0lHQUxS TSkKKwlzd2l0Y2ggKHNpZ251bSkgeworCWNhc2UgU0lHQUxSTToKIAkJX2V4aXQoMSk7CisJCWJy ZWFrOworCWNhc2UgU0lHVEVSTToKKwkJd29ya2VyX2V4aXQgPSAxOworCQlicmVhazsKKwl9CiB9 CiAKLXN0YXRpYyB2b2lkIGV2ZW50X2Zvcmsoc3RydWN0IHVkZXZfZXZlbnQgKmV2ZW50KQorc3Rh dGljIHZvaWQgd29ya2VyX25ldyhzdHJ1Y3QgZXZlbnQgKmV2ZW50KQogeworCXN0cnVjdCB3b3Jr ZXIgKndvcmtlcjsKIAlwaWRfdCBwaWQ7CiAJc3RydWN0IHNpZ2FjdGlvbiBhY3Q7Ci0JaW50IGVy cjsKLQotI2lmIDAKLQkvKiBzaW5nbGUgcHJvY2Vzcywgbm8gZm9ya2luZywganVzdCBmb3IgdGVz dGluZy9wcm9maWxpbmcgKi8KLQllcnIgPSB1ZGV2X2V2ZW50X2V4ZWN1dGVfcnVsZXMoZXZlbnQs IHJ1bGVzKTsKLQlpZiAoZXJyID09IDAgJiYgIWV2ZW50LT5pZ25vcmVfZGV2aWNlICYmIHVkZXZf Z2V0X3J1bihldmVudC0+dWRldikpCi0JCXVkZXZfZXZlbnRfZXhlY3V0ZV9ydW4oZXZlbnQpOwot CWluZm8oZXZlbnQtPnVkZXYsICJzZXEgJWxsdSBleGl0IHdpdGggJWlcbiIsIHVkZXZfZGV2aWNl X2dldF9zZXFudW0oZXZlbnQtPmRldiksIGVycik7Ci0JZXZlbnRfcXVldWVfZGVsZXRlKGV2ZW50 KTsKLQlyZXR1cm47Ci0jZW5kaWYKKwlzaWdzZXRfdCBtYXNrOwogCi0JaWYgKGRlYnVnX3RyYWNl KSB7Ci0JCWV2ZW50LT50cmFjZSA9IDE7Ci0JCWZwcmludGYoc3RkZXJyLCAiZm9yayAlcyAoJWxs dSlcbiIsCi0JCSAgICAgICB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChldmVudC0+ZGV2KSwKLQkJ ICAgICAgIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZXZlbnQtPmRldikpOwotCX0KKwl3b3JrZXIg PSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB3b3JrZXIpKTsKKwlpZiAod29ya2VyID09IE5VTEwp CisJCXJldHVybjsKKworCS8qIGJsb2NrIFdPUktFUiBzaWduYWxzLCB1bnRpbCB3ZSBqb2luZWQg dGhlIGxpc3Qgd2l0aCBvdXIgbmV3IHBpZCAqLworCXNpZ2VtcHR5c2V0KCZtYXNrKTsKKwlzaWdh ZGRzZXQoJm1hc2ssIFNJR1JUX1dPUktFUik7CisJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbWFz aywgTlVMTCk7CisKKwlldmVudC0+c3RhdGUgPSBFVkVOVF9SVU5OSU5HOwogCiAJcGlkID0gZm9y aygpOwogCXN3aXRjaCAocGlkKSB7Ci0JY2FzZSAwOgotCQkvKiBjaGlsZCAqLworCWNhc2UgMDog eworCQlzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsKKwogCQl1ZGV2X3F1ZXVlX2V4cG9ydF91bnJl Zih1ZGV2X3F1ZXVlX2V4cG9ydCk7CiAJCXVkZXZfY3RybF91bnJlZih1ZGV2X2N0cmwpOworCQl1 ZGV2X21vbml0b3JfdW5yZWYobW9uaXRvcik7CiAJCWxvZ2dpbmdfY2xvc2UoKTsKIAkJbG9nZ2lu Z19pbml0KCJ1ZGV2ZC1ldmVudCIpOwogCQlzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIDAsIFVE RVZfUFJJT1JJVFkpOwogCisJCS8qIHJlLW9wZW4gc29ja2V0IHRvIGxpc3RlbiB0byB1ZGV2ZCBv bmx5LCBhbmQgc2VuZCBiYWNrIGxpYnVkZXYgZXZlbnRzICovCisJCW1vbml0b3IgPSB1ZGV2X21v bml0b3JfbmV3X2Zyb21fbmV0bGluayhldmVudC0+dWRldiwgTlVMTCk7CisJCWlmIChtb25pdG9y ID09IE5VTEwpCisJCQlfZXhpdCgyKTsKKwkJdWRldl9tb25pdG9yX2VuYWJsZV9yZWNlaXZpbmco bW9uaXRvcik7CisKIAkJLyogc2V0IHNpZ25hbCBoYW5kbGVycyAqLwogCQltZW1zZXQoJmFjdCwg MHgwMCwgc2l6ZW9mKGFjdCkpOwogCQlhY3Quc2FfaGFuZGxlciA9IGV2ZW50X3NpZ19oYW5kbGVy OwogCQlzaWdlbXB0eXNldCAoJmFjdC5zYV9tYXNrKTsKIAkJYWN0LnNhX2ZsYWdzID0gMDsKKwkJ c2lnYWN0aW9uKFNJR1RFUk0sICZhY3QsIE5VTEwpOwogCQlzaWdhY3Rpb24oU0lHQUxSTSwgJmFj dCwgTlVMTCk7CiAKIAkJLyogcmVzZXQgdG8gZGVmYXVsdCAqLwogCQlhY3Quc2FfaGFuZGxlciA9 IFNJR19ERkw7CiAJCXNpZ2FjdGlvbihTSUdJTlQsICZhY3QsIE5VTEwpOwotCQlzaWdhY3Rpb24o U0lHVEVSTSwgJmFjdCwgTlVMTCk7CiAJCXNpZ2FjdGlvbihTSUdDSExELCAmYWN0LCBOVUxMKTsK IAkJc2lnYWN0aW9uKFNJR0hVUCwgJmFjdCwgTlVMTCk7CisJCXNpZ2FjdGlvbihTSUdSVF9XT1JL RVIsICZhY3QsIE5VTEwpOwogCi0JCS8qIHNldCB0aW1lb3V0IHRvIHByZXZlbnQgaGFuZ2luZyBw cm9jZXNzZXMgKi8KLQkJYWxhcm0oVURFVl9FVkVOVF9USU1FT1VUKTsKKwkJLyogaW5pdGlhbCBk ZXZpY2UgKi8KKwkJZGV2ID0gZXZlbnQtPmRldjsKIAotCQkvKiBhcHBseSBydWxlcywgY3JlYXRl IG5vZGUsIHN5bWxpbmtzICovCi0JCWVyciA9IHVkZXZfZXZlbnRfZXhlY3V0ZV9ydWxlcyhldmVu dCwgcnVsZXMpOworCQl3aGlsZSAoIXdvcmtlcl9leGl0KSB7CisJCQlzdHJ1Y3QgdWRldl9ldmVu dCAqdWRldl9ldmVudDsKKwkJCXVuaW9uIHNpZ3ZhbCBzaWd2YWw7CisJCQlpbnQgZXJyOwogCi0J CS8qIHJ1bGVzIG1heSBjaGFuZ2UvZGlzYWJsZSB0aGUgdGltZW91dCAqLwotCQlpZiAodWRldl9k ZXZpY2VfZ2V0X2V2ZW50X3RpbWVvdXQoZXZlbnQtPmRldikgPj0gMCkKLQkJCWFsYXJtKHVkZXZf ZGV2aWNlX2dldF9ldmVudF90aW1lb3V0KGV2ZW50LT5kZXYpKTsKKwkJCXVkZXZfZXZlbnQgPSB1 ZGV2X2V2ZW50X25ldyhkZXYpOworCQkJaWYgKHVkZXZfZXZlbnQgPT0gTlVMTCkKKwkJCQlfZXhp dCgzKTsKIAotCQkvKiBleGVjdXRlIFJVTj0gKi8KLQkJaWYgKGVyciA9PSAwICYmICFldmVudC0+ aWdub3JlX2RldmljZSAmJiB1ZGV2X2dldF9ydW4oZXZlbnQtPnVkZXYpKQotCQkJdWRldl9ldmVu dF9leGVjdXRlX3J1bihldmVudCk7CisJCQkvKiBzZXQgdGltZW91dCB0byBwcmV2ZW50IGhhbmdp bmcgcHJvY2Vzc2VzICovCisJCQlhbGFybShVREVWX0VWRU5UX1RJTUVPVVQpOwogCi0JCS8qIGFw cGx5L3Jlc3RvcmUgaW5vdGlmeSB3YXRjaCAqLwotCQlpZiAoZXJyID09IDAgJiYgZXZlbnQtPmlu b3RpZnlfd2F0Y2gpIHsKLQkJCXVkZXZfd2F0Y2hfYmVnaW4oZXZlbnQtPnVkZXYsIGV2ZW50LT5k ZXYpOwotCQkJdWRldl9kZXZpY2VfdXBkYXRlX2RiKGV2ZW50LT5kZXYpOwotCQl9CisJCQkvKiBh cHBseSBydWxlcywgY3JlYXRlIG5vZGUsIHN5bWxpbmtzICovCisJCQllcnIgPSB1ZGV2X2V2ZW50 X2V4ZWN1dGVfcnVsZXModWRldl9ldmVudCwgcnVsZXMpOworCisJCQkvKiBydWxlcyBtYXkgY2hh bmdlL2Rpc2FibGUgdGhlIHRpbWVvdXQgKi8KKwkJCWlmICh1ZGV2X2RldmljZV9nZXRfZXZlbnRf dGltZW91dChkZXYpID49IDApCisJCQkJYWxhcm0odWRldl9kZXZpY2VfZ2V0X2V2ZW50X3RpbWVv dXQoZGV2KSk7CisKKwkJCS8qIGV4ZWN1dGUgUlVOPSAqLworCQkJaWYgKGVyciA9PSAwICYmICF1 ZGV2X2V2ZW50LT5pZ25vcmVfZGV2aWNlICYmIHVkZXZfZ2V0X3J1bih1ZGV2X2V2ZW50LT51ZGV2 KSkKKwkJCQl1ZGV2X2V2ZW50X2V4ZWN1dGVfcnVuKHVkZXZfZXZlbnQpOworCisJCQkvKiByZXNl dCBhbGFybSAqLworCQkJYWxhcm0oMCk7CisKKwkJCS8qIGFwcGx5L3Jlc3RvcmUgaW5vdGlmeSB3 YXRjaCAqLworCQkJaWYgKGVyciA9PSAwICYmIHVkZXZfZXZlbnQtPmlub3RpZnlfd2F0Y2gpIHsK KwkJCQl1ZGV2X3dhdGNoX2JlZ2luKHVkZXZfZXZlbnQtPnVkZXYsIGRldik7CisJCQkJdWRldl9k ZXZpY2VfdXBkYXRlX2RiKGRldik7CisJCQl9CisKKwkJCS8qIHNlbmQgcHJvY2Vzc2VkIGV2ZW50 IGJhY2sgdG8gbGlidWRldiBsaXN0ZW5lcnMgKi8KKwkJCXVkZXZfbW9uaXRvcl9zZW5kX2Rldmlj ZShtb25pdG9yLCBkZXYsIDApOworCisJCQlpbmZvKGV2ZW50LT51ZGV2LCAic2VxICVsbHUgZmlu aXNoZWQgd2l0aCAlaVxuIiwgdWRldl9kZXZpY2VfZ2V0X3NlcW51bShkZXYpLCBlcnIpOworCQkJ dWRldl9kZXZpY2VfdW5yZWYoZGV2KTsKKwkJCXVkZXZfZXZlbnRfdW5yZWYodWRldl9ldmVudCk7 CiAKLQkJLyogc2VuZCBwcm9jZXNzZWQgZXZlbnQgYmFjayB0byB0aGUga2VybmVsIG5ldGxpbmsg c29ja2V0ICovCi0JCXVkZXZfbW9uaXRvcl9zZW5kX2RldmljZShrZXJuZWxfbW9uaXRvciwgZXZl bnQtPmRldik7CisJCQkvKiBzZW5kIGJhY2sgdGhlIHJlc3VsdCBvZiB0aGUgZXZlbnQgZXhlY3V0 aW9uICovCisJCQlzaWd2YWwuc2l2YWxfaW50ID0gZXJyOworCQkJLyogRklYTUU6IGhhbmRsZSBF QUdBSU4gKi8KKwkJCXNpZ3F1ZXVlKG1haW5fcGlkLCBTSUdSVF9XT1JLRVIsIHNpZ3ZhbCk7CiAK LQkJaW5mbyhldmVudC0+dWRldiwgInNlcSAlbGx1IGV4aXQgd2l0aCAlaVxuIiwgdWRldl9kZXZp Y2VfZ2V0X3NlcW51bShldmVudC0+ZGV2KSwgZXJyKTsKKwkJCS8qIHdhaXQgZm9yIG1vcmUgZGV2 aWNlIG1lc3NhZ2VzIGZyb20gdWRldmQgKi8KKwkJCWRvCisJCQkJZGV2ID0gdWRldl9tb25pdG9y X3JlY2VpdmVfZGV2aWNlKG1vbml0b3IpOworCQkJd2hpbGUgKCF3b3JrZXJfZXhpdCAmJiBkZXYg PT0gTlVMTCk7CisJCX0KKworCQl1ZGV2X21vbml0b3JfdW5yZWYobW9uaXRvcik7CiAJCWxvZ2dp bmdfY2xvc2UoKTsKLQkJaWYgKGVyciAhPSAwKQotCQkJZXhpdCgxKTsKIAkJZXhpdCgwKTsKKwl9 CiAJY2FzZSAtMToKKwkJZXZlbnQtPnN0YXRlID0gRVZFTlRfUVVFVUVEOworCQlmcmVlKHdvcmtl cik7CiAJCWVycihldmVudC0+dWRldiwgImZvcmsgb2YgY2hpbGQgZmFpbGVkOiAlbVxuIik7Ci0J CWV2ZW50X3F1ZXVlX2RlbGV0ZShldmVudCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCS8qIGdl dCBTSUdDSExEIGluIG1haW4gbG9vcCAqLwotCQlpbmZvKGV2ZW50LT51ZGV2LCAic2VxICVsbHUg Zm9ya2VkLCBwaWQgWyVkXSwgJyVzJyAnJXMnLCAlbGQgc2Vjb25kcyBvbGRcbiIsCi0JCSAgICAg dWRldl9kZXZpY2VfZ2V0X3NlcW51bShldmVudC0+ZGV2KSwKLQkJICAgICBwaWQsCi0JCSAgICAg dWRldl9kZXZpY2VfZ2V0X2FjdGlvbihldmVudC0+ZGV2KSwKLQkJICAgICB1ZGV2X2RldmljZV9n ZXRfc3Vic3lzdGVtKGV2ZW50LT5kZXYpLAotCQkgICAgIHRpbWUoTlVMTCkgLSBldmVudC0+cXVl dWVfdGltZSk7Ci0JCWV2ZW50LT5waWQgPSBwaWQ7CisJCXdvcmtlci0+cGlkID0gcGlkOworCQl3 b3JrZXItPmV2ZW50ID0gZXZlbnQ7CisJCXdvcmtlci0+c3RhdGUgPSBXT1JLRVJfUlVOTklORzsK KwkJdWRldl9saXN0X25vZGVfYXBwZW5kKCZ3b3JrZXItPm5vZGUsICZ3b3JrZXJfbGlzdCk7CiAJ CWNoaWxkcysrOworCQlicmVhazsKKwl9CisKKwlzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJm1h c2ssIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBldmVudF9ydW4oc3RydWN0IGV2ZW50ICpldmVu dCkKK3sKKwlzdHJ1Y3QgdWRldl9saXN0X25vZGUgKmxvb3A7CisKKwl1ZGV2X2xpc3Rfbm9kZV9m b3JlYWNoKGxvb3AsICZ3b3JrZXJfbGlzdCkgeworCQlzdHJ1Y3Qgd29ya2VyICp3b3JrZXIgPSBu b2RlX3RvX3dvcmtlcihsb29wKTsKKwkJc3NpemVfdCBjb3VudDsKKworCQlpZiAod29ya2VyLT5z dGF0ZSAhPSBXT1JLRVJfSURMRSkKKwkJCWNvbnRpbnVlOworCisJCXdvcmtlci0+ZXZlbnQgPSBl dmVudDsKKwkJd29ya2VyLT5zdGF0ZSA9IFdPUktFUl9SVU5OSU5HOworCQlldmVudC0+c3RhdGUg PSBFVkVOVF9SVU5OSU5HOworCQljb3VudCA9IHVkZXZfbW9uaXRvcl9zZW5kX2RldmljZShtb25p dG9yLCBldmVudC0+ZGV2LCB3b3JrZXItPnBpZCk7CisJCWlmIChjb3VudCA8IDApIHsKKwkJCWVy cihldmVudC0+dWRldiwgIndvcmtlciBbJXVdIGRpZCBub3QgYWNjZXB0IG1lc3NhZ2UsIGtpbGwg aXRcbiIsIHdvcmtlci0+cGlkKTsKKwkJCWV2ZW50LT5zdGF0ZSA9IEVWRU5UX1FVRVVFRDsKKwkJ CXdvcmtlci0+c3RhdGUgPSBXT1JLRVJfS0lMTEVEOworCQkJa2lsbCh3b3JrZXItPnBpZCwgU0lH S0lMTCk7CisJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKGNoaWxkcyA+ PSBtYXhfY2hpbGRzKSB7CisJCWluZm8oZXZlbnQtPnVkZXYsICJtYXhpbXVtIG51bWJlciAoJWkp IG9mIGNoaWxkcyByZWFjaGVkXG4iLCBjaGlsZHMpOworCQlyZXR1cm47CiAJfQorCisJLyogc3Rh cnQgbmV3IHdvcmtlciBhbmQgcGFzcyBpbml0aWFsIGRldmljZSAqLworCXdvcmtlcl9uZXcoZXZl bnQpOwogfQogCi1zdGF0aWMgdm9pZCBldmVudF9xdWV1ZV9pbnNlcnQoc3RydWN0IHVkZXZfZXZl bnQgKmV2ZW50KQorc3RhdGljIHZvaWQgZXZlbnRfcXVldWVfaW5zZXJ0KHN0cnVjdCB1ZGV2X2Rl dmljZSAqZGV2KQogewotCWV2ZW50LT5xdWV1ZV90aW1lID0gdGltZShOVUxMKTsKKwlzdHJ1Y3Qg ZXZlbnQgKmV2ZW50OworCisJZXZlbnQgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBldmVudCkp OworCWlmIChldmVudCA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQl1ZGV2X3F1ZXVlX2V4cG9ydF9k ZXZpY2VfcXVldWVkKHVkZXZfcXVldWVfZXhwb3J0LCBldmVudC0+ZGV2KTsKLQlpbmZvKGV2ZW50 LT51ZGV2LCAic2VxICVsbHUgcXVldWVkLCAnJXMnICclcydcbiIsIHVkZXZfZGV2aWNlX2dldF9z ZXFudW0oZXZlbnQtPmRldiksCi0JICAgICB1ZGV2X2RldmljZV9nZXRfYWN0aW9uKGV2ZW50LT5k ZXYpLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGV2ZW50LT5kZXYpKTsKKwlldmVudC0+dWRl diA9IHVkZXZfZGV2aWNlX2dldF91ZGV2KGRldik7CisJZXZlbnQtPmRldiA9IGRldjsKKwl1ZGV2 X3F1ZXVlX2V4cG9ydF9kZXZpY2VfcXVldWVkKHVkZXZfcXVldWVfZXhwb3J0LCBkZXYpOworCWlu Zm8oZXZlbnQtPnVkZXYsICJzZXEgJWxsdSBxdWV1ZWQsICclcycgJyVzJ1xuIiwgdWRldl9kZXZp Y2VfZ2V0X3NlcW51bShkZXYpLAorCSAgICAgdWRldl9kZXZpY2VfZ2V0X2FjdGlvbihkZXYpLCB1 ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOwogCisJZXZlbnQtPnN0YXRlID0gRVZFTlRf UVVFVUVEOwogCXVkZXZfbGlzdF9ub2RlX2FwcGVuZCgmZXZlbnQtPm5vZGUsICZldmVudF9saXN0 KTsKLQlydW5fZXhlY19xID0gMTsKIAogCS8qIHJ1biBhbGwgZXZlbnRzIHdpdGggYSB0aW1lb3V0 IHNldCBpbW1lZGlhdGVseSAqLwotCWlmICh1ZGV2X2RldmljZV9nZXRfdGltZW91dChldmVudC0+ ZGV2KSA+IDApIHsKLQkJZXZlbnRfZm9yayhldmVudCk7CisJaWYgKHVkZXZfZGV2aWNlX2dldF90 aW1lb3V0KGRldikgPiAwKSB7CisJCXdvcmtlcl9uZXcoZXZlbnQpOwogCQlyZXR1cm47CiAJfQog fQogCitzdGF0aWMgdm9pZCB3b3JrZXJfa2lsbF9pZGxlKHZvaWQpCit7CisJc3RydWN0IHVkZXZf bGlzdF9ub2RlICpsb29wOworCisJdWRldl9saXN0X25vZGVfZm9yZWFjaChsb29wLCAmd29ya2Vy X2xpc3QpIHsKKwkJc3RydWN0IHdvcmtlciAqd29ya2VyID0gbm9kZV90b193b3JrZXIobG9vcCk7 CisKKwkJaWYgKHdvcmtlci0+c3RhdGUgIT0gV09SS0VSX0lETEUpCisJCQljb250aW51ZTsKKwor CQl3b3JrZXItPnN0YXRlID0gV09SS0VSX0tJTExFRDsKKwkJa2lsbCh3b3JrZXItPnBpZCwgU0lH VEVSTSk7CisJfQorfQorCiBzdGF0aWMgaW50IG1lbV9zaXplX21iKHZvaWQpCiB7CiAJRklMRSAq ZjsKQEAgLTI2NSwxMyArMzk5LDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9kZXZwYXRoKGNvbnN0 IGNoYXIgKnJ1bm5pbmcsIGNvbnN0IGNoYXIgKndhaXRpbmcpCiB9CiAKIC8qIGxvb2t1cCBldmVu dCBmb3IgaWRlbnRpY2FsLCBwYXJlbnQsIGNoaWxkIGRldmljZSAqLwotc3RhdGljIGludCBkZXZw YXRoX2J1c3koc3RydWN0IHVkZXZfZXZlbnQgKmV2ZW50KQorc3RhdGljIGludCBkZXZwYXRoX2J1 c3koc3RydWN0IGV2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgdWRldl9saXN0X25vZGUgKmxvb3A7 CiAKIAkvKiBjaGVjayBpZiBxdWV1ZSBjb250YWlucyBldmVudHMgd2UgZGVwZW5kIG9uICovCiAJ dWRldl9saXN0X25vZGVfZm9yZWFjaChsb29wLCAmZXZlbnRfbGlzdCkgewotCQlzdHJ1Y3QgdWRl dl9ldmVudCAqbG9vcF9ldmVudCA9IG5vZGVfdG9fZXZlbnQobG9vcCk7CisJCXN0cnVjdCBldmVu dCAqbG9vcF9ldmVudCA9IG5vZGVfdG9fZXZlbnQobG9vcCk7CiAKIAkJLyogd2UgYWxyZWFkeSBm b3VuZCBhIGxhdGVyIGV2ZW50LCBlYXJsaWVyIGNhbiBub3QgYmxvY2sgdXMsIG5vIG5lZWQgdG8g Y2hlY2sgYWdhaW4gKi8KIAkJaWYgKHVkZXZfZGV2aWNlX2dldF9zZXFudW0obG9vcF9ldmVudC0+ ZGV2KSA8IGV2ZW50LT5kZWxheWluZ19zZXFudW0pCkBAIC0zMTIsNDIgKzQ0NiwzNyBAQCBzdGF0 aWMgdm9pZCBldmVudF9xdWV1ZV9tYW5hZ2VyKHN0cnVjdCB1ZGV2ICp1ZGV2KQogCXN0cnVjdCB1 ZGV2X2xpc3Rfbm9kZSAqdG1wOwogCiBzdGFydF9vdmVyOgotCWlmICh1ZGV2X2xpc3RfaXNfZW1w dHkoJmV2ZW50X2xpc3QpKSB7Ci0JCWlmIChjaGlsZHMgPiAwKSB7Ci0JCQllcnIodWRldiwgImV2 ZW50IGxpc3QgZW1wdHksIGJ1dCBjaGlsZHMgY291bnQgaXMgJWkiLCBjaGlsZHMpOwotCQkJY2hp bGRzID0gMDsKLQkJfQotCQlyZXR1cm47Ci0JfQotCiAJdWRldl9saXN0X25vZGVfZm9yZWFjaF9z YWZlKGxvb3AsIHRtcCwgJmV2ZW50X2xpc3QpIHsKLQkJc3RydWN0IHVkZXZfZXZlbnQgKmxvb3Bf ZXZlbnQgPSBub2RlX3RvX2V2ZW50KGxvb3ApOworCQlzdHJ1Y3QgZXZlbnQgKmV2ZW50ID0gbm9k ZV90b19ldmVudChsb29wKTsKIAotCQlpZiAoY2hpbGRzID49IG1heF9jaGlsZHMpIHsKLQkJCWlu Zm8odWRldiwgIm1heGltdW0gbnVtYmVyICglaSkgb2YgY2hpbGRzIHJlYWNoZWRcbiIsIGNoaWxk cyk7Ci0JCQlicmVhazsKKwkJLyogY2xlYW51cCBmaW5pc2hlZCBldmVudHMgKi8KKwkJaWYgKGV2 ZW50LT5zdGF0ZSA9PSBFVkVOVF9GSU5JU0hFRCkgeworCQkJZXZlbnRfcXVldWVfZGVsZXRlKGV2 ZW50KTsKKwkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKGxvb3BfZXZlbnQtPnBpZCAhPSAwKQor CQlpZiAoc3RvcF9leGVjX3EpCisJCQljb250aW51ZTsKKworCQkvKiBza2lwIHJ1bm5pbmcgZXZl bnRzICovCisJCWlmIChldmVudC0+c3RhdGUgIT0gRVZFTlRfUVVFVUVEKQogCQkJY29udGludWU7 CiAKIAkJLyogZG8gbm90IHN0YXJ0IGV2ZW50IGlmIHBhcmVudCBvciBjaGlsZCBldmVudCBpcyBz dGlsbCBydW5uaW5nICovCi0JCWlmIChkZXZwYXRoX2J1c3kobG9vcF9ldmVudCkgIT0gMCkgewor CQlpZiAoZGV2cGF0aF9idXN5KGV2ZW50KSAhPSAwKSB7CiAJCQlkYmcodWRldiwgImRlbGF5IHNl cSAlbGx1ICglcylcbiIsCi0JCQkgICAgdWRldl9kZXZpY2VfZ2V0X3NlcW51bShsb29wX2V2ZW50 LT5kZXYpLAotCQkJICAgIHVkZXZfZGV2aWNlX2dldF9kZXZwYXRoKGxvb3BfZXZlbnQtPmRldikp OworCQkJICAgIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZXZlbnQtPmRldiksCisJCQkgICAgdWRl dl9kZXZpY2VfZ2V0X2RldnBhdGgoZXZlbnQtPmRldikpOwogCQkJY29udGludWU7CiAJCX0KIAot CQlldmVudF9mb3JrKGxvb3BfZXZlbnQpOwotCQlkYmcodWRldiwgIm1vdmVkIHNlcSAlbGx1IHRv IHJ1bm5pbmcgbGlzdFxuIiwgdWRldl9kZXZpY2VfZ2V0X3NlcW51bShsb29wX2V2ZW50LT5kZXYp KTsKKwkJZXZlbnRfcnVuKGV2ZW50KTsKKwl9CiAKLQkJLyogcmV0cnkgaWYgZXZlbnRzIGZpbmlz aGVkIGluIHRoZSBtZWFudGltZSAqLwotCQlpZiAoc2lnY2hpbGRzX3dhaXRpbmcpIHsKLQkJCXNp Z2NoaWxkc193YWl0aW5nID0gMDsKLQkJCXJlYXBfc2lnY2hpbGRzKCk7Ci0JCQlnb3RvIHN0YXJ0 X292ZXI7Ci0JCX0KKwkvKiBrZWVwIHRoZSBpbmNvbWluZyBxdWV1ZSBzbWFsbCwgcmV0cnkgaWYg ZXZlbnRzIGZpbmlzaGVkIGluIHRoZSBtZWFudGltZSAqLworCWlmIChldmVudF9maW5pc2hlZCkg eworCQlldmVudF9maW5pc2hlZCA9IDA7CisJCWdvdG8gc3RhcnRfb3ZlcjsKIAl9CiB9CiAKQEAg LTQ4MCw2OSArNjA5LDcwIEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lub3RpZnkoc3RydWN0IHVkZXYg KnVkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNpZ19oYW5kbGVyKGludCBzaWdu dW0pCitzdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnbnVtLCBzaWdpbmZvX3QgKmluZm8s IHZvaWQgKnVjb250ZXh0KQogewogCXN3aXRjaCAoc2lnbnVtKSB7CiAJCWNhc2UgU0lHSU5UOgog CQljYXNlIFNJR1RFUk06CiAJCQl1ZGV2X2V4aXQgPSAxOwotCQkJYnJlYWs7CisJCQlyZXR1cm47 CiAJCWNhc2UgU0lHQ0hMRDoKLQkJCS8qIHNldCBmbGFnLCB0aGVuIHdyaXRlIHRvIHBpcGUgaWYg bmVlZGVkICovCi0JCQlzaWdjaGlsZHNfd2FpdGluZyA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBT SUdIVVA6Ci0JCQlyZWxvYWRfY29uZmlnID0gMTsKLQkJCWJyZWFrOwotCX0KKwkJCXdoaWxlICgx KSB7CisJCQkJcGlkX3QgcGlkOworCQkJCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbG9vcDsKIAot CXNpZ25hbF9yZWNlaXZlZCA9IDE7Ci19CisJCQkJcGlkID0gd2FpdHBpZCgtMSwgTlVMTCwgV05P SEFORyk7CisJCQkJaWYgKHBpZCA8PSAwKQorCQkJCQlicmVhazsKIAotc3RhdGljIHZvaWQgdWRl dl9kb25lKGludCBwaWQsIGludCBleGl0c3RhdHVzKQotewotCXN0cnVjdCB1ZGV2X2xpc3Rfbm9k ZSAqbG9vcDsKKwkJCQl1ZGV2X2xpc3Rfbm9kZV9mb3JlYWNoKGxvb3AsICZ3b3JrZXJfbGlzdCkg eworCQkJCQlzdHJ1Y3Qgd29ya2VyICp3b3JrZXIgPSBub2RlX3RvX3dvcmtlcihsb29wKTsKIAot CS8qIGZpbmQgZXZlbnQgYXNzb2NpYXRlZCB3aXRoIHBpZCBhbmQgZGVsZXRlIGl0ICovCi0JdWRl dl9saXN0X25vZGVfZm9yZWFjaChsb29wLCAmZXZlbnRfbGlzdCkgewotCQlzdHJ1Y3QgdWRldl9l dmVudCAqbG9vcF9ldmVudCA9IG5vZGVfdG9fZXZlbnQobG9vcCk7Ci0KLQkJaWYgKGxvb3BfZXZl bnQtPnBpZCA9PSBwaWQpIHsKLQkJCWluZm8obG9vcF9ldmVudC0+dWRldiwgInNlcSAlbGx1IGNs ZWFudXAsIHBpZCBbJWRdLCBzdGF0dXMgJWksICVsZCBzZWNvbmRzIG9sZFxuIiwKLQkJCSAgICAg dWRldl9kZXZpY2VfZ2V0X3NlcW51bShsb29wX2V2ZW50LT5kZXYpLCBsb29wX2V2ZW50LT5waWQs Ci0JCQkgICAgIGV4aXRzdGF0dXMsIHRpbWUoTlVMTCkgLSBsb29wX2V2ZW50LT5xdWV1ZV90aW1l KTsKLQkJCWxvb3BfZXZlbnQtPmV4aXRzdGF0dXMgPSBleGl0c3RhdHVzOwotCQkJaWYgKGRlYnVn X3RyYWNlKQotCQkJCWZwcmludGYoc3RkZXJyLCAiZXhpdCAlcyAoJWxsdSlcbiIsCi0JCQkJICAg ICAgIHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGxvb3BfZXZlbnQtPmRldiksCi0JCQkJICAgICAg IHVkZXZfZGV2aWNlX2dldF9zZXFudW0obG9vcF9ldmVudC0+ZGV2KSk7Ci0JCQlldmVudF9xdWV1 ZV9kZWxldGUobG9vcF9ldmVudCk7Ci0JCQljaGlsZHMtLTsKLQotCQkJLyogdGhlcmUgbWF5IGJl IGRlcGVuZGVudCBldmVudHMgd2FpdGluZyAqLwotCQkJcnVuX2V4ZWNfcSA9IDE7Ci0JCQlyZXR1 cm47Ci0JCX0KLQl9Ci19CisJCQkJCWlmICh3b3JrZXItPnBpZCAhPSBwaWQpCisJCQkJCQljb250 aW51ZTsKIAotc3RhdGljIHZvaWQgcmVhcF9zaWdjaGlsZHModm9pZCkKLXsKLQlwaWRfdCBwaWQ7 Ci0JaW50IHN0YXR1czsKKwkJCQkJLyogZmluaXNoIGV2ZW50LCBpZiB3b3JrZXIgZGllZCB1bmV4 cGVjdGVkbHkgKi8KKwkJCQkJaWYgKHdvcmtlci0+ZXZlbnQgIT0gTlVMTCkgeworCQkJCQkJd29y a2VyLT5ldmVudC0+ZXhpdHN0YXR1cyA9IDE7CisJCQkJCQl3b3JrZXItPmV2ZW50LT5zdGF0ZSA9 IEVWRU5UX0ZJTklTSEVEOworCQkJCQl9CiAKLQl3aGlsZSAoMSkgewotCQlwaWQgPSB3YWl0cGlk KC0xLCAmc3RhdHVzLCBXTk9IQU5HKTsKLQkJaWYgKHBpZCA8PSAwKQotCQkJYnJlYWs7Ci0JCWlm IChXSUZFWElURUQoc3RhdHVzKSkKLQkJCXN0YXR1cyA9IFdFWElUU1RBVFVTKHN0YXR1cyk7Ci0J CWVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpCi0JCQlzdGF0dXMgPSBXVEVSTVNJRyhzdGF0 dXMpICsgMTI4OwotCQllbHNlCi0JCQlzdGF0dXMgPSAwOwotCQl1ZGV2X2RvbmUocGlkLCBzdGF0 dXMpOworCQkJCQl3b3JrZXItPnN0YXRlID0gV09SS0VSX0RFQUQ7CisJCQkJCWNoaWxkcy0tOwor CQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQl3b3JrZXJfZGVhZCA9IDE7CisJCQlyZXR1cm47 CisJCWNhc2UgU0lHSFVQOgorCQkJc2lnbmFsX3JlY2VpdmVkID0gMTsKKwkJCXJlbG9hZF9jb25m aWcgPSAxOworCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJaWYgKHNpZ251bSA9PSBTSUdSVF9X T1JLRVIpIHsKKwkJCQlzdHJ1Y3QgdWRldl9saXN0X25vZGUgKmxvb3A7CisKKwkJCQkvKiBsb29r dXAgd29ya2VyIHdobyBzZW50IHRoZSBzaWduYWwgKi8KKwkJCQl1ZGV2X2xpc3Rfbm9kZV9mb3Jl YWNoKGxvb3AsICZ3b3JrZXJfbGlzdCkgeworCQkJCQlzdHJ1Y3Qgd29ya2VyICp3b3JrZXIgPSBu b2RlX3RvX3dvcmtlcihsb29wKTsKKworCQkJCQlpZiAod29ya2VyLT5waWQgIT0gaW5mby0+c2lf cGlkKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJLyogd29ya2VyIHJldHVybmVkICovCisJCQkJ CXdvcmtlci0+ZXZlbnQtPmV4aXRzdGF0dXMgPSBpbmZvLT5zaV92YWx1ZS5zaXZhbF9pbnQ7CisJ CQkJCXdvcmtlci0+ZXZlbnQtPnN0YXRlID0gRVZFTlRfRklOSVNIRUQ7CisJCQkJCXdvcmtlci0+ ZXZlbnQgPSBOVUxMOworCQkJCQl3b3JrZXItPnN0YXRlID0gV09SS0VSX0lETEU7CisJCQkJCWV2 ZW50X2ZpbmlzaGVkID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXJldHVybjsKKwkJCX0K KwkJYnJlYWs7CiAJfQorCisJc2lnbmFsX3JlY2VpdmVkID0gMTsKIH0KIAogc3RhdGljIHZvaWQg c3RhcnR1cF9sb2coc3RydWN0IHVkZXYgKnVkZXYpCkBAIC02NzcsMjEgKzgwNywyNCBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlnb3RvIGV4aXQ7CiAJfQogCi0Ja2VybmVs X21vbml0b3IgPSB1ZGV2X21vbml0b3JfbmV3X2Zyb21fbmV0bGluayh1ZGV2LCAia2VybmVsIik7 Ci0JaWYgKGtlcm5lbF9tb25pdG9yID09IE5VTEwgfHwgdWRldl9tb25pdG9yX2VuYWJsZV9yZWNl aXZpbmcoa2VybmVsX21vbml0b3IpIDwgMCkgeworCW1vbml0b3IgPSB1ZGV2X21vbml0b3JfbmV3 X2Zyb21fbmV0bGluayh1ZGV2LCAia2VybmVsIik7CisJaWYgKG1vbml0b3IgPT0gTlVMTCB8fCB1 ZGV2X21vbml0b3JfZW5hYmxlX3JlY2VpdmluZyhtb25pdG9yKSA8IDApIHsKIAkJZnByaW50Zihz dGRlcnIsICJlcnJvciBpbml0aWFsaXppbmcgbmV0bGluayBzb2NrZXRcbiIpOwogCQllcnIodWRl diwgImVycm9yIGluaXRpYWxpemluZyBuZXRsaW5rIHNvY2tldFxuIik7CiAJCXJjID0gMzsKIAkJ Z290byBleGl0OwogCX0KLQl1ZGV2X21vbml0b3Jfc2V0X3JlY2VpdmVfYnVmZmVyX3NpemUoa2Vy bmVsX21vbml0b3IsIDEyOCoxMDI0KjEwMjQpOworCXVkZXZfbW9uaXRvcl9zZXRfcmVjZWl2ZV9i dWZmZXJfc2l6ZShtb25pdG9yLCAxMjgqMTAyNCoxMDI0KTsKIAogCXJ1bGVzID0gdWRldl9ydWxl c19uZXcodWRldiwgcmVzb2x2ZV9uYW1lcyk7CiAJaWYgKHJ1bGVzID09IE5VTEwpIHsKIAkJZXJy KHVkZXYsICJlcnJvciByZWFkaW5nIHJ1bGVzXG4iKTsKIAkJZ290byBleGl0OwogCX0KKwogCXVk ZXZfbGlzdF9pbml0KCZldmVudF9saXN0KTsKKwl1ZGV2X2xpc3RfaW5pdCgmd29ya2VyX2xpc3Qp OworCiAJdWRldl9xdWV1ZV9leHBvcnQgPSB1ZGV2X3F1ZXVlX2V4cG9ydF9uZXcodWRldik7CiAJ aWYgKHVkZXZfcXVldWVfZXhwb3J0ID09IE5VTEwpIHsKIAkJZXJyKHVkZXYsICJlcnJvciBjcmVh dGluZyBxdWV1ZSBmaWxlXG4iKTsKQEAgLTcwNCwxOSArODM3LDE5IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCiAJCXBpZCA9IGZvcmsoKTsKIAkJc3dpdGNoIChwaWQpIHsKIAkJ Y2FzZSAwOgotCQkJZGJnKHVkZXYsICJkYWVtb25pemVkIGZvcmsgcnVubmluZ1xuIik7CiAJCQli cmVhazsKIAkJY2FzZSAtMToKIAkJCWVycih1ZGV2LCAiZm9yayBvZiBkYWVtb24gZmFpbGVkOiAl bVxuIik7CiAJCQlyYyA9IDQ7CiAJCQlnb3RvIGV4aXQ7CiAJCWRlZmF1bHQ6Ci0JCQlkYmcodWRl diwgImNoaWxkIFsldV0gcnVubmluZywgcGFyZW50IGV4aXRzXG4iLCBwaWQpOwogCQkJcmMgPSAw OwogCQkJZ290byBleGl0OwogCQl9CiAJfQogCisJbWFpbl9waWQgPSBnZXRwaWQoKTsKKwogCS8q IHJlZGlyZWN0IHN0ZHtvdXQsZXJyfSAqLwogCWlmICghZGVidWcgJiYgIWRlYnVnX3RyYWNlKSB7 CiAJCWR1cDIoZmQsIFNURElOX0ZJTEVOTyk7CkBAIC03NDYsMTMgKzg3OSwxNCBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJLyogc2V0IHNpZ25hbCBoYW5kbGVycyAqLwog CW1lbXNldCgmYWN0LCAweDAwLCBzaXplb2Yoc3RydWN0IHNpZ2FjdGlvbikpOwotCWFjdC5zYV9o YW5kbGVyID0gc2lnX2hhbmRsZXI7CisJYWN0LnNhX3NpZ2FjdGlvbiA9IHNpZ19oYW5kbGVyOwog CXNpZ2VtcHR5c2V0KCZhY3Quc2FfbWFzayk7Ci0JYWN0LnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsK KwlhY3Quc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsKIAlzaWdhY3Rpb24oU0lH SU5ULCAmYWN0LCBOVUxMKTsKIAlzaWdhY3Rpb24oU0lHVEVSTSwgJmFjdCwgTlVMTCk7CiAJc2ln YWN0aW9uKFNJR0NITEQsICZhY3QsIE5VTEwpOwogCXNpZ2FjdGlvbihTSUdIVVAsICZhY3QsIE5V TEwpOworCXNpZ2FjdGlvbihTSUdSVF9XT1JLRVIsICZhY3QsIE5VTEwpOwogCiAJLyogd2F0Y2gg cnVsZXMgZGlyZWN0b3J5ICovCiAJdWRldl93YXRjaF9pbml0KHVkZXYpOwpAQCAtNzgyLDEwICs5 MTYsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJbWF4X2NoaWxkcyA9 IDE7CiAJfSBlbHNlIHsKIAkJaW50IG1lbXNpemUgPSBtZW1fc2l6ZV9tYigpOworCiAJCWlmICht ZW1zaXplID4gMCkKIAkJCW1heF9jaGlsZHMgPSAxMjggKyAobWVtc2l6ZSAvIDQpOwogCQllbHNl Ci0JCQltYXhfY2hpbGRzID0gVURFVkRfTUFYX0NISUxEUzsKKwkJCW1heF9jaGlsZHMgPSAyNTY7 CiAJfQogCS8qIHBvc3NpYmx5IG92ZXJ3cml0ZSBtYXhpbXVtIGxpbWl0IG9mIGV4ZWN1dGVkIGV2 ZW50cyAqLwogCXZhbHVlID0gZ2V0ZW52KCJVREVWRF9NQVhfQ0hJTERTIik7CkBAIC03OTcsMTIg KzkzMiwxNSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlzaWdzZXRfdCBi bG9ja2VkX21hc2ssIG9yaWdfbWFzazsKIAkJc3RydWN0IHBvbGxmZCBwZmRbNF07CiAJCXN0cnVj dCBwb2xsZmQgKmN0cmxfcG9sbCwgKm1vbml0b3JfcG9sbCwgKmlub3RpZnlfcG9sbCA9IE5VTEw7 CisJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyB0cyA9IHsgMTAsIDAgfTsKKwkJY29uc3Qgc3RydWN0 IHRpbWVzcGVjICp0aW1lb3V0OwogCQlpbnQgbmZkcyA9IDA7CiAJCWludCBmZGNvdW50OwogCiAJ CXNpZ2ZpbGxzZXQoJmJsb2NrZWRfbWFzayk7CiAJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAm YmxvY2tlZF9tYXNrLCAmb3JpZ19tYXNrKTsKIAkJaWYgKHNpZ25hbF9yZWNlaXZlZCkgeworCQkJ c2lnbmFsX3JlY2VpdmVkID0gMDsKIAkJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb3JpZ19t YXNrLCBOVUxMKTsKIAkJCWdvdG8gaGFuZGxlX3NpZ25hbHM7CiAJCX0KQEAgLTgxMiw3ICs5NTAs NyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQljdHJsX3BvbGwtPmV2ZW50 cyA9IFBPTExJTjsKIAogCQltb25pdG9yX3BvbGwgPSAmcGZkW25mZHMrK107Ci0JCW1vbml0b3Jf cG9sbC0+ZmQgPSB1ZGV2X21vbml0b3JfZ2V0X2ZkKGtlcm5lbF9tb25pdG9yKTsKKwkJbW9uaXRv cl9wb2xsLT5mZCA9IHVkZXZfbW9uaXRvcl9nZXRfZmQobW9uaXRvcik7CiAJCW1vbml0b3JfcG9s bC0+ZXZlbnRzID0gUE9MTElOOwogCiAJCWlmIChpbm90aWZ5X2ZkID49IDApIHsKQEAgLTgyMSwx NCArOTU5LDIwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQlpbm90aWZ5 X3BvbGwtPmV2ZW50cyA9IFBPTExJTjsKIAkJfQogCi0JCWZkY291bnQgPSBwcG9sbChwZmQsIG5m ZHMsIE5VTEwsICZvcmlnX21hc2spOworCQkvKiBzZXQgdGltZW91dCB0byBraWxsIGlkbGUgd29y a2VycyAqLworCQlpZiAodWRldl9saXN0X2lzX2VtcHR5KCZldmVudF9saXN0KSAmJiAhdWRldl9s aXN0X2lzX2VtcHR5KCZ3b3JrZXJfbGlzdCkpCisJCQl0aW1lb3V0ID0gJnRzOworCQllbHNlCisJ CQl0aW1lb3V0ID0gTlVMTDsKKworCQlmZGNvdW50ID0gcHBvbGwocGZkLCBuZmRzLCB0aW1lb3V0 LCAmb3JpZ19tYXNrKTsKIAkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvcmlnX21hc2ssIE5V TEwpOwotCQlpZiAoZmRjb3VudCA8IDApIHsKLQkJCWlmIChlcnJubyA9PSBFSU5UUikKLQkJCQln b3RvIGhhbmRsZV9zaWduYWxzOwotCQkJZXJyKHVkZXYsICJlcnJvciBpbiBzZWxlY3Q6ICVtXG4i KTsKKwkJaWYgKGZkY291bnQgPCAwICYmIGVycm5vICE9IEVJTlRSKQogCQkJY29udGludWU7Ci0J CX0KKworCQkvKiB0aW1lb3V0IG9yIGNvbmZpZyBjaGFuZ2VkIC0ga2lsbCBpZGxlIHdvcmtlcnMg Ki8KKwkJaWYgKGZkY291bnQgPT0gMCkKKwkJCXdvcmtlcl9raWxsX2lkbGUoKTsKIAogCQkvKiBn ZXQgY29udHJvbCBtZXNzYWdlICovCiAJCWlmIChjdHJsX3BvbGwtPnJldmVudHMgJiBQT0xMSU4p CkBAIC04MzgsMTYgKzk4MiwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CQlpZiAobW9uaXRvcl9wb2xsLT5yZXZlbnRzICYgUE9MTElOKSB7CiAJCQlzdHJ1Y3QgdWRldl9k ZXZpY2UgKmRldjsKIAotCQkJZGV2ID0gdWRldl9tb25pdG9yX3JlY2VpdmVfZGV2aWNlKGtlcm5l bF9tb25pdG9yKTsKLQkJCWlmIChkZXYgIT0gTlVMTCkgewotCQkJCXN0cnVjdCB1ZGV2X2V2ZW50 ICpldmVudDsKLQotCQkJCWV2ZW50ID0gdWRldl9ldmVudF9uZXcoZGV2KTsKLQkJCQlpZiAoZXZl bnQgIT0gTlVMTCkKLQkJCQkJZXZlbnRfcXVldWVfaW5zZXJ0KGV2ZW50KTsKLQkJCQllbHNlCi0J CQkJCXVkZXZfZGV2aWNlX3VucmVmKGRldik7Ci0JCQl9CisJCQlkZXYgPSB1ZGV2X21vbml0b3Jf cmVjZWl2ZV9kZXZpY2UobW9uaXRvcik7CisJCQlpZiAoZGV2ICE9IE5VTEwpCisJCQkJZXZlbnRf cXVldWVfaW5zZXJ0KGRldik7CisJCQllbHNlCisJCQkJdWRldl9kZXZpY2VfdW5yZWYoZGV2KTsK IAkJfQogCiAJCS8qIHJ1bGVzIGRpcmVjdG9yeSBpbm90aWZ5IHdhdGNoICovCkBAIC04NTUsMTMg Kzk5NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJaGFuZGxlX2lu b3RpZnkodWRldik7CiAKIGhhbmRsZV9zaWduYWxzOgotCQlzaWduYWxfcmVjZWl2ZWQgPSAwOwot CiAJCS8qIHJ1bGVzIGNoYW5nZWQsIHNldCBieSBpbm90aWZ5IG9yIGEgSFVQIHNpZ25hbCAqLwog CQlpZiAocmVsb2FkX2NvbmZpZykgewogCQkJc3RydWN0IHVkZXZfcnVsZXMgKnJ1bGVzX25ldzsK IAogCQkJcmVsb2FkX2NvbmZpZyA9IDA7CisJCQl3b3JrZXJfa2lsbF9pZGxlKCk7CiAJCQlydWxl c19uZXcgPSB1ZGV2X3J1bGVzX25ldyh1ZGV2LCByZXNvbHZlX25hbWVzKTsKIAkJCWlmIChydWxl c19uZXcgIT0gTlVMTCkgewogCQkJCXVkZXZfcnVsZXNfdW5yZWYocnVsZXMpOwpAQCAtODY5LDMy ICsxMDA3LDQxIEBAIGhhbmRsZV9zaWduYWxzOgogCQkJfQogCQl9CiAKLQkJaWYgKHNpZ2NoaWxk c193YWl0aW5nKSB7Ci0JCQlzaWdjaGlsZHNfd2FpdGluZyA9IDA7Ci0JCQlyZWFwX3NpZ2NoaWxk cygpOwotCQl9CisJCS8qIGNsZWFudXAga2lsbGVkIHdvcmtlciAqLworCQlpZiAod29ya2VyX2Rl YWQpIHsKKwkJCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbG9vcCwgKnRtcDsKKworCQkJdWRldl9s aXN0X25vZGVfZm9yZWFjaF9zYWZlKGxvb3AsIHRtcCwgJndvcmtlcl9saXN0KSB7CisJCQkJc3Ry dWN0IHdvcmtlciAqd29ya2VyID0gbm9kZV90b193b3JrZXIobG9vcCk7CisKKwkJCQlpZiAod29y a2VyLT5zdGF0ZSAhPSBXT1JLRVJfREVBRCkKKwkJCQkJY29udGludWU7CiAKLQkJaWYgKHJ1bl9l eGVjX3EpIHsKLQkJCXJ1bl9leGVjX3EgPSAwOwotCQkJaWYgKCFzdG9wX2V4ZWNfcSkKLQkJCQll dmVudF9xdWV1ZV9tYW5hZ2VyKHVkZXYpOworCQkJCXVkZXZfbGlzdF9ub2RlX3JlbW92ZSgmd29y a2VyLT5ub2RlKTsKKwkJCQlmcmVlKHdvcmtlcik7CisJCQl9CisJCQl3b3JrZXJfZGVhZCA9IDA7 CiAJCX0KIAogCQlpZiAoc2V0dGxlX3BpZCA+IDApIHsKIAkJCWtpbGwoc2V0dGxlX3BpZCwgU0lH VVNSMSk7CiAJCQlzZXR0bGVfcGlkID0gMDsKIAkJfQorCisJCWlmICghdWRldl9saXN0X2lzX2Vt cHR5KCZldmVudF9saXN0KSkKKwkJCWV2ZW50X3F1ZXVlX21hbmFnZXIodWRldik7CiAJfQorCiAJ dWRldl9xdWV1ZV9leHBvcnRfY2xlYW51cCh1ZGV2X3F1ZXVlX2V4cG9ydCk7CiAJcmMgPSAwOwor CWtpbGxwZygwLCBTSUdURVJNKTsKIGV4aXQ6Ci0KIAl1ZGV2X3F1ZXVlX2V4cG9ydF91bnJlZih1 ZGV2X3F1ZXVlX2V4cG9ydCk7CiAJdWRldl9ydWxlc191bnJlZihydWxlcyk7CiAJdWRldl9jdHJs X3VucmVmKHVkZXZfY3RybCk7CiAJaWYgKGlub3RpZnlfZmQgPj0gMCkKIAkJY2xvc2UoaW5vdGlm eV9mZCk7Ci0JdWRldl9tb25pdG9yX3VucmVmKGtlcm5lbF9tb25pdG9yKTsKKwl1ZGV2X21vbml0 b3JfdW5yZWYobW9uaXRvcik7CiAJdWRldl9zZWxpbnV4X2V4aXQodWRldik7CiAJdWRldl91bnJl Zih1ZGV2KTsKIAlsb2dnaW5nX2Nsb3NlKCk7Cg== --001485f85a94e99084046b4bd49b--