From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11803 invoked by alias); 11 Dec 2018 13:50:23 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 11765 invoked by uid 89); 11 Dec 2018 13:50:22 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-9.2 required=5.0 tests=BAYES_50,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS,TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=capable, launched, Select, 8138 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 11 Dec 2018 13:50:12 +0000 Received: from svr-orw-mbx-02.mgc.mentorg.com ([147.34.90.202]) by relay1.mentorg.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-SHA384:256) id 1gWiQM-0001Wd-Hp from ChungLin_Tang@mentor.com ; Tue, 11 Dec 2018 05:50:10 -0800 Received: from [0.0.0.0] (147.34.91.1) by svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) with Microsoft SMTP Server (TLS) id 15.0.1320.4; Tue, 11 Dec 2018 05:50:06 -0800 Subject: Re: [PATCH 6/6, OpenACC, libgomp] Async re-work, nvptx changes (revised, v2) From: Chung-Lin Tang To: Thomas Schwinge , Chung-Lin Tang CC: , Tom de Vries References: <9523b49a-0454-e0a9-826d-5eeec2a8c973@mentor.com> Message-ID: Date: Tue, 11 Dec 2018 13:50:00 -0000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.3.3 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------8A120A116B18227059C96667" X-SW-Source: 2018-12/txt/msg00694.txt.bz2 --------------8A120A116B18227059C96667 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-length: 1724 On 2018/12/10 6:02 PM, Chung-Lin Tang wrote: > On 2018/12/7 04:57 AM, Thomas Schwinge wrote>> --- a/libgomp/plugin/plugin-nvptx.c >>> +++ b/libgomp/plugin/plugin-nvptx.c >> >>> +struct goacc_asyncqueue * >>> +GOMP_OFFLOAD_openacc_async_construct (void) >>> +{ >>> +  struct goacc_asyncqueue *aq >>> +    = GOMP_PLUGIN_malloc (sizeof (struct goacc_asyncqueue)); >>> +  aq->cuda_stream = NULL; >>> +  CUDA_CALL_ASSERT (cuStreamCreate, &aq->cuda_stream, CU_STREAM_DEFAULT); >> >> Curiously (this was the same in the code before): does this have to be >> "CU_STREAM_DEFAULT" instead of "CU_STREAM_NON_BLOCKING", because we want >> to block anything from running in parallel with "acc_async_sync" GPU >> kernels, that use the "NULL" stream?  (Not asking you to change this now, >> but I wonder if this is overly strict?) > > IIUC, this non-blocking only pertains to the "Legacy Default Stream" in CUDA, which we're pretty much ignoring; we should be using the newer per-thread default stream model. We could review this issue later. > >>> +  if (aq->cuda_stream == NULL) >>> +    GOMP_PLUGIN_fatal ("CUDA stream create NULL\n"); >> >> Can this actually happen, given the "CUDA_CALL_ASSERT" usage above? > > Hmm, yeah I think this is superfluous too... > >>> +  CUDA_CALL_ASSERT (cuStreamSynchronize, aq->cuda_stream); >> >> Why is the synchronization needed here? > > I don't remember, could likely be something added during debug. > I'll remove this and test if things are okay. I have removed the above seemingly unneeded lines and re-tested, appears okay. Also the formerly attached version seemed to for some reason had many conflicts with older code, all resolved in this v2 nvptx part. Thanks, Chung-Lin --------------8A120A116B18227059C96667 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="async-06.nvptx.v2.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="async-06.nvptx.v2.patch" Content-length: 57605 SW5kZXg6IGxpYmdvbXAvcGx1Z2luL2N1ZGEvY3VkYS5oCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGxpYmdvbXAvcGx1Z2luL2N1ZGEvY3VkYS5oCShy ZXZpc2lvbiAyNjY5NzMpCisrKyBsaWJnb21wL3BsdWdpbi9jdWRhL2N1ZGEu aAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsMTEgQEAgdHlwZWRlZiBl bnVtIHsKICAgQ1VEQV9FUlJPUl9JTlZBTElEX0NPTlRFWFQgPSAyMDEsCiAg IENVREFfRVJST1JfTk9UX0ZPVU5EID0gNTAwLAogICBDVURBX0VSUk9SX05P VF9SRUFEWSA9IDYwMCwKLSAgQ1VEQV9FUlJPUl9MQVVOQ0hfRkFJTEVEID0g NzE5CisgIENVREFfRVJST1JfTEFVTkNIX0ZBSUxFRCA9IDcxOSwKKyAgQ1VE QV9FUlJPUl9DT09QRVJBVElWRV9MQVVOQ0hfVE9PX0xBUkdFID0gNzIwLAor ICBDVURBX0VSUk9SX05PVF9QRVJNSVRURUQgPSA4MDAsCisgIENVREFfRVJS T1JfTk9UX1NVUFBPUlRFRCA9IDgwMSwKKyAgQ1VEQV9FUlJPUl9VTktOT1dO ID0gOTk5CiB9IENVcmVzdWx0OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTcz LDYgKzE3Nyw4IEBAIENVcmVzdWx0IGN1TW9kdWxlTG9hZERhdGEgKENVbW9k dWxlICosIGNvbnN0IHZvaWQKIENVcmVzdWx0IGN1TW9kdWxlVW5sb2FkIChD VW1vZHVsZSk7CiBDVXJlc3VsdCBjdU9jY3VwYW5jeU1heFBvdGVudGlhbEJs b2NrU2l6ZShpbnQgKiwgaW50ICosIENVZnVuY3Rpb24sCiAJCQkJCSAgQ1Vv Y2N1cGFuY3lCMkRTaXplLCBzaXplX3QsIGludCk7Cit0eXBlZGVmIHZvaWQg KCpDVXN0cmVhbUNhbGxiYWNrKShDVXN0cmVhbSwgQ1VyZXN1bHQsIHZvaWQg Kik7CitDVXJlc3VsdCBjdVN0cmVhbUFkZENhbGxiYWNrKENVc3RyZWFtLCBD VXN0cmVhbUNhbGxiYWNrLCB2b2lkICosIHVuc2lnbmVkIGludCk7CiBDVXJl c3VsdCBjdVN0cmVhbUNyZWF0ZSAoQ1VzdHJlYW0gKiwgdW5zaWduZWQpOwog I2RlZmluZSBjdVN0cmVhbURlc3Ryb3kgY3VTdHJlYW1EZXN0cm95X3YyCiBD VXJlc3VsdCBjdVN0cmVhbURlc3Ryb3kgKENVc3RyZWFtKTsKSW5kZXg6IGxp YmdvbXAvcGx1Z2luL2N1ZGEtbGliLmRlZgo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBsaWJnb21wL3BsdWdpbi9jdWRhLWxpYi5kZWYJKHJldmlzaW9u IDI2Njk3MykKKysrIGxpYmdvbXAvcGx1Z2luL2N1ZGEtbGliLmRlZgkod29y a2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBDVURBX09ORV9DQUxMIChj dU1vZHVsZUxvYWQpCiBDVURBX09ORV9DQUxMIChjdU1vZHVsZUxvYWREYXRh KQogQ1VEQV9PTkVfQ0FMTCAoY3VNb2R1bGVVbmxvYWQpCiBDVURBX09ORV9D QUxMX01BWUJFX05VTEwgKGN1T2NjdXBhbmN5TWF4UG90ZW50aWFsQmxvY2tT aXplKQorQ1VEQV9PTkVfQ0FMTCAoY3VTdHJlYW1BZGRDYWxsYmFjaykKIENV REFfT05FX0NBTEwgKGN1U3RyZWFtQ3JlYXRlKQogQ1VEQV9PTkVfQ0FMTCAo Y3VTdHJlYW1EZXN0cm95KQogQ1VEQV9PTkVfQ0FMTCAoY3VTdHJlYW1RdWVy eSkKSW5kZXg6IGxpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0eC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGxpYmdvbXAvcGx1Z2luL3BsdWdpbi1u dnB0eC5jCShyZXZpc2lvbiAyNjY5NzMpCisrKyBsaWJnb21wL3BsdWdpbi9w bHVnaW4tbnZwdHguYwkod29ya2luZyBjb3B5KQpAQCAtMTkyLDIxICsxOTIs MTggQEAgY3VkYV9lcnJvciAoQ1VyZXN1bHQgcikKIHN0YXRpYyB1bnNpZ25l ZCBpbnQgaW5zdGFudGlhdGVkX2RldmljZXMgPSAwOwogc3RhdGljIHB0aHJl YWRfbXV0ZXhfdCBwdHhfZGV2X2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJ QUxJWkVSOwogCi1zdHJ1Y3QgY3VkYV9tYXAKKy8qIE5WUFRYL0NVREEgc3Bl Y2lmaWMgZGVmaW5pdGlvbiBvZiBhc3luY2hyb25vdXMgcXVldWVzLiAgKi8K K3N0cnVjdCBnb2FjY19hc3luY3F1ZXVlCiB7Ci0gIENVZGV2aWNlcHRyIGQ7 Ci0gIHNpemVfdCBzaXplOwotICBib29sIGFjdGl2ZTsKLSAgc3RydWN0IGN1 ZGFfbWFwICpuZXh0OworICBDVXN0cmVhbSBjdWRhX3N0cmVhbTsKIH07CiAK LXN0cnVjdCBwdHhfc3RyZWFtCitzdHJ1Y3QgbnZwdHhfY2FsbGJhY2sKIHsK LSAgQ1VzdHJlYW0gc3RyZWFtOwotICBwdGhyZWFkX3QgaG9zdF90aHJlYWQ7 Ci0gIGJvb2wgbXVsdGl0aHJlYWRlZDsKLSAgc3RydWN0IGN1ZGFfbWFwICpt YXA7Ci0gIHN0cnVjdCBwdHhfc3RyZWFtICpuZXh0OworICB2b2lkICgqZm4p ICh2b2lkICopOworICB2b2lkICpwdHI7CisgIHN0cnVjdCBnb2FjY19hc3lu Y3F1ZXVlICphcTsKKyAgc3RydWN0IG52cHR4X2NhbGxiYWNrICpuZXh0Owog fTsKIAogLyogVGhyZWFkLXNwZWNpZmljIGRhdGEgZm9yIFBUWC4gICovCkBA IC0yMTMsMTIwICsyMTAsMTMgQEAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBw dHhfZGV2X2xvY2sgPSBQVEhSRUFEX01VVEUKIAogc3RydWN0IG52cHR4X3Ro cmVhZAogewotICBzdHJ1Y3QgcHR4X3N0cmVhbSAqY3VycmVudF9zdHJlYW07 CisgIC8qIFdlIGN1cnJlbnRseSBoYXZlIHRoaXMgZW1iZWRkZWQgaW5zaWRl IHRoZSBwbHVnaW4gYmVjYXVzZSBsaWJnb21wIG1hbmFnZXMKKyAgICAgZGV2 aWNlcyB0aHJvdWdoIGludGVnZXIgdGFyZ2V0X2lkcy4gIFRoaXMgbWlnaHQg YmUgYmV0dGVyIGlmIHVzaW5nIGFuCisgICAgIG9wYXF1ZSB0YXJnZXQtc3Bl Y2lmaWMgcG9pbnRlciBkaXJlY3RseSBmcm9tIGdvbXBfZGV2aWNlX2Rlc2Ny LiAgKi8KICAgc3RydWN0IHB0eF9kZXZpY2UgKnB0eF9kZXY7CiB9OwogCi1z dGF0aWMgc3RydWN0IGN1ZGFfbWFwICoKLWN1ZGFfbWFwX2NyZWF0ZSAoc2l6 ZV90IHNpemUpCi17Ci0gIHN0cnVjdCBjdWRhX21hcCAqbWFwID0gR09NUF9Q TFVHSU5fbWFsbG9jIChzaXplb2YgKHN0cnVjdCBjdWRhX21hcCkpOwogCi0g IGFzc2VydCAobWFwKTsKLQotICBtYXAtPm5leHQgPSBOVUxMOwotICBtYXAt PnNpemUgPSBzaXplOwotICBtYXAtPmFjdGl2ZSA9IGZhbHNlOwotCi0gIENV REFfQ0FMTF9FUkVUIChOVUxMLCBjdU1lbUFsbG9jLCAmbWFwLT5kLCBzaXpl KTsKLSAgYXNzZXJ0IChtYXAtPmQpOwotCi0gIHJldHVybiBtYXA7Ci19Ci0K LXN0YXRpYyB2b2lkCi1jdWRhX21hcF9kZXN0cm95IChzdHJ1Y3QgY3VkYV9t YXAgKm1hcCkKLXsKLSAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VNZW1GcmVlLCBt YXAtPmQpOwotICBmcmVlIChtYXApOwotfQotCi0vKiBUaGUgZm9sbG93aW5n IG1hcF8qIHJvdXRpbmVzIG1hbmFnZSB0aGUgQ1VEQSBkZXZpY2UgbWVtb3J5 IHRoYXQKLSAgIGNvbnRhaW5zIHRoZSBkYXRhIG1hcHBpbmcgYXJndW1lbnRz IGZvciBjdUxhdW5jaEtlcm5lbC4gIEVhY2gKLSAgIGFzeW5jaHJvbm91cyBQ VFggc3RyZWFtIG1heSBoYXZlIG11bHRpcGxlIHBlbmRpbmcga2VybmVsCi0g ICBpbnZvY2F0aW9ucywgd2hpY2ggYXJlIGxhdW5jaGVkIGluIGEgRklGTyBv cmRlci4gIEFzIHN1Y2gsIHRoZSBtYXAKLSAgIHJvdXRpbmVzIG1haW50YWlu cyBhIHF1ZXVlIG9mIGN1TGF1bmNoS2VybmVsIGFyZ3VtZW50cy4KLQotICAg Q2FsbHMgdG8gbWFwX3B1c2ggYW5kIG1hcF9wb3AgbXVzdCBiZSBndWFyZGVk IGJ5IHB0eF9ldmVudF9sb2NrLgotICAgTGlrZXdpc2UsIGNhbGxzIHRvIG1h cF9pbml0IGFuZCBtYXBfZmluaSBhcmUgZ3VhcmRlZCBieQotICAgcHR4X2Rl dl9sb2NrIGluc2lkZSBHT01QX09GRkxPQURfaW5pdF9kZXZpY2UgYW5kCi0g ICBHT01QX09GRkxPQURfZmluaV9kZXZpY2UsIHJlc3BlY3RpdmVseS4gICov Ci0KLXN0YXRpYyBib29sCi1tYXBfaW5pdCAoc3RydWN0IHB0eF9zdHJlYW0g KnMpCi17Ci0gIGludCBzaXplID0gZ2V0cGFnZXNpemUgKCk7Ci0KLSAgYXNz ZXJ0IChzKTsKLQotICBzLT5tYXAgPSBjdWRhX21hcF9jcmVhdGUgKHNpemUp OwotCi0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbAotbWFwX2Zp bmkgKHN0cnVjdCBwdHhfc3RyZWFtICpzKQotewotICBhc3NlcnQgKHMtPm1h cC0+bmV4dCA9PSBOVUxMKTsKLSAgYXNzZXJ0ICghcy0+bWFwLT5hY3RpdmUp OwotCi0gIGN1ZGFfbWFwX2Rlc3Ryb3kgKHMtPm1hcCk7Ci0KLSAgcmV0dXJu IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tYXBfcG9wIChzdHJ1Y3QgcHR4 X3N0cmVhbSAqcykKLXsKLSAgc3RydWN0IGN1ZGFfbWFwICpuZXh0OwotCi0g IGFzc2VydCAocyAhPSBOVUxMKTsKLQotICBpZiAocy0+bWFwLT5uZXh0ID09 IE5VTEwpCi0gICAgewotICAgICAgcy0+bWFwLT5hY3RpdmUgPSBmYWxzZTsK LSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgbmV4dCA9IHMtPm1hcC0+bmV4 dDsKLSAgY3VkYV9tYXBfZGVzdHJveSAocy0+bWFwKTsKLSAgcy0+bWFwID0g bmV4dDsKLX0KLQotc3RhdGljIENVZGV2aWNlcHRyCi1tYXBfcHVzaCAoc3Ry dWN0IHB0eF9zdHJlYW0gKnMsIHNpemVfdCBzaXplKQotewotICBzdHJ1Y3Qg Y3VkYV9tYXAgKm1hcCA9IE5VTEwsICp0ID0gTlVMTDsKLQotICBhc3NlcnQg KHMpOwotICBhc3NlcnQgKHMtPm1hcCk7Ci0KLSAgLyogRWFjaCBQVFggc3Ry ZWFtIHJlcXVpcmVzIGEgc2VwYXJhdGUgZGF0YSByZWdpb24gdG8gc3RvcmUg dGhlCi0gICAgIGxhdW5jaCBhcmd1bWVudHMgZm9yIGN1TGF1bmNoS2VybmVs LiAgQWxsb2NhdGUgYSBuZXcKLSAgICAgY3VkYV9tYXAgYW5kIHB1c2ggaXQg dG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gICovCi0gIGlmIChzLT5tYXAtPmFj dGl2ZSkKLSAgICB7Ci0gICAgICBtYXAgPSBjdWRhX21hcF9jcmVhdGUgKHNp emUpOwotCi0gICAgICBmb3IgKHQgPSBzLT5tYXA7IHQtPm5leHQgIT0gTlVM TDsgdCA9IHQtPm5leHQpCi0JOwotCi0gICAgICB0LT5uZXh0ID0gbWFwOwot ICAgIH0KLSAgZWxzZSBpZiAocy0+bWFwLT5zaXplIDwgc2l6ZSkKLSAgICB7 Ci0gICAgICBjdWRhX21hcF9kZXN0cm95IChzLT5tYXApOwotICAgICAgbWFw ID0gY3VkYV9tYXBfY3JlYXRlIChzaXplKTsKLSAgICB9Ci0gIGVsc2UKLSAg ICBtYXAgPSBzLT5tYXA7Ci0KLSAgcy0+bWFwID0gbWFwOwotICBzLT5tYXAt PmFjdGl2ZSA9IHRydWU7Ci0KLSAgcmV0dXJuIHMtPm1hcC0+ZDsKLX0KLQog LyogVGFyZ2V0IGRhdGEgZnVuY3Rpb24gbGF1bmNoIGluZm9ybWF0aW9uLiAg Ki8KIAogc3RydWN0IHRhcmdfZm5fbGF1bmNoCkBAIC0zNzgsMjIgKzI2OCwx OCBAQCBzdHJ1Y3QgcHR4X2ltYWdlX2RhdGEKICAgc3RydWN0IHB0eF9pbWFn ZV9kYXRhICpuZXh0OwogfTsKIAorc3RydWN0IHB0eF9mcmVlX2Jsb2NrCit7 CisgIHZvaWQgKnB0cjsKKyAgc3RydWN0IHB0eF9mcmVlX2Jsb2NrICpuZXh0 OworfTsKKwogc3RydWN0IHB0eF9kZXZpY2UKIHsKICAgQ1Vjb250ZXh0IGN0 eDsKICAgYm9vbCBjdHhfc2hhcmVkOwogICBDVWRldmljZSBkZXY7Ci0gIHN0 cnVjdCBwdHhfc3RyZWFtICpudWxsX3N0cmVhbTsKLSAgLyogQWxsIG5vbi1u dWxsIHN0cmVhbXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlIChhY3R1 YWxseSBjb250ZXh0KSwKLSAgICAgZWl0aGVyIGNyZWF0ZWQgaW1wbGljaXRs eSBvciBwYXNzZWQgaW4gZnJvbSB0aGUgdXNlciAodmlhCi0gICAgIGFjY19z ZXRfY3VkYV9zdHJlYW0pLiAgKi8KLSAgc3RydWN0IHB0eF9zdHJlYW0gKmFj dGl2ZV9zdHJlYW1zOwotICBzdHJ1Y3QgewotICAgIHN0cnVjdCBwdHhfc3Ry ZWFtICoqYXJyOwotICAgIGludCBzaXplOwotICB9IGFzeW5jX3N0cmVhbXM7 Ci0gIC8qIEEgbG9jayBmb3IgdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBh Ym92ZSBzdHJlYW0gbGlzdCBhbmQgYXJyYXkuICAqLwotICBwdGhyZWFkX211 dGV4X3Qgc3RyZWFtX2xvY2s7CisKICAgaW50IG9yZDsKICAgYm9vbCBvdmVy bGFwOwogICBib29sIG1hcDsKQEAgLTQxMSwzMiArMjk3LDEzIEBAIHN0cnVj dCBwdHhfZGV2aWNlCiAKICAgc3RydWN0IHB0eF9pbWFnZV9kYXRhICppbWFn ZXM7ICAvKiBJbWFnZXMgbG9hZGVkIG9uIGRldmljZS4gICovCiAgIHB0aHJl YWRfbXV0ZXhfdCBpbWFnZV9sb2NrOyAgICAgLyogTG9jayBmb3IgYWJvdmUg bGlzdC4gICovCi0gIAotICBzdHJ1Y3QgcHR4X2RldmljZSAqbmV4dDsKLX07 CiAKLWVudW0gcHR4X2V2ZW50X3R5cGUKLXsKLSAgUFRYX0VWVF9NRU0sCi0g IFBUWF9FVlRfS05MLAotICBQVFhfRVZUX1NZTkMsCi0gIFBUWF9FVlRfQVNZ TkNfQ0xFQU5VUAotfTsKKyAgc3RydWN0IHB0eF9mcmVlX2Jsb2NrICpmcmVl X2Jsb2NrczsKKyAgcHRocmVhZF9tdXRleF90IGZyZWVfYmxvY2tzX2xvY2s7 CiAKLXN0cnVjdCBwdHhfZXZlbnQKLXsKLSAgQ1VldmVudCAqZXZ0OwotICBp bnQgdHlwZTsKLSAgdm9pZCAqYWRkcjsKLSAgaW50IG9yZDsKLSAgaW50IHZh bDsKLQotICBzdHJ1Y3QgcHR4X2V2ZW50ICpuZXh0OworICBzdHJ1Y3QgcHR4 X2RldmljZSAqbmV4dDsKIH07CiAKLXN0YXRpYyBwdGhyZWFkX211dGV4X3Qg cHR4X2V2ZW50X2xvY2s7Ci1zdGF0aWMgc3RydWN0IHB0eF9ldmVudCAqcHR4 X2V2ZW50czsKLQogc3RhdGljIHN0cnVjdCBwdHhfZGV2aWNlICoqcHR4X2Rl dmljZXM7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG52cHR4X3RocmVhZCAq CkBAIC00NDUsMTkzICszMTIsNiBAQCBudnB0eF90aHJlYWQgKHZvaWQpCiAg IHJldHVybiAoc3RydWN0IG52cHR4X3RocmVhZCAqKSBHT01QX1BMVUdJTl9h Y2NfdGhyZWFkICgpOwogfQogCi1zdGF0aWMgYm9vbAotaW5pdF9zdHJlYW1z X2Zvcl9kZXZpY2UgKHN0cnVjdCBwdHhfZGV2aWNlICpwdHhfZGV2LCBpbnQg Y29uY3VycmVuY3kpCi17Ci0gIGludCBpOwotICBzdHJ1Y3QgcHR4X3N0cmVh bSAqbnVsbF9zdHJlYW0KLSAgICA9IEdPTVBfUExVR0lOX21hbGxvYyAoc2l6 ZW9mIChzdHJ1Y3QgcHR4X3N0cmVhbSkpOwotCi0gIG51bGxfc3RyZWFtLT5z dHJlYW0gPSBOVUxMOwotICBudWxsX3N0cmVhbS0+aG9zdF90aHJlYWQgPSBw dGhyZWFkX3NlbGYgKCk7Ci0gIG51bGxfc3RyZWFtLT5tdWx0aXRocmVhZGVk ID0gdHJ1ZTsKLSAgaWYgKCFtYXBfaW5pdCAobnVsbF9zdHJlYW0pKQotICAg IHJldHVybiBmYWxzZTsKLQotICBwdHhfZGV2LT5udWxsX3N0cmVhbSA9IG51 bGxfc3RyZWFtOwotICBwdHhfZGV2LT5hY3RpdmVfc3RyZWFtcyA9IE5VTEw7 Ci0gIHB0aHJlYWRfbXV0ZXhfaW5pdCAoJnB0eF9kZXYtPnN0cmVhbV9sb2Nr LCBOVUxMKTsKLQotICBpZiAoY29uY3VycmVuY3kgPCAxKQotICAgIGNvbmN1 cnJlbmN5ID0gMTsKLQotICAvKiBUaGlzIGlzIGp1c3QgYSBndWVzcyAtLSBt YWtlIHNwYWNlIGZvciBhcyBtYW55IGFzeW5jIHN0cmVhbXMgYXMgdGhlCi0g ICAgIGN1cnJlbnQgZGV2aWNlIGlzIGNhcGFibGUgb2YgY29uY3VycmVudGx5 IGV4ZWN1dGluZy4gIFRoaXMgY2FuIGdyb3cKLSAgICAgbGF0ZXIgYXMgbmVj ZXNzYXJ5LiAgTm8gc3RyZWFtcyBhcmUgY3JlYXRlZCB5ZXQuICAqLwotICBw dHhfZGV2LT5hc3luY19zdHJlYW1zLmFycgotICAgID0gR09NUF9QTFVHSU5f bWFsbG9jIChjb25jdXJyZW5jeSAqIHNpemVvZiAoc3RydWN0IHB0eF9zdHJl YW0gKikpOwotICBwdHhfZGV2LT5hc3luY19zdHJlYW1zLnNpemUgPSBjb25j dXJyZW5jeTsKLQotICBmb3IgKGkgPSAwOyBpIDwgY29uY3VycmVuY3k7IGkr KykKLSAgICBwdHhfZGV2LT5hc3luY19zdHJlYW1zLmFycltpXSA9IE5VTEw7 Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sCi1maW5pX3N0 cmVhbXNfZm9yX2RldmljZSAoc3RydWN0IHB0eF9kZXZpY2UgKnB0eF9kZXYp Ci17Ci0gIGZyZWUgKHB0eF9kZXYtPmFzeW5jX3N0cmVhbXMuYXJyKTsKLQot ICBib29sIHJldCA9IHRydWU7Ci0gIHdoaWxlIChwdHhfZGV2LT5hY3RpdmVf c3RyZWFtcyAhPSBOVUxMKQotICAgIHsKLSAgICAgIHN0cnVjdCBwdHhfc3Ry ZWFtICpzID0gcHR4X2Rldi0+YWN0aXZlX3N0cmVhbXM7Ci0gICAgICBwdHhf ZGV2LT5hY3RpdmVfc3RyZWFtcyA9IHB0eF9kZXYtPmFjdGl2ZV9zdHJlYW1z LT5uZXh0OwotCi0gICAgICByZXQgJj0gbWFwX2ZpbmkgKHMpOwotCi0gICAg ICBDVXJlc3VsdCByID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1U3RyZWFtRGVz dHJveSwgcy0+c3RyZWFtKTsKLSAgICAgIGlmIChyICE9IENVREFfU1VDQ0VT UykKLQl7Ci0JICBHT01QX1BMVUdJTl9lcnJvciAoImN1U3RyZWFtRGVzdHJv eSBlcnJvcjogJXMiLCBjdWRhX2Vycm9yIChyKSk7Ci0JICByZXQgPSBmYWxz ZTsKLQl9Ci0gICAgICBmcmVlIChzKTsKLSAgICB9Ci0KLSAgcmV0ICY9IG1h cF9maW5pIChwdHhfZGV2LT5udWxsX3N0cmVhbSk7Ci0gIGZyZWUgKHB0eF9k ZXYtPm51bGxfc3RyZWFtKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyogU2Vs ZWN0IGEgc3RyZWFtIGZvciAoT3BlbkFDQy1zZW1hbnRpY3MpIEFTWU5DIGFy Z3VtZW50IGZvciB0aGUgY3VycmVudAotICAgdGhyZWFkIFRIUkVBRCAoYW5k IGFsc28gY3VycmVudCBkZXZpY2UvY29udGV4dCkuICBJZiBDUkVBVEUgaXMg dHJ1ZSwgY3JlYXRlCi0gICB0aGUgc3RyZWFtIGlmIGl0IGRvZXMgbm90IGV4 aXN0IChvciB1c2UgRVhJU1RJTkcgaWYgaXQgaXMgbm9uLU5VTEwpLCBhbmQK LSAgIGFzc29jaWF0ZSB0aGUgc3RyZWFtIHdpdGggdGhlIHNhbWUgdGhyZWFk IGFyZ3VtZW50LiAgUmV0dXJucyBzdHJlYW0gdG8gdXNlCi0gICBhcyByZXN1 bHQuICAqLwotCi1zdGF0aWMgc3RydWN0IHB0eF9zdHJlYW0gKgotc2VsZWN0 X3N0cmVhbV9mb3JfYXN5bmMgKGludCBhc3luYywgcHRocmVhZF90IHRocmVh ZCwgYm9vbCBjcmVhdGUsCi0JCQkgQ1VzdHJlYW0gZXhpc3RpbmcpCi17Ci0g IHN0cnVjdCBudnB0eF90aHJlYWQgKm52dGhkID0gbnZwdHhfdGhyZWFkICgp OwotICAvKiBMb2NhbCBjb3B5IG9mIFRMUyB2YXJpYWJsZS4gICovCi0gIHN0 cnVjdCBwdHhfZGV2aWNlICpwdHhfZGV2ID0gbnZ0aGQtPnB0eF9kZXY7Ci0g IHN0cnVjdCBwdHhfc3RyZWFtICpzdHJlYW0gPSBOVUxMOwotICBpbnQgb3Jp Z19hc3luYyA9IGFzeW5jOwotCi0gIC8qIFRoZSBzcGVjaWFsIHZhbHVlIGFj Y19hc3luY19ub3ZhbCAoLTEpIG1hcHMgKGZvciBub3cpIHRvIGFuCi0gICAg IGltcGxpY2l0bHktY3JlYXRlZCBzdHJlYW0sIHdoaWNoIGlzIHRoZW4gaGFu ZGxlZCB0aGUgc2FtZSBhcyBhbnkgb3RoZXIKLSAgICAgbnVtYmVyZWQgYXN5 bmMgc3RyZWFtLiAgT3RoZXIgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBlLmcu IHVzaW5nIHRoZSBudWxsCi0gICAgIHN0cmVhbSBmb3IgYW5vbnltb3VzIGFz eW5jIG9wZXJhdGlvbnMsIG9yIGNob29zaW5nIGFuIGlkbGUgc3RyZWFtIGZy b20gYW4KLSAgICAgYWN0aXZlIHNldC4gIEJ1dCwgc3RpY2sgd2l0aCB0aGlz IGZvciBub3cuICAqLwotICBpZiAoYXN5bmMgPiBhY2NfYXN5bmNfc3luYykK LSAgICBhc3luYysrOwotCi0gIGlmIChjcmVhdGUpCi0gICAgcHRocmVhZF9t dXRleF9sb2NrICgmcHR4X2Rldi0+c3RyZWFtX2xvY2spOwotCi0gIC8qIE5P VEU6IEFGQUlDVCB0aGVyZSdzIG5vIHBhcnRpY3VsYXIgbmVlZCBmb3IgYWNj X2FzeW5jX3N5bmMgdG8gbWFwIHRvIHRoZQotICAgICBudWxsIHN0cmVhbSwg YW5kIGluIGZhY3QgYmV0dGVyIHBlcmZvcm1hbmNlIG1heSBiZSBvYnRhaW5h YmxlIGlmIGl0IGRvZXNuJ3QKLSAgICAgKGJlY2F1c2UgdGhlIG51bGwgc3Ry ZWFtIGVuZm9yY2VzIG92ZXJseS1zdHJpY3Qgc3luY2hyb25pc2F0aW9uIHdp dGgKLSAgICAgcmVzcGVjdCB0byBvdGhlciBzdHJlYW1zIGZvciBsZWdhY3kg cmVhc29ucywgYW5kIHRoYXQncyBwcm9iYWJseSBub3QKLSAgICAgbmVlZGVk IHdpdGggT3BlbkFDQykuICBNYXliZSBpbnZlc3RpZ2F0ZSBsYXRlci4gICov Ci0gIGlmIChhc3luYyA9PSBhY2NfYXN5bmNfc3luYykKLSAgICBzdHJlYW0g PSBwdHhfZGV2LT5udWxsX3N0cmVhbTsKLSAgZWxzZSBpZiAoYXN5bmMgPj0g MCAmJiBhc3luYyA8IHB0eF9kZXYtPmFzeW5jX3N0cmVhbXMuc2l6ZQotCSAg ICYmIHB0eF9kZXYtPmFzeW5jX3N0cmVhbXMuYXJyW2FzeW5jXSAmJiAhKGNy ZWF0ZSAmJiBleGlzdGluZykpCi0gICAgc3RyZWFtID0gcHR4X2Rldi0+YXN5 bmNfc3RyZWFtcy5hcnJbYXN5bmNdOwotICBlbHNlIGlmIChhc3luYyA+PSAw ICYmIGNyZWF0ZSkKLSAgICB7Ci0gICAgICBpZiAoYXN5bmMgPj0gcHR4X2Rl di0+YXN5bmNfc3RyZWFtcy5zaXplKQotCXsKLQkgIGludCBpLCBuZXdzaXpl ID0gcHR4X2Rldi0+YXN5bmNfc3RyZWFtcy5zaXplICogMjsKLQotCSAgaWYg KGFzeW5jID49IG5ld3NpemUpCi0JICAgIG5ld3NpemUgPSBhc3luYyArIDE7 Ci0KLQkgIHB0eF9kZXYtPmFzeW5jX3N0cmVhbXMuYXJyCi0JICAgID0gR09N UF9QTFVHSU5fcmVhbGxvYyAocHR4X2Rldi0+YXN5bmNfc3RyZWFtcy5hcnIs Ci0JCQkJICAgbmV3c2l6ZSAqIHNpemVvZiAoc3RydWN0IHB0eF9zdHJlYW0g KikpOwotCi0JICBmb3IgKGkgPSBwdHhfZGV2LT5hc3luY19zdHJlYW1zLnNp emU7IGkgPCBuZXdzaXplOyBpKyspCi0JICAgIHB0eF9kZXYtPmFzeW5jX3N0 cmVhbXMuYXJyW2ldID0gTlVMTDsKLQotCSAgcHR4X2Rldi0+YXN5bmNfc3Ry ZWFtcy5zaXplID0gbmV3c2l6ZTsKLQl9Ci0KLSAgICAgIC8qIENyZWF0ZSBh IG5ldyBzdHJlYW0gb24tZGVtYW5kIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJl YWR5LCBvciBpZiB3ZSdyZQotCSBzZXR0aW5nIGEgcGFydGljdWxhciBhc3lu YyB2YWx1ZSB0byBhbiBleGlzdGluZyAoZXh0ZXJuYWxseS1wcm92aWRlZCkK LQkgc3RyZWFtLiAgKi8KLSAgICAgIGlmICghcHR4X2Rldi0+YXN5bmNfc3Ry ZWFtcy5hcnJbYXN5bmNdIHx8IGV4aXN0aW5nKQotICAgICAgICB7Ci0JICBD VXJlc3VsdCByOwotCSAgc3RydWN0IHB0eF9zdHJlYW0gKnMKLQkgICAgPSBH T01QX1BMVUdJTl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IHB0eF9zdHJlYW0p KTsKLQotCSAgaWYgKGV4aXN0aW5nKQotCSAgICBzLT5zdHJlYW0gPSBleGlz dGluZzsKLQkgIGVsc2UKLQkgICAgewotCSAgICAgIHIgPSBDVURBX0NBTExf Tk9DSEVDSyAoY3VTdHJlYW1DcmVhdGUsICZzLT5zdHJlYW0sCi0JCQkJICAg ICBDVV9TVFJFQU1fREVGQVVMVCk7Ci0JICAgICAgaWYgKHIgIT0gQ1VEQV9T VUNDRVNTKQotCQl7Ci0JCSAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZwdHhf ZGV2LT5zdHJlYW1fbG9jayk7Ci0JCSAgR09NUF9QTFVHSU5fZmF0YWwgKCJj dVN0cmVhbUNyZWF0ZSBlcnJvcjogJXMiLAotCQkJCSAgICAgY3VkYV9lcnJv ciAocikpOwotCQl9Ci0JICAgIH0KLQotCSAgLyogSWYgQ1JFQVRFIGlzIHRy dWUsIHdlJ3JlIGdvaW5nIHRvIGJlIHF1ZXVlaW5nIHNvbWUgd29yayBvbiB0 aGlzCi0JICAgICBzdHJlYW0uICBBc3NvY2lhdGUgaXQgd2l0aCB0aGUgY3Vy cmVudCBob3N0IHRocmVhZC4gICovCi0JICBzLT5ob3N0X3RocmVhZCA9IHRo cmVhZDsKLQkgIHMtPm11bHRpdGhyZWFkZWQgPSBmYWxzZTsKLQotCSAgaWYg KCFtYXBfaW5pdCAocykpCi0JICAgIHsKLQkgICAgICBwdGhyZWFkX211dGV4 X3VubG9jayAoJnB0eF9kZXYtPnN0cmVhbV9sb2NrKTsKLQkgICAgICBHT01Q X1BMVUdJTl9mYXRhbCAoIm1hcF9pbml0IGZhaWwiKTsKLQkgICAgfQotCi0J ICBzLT5uZXh0ID0gcHR4X2Rldi0+YWN0aXZlX3N0cmVhbXM7Ci0JICBwdHhf ZGV2LT5hY3RpdmVfc3RyZWFtcyA9IHM7Ci0JICBwdHhfZGV2LT5hc3luY19z dHJlYW1zLmFyclthc3luY10gPSBzOwotCX0KLQotICAgICAgc3RyZWFtID0g cHR4X2Rldi0+YXN5bmNfc3RyZWFtcy5hcnJbYXN5bmNdOwotICAgIH0KLSAg ZWxzZSBpZiAoYXN5bmMgPCAwKQotICAgIHsKLSAgICAgIGlmIChjcmVhdGUp Ci0JcHRocmVhZF9tdXRleF91bmxvY2sgKCZwdHhfZGV2LT5zdHJlYW1fbG9j ayk7Ci0gICAgICBHT01QX1BMVUdJTl9mYXRhbCAoImJhZCBhc3luYyAlZCIs IGFzeW5jKTsKLSAgICB9Ci0KLSAgaWYgKGNyZWF0ZSkKLSAgICB7Ci0gICAg ICBhc3NlcnQgKHN0cmVhbSAhPSBOVUxMKTsKLQotICAgICAgLyogSWYgd2Un cmUgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSBzdHJlYW0gZnJvbSBkaWZmZXJl bnQgdGhyZWFkcwotCSBzaW11bHRhbmVvdXNseSwgc2V0IHN0cmVhbS0+bXVs dGl0aHJlYWRlZCB0byB0cnVlLiAgVGhpcyBhZmZlY3RzIHRoZQotCSBiZWhh dmlvdXIgb2YgYWNjX2FzeW5jX3Rlc3RfYWxsIGFuZCBhY2Nfd2FpdF9hbGws IHdoaWNoIGFyZSBzdXBwb3NlZCB0bwotCSBvbmx5IHdhaXQgZm9yIGFzeW5j aHJvbm91cyBsYXVuY2hlcyBmcm9tIHRoZSBzYW1lIGhvc3QgdGhyZWFkIHRo ZXkgYXJlCi0JIGludm9rZWQgb24uICBJZiBtdWx0aXBsZSB0aHJlYWRzIHVz ZSB0aGUgc2FtZSBhc3luYyB2YWx1ZSwgd2UgbWFrZSBub3RlCi0JIG9mIHRo YXQgaGVyZSBhbmQgZmFsbCBiYWNrIHRvIHRlc3Rpbmcvd2FpdGluZyBmb3Ig YWxsIHRocmVhZHMgaW4gdGhvc2UKLQkgZnVuY3Rpb25zLiAgKi8KLSAgICAg IGlmICh0aHJlYWQgIT0gc3RyZWFtLT5ob3N0X3RocmVhZCkKLSAgICAgICAg c3RyZWFtLT5tdWx0aXRocmVhZGVkID0gdHJ1ZTsKLQotICAgICAgcHRocmVh ZF9tdXRleF91bmxvY2sgKCZwdHhfZGV2LT5zdHJlYW1fbG9jayk7Ci0gICAg fQotICBlbHNlIGlmIChzdHJlYW0gJiYgIXN0cmVhbS0+bXVsdGl0aHJlYWRl ZAotCSAgICYmICFwdGhyZWFkX2VxdWFsIChzdHJlYW0tPmhvc3RfdGhyZWFk LCB0aHJlYWQpKQotICAgIEdPTVBfUExVR0lOX2ZhdGFsICgiYXN5bmMgJWQg dXNlZCBvbiB3cm9uZyB0aHJlYWQiLCBvcmlnX2FzeW5jKTsKLQotICByZXR1 cm4gc3RyZWFtOwotfQotCiAvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UuICBS ZXR1cm4gVFJVRSBvbiBzdWNjZXNzLCBlbHNlIEZBTFNFLiAgUFRYX0RFVl9M T0NLCiAgICBzaG91bGQgYmUgbG9ja2VkIG9uIGVudHJ5IGFuZCByZW1haW5z IGxvY2tlZCBvbiBleGl0LiAgKi8KIApAQCAtNjQzLDkgKzMyMyw2IEBAIG52 cHR4X2luaXQgKHZvaWQpCiAgIGlmIChpbnN0YW50aWF0ZWRfZGV2aWNlcyAh PSAwKQogICAgIHJldHVybiB0cnVlOwogCi0gIHB0eF9ldmVudHMgPSBOVUxM OwotICBwdGhyZWFkX211dGV4X2luaXQgKCZwdHhfZXZlbnRfbG9jaywgTlVM TCk7Ci0KICAgaWYgKCFpbml0X2N1ZGFfbGliICgpKQogICAgIHJldHVybiBm YWxzZTsKIApAQCAtNjY5LDYgKzM0NiwxMSBAQCBudnB0eF9hdHRhY2hfaG9z dF90aHJlYWRfdG9fZGV2aWNlIChpbnQgbikKICAgQ1Vjb250ZXh0IHRoZF9j dHg7CiAKICAgciA9IENVREFfQ0FMTF9OT0NIRUNLIChjdUN0eEdldERldmlj ZSwgJmRldik7CisgIGlmIChyID09IENVREFfRVJST1JfTk9UX1BFUk1JVFRF RCkKKyAgICB7CisgICAgICAvKiBBc3N1bWUgd2UncmUgaW4gYSBDVURBIGNh bGxiYWNrLCBqdXN0IHJldHVybiB0cnVlLiAgKi8KKyAgICAgIHJldHVybiB0 cnVlOworICAgIH0KICAgaWYgKHIgIT0gQ1VEQV9TVUNDRVNTICYmIHIgIT0g Q1VEQV9FUlJPUl9JTlZBTElEX0NPTlRFWFQpCiAgICAgewogICAgICAgR09N UF9QTFVHSU5fZXJyb3IgKCJjdUN0eEdldERldmljZSBlcnJvcjogJXMiLCBj dWRhX2Vycm9yIChyKSk7CkBAIC04MTMsOCArNDk1LDggQEAgbnZwdHhfb3Bl bl9kZXZpY2UgKGludCBuKQogICBwdHhfZGV2LT5pbWFnZXMgPSBOVUxMOwog ICBwdGhyZWFkX211dGV4X2luaXQgKCZwdHhfZGV2LT5pbWFnZV9sb2NrLCBO VUxMKTsKIAotICBpZiAoIWluaXRfc3RyZWFtc19mb3JfZGV2aWNlIChwdHhf ZGV2LCBhc3luY19lbmdpbmVzKSkKLSAgICByZXR1cm4gTlVMTDsKKyAgcHR4 X2Rldi0+ZnJlZV9ibG9ja3MgPSBOVUxMOworICBwdGhyZWFkX211dGV4X2lu aXQgKCZwdHhfZGV2LT5mcmVlX2Jsb2Nrc19sb2NrLCBOVUxMKTsKIAogICBy ZXR1cm4gcHR4X2RldjsKIH0KQEAgLTgyNSw5ICs1MDcsMTUgQEAgbnZwdHhf Y2xvc2VfZGV2aWNlIChzdHJ1Y3QgcHR4X2RldmljZSAqcHR4X2RldikKICAg aWYgKCFwdHhfZGV2KQogICAgIHJldHVybiB0cnVlOwogCi0gIGlmICghZmlu aV9zdHJlYW1zX2Zvcl9kZXZpY2UgKHB0eF9kZXYpKQotICAgIHJldHVybiBm YWxzZTsKLSAgCisgIGZvciAoc3RydWN0IHB0eF9mcmVlX2Jsb2NrICpiID0g cHR4X2Rldi0+ZnJlZV9ibG9ja3M7IGI7KQorICAgIHsKKyAgICAgIHN0cnVj dCBwdHhfZnJlZV9ibG9jayAqYl9uZXh0ID0gYi0+bmV4dDsKKyAgICAgIENV REFfQ0FMTCAoY3VNZW1GcmVlLCAoQ1VkZXZpY2VwdHIpIGItPnB0cik7Cisg ICAgICBmcmVlIChiKTsKKyAgICAgIGIgPSBiX25leHQ7CisgICAgfQorCisg IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoJnB0eF9kZXYtPmZyZWVfYmxvY2tz X2xvY2spOwogICBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKCZwdHhfZGV2LT5p bWFnZV9sb2NrKTsKIAogICBpZiAoIXB0eF9kZXYtPmN0eF9zaGFyZWQpCkBA IC0xMDA3LDEzOSArNjk1LDE5IEBAIGxpbmtfcHR4IChDVW1vZHVsZSAqbW9k dWxlLCBjb25zdCBzdHJ1Y3QgdGFyZ19wdHhfCiB9CiAKIHN0YXRpYyB2b2lk Ci1ldmVudF9nYyAoYm9vbCBtZW1tYXBfbG9ja2FibGUpCi17Ci0gIHN0cnVj dCBwdHhfZXZlbnQgKnB0eF9ldmVudCA9IHB0eF9ldmVudHM7Ci0gIHN0cnVj dCBwdHhfZXZlbnQgKmFzeW5jX2NsZWFudXBzID0gTlVMTDsKLSAgc3RydWN0 IG52cHR4X3RocmVhZCAqbnZ0aGQgPSBudnB0eF90aHJlYWQgKCk7Ci0KLSAg cHRocmVhZF9tdXRleF9sb2NrICgmcHR4X2V2ZW50X2xvY2spOwotCi0gIHdo aWxlIChwdHhfZXZlbnQgIT0gTlVMTCkKLSAgICB7Ci0gICAgICBDVXJlc3Vs dCByOwotICAgICAgc3RydWN0IHB0eF9ldmVudCAqZSA9IHB0eF9ldmVudDsK LQotICAgICAgcHR4X2V2ZW50ID0gcHR4X2V2ZW50LT5uZXh0OwotCi0gICAg ICBpZiAoZS0+b3JkICE9IG52dGhkLT5wdHhfZGV2LT5vcmQpCi0JY29udGlu dWU7Ci0KLSAgICAgIHIgPSBDVURBX0NBTExfTk9DSEVDSyAoY3VFdmVudFF1 ZXJ5LCAqZS0+ZXZ0KTsKLSAgICAgIGlmIChyID09IENVREFfU1VDQ0VTUykK LQl7Ci0JICBib29sIGFwcGVuZF9hc3luYyA9IGZhbHNlOwotCSAgQ1VldmVu dCAqdGU7Ci0KLQkgIHRlID0gZS0+ZXZ0OwotCi0JICBzd2l0Y2ggKGUtPnR5 cGUpCi0JICAgIHsKLQkgICAgY2FzZSBQVFhfRVZUX01FTToKLQkgICAgY2Fz ZSBQVFhfRVZUX1NZTkM6Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgY2FzZSBQ VFhfRVZUX0tOTDoKLQkgICAgICBtYXBfcG9wIChlLT5hZGRyKTsKLQkgICAg ICBicmVhazsKLQotCSAgICBjYXNlIFBUWF9FVlRfQVNZTkNfQ0xFQU5VUDoK LQkgICAgICB7Ci0JCS8qIFRoZSBmdW5jdGlvbiBnb21wX3BsdWdpbl9hc3lu Y191bm1hcF92YXJzIG5lZWRzIHRvIGNsYWltIHRoZQotCQkgICBtZW1vcnkt bWFwIHNwbGF5IHRyZWUgbG9jayBmb3IgdGhlIGN1cnJlbnQgZGV2aWNlLCBz byB3ZQotCQkgICBjYW4ndCBjYWxsIGl0IHdoZW4gb25lIG9mIG91ciBjYWxs ZXJzIGhhcyBhbHJlYWR5IGNsYWltZWQKLQkJICAgdGhlIGxvY2suICBJbiB0 aGF0IGNhc2UsIGp1c3QgZGVsYXkgdGhlIEdDIGZvciB0aGlzIGV2ZW50Ci0J CSAgIHVudGlsIGxhdGVyLiAgKi8KLQkJaWYgKCFtZW1tYXBfbG9ja2FibGUp Ci0JCSAgY29udGludWU7Ci0KLQkJYXBwZW5kX2FzeW5jID0gdHJ1ZTsKLQkg ICAgICB9Ci0JICAgICAgYnJlYWs7Ci0JICAgIH0KLQotCSAgQ1VEQV9DQUxM X05PQ0hFQ0sgKGN1RXZlbnREZXN0cm95LCAqdGUpOwotCSAgZnJlZSAoKHZv aWQgKil0ZSk7Ci0KLQkgIC8qIFVubGluayAnZScgZnJvbSBwdHhfZXZlbnRz IGxpc3QuICAqLwotCSAgaWYgKHB0eF9ldmVudHMgPT0gZSkKLQkgICAgcHR4 X2V2ZW50cyA9IHB0eF9ldmVudHMtPm5leHQ7Ci0JICBlbHNlCi0JICAgIHsK LQkgICAgICBzdHJ1Y3QgcHR4X2V2ZW50ICplXyA9IHB0eF9ldmVudHM7Ci0J ICAgICAgd2hpbGUgKGVfLT5uZXh0ICE9IGUpCi0JCWVfID0gZV8tPm5leHQ7 Ci0JICAgICAgZV8tPm5leHQgPSBlXy0+bmV4dC0+bmV4dDsKLQkgICAgfQot Ci0JICBpZiAoYXBwZW5kX2FzeW5jKQotCSAgICB7Ci0JICAgICAgZS0+bmV4 dCA9IGFzeW5jX2NsZWFudXBzOwotCSAgICAgIGFzeW5jX2NsZWFudXBzID0g ZTsKLQkgICAgfQotCSAgZWxzZQotCSAgICBmcmVlIChlKTsKLQl9Ci0gICAg fQotCi0gIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmcHR4X2V2ZW50X2xvY2sp OwotCi0gIC8qIFdlIGhhdmUgdG8gZG8gdGhlc2UgaGVyZSwgYWZ0ZXIgcHR4 X2V2ZW50X2xvY2sgaXMgcmVsZWFzZWQuICAqLwotICB3aGlsZSAoYXN5bmNf Y2xlYW51cHMpCi0gICAgewotICAgICAgc3RydWN0IHB0eF9ldmVudCAqZSA9 IGFzeW5jX2NsZWFudXBzOwotICAgICAgYXN5bmNfY2xlYW51cHMgPSBhc3lu Y19jbGVhbnVwcy0+bmV4dDsKLQotICAgICAgR09NUF9QTFVHSU5fYXN5bmNf dW5tYXBfdmFycyAoZS0+YWRkciwgZS0+dmFsKTsKLSAgICAgIGZyZWUgKGUp OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLWV2ZW50X2FkZCAoZW51bSBw dHhfZXZlbnRfdHlwZSB0eXBlLCBDVWV2ZW50ICplLCB2b2lkICpoLCBpbnQg dmFsKQotewotICBzdHJ1Y3QgcHR4X2V2ZW50ICpwdHhfZXZlbnQ7Ci0gIHN0 cnVjdCBudnB0eF90aHJlYWQgKm52dGhkID0gbnZwdHhfdGhyZWFkICgpOwot Ci0gIGFzc2VydCAodHlwZSA9PSBQVFhfRVZUX01FTSB8fCB0eXBlID09IFBU WF9FVlRfS05MIHx8IHR5cGUgPT0gUFRYX0VWVF9TWU5DCi0JICB8fCB0eXBl ID09IFBUWF9FVlRfQVNZTkNfQ0xFQU5VUCk7Ci0KLSAgcHR4X2V2ZW50ID0g R09NUF9QTFVHSU5fbWFsbG9jIChzaXplb2YgKHN0cnVjdCBwdHhfZXZlbnQp KTsKLSAgcHR4X2V2ZW50LT50eXBlID0gdHlwZTsKLSAgcHR4X2V2ZW50LT5l dnQgPSBlOwotICBwdHhfZXZlbnQtPmFkZHIgPSBoOwotICBwdHhfZXZlbnQt Pm9yZCA9IG52dGhkLT5wdHhfZGV2LT5vcmQ7Ci0gIHB0eF9ldmVudC0+dmFs ID0gdmFsOwotCi0gIHB0aHJlYWRfbXV0ZXhfbG9jayAoJnB0eF9ldmVudF9s b2NrKTsKLQotICBwdHhfZXZlbnQtPm5leHQgPSBwdHhfZXZlbnRzOwotICBw dHhfZXZlbnRzID0gcHR4X2V2ZW50OwotCi0gIHB0aHJlYWRfbXV0ZXhfdW5s b2NrICgmcHR4X2V2ZW50X2xvY2spOwotfQotCi1zdGF0aWMgdm9pZAogbnZw dHhfZXhlYyAodm9pZCAoKmZuKSwgc2l6ZV90IG1hcG51bSwgdm9pZCAqKmhv c3RhZGRycywgdm9pZCAqKmRldmFkZHJzLAotCSAgICBpbnQgYXN5bmMsIHVu c2lnbmVkICpkaW1zLCB2b2lkICp0YXJnX21lbV9kZXNjKQorCSAgICB1bnNp Z25lZCAqZGltcywgdm9pZCAqdGFyZ19tZW1fZGVzYywKKwkgICAgQ1VkZXZp Y2VwdHIgZHAsIENVc3RyZWFtIHN0cmVhbSkKIHsKICAgc3RydWN0IHRhcmdf Zm5fZGVzY3JpcHRvciAqdGFyZ19mbiA9IChzdHJ1Y3QgdGFyZ19mbl9kZXNj cmlwdG9yICopIGZuOwogICBDVWZ1bmN0aW9uIGZ1bmN0aW9uOwotICBDVXJl c3VsdCByOwogICBpbnQgaTsKLSAgc3RydWN0IHB0eF9zdHJlYW0gKmRldl9z dHI7CiAgIHZvaWQgKmthcmdzWzFdOwotICB2b2lkICpocDsKLSAgQ1VkZXZp Y2VwdHIgZHA7CiAgIHN0cnVjdCBudnB0eF90aHJlYWQgKm52dGhkID0gbnZw dHhfdGhyZWFkICgpOwogICBpbnQgd2FycF9zaXplID0gbnZ0aGQtPnB0eF9k ZXYtPndhcnBfc2l6ZTsKLSAgY29uc3QgY2hhciAqbWF5YmVfYWJvcnRfbXNn ID0gIihwZXJoYXBzIGFib3J0IHdhcyBjYWxsZWQpIjsKIAogICBmdW5jdGlv biA9IHRhcmdfZm4tPmZuOwogCi0gIGRldl9zdHIgPSBzZWxlY3Rfc3RyZWFt X2Zvcl9hc3luYyAoYXN5bmMsIHB0aHJlYWRfc2VsZiAoKSwgZmFsc2UsIE5V TEwpOwotICBhc3NlcnQgKGRldl9zdHIgPT0gbnZ0aGQtPmN1cnJlbnRfc3Ry ZWFtKTsKLQogICAvKiBJbml0aWFsaXplIHRoZSBsYXVuY2ggZGltZW5zaW9u cy4gIFR5cGljYWxseSB0aGlzIGlzIGNvbnN0YW50LAogICAgICBwcm92aWRl ZCBieSB0aGUgZGV2aWNlIGNvbXBpbGVyLCBidXQgd2UgbXVzdCBwZXJtaXQg cnVudGltZQogICAgICB2YWx1ZXMuICAqLwpAQCAtMTMwMiwyMyArODcwLDYg QEAgbnZwdHhfZXhlYyAodm9pZCAoKmZuKSwgc2l6ZV90IG1hcG51bSwgdm9p ZCAqKmhvc3QKIAkJCSBzdWdnZXN0X3dvcmtlcnMsIHN1Z2dlc3Rfd29ya2Vy cyk7CiAgICAgfQogCi0gIC8qIFRoaXMgcmVzZXJ2ZXMgYSBjaHVuayBvZiBh IHByZS1hbGxvY2F0ZWQgcGFnZSBvZiBtZW1vcnkgbWFwcGVkIG9uIGJvdGgK LSAgICAgdGhlIGhvc3QgYW5kIHRoZSBkZXZpY2UuIEhQIGlzIGEgaG9zdCBw b2ludGVyIHRvIHRoZSBuZXcgY2h1bmssIGFuZCBEUCBpcwotICAgICB0aGUg Y29ycmVzcG9uZGluZyBkZXZpY2UgcG9pbnRlci4gICovCi0gIHB0aHJlYWRf bXV0ZXhfbG9jayAoJnB0eF9ldmVudF9sb2NrKTsKLSAgZHAgPSBtYXBfcHVz aCAoZGV2X3N0ciwgbWFwbnVtICogc2l6ZW9mICh2b2lkICopKTsKLSAgcHRo cmVhZF9tdXRleF91bmxvY2sgKCZwdHhfZXZlbnRfbG9jayk7Ci0KLSAgR09N UF9QTFVHSU5fZGVidWcgKDAsICIgICVzOiBwcmVwYXJlIG1hcHBpbmdzXG4i LCBfX0ZVTkNUSU9OX18pOwotCi0gIC8qIENvcHkgdGhlIGFycmF5IG9mIGFy Z3VtZW50cyB0byB0aGUgbWFwcGVkIHBhZ2UuICAqLwotICBocCA9IGFsbG9j YShzaXplb2Yodm9pZCAqKSAqIG1hcG51bSk7Ci0gIGZvciAoaSA9IDA7IGkg PCBtYXBudW07IGkrKykKLSAgICAoKHZvaWQgKiopIGhwKVtpXSA9IGRldmFk ZHJzW2ldOwotCi0gIC8qIENvcHkgdGhlIChkZXZpY2UpIHBvaW50ZXJzIHRv IGFyZ3VtZW50cyB0byB0aGUgZGV2aWNlICovCi0gIENVREFfQ0FMTF9BU1NF UlQgKGN1TWVtY3B5SHRvRCwgZHAsIGhwLAotCQkgICAgbWFwbnVtICogc2l6 ZW9mICh2b2lkICopKTsKICAgR09NUF9QTFVHSU5fZGVidWcgKDAsICIgICVz OiBrZXJuZWwgJXM6IGxhdW5jaCIKIAkJICAgICAiIGdhbmdzPSV1LCB3b3Jr ZXJzPSV1LCB2ZWN0b3JzPSV1XG4iLAogCQkgICAgIF9fRlVOQ1RJT05fXywg dGFyZ19mbi0+bGF1bmNoLT5mbiwgZGltc1tHT01QX0RJTV9HQU5HXSwKQEAg LTEzMjksNTggKzg4MCwxNCBAQCBudnB0eF9leGVjICh2b2lkICgqZm4pLCBz aXplX3QgbWFwbnVtLCB2b2lkICoqaG9zdAogICAvLyBudW1fZ2FuZ3MJCW5j dGFpZC54CiAgIC8vIG51bV93b3JrZXJzCW50aWQueQogICAvLyB2ZWN0b3Ig bGVuZ3RoCW50aWQueAotCiAgIGthcmdzWzBdID0gJmRwOwogICBDVURBX0NB TExfQVNTRVJUIChjdUxhdW5jaEtlcm5lbCwgZnVuY3Rpb24sCiAJCSAgICBk aW1zW0dPTVBfRElNX0dBTkddLCAxLCAxLAogCQkgICAgZGltc1tHT01QX0RJ TV9WRUNUT1JdLCBkaW1zW0dPTVBfRElNX1dPUktFUl0sIDEsCi0JCSAgICAw LCBkZXZfc3RyLT5zdHJlYW0sIGthcmdzLCAwKTsKKwkJICAgIDAsIHN0cmVh bSwga2FyZ3MsIDApOwogCi0jaWZuZGVmIERJU0FCTEVfQVNZTkMKLSAgaWYg KGFzeW5jIDwgYWNjX2FzeW5jX25vdmFsKQotICAgIHsKLSAgICAgIHIgPSBD VURBX0NBTExfTk9DSEVDSyAoY3VTdHJlYW1TeW5jaHJvbml6ZSwgZGV2X3N0 ci0+c3RyZWFtKTsKLSAgICAgIGlmIChyID09IENVREFfRVJST1JfTEFVTkNI X0ZBSUxFRCkKLQlHT01QX1BMVUdJTl9mYXRhbCAoImN1U3RyZWFtU3luY2hy b25pemUgZXJyb3I6ICVzICVzXG4iLCBjdWRhX2Vycm9yIChyKSwKLQkJCSAg IG1heWJlX2Fib3J0X21zZyk7Ci0gICAgICBlbHNlIGlmIChyICE9IENVREFf U1VDQ0VTUykKLSAgICAgICAgR09NUF9QTFVHSU5fZmF0YWwgKCJjdVN0cmVh bVN5bmNocm9uaXplIGVycm9yOiAlcyIsIGN1ZGFfZXJyb3IgKHIpKTsKLSAg ICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBDVWV2ZW50ICplOwotCi0gICAg ICBlID0gKENVZXZlbnQgKilHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVvZiAo Q1VldmVudCkpOwotCi0gICAgICByID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1 RXZlbnRDcmVhdGUsIGUsIENVX0VWRU5UX0RJU0FCTEVfVElNSU5HKTsKLSAg ICAgIGlmIChyID09IENVREFfRVJST1JfTEFVTkNIX0ZBSUxFRCkKLQlHT01Q X1BMVUdJTl9mYXRhbCAoImN1RXZlbnRDcmVhdGUgZXJyb3I6ICVzICVzXG4i LCBjdWRhX2Vycm9yIChyKSwKLQkJCSAgIG1heWJlX2Fib3J0X21zZyk7Ci0g ICAgICBlbHNlIGlmIChyICE9IENVREFfU1VDQ0VTUykKLSAgICAgICAgR09N UF9QTFVHSU5fZmF0YWwgKCJjdUV2ZW50Q3JlYXRlIGVycm9yOiAlcyIsIGN1 ZGFfZXJyb3IgKHIpKTsKLQotICAgICAgZXZlbnRfZ2MgKHRydWUpOwotCi0g ICAgICBDVURBX0NBTExfQVNTRVJUIChjdUV2ZW50UmVjb3JkLCAqZSwgZGV2 X3N0ci0+c3RyZWFtKTsKLQotICAgICAgZXZlbnRfYWRkIChQVFhfRVZUX0tO TCwgZSwgKHZvaWQgKilkZXZfc3RyLCAwKTsKLSAgICB9Ci0jZWxzZQotICBy ID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1Q3R4U3luY2hyb25pemUsICk7Ci0g IGlmIChyID09IENVREFfRVJST1JfTEFVTkNIX0ZBSUxFRCkKLSAgICBHT01Q X1BMVUdJTl9mYXRhbCAoImN1Q3R4U3luY2hyb25pemUgZXJyb3I6ICVzICVz XG4iLCBjdWRhX2Vycm9yIChyKSwKLQkJICAgICAgIG1heWJlX2Fib3J0X21z Zyk7Ci0gIGVsc2UgaWYgKHIgIT0gQ1VEQV9TVUNDRVNTKQotICAgIEdPTVBf UExVR0lOX2ZhdGFsICgiY3VDdHhTeW5jaHJvbml6ZSBlcnJvcjogJXMiLCBj dWRhX2Vycm9yIChyKSk7Ci0jZW5kaWYKLQogICBHT01QX1BMVUdJTl9kZWJ1 ZyAoMCwgIiAgJXM6IGtlcm5lbCAlczogZmluaXNoZWRcbiIsIF9fRlVOQ1RJ T05fXywKIAkJICAgICB0YXJnX2ZuLT5sYXVuY2gtPmZuKTsKLQotI2lmbmRl ZiBESVNBQkxFX0FTWU5DCi0gIGlmIChhc3luYyA8IGFjY19hc3luY19ub3Zh bCkKLSNlbmRpZgotICAgIG1hcF9wb3AgKGRldl9zdHIpOwogfQogCiB2b2lk ICogb3BlbmFjY19nZXRfY3VycmVudF9jdWRhX2NvbnRleHQgKHZvaWQpOwpA QCAtMTM5NSw4ICs5MDIsMjEgQEAgbnZwdHhfYWxsb2MgKHNpemVfdCBzKQog fQogCiBzdGF0aWMgYm9vbAotbnZwdHhfZnJlZSAodm9pZCAqcCkKK252cHR4 X2ZyZWUgKHZvaWQgKnAsIHN0cnVjdCBwdHhfZGV2aWNlICpwdHhfZGV2KQog eworICAvKiBBc3N1bWUgY2FsbGJhY2sgY29udGV4dCBpZiB0aGlzIGlzIG51 bGwuICAqLworICBpZiAoR09NUF9QTFVHSU5fYWNjX3RocmVhZCAoKSA9PSBO VUxMKQorICAgIHsKKyAgICAgIHN0cnVjdCBwdHhfZnJlZV9ibG9jayAqbgor CT0gR09NUF9QTFVHSU5fbWFsbG9jIChzaXplb2YgKHN0cnVjdCBwdHhfZnJl ZV9ibG9jaykpOworICAgICAgbi0+cHRyID0gcDsKKyAgICAgIHB0aHJlYWRf bXV0ZXhfbG9jayAoJnB0eF9kZXYtPmZyZWVfYmxvY2tzX2xvY2spOworICAg ICAgbi0+bmV4dCA9IHB0eF9kZXYtPmZyZWVfYmxvY2tzOworICAgICAgcHR4 X2Rldi0+ZnJlZV9ibG9ja3MgPSBuOworICAgICAgcHRocmVhZF9tdXRleF91 bmxvY2sgKCZwdHhfZGV2LT5mcmVlX2Jsb2Nrc19sb2NrKTsKKyAgICAgIHJl dHVybiB0cnVlOworICAgIH0KKwogICBDVWRldmljZXB0ciBwYjsKICAgc2l6 ZV90IHBzOwogCkBAIC0xNDExLDMwNSArOTMxLDYgQEAgc3RhdGljIGJvb2wK ICAgcmV0dXJuIHRydWU7CiB9CiAKLQotc3RhdGljIGJvb2wKLW52cHR4X2hv c3QyZGV2ICh2b2lkICpkLCBjb25zdCB2b2lkICpoLCBzaXplX3QgcykKLXsK LSAgQ1VkZXZpY2VwdHIgcGI7Ci0gIHNpemVfdCBwczsKLSAgc3RydWN0IG52 cHR4X3RocmVhZCAqbnZ0aGQgPSBudnB0eF90aHJlYWQgKCk7Ci0KLSAgaWYg KCFzKQotICAgIHJldHVybiB0cnVlOwotICBpZiAoIWQpCi0gICAgewotICAg ICAgR09NUF9QTFVHSU5fZXJyb3IgKCJpbnZhbGlkIGRldmljZSBhZGRyZXNz Iik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gIENVREFfQ0FM TCAoY3VNZW1HZXRBZGRyZXNzUmFuZ2UsICZwYiwgJnBzLCAoQ1VkZXZpY2Vw dHIpIGQpOwotCi0gIGlmICghcGIpCi0gICAgewotICAgICAgR09NUF9QTFVH SU5fZXJyb3IgKCJpbnZhbGlkIGRldmljZSBhZGRyZXNzIik7Ci0gICAgICBy ZXR1cm4gZmFsc2U7Ci0gICAgfQotICBpZiAoIWgpCi0gICAgewotICAgICAg R09NUF9QTFVHSU5fZXJyb3IgKCJpbnZhbGlkIGhvc3QgYWRkcmVzcyIpOwot ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgaWYgKGQgPT0gaCkKLSAg ICB7Ci0gICAgICBHT01QX1BMVUdJTl9lcnJvciAoImludmFsaWQgaG9zdCBv ciBkZXZpY2UgYWRkcmVzcyIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAg IH0KLSAgaWYgKCh2b2lkICopKGQgKyBzKSA+ICh2b2lkICopKHBiICsgcHMp KQotICAgIHsKLSAgICAgIEdPTVBfUExVR0lOX2Vycm9yICgiaW52YWxpZCBz aXplIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0jaWZuZGVm IERJU0FCTEVfQVNZTkMKLSAgaWYgKG52dGhkICYmIG52dGhkLT5jdXJyZW50 X3N0cmVhbSAhPSBudnRoZC0+cHR4X2Rldi0+bnVsbF9zdHJlYW0pCi0gICAg ewotICAgICAgQ1VldmVudCAqZSA9IChDVWV2ZW50ICopR09NUF9QTFVHSU5f bWFsbG9jIChzaXplb2YgKENVZXZlbnQpKTsKLSAgICAgIENVREFfQ0FMTCAo Y3VFdmVudENyZWF0ZSwgZSwgQ1VfRVZFTlRfRElTQUJMRV9USU1JTkcpOwot ICAgICAgZXZlbnRfZ2MgKGZhbHNlKTsKLSAgICAgIENVREFfQ0FMTCAoY3VN ZW1jcHlIdG9EQXN5bmMsCi0JCSAoQ1VkZXZpY2VwdHIpIGQsIGgsIHMsIG52 dGhkLT5jdXJyZW50X3N0cmVhbS0+c3RyZWFtKTsKLSAgICAgIENVREFfQ0FM TCAoY3VFdmVudFJlY29yZCwgKmUsIG52dGhkLT5jdXJyZW50X3N0cmVhbS0+ c3RyZWFtKTsKLSAgICAgIGV2ZW50X2FkZCAoUFRYX0VWVF9NRU0sIGUsICh2 b2lkICopaCwgMCk7Ci0gICAgfQotICBlbHNlCi0jZW5kaWYKLSAgICBDVURB X0NBTEwgKGN1TWVtY3B5SHRvRCwgKENVZGV2aWNlcHRyKSBkLCBoLCBzKTsK LQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wKLW52cHR4X2Rl djJob3N0ICh2b2lkICpoLCBjb25zdCB2b2lkICpkLCBzaXplX3QgcykKLXsK LSAgQ1VkZXZpY2VwdHIgcGI7Ci0gIHNpemVfdCBwczsKLSAgc3RydWN0IG52 cHR4X3RocmVhZCAqbnZ0aGQgPSBudnB0eF90aHJlYWQgKCk7Ci0KLSAgaWYg KCFzKQotICAgIHJldHVybiB0cnVlOwotICBpZiAoIWQpCi0gICAgewotICAg ICAgR09NUF9QTFVHSU5fZXJyb3IgKCJpbnZhbGlkIGRldmljZSBhZGRyZXNz Iik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gIENVREFfQ0FM TCAoY3VNZW1HZXRBZGRyZXNzUmFuZ2UsICZwYiwgJnBzLCAoQ1VkZXZpY2Vw dHIpIGQpOwotCi0gIGlmICghcGIpCi0gICAgewotICAgICAgR09NUF9QTFVH SU5fZXJyb3IgKCJpbnZhbGlkIGRldmljZSBhZGRyZXNzIik7Ci0gICAgICBy ZXR1cm4gZmFsc2U7Ci0gICAgfQotICBpZiAoIWgpCi0gICAgewotICAgICAg R09NUF9QTFVHSU5fZXJyb3IgKCJpbnZhbGlkIGhvc3QgYWRkcmVzcyIpOwot ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgaWYgKGQgPT0gaCkKLSAg ICB7Ci0gICAgICBHT01QX1BMVUdJTl9lcnJvciAoImludmFsaWQgaG9zdCBv ciBkZXZpY2UgYWRkcmVzcyIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAg IH0KLSAgaWYgKCh2b2lkICopKGQgKyBzKSA+ICh2b2lkICopKHBiICsgcHMp KQotICAgIHsKLSAgICAgIEdPTVBfUExVR0lOX2Vycm9yICgiaW52YWxpZCBz aXplIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0jaWZuZGVm IERJU0FCTEVfQVNZTkMKLSAgaWYgKG52dGhkICYmIG52dGhkLT5jdXJyZW50 X3N0cmVhbSAhPSBudnRoZC0+cHR4X2Rldi0+bnVsbF9zdHJlYW0pCi0gICAg ewotICAgICAgQ1VldmVudCAqZSA9IChDVWV2ZW50ICopIEdPTVBfUExVR0lO X21hbGxvYyAoc2l6ZW9mIChDVWV2ZW50KSk7Ci0gICAgICBDVURBX0NBTEwg KGN1RXZlbnRDcmVhdGUsIGUsIENVX0VWRU5UX0RJU0FCTEVfVElNSU5HKTsK LSAgICAgIGV2ZW50X2djIChmYWxzZSk7Ci0gICAgICBDVURBX0NBTEwgKGN1 TWVtY3B5RHRvSEFzeW5jLAotCQkgaCwgKENVZGV2aWNlcHRyKSBkLCBzLCBu dnRoZC0+Y3VycmVudF9zdHJlYW0tPnN0cmVhbSk7Ci0gICAgICBDVURBX0NB TEwgKGN1RXZlbnRSZWNvcmQsICplLCBudnRoZC0+Y3VycmVudF9zdHJlYW0t PnN0cmVhbSk7Ci0gICAgICBldmVudF9hZGQgKFBUWF9FVlRfTUVNLCBlLCAo dm9pZCAqKWgsIDApOwotICAgIH0KLSAgZWxzZQotI2VuZGlmCi0gICAgQ1VE QV9DQUxMIChjdU1lbWNweUR0b0gsIGgsIChDVWRldmljZXB0cikgZCwgcyk7 Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1udnB0eF9z ZXRfYXN5bmMgKGludCBhc3luYykKLXsKLSAgc3RydWN0IG52cHR4X3RocmVh ZCAqbnZ0aGQgPSBudnB0eF90aHJlYWQgKCk7Ci0gIG52dGhkLT5jdXJyZW50 X3N0cmVhbQotICAgID0gc2VsZWN0X3N0cmVhbV9mb3JfYXN5bmMgKGFzeW5j LCBwdGhyZWFkX3NlbGYgKCksIHRydWUsIE5VTEwpOwotfQotCi1zdGF0aWMg aW50Ci1udnB0eF9hc3luY190ZXN0IChpbnQgYXN5bmMpCi17Ci0gIENVcmVz dWx0IHI7Ci0gIHN0cnVjdCBwdHhfc3RyZWFtICpzOwotCi0gIHMgPSBzZWxl Y3Rfc3RyZWFtX2Zvcl9hc3luYyAoYXN5bmMsIHB0aHJlYWRfc2VsZiAoKSwg ZmFsc2UsIE5VTEwpOwotCi0gIGlmICghcykKLSAgICBHT01QX1BMVUdJTl9m YXRhbCAoInVua25vd24gYXN5bmMgJWQiLCBhc3luYyk7Ci0KLSAgciA9IENV REFfQ0FMTF9OT0NIRUNLIChjdVN0cmVhbVF1ZXJ5LCBzLT5zdHJlYW0pOwot ICBpZiAociA9PSBDVURBX1NVQ0NFU1MpCi0gICAgewotICAgICAgLyogVGhl IG9hY2MtcGFyYWxsZWwuYzpnb2FjY193YWl0IGZ1bmN0aW9uIGNhbGxzIHRo aXMgaG9vayB0byBkZXRlcm1pbmUKLQkgd2hldGhlciBhbGwgd29yayBoYXMg Y29tcGxldGVkIG9uIHRoaXMgc3RyZWFtLCBhbmQgaWYgc28gb21pdHMgdGhl IGNhbGwKLQkgdG8gdGhlIHdhaXQgaG9vay4gIElmIHRoYXQgaGFwcGVucywg ZXZlbnRfZ2MgbWlnaHQgbm90IGdldCBjYWxsZWQKLQkgKHdoaWNoIHByZXZl bnRzIHZhcmlhYmxlcyBmcm9tIGdldHRpbmcgdW5tYXBwZWQgYW5kIHRoZWly IGFzc29jaWF0ZWQKLQkgZGV2aWNlIHN0b3JhZ2UgZnJlZWQpLCBzbyBjYWxs IGl0IGhlcmUuICAqLwotICAgICAgZXZlbnRfZ2MgKHRydWUpOwotICAgICAg cmV0dXJuIDE7Ci0gICAgfQotICBlbHNlIGlmIChyID09IENVREFfRVJST1Jf Tk9UX1JFQURZKQotICAgIHJldHVybiAwOwotCi0gIEdPTVBfUExVR0lOX2Zh dGFsICgiY3VTdHJlYW1RdWVyeSBlcnJvcjogJXMiLCBjdWRhX2Vycm9yIChy KSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW52cHR4X2Fz eW5jX3Rlc3RfYWxsICh2b2lkKQotewotICBzdHJ1Y3QgcHR4X3N0cmVhbSAq czsKLSAgcHRocmVhZF90IHNlbGYgPSBwdGhyZWFkX3NlbGYgKCk7Ci0gIHN0 cnVjdCBudnB0eF90aHJlYWQgKm52dGhkID0gbnZwdHhfdGhyZWFkICgpOwot Ci0gIHB0aHJlYWRfbXV0ZXhfbG9jayAoJm52dGhkLT5wdHhfZGV2LT5zdHJl YW1fbG9jayk7Ci0KLSAgZm9yIChzID0gbnZ0aGQtPnB0eF9kZXYtPmFjdGl2 ZV9zdHJlYW1zOyBzICE9IE5VTEw7IHMgPSBzLT5uZXh0KQotICAgIHsKLSAg ICAgIGlmICgocy0+bXVsdGl0aHJlYWRlZCB8fCBwdGhyZWFkX2VxdWFsIChz LT5ob3N0X3RocmVhZCwgc2VsZikpCi0JICAmJiBDVURBX0NBTExfTk9DSEVD SyAoY3VTdHJlYW1RdWVyeSwKLQkJCQlzLT5zdHJlYW0pID09IENVREFfRVJS T1JfTk9UX1JFQURZKQotCXsKLQkgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgm bnZ0aGQtPnB0eF9kZXYtPnN0cmVhbV9sb2NrKTsKLQkgIHJldHVybiAwOwot CX0KLSAgICB9Ci0KLSAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZudnRoZC0+ cHR4X2Rldi0+c3RyZWFtX2xvY2spOwotCi0gIGV2ZW50X2djICh0cnVlKTsK LQotICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQKLW52cHR4X3dhaXQg KGludCBhc3luYykKLXsKLSAgc3RydWN0IHB0eF9zdHJlYW0gKnM7Ci0KLSAg cyA9IHNlbGVjdF9zdHJlYW1fZm9yX2FzeW5jIChhc3luYywgcHRocmVhZF9z ZWxmICgpLCBmYWxzZSwgTlVMTCk7Ci0gIGlmICghcykKLSAgICBHT01QX1BM VUdJTl9mYXRhbCAoInVua25vd24gYXN5bmMgJWQiLCBhc3luYyk7Ci0KLSAg Q1VEQV9DQUxMX0FTU0VSVCAoY3VTdHJlYW1TeW5jaHJvbml6ZSwgcy0+c3Ry ZWFtKTsKLQotICBldmVudF9nYyAodHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1udnB0eF93YWl0X2FzeW5jIChpbnQgYXN5bmMxLCBpbnQgYXN5bmMyKQot ewotICBDVWV2ZW50ICplOwotICBzdHJ1Y3QgcHR4X3N0cmVhbSAqczEsICpz MjsKLSAgcHRocmVhZF90IHNlbGYgPSBwdGhyZWFkX3NlbGYgKCk7Ci0KLSAg LyogVGhlIHN0cmVhbSB0aGF0IGlzIHdhaXRpbmcgKHJhdGhlciB0aGFuIGJl aW5nIHdhaXRlZCBmb3IpIGRvZXNuJ3QKLSAgICAgbmVjZXNzYXJpbHkgaGF2 ZSB0byBleGlzdCBhbHJlYWR5LiAgKi8KLSAgczIgPSBzZWxlY3Rfc3RyZWFt X2Zvcl9hc3luYyAoYXN5bmMyLCBzZWxmLCB0cnVlLCBOVUxMKTsKLQotICBz MSA9IHNlbGVjdF9zdHJlYW1fZm9yX2FzeW5jIChhc3luYzEsIHNlbGYsIGZh bHNlLCBOVUxMKTsKLSAgaWYgKCFzMSkKLSAgICBHT01QX1BMVUdJTl9mYXRh bCAoImludmFsaWQgYXN5bmMgMVxuIik7Ci0KLSAgaWYgKHMxID09IHMyKQot ICAgIEdPTVBfUExVR0lOX2ZhdGFsICgiaWRlbnRpY2FsIHBhcmFtZXRlcnMi KTsKLQotICBlID0gKENVZXZlbnQgKikgR09NUF9QTFVHSU5fbWFsbG9jIChz aXplb2YgKENVZXZlbnQpKTsKLQotICBDVURBX0NBTExfQVNTRVJUIChjdUV2 ZW50Q3JlYXRlLCBlLCBDVV9FVkVOVF9ESVNBQkxFX1RJTUlORyk7Ci0KLSAg ZXZlbnRfZ2MgKHRydWUpOwotCi0gIENVREFfQ0FMTF9BU1NFUlQgKGN1RXZl bnRSZWNvcmQsICplLCBzMS0+c3RyZWFtKTsKLQotICBldmVudF9hZGQgKFBU WF9FVlRfU1lOQywgZSwgTlVMTCwgMCk7Ci0KLSAgQ1VEQV9DQUxMX0FTU0VS VCAoY3VTdHJlYW1XYWl0RXZlbnQsIHMyLT5zdHJlYW0sICplLCAwKTsKLX0K LQotc3RhdGljIHZvaWQKLW52cHR4X3dhaXRfYWxsICh2b2lkKQotewotICBD VXJlc3VsdCByOwotICBzdHJ1Y3QgcHR4X3N0cmVhbSAqczsKLSAgcHRocmVh ZF90IHNlbGYgPSBwdGhyZWFkX3NlbGYgKCk7Ci0gIHN0cnVjdCBudnB0eF90 aHJlYWQgKm52dGhkID0gbnZwdHhfdGhyZWFkICgpOwotCi0gIHB0aHJlYWRf bXV0ZXhfbG9jayAoJm52dGhkLT5wdHhfZGV2LT5zdHJlYW1fbG9jayk7Ci0K LSAgLyogV2FpdCBmb3IgYWN0aXZlIHN0cmVhbXMgaW5pdGlhdGVkIGJ5IHRo aXMgdGhyZWFkIChvciBieSBtdWx0aXBsZSB0aHJlYWRzKQotICAgICB0byBj b21wbGV0ZS4gICovCi0gIGZvciAocyA9IG52dGhkLT5wdHhfZGV2LT5hY3Rp dmVfc3RyZWFtczsgcyAhPSBOVUxMOyBzID0gcy0+bmV4dCkKLSAgICB7Ci0g ICAgICBpZiAocy0+bXVsdGl0aHJlYWRlZCB8fCBwdGhyZWFkX2VxdWFsIChz LT5ob3N0X3RocmVhZCwgc2VsZikpCi0JewotCSAgciA9IENVREFfQ0FMTF9O T0NIRUNLIChjdVN0cmVhbVF1ZXJ5LCBzLT5zdHJlYW0pOwotCSAgaWYgKHIg PT0gQ1VEQV9TVUNDRVNTKQotCSAgICBjb250aW51ZTsKLQkgIGVsc2UgaWYg KHIgIT0gQ1VEQV9FUlJPUl9OT1RfUkVBRFkpCi0JICAgIEdPTVBfUExVR0lO X2ZhdGFsICgiY3VTdHJlYW1RdWVyeSBlcnJvcjogJXMiLCBjdWRhX2Vycm9y IChyKSk7Ci0KLQkgIENVREFfQ0FMTF9BU1NFUlQgKGN1U3RyZWFtU3luY2hy b25pemUsIHMtPnN0cmVhbSk7Ci0JfQotICAgIH0KLQotICBwdGhyZWFkX211 dGV4X3VubG9jayAoJm52dGhkLT5wdHhfZGV2LT5zdHJlYW1fbG9jayk7Ci0K LSAgZXZlbnRfZ2MgKHRydWUpOwotfQotCi1zdGF0aWMgdm9pZAotbnZwdHhf d2FpdF9hbGxfYXN5bmMgKGludCBhc3luYykKLXsKLSAgc3RydWN0IHB0eF9z dHJlYW0gKndhaXRpbmdfc3RyZWFtLCAqb3RoZXJfc3RyZWFtOwotICBDVWV2 ZW50ICplOwotICBzdHJ1Y3QgbnZwdHhfdGhyZWFkICpudnRoZCA9IG52cHR4 X3RocmVhZCAoKTsKLSAgcHRocmVhZF90IHNlbGYgPSBwdGhyZWFkX3NlbGYg KCk7Ci0KLSAgLyogVGhlIHN0cmVhbSBkb2luZyB0aGUgd2FpdGluZy4gIFRo aXMgY291bGQgYmUgdGhlIGZpcnN0IG1lbnRpb24gb2YgdGhlCi0gICAgIHN0 cmVhbSwgc28gY3JlYXRlIGl0IGlmIG5lY2Vzc2FyeS4gICovCi0gIHdhaXRp bmdfc3RyZWFtCi0gICAgPSBzZWxlY3Rfc3RyZWFtX2Zvcl9hc3luYyAoYXN5 bmMsIHB0aHJlYWRfc2VsZiAoKSwgdHJ1ZSwgTlVMTCk7Ci0KLSAgLyogTGF1 bmNoZXMgb24gdGhlIG51bGwgc3RyZWFtIGFscmVhZHkgYmxvY2sgb24gb3Ro ZXIgc3RyZWFtcyBpbiB0aGUKLSAgICAgY29udGV4dC4gICovCi0gIGlmICgh d2FpdGluZ19zdHJlYW0gfHwgd2FpdGluZ19zdHJlYW0gPT0gbnZ0aGQtPnB0 eF9kZXYtPm51bGxfc3RyZWFtKQotICAgIHJldHVybjsKLQotICBldmVudF9n YyAodHJ1ZSk7Ci0KLSAgcHRocmVhZF9tdXRleF9sb2NrICgmbnZ0aGQtPnB0 eF9kZXYtPnN0cmVhbV9sb2NrKTsKLQotICBmb3IgKG90aGVyX3N0cmVhbSA9 IG52dGhkLT5wdHhfZGV2LT5hY3RpdmVfc3RyZWFtczsKLSAgICAgICBvdGhl cl9zdHJlYW0gIT0gTlVMTDsKLSAgICAgICBvdGhlcl9zdHJlYW0gPSBvdGhl cl9zdHJlYW0tPm5leHQpCi0gICAgewotICAgICAgaWYgKCFvdGhlcl9zdHJl YW0tPm11bHRpdGhyZWFkZWQKLQkgICYmICFwdGhyZWFkX2VxdWFsIChvdGhl cl9zdHJlYW0tPmhvc3RfdGhyZWFkLCBzZWxmKSkKLQljb250aW51ZTsKLQot ICAgICAgZSA9IChDVWV2ZW50ICopIEdPTVBfUExVR0lOX21hbGxvYyAoc2l6 ZW9mIChDVWV2ZW50KSk7Ci0KLSAgICAgIENVREFfQ0FMTF9BU1NFUlQgKGN1 RXZlbnRDcmVhdGUsIGUsIENVX0VWRU5UX0RJU0FCTEVfVElNSU5HKTsKLQot ICAgICAgLyogUmVjb3JkIGFuIGV2ZW50IG9uIHRoZSB3YWl0ZWQtZm9yIHN0 cmVhbS4gICovCi0gICAgICBDVURBX0NBTExfQVNTRVJUIChjdUV2ZW50UmVj b3JkLCAqZSwgb3RoZXJfc3RyZWFtLT5zdHJlYW0pOwotCi0gICAgICBldmVu dF9hZGQgKFBUWF9FVlRfU1lOQywgZSwgTlVMTCwgMCk7Ci0KLSAgICAgIENV REFfQ0FMTF9BU1NFUlQgKGN1U3RyZWFtV2FpdEV2ZW50LCB3YWl0aW5nX3N0 cmVhbS0+c3RyZWFtLCAqZSwgMCk7Ci0gICB9Ci0KLSAgcHRocmVhZF9tdXRl eF91bmxvY2sgKCZudnRoZC0+cHR4X2Rldi0+c3RyZWFtX2xvY2spOwotfQot CiBzdGF0aWMgdm9pZCAqCiBudnB0eF9nZXRfY3VycmVudF9jdWRhX2Rldmlj ZSAodm9pZCkKIHsKQEAgLTE3MzIsNjkgKzk1Myw2IEBAIG52cHR4X2dldF9j dXJyZW50X2N1ZGFfY29udGV4dCAodm9pZCkKICAgcmV0dXJuIG52dGhkLT5w dHhfZGV2LT5jdHg7CiB9CiAKLXN0YXRpYyB2b2lkICoKLW52cHR4X2dldF9j dWRhX3N0cmVhbSAoaW50IGFzeW5jKQotewotICBzdHJ1Y3QgcHR4X3N0cmVh bSAqczsKLSAgc3RydWN0IG52cHR4X3RocmVhZCAqbnZ0aGQgPSBudnB0eF90 aHJlYWQgKCk7Ci0KLSAgaWYgKCFudnRoZCB8fCAhbnZ0aGQtPnB0eF9kZXYp Ci0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcyA9IHNlbGVjdF9zdHJlYW1fZm9y X2FzeW5jIChhc3luYywgcHRocmVhZF9zZWxmICgpLCBmYWxzZSwgTlVMTCk7 Ci0KLSAgcmV0dXJuIHMgPyBzLT5zdHJlYW0gOiBOVUxMOwotfQotCi1zdGF0 aWMgaW50Ci1udnB0eF9zZXRfY3VkYV9zdHJlYW0gKGludCBhc3luYywgdm9p ZCAqc3RyZWFtKQotewotICBzdHJ1Y3QgcHR4X3N0cmVhbSAqb2xkc3RyZWFt OwotICBwdGhyZWFkX3Qgc2VsZiA9IHB0aHJlYWRfc2VsZiAoKTsKLSAgc3Ry dWN0IG52cHR4X3RocmVhZCAqbnZ0aGQgPSBudnB0eF90aHJlYWQgKCk7Ci0K LSAgaWYgKGFzeW5jIDwgMCkKLSAgICBHT01QX1BMVUdJTl9mYXRhbCAoImJh ZCBhc3luYyAlZCIsIGFzeW5jKTsKLQotICBwdGhyZWFkX211dGV4X2xvY2sg KCZudnRoZC0+cHR4X2Rldi0+c3RyZWFtX2xvY2spOwotCi0gIC8qIFdlIGhh dmUgYSBsaXN0IG9mIGFjdGl2ZSBzdHJlYW1zIGFuZCBhbiBhcnJheSBtYXBw aW5nIGFzeW5jIHZhbHVlcyB0bwotICAgICBlbnRyaWVzIG9mIHRoYXQgbGlz dC4gIFdlIG5lZWQgdG8gdGFrZSAib3duZXJzaGlwIiBvZiB0aGUgcGFzc2Vk LWluIHN0cmVhbSwKLSAgICAgYW5kIGFkZCBpdCB0byBvdXIgbGlzdCwgcmVt b3ZpbmcgdGhlIHByZXZpb3VzIGVudHJ5IGFsc28gKGlmIHRoZXJlIHdhcyBv bmUpCi0gICAgIGluIG9yZGVyIHRvIHByZXZlbnQgcmVzb3VyY2UgbGVha3Mu ICBOb3RlIHRoZSBwb3RlbnRpYWwgZm9yIHN1cnByaXNlCi0gICAgIGhlcmU6 IG1heWJlIHdlIHNob3VsZCBrZWVwIHRyYWNrIG9mIHBhc3NlZC1pbiBzdHJl YW1zIGFuZCBsZWF2ZSBpdCB1cCB0bwotICAgICB0aGUgdXNlciB0byB0aWR5 IHRob3NlIHVwLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgZm9yIHN0cmVhbSBo YW5kbGVzCi0gICAgIHJldHVybmVkIGZyb20gYWNjX2dldF9jdWRhX3N0cmVh bSBhYm92ZS4uLiAgKi8KLQotICBvbGRzdHJlYW0gPSBzZWxlY3Rfc3RyZWFt X2Zvcl9hc3luYyAoYXN5bmMsIHNlbGYsIGZhbHNlLCBOVUxMKTsKLQotICBp ZiAob2xkc3RyZWFtKQotICAgIHsKLSAgICAgIGlmIChudnRoZC0+cHR4X2Rl di0+YWN0aXZlX3N0cmVhbXMgPT0gb2xkc3RyZWFtKQotCW52dGhkLT5wdHhf ZGV2LT5hY3RpdmVfc3RyZWFtcyA9IG52dGhkLT5wdHhfZGV2LT5hY3RpdmVf c3RyZWFtcy0+bmV4dDsKLSAgICAgIGVsc2UKLQl7Ci0JICBzdHJ1Y3QgcHR4 X3N0cmVhbSAqcyA9IG52dGhkLT5wdHhfZGV2LT5hY3RpdmVfc3RyZWFtczsK LQkgIHdoaWxlIChzLT5uZXh0ICE9IG9sZHN0cmVhbSkKLQkgICAgcyA9IHMt Pm5leHQ7Ci0JICBzLT5uZXh0ID0gcy0+bmV4dC0+bmV4dDsKLQl9Ci0KLSAg ICAgIENVREFfQ0FMTF9BU1NFUlQgKGN1U3RyZWFtRGVzdHJveSwgb2xkc3Ry ZWFtLT5zdHJlYW0pOwotCi0gICAgICBpZiAoIW1hcF9maW5pIChvbGRzdHJl YW0pKQotCUdPTVBfUExVR0lOX2ZhdGFsICgiZXJyb3Igd2hlbiBmcmVlaW5n IGhvc3QgbWVtb3J5Iik7Ci0KLSAgICAgIGZyZWUgKG9sZHN0cmVhbSk7Ci0g ICAgfQotCi0gIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbnZ0aGQtPnB0eF9k ZXYtPnN0cmVhbV9sb2NrKTsKLQotICAodm9pZCkgc2VsZWN0X3N0cmVhbV9m b3JfYXN5bmMgKGFzeW5jLCBzZWxmLCB0cnVlLCAoQ1VzdHJlYW0pIHN0cmVh bSk7Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KIC8qIFBsdWdpbiBlbnRyeSBwb2lu dHMuICAqLwogCiBjb25zdCBjaGFyICoKQEAgLTIwMjgsNiArMTE4NiwyMyBA QCBHT01QX09GRkxPQURfYWxsb2MgKGludCBvcmQsIHNpemVfdCBzaXplKQog ewogICBpZiAoIW52cHR4X2F0dGFjaF9ob3N0X3RocmVhZF90b19kZXZpY2Ug KG9yZCkpCiAgICAgcmV0dXJuIE5VTEw7CisKKyAgc3RydWN0IHB0eF9kZXZp Y2UgKnB0eF9kZXYgPSBwdHhfZGV2aWNlc1tvcmRdOworICBzdHJ1Y3QgcHR4 X2ZyZWVfYmxvY2sgKmJsb2NrcywgKnRtcDsKKworICBwdGhyZWFkX211dGV4 X2xvY2sgKCZwdHhfZGV2LT5mcmVlX2Jsb2Nrc19sb2NrKTsKKyAgYmxvY2tz ID0gcHR4X2Rldi0+ZnJlZV9ibG9ja3M7CisgIHB0eF9kZXYtPmZyZWVfYmxv Y2tzID0gTlVMTDsKKyAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZwdHhfZGV2 LT5mcmVlX2Jsb2Nrc19sb2NrKTsKKworICB3aGlsZSAoYmxvY2tzKQorICAg IHsKKyAgICAgIHRtcCA9IGJsb2Nrcy0+bmV4dDsKKyAgICAgIG52cHR4X2Zy ZWUgKGJsb2Nrcy0+cHRyLCBwdHhfZGV2KTsKKyAgICAgIGZyZWUgKGJsb2Nr cyk7CisgICAgICBibG9ja3MgPSB0bXA7CisgICAgfQorCiAgIHJldHVybiBu dnB0eF9hbGxvYyAoc2l6ZSk7CiB9CiAKQEAgLTIwMzUsOTMgKzEyMTAsOTIg QEAgYm9vbAogR09NUF9PRkZMT0FEX2ZyZWUgKGludCBvcmQsIHZvaWQgKnB0 cikKIHsKICAgcmV0dXJuIChudnB0eF9hdHRhY2hfaG9zdF90aHJlYWRfdG9f ZGV2aWNlIChvcmQpCi0JICAmJiBudnB0eF9mcmVlIChwdHIpKTsKKwkgICYm IG52cHR4X2ZyZWUgKHB0ciwgcHR4X2RldmljZXNbb3JkXSkpOwogfQogCi1i b29sCi1HT01QX09GRkxPQURfZGV2Mmhvc3QgKGludCBvcmQsIHZvaWQgKmRz dCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKLXsKLSAgcmV0dXJuIChu dnB0eF9hdHRhY2hfaG9zdF90aHJlYWRfdG9fZGV2aWNlIChvcmQpCi0JICAm JiBudnB0eF9kZXYyaG9zdCAoZHN0LCBzcmMsIG4pKTsKLX0KLQotYm9vbAot R09NUF9PRkZMT0FEX2hvc3QyZGV2IChpbnQgb3JkLCB2b2lkICpkc3QsIGNv bnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCi17Ci0gIHJldHVybiAobnZwdHhf YXR0YWNoX2hvc3RfdGhyZWFkX3RvX2RldmljZSAob3JkKQotCSAgJiYgbnZw dHhfaG9zdDJkZXYgKGRzdCwgc3JjLCBuKSk7Ci19Ci0KLWJvb2wKLUdPTVBf T0ZGTE9BRF9kZXYyZGV2IChpbnQgb3JkLCB2b2lkICpkc3QsIGNvbnN0IHZv aWQgKnNyYywgc2l6ZV90IG4pCi17Ci0gIHN0cnVjdCBwdHhfZGV2aWNlICpw dHhfZGV2ID0gcHR4X2RldmljZXNbb3JkXTsKLSAgQ1VEQV9DQUxMIChjdU1l bWNweUR0b0RBc3luYywgKENVZGV2aWNlcHRyKSBkc3QsIChDVWRldmljZXB0 cikgc3JjLCBuLAotCQkJCXB0eF9kZXYtPm51bGxfc3RyZWFtLT5zdHJlYW0p OwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCAoKmRldmljZV9ydW4pIChp bnQgbiwgdm9pZCAqZm5fcHRyLCB2b2lkICp2YXJzKSA9IE5VTEw7Ci0KIHZv aWQKIEdPTVBfT0ZGTE9BRF9vcGVuYWNjX2V4ZWMgKHZvaWQgKCpmbikgKHZv aWQgKiksIHNpemVfdCBtYXBudW0sCiAJCQkgICB2b2lkICoqaG9zdGFkZHJz LCB2b2lkICoqZGV2YWRkcnMsCi0JCQkgICBpbnQgYXN5bmMsIHVuc2lnbmVk ICpkaW1zLCB2b2lkICp0YXJnX21lbV9kZXNjKQorCQkJICAgdW5zaWduZWQg KmRpbXMsIHZvaWQgKnRhcmdfbWVtX2Rlc2MpCiB7Ci0gIG52cHR4X2V4ZWMg KGZuLCBtYXBudW0sIGhvc3RhZGRycywgZGV2YWRkcnMsIGFzeW5jLCBkaW1z LCB0YXJnX21lbV9kZXNjKTsKLX0KKyAgR09NUF9QTFVHSU5fZGVidWcgKDAs ICIgICVzOiBwcmVwYXJlIG1hcHBpbmdzXG4iLCBfX0ZVTkNUSU9OX18pOwog Ci12b2lkCi1HT01QX09GRkxPQURfb3BlbmFjY19yZWdpc3Rlcl9hc3luY19j bGVhbnVwICh2b2lkICp0YXJnX21lbV9kZXNjLCBpbnQgYXN5bmMpCi17Ci0g IHN0cnVjdCBudnB0eF90aHJlYWQgKm52dGhkID0gbnZwdHhfdGhyZWFkICgp OwotICBDVWV2ZW50ICplID0gKENVZXZlbnQgKikgR09NUF9QTFVHSU5fbWFs bG9jIChzaXplb2YgKENVZXZlbnQpKTsKKyAgdm9pZCAqKmhwID0gTlVMTDsK KyAgQ1VkZXZpY2VwdHIgZHAgPSAwOwogCi0gIENVREFfQ0FMTF9BU1NFUlQg KGN1RXZlbnRDcmVhdGUsIGUsIENVX0VWRU5UX0RJU0FCTEVfVElNSU5HKTsK LSAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VFdmVudFJlY29yZCwgKmUsIG52dGhk LT5jdXJyZW50X3N0cmVhbS0+c3RyZWFtKTsKLSAgZXZlbnRfYWRkIChQVFhf RVZUX0FTWU5DX0NMRUFOVVAsIGUsIHRhcmdfbWVtX2Rlc2MsIGFzeW5jKTsK LX0KKyAgaWYgKG1hcG51bSA+IDApCisgICAgeworICAgICAgaHAgPSBhbGxv Y2EgKG1hcG51bSAqIHNpemVvZiAodm9pZCAqKSk7CisgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IG1hcG51bTsgaSsrKQorCWhwW2ldID0gKGRldmFkZHJz W2ldID8gZGV2YWRkcnNbaV0gOiBob3N0YWRkcnNbaV0pOworICAgICAgQ1VE QV9DQUxMX0FTU0VSVCAoY3VNZW1BbGxvYywgJmRwLCBtYXBudW0gKiBzaXpl b2YgKHZvaWQgKikpOworICAgIH0KIAotaW50Ci1HT01QX09GRkxPQURfb3Bl bmFjY19hc3luY190ZXN0IChpbnQgYXN5bmMpCi17Ci0gIHJldHVybiBudnB0 eF9hc3luY190ZXN0IChhc3luYyk7Ci19CisgIC8qIENvcHkgdGhlIChkZXZp Y2UpIHBvaW50ZXJzIHRvIGFyZ3VtZW50cyB0byB0aGUgZGV2aWNlIChkcCBh bmQgaHAgbWlnaHQgaW4KKyAgICAgZmFjdCBoYXZlIHRoZSBzYW1lIHZhbHVl IG9uIGEgdW5pZmllZC1tZW1vcnkgc3lzdGVtKS4gICovCisgIGlmIChtYXBu dW0gPiAwKQorICAgIENVREFfQ0FMTF9BU1NFUlQgKGN1TWVtY3B5SHRvRCwg ZHAsICh2b2lkICopIGhwLAorCQkgICAgICBtYXBudW0gKiBzaXplb2YgKHZv aWQgKikpOwogCi1pbnQKLUdPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX3Rl c3RfYWxsICh2b2lkKQotewotICByZXR1cm4gbnZwdHhfYXN5bmNfdGVzdF9h bGwgKCk7Ci19CisgIG52cHR4X2V4ZWMgKGZuLCBtYXBudW0sIGhvc3RhZGRy cywgZGV2YWRkcnMsIGRpbXMsIHRhcmdfbWVtX2Rlc2MsCisJICAgICAgZHAs IE5VTEwpOwogCi12b2lkCi1HT01QX09GRkxPQURfb3BlbmFjY19hc3luY193 YWl0IChpbnQgYXN5bmMpCi17Ci0gIG52cHR4X3dhaXQgKGFzeW5jKTsKKyAg Q1VyZXN1bHQgciA9IENVREFfQ0FMTF9OT0NIRUNLIChjdVN0cmVhbVN5bmNo cm9uaXplLCBOVUxMKTsKKyAgY29uc3QgY2hhciAqbWF5YmVfYWJvcnRfbXNn ID0gIihwZXJoYXBzIGFib3J0IHdhcyBjYWxsZWQpIjsKKyAgaWYgKHIgPT0g Q1VEQV9FUlJPUl9MQVVOQ0hfRkFJTEVEKQorICAgIEdPTVBfUExVR0lOX2Zh dGFsICgiY3VTdHJlYW1TeW5jaHJvbml6ZSBlcnJvcjogJXMgJXNcbiIsIGN1 ZGFfZXJyb3IgKHIpLAorCQkgICAgICAgbWF5YmVfYWJvcnRfbXNnKTsKKyAg ZWxzZSBpZiAociAhPSBDVURBX1NVQ0NFU1MpCisgICAgR09NUF9QTFVHSU5f ZmF0YWwgKCJjdVN0cmVhbVN5bmNocm9uaXplIGVycm9yOiAlcyIsIGN1ZGFf ZXJyb3IgKHIpKTsKKyAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VNZW1GcmVlLCBk cCk7CiB9CiAKLXZvaWQKLUdPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX3dh aXRfYXN5bmMgKGludCBhc3luYzEsIGludCBhc3luYzIpCitzdGF0aWMgdm9p ZAorY3VkYV9mcmVlX2FyZ21lbSAodm9pZCAqcHRyKQogewotICBudnB0eF93 YWl0X2FzeW5jIChhc3luYzEsIGFzeW5jMik7CisgIHZvaWQgKipibG9jayA9 ICh2b2lkICoqKSBwdHI7CisgIG52cHR4X2ZyZWUgKGJsb2NrWzBdLCAoc3Ry dWN0IHB0eF9kZXZpY2UgKikgYmxvY2tbMV0pOworICBmcmVlIChibG9jayk7 CiB9CiAKIHZvaWQKLUdPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX3dhaXRf YWxsICh2b2lkKQorR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfZXhlYyAo dm9pZCAoKmZuKSAodm9pZCAqKSwgc2l6ZV90IG1hcG51bSwKKwkJCQkgdm9p ZCAqKmhvc3RhZGRycywgdm9pZCAqKmRldmFkZHJzLAorCQkJCSB1bnNpZ25l ZCAqZGltcywgdm9pZCAqdGFyZ19tZW1fZGVzYywKKwkJCQkgc3RydWN0IGdv YWNjX2FzeW5jcXVldWUgKmFxKQogewotICBudnB0eF93YWl0X2FsbCAoKTsK LX0KKyAgR09NUF9QTFVHSU5fZGVidWcgKDAsICIgICVzOiBwcmVwYXJlIG1h cHBpbmdzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi12b2lkCi1HT01QX09GRkxP QURfb3BlbmFjY19hc3luY193YWl0X2FsbF9hc3luYyAoaW50IGFzeW5jKQot ewotICBudnB0eF93YWl0X2FsbF9hc3luYyAoYXN5bmMpOwotfQorICB2b2lk ICoqaHAgPSBOVUxMOworICBDVWRldmljZXB0ciBkcCA9IDA7CisgIHZvaWQg KipibG9jayA9IE5VTEw7CiAKLXZvaWQKLUdPTVBfT0ZGTE9BRF9vcGVuYWNj X2FzeW5jX3NldF9hc3luYyAoaW50IGFzeW5jKQotewotICBudnB0eF9zZXRf YXN5bmMgKGFzeW5jKTsKKyAgaWYgKG1hcG51bSA+IDApCisgICAgeworICAg ICAgYmxvY2sgPSAodm9pZCAqKikgR09NUF9QTFVHSU5fbWFsbG9jICgobWFw bnVtICsgMikgKiBzaXplb2YgKHZvaWQgKikpOworICAgICAgaHAgPSBibG9j ayArIDI7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcG51bTsgaSsr KQorCWhwW2ldID0gKGRldmFkZHJzW2ldID8gZGV2YWRkcnNbaV0gOiBob3N0 YWRkcnNbaV0pOworICAgICAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VNZW1BbGxv YywgJmRwLCBtYXBudW0gKiBzaXplb2YgKHZvaWQgKikpOworICAgIH0KKwor ICAvKiBDb3B5IHRoZSAoZGV2aWNlKSBwb2ludGVycyB0byBhcmd1bWVudHMg dG8gdGhlIGRldmljZSAoZHAgYW5kIGhwIG1pZ2h0IGluCisgICAgIGZhY3Qg aGF2ZSB0aGUgc2FtZSB2YWx1ZSBvbiBhIHVuaWZpZWQtbWVtb3J5IHN5c3Rl bSkuICAqLworICBpZiAobWFwbnVtID4gMCkKKyAgICB7CisgICAgICBDVURB X0NBTExfQVNTRVJUIChjdU1lbWNweUh0b0RBc3luYywgZHAsICh2b2lkICop IGhwLAorCQkJbWFwbnVtICogc2l6ZW9mICh2b2lkICopLCBhcS0+Y3VkYV9z dHJlYW0pOworICAgICAgYmxvY2tbMF0gPSAodm9pZCAqKSBkcDsKKworICAg ICAgc3RydWN0IG52cHR4X3RocmVhZCAqbnZ0aGQgPQorCShzdHJ1Y3QgbnZw dHhfdGhyZWFkICopIEdPTVBfUExVR0lOX2FjY190aHJlYWQgKCk7CisgICAg ICBibG9ja1sxXSA9ICh2b2lkICopIG52dGhkLT5wdHhfZGV2OworICAgIH0K KyAgbnZwdHhfZXhlYyAoZm4sIG1hcG51bSwgaG9zdGFkZHJzLCBkZXZhZGRy cywgZGltcywgdGFyZ19tZW1fZGVzYywKKwkgICAgICBkcCwgYXEtPmN1ZGFf c3RyZWFtKTsKKworICBpZiAobWFwbnVtID4gMCkKKyAgICBHT01QX09GRkxP QURfb3BlbmFjY19hc3luY19xdWV1ZV9jYWxsYmFjayAoYXEsIGN1ZGFfZnJl ZV9hcmdtZW0sIGJsb2NrKTsKIH0KIAogdm9pZCAqCkBAIC0yMTQzLDcgKzEz MTcsNiBAQCBHT01QX09GRkxPQURfb3BlbmFjY19jcmVhdGVfdGhyZWFkX2Rh dGEgKGludCBvcmQpCiAgIGlmICghdGhkX2N0eCkKICAgICBDVURBX0NBTExf QVNTRVJUIChjdUN0eFB1c2hDdXJyZW50LCBwdHhfZGV2LT5jdHgpOwogCi0g IG52dGhkLT5jdXJyZW50X3N0cmVhbSA9IHB0eF9kZXYtPm51bGxfc3RyZWFt OwogICBudnRoZC0+cHR4X2RldiA9IHB0eF9kZXY7CiAKICAgcmV0dXJuICh2 b2lkICopIG52dGhkOwpAQCAtMjE2OCwyMSArMTM0MSwxODIgQEAgR09NUF9P RkZMT0FEX29wZW5hY2NfY3VkYV9nZXRfY3VycmVudF9jb250ZXh0ICh2b2kK IH0KIAogLyogTk9URTogVGhpcyByZXR1cm5zIGEgQ1VzdHJlYW0sIG5vdCBh IHB0eF9zdHJlYW0gcG9pbnRlci4gICovCi0KIHZvaWQgKgotR09NUF9PRkZM T0FEX29wZW5hY2NfY3VkYV9nZXRfc3RyZWFtIChpbnQgYXN5bmMpCitHT01Q X09GRkxPQURfb3BlbmFjY19jdWRhX2dldF9zdHJlYW0gKHN0cnVjdCBnb2Fj Y19hc3luY3F1ZXVlICphcSkKIHsKLSAgcmV0dXJuIG52cHR4X2dldF9jdWRh X3N0cmVhbSAoYXN5bmMpOworICByZXR1cm4gKHZvaWQgKikgYXEtPmN1ZGFf c3RyZWFtOwogfQogCiAvKiBOT1RFOiBUaGlzIHRha2VzIGEgQ1VzdHJlYW0s IG5vdCBhIHB0eF9zdHJlYW0gcG9pbnRlci4gICovCitpbnQKK0dPTVBfT0ZG TE9BRF9vcGVuYWNjX2N1ZGFfc2V0X3N0cmVhbSAoc3RydWN0IGdvYWNjX2Fz eW5jcXVldWUgKmFxLCB2b2lkICpzdHJlYW0pCit7CisgIGlmIChhcS0+Y3Vk YV9zdHJlYW0pCisgICAgeworICAgICAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VT dHJlYW1TeW5jaHJvbml6ZSwgYXEtPmN1ZGFfc3RyZWFtKTsKKyAgICAgIENV REFfQ0FMTF9BU1NFUlQgKGN1U3RyZWFtRGVzdHJveSwgYXEtPmN1ZGFfc3Ry ZWFtKTsKKyAgICB9CiAKKyAgYXEtPmN1ZGFfc3RyZWFtID0gKENVc3RyZWFt KSBzdHJlYW07CisgIHJldHVybiAxOworfQorCitzdHJ1Y3QgZ29hY2NfYXN5 bmNxdWV1ZSAqCitHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19jb25zdHJ1 Y3QgKHZvaWQpCit7CisgIHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICphcQor ICAgID0gR09NUF9QTFVHSU5fbWFsbG9jIChzaXplb2YgKHN0cnVjdCBnb2Fj Y19hc3luY3F1ZXVlKSk7CisgIGFxLT5jdWRhX3N0cmVhbSA9IE5VTEw7Cisg IENVREFfQ0FMTF9BU1NFUlQgKGN1U3RyZWFtQ3JlYXRlLCAmYXEtPmN1ZGFf c3RyZWFtLCBDVV9TVFJFQU1fREVGQVVMVCk7CisgIC8vQ1VEQV9DQUxMX0FT U0VSVCAoY3VTdHJlYW1TeW5jaHJvbml6ZSwgYXEtPmN1ZGFfc3RyZWFtKTsK KyAgcmV0dXJuIGFxOworfQorCitib29sCitHT01QX09GRkxPQURfb3BlbmFj Y19hc3luY19kZXN0cnVjdCAoc3RydWN0IGdvYWNjX2FzeW5jcXVldWUgKmFx KQoreworICBDVURBX0NBTExfRVJFVCAoZmFsc2UsIGN1U3RyZWFtRGVzdHJv eSwgYXEtPmN1ZGFfc3RyZWFtKTsKKyAgZnJlZSAoYXEpOworICByZXR1cm4g dHJ1ZTsKK30KKwogaW50Ci1HT01QX09GRkxPQURfb3BlbmFjY19jdWRhX3Nl dF9zdHJlYW0gKGludCBhc3luYywgdm9pZCAqc3RyZWFtKQorR09NUF9PRkZM T0FEX29wZW5hY2NfYXN5bmNfdGVzdCAoc3RydWN0IGdvYWNjX2FzeW5jcXVl dWUgKmFxKQogewotICByZXR1cm4gbnZwdHhfc2V0X2N1ZGFfc3RyZWFtIChh c3luYywgc3RyZWFtKTsKKyAgQ1VyZXN1bHQgciA9IENVREFfQ0FMTF9OT0NI RUNLIChjdVN0cmVhbVF1ZXJ5LCBhcS0+Y3VkYV9zdHJlYW0pOworICBpZiAo ciA9PSBDVURBX1NVQ0NFU1MpCisgICAgcmV0dXJuIDE7CisgIGlmIChyID09 IENVREFfRVJST1JfTk9UX1JFQURZKQorICAgIHJldHVybiAwOworCisgIEdP TVBfUExVR0lOX2Vycm9yICgiY3VTdHJlYW1RdWVyeSBlcnJvcjogJXMiLCBj dWRhX2Vycm9yIChyKSk7CisgIHJldHVybiAtMTsKIH0KIAordm9pZAorR09N UF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfc3luY2hyb25pemUgKHN0cnVjdCBn b2FjY19hc3luY3F1ZXVlICphcSkKK3sKKyAgQ1VEQV9DQUxMX0FTU0VSVCAo Y3VTdHJlYW1TeW5jaHJvbml6ZSwgYXEtPmN1ZGFfc3RyZWFtKTsKK30KKwor dm9pZAorR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfc2VyaWFsaXplIChz dHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXExLAorCQkJCSAgICAgIHN0cnVj dCBnb2FjY19hc3luY3F1ZXVlICphcTIpCit7CisgIENVZXZlbnQgZTsKKyAg Q1VEQV9DQUxMX0FTU0VSVCAoY3VFdmVudENyZWF0ZSwgJmUsIENVX0VWRU5U X0RJU0FCTEVfVElNSU5HKTsKKyAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VFdmVu dFJlY29yZCwgZSwgYXExLT5jdWRhX3N0cmVhbSk7CisgIENVREFfQ0FMTF9B U1NFUlQgKGN1U3RyZWFtV2FpdEV2ZW50LCBhcTItPmN1ZGFfc3RyZWFtLCBl LCAwKTsKK30KKworc3RhdGljIHZvaWQKK2N1ZGFfY2FsbGJhY2tfd3JhcHBl ciAoQ1VzdHJlYW0gc3RyZWFtLCBDVXJlc3VsdCByZXMsIHZvaWQgKnB0cikK K3sKKyAgaWYgKHJlcyAhPSBDVURBX1NVQ0NFU1MpCisgICAgR09NUF9QTFVH SU5fZmF0YWwgKCIlcyBlcnJvcjogJXMiLCBfX0ZVTkNUSU9OX18sIGN1ZGFf ZXJyb3IgKHJlcykpOworICBzdHJ1Y3QgbnZwdHhfY2FsbGJhY2sgKmNiID0g KHN0cnVjdCBudnB0eF9jYWxsYmFjayAqKSBwdHI7CisgIGNiLT5mbiAoY2It PnB0cik7CisgIGZyZWUgKHB0cik7Cit9CisKK3ZvaWQKK0dPTVBfT0ZGTE9B RF9vcGVuYWNjX2FzeW5jX3F1ZXVlX2NhbGxiYWNrIChzdHJ1Y3QgZ29hY2Nf YXN5bmNxdWV1ZSAqYXEsCisJCQkJCSAgIHZvaWQgKCpjYWxsYmFja19mbiko dm9pZCAqKSwKKwkJCQkJICAgdm9pZCAqdXNlcnB0cikKK3sKKyAgc3RydWN0 IG52cHR4X2NhbGxiYWNrICpiID0gR09NUF9QTFVHSU5fbWFsbG9jIChzaXpl b2YgKCpiKSk7CisgIGItPmZuID0gY2FsbGJhY2tfZm47CisgIGItPnB0ciA9 IHVzZXJwdHI7CisgIGItPmFxID0gYXE7CisgIENVREFfQ0FMTF9BU1NFUlQg KGN1U3RyZWFtQWRkQ2FsbGJhY2ssIGFxLT5jdWRhX3N0cmVhbSwKKwkJICAg IGN1ZGFfY2FsbGJhY2tfd3JhcHBlciwgKHZvaWQgKikgYiwgMCk7Cit9CisK K3N0YXRpYyBib29sCitjdWRhX21lbWNweV9zYW5pdHlfY2hlY2sgKGNvbnN0 IHZvaWQgKmgsIGNvbnN0IHZvaWQgKmQsIHNpemVfdCBzKQoreworICBDVWRl dmljZXB0ciBwYjsKKyAgc2l6ZV90IHBzOworICBpZiAoIXMpCisgICAgcmV0 dXJuIHRydWU7CisgIGlmICghZCkKKyAgICB7CisgICAgICBHT01QX1BMVUdJ Tl9lcnJvciAoImludmFsaWQgZGV2aWNlIGFkZHJlc3MiKTsKKyAgICAgIHJl dHVybiBmYWxzZTsKKyAgICB9CisgIENVREFfQ0FMTCAoY3VNZW1HZXRBZGRy ZXNzUmFuZ2UsICZwYiwgJnBzLCAoQ1VkZXZpY2VwdHIpIGQpOworICBpZiAo IXBiKQorICAgIHsKKyAgICAgIEdPTVBfUExVR0lOX2Vycm9yICgiaW52YWxp ZCBkZXZpY2UgYWRkcmVzcyIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAg IH0KKyAgaWYgKCFoKQorICAgIHsKKyAgICAgIEdPTVBfUExVR0lOX2Vycm9y ICgiaW52YWxpZCBob3N0IGFkZHJlc3MiKTsKKyAgICAgIHJldHVybiBmYWxz ZTsKKyAgICB9CisgIGlmIChkID09IGgpCisgICAgeworICAgICAgR09NUF9Q TFVHSU5fZXJyb3IgKCJpbnZhbGlkIGhvc3Qgb3IgZGV2aWNlIGFkZHJlc3Mi KTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIGlmICgodm9pZCAq KShkICsgcykgPiAodm9pZCAqKShwYiArIHBzKSkKKyAgICB7CisgICAgICBH T01QX1BMVUdJTl9lcnJvciAoImludmFsaWQgc2l6ZSIpOworICAgICAgcmV0 dXJuIGZhbHNlOworICAgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wK K0dPTVBfT0ZGTE9BRF9ob3N0MmRldiAoaW50IG9yZCwgdm9pZCAqZHN0LCBj b25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQoreworICBpZiAoIW52cHR4X2F0 dGFjaF9ob3N0X3RocmVhZF90b19kZXZpY2UgKG9yZCkKKyAgICAgIHx8ICFj dWRhX21lbWNweV9zYW5pdHlfY2hlY2sgKHNyYywgZHN0LCBuKSkKKyAgICBy ZXR1cm4gZmFsc2U7CisgIENVREFfQ0FMTCAoY3VNZW1jcHlIdG9ELCAoQ1Vk ZXZpY2VwdHIpIGRzdCwgc3JjLCBuKTsKKyAgcmV0dXJuIHRydWU7Cit9CisK K2Jvb2wKK0dPTVBfT0ZGTE9BRF9kZXYyaG9zdCAoaW50IG9yZCwgdm9pZCAq ZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQoreworICBpZiAoIW52 cHR4X2F0dGFjaF9ob3N0X3RocmVhZF90b19kZXZpY2UgKG9yZCkKKyAgICAg IHx8ICFjdWRhX21lbWNweV9zYW5pdHlfY2hlY2sgKGRzdCwgc3JjLCBuKSkK KyAgICByZXR1cm4gZmFsc2U7CisgIENVREFfQ0FMTCAoY3VNZW1jcHlEdG9I LCBkc3QsIChDVWRldmljZXB0cikgc3JjLCBuKTsKKyAgcmV0dXJuIHRydWU7 Cit9CisKK2Jvb2wKK0dPTVBfT0ZGTE9BRF9kZXYyZGV2IChpbnQgb3JkLCB2 b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisgIENV REFfQ0FMTCAoY3VNZW1jcHlEdG9EQXN5bmMsIChDVWRldmljZXB0cikgZHN0 LCAoQ1VkZXZpY2VwdHIpIHNyYywgbiwgTlVMTCk7CisgIHJldHVybiB0cnVl OworfQorCitib29sCitHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19ob3N0 MmRldiAoaW50IG9yZCwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCisJ CQkJICAgICBzaXplX3Qgbiwgc3RydWN0IGdvYWNjX2FzeW5jcXVldWUgKmFx KQoreworICBpZiAoIW52cHR4X2F0dGFjaF9ob3N0X3RocmVhZF90b19kZXZp Y2UgKG9yZCkKKyAgICAgIHx8ICFjdWRhX21lbWNweV9zYW5pdHlfY2hlY2sg KHNyYywgZHN0LCBuKSkKKyAgICByZXR1cm4gZmFsc2U7CisgIENVREFfQ0FM TCAoY3VNZW1jcHlIdG9EQXN5bmMsIChDVWRldmljZXB0cikgZHN0LCBzcmMs IG4sIGFxLT5jdWRhX3N0cmVhbSk7CisgIHJldHVybiB0cnVlOworfQorCiti b29sCitHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19kZXYyaG9zdCAoaW50 IG9yZCwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCisJCQkJICAgICBz aXplX3Qgbiwgc3RydWN0IGdvYWNjX2FzeW5jcXVldWUgKmFxKQoreworICBp ZiAoIW52cHR4X2F0dGFjaF9ob3N0X3RocmVhZF90b19kZXZpY2UgKG9yZCkK KyAgICAgIHx8ICFjdWRhX21lbWNweV9zYW5pdHlfY2hlY2sgKGRzdCwgc3Jj LCBuKSkKKyAgICByZXR1cm4gZmFsc2U7CisgIENVREFfQ0FMTCAoY3VNZW1j cHlEdG9IQXN5bmMsIGRzdCwgKENVZGV2aWNlcHRyKSBzcmMsIG4sIGFxLT5j dWRhX3N0cmVhbSk7CisgIHJldHVybiB0cnVlOworfQorCiAvKiBBZGp1c3Qg bGF1bmNoIGRpbWVuc2lvbnM6IHBpY2sgZ29vZCB2YWx1ZXMgZm9yIG51bWJl ciBvZiBibG9ja3MgYW5kIHdhcnBzCiAgICBhbmQgZW5zdXJlIHRoYXQgbnVt YmVyIG9mIHdhcnBzIGRvZXMgbm90IGV4Y2VlZCBDVURBIGxpbWl0cyBhcyB3 ZWxsIGFzIEdDQydzCiAgICBvd24gbGltaXRzLiAgKi8KQEAgLTIyODEsOCAr MTYxNSw3IEBAIEdPTVBfT0ZGTE9BRF9ydW4gKGludCBvcmQsIHZvaWQgKnRn dF9mbiwgdm9pZCAqdGd0CiAgICAgQ1VfTEFVTkNIX1BBUkFNX0VORAogICB9 OwogICByID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1TGF1bmNoS2VybmVsLCBm dW5jdGlvbiwgdGVhbXMsIDEsIDEsCi0JCQkgMzIsIHRocmVhZHMsIDEsIDAs IHB0eF9kZXYtPm51bGxfc3RyZWFtLT5zdHJlYW0sCi0JCQkgTlVMTCwgY29u ZmlnKTsKKwkJCSAzMiwgdGhyZWFkcywgMSwgMCwgTlVMTCwgTlVMTCwgY29u ZmlnKTsKICAgaWYgKHIgIT0gQ1VEQV9TVUNDRVNTKQogICAgIEdPTVBfUExV R0lOX2ZhdGFsICgiY3VMYXVuY2hLZXJuZWwgZXJyb3I6ICVzIiwgY3VkYV9l cnJvciAocikpOwogCg== --------------8A120A116B18227059C96667--