From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kay Sievers Date: Wed, 03 Jun 2009 19:44:31 +0000 Subject: Re: [GIT] Experimental threaded udev Message-Id: MIME-Version: 1 Content-Type: multipart/mixed; boundary="001636c5a3bc4d84cc046b76e48e" List-Id: References: <4A1EA138.10400@tuffmail.co.uk> In-Reply-To: <4A1EA138.10400@tuffmail.co.uk> To: linux-hotplug@vger.kernel.org --001636c5a3bc4d84cc046b76e48e Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On Tue, Jun 2, 2009 at 16:05, Kay Sievers wrote: > Version 5. I guess we should go for the signalfd stuff, it looks prett > nice. The socketpair instead of the rtsignal is also nice, it allows > us to pass back arbitrary data from finished events to the main > daemon. Version 7. We need to handle the netlink unicast addresses, they are not neccessarily the process pid, so we need to remember the netlink address. We also keep 2 workers around, and don't kill them, to handle incoming events without forking. Thanks, Kay --001636c5a3bc4d84cc046b76e48e Content-Type: text/x-patch; charset=US-ASCII; name="worker7.patch" Content-Disposition: attachment; filename="worker7.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fvig24j91 ZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmluZGV4IGFjNDRkN2EuLjhiNTFjMTAgMTAwNjQ0Ci0t LSBhL05FV1MKKysrIGIvTkVXUwpAQCAtMiw5ICsyLDE3IEBAIHVkZXYgMTQzCiA9PT09PT09PQog QnVnZml4ZXMuCiAKK0V2ZW50IHByb2Nlc3NlcyBub3cgZ2V0IHJlLXVzZWQgYWZ0ZXIgdGhleSBo YW5kbGVkIGFuIGV2ZW50LiBUaGlzIHJlZHVjZXMKK3ByZXNzdXJlIG9uIHRoZSBDUFUgc2lnbmlm aWNhbnRseSBiZWNhdXNlIGNsb25lZCBldmVudCBwcm9jZXNzZXMgbm8gbG9uZ2VyCitjYXVzZSBw YWdlIGZhdWx0cyBpbiB0aGUgbWFpbiBkYWVtb24uIEFmdGVyIHRoZSBldmVudHMgaGF2ZSBzZXR0 bGVkLCB0aGUKK25vIGxvbmdlciBuZWVkZWQgd29ya2VyIHByb2Nlc3NlcyBnZXQga2lsbGVkLgor CitUbyBiZSBhYmxlIHRvIHVzZSBzaWduYWxmZCgpLCB1ZGV2IGRlcGVuZHMgb24ga2VybmVsIHZl cnNpb24gMi42LjI1IG5vdy4KK0Fsc28gaW5vdGlmeSBzdXBwb3J0IGlzIHJlcXVpcmVkIG5vdyB0 byBydW4gdWRldi4KKwogVGhlIGZvcm1hdCBvZiB0aGUgcXVldWUgZXhwb3J0ZWQgYnkgdGhlIHVk ZXYgZGFtb24gaGFzIGNoYW5nZWQuIFRoZXJlIGlzCi1ubyBsb25nZXIgYSAvZGV2Ly51ZGV2L3F1 ZXVlLyBkaXJlY3RvcnkuIFRoZSBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQgd2l0aAotdWRldmFkbSBz ZXR0bGUgYW5kIGxpYnVkZWR2Lgorbm8gbG9uZ2VyIGEgL2Rldi8udWRldi9xdWV1ZS8gZGlyZWN0 b3J5LiBUaGUgY3VycmVudCBldmVudCBxdWV1ZSBjYW4gYmUKK2FjY2Vzc2VkIHdpdGggdWRldmFk bSBzZXR0bGUgYW5kIGxpYnVkZWR2LgogCiB1ZGV2IDE0MgogPT09PT09PT0KZGlmZiAtLWdpdCBh L1JFQURNRSBiL1JFQURNRQppbmRleCA3NzNiYzU1Li5hMTRlNWMwIDEwMDY0NAotLS0gYS9SRUFE TUUKKysrIGIvUkVBRE1FCkBAIC05LDExICs5LDEzIEBAIEltcG9ydGFudCBOb3RlOgogICByZWNv bW1lbmQgdG8gcmVwbGFjZSBhIGRpc3RybydzIHVkZXYgaW5zdGFsbGF0aW9uIHdpdGggdGhlIHVw c3RyZWFtIHZlcnNpb24uCiAKIFJlcXVpcmVtZW50czoKLSAgLSBWZXJzaW9uIDIuNi4yMiBvZiB0 aGUgTGludXgga2VybmVsIGZvciByZWxpYWJsZSBvcGVyYXRpb24gb2YgdGhpcyByZWxlYXNlIG9m Ci0gICAgdWRldi4gVGhlIGtlcm5lbCBtdXN0IG5vdCB1c2UgdGhlIENPTkZJR19TWVNGU19ERVBS RUNBVEVEKiBvcHRpb24uCisgIC0gVmVyc2lvbiAyLjYuMjUgb2YgdGhlIExpbnV4IGtlcm5lbCB3 aXRoIHN5c2ZzLCBwcm9jZnMsIHNpZ25hbGZkLCBpbm90aWZ5LAorICAgIHVuaXggZG9tYWluIHNv Y2tldHMsIG5ldHdvcmtpbmcgYW5kIGhvdHBsdWcgZW5hYmxlZC4KIAotICAtIFRoZSBrZXJuZWwg bXVzdCBoYXZlIHN5c2ZzLCB1bml4IGRvbWFpbiBzb2NrZXRzIGFuZCBuZXR3b3JraW5nIGVuYWJs ZWQuCi0gICAgVW5peCBkb21haW4gc29ja2V0cyAoQ09ORklHX1VOSVgpIGFzIGEgbG9hZGFibGUg a2VybmVsIG1vZHVsZSBpcyBub3QKKyAgLSBGb3IgcmVsaWFibGUgb3BlcmF0aW9uLCB0aGUga2Vy bmVsIG11c3Qgbm90IHVzZSB0aGUgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQqCisgICAgb3B0aW9u LgorCisgIC0gVW5peCBkb21haW4gc29ja2V0cyAoQ09ORklHX1VOSVgpIGFzIGEgbG9hZGFibGUg a2VybmVsIG1vZHVsZSBpcyBub3QKICAgICBzdXBwb3J0ZWQuCiAKICAgLSBUaGUgcHJvYyBmaWxl c3lzdGVtIG11c3QgYmUgbW91bnRlZCBvbiAvcHJvYy8sIHRoZSBzeXNmcyBmaWxlc3lzdGVtIG11 c3QKQEAgLTI5LDIxICszMSwxOCBAQCBPcGVyYXRpb246CiAgIFVkZXYgY3JlYXRlcyBhbmQgcmVt b3ZlcyBkZXZpY2Ugbm9kZXMgaW4gL2Rldi8sIGJhc2VkIG9uIGV2ZW50cyB0aGUga2VybmVsCiAg IHNlbmRzIG91dCBvbiBkZXZpY2UgZGlzY292ZXJ5IG9yIHJlbW92YWwuCiAKLSAgLSBWZXJ5IGVh cmx5IGluIHRoZSBib290IHByb2Nlc3MsIHRoZSAvZGV2LyBkaXJlY3Rvcnkgc2hvdWxkIGdldCBh ICd0bXBmcycKLSAgICBmaWxlc3lzdGVtIG1vdW50ZWQsIHdoaWNoIGlzIHBvcHVsYXRlZCBmcm9t IHNjcmF0Y2ggYnkgdWRldi4gQ3JlYXRlZCBub2RlcwotICAgIG9yIGNoYW5nZWQgcGVybWlzc2lv bnMgd2lsbCBub3Qgc3Vydml2ZSBhIHJlYm9vdCwgd2hpY2ggaXMgaW50ZW50aW9uYWwuCisgIC0g RWFybHkgaW4gdGhlIGJvb3QgcHJvY2VzcywgdGhlIC9kZXYvIGRpcmVjdG9yeSBzaG91bGQgZ2V0 IGEgJ3RtcGZzJworICAgIGZpbGVzeXN0ZW0gbW91bnRlZCwgd2hpY2ggaXMgbWFpbnRhaW5lZCBi eSB1ZGV2LiBDcmVhdGVkIG5vZGVzIG9yIGNoYW5nZWQKKyAgICBwZXJtaXNzaW9ucyB3aWxsIG5v dCBzdXJ2aXZlIGEgcmVib290LCB3aGljaCBpcyBpbnRlbnRpb25hbC4KIAogICAtIFRoZSBjb250 ZW50IG9mIC9saWIvdWRldi9kZXZpY2VzLyBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgdGhlIG5v ZGVzLAogICAgIHN5bWxpbmtzIGFuZCBkaXJlY3Rvcmllcywgd2hpY2ggYXJlIGFsd2F5cyBleHBl Y3RlZCB0byBiZSBpbiAvZGV2LCBzaG91bGQKICAgICBiZSBjb3BpZWQgb3ZlciB0byB0aGUgdG1w ZnMgbW91bnRlZCAvZGV2LCB0byBwcm92aWRlIHRoZSByZXF1aXJlZCBub2RlcwogICAgIHRvIGlu aXRpYWxpemUgdWRldiBhbmQgY29udGludWUgYm9vdGluZy4KIAotICAtIFRoZSBvbGQgaG90cGx1 ZyBoZWxwZXIgL3NiaW4vaG90cGx1ZyBzaG91bGQgYmUgZGlzYWJsZWQgb24gYm9vdHVwLCBiZWZv cmUKLSAgICBhY3Rpb25zIGxpa2UgbG9hZGluZyBrZXJuZWwgbW9kdWxlcyBhcmUgdGFrZW4sIHdo aWNoIG1heSBjYXVzZSBhIGxvdCBvZgotICAgIGV2ZW50cy4KLQotICAtIFRoZSB1ZGV2ZCBkYWVt b24gbXVzdCBiZSBzdGFydGVkIG9uIGJvb3R1cCB0byByZWNlaXZlIG5ldGxpbmsgdWV2ZW50cwot ICAgIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIgY29yZS4KKyAgLSBUaGUgb2xkIGhvdHBsdWcgaGVs cGVyIC9zYmluL2hvdHBsdWcgc2hvdWxkIGJlIGRpc2FibGVkIGluIHRoZSBrZXJuZWwKKyAgICBj b25maWd1cmF0aW9uLCBpdCBpcyBub3QgbmVlZGVkLCBhbmQgbWF5IHJlbmRlciB0aGUgc3lzdGVt IHVudXNhYmxlCisgICAgYmVjYXVzZSBvZiBhIGZvcmstYm9tYmluZyBiZWhhdmlvci4KIAogICAt IEFsbCBrZXJuZWwgZXZlbnRzIGFyZSBtYXRjaGVkIGFnYWluc3QgYSBzZXQgb2Ygc3BlY2lmaWVk IHJ1bGVzIGluCiAgICAgL2xpYi91ZGV2L3J1bGVzLmQvIHdoaWNoIG1ha2UgaXQgcG9zc2libGUg dG8gaG9vayBpbnRvIHRoZSBldmVudApkaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8KaW5kZXggNWI2 YWY2NC4uYmVkY2NkYiAxMDA2NDQKLS0tIGEvVE9ETworKysgYi9UT0RPCkBAIC0xLDMgKzEsNCBA QAorCiAgIG8gYWRkIHRlc3RzIGZvciBrZXJuZWwgcHJvdmlkZWQgREVWTkFNRSBsb2dpYwogICBv IGRyb3AgbW9kcHJvYmUgZmxvcHB5IGFsaWFzIChTVVNFKSwgaXQgd2lsbCBiZSBpbiB0aGUgbW9k dWxlICgyLjYuMzApCiAgIG8gcmVtb3ZlIE1NQyBydWxlcywgdGhleSBnb3QgYSBtb2RhbGlhcyBu b3cgKDIuNi4zMCkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRl eCBmMWQwMDhlLi45ODU3ZDUyIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmln dXJlLmFjCkBAIC01LDYgKzUsNyBAQCBBQ19QUkVSRVEoMi42MCkKIEFNX0lOSVRfQVVUT01BS0Uo W2NoZWNrLW5ld3MgZm9yZWlnbiAxLjkgZGlzdC1iemlwMl0pCiBBQ19ESVNBQkxFX1NUQVRJQwog QUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCitkbmwgQU1fU0lMRU5UX1JVTEVTCiBBQ19TWVNfTEFS R0VGSUxFCiBBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCiBBQ19QUk9HX0xJQlRPT0wKQEAgLTIz LDEwICsyNCw2IEBAIEFDX1NVQlNUKExJQlVERVZfTFRfQUdFKQogCiBBQ19QQVRIX1BST0coW1hT TFRQUk9DXSwgW3hzbHRwcm9jXSkKIAotQUNfQ0hFQ0tfTElCKGMsIGlub3RpZnlfaW5pdCwKLQlb QUNfREVGSU5FKFtIQVZFX0lOT1RJRlldLCAxLCBbaW5vdGlmeSBhdmFpbGFibGVdKV0sCi0JW0FD X01TR19XQVJOKFtpbm90aWZ5IHN1cHBvcnQgZGlzYWJsZWRdKV0pCi0KIEFDX0FSR19XSVRIKHVk ZXYtcHJlZml4LAogCUFTX0hFTFBfU1RSSU5HKFstLXdpdGgtdWRldi1wcmVmaXg9RElSXSwgW2Fk ZCBwcmVmaXggdG8gaW50ZXJuYWwgdWRldiBwYXRoIG5hbWVzXSksCiAJW10sIFt3aXRoX3VkZXZf cHJlZml4PScke2V4ZWNfcHJlZml4fSddKQpkaWZmIC0tZ2l0IGEvdWRldi9NYWtlZmlsZS5hbSBi L3VkZXYvTWFrZWZpbGUuYW0KaW5kZXggNmNkMmYyMy4uOTQ5ODllNiAxMDA2NDQKLS0tIGEvdWRl di9NYWtlZmlsZS5hbQorKysgYi91ZGV2L01ha2VmaWxlLmFtCkBAIC0xNCw3ICsxNCw2IEBAIGNv bW1vbl9sZGFkZCA9CiAKIGNvbW1vbl9maWxlcyA9IFwKIAl1ZGV2LmggXAotCXVkZXYtc3lzZGVw cy5oIFwKIAl1ZGV2LWV2ZW50LmMgXAogCXVkZXYtd2F0Y2guYyBcCiAJdWRldi1ub2RlLmMgXApk aWZmIC0tZ2l0IGEvdWRldi9saWIvbGlidWRldi1tb25pdG9yLmMgYi91ZGV2L2xpYi9saWJ1ZGV2 LW1vbml0b3IuYwppbmRleCAzOTVhNGQyLi4zM2EwNjA1IDEwMDY0NAotLS0gYS91ZGV2L2xpYi9s aWJ1ZGV2LW1vbml0b3IuYworKysgYi91ZGV2L2xpYi9saWJ1ZGV2LW1vbml0b3IuYwpAQCAtMzIs MTUgKzMyLDE3IEBAIHN0cnVjdCB1ZGV2X21vbml0b3IgewogCWludCByZWZjb3VudDsKIAlpbnQg c29jazsKIAlzdHJ1Y3Qgc29ja2FkZHJfbmwgc25sOwotCXN0cnVjdCBzb2NrYWRkcl9ubCBzbmxf cGVlcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfbmwgc25sX3RydXN0ZWRfc2VuZGVyOworCXN0cnVjdCBz b2NrYWRkcl9ubCBzbmxfZGVzdGluYXRpb247CiAJc3RydWN0IHNvY2thZGRyX3VuIHN1bjsKIAlz b2NrbGVuX3QgYWRkcmxlbjsKIAlzdHJ1Y3QgdWRldl9saXN0X25vZGUgZmlsdGVyX3N1YnN5c3Rl bV9saXN0OwogfTsKIAogZW51bSB1ZGV2X21vbml0b3JfbmV0bGlua19ncm91cCB7Ci0JVURFVl9N T05JVE9SX0tFUk5FTAk9IDEsCi0JVURFVl9NT05JVE9SX1VERVYJPSAyLAorCVVERVZfTU9OSVRP Ul9OT05FLAorCVVERVZfTU9OSVRPUl9LRVJORUwsCisJVURFVl9NT05JVE9SX1VERVYsCiB9Owog CiAjZGVmaW5lIFVERVZfTU9OSVRPUl9NQUdJQwkJMHhjYWZlMWRlYQpAQCAtMTcxLDExICsxNzMs MTEgQEAgc3RydWN0IHVkZXZfbW9uaXRvciAqdWRldl9tb25pdG9yX25ld19mcm9tX25ldGxpbmso c3RydWN0IHVkZXYgKnVkZXYsIGNvbnN0IGNoYXIKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAobmFt ZSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoc3RyY21wKG5hbWUsICJrZXJuZWwiKSA9 PSAwKQotCQlncm91cCA9IFVERVZfTU9OSVRPUl9LRVJORUw7CisJCWdyb3VwID0gVURFVl9NT05J VE9SX05PTkU7CiAJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ1ZGV2IikgPT0gMCkKIAkJZ3JvdXAg PSBVREVWX01PTklUT1JfVURFVjsKKwllbHNlIGlmIChzdHJjbXAobmFtZSwgImtlcm5lbCIpID09 IDApCisJCWdyb3VwID0gVURFVl9NT05JVE9SX0tFUk5FTDsKIAllbHNlCiAJCXJldHVybiBOVUxM OwogCkBAIC0xOTMsOCArMTk1LDEwIEBAIHN0cnVjdCB1ZGV2X21vbml0b3IgKnVkZXZfbW9uaXRv cl9uZXdfZnJvbV9uZXRsaW5rKHN0cnVjdCB1ZGV2ICp1ZGV2LCBjb25zdCBjaGFyCiAKIAl1ZGV2 X21vbml0b3ItPnNubC5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOwogCXVkZXZfbW9uaXRvci0+c25s Lm5sX2dyb3VwcyA9IGdyb3VwOwotCXVkZXZfbW9uaXRvci0+c25sX3BlZXIubmxfZmFtaWx5ID0g QUZfTkVUTElOSzsKLQl1ZGV2X21vbml0b3ItPnNubF9wZWVyLm5sX2dyb3VwcyA9IFVERVZfTU9O SVRPUl9VREVWOworCisJLyogZGVmYXVsdCBkZXN0aW5hdGlvbiBmb3Igc2VuZGluZyAqLworCXVk ZXZfbW9uaXRvci0+c25sX2Rlc3RpbmF0aW9uLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisJdWRl dl9tb25pdG9yLT5zbmxfZGVzdGluYXRpb24ubmxfZ3JvdXBzID0gVURFVl9NT05JVE9SX1VERVY7 CiAKIAlkYmcodWRldiwgIm1vbml0b3IgJXAgY3JlYXRlZCB3aXRoIE5FVExJTktfS09CSkVDVF9V RVZFTlQgKCV1KVxuIiwgdWRldl9tb25pdG9yLCBncm91cCk7CiAJcmV0dXJuIHVkZXZfbW9uaXRv cjsKQEAgLTI4MSw2ICsyODUsMTIgQEAgaW50IHVkZXZfbW9uaXRvcl9maWx0ZXJfdXBkYXRlKHN0 cnVjdCB1ZGV2X21vbml0b3IgKnVkZXZfbW9uaXRvcikKIAlyZXR1cm4gZXJyOwogfQogCitpbnQg dWRldl9tb25pdG9yX2FsbG93X3VuaWNhc3Rfc2VuZGVyKHN0cnVjdCB1ZGV2X21vbml0b3IgKnVk ZXZfbW9uaXRvciwgc3RydWN0IHVkZXZfbW9uaXRvciAqc2VuZGVyKQoreworCXVkZXZfbW9uaXRv ci0+c25sX3RydXN0ZWRfc2VuZGVyLm5sX3BpZCA9IHNlbmRlci0+c25sLm5sX3BpZDsKKwlyZXR1 cm4gMDsKK30KKwogaW50IHVkZXZfbW9uaXRvcl9lbmFibGVfcmVjZWl2aW5nKHN0cnVjdCB1ZGV2 X21vbml0b3IgKnVkZXZfbW9uaXRvcikKIHsKIAlpbnQgZXJyOwpAQCAtMjkzLDYgKzMwMywxOSBA QCBpbnQgdWRldl9tb25pdG9yX2VuYWJsZV9yZWNlaXZpbmcoc3RydWN0IHVkZXZfbW9uaXRvciAq dWRldl9tb25pdG9yKQogCQl1ZGV2X21vbml0b3JfZmlsdGVyX3VwZGF0ZSh1ZGV2X21vbml0b3Ip OwogCQllcnIgPSBiaW5kKHVkZXZfbW9uaXRvci0+c29jaywKIAkJCSAgIChzdHJ1Y3Qgc29ja2Fk ZHIgKikmdWRldl9tb25pdG9yLT5zbmwsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpKTsKKwkJ aWYgKGVyciA9PSAwKSB7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfbmwgc25sOworCQkJc29ja2xlbl90 IGFkZHJsZW47CisKKwkJCS8qCisJCQkgKiBnZXQgdGhlIGFkZHJlc3MgdGhlIGtlcm5lbCBoYXMg YXNzaWduZWQgdXMKKwkJCSAqIGl0IGlzIHVzdWFsbHksIGJ1dCBub3QgbmVjY2Vzc2FyaWx5IHRo ZSBwaWQKKwkJCSAqLworCQkJYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpOwor CQkJZXJyID0gZ2V0c29ja25hbWUodWRldl9tb25pdG9yLT5zb2NrLCAoc3RydWN0IHNvY2thZGRy ICopJnNubCwgJmFkZHJsZW4pOworCQkJaWYgKGVyciA9PSAwKQorCQkJCXVkZXZfbW9uaXRvci0+ c25sLm5sX3BpZCA9IHNubC5ubF9waWQ7CisJCX0KIAl9IGVsc2UgewogCQlyZXR1cm4gLUVJTlZB TDsKIAl9CkBAIC0zMTQsNiArMzM3LDE1IEBAIGludCB1ZGV2X21vbml0b3Jfc2V0X3JlY2VpdmVf YnVmZmVyX3NpemUoc3RydWN0IHVkZXZfbW9uaXRvciAqdWRldl9tb25pdG9yLCBpbnQKIAlyZXR1 cm4gc2V0c29ja29wdCh1ZGV2X21vbml0b3ItPnNvY2ssIFNPTF9TT0NLRVQsIFNPX1JDVkJVRkZP UkNFLCAmc2l6ZSwgc2l6ZW9mKHNpemUpKTsKIH0KIAoraW50IHVkZXZfbW9uaXRvcl9kaXNjb25u ZWN0KHN0cnVjdCB1ZGV2X21vbml0b3IgKnVkZXZfbW9uaXRvcikKK3sKKwlpbnQgZXJyOworCisJ ZXJyID0gY2xvc2UodWRldl9tb25pdG9yLT5zb2NrKTsKKwl1ZGV2X21vbml0b3ItPnNvY2sgPSAt MTsKKwlyZXR1cm4gZXJyOworfQorCiAvKioKICAqIHVkZXZfbW9uaXRvcl9yZWY6CiAgKiBAdWRl dl9tb25pdG9yOiB1ZGV2IG1vbml0b3IKQEAgLTQ3OCwxMCArNTEwLDEzIEBAIHJldHJ5OgogCiAJ aWYgKHVkZXZfbW9uaXRvci0+c25sLm5sX2ZhbWlseSAhPSAwKSB7CiAJCWlmIChzbmwubmxfZ3Jv dXBzID09IDApIHsKLQkJCWluZm8odWRldl9tb25pdG9yLT51ZGV2LCAidW5pY2FzdCBuZXRsaW5r IG1lc3NhZ2UgaWdub3JlZFxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlpZiAoc25sLm5s X2dyb3VwcyA9PSBVREVWX01PTklUT1JfS0VSTkVMKSB7CisJCQkvKiB1bmljYXN0IG1lc3NhZ2Us IGNoZWNrIGlmIHdlIHRydXN0IHRoZSBzZW5kZXIgKi8KKwkJCWlmICh1ZGV2X21vbml0b3ItPnNu bF90cnVzdGVkX3NlbmRlci5ubF9waWQgPT0gMCB8fAorCQkJICAgIHNubC5ubF9waWQgIT0gdWRl dl9tb25pdG9yLT5zbmxfdHJ1c3RlZF9zZW5kZXIubmxfcGlkKSB7CisJCQkJaW5mbyh1ZGV2X21v bml0b3ItPnVkZXYsICJ1bmljYXN0IG5ldGxpbmsgbWVzc2FnZSBpZ25vcmVkXG4iKTsKKwkJCQly ZXR1cm4gTlVMTDsKKwkJCX0KKwkJfSBlbHNlIGlmIChzbmwubmxfZ3JvdXBzID09IFVERVZfTU9O SVRPUl9LRVJORUwpIHsKIAkJCWlmIChzbmwubmxfcGlkID4gMCkgewogCQkJCWluZm8odWRldl9t b25pdG9yLT51ZGV2LCAibXVsdGljYXN0IGtlcm5lbCBuZXRsaW5rIG1lc3NhZ2UgZnJvbSBwaWQg JWQgaWdub3JlZFxuIiwgc25sLm5sX3BpZCk7CiAJCQkJcmV0dXJuIE5VTEw7CkBAIC02MjEsNyAr NjU2LDggQEAgcmV0cnk6CiAJcmV0dXJuIHVkZXZfZGV2aWNlOwogfQogCi1pbnQgdWRldl9tb25p dG9yX3NlbmRfZGV2aWNlKHN0cnVjdCB1ZGV2X21vbml0b3IgKnVkZXZfbW9uaXRvciwgc3RydWN0 IHVkZXZfZGV2aWNlICp1ZGV2X2RldmljZSkKK2ludCB1ZGV2X21vbml0b3Jfc2VuZF9kZXZpY2Uo c3RydWN0IHVkZXZfbW9uaXRvciAqdWRldl9tb25pdG9yLAorCQkJICAgICBzdHJ1Y3QgdWRldl9t b25pdG9yICpkZXN0aW5hdGlvbiwgc3RydWN0IHVkZXZfZGV2aWNlICp1ZGV2X2RldmljZSkKIHsK IAlzdHJ1Y3QgbXNnaGRyIHNtc2c7CiAJc3RydWN0IGlvdmVjIGlvdlsyXTsKQEAgLTY4Myw4ICs3 MTksMTYgQEAgaW50IHVkZXZfbW9uaXRvcl9zZW5kX2RldmljZShzdHJ1Y3QgdWRldl9tb25pdG9y ICp1ZGV2X21vbml0b3IsIHN0cnVjdCB1ZGV2X2RldmkKIAkJbWVtc2V0KCZzbXNnLCAweDAwLCBz aXplb2Yoc3RydWN0IG1zZ2hkcikpOwogCQlzbXNnLm1zZ19pb3YgPSBpb3Y7CiAJCXNtc2cubXNn X2lvdmxlbiA9IDI7Ci0JCS8qIG5vIGRlc3RpbmF0aW9uIGJlc2lkZXMgdGhlIG11dGljYXN0IGdy b3VwLCB3ZSB3aWxsIGFsd2F5cyBnZXQgRUNPTk5SRUZVU0VEICovCi0JCXNtc2cubXNnX25hbWUg PSAmdWRldl9tb25pdG9yLT5zbmxfcGVlcjsKKwkJLyoKKwkJICogVXNlIGN1c3RvbSBhZGRyZXNz IGZvciB0YXJnZXQsIG9yIHRoZSBkZWZhdWx0IG9uZS4KKwkJICoKKwkJICogSWYgd2Ugc2VuZCB0 byBhIG11dGljYXN0IGdyb3VwLCB3ZSB3aWxsIGdldAorCQkgKiBFQ09OTlJFRlVTRUQsIHdoaWNo IGlzIGV4cGVjdGVkLgorCQkgKi8KKwkJaWYgKGRlc3RpbmF0aW9uICE9IE5VTEwpCisJCQlzbXNn Lm1zZ19uYW1lID0gJmRlc3RpbmF0aW9uLT5zbmw7CisJCWVsc2UKKwkJCXNtc2cubXNnX25hbWUg PSAmdWRldl9tb25pdG9yLT5zbmxfZGVzdGluYXRpb247CiAJCXNtc2cubXNnX25hbWVsZW4gPSBz aXplb2Yoc3RydWN0IHNvY2thZGRyX25sKTsKIAl9IGVsc2UgewogCQlyZXR1cm4gLTE7CmRpZmYg LS1naXQgYS91ZGV2L2xpYi9saWJ1ZGV2LXByaXZhdGUuaCBiL3VkZXYvbGliL2xpYnVkZXYtcHJp dmF0ZS5oCmluZGV4IGRjMDJhODQuLjU1MTIzNDEgMTAwNjQ0Ci0tLSBhL3VkZXYvbGliL2xpYnVk ZXYtcHJpdmF0ZS5oCisrKyBiL3VkZXYvbGliL2xpYnVkZXYtcHJpdmF0ZS5oCkBAIC04Niw3ICs4 NiwxMCBAQCBpbnQgdWRldl9kZXZpY2VfZGVsZXRlX2RiKHN0cnVjdCB1ZGV2X2RldmljZSAqdWRl dl9kZXZpY2UpOwogaW50IHVkZXZfZGV2aWNlX3JlbmFtZV9kYihzdHJ1Y3QgdWRldl9kZXZpY2Ug KnVkZXZfZGV2aWNlLCBjb25zdCBjaGFyICpkZXZwYXRoKTsKIAogLyogbGlidWRldi1tb25pdG9y IC0gbmV0bGluay91bml4IHNvY2tldCBjb21tdW5pY2F0aW9uICAqLwotaW50IHVkZXZfbW9uaXRv cl9zZW5kX2RldmljZShzdHJ1Y3QgdWRldl9tb25pdG9yICp1ZGV2X21vbml0b3IsIHN0cnVjdCB1 ZGV2X2RldmljZSAqdWRldl9kZXZpY2UpOworaW50IHVkZXZfbW9uaXRvcl9kaXNjb25uZWN0KHN0 cnVjdCB1ZGV2X21vbml0b3IgKnVkZXZfbW9uaXRvcik7CitpbnQgdWRldl9tb25pdG9yX2FsbG93 X3VuaWNhc3Rfc2VuZGVyKHN0cnVjdCB1ZGV2X21vbml0b3IgKnVkZXZfbW9uaXRvciwgc3RydWN0 IHVkZXZfbW9uaXRvciAqc2VuZGVyKTsKK2ludCB1ZGV2X21vbml0b3Jfc2VuZF9kZXZpY2Uoc3Ry dWN0IHVkZXZfbW9uaXRvciAqdWRldl9tb25pdG9yLAorCQkJICAgICBzdHJ1Y3QgdWRldl9tb25p dG9yICpkZXN0aW5hdGlvbiwgc3RydWN0IHVkZXZfZGV2aWNlICp1ZGV2X2RldmljZSk7CiBpbnQg dWRldl9tb25pdG9yX3NldF9yZWNlaXZlX2J1ZmZlcl9zaXplKHN0cnVjdCB1ZGV2X21vbml0b3Ig KnVkZXZfbW9uaXRvciwgaW50IHNpemUpOwogCiAvKiBsaWJ1ZGV2LWN0cmwgLSBkYWVtb24gcnVu dGltZSBzZXR1cCAqLwpkaWZmIC0tZ2l0IGEvdWRldi91ZGV2LWV2ZW50LmMgYi91ZGV2L3VkZXYt ZXZlbnQuYwppbmRleCBkNTIxMjUxLi4zZjY5YzBiIDEwMDY0NAotLS0gYS91ZGV2L3VkZXYtZXZl bnQuYworKysgYi91ZGV2L3VkZXYtZXZlbnQuYwpAQCAtNzM0LDE4ICs3MzQsMTMgQEAgaW50IHVk ZXZfZXZlbnRfZXhlY3V0ZV9ydW4oc3RydWN0IHVkZXZfZXZlbnQgKmV2ZW50KQogCQkJbW9uaXRv ciA9IHVkZXZfbW9uaXRvcl9uZXdfZnJvbV9zb2NrZXQoZXZlbnQtPnVkZXYsICZjbWRbc3RybGVu KCJzb2NrZXQ6IildKTsKIAkJCWlmIChtb25pdG9yID09IE5VTEwpCiAJCQkJY29udGludWU7Ci0J CQl1ZGV2X21vbml0b3Jfc2VuZF9kZXZpY2UobW9uaXRvciwgZXZlbnQtPmRldik7CisJCQl1ZGV2 X21vbml0b3Jfc2VuZF9kZXZpY2UobW9uaXRvciwgTlVMTCwgZXZlbnQtPmRldik7CiAJCQl1ZGV2 X21vbml0b3JfdW5yZWYobW9uaXRvcik7CiAJCX0gZWxzZSB7CiAJCQljaGFyIHByb2dyYW1bVVRJ TF9QQVRIX1NJWkVdOwogCQkJY2hhciAqKmVudnA7CiAKIAkJCXVkZXZfZXZlbnRfYXBwbHlfZm9y bWF0KGV2ZW50LCBjbWQsIHByb2dyYW0sIHNpemVvZihwcm9ncmFtKSk7Ci0JCQlpZiAoZXZlbnQt PnRyYWNlKQotCQkJCWZwcmludGYoc3RkZXJyLCAicnVuICAlcyAoJWxsdSkgJyVzJ1xuIiwKLQkJ CQkgICAgICAgdWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgoZXZlbnQtPmRldiksCi0JCQkJICAgICAg IHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZXZlbnQtPmRldiksCi0JCQkJICAgICAgIHByb2dyYW0p OwogCQkJZW52cCA9IHVkZXZfZGV2aWNlX2dldF9wcm9wZXJ0aWVzX2VudnAoZXZlbnQtPmRldik7 CiAJCQlpZiAodXRpbF9ydW5fcHJvZ3JhbShldmVudC0+dWRldiwgcHJvZ3JhbSwgZW52cCwgTlVM TCwgMCwgTlVMTCkgIT0gMCkgewogCQkJCWlmICghdWRldl9saXN0X2VudHJ5X2dldF9mbGFnKGxp c3RfZW50cnkpKQpkaWZmIC0tZ2l0IGEvdWRldi91ZGV2LXN5c2RlcHMuaCBiL3VkZXYvdWRldi1z eXNkZXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NjcxYmEuLjAwMDAwMDAK LS0tIGEvdWRldi91ZGV2LXN5c2RlcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAK LS8qCi0gKiB3cmFwcGluZyBvZiBsaWJjIGZlYXR1cmVzIGFuZCBrZXJuZWwgaW50ZXJmYWNlcwot ICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2 cmZ5Lm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y Ci0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICovCi0KLSNpZm5k ZWYgX1VERVZfU1lTREVQU19IXwotI2RlZmluZSBfVURFVl9TWVNERVBTX0hfCi0KLSNpbmNsdWRl IDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWZuZGVmIEhBVkVfSU5PVElGWQot c3RhdGljIGlubGluZSBpbnQgaW5vdGlmeV9pbml0KHZvaWQpCi17Ci0JZXJybm8gPSBFTk9TWVM7 Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpbm90aWZ5X2FkZF93YXRjaChp bnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQzMl90IG1hc2spCi17Ci0JcmV0dXJuIC0xOwot fQotCi0jZGVmaW5lIElOX0NSRUFURQkwCi0jZGVmaW5lIElOX0RFTEVURQkwCi0jZGVmaW5lIElO X01PVkUJCTAKLSNkZWZpbmUgSU5fQ0xPU0VfV1JJVEUJMAotCi0jZW5kaWYgLyogSEFWRV9JTk9U SUZZICovCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3VkZXYvdWRldi13YXRjaC5jIGIvdWRldi91ZGV2 LXdhdGNoLmMKaW5kZXggNTM0OTJlNS4uNWE0OWM5NiAxMDA2NDQKLS0tIGEvdWRldi91ZGV2LXdh dGNoLmMKKysrIGIvdWRldi91ZGV2LXdhdGNoLmMKQEAgLTI2LDI3ICsyNiwyNCBAQAogI2luY2x1 ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgot I2lmZGVmIEhBVkVfSU5PVElGWQogI2luY2x1ZGUgPHN5cy9pbm90aWZ5Lmg+Ci0jZW5kaWYKIAog I2luY2x1ZGUgInVkZXYuaCIKIAotaW50IGlub3RpZnlfZmQgPSAtMTsKK3N0YXRpYyBpbnQgaW5v dGlmeV9mZCA9IC0xOwogCiAvKiBpbm90aWZ5IGRlc2NyaXB0b3IsIHdpbGwgYmUgc2hhcmVkIHdp dGggcnVsZXMgZGlyZWN0b3J5OwogICogc2V0IHRvIGNsb2V4ZWMgc2luY2Ugd2UgbmVlZCBvdXIg Y2hpbGRyZW4gdG8gYmUgYWJsZSB0byBhZGQKICAqIHdhdGNoZXMgZm9yIHVzCiAgKi8KLXZvaWQg dWRldl93YXRjaF9pbml0KHN0cnVjdCB1ZGV2ICp1ZGV2KQoraW50IHVkZXZfd2F0Y2hfaW5pdChz dHJ1Y3QgdWRldiAqdWRldikKIHsKIAlpbm90aWZ5X2ZkID0gaW5vdGlmeV9pbml0KCk7CiAJaWYg KGlub3RpZnlfZmQgPj0gMCkKIAkJdXRpbF9zZXRfZmRfY2xvZXhlYyhpbm90aWZ5X2ZkKTsKLQll bHNlIGlmIChlcnJubyA9PSBFTk9TWVMpCi0JCWluZm8odWRldiwgInVuYWJsZSB0byB1c2UgaW5v dGlmeSwgdWRldmQgd2lsbCBub3QgbW9uaXRvciBydWxlIGZpbGVzIGNoYW5nZXNcbiIpOwogCWVs c2UKIAkJZXJyKHVkZXYsICJpbm90aWZ5X2luaXQgZmFpbGVkOiAlbVxuIik7CisJcmV0dXJuIGlu b3RpZnlfZmQ7CiB9CiAKIC8qIG1vdmUgYW55IG9sZCB3YXRjaGVzIGRpcmVjdG9yeSBvdXQgb2Yg dGhlIHdheSwgYW5kIHRoZW4gcmVzdG9yZQpkaWZmIC0tZ2l0IGEvdWRldi91ZGV2LmggYi91ZGV2 L3VkZXYuaAppbmRleCA4ZjJjMWM2Li43MTg3OTc1IDEwMDY0NAotLS0gYS91ZGV2L3VkZXYuaAor KysgYi91ZGV2L3VkZXYuaApAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5o PgogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogCi0jaW5jbHVkZSAidWRldi1zeXNkZXBzLmgiCiAj aW5jbHVkZSAibGliL2xpYnVkZXYuaCIKICNpbmNsdWRlICJsaWIvbGlidWRldi1wcml2YXRlLmgi CiAKQEAgLTUzLDcgKzUyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGxvZ2dpbmdfY2xvc2Uodm9p ZCkKIH0KIAogc3RydWN0IHVkZXZfZXZlbnQgewotCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSBub2Rl OwogCXN0cnVjdCB1ZGV2ICp1ZGV2OwogCXN0cnVjdCB1ZGV2X2RldmljZSAqZGV2OwogCXN0cnVj dCB1ZGV2X2RldmljZSAqZGV2X3BhcmVudDsKQEAgLTY0LDEwICs2Miw2IEBAIHN0cnVjdCB1ZGV2 X2V2ZW50IHsKIAl1aWRfdCB1aWQ7CiAJZ2lkX3QgZ2lkOwogCXN0cnVjdCB1ZGV2X2xpc3Rfbm9k ZSBydW5fbGlzdDsKLQlwaWRfdCBwaWQ7Ci0JaW50IGV4aXRzdGF0dXM7Ci0JdGltZV90IHF1ZXVl X3RpbWU7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGludCBkZWxheWluZ19zZXFudW07CiAJdW5zaWdu ZWQgaW50IGdyb3VwX2ZpbmFsOjE7CiAJdW5zaWduZWQgaW50IG93bmVyX2ZpbmFsOjE7CiAJdW5z aWduZWQgaW50IG1vZGVfZmluYWw6MTsKQEAgLTc2LDcgKzcwLDYgQEAgc3RydWN0IHVkZXZfZXZl bnQgewogCXVuc2lnbmVkIGludCBydW5fZmluYWw6MTsKIAl1bnNpZ25lZCBpbnQgaWdub3JlX2Rl dmljZToxOwogCXVuc2lnbmVkIGludCBpbm90aWZ5X3dhdGNoOjE7Ci0JdW5zaWduZWQgaW50IHRy YWNlOjE7CiB9OwogCiBzdHJ1Y3QgdWRldl93YXRjaCB7CkBAIC0xMDEsOCArOTQsNyBAQCBpbnQg dWRldl9ldmVudF9hcHBseV9zdWJzeXNfa2VybmVsKHN0cnVjdCB1ZGV2X2V2ZW50ICpldmVudCwg Y29uc3QgY2hhciAqc3RyaW5nLAogCQkJCSAgIGNoYXIgKnJlc3VsdCwgc2l6ZV90IG1heHNpemUs IGludCByZWFkX3ZhbHVlKTsKIAogLyogdWRldi13YXRjaC5jICovCi1leHRlcm4gaW50IGlub3Rp ZnlfZmQ7Ci12b2lkIHVkZXZfd2F0Y2hfaW5pdChzdHJ1Y3QgdWRldiAqdWRldik7CitpbnQgdWRl dl93YXRjaF9pbml0KHN0cnVjdCB1ZGV2ICp1ZGV2KTsKIHZvaWQgdWRldl93YXRjaF9yZXN0b3Jl KHN0cnVjdCB1ZGV2ICp1ZGV2KTsKIHZvaWQgdWRldl93YXRjaF9iZWdpbihzdHJ1Y3QgdWRldiAq dWRldiwgc3RydWN0IHVkZXZfZGV2aWNlICpkZXYpOwogdm9pZCB1ZGV2X3dhdGNoX2VuZChzdHJ1 Y3QgdWRldiAqdWRldiwgc3RydWN0IHVkZXZfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvdWRl di91ZGV2YWRtLnhtbCBiL3VkZXYvdWRldmFkbS54bWwKaW5kZXggNTM4MTgwYi4uMmUwM2Q5OCAx MDA2NDQKLS0tIGEvdWRldi91ZGV2YWRtLnhtbAorKysgYi91ZGV2L3VkZXZhZG0ueG1sCkBAIC0y ODUsOSArMjg1LDkgQEAKICAgICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXJlbG9hZC1ydWxl czwvb3B0aW9uPjwvdGVybT4KICAgICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAg ICAgIDxwYXJhPlNpZ25hbCB1ZGV2ZCB0byByZWxvYWQgdGhlIHJ1bGVzIGZpbGVzLgotICAgICAg ICAgICAgICAgIFVzdWFsbHkgdGhlIHVkZXYgZGFlbW9uIGRldGVjdHMgY2hhbmdlcyBhdXRvbWF0 aWNhbGx5LCB0aGlzIG1heQotICAgICAgICAgICAgICAgIG9ubHkgYmUgbmVlZGVkIG9uIHN5c3Rl bXMgd2l0aG91dCBpbm90aWZ5IHN1cHBvcnQuIFJlbG9hZGluZyBydWxlcwotICAgICAgICAgICAg ICAgIGRvZXMgbm90IGFwcGx5IGFueSBjaGFuZ2VzIHRvIGFscmVhZHkgZXhpc3RpbmcgZGV2aWNl cy48L3BhcmE+CisgICAgICAgICAgICAgICAgVGhlIHVkZXYgZGFlbW9uIGRldGVjdHMgY2hhbmdl cyBhdXRvbWF0aWNhbGx5LCB0aGlzIG9wdGlvbiBpcworICAgICAgICAgICAgICAgIHVzdWFsbHkg bm90IG5lZWRlZC4gUmVsb2FkaW5nIHJ1bGVzIGRvZXMgbm90IGFwcGx5IGFueSBjaGFuZ2VzCisg ICAgICAgICAgICAgICAgdG8gYWxyZWFkeSBleGlzdGluZyBkZXZpY2VzLjwvcGFyYT4KICAgICAg ICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAg ICAgICAgPHZhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL3VkZXYvdWRldmQuYyBiL3VkZXYvdWRl dmQuYwppbmRleCAzN2I1NDdhLi5kY2U4MWFjIDEwMDY0NAotLS0gYS91ZGV2L3VkZXZkLmMKKysr IGIvdWRldi91ZGV2ZC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw NC0yMDA4IEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KKyAqIENvcHlyaWdodCAo QykgMjAwNC0yMDA5IEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KICAqIENvcHly aWdodCAoQykgMjAwNCBDaHJpcyBGcmllc2VuIDxjaHJpc19mcmllc2VuQHN5bXBhdGljby5jYT4K ICAqIENvcHlyaWdodCAoQykgMjAwOSBDYW5vbmljYWwgTHRkLgogICogQ29weXJpZ2h0IChDKSAy MDA5IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0LmNvbT4KQEAgLTMwLDIzICsz MCwyMSBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxnZXRvcHQuaD4KICNpbmNsdWRl IDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0 Lmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbGZkLmg+CiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgog I2luY2x1ZGUgPHN5cy9wb2xsLmg+CiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDxz eXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2lmZGVmIEhBVkVfSU5PVElGWQog I2luY2x1ZGUgPHN5cy9pbm90aWZ5Lmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgInVkZXYuaCIKIAog I2RlZmluZSBVREVWRF9QUklPUklUWQkJCS00CiAjZGVmaW5lIFVERVZfUFJJT1JJVFkJCQktMgog Ci0vKiBtYXhpbXVtIGxpbWl0IG9mIGZvcmtlZCBjaGlsZHMgKi8KLSNkZWZpbmUgVURFVkRfTUFY X0NISUxEUwkJMjU2Ci0KIHN0YXRpYyBpbnQgZGVidWc7CiAKIHN0YXRpYyB2b2lkIGxvZ19mbihz dHJ1Y3QgdWRldiAqdWRldiwgaW50IHByaW9yaXR5LApAQCAtNjEsODQgKzU5LDE1OSBAQCBzdGF0 aWMgdm9pZCBsb2dfZm4oc3RydWN0IHVkZXYgKnVkZXYsIGludCBwcmlvcml0eSwKIAl9CiB9CiAK LXN0YXRpYyB2b2lkIHJlYXBfc2lnY2hpbGRzKHZvaWQpOwotCiBzdGF0aWMgaW50IGRlYnVnX3Ry YWNlOwogc3RhdGljIHN0cnVjdCB1ZGV2X3J1bGVzICpydWxlczsKIHN0YXRpYyBzdHJ1Y3QgdWRl dl9xdWV1ZV9leHBvcnQgKnVkZXZfcXVldWVfZXhwb3J0Owogc3RhdGljIHN0cnVjdCB1ZGV2X2N0 cmwgKnVkZXZfY3RybDsKLXN0YXRpYyBzdHJ1Y3QgdWRldl9tb25pdG9yICprZXJuZWxfbW9uaXRv cjsKLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3Qgc2lnY2hpbGRzX3dhaXRpbmc7Ci1zdGF0 aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHVkZXZfZXhpdDsKLXN0YXRpYyB2b2xhdGlsZSBzaWdf YXRvbWljX3QgcmVsb2FkX2NvbmZpZzsKLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3Qgc2ln bmFsX3JlY2VpdmVkOwotc3RhdGljIHZvbGF0aWxlIHBpZF90IHNldHRsZV9waWQ7Ci1zdGF0aWMg aW50IHJ1bl9leGVjX3E7Ci1zdGF0aWMgaW50IHN0b3BfZXhlY19xOworc3RhdGljIHN0cnVjdCB1 ZGV2X21vbml0b3IgKm1vbml0b3I7CitzdGF0aWMgaW50IHdvcmtlcl93YXRjaFsyXTsKK3N0YXRp YyBwaWRfdCBzZXR0bGVfcGlkOworc3RhdGljIGludCBzdG9wX2V4ZWNfcXVldWU7CitzdGF0aWMg aW50IHJlbG9hZF9jb25maWc7CiBzdGF0aWMgaW50IG1heF9jaGlsZHM7CiBzdGF0aWMgaW50IGNo aWxkczsKIHN0YXRpYyBzdHJ1Y3QgdWRldl9saXN0X25vZGUgZXZlbnRfbGlzdDsKLQotc3RhdGlj IHN0cnVjdCB1ZGV2X2V2ZW50ICpub2RlX3RvX2V2ZW50KHN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAq bm9kZSkKK3N0YXRpYyBzdHJ1Y3QgdWRldl9saXN0X25vZGUgd29ya2VyX2xpc3Q7CitzdGF0aWMg aW50IHVkZXZfZXhpdDsKK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3Qgd29ya2VyX2V4aXQ7 CisKK2VudW0gcG9sbF9mZCB7CisJRkRfQ09OVFJPTCwKKwlGRF9ORVRMSU5LLAorCUZEX0lOT1RJ RlksCisJRkRfU0lHTkFMLAorCUZEX1dPUktFUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG9sbGZk IHBmZFtdID0geworCVtGRF9ORVRMSU5LXSA9IHsgLmV2ZW50cyA9IFBPTExJTiB9LAorCVtGRF9X T1JLRVJdID0gIHsgLmV2ZW50cyA9IFBPTExJTiB9LAorCVtGRF9TSUdOQUxdID0gIHsgLmV2ZW50 cyA9IFBPTExJTiB9LAorCVtGRF9JTk9USUZZXSA9IHsgLmV2ZW50cyA9IFBPTExJTiB9LAorCVtG RF9DT05UUk9MXSA9IHsgLmV2ZW50cyA9IFBPTExJTiB9LAorfTsKKworZW51bSBldmVudF9zdGF0 ZSB7CisJRVZFTlRfVU5ERUYsCisJRVZFTlRfUVVFVUVELAorCUVWRU5UX1JVTk5JTkcsCit9Owor CitzdHJ1Y3QgZXZlbnQgeworCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSBub2RlOworCXN0cnVjdCB1 ZGV2ICp1ZGV2OworCXN0cnVjdCB1ZGV2X2RldmljZSAqZGV2OworCWVudW0gZXZlbnRfc3RhdGUg c3RhdGU7CisJaW50IGV4aXRjb2RlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgZGVsYXlpbmdf c2VxbnVtOworCXVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc2VxbnVtOworCWNvbnN0IGNoYXIgKmRl dnBhdGg7CisJc2l6ZV90IGRldnBhdGhfbGVuOworCWNvbnN0IGNoYXIgKmRldnBhdGhfb2xkOwor fTsKKworc3RhdGljIHN0cnVjdCBldmVudCAqbm9kZV90b19ldmVudChzdHJ1Y3QgdWRldl9saXN0 X25vZGUgKm5vZGUpCiB7CiAJY2hhciAqZXZlbnQ7CiAKIAlldmVudCA9IChjaGFyICopbm9kZTsK LQlldmVudCAtPSBvZmZzZXRvZihzdHJ1Y3QgdWRldl9ldmVudCwgbm9kZSk7Ci0JcmV0dXJuIChz dHJ1Y3QgdWRldl9ldmVudCAqKWV2ZW50OworCWV2ZW50IC09IG9mZnNldG9mKHN0cnVjdCBldmVu dCwgbm9kZSk7CisJcmV0dXJuIChzdHJ1Y3QgZXZlbnQgKilldmVudDsKK30KKworZW51bSB3b3Jr ZXJfc3RhdGUgeworCVdPUktFUl9VTkRFRiwKKwlXT1JLRVJfUlVOTklORywKKwlXT1JLRVJfSURM RSwKKwlXT1JLRVJfS0lMTEVELAorfTsKKworc3RydWN0IHdvcmtlciB7CisJc3RydWN0IHVkZXZf bGlzdF9ub2RlIG5vZGU7CisJcGlkX3QgcGlkOworCXN0cnVjdCB1ZGV2X21vbml0b3IgKm1vbml0 b3I7CisJZW51bSB3b3JrZXJfc3RhdGUgc3RhdGU7CisJc3RydWN0IGV2ZW50ICpldmVudDsKK307 CisKKy8qIHBhc3NlZCBmcm9tIHdvcmtlciB0byBtYWluIHByb2Nlc3MgKi8KK3N0cnVjdCB3b3Jr ZXJfbWVzc2FnZSB7CisJcGlkX3QgcGlkOworCWludCBleGl0Y29kZTsKK307CisKK3N0YXRpYyBz dHJ1Y3Qgd29ya2VyICpub2RlX3RvX3dvcmtlcihzdHJ1Y3QgdWRldl9saXN0X25vZGUgKm5vZGUp Cit7CisJY2hhciAqd29ya2VyOworCisJd29ya2VyID0gKGNoYXIgKilub2RlOworCXdvcmtlciAt PSBvZmZzZXRvZihzdHJ1Y3Qgd29ya2VyLCBub2RlKTsKKwlyZXR1cm4gKHN0cnVjdCB3b3JrZXIg Kil3b3JrZXI7CiB9CiAKLXN0YXRpYyB2b2lkIGV2ZW50X3F1ZXVlX2RlbGV0ZShzdHJ1Y3QgdWRl dl9ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCBldmVudF9xdWV1ZV9kZWxldGUoc3RydWN0IGV2 ZW50ICpldmVudCkKIHsKIAl1ZGV2X2xpc3Rfbm9kZV9yZW1vdmUoJmV2ZW50LT5ub2RlKTsKIAog CS8qIG1hcmsgYXMgZmFpbGVkLCBpZiAiYWRkIiBldmVudCByZXR1cm5zIG5vbi16ZXJvICovCi0J aWYgKGV2ZW50LT5leGl0c3RhdHVzICYmIHN0cmNtcCh1ZGV2X2RldmljZV9nZXRfYWN0aW9uKGV2 ZW50LT5kZXYpLCAiYWRkIikgPT0gMCkKKwlpZiAoZXZlbnQtPmV4aXRjb2RlICYmIHN0cmNtcCh1 ZGV2X2RldmljZV9nZXRfYWN0aW9uKGV2ZW50LT5kZXYpLCAiYWRkIikgPT0gMCkKIAkJdWRldl9x dWV1ZV9leHBvcnRfZGV2aWNlX2ZhaWxlZCh1ZGV2X3F1ZXVlX2V4cG9ydCwgZXZlbnQtPmRldik7 CiAJZWxzZQogCQl1ZGV2X3F1ZXVlX2V4cG9ydF9kZXZpY2VfZmluaXNoZWQodWRldl9xdWV1ZV9l eHBvcnQsIGV2ZW50LT5kZXYpOwogCiAJdWRldl9kZXZpY2VfdW5yZWYoZXZlbnQtPmRldik7Ci0J dWRldl9ldmVudF91bnJlZihldmVudCk7CisJZnJlZShldmVudCk7CiB9CiAKIHN0YXRpYyB2b2lk IGV2ZW50X3NpZ19oYW5kbGVyKGludCBzaWdudW0pCiB7Ci0JaWYgKHNpZ251bSA9PSBTSUdBTFJN KQorCXN3aXRjaCAoc2lnbnVtKSB7CisJY2FzZSBTSUdBTFJNOgogCQlfZXhpdCgxKTsKKwkJYnJl YWs7CisJY2FzZSBTSUdURVJNOgorCQl3b3JrZXJfZXhpdCA9IDE7CisJCWJyZWFrOworCX0KK30K Kworc3RhdGljIHZvaWQgd29ya2VyX3VucmVmKHN0cnVjdCB3b3JrZXIgKndvcmtlcikKK3sKKwl1 ZGV2X21vbml0b3JfdW5yZWYod29ya2VyLT5tb25pdG9yKTsKKwlmcmVlKHdvcmtlcik7CiB9CiAK LXN0YXRpYyB2b2lkIGV2ZW50X2Zvcmsoc3RydWN0IHVkZXZfZXZlbnQgKmV2ZW50KQorc3RhdGlj IHZvaWQgd29ya2VyX25ldyhzdHJ1Y3QgZXZlbnQgKmV2ZW50KQogeworCXN0cnVjdCB3b3JrZXIg KndvcmtlcjsKKwlzdHJ1Y3QgdWRldl9tb25pdG9yICp3b3JrZXJfbW9uaXRvcjsKIAlwaWRfdCBw aWQ7CiAJc3RydWN0IHNpZ2FjdGlvbiBhY3Q7Ci0JaW50IGVycjsKLQotI2lmIDAKLQkvKiBzaW5n bGUgcHJvY2Vzcywgbm8gZm9ya2luZywganVzdCBmb3IgdGVzdGluZy9wcm9maWxpbmcgKi8KLQll cnIgPSB1ZGV2X2V2ZW50X2V4ZWN1dGVfcnVsZXMoZXZlbnQsIHJ1bGVzKTsKLQlpZiAoZXJyID09 IDAgJiYgIWV2ZW50LT5pZ25vcmVfZGV2aWNlICYmIHVkZXZfZ2V0X3J1bihldmVudC0+dWRldikp Ci0JCXVkZXZfZXZlbnRfZXhlY3V0ZV9ydW4oZXZlbnQpOwotCWluZm8oZXZlbnQtPnVkZXYsICJz ZXEgJWxsdSBleGl0IHdpdGggJWlcbiIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZXZlbnQtPmRl diksIGVycik7Ci0JZXZlbnRfcXVldWVfZGVsZXRlKGV2ZW50KTsKLQlyZXR1cm47Ci0jZW5kaWYK IAotCWlmIChkZWJ1Z190cmFjZSkgewotCQlldmVudC0+dHJhY2UgPSAxOwotCQlmcHJpbnRmKHN0 ZGVyciwgImZvcmsgJXMgKCVsbHUpXG4iLAotCQkgICAgICAgdWRldl9kZXZpY2VfZ2V0X3N5c3Bh dGgoZXZlbnQtPmRldiksCi0JCSAgICAgICB1ZGV2X2RldmljZV9nZXRfc2VxbnVtKGV2ZW50LT5k ZXYpKTsKLQl9CisJLyogbGlzdGVuIGZvciBuZXcgZXZlbnRzICovCisJd29ya2VyX21vbml0b3Ig PSB1ZGV2X21vbml0b3JfbmV3X2Zyb21fbmV0bGluayhldmVudC0+dWRldiwgTlVMTCk7CisJaWYg KHdvcmtlcl9tb25pdG9yID09IE5VTEwpCisJCXJldHVybjsKKwkvKiBhbGxvdyB0aGUgbWFpbiBk YWVtb24gbmV0bGluayBhZGRyZXNzIHRvIHNlbmQgZGV2aWNlcyB0byB0aGUgd29ya2VyICovCisJ dWRldl9tb25pdG9yX2FsbG93X3VuaWNhc3Rfc2VuZGVyKHdvcmtlcl9tb25pdG9yLCBtb25pdG9y KTsKKwl1ZGV2X21vbml0b3JfZW5hYmxlX3JlY2VpdmluZyh3b3JrZXJfbW9uaXRvcik7CisKKwl3 b3JrZXIgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB3b3JrZXIpKTsKKwlpZiAod29ya2VyID09 IE5VTEwpCisJCXJldHVybjsKIAogCXBpZCA9IGZvcmsoKTsKIAlzd2l0Y2ggKHBpZCkgewotCWNh c2UgMDoKLQkJLyogY2hpbGQgKi8KKwljYXNlIDA6IHsKKwkJc2lnc2V0X3QgbWFzazsKKwkJc3Ry dWN0IHVkZXZfZGV2aWNlICpkZXY7CisKIAkJdWRldl9xdWV1ZV9leHBvcnRfdW5yZWYodWRldl9x dWV1ZV9leHBvcnQpOwogCQl1ZGV2X2N0cmxfdW5yZWYodWRldl9jdHJsKTsKKwkJY2xvc2UocGZk W0ZEX1NJR05BTF0uZmQpOworCQljbG9zZSh3b3JrZXJfd2F0Y2hbUkVBRF9FTkRdKTsKIAkJbG9n Z2luZ19jbG9zZSgpOwotCQlsb2dnaW5nX2luaXQoInVkZXZkLWV2ZW50Iik7CisJCWxvZ2dpbmdf aW5pdCgidWRldmQtd29yayIpOwogCQlzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIDAsIFVERVZf UFJJT1JJVFkpOwogCiAJCS8qIHNldCBzaWduYWwgaGFuZGxlcnMgKi8KQEAgLTE0Niw3OCArMjE5 LDE4MiBAQCBzdGF0aWMgdm9pZCBldmVudF9mb3JrKHN0cnVjdCB1ZGV2X2V2ZW50ICpldmVudCkK IAkJYWN0LnNhX2hhbmRsZXIgPSBldmVudF9zaWdfaGFuZGxlcjsKIAkJc2lnZW1wdHlzZXQgKCZh Y3Quc2FfbWFzayk7CiAJCWFjdC5zYV9mbGFncyA9IDA7CisJCXNpZ2FjdGlvbihTSUdURVJNLCAm YWN0LCBOVUxMKTsKIAkJc2lnYWN0aW9uKFNJR0FMUk0sICZhY3QsIE5VTEwpOwogCi0JCS8qIHJl c2V0IHRvIGRlZmF1bHQgKi8KLQkJYWN0LnNhX2hhbmRsZXIgPSBTSUdfREZMOwotCQlzaWdhY3Rp b24oU0lHSU5ULCAmYWN0LCBOVUxMKTsKLQkJc2lnYWN0aW9uKFNJR1RFUk0sICZhY3QsIE5VTEwp OwotCQlzaWdhY3Rpb24oU0lHQ0hMRCwgJmFjdCwgTlVMTCk7Ci0JCXNpZ2FjdGlvbihTSUdIVVAs ICZhY3QsIE5VTEwpOworCQkvKiB1bmJsb2NrIHNpZ25hbHMgKi8KKwkJc2lnZmlsbHNldCgmbWFz ayk7CisJCXNpZ2RlbHNldCgmbWFzaywgU0lHVEVSTSk7CisJCXNpZ2RlbHNldCgmbWFzaywgU0lH QUxSTSk7CisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmbWFzaywgTlVMTCk7CiAKLQkJLyog c2V0IHRpbWVvdXQgdG8gcHJldmVudCBoYW5naW5nIHByb2Nlc3NlcyAqLwotCQlhbGFybShVREVW X0VWRU5UX1RJTUVPVVQpOworCQkvKiByZXF1ZXN0IFRFUk0gc2lnbmFsIGlmIHBhcmVudCBleGl0 cyAqLworCQlwcmN0bChQUl9TRVRfUERFQVRIU0lHLCBTSUdURVJNKTsKIAotCQkvKiBhcHBseSBy dWxlcywgY3JlYXRlIG5vZGUsIHN5bWxpbmtzICovCi0JCWVyciA9IHVkZXZfZXZlbnRfZXhlY3V0 ZV9ydWxlcyhldmVudCwgcnVsZXMpOworCQkvKiBpbml0aWFsIGRldmljZSAqLworCQlkZXYgPSBl dmVudC0+ZGV2OwogCi0JCS8qIHJ1bGVzIG1heSBjaGFuZ2UvZGlzYWJsZSB0aGUgdGltZW91dCAq LwotCQlpZiAodWRldl9kZXZpY2VfZ2V0X2V2ZW50X3RpbWVvdXQoZXZlbnQtPmRldikgPj0gMCkK LQkJCWFsYXJtKHVkZXZfZGV2aWNlX2dldF9ldmVudF90aW1lb3V0KGV2ZW50LT5kZXYpKTsKKwkJ d2hpbGUgKCF3b3JrZXJfZXhpdCkgeworCQkJc3RydWN0IHVkZXZfZXZlbnQgKnVkZXZfZXZlbnQ7 CisJCQlzdHJ1Y3Qgd29ya2VyX21lc3NhZ2UgbXNnOworCQkJaW50IGVycjsKIAotCQkvKiBleGVj dXRlIFJVTj0gKi8KLQkJaWYgKGVyciA9PSAwICYmICFldmVudC0+aWdub3JlX2RldmljZSAmJiB1 ZGV2X2dldF9ydW4oZXZlbnQtPnVkZXYpKQotCQkJdWRldl9ldmVudF9leGVjdXRlX3J1bihldmVu dCk7CisJCQl1ZGV2X2V2ZW50ID0gdWRldl9ldmVudF9uZXcoZGV2KTsKKwkJCWlmICh1ZGV2X2V2 ZW50ID09IE5VTEwpCisJCQkJX2V4aXQoMyk7CiAKLQkJLyogYXBwbHkvcmVzdG9yZSBpbm90aWZ5 IHdhdGNoICovCi0JCWlmIChlcnIgPT0gMCAmJiBldmVudC0+aW5vdGlmeV93YXRjaCkgewotCQkJ dWRldl93YXRjaF9iZWdpbihldmVudC0+dWRldiwgZXZlbnQtPmRldik7Ci0JCQl1ZGV2X2Rldmlj ZV91cGRhdGVfZGIoZXZlbnQtPmRldik7Ci0JCX0KKwkJCS8qIHNldCB0aW1lb3V0IHRvIHByZXZl bnQgaGFuZ2luZyBwcm9jZXNzZXMgKi8KKwkJCWFsYXJtKFVERVZfRVZFTlRfVElNRU9VVCk7CisK KwkJCS8qIGFwcGx5IHJ1bGVzLCBjcmVhdGUgbm9kZSwgc3ltbGlua3MgKi8KKwkJCWVyciA9IHVk ZXZfZXZlbnRfZXhlY3V0ZV9ydWxlcyh1ZGV2X2V2ZW50LCBydWxlcyk7CisKKwkJCS8qIHJ1bGVz IG1heSBjaGFuZ2UvZGlzYWJsZSB0aGUgdGltZW91dCAqLworCQkJaWYgKHVkZXZfZGV2aWNlX2dl dF9ldmVudF90aW1lb3V0KGRldikgPj0gMCkKKwkJCQlhbGFybSh1ZGV2X2RldmljZV9nZXRfZXZl bnRfdGltZW91dChkZXYpKTsKKworCQkJLyogZXhlY3V0ZSBSVU49ICovCisJCQlpZiAoZXJyID09 IDAgJiYgIXVkZXZfZXZlbnQtPmlnbm9yZV9kZXZpY2UgJiYgdWRldl9nZXRfcnVuKHVkZXZfZXZl bnQtPnVkZXYpKQorCQkJCXVkZXZfZXZlbnRfZXhlY3V0ZV9ydW4odWRldl9ldmVudCk7CisKKwkJ CS8qIHJlc2V0IGFsYXJtICovCisJCQlhbGFybSgwKTsKKworCQkJLyogYXBwbHkvcmVzdG9yZSBp bm90aWZ5IHdhdGNoICovCisJCQlpZiAoZXJyID09IDAgJiYgdWRldl9ldmVudC0+aW5vdGlmeV93 YXRjaCkgeworCQkJCXVkZXZfd2F0Y2hfYmVnaW4odWRldl9ldmVudC0+dWRldiwgZGV2KTsKKwkJ CQl1ZGV2X2RldmljZV91cGRhdGVfZGIoZGV2KTsKKwkJCX0KIAotCQkvKiBzZW5kIHByb2Nlc3Nl ZCBldmVudCBiYWNrIHRvIHRoZSBrZXJuZWwgbmV0bGluayBzb2NrZXQgKi8KLQkJdWRldl9tb25p dG9yX3NlbmRfZGV2aWNlKGtlcm5lbF9tb25pdG9yLCBldmVudC0+ZGV2KTsKKwkJCS8qIHNlbmQg cHJvY2Vzc2VkIGV2ZW50IGJhY2sgdG8gbGlidWRldiBsaXN0ZW5lcnMgKi8KKwkJCXVkZXZfbW9u aXRvcl9zZW5kX2RldmljZSh3b3JrZXJfbW9uaXRvciwgTlVMTCwgZGV2KTsKIAotCQlpbmZvKGV2 ZW50LT51ZGV2LCAic2VxICVsbHUgZXhpdCB3aXRoICVpXG4iLCB1ZGV2X2RldmljZV9nZXRfc2Vx bnVtKGV2ZW50LT5kZXYpLCBlcnIpOworCQkJaW5mbyhldmVudC0+dWRldiwgInNlcSAlbGx1IGZp bmlzaGVkIHdpdGggJWlcbiIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZGV2KSwgZXJyKTsKKwkJ CXVkZXZfZGV2aWNlX3VucmVmKGRldik7CisJCQl1ZGV2X2V2ZW50X3VucmVmKHVkZXZfZXZlbnQp OworCisJCQkvKiBzZW5kIGJhY2sgdGhlIHJlc3VsdCBvZiB0aGUgZXZlbnQgZXhlY3V0aW9uICov CisJCQltc2cuZXhpdGNvZGUgPSBlcnI7CisJCQltc2cucGlkID0gZ2V0cGlkKCk7CisJCQlzZW5k KHdvcmtlcl93YXRjaFtXUklURV9FTkRdLCAmbXNnLCBzaXplb2Yoc3RydWN0IHdvcmtlcl9tZXNz YWdlKSwgMCk7CisKKwkJCS8qIHdhaXQgZm9yIG1vcmUgZGV2aWNlIG1lc3NhZ2VzIGZyb20gdWRl dmQgKi8KKwkJCWRvCisJCQkJZGV2ID0gdWRldl9tb25pdG9yX3JlY2VpdmVfZGV2aWNlKHdvcmtl cl9tb25pdG9yKTsKKwkJCXdoaWxlICghd29ya2VyX2V4aXQgJiYgZGV2ID09IE5VTEwpOworCQl9 CisKKwkJdWRldl9tb25pdG9yX3VucmVmKHdvcmtlcl9tb25pdG9yKTsKIAkJbG9nZ2luZ19jbG9z ZSgpOwotCQlpZiAoZXJyICE9IDApCi0JCQlleGl0KDEpOwogCQlleGl0KDApOworCX0KIAljYXNl IC0xOgorCQl1ZGV2X21vbml0b3JfdW5yZWYod29ya2VyX21vbml0b3IpOworCQlldmVudC0+c3Rh dGUgPSBFVkVOVF9RVUVVRUQ7CisJCWZyZWUod29ya2VyKTsKIAkJZXJyKGV2ZW50LT51ZGV2LCAi Zm9yayBvZiBjaGlsZCBmYWlsZWQ6ICVtXG4iKTsKLQkJZXZlbnRfcXVldWVfZGVsZXRlKGV2ZW50 KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJLyogZ2V0IFNJR0NITEQgaW4gbWFpbiBsb29wICov Ci0JCWluZm8oZXZlbnQtPnVkZXYsICJzZXEgJWxsdSBmb3JrZWQsIHBpZCBbJWRdLCAnJXMnICcl cycsICVsZCBzZWNvbmRzIG9sZFxuIiwKLQkJICAgICB1ZGV2X2RldmljZV9nZXRfc2VxbnVtKGV2 ZW50LT5kZXYpLAotCQkgICAgIHBpZCwKLQkJICAgICB1ZGV2X2RldmljZV9nZXRfYWN0aW9uKGV2 ZW50LT5kZXYpLAotCQkgICAgIHVkZXZfZGV2aWNlX2dldF9zdWJzeXN0ZW0oZXZlbnQtPmRldiks Ci0JCSAgICAgdGltZShOVUxMKSAtIGV2ZW50LT5xdWV1ZV90aW1lKTsKLQkJZXZlbnQtPnBpZCA9 IHBpZDsKKwkJLyogY2xvc2UgbW9uaXRvciwgYnV0IGtlZXAgYWRkcmVzcyBhcm91bmQgKi8KKwkJ dWRldl9tb25pdG9yX2Rpc2Nvbm5lY3Qod29ya2VyX21vbml0b3IpOworCQl3b3JrZXItPm1vbml0 b3IgPSB3b3JrZXJfbW9uaXRvcjsKKwkJd29ya2VyLT5waWQgPSBwaWQ7CisJCXdvcmtlci0+c3Rh dGUgPSBXT1JLRVJfUlVOTklORzsKKwkJd29ya2VyLT5ldmVudCA9IGV2ZW50OworCQlldmVudC0+ c3RhdGUgPSBFVkVOVF9SVU5OSU5HOworCQl1ZGV2X2xpc3Rfbm9kZV9hcHBlbmQoJndvcmtlci0+ bm9kZSwgJndvcmtlcl9saXN0KTsKIAkJY2hpbGRzKys7CisJCWJyZWFrOworCX0KK30KKworc3Rh dGljIHZvaWQgZXZlbnRfcnVuKHN0cnVjdCBldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHVkZXZf bGlzdF9ub2RlICpsb29wOworCisJdWRldl9saXN0X25vZGVfZm9yZWFjaChsb29wLCAmd29ya2Vy X2xpc3QpIHsKKwkJc3RydWN0IHdvcmtlciAqd29ya2VyID0gbm9kZV90b193b3JrZXIobG9vcCk7 CisJCXNzaXplX3QgY291bnQ7CisKKwkJaWYgKHdvcmtlci0+c3RhdGUgIT0gV09SS0VSX0lETEUp CisJCQljb250aW51ZTsKKworCQl3b3JrZXItPmV2ZW50ID0gZXZlbnQ7CisJCXdvcmtlci0+c3Rh dGUgPSBXT1JLRVJfUlVOTklORzsKKwkJZXZlbnQtPnN0YXRlID0gRVZFTlRfUlVOTklORzsKKwkJ Y291bnQgPSB1ZGV2X21vbml0b3Jfc2VuZF9kZXZpY2UobW9uaXRvciwgd29ya2VyLT5tb25pdG9y LCBldmVudC0+ZGV2KTsKKwkJaWYgKGNvdW50IDwgMCkgeworCQkJZXJyKGV2ZW50LT51ZGV2LCAi d29ya2VyIFsldV0gZGlkIG5vdCBhY2NlcHQgbWVzc2FnZSwga2lsbCBpdFxuIiwgd29ya2VyLT5w aWQpOworCQkJZXZlbnQtPnN0YXRlID0gRVZFTlRfUVVFVUVEOworCQkJd29ya2VyLT5zdGF0ZSA9 IFdPUktFUl9LSUxMRUQ7CisJCQlraWxsKHdvcmtlci0+cGlkLCBTSUdLSUxMKTsKKwkJCWNvbnRp bnVlOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2hpbGRzID49IG1heF9jaGlsZHMpIHsK KwkJaW5mbyhldmVudC0+dWRldiwgIm1heGltdW0gbnVtYmVyICglaSkgb2YgY2hpbGRzIHJlYWNo ZWRcbiIsIGNoaWxkcyk7CisJCXJldHVybjsKIAl9CisKKwkvKiBzdGFydCBuZXcgd29ya2VyIGFu ZCBwYXNzIGluaXRpYWwgZGV2aWNlICovCisJd29ya2VyX25ldyhldmVudCk7CiB9CiAKLXN0YXRp YyB2b2lkIGV2ZW50X3F1ZXVlX2luc2VydChzdHJ1Y3QgdWRldl9ldmVudCAqZXZlbnQpCitzdGF0 aWMgdm9pZCBldmVudF9xdWV1ZV9pbnNlcnQoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYpCiB7Ci0J ZXZlbnQtPnF1ZXVlX3RpbWUgPSB0aW1lKE5VTEwpOworCXN0cnVjdCBldmVudCAqZXZlbnQ7CiAK LQl1ZGV2X3F1ZXVlX2V4cG9ydF9kZXZpY2VfcXVldWVkKHVkZXZfcXVldWVfZXhwb3J0LCBldmVu dC0+ZGV2KTsKLQlpbmZvKGV2ZW50LT51ZGV2LCAic2VxICVsbHUgcXVldWVkLCAnJXMnICclcydc biIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZXZlbnQtPmRldiksCi0JICAgICB1ZGV2X2Rldmlj ZV9nZXRfYWN0aW9uKGV2ZW50LT5kZXYpLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGV2ZW50 LT5kZXYpKTsKKwlldmVudCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGV2ZW50KSk7CisJaWYg KGV2ZW50ID09IE5VTEwpCisJCXJldHVybjsKKworCWV2ZW50LT51ZGV2ID0gdWRldl9kZXZpY2Vf Z2V0X3VkZXYoZGV2KTsKKwlldmVudC0+ZGV2ID0gZGV2OworCWV2ZW50LT5zZXFudW0gPSB1ZGV2 X2RldmljZV9nZXRfc2VxbnVtKGRldik7CisJZXZlbnQtPmRldnBhdGggPSB1ZGV2X2RldmljZV9n ZXRfZGV2cGF0aChkZXYpOworCWV2ZW50LT5kZXZwYXRoX2xlbiA9IHN0cmxlbihldmVudC0+ZGV2 cGF0aCk7CisJZXZlbnQtPmRldnBhdGhfb2xkID0gdWRldl9kZXZpY2VfZ2V0X2RldnBhdGhfb2xk KGRldik7CisKKwl1ZGV2X3F1ZXVlX2V4cG9ydF9kZXZpY2VfcXVldWVkKHVkZXZfcXVldWVfZXhw b3J0LCBkZXYpOworCWluZm8oZXZlbnQtPnVkZXYsICJzZXEgJWxsdSBxdWV1ZWQsICclcycgJyVz J1xuIiwgdWRldl9kZXZpY2VfZ2V0X3NlcW51bShkZXYpLAorCSAgICAgdWRldl9kZXZpY2VfZ2V0 X2FjdGlvbihkZXYpLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOwogCisJZXZlbnQt PnN0YXRlID0gRVZFTlRfUVVFVUVEOwogCXVkZXZfbGlzdF9ub2RlX2FwcGVuZCgmZXZlbnQtPm5v ZGUsICZldmVudF9saXN0KTsKLQlydW5fZXhlY19xID0gMTsKIAogCS8qIHJ1biBhbGwgZXZlbnRz IHdpdGggYSB0aW1lb3V0IHNldCBpbW1lZGlhdGVseSAqLwotCWlmICh1ZGV2X2RldmljZV9nZXRf dGltZW91dChldmVudC0+ZGV2KSA+IDApIHsKLQkJZXZlbnRfZm9yayhldmVudCk7CisJaWYgKHVk ZXZfZGV2aWNlX2dldF90aW1lb3V0KGRldikgPiAwKSB7CisJCXdvcmtlcl9uZXcoZXZlbnQpOwog CQlyZXR1cm47CiAJfQogfQogCitzdGF0aWMgdm9pZCB3b3JrZXJfa2lsbChpbnQgcmV0YWluKQor eworCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbG9vcDsKKwlpbnQgbWF4OworCisJaWYgKGNoaWxk cyA8PSByZXRhaW4pCisJCXJldHVybjsKKworCW1heCA9IGNoaWxkcyAtIHJldGFpbjsKKworCXVk ZXZfbGlzdF9ub2RlX2ZvcmVhY2gobG9vcCwgJndvcmtlcl9saXN0KSB7CisJCXN0cnVjdCB3b3Jr ZXIgKndvcmtlciA9IG5vZGVfdG9fd29ya2VyKGxvb3ApOworCisJCWlmIChtYXgtLSA8PSAwKQor CQkJYnJlYWs7CisKKwkJaWYgKHdvcmtlci0+c3RhdGUgPT0gV09SS0VSX0tJTExFRCkKKwkJCWNv bnRpbnVlOworCisJCXdvcmtlci0+c3RhdGUgPSBXT1JLRVJfS0lMTEVEOworCQlraWxsKHdvcmtl ci0+cGlkLCBTSUdURVJNKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbWVtX3NpemVfbWIodm9pZCkK IHsKIAlGSUxFICpmOwpAQCAtMjQxLDExMiArNDE4LDExMSBAQCBzdGF0aWMgaW50IG1lbV9zaXpl X21iKHZvaWQpCiAJcmV0dXJuIG1lbXNpemU7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGFyZV9kZXZw YXRoKGNvbnN0IGNoYXIgKnJ1bm5pbmcsIGNvbnN0IGNoYXIgKndhaXRpbmcpCi17Ci0JaW50IGkg PSAwOwotCi0Jd2hpbGUgKHJ1bm5pbmdbaV0gIT0gJ1wwJyAmJiBydW5uaW5nW2ldID09IHdhaXRp bmdbaV0pCi0JCWkrKzsKLQotCS8qIGlkZW50aWNhbCBkZXZpY2UgZXZlbnQgZm91bmQgKi8KLQlp ZiAocnVubmluZ1tpXSA9PSAnXDAnICYmIHdhaXRpbmdbaV0gPT0gJ1wwJykKLQkJcmV0dXJuIDE7 Ci0KLQkvKiBwYXJlbnQgZGV2aWNlIGV2ZW50IGZvdW5kICovCi0JaWYgKHJ1bm5pbmdbaV0gPT0g J1wwJyAmJiB3YWl0aW5nW2ldID09ICcvJykKLQkJcmV0dXJuIDI7Ci0KLQkvKiBjaGlsZCBkZXZp Y2UgZXZlbnQgZm91bmQgKi8KLQlpZiAocnVubmluZ1tpXSA9PSAnLycgJiYgd2FpdGluZ1tpXSA9 PSAnXDAnKQotCQlyZXR1cm4gMzsKLQotCS8qIG5vIG1hdGNoaW5nIGV2ZW50ICovCi0JcmV0dXJu IDA7Ci19Ci0KIC8qIGxvb2t1cCBldmVudCBmb3IgaWRlbnRpY2FsLCBwYXJlbnQsIGNoaWxkIGRl dmljZSAqLwotc3RhdGljIGludCBkZXZwYXRoX2J1c3koc3RydWN0IHVkZXZfZXZlbnQgKmV2ZW50 KQorc3RhdGljIGludCBkZXZwYXRoX2J1c3koc3RydWN0IGV2ZW50ICpldmVudCkKIHsKIAlzdHJ1 Y3QgdWRldl9saXN0X25vZGUgKmxvb3A7CisJc2l6ZV90IGNvbW1vbjsKIAogCS8qIGNoZWNrIGlm IHF1ZXVlIGNvbnRhaW5zIGV2ZW50cyB3ZSBkZXBlbmQgb24gKi8KIAl1ZGV2X2xpc3Rfbm9kZV9m b3JlYWNoKGxvb3AsICZldmVudF9saXN0KSB7Ci0JCXN0cnVjdCB1ZGV2X2V2ZW50ICpsb29wX2V2 ZW50ID0gbm9kZV90b19ldmVudChsb29wKTsKKwkJc3RydWN0IGV2ZW50ICpsb29wX2V2ZW50ID0g bm9kZV90b19ldmVudChsb29wKTsKIAogCQkvKiB3ZSBhbHJlYWR5IGZvdW5kIGEgbGF0ZXIgZXZl bnQsIGVhcmxpZXIgY2FuIG5vdCBibG9jayB1cywgbm8gbmVlZCB0byBjaGVjayBhZ2FpbiAqLwot CQlpZiAodWRldl9kZXZpY2VfZ2V0X3NlcW51bShsb29wX2V2ZW50LT5kZXYpIDwgZXZlbnQtPmRl bGF5aW5nX3NlcW51bSkKKwkJaWYgKGxvb3BfZXZlbnQtPnNlcW51bSA8IGV2ZW50LT5kZWxheWlu Z19zZXFudW0pCiAJCQljb250aW51ZTsKIAogCQkvKiBldmVudCB3ZSBjaGVja2VkIGVhcmxpZXIg c3RpbGwgZXhpc3RzLCBubyBuZWVkIHRvIGNoZWNrIGFnYWluICovCi0JCWlmICh1ZGV2X2Rldmlj ZV9nZXRfc2VxbnVtKGxvb3BfZXZlbnQtPmRldikgPT0gZXZlbnQtPmRlbGF5aW5nX3NlcW51bSkK KwkJaWYgKGxvb3BfZXZlbnQtPnNlcW51bSA9PSBldmVudC0+ZGVsYXlpbmdfc2VxbnVtKQogCQkJ cmV0dXJuIDI7CiAKIAkJLyogZm91bmQgb3Vyc2VsZiwgbm8gbGF0ZXIgZXZlbnQgY2FuIGJsb2Nr IHVzICovCi0JCWlmICh1ZGV2X2RldmljZV9nZXRfc2VxbnVtKGxvb3BfZXZlbnQtPmRldikgPj0g dWRldl9kZXZpY2VfZ2V0X3NlcW51bShldmVudC0+ZGV2KSkKKwkJaWYgKGxvb3BfZXZlbnQtPnNl cW51bSA+PSBldmVudC0+c2VxbnVtKQogCQkJYnJlYWs7CiAKIAkJLyogY2hlY2sgb3VyIG9sZCBu YW1lICovCi0JCWlmICh1ZGV2X2RldmljZV9nZXRfZGV2cGF0aF9vbGQoZXZlbnQtPmRldikgIT0g TlVMTCkKLQkJCWlmIChzdHJjbXAodWRldl9kZXZpY2VfZ2V0X2RldnBhdGgobG9vcF9ldmVudC0+ ZGV2KSwgdWRldl9kZXZpY2VfZ2V0X2RldnBhdGhfb2xkKGV2ZW50LT5kZXYpKSA9PSAwKSB7Ci0J CQkJZXZlbnQtPmRlbGF5aW5nX3NlcW51bSA9IHVkZXZfZGV2aWNlX2dldF9zZXFudW0obG9vcF9l dmVudC0+ZGV2KTsKKwkJaWYgKGV2ZW50LT5kZXZwYXRoX29sZCAhPSBOVUxMKQorCQkJaWYgKHN0 cmNtcChsb29wX2V2ZW50LT5kZXZwYXRoLCBldmVudC0+ZGV2cGF0aF9vbGQpID09IDApIHsKKwkJ CQlldmVudC0+ZGVsYXlpbmdfc2VxbnVtID0gbG9vcF9ldmVudC0+c2VxbnVtOwogCQkJCXJldHVy biAzOwogCQkJfQogCi0JCS8qIGNoZWNrIGlkZW50aWNhbCwgcGFyZW50LCBvciBjaGlsZCBkZXZp Y2UgZXZlbnQgKi8KLQkJaWYgKGNvbXBhcmVfZGV2cGF0aCh1ZGV2X2RldmljZV9nZXRfZGV2cGF0 aChsb29wX2V2ZW50LT5kZXYpLCB1ZGV2X2RldmljZV9nZXRfZGV2cGF0aChldmVudC0+ZGV2KSkg IT0gMCkgewotCQkJZGJnKGV2ZW50LT51ZGV2LCAiJWxsdSwgZGV2aWNlIGV2ZW50IHN0aWxsIHBl bmRpbmcgJWxsdSAoJXMpXG4iLAotCQkJICAgIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZXZlbnQt PmRldiksCi0JCQkgICAgdWRldl9kZXZpY2VfZ2V0X3NlcW51bShsb29wX2V2ZW50LT5kZXYpLAot CQkJICAgIHVkZXZfZGV2aWNlX2dldF9kZXZwYXRoKGxvb3BfZXZlbnQtPmRldikpOwotCQkJZXZl bnQtPmRlbGF5aW5nX3NlcW51bSA9IHVkZXZfZGV2aWNlX2dldF9zZXFudW0obG9vcF9ldmVudC0+ ZGV2KTsKKwkJLyogY29tcGFyZSBkZXZwYXRoICovCisJCWNvbW1vbiA9IE1JTihsb29wX2V2ZW50 LT5kZXZwYXRoX2xlbiwgZXZlbnQtPmRldnBhdGhfbGVuKTsKKworCQkvKiBvbmUgZGV2cGF0aCBp cyBjb250YWluZWQgaW4gdGhlIG90aGVyPyAqLworCQlpZiAobWVtY21wKGxvb3BfZXZlbnQtPmRl dnBhdGgsIGV2ZW50LT5kZXZwYXRoLCBjb21tb24pICE9IDApCisJCQljb250aW51ZTsKKworCQkv KiBpZGVudGljYWwgZGV2aWNlIGV2ZW50IGZvdW5kICovCisJCWlmIChsb29wX2V2ZW50LT5kZXZw YXRoX2xlbiA9PSBldmVudC0+ZGV2cGF0aF9sZW4pIHsKKwkJCWV2ZW50LT5kZWxheWluZ19zZXFu dW0gPSBsb29wX2V2ZW50LT5zZXFudW07CiAJCQlyZXR1cm4gNDsKIAkJfQorCisJCS8qIHBhcmVu dCBkZXZpY2UgZXZlbnQgZm91bmQgKi8KKwkJaWYgKGV2ZW50LT5kZXZwYXRoW2NvbW1vbl0gPT0g Jy8nKSB7CisJCQlldmVudC0+ZGVsYXlpbmdfc2VxbnVtID0gbG9vcF9ldmVudC0+c2VxbnVtOwor CQkJcmV0dXJuIDU7CisJCX0KKworCQkvKiBjaGlsZCBkZXZpY2UgZXZlbnQgZm91bmQgKi8KKwkJ aWYgKGxvb3BfZXZlbnQtPmRldnBhdGhbY29tbW9uXSA9PSAnLycpIHsKKwkJCWV2ZW50LT5kZWxh eWluZ19zZXFudW0gPSBsb29wX2V2ZW50LT5zZXFudW07CisJCQlyZXR1cm4gNjsKKwkJfQorCisJ CS8qIG5vIG1hdGNoaW5nIGRldmljZSAqLworCQljb250aW51ZTsKIAl9CisKIAlyZXR1cm4gMDsK IH0KIAotLyogc2VyaWFsaXplcyBldmVudHMgZm9yIHRoZSBpZGVudGljYWwgYW5kIHBhcmVudCBh bmQgY2hpbGQgZGV2aWNlcyAqLwotc3RhdGljIHZvaWQgZXZlbnRfcXVldWVfbWFuYWdlcihzdHJ1 Y3QgdWRldiAqdWRldikKK3N0YXRpYyB2b2lkIGV2ZW50c19zdGFydChzdHJ1Y3QgdWRldiAqdWRl dikKIHsKIAlzdHJ1Y3QgdWRldl9saXN0X25vZGUgKmxvb3A7Ci0Jc3RydWN0IHVkZXZfbGlzdF9u b2RlICp0bXA7CiAKLXN0YXJ0X292ZXI6Ci0JaWYgKHVkZXZfbGlzdF9pc19lbXB0eSgmZXZlbnRf bGlzdCkpIHsKLQkJaWYgKGNoaWxkcyA+IDApIHsKLQkJCWVycih1ZGV2LCAiZXZlbnQgbGlzdCBl bXB0eSwgYnV0IGNoaWxkcyBjb3VudCBpcyAlaSIsIGNoaWxkcyk7Ci0JCQljaGlsZHMgPSAwOwot CQl9Ci0JCXJldHVybjsKLQl9Ci0KLQl1ZGV2X2xpc3Rfbm9kZV9mb3JlYWNoX3NhZmUobG9vcCwg dG1wLCAmZXZlbnRfbGlzdCkgewotCQlzdHJ1Y3QgdWRldl9ldmVudCAqbG9vcF9ldmVudCA9IG5v ZGVfdG9fZXZlbnQobG9vcCk7Ci0KLQkJaWYgKGNoaWxkcyA+PSBtYXhfY2hpbGRzKSB7Ci0JCQlp bmZvKHVkZXYsICJtYXhpbXVtIG51bWJlciAoJWkpIG9mIGNoaWxkcyByZWFjaGVkXG4iLCBjaGls ZHMpOwotCQkJYnJlYWs7Ci0JCX0KKwl1ZGV2X2xpc3Rfbm9kZV9mb3JlYWNoKGxvb3AsICZldmVu dF9saXN0KSB7CisJCXN0cnVjdCBldmVudCAqZXZlbnQgPSBub2RlX3RvX2V2ZW50KGxvb3ApOwog Ci0JCWlmIChsb29wX2V2ZW50LT5waWQgIT0gMCkKKwkJaWYgKGV2ZW50LT5zdGF0ZSAhPSBFVkVO VF9RVUVVRUQpCiAJCQljb250aW51ZTsKIAogCQkvKiBkbyBub3Qgc3RhcnQgZXZlbnQgaWYgcGFy ZW50IG9yIGNoaWxkIGV2ZW50IGlzIHN0aWxsIHJ1bm5pbmcgKi8KLQkJaWYgKGRldnBhdGhfYnVz eShsb29wX2V2ZW50KSAhPSAwKSB7Ci0JCQlkYmcodWRldiwgImRlbGF5IHNlcSAlbGx1ICglcylc biIsCi0JCQkgICAgdWRldl9kZXZpY2VfZ2V0X3NlcW51bShsb29wX2V2ZW50LT5kZXYpLAotCQkJ ICAgIHVkZXZfZGV2aWNlX2dldF9kZXZwYXRoKGxvb3BfZXZlbnQtPmRldikpOworCQlpZiAoZGV2 cGF0aF9idXN5KGV2ZW50KSAhPSAwKSB7CisJCQlkYmcodWRldiwgImRlbGF5IHNlcSAlbGx1ICgl cylcbiIsIGV2ZW50LT5zZXFudW0sIGV2ZW50LT5kZXZwYXRoKTsKIAkJCWNvbnRpbnVlOwogCQl9 CiAKLQkJZXZlbnRfZm9yayhsb29wX2V2ZW50KTsKLQkJZGJnKHVkZXYsICJtb3ZlZCBzZXEgJWxs dSB0byBydW5uaW5nIGxpc3RcbiIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0obG9vcF9ldmVudC0+ ZGV2KSk7CisJCWV2ZW50X3J1bihldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3b3JrZXJf cmV0dXJuZWQodm9pZCkKK3sKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3Qgd29ya2VyX21lc3NhZ2Ug bXNnOworCQlzc2l6ZV90IHNpemU7CisJCXN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbG9vcDsKKwor CQlzaXplID0gcmVjdihwZmRbRkRfV09SS0VSXS5mZCwgJm1zZywgc2l6ZW9mKHN0cnVjdCB3b3Jr ZXJfbWVzc2FnZSksIE1TR19ET05UV0FJVCk7CisJCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3Qg d29ya2VyX21lc3NhZ2UpKQorCQkJYnJlYWs7CisKKwkJLyogbG9va3VwIHdvcmtlciB3aG8gc2Vu dCB0aGUgc2lnbmFsICovCisJCXVkZXZfbGlzdF9ub2RlX2ZvcmVhY2gobG9vcCwgJndvcmtlcl9s aXN0KSB7CisJCQlzdHJ1Y3Qgd29ya2VyICp3b3JrZXIgPSBub2RlX3RvX3dvcmtlcihsb29wKTsK KworCQkJaWYgKHdvcmtlci0+cGlkICE9IG1zZy5waWQpCisJCQkJY29udGludWU7CiAKLQkJLyog cmV0cnkgaWYgZXZlbnRzIGZpbmlzaGVkIGluIHRoZSBtZWFudGltZSAqLwotCQlpZiAoc2lnY2hp bGRzX3dhaXRpbmcpIHsKLQkJCXNpZ2NoaWxkc193YWl0aW5nID0gMDsKLQkJCXJlYXBfc2lnY2hp bGRzKCk7Ci0JCQlnb3RvIHN0YXJ0X292ZXI7CisJCQkvKiB3b3JrZXIgcmV0dXJuZWQgKi8KKwkJ CXdvcmtlci0+ZXZlbnQtPmV4aXRjb2RlID0gbXNnLmV4aXRjb2RlOworCQkJZXZlbnRfcXVldWVf ZGVsZXRlKHdvcmtlci0+ZXZlbnQpOworCQkJd29ya2VyLT5ldmVudCA9IE5VTEw7CisJCQl3b3Jr ZXItPnN0YXRlID0gV09SS0VSX0lETEU7CisJCQlicmVhazsKIAkJfQogCX0KIH0KQEAgLTM2Nywx NyArNTQzLDE3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9jdHJsX21zZyhzdHJ1Y3QgdWRldl9jdHJs ICp1Y3RybCkKIAlpZiAoaSA+PSAwKSB7CiAJCWluZm8odWRldiwgInVkZXZkIG1lc3NhZ2UgKFNF VF9MT0dfUFJJT1JJVFkpIHJlY2VpdmVkLCBsb2dfcHJpb3JpdHk9JWlcbiIsIGkpOwogCQl1ZGV2 X3NldF9sb2dfcHJpb3JpdHkodWRldiwgaSk7CisJCXdvcmtlcl9raWxsKDApOwogCX0KIAogCWlm ICh1ZGV2X2N0cmxfZ2V0X3N0b3BfZXhlY19xdWV1ZShjdHJsX21zZykgPiAwKSB7CiAJCWluZm8o dWRldiwgInVkZXZkIG1lc3NhZ2UgKFNUT1BfRVhFQ19RVUVVRSkgcmVjZWl2ZWRcbiIpOwotCQlz dG9wX2V4ZWNfcSA9IDE7CisJCXN0b3BfZXhlY19xdWV1ZSA9IDE7CiAJfQogCiAJaWYgKHVkZXZf Y3RybF9nZXRfc3RhcnRfZXhlY19xdWV1ZShjdHJsX21zZykgPiAwKSB7CiAJCWluZm8odWRldiwg InVkZXZkIG1lc3NhZ2UgKFNUQVJUX0VYRUNfUVVFVUUpIHJlY2VpdmVkXG4iKTsKLQkJc3RvcF9l eGVjX3EgPSAwOwotCQlldmVudF9xdWV1ZV9tYW5hZ2VyKHVkZXYpOworCQlzdG9wX2V4ZWNfcXVl dWUgPSAwOwogCX0KIAogCWlmICh1ZGV2X2N0cmxfZ2V0X3JlbG9hZF9ydWxlcyhjdHJsX21zZykg PiAwKSB7CkBAIC00MDksNiArNTg1LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2N0cmxfbXNnKHN0 cnVjdCB1ZGV2X2N0cmwgKnVjdHJsKQogCQkJfQogCQkJZnJlZShrZXkpOwogCQl9CisJCXdvcmtl cl9raWxsKDApOwogCX0KIAogCWkgPSB1ZGV2X2N0cmxfZ2V0X3NldF9tYXhfY2hpbGRzKGN0cmxf bXNnKTsKQEAgLTQyMCw2ICs1OTcsOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfY3RybF9tc2coc3Ry dWN0IHVkZXZfY3RybCAqdWN0cmwpCiAJc2V0dGxlX3BpZCA9IHVkZXZfY3RybF9nZXRfc2V0dGxl KGN0cmxfbXNnKTsKIAlpZiAoc2V0dGxlX3BpZCA+IDApIHsKIAkJaW5mbyh1ZGV2LCAidWRldmQg bWVzc2FnZSAoU0VUVExFKSByZWNlaXZlZFxuIik7CisJCWtpbGwoc2V0dGxlX3BpZCwgU0lHVVNS MSk7CisJCXNldHRsZV9waWQgPSAwOwogCX0KIAl1ZGV2X2N0cmxfbXNnX3VucmVmKGN0cmxfbXNn KTsKIH0KQEAgLTQyNywyMiArNjA2LDIwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9jdHJsX21zZyhz dHJ1Y3QgdWRldl9jdHJsICp1Y3RybCkKIC8qIHJlYWQgaW5vdGlmeSBtZXNzYWdlcyAqLwogc3Rh dGljIGludCBoYW5kbGVfaW5vdGlmeShzdHJ1Y3QgdWRldiAqdWRldikKIHsKLQlpbnQgbmJ5dGVz LCBwb3M7CisJc3NpemVfdCBuYnl0ZXMsIHBvczsKIAljaGFyICpidWY7CiAJc3RydWN0IGlub3Rp ZnlfZXZlbnQgKmV2OwogCi0JaWYgKChpb2N0bChpbm90aWZ5X2ZkLCBGSU9OUkVBRCwgJm5ieXRl cykgPCAwKSB8fCAobmJ5dGVzIDw9IDApKQorCWlmICgoaW9jdGwocGZkW0ZEX0lOT1RJRlldLmZk LCBGSU9OUkVBRCwgJm5ieXRlcykgPCAwKSB8fCAobmJ5dGVzIDw9IDApKQogCQlyZXR1cm4gMDsK IAogCWJ1ZiA9IG1hbGxvYyhuYnl0ZXMpOwogCWlmIChidWYgPT0gTlVMTCkgewogCQllcnIodWRl diwgImVycm9yIGdldHRpbmcgYnVmZmVyIGZvciBpbm90aWZ5LCBkaXNhYmxlIHdhdGNoaW5nXG4i KTsKLQkJY2xvc2UoaW5vdGlmeV9mZCk7Ci0JCWlub3RpZnlfZmQgPSAtMTsKLQkJcmV0dXJuIDA7 CisJCXJldHVybiAtMTsKIAl9CiAKLQlyZWFkKGlub3RpZnlfZmQsIGJ1ZiwgbmJ5dGVzKTsKKwlu Ynl0ZXMgPSByZWFkKHBmZFtGRF9JTk9USUZZXS5mZCwgYnVmLCBuYnl0ZXMpOwogCiAJZm9yIChw b3MgPSAwOyBwb3MgPCBuYnl0ZXM7IHBvcyArPSBzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQp ICsgZXYtPmxlbikgewogCQlzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsKQEAgLTQ3Niw3MiArNjUz LDQ4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lub3RpZnkoc3RydWN0IHVkZXYgKnVkZXYpCiAKIAl9 CiAKLQlmcmVlIChidWYpOworCWZyZWUoYnVmKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZv aWQgc2lnX2hhbmRsZXIoaW50IHNpZ251bSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9zaWduYWwoaW50 IHNpZ25vKQogewotCXN3aXRjaCAoc2lnbnVtKSB7Ci0JCWNhc2UgU0lHSU5UOgotCQljYXNlIFNJ R1RFUk06Ci0JCQl1ZGV2X2V4aXQgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0lHQ0hMRDoKLQkJ CS8qIHNldCBmbGFnLCB0aGVuIHdyaXRlIHRvIHBpcGUgaWYgbmVlZGVkICovCi0JCQlzaWdjaGls ZHNfd2FpdGluZyA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBTSUdIVVA6Ci0JCQlyZWxvYWRfY29u ZmlnID0gMTsKLQkJCWJyZWFrOwotCX0KKwlzd2l0Y2ggKHNpZ25vKSB7CisJY2FzZSBTSUdJTlQ6 CisJY2FzZSBTSUdURVJNOgorCQl1ZGV2X2V4aXQgPSAxOworCQlicmVhazsKKwljYXNlIFNJR0NI TEQ6CisJCXdoaWxlICgxKSB7CisJCQlwaWRfdCBwaWQ7CisJCQlzdHJ1Y3QgdWRldl9saXN0X25v ZGUgKmxvb3AsICp0bXA7CiAKLQlzaWduYWxfcmVjZWl2ZWQgPSAxOwotfQorCQkJcGlkID0gd2Fp dHBpZCgtMSwgTlVMTCwgV05PSEFORyk7CisJCQlpZiAocGlkIDw9IDApCisJCQkJYnJlYWs7CiAK LXN0YXRpYyB2b2lkIHVkZXZfZG9uZShpbnQgcGlkLCBpbnQgZXhpdHN0YXR1cykKLXsKLQlzdHJ1 Y3QgdWRldl9saXN0X25vZGUgKmxvb3A7CisJCQl1ZGV2X2xpc3Rfbm9kZV9mb3JlYWNoX3NhZmUo bG9vcCwgdG1wLCAmd29ya2VyX2xpc3QpIHsKKwkJCQlzdHJ1Y3Qgd29ya2VyICp3b3JrZXIgPSBu b2RlX3RvX3dvcmtlcihsb29wKTsKIAotCS8qIGZpbmQgZXZlbnQgYXNzb2NpYXRlZCB3aXRoIHBp ZCBhbmQgZGVsZXRlIGl0ICovCi0JdWRldl9saXN0X25vZGVfZm9yZWFjaChsb29wLCAmZXZlbnRf bGlzdCkgewotCQlzdHJ1Y3QgdWRldl9ldmVudCAqbG9vcF9ldmVudCA9IG5vZGVfdG9fZXZlbnQo bG9vcCk7Ci0KLQkJaWYgKGxvb3BfZXZlbnQtPnBpZCA9PSBwaWQpIHsKLQkJCWluZm8obG9vcF9l dmVudC0+dWRldiwgInNlcSAlbGx1IGNsZWFudXAsIHBpZCBbJWRdLCBzdGF0dXMgJWksICVsZCBz ZWNvbmRzIG9sZFxuIiwKLQkJCSAgICAgdWRldl9kZXZpY2VfZ2V0X3NlcW51bShsb29wX2V2ZW50 LT5kZXYpLCBsb29wX2V2ZW50LT5waWQsCi0JCQkgICAgIGV4aXRzdGF0dXMsIHRpbWUoTlVMTCkg LSBsb29wX2V2ZW50LT5xdWV1ZV90aW1lKTsKLQkJCWxvb3BfZXZlbnQtPmV4aXRzdGF0dXMgPSBl eGl0c3RhdHVzOwotCQkJaWYgKGRlYnVnX3RyYWNlKQotCQkJCWZwcmludGYoc3RkZXJyLCAiZXhp dCAlcyAoJWxsdSlcbiIsCi0JCQkJICAgICAgIHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGxvb3Bf ZXZlbnQtPmRldiksCi0JCQkJICAgICAgIHVkZXZfZGV2aWNlX2dldF9zZXFudW0obG9vcF9ldmVu dC0+ZGV2KSk7Ci0JCQlldmVudF9xdWV1ZV9kZWxldGUobG9vcF9ldmVudCk7Ci0JCQljaGlsZHMt LTsKLQotCQkJLyogdGhlcmUgbWF5IGJlIGRlcGVuZGVudCBldmVudHMgd2FpdGluZyAqLwotCQkJ cnVuX2V4ZWNfcSA9IDE7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci19CisJCQkJaWYgKHdvcmtlci0+ cGlkICE9IHBpZCkKKwkJCQkJY29udGludWU7CiAKLXN0YXRpYyB2b2lkIHJlYXBfc2lnY2hpbGRz KHZvaWQpCi17Ci0JcGlkX3QgcGlkOwotCWludCBzdGF0dXM7CisJCQkJLyogZmFpbCBldmVudCwg aWYgd29ya2VyIGRpZWQgdW5leHBlY3RlZGx5ICovCisJCQkJaWYgKHdvcmtlci0+ZXZlbnQgIT0g TlVMTCkgeworCQkJCQl3b3JrZXItPmV2ZW50LT5leGl0Y29kZSA9IDEyNzsKKwkJCQkJZXZlbnRf cXVldWVfZGVsZXRlKHdvcmtlci0+ZXZlbnQpOworCQkJCX0KIAotCXdoaWxlICgxKSB7Ci0JCXBp ZCA9IHdhaXRwaWQoLTEsICZzdGF0dXMsIFdOT0hBTkcpOwotCQlpZiAocGlkIDw9IDApCi0JCQli cmVhazsKLQkJaWYgKFdJRkVYSVRFRChzdGF0dXMpKQotCQkJc3RhdHVzID0gV0VYSVRTVEFUVVMo c3RhdHVzKTsKLQkJZWxzZSBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkKLQkJCXN0YXR1cyA9IFdU RVJNU0lHKHN0YXR1cykgKyAxMjg7Ci0JCWVsc2UKLQkJCXN0YXR1cyA9IDA7Ci0JCXVkZXZfZG9u ZShwaWQsIHN0YXR1cyk7CisJCQkJdWRldl9saXN0X25vZGVfcmVtb3ZlKCZ3b3JrZXItPm5vZGUp OworCQkJCXdvcmtlcl91bnJlZih3b3JrZXIpOworCQkJCWNoaWxkcy0tOworCQkJCWJyZWFrOwor CQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgU0lHSFVQOgorCQlyZWxvYWRfY29uZmlnID0gMTsK KwkJYnJlYWs7CiAJfQogfQogCkBAIC01NzYsNyArNzI5LDcgQEAgaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIHsKIAlzdHJ1Y3QgdWRldiAqdWRldjsKIAlpbnQgZmQ7Ci0Jc3RydWN0 IHNpZ2FjdGlvbiBhY3Q7CisJc2lnc2V0X3QgbWFzazsKIAljb25zdCBjaGFyICp2YWx1ZTsKIAlp bnQgZGFlbW9uaXplID0gMDsKIAlpbnQgcmVzb2x2ZV9uYW1lcyA9IDE7CkBAIC02NjksMjkgKzgy Miw3NiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlyYyA9IDE7CiAJCWdv dG8gZXhpdDsKIAl9Ci0KIAlpZiAodWRldl9jdHJsX2VuYWJsZV9yZWNlaXZpbmcodWRldl9jdHJs KSA8IDApIHsKIAkJZnByaW50ZihzdGRlcnIsICJlcnJvciBiaW5kaW5nIGNvbnRyb2wgc29ja2V0 LCBzZWVtcyB1ZGV2ZCBpcyBhbHJlYWR5IHJ1bm5pbmdcbiIpOwogCQllcnIodWRldiwgImVycm9y IGJpbmRpbmcgY29udHJvbCBzb2NrZXQsIHNlZW1zIHVkZXZkIGlzIGFscmVhZHkgcnVubmluZ1xu Iik7CiAJCXJjID0gMTsKIAkJZ290byBleGl0OwogCX0KKwlwZmRbRkRfQ09OVFJPTF0uZmQgPSB1 ZGV2X2N0cmxfZ2V0X2ZkKHVkZXZfY3RybCk7CiAKLQlrZXJuZWxfbW9uaXRvciA9IHVkZXZfbW9u aXRvcl9uZXdfZnJvbV9uZXRsaW5rKHVkZXYsICJrZXJuZWwiKTsKLQlpZiAoa2VybmVsX21vbml0 b3IgPT0gTlVMTCB8fCB1ZGV2X21vbml0b3JfZW5hYmxlX3JlY2VpdmluZyhrZXJuZWxfbW9uaXRv cikgPCAwKSB7CisJbW9uaXRvciA9IHVkZXZfbW9uaXRvcl9uZXdfZnJvbV9uZXRsaW5rKHVkZXYs ICJrZXJuZWwiKTsKKwlpZiAobW9uaXRvciA9PSBOVUxMIHx8IHVkZXZfbW9uaXRvcl9lbmFibGVf cmVjZWl2aW5nKG1vbml0b3IpIDwgMCkgewogCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIGluaXRp YWxpemluZyBuZXRsaW5rIHNvY2tldFxuIik7CiAJCWVycih1ZGV2LCAiZXJyb3IgaW5pdGlhbGl6 aW5nIG5ldGxpbmsgc29ja2V0XG4iKTsKIAkJcmMgPSAzOwogCQlnb3RvIGV4aXQ7CiAJfQotCXVk ZXZfbW9uaXRvcl9zZXRfcmVjZWl2ZV9idWZmZXJfc2l6ZShrZXJuZWxfbW9uaXRvciwgMTI4KjEw MjQqMTAyNCk7CisJdWRldl9tb25pdG9yX3NldF9yZWNlaXZlX2J1ZmZlcl9zaXplKG1vbml0b3Is IDEyOCoxMDI0KjEwMjQpOworCXBmZFtGRF9ORVRMSU5LXS5mZCA9IHVkZXZfbW9uaXRvcl9nZXRf ZmQobW9uaXRvcik7CisKKwlwZmRbRkRfSU5PVElGWV0uZmQgPSB1ZGV2X3dhdGNoX2luaXQodWRl dik7CisJaWYgKHBmZFtGRF9JTk9USUZZXS5mZCA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJl cnJvciBpbml0aWFsaXppbmcgaW5vdGlmeVxuIik7CisJCWVycih1ZGV2LCAiZXJyb3IgaW5pdGlh bGl6aW5nIGlub3RpZnlcbiIpOworCQlyYyA9IDQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAo dWRldl9nZXRfcnVsZXNfcGF0aCh1ZGV2KSAhPSBOVUxMKSB7CisJCWlub3RpZnlfYWRkX3dhdGNo KHBmZFtGRF9JTk9USUZZXS5mZCwgdWRldl9nZXRfcnVsZXNfcGF0aCh1ZGV2KSwKKwkJCQkgIElO X0NSRUFURSB8IElOX0RFTEVURSB8IElOX01PVkUgfCBJTl9DTE9TRV9XUklURSk7CisJfSBlbHNl IHsKKwkJY2hhciBmaWxlbmFtZVtVVElMX1BBVEhfU0laRV07CisKKwkJaW5vdGlmeV9hZGRfd2F0 Y2gocGZkW0ZEX0lOT1RJRlldLmZkLCBVREVWX1BSRUZJWCAiL2xpYi91ZGV2L3J1bGVzLmQiLAor CQkJCSAgSU5fQ1JFQVRFIHwgSU5fREVMRVRFIHwgSU5fTU9WRSB8IElOX0NMT1NFX1dSSVRFKTsK KwkJaW5vdGlmeV9hZGRfd2F0Y2gocGZkW0ZEX0lOT1RJRlldLmZkLCBTWVNDT05GRElSICIvdWRl di9ydWxlcy5kIiwKKwkJCQkgIElOX0NSRUFURSB8IElOX0RFTEVURSB8IElOX01PVkUgfCBJTl9D TE9TRV9XUklURSk7CisKKwkJLyogd2F0Y2ggZHluYW1pYyBydWxlcyBkaXJlY3RvcnkgKi8KKwkJ dXRpbF9zdHJzY3B5bChmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgdWRldl9nZXRfZGV2X3Bh dGgodWRldiksICIvLnVkZXYvcnVsZXMuZCIsIE5VTEwpOworCQlpbm90aWZ5X2FkZF93YXRjaChw ZmRbRkRfSU5PVElGWV0uZmQsIGZpbGVuYW1lLAorCQkJCSAgSU5fQ1JFQVRFIHwgSU5fREVMRVRF IHwgSU5fTU9WRSB8IElOX0NMT1NFX1dSSVRFKTsKKwl9CisJdWRldl93YXRjaF9yZXN0b3JlKHVk ZXYpOworCisJLyogYmxvY2sgYW5kIGxpc3RlbiB0byBhbGwgc2lnbmFscyBvbiBzaWduYWxmZCAq LworCXNpZ2ZpbGxzZXQoJm1hc2spOworCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmbWFzaywg TlVMTCk7CisJcGZkW0ZEX1NJR05BTF0uZmQgPSBzaWduYWxmZCgtMSwgJm1hc2ssIDApOworCWlm IChwZmRbRkRfU0lHTkFMXS5mZCA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvciBnZXR0 aW5nIHNpZ25hbGZkXG4iKTsKKwkJZXJyKHVkZXYsICJlcnJvciBnZXR0aW5nIHNpZ25hbGZkXG4i KTsKKwkJcmMgPSA1OworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogdW5uYW1lZCBzb2NrZXQgZnJv bSB3b3JrZXJzIHRvIHRoZSBtYWluIGRhZW1vbiAqLworCWlmIChzb2NrZXRwYWlyKEFGX0xPQ0FM LCBTT0NLX0RHUkFNLCAwLCB3b3JrZXJfd2F0Y2gpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwg ImVycm9yIGdldHRpbmcgc29ja2V0cGFpclxuIik7CisJCWVycih1ZGV2LCAiZXJyb3IgZ2V0dGlu ZyBzb2NrZXRwYWlyXG4iKTsKKwkJcmMgPSA2OworCQlnb3RvIGV4aXQ7CisJfQorCXBmZFtGRF9X T1JLRVJdLmZkID0gd29ya2VyX3dhdGNoW1JFQURfRU5EXTsKIAogCXJ1bGVzID0gdWRldl9ydWxl c19uZXcodWRldiwgcmVzb2x2ZV9uYW1lcyk7CiAJaWYgKHJ1bGVzID09IE5VTEwpIHsKIAkJZXJy KHVkZXYsICJlcnJvciByZWFkaW5nIHJ1bGVzXG4iKTsKIAkJZ290byBleGl0OwogCX0KLQl1ZGV2 X2xpc3RfaW5pdCgmZXZlbnRfbGlzdCk7CisKIAl1ZGV2X3F1ZXVlX2V4cG9ydCA9IHVkZXZfcXVl dWVfZXhwb3J0X25ldyh1ZGV2KTsKIAlpZiAodWRldl9xdWV1ZV9leHBvcnQgPT0gTlVMTCkgewog CQllcnIodWRldiwgImVycm9yIGNyZWF0aW5nIHF1ZXVlIGZpbGVcbiIpOwpAQCAtNzA0LDE5ICs5 MDQsMTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJcGlkID0gZm9yaygp OwogCQlzd2l0Y2ggKHBpZCkgewogCQljYXNlIDA6Ci0JCQlkYmcodWRldiwgImRhZW1vbml6ZWQg Zm9yayBydW5uaW5nXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIC0xOgogCQkJZXJyKHVkZXYsICJm b3JrIG9mIGRhZW1vbiBmYWlsZWQ6ICVtXG4iKTsKIAkJCXJjID0gNDsKIAkJCWdvdG8gZXhpdDsK IAkJZGVmYXVsdDoKLQkJCWRiZyh1ZGV2LCAiY2hpbGQgWyV1XSBydW5uaW5nLCBwYXJlbnQgZXhp dHNcbiIsIHBpZCk7CiAJCQlyYyA9IDA7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CiAKKwlzdGFy dHVwX2xvZyh1ZGV2KTsKKwogCS8qIHJlZGlyZWN0IHN0ZHtvdXQsZXJyfSAqLwogCWlmICghZGVi dWcgJiYgIWRlYnVnX3RyYWNlKSB7CiAJCWR1cDIoZmQsIFNURElOX0ZJTEVOTyk7CkBAIC03NDIs MTU5ICs5NDIsMTA5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWNsb3Nl KGZkKTsKIAl9CiAKLQlzdGFydHVwX2xvZyh1ZGV2KTsKLQotCS8qIHNldCBzaWduYWwgaGFuZGxl cnMgKi8KLQltZW1zZXQoJmFjdCwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBzaWdhY3Rpb24pKTsKLQlh Y3Quc2FfaGFuZGxlciA9IHNpZ19oYW5kbGVyOwotCXNpZ2VtcHR5c2V0KCZhY3Quc2FfbWFzayk7 Ci0JYWN0LnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKLQlzaWdhY3Rpb24oU0lHSU5ULCAmYWN0LCBO VUxMKTsKLQlzaWdhY3Rpb24oU0lHVEVSTSwgJmFjdCwgTlVMTCk7Ci0Jc2lnYWN0aW9uKFNJR0NI TEQsICZhY3QsIE5VTEwpOwotCXNpZ2FjdGlvbihTSUdIVVAsICZhY3QsIE5VTEwpOwotCi0JLyog d2F0Y2ggcnVsZXMgZGlyZWN0b3J5ICovCi0JdWRldl93YXRjaF9pbml0KHVkZXYpOwotCWlmIChp bm90aWZ5X2ZkID49IDApIHsKLQkJaWYgKHVkZXZfZ2V0X3J1bGVzX3BhdGgodWRldikgIT0gTlVM TCkgewotCQkJaW5vdGlmeV9hZGRfd2F0Y2goaW5vdGlmeV9mZCwgdWRldl9nZXRfcnVsZXNfcGF0 aCh1ZGV2KSwKLQkJCQkJICBJTl9DUkVBVEUgfCBJTl9ERUxFVEUgfCBJTl9NT1ZFIHwgSU5fQ0xP U0VfV1JJVEUpOwotCQl9IGVsc2UgewotCQkJY2hhciBmaWxlbmFtZVtVVElMX1BBVEhfU0laRV07 Ci0KLQkJCWlub3RpZnlfYWRkX3dhdGNoKGlub3RpZnlfZmQsIFVERVZfUFJFRklYICIvbGliL3Vk ZXYvcnVsZXMuZCIsCi0JCQkJCSAgSU5fQ1JFQVRFIHwgSU5fREVMRVRFIHwgSU5fTU9WRSB8IElO X0NMT1NFX1dSSVRFKTsKLQkJCWlub3RpZnlfYWRkX3dhdGNoKGlub3RpZnlfZmQsIFNZU0NPTkZE SVIgIi91ZGV2L3J1bGVzLmQiLAotCQkJCQkgIElOX0NSRUFURSB8IElOX0RFTEVURSB8IElOX01P VkUgfCBJTl9DTE9TRV9XUklURSk7Ci0KLQkJCS8qIHdhdGNoIGR5bmFtaWMgcnVsZXMgZGlyZWN0 b3J5ICovCi0JCQl1dGlsX3N0cnNjcHlsKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCB1ZGV2 X2dldF9kZXZfcGF0aCh1ZGV2KSwgIi8udWRldi9ydWxlcy5kIiwgTlVMTCk7Ci0JCQlpbm90aWZ5 X2FkZF93YXRjaChpbm90aWZ5X2ZkLCBmaWxlbmFtZSwKLQkJCQkJICBJTl9DUkVBVEUgfCBJTl9E RUxFVEUgfCBJTl9NT1ZFIHwgSU5fQ0xPU0VfV1JJVEUpOwotCQl9Ci0KLQkJdWRldl93YXRjaF9y ZXN0b3JlKHVkZXYpOwotCX0KLQogCS8qIGluIHRyYWNlIG1vZGUgcnVuIG9uZSBldmVudCBhZnRl ciB0aGUgb3RoZXIgKi8KIAlpZiAoZGVidWdfdHJhY2UpIHsKIAkJbWF4X2NoaWxkcyA9IDE7CiAJ fSBlbHNlIHsKIAkJaW50IG1lbXNpemUgPSBtZW1fc2l6ZV9tYigpOworCiAJCWlmIChtZW1zaXpl ID4gMCkKLQkJCW1heF9jaGlsZHMgPSAxMjggKyAobWVtc2l6ZSAvIDQpOworCQkJbWF4X2NoaWxk cyA9IDEyOCArIChtZW1zaXplIC8gOCk7CiAJCWVsc2UKLQkJCW1heF9jaGlsZHMgPSBVREVWRF9N QVhfQ0hJTERTOworCQkJbWF4X2NoaWxkcyA9IDEyODsKIAl9CisKIAkvKiBwb3NzaWJseSBvdmVy d3JpdGUgbWF4aW11bSBsaW1pdCBvZiBleGVjdXRlZCBldmVudHMgKi8KIAl2YWx1ZSA9IGdldGVu digiVURFVkRfTUFYX0NISUxEUyIpOwogCWlmICh2YWx1ZSkKIAkJbWF4X2NoaWxkcyA9IHN0cnRv dWwodmFsdWUsIE5VTEwsIDEwKTsKIAlpbmZvKHVkZXYsICJpbml0aWFsaXplIG1heF9jaGlsZHMg dG8gJXVcbiIsIG1heF9jaGlsZHMpOwogCisJdWRldl9saXN0X2luaXQoJmV2ZW50X2xpc3QpOwor CXVkZXZfbGlzdF9pbml0KCZ3b3JrZXJfbGlzdCk7CisKIAl3aGlsZSAoIXVkZXZfZXhpdCkgewot CQlzaWdzZXRfdCBibG9ja2VkX21hc2ssIG9yaWdfbWFzazsKLQkJc3RydWN0IHBvbGxmZCBwZmRb NF07Ci0JCXN0cnVjdCBwb2xsZmQgKmN0cmxfcG9sbCwgKm1vbml0b3JfcG9sbCwgKmlub3RpZnlf cG9sbCA9IE5VTEw7Ci0JCWludCBuZmRzID0gMDsKIAkJaW50IGZkY291bnQ7CisJCWludCB0aW1l b3V0OwogCi0JCXNpZ2ZpbGxzZXQoJmJsb2NrZWRfbWFzayk7Ci0JCXNpZ3Byb2NtYXNrKFNJR19T RVRNQVNLLCAmYmxvY2tlZF9tYXNrLCAmb3JpZ19tYXNrKTsKLQkJaWYgKHNpZ25hbF9yZWNlaXZl ZCkgewotCQkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvcmlnX21hc2ssIE5VTEwpOwotCQkJ Z290byBoYW5kbGVfc2lnbmFsczsKLQkJfQorCQkvKiBzZXQgdGltZW91dCB0byBraWxsIGlkbGUg d29ya2VycyAqLworCQlpZiAodWRldl9saXN0X2lzX2VtcHR5KCZldmVudF9saXN0KSAmJiBjaGls ZHMgPiAyKQorCQkJdGltZW91dCA9IDMgKiAxMDAwOworCQllbHNlCisJCQl0aW1lb3V0ID0gLTE7 CisJCS8qIHdhaXQgZm9yIGV2ZW50cyAqLworCQlmZGNvdW50ID0gcG9sbChwZmQsIEFSUkFZX1NJ WkUocGZkKSwgdGltZW91dCk7CisJCWlmIChmZGNvdW50IDwgMCkKKwkJCWNvbnRpbnVlOwogCi0J CWN0cmxfcG9sbCA9ICZwZmRbbmZkcysrXTsKLQkJY3RybF9wb2xsLT5mZCA9IHVkZXZfY3RybF9n ZXRfZmQodWRldl9jdHJsKTsKLQkJY3RybF9wb2xsLT5ldmVudHMgPSBQT0xMSU47CisJCS8qIHRp bWVvdXQgLSBraWxsIGlkbGUgd29ya2VycyAqLworCQlpZiAoZmRjb3VudCA9PSAwKQorCQkJd29y a2VyX2tpbGwoMik7CiAKLQkJbW9uaXRvcl9wb2xsID0gJnBmZFtuZmRzKytdOwotCQltb25pdG9y X3BvbGwtPmZkID0gdWRldl9tb25pdG9yX2dldF9mZChrZXJuZWxfbW9uaXRvcik7Ci0JCW1vbml0 b3JfcG9sbC0+ZXZlbnRzID0gUE9MTElOOworCQkvKiBldmVudCBoYXMgZmluaXNoZWQgKi8KKwkJ aWYgKHBmZFtGRF9XT1JLRVJdLnJldmVudHMgJiBQT0xMSU4pCisJCQl3b3JrZXJfcmV0dXJuZWQo KTsKIAotCQlpZiAoaW5vdGlmeV9mZCA+PSAwKSB7Ci0JCQlpbm90aWZ5X3BvbGwgPSAmcGZkW25m ZHMrK107Ci0JCQlpbm90aWZ5X3BvbGwtPmZkID0gaW5vdGlmeV9mZDsKLQkJCWlub3RpZnlfcG9s bC0+ZXZlbnRzID0gUE9MTElOOwotCQl9CisJCS8qIGdldCBrZXJuZWwgdWV2ZW50ICovCisJCWlm IChwZmRbRkRfTkVUTElOS10ucmV2ZW50cyAmIFBPTExJTikgeworCQkJc3RydWN0IHVkZXZfZGV2 aWNlICpkZXY7CiAKLQkJZmRjb3VudCA9IHBwb2xsKHBmZCwgbmZkcywgTlVMTCwgJm9yaWdfbWFz ayk7Ci0JCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb3JpZ19tYXNrLCBOVUxMKTsKLQkJaWYg KGZkY291bnQgPCAwKSB7Ci0JCQlpZiAoZXJybm8gPT0gRUlOVFIpCi0JCQkJZ290byBoYW5kbGVf c2lnbmFsczsKLQkJCWVycih1ZGV2LCAiZXJyb3IgaW4gc2VsZWN0OiAlbVxuIik7Ci0JCQljb250 aW51ZTsKKwkJCWRldiA9IHVkZXZfbW9uaXRvcl9yZWNlaXZlX2RldmljZShtb25pdG9yKTsKKwkJ CWlmIChkZXYgIT0gTlVMTCkKKwkJCQlldmVudF9xdWV1ZV9pbnNlcnQoZGV2KTsKKwkJCWVsc2UK KwkJCQl1ZGV2X2RldmljZV91bnJlZihkZXYpOwogCQl9CiAKIAkJLyogZ2V0IGNvbnRyb2wgbWVz c2FnZSAqLwotCQlpZiAoY3RybF9wb2xsLT5yZXZlbnRzICYgUE9MTElOKQorCQlpZiAocGZkW0ZE X0NPTlRST0xdLnJldmVudHMgJiBQT0xMSU4pCiAJCQloYW5kbGVfY3RybF9tc2codWRldl9jdHJs KTsKIAotCQkvKiBnZXQga2VybmVsIHVldmVudCAqLwotCQlpZiAobW9uaXRvcl9wb2xsLT5yZXZl bnRzICYgUE9MTElOKSB7Ci0JCQlzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsKKwkJLyogc3RhcnQg bmV3IGV2ZW50cyAqLworCQlpZiAoIXVkZXZfbGlzdF9pc19lbXB0eSgmZXZlbnRfbGlzdCkgJiYg IXN0b3BfZXhlY19xdWV1ZSkKKwkJCWV2ZW50c19zdGFydCh1ZGV2KTsKIAotCQkJZGV2ID0gdWRl dl9tb25pdG9yX3JlY2VpdmVfZGV2aWNlKGtlcm5lbF9tb25pdG9yKTsKLQkJCWlmIChkZXYgIT0g TlVMTCkgewotCQkJCXN0cnVjdCB1ZGV2X2V2ZW50ICpldmVudDsKKwkJLyogZ2V0IHNpZ25hbCAq LworCQlpZiAocGZkW0ZEX1NJR05BTF0ucmV2ZW50cyAmIFBPTExJTikgeworCQkJc3RydWN0IHNp Z25hbGZkX3NpZ2luZm8gZmRzaTsKKwkJCXNzaXplX3Qgc2l6ZTsKIAotCQkJCWV2ZW50ID0gdWRl dl9ldmVudF9uZXcoZGV2KTsKLQkJCQlpZiAoZXZlbnQgIT0gTlVMTCkKLQkJCQkJZXZlbnRfcXVl dWVfaW5zZXJ0KGV2ZW50KTsKLQkJCQllbHNlCi0JCQkJCXVkZXZfZGV2aWNlX3VucmVmKGRldik7 Ci0JCQl9CisJCQlzaXplID0gcmVhZChwZmRbRkRfU0lHTkFMXS5mZCwgJmZkc2ksIHNpemVvZihz dHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbykpOworCQkJaWYgKHNpemUgPT0gc2l6ZW9mKHN0cnVjdCBz aWduYWxmZF9zaWdpbmZvKSkKKwkJCQloYW5kbGVfc2lnbmFsKGZkc2kuc3NpX3NpZ25vKTsKIAkJ fQogCi0JCS8qIHJ1bGVzIGRpcmVjdG9yeSBpbm90aWZ5IHdhdGNoICovCi0JCWlmIChpbm90aWZ5 X3BvbGwgJiYgKGlub3RpZnlfcG9sbC0+cmV2ZW50cyAmIFBPTExJTikpCisJCS8qIGRldmljZSBu b2RlIGFuZCBydWxlcyBkaXJlY3RvcnkgaW5vdGlmeSB3YXRjaCAqLworCQlpZiAocGZkW0ZEX0lO T1RJRlldLnJldmVudHMgJiBQT0xMSU4pCiAJCQloYW5kbGVfaW5vdGlmeSh1ZGV2KTsKIAotaGFu ZGxlX3NpZ25hbHM6Ci0JCXNpZ25hbF9yZWNlaXZlZCA9IDA7Ci0KIAkJLyogcnVsZXMgY2hhbmdl ZCwgc2V0IGJ5IGlub3RpZnkgb3IgYSBIVVAgc2lnbmFsICovCiAJCWlmIChyZWxvYWRfY29uZmln KSB7CiAJCQlzdHJ1Y3QgdWRldl9ydWxlcyAqcnVsZXNfbmV3OwogCi0JCQlyZWxvYWRfY29uZmln ID0gMDsKKwkJCXdvcmtlcl9raWxsKDApOwogCQkJcnVsZXNfbmV3ID0gdWRldl9ydWxlc19uZXco dWRldiwgcmVzb2x2ZV9uYW1lcyk7CiAJCQlpZiAocnVsZXNfbmV3ICE9IE5VTEwpIHsKIAkJCQl1 ZGV2X3J1bGVzX3VucmVmKHJ1bGVzKTsKIAkJCQlydWxlcyA9IHJ1bGVzX25ldzsKIAkJCX0KLQkJ fQotCi0JCWlmIChzaWdjaGlsZHNfd2FpdGluZykgewotCQkJc2lnY2hpbGRzX3dhaXRpbmcgPSAw OwotCQkJcmVhcF9zaWdjaGlsZHMoKTsKLQkJfQotCi0JCWlmIChydW5fZXhlY19xKSB7Ci0JCQly dW5fZXhlY19xID0gMDsKLQkJCWlmICghc3RvcF9leGVjX3EpCi0JCQkJZXZlbnRfcXVldWVfbWFu YWdlcih1ZGV2KTsKLQkJfQotCi0JCWlmIChzZXR0bGVfcGlkID4gMCkgewotCQkJa2lsbChzZXR0 bGVfcGlkLCBTSUdVU1IxKTsKLQkJCXNldHRsZV9waWQgPSAwOworCQkJcmVsb2FkX2NvbmZpZyA9 IDA7CiAJCX0KIAl9CisKIAl1ZGV2X3F1ZXVlX2V4cG9ydF9jbGVhbnVwKHVkZXZfcXVldWVfZXhw b3J0KTsKIAlyYyA9IDA7CiBleGl0OgotCiAJdWRldl9xdWV1ZV9leHBvcnRfdW5yZWYodWRldl9x dWV1ZV9leHBvcnQpOwogCXVkZXZfcnVsZXNfdW5yZWYocnVsZXMpOwogCXVkZXZfY3RybF91bnJl Zih1ZGV2X2N0cmwpOwotCWlmIChpbm90aWZ5X2ZkID49IDApCi0JCWNsb3NlKGlub3RpZnlfZmQp OwotCXVkZXZfbW9uaXRvcl91bnJlZihrZXJuZWxfbW9uaXRvcik7CisJaWYgKHBmZFtGRF9TSUdO QUxdLmZkID49IDApCisJCWNsb3NlKHBmZFtGRF9TSUdOQUxdLmZkKTsKKwlpZiAod29ya2VyX3dh dGNoW1JFQURfRU5EXSA+PSAwKQorCQljbG9zZSh3b3JrZXJfd2F0Y2hbUkVBRF9FTkRdKTsKKwlp ZiAod29ya2VyX3dhdGNoW1dSSVRFX0VORF0gPj0gMCkKKwkJY2xvc2Uod29ya2VyX3dhdGNoW1dS SVRFX0VORF0pOworCXVkZXZfbW9uaXRvcl91bnJlZihtb25pdG9yKTsKIAl1ZGV2X3NlbGludXhf ZXhpdCh1ZGV2KTsKIAl1ZGV2X3VucmVmKHVkZXYpOwogCWxvZ2dpbmdfY2xvc2UoKTsK --001636c5a3bc4d84cc046b76e48e--