From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 121965 invoked by alias); 18 Dec 2018 15:07:33 -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 121919 invoked by uid 89); 18 Dec 2018 15:07:30 -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=only, simultaneously, 8138, workers 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, 18 Dec 2018 15:07:19 +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 1gZGxp-0006Wx-Er from ChungLin_Tang@mentor.com ; Tue, 18 Dec 2018 07:07:17 -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, 18 Dec 2018 07:07:13 -0800 Subject: Re: [PATCH 6/6, OpenACC, libgomp] Async re-work, nvptx changes (revised, v3) 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, 18 Dec 2018 15:07: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="------------81BE6BCFE5C17E0274976211" X-SW-Source: 2018-12/txt/msg01313.txt.bz2 --------------81BE6BCFE5C17E0274976211 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-length: 2131 On 2018/12/11 9:50 PM, Chung-Lin Tang wrote: > 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. GOMP_OFFLOAD_openacc_async_construct is updated to return NULL for failure, there's also some adjustments in oacc-async.c, coming next. Chung-Lin --------------81BE6BCFE5C17E0274976211 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="06.nvptx.v2-v3.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="06.nvptx.v2-v3.diff" Content-length: 1147 ZGlmZiAtcnUgdHJ1bmstb3JpZy9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZw dHguYyB0cnVuay13b3JrL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0eC5j Ci0tLSB0cnVuay1vcmlnL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0eC5j CTIwMTgtMTItMTggMTg6MTY6NTcuODA0ODcxNTAyICswODAwCisrKyB0cnVu ay13b3JrL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0eC5jCTIwMTgtMTIt MTggMjI6MDc6NDMuNDgzMDY4NzQzICswODAwCkBAIC0xMzY0LDE2ICsxMzY0 LDEyIEBACiBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqCiBHT01QX09GRkxP QURfb3BlbmFjY19hc3luY19jb25zdHJ1Y3QgKHZvaWQpCiB7CisgIENVc3Ry ZWFtIHN0cmVhbSA9IE5VTEw7CisgIENVREFfQ0FMTF9FUkVUIChOVUxMLCBj dVN0cmVhbUNyZWF0ZSwgJnN0cmVhbSwgQ1VfU1RSRUFNX0RFRkFVTFQpOwor CiAgIHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICphcQogICAgID0gR09NUF9Q TFVHSU5fbWFsbG9jIChzaXplb2YgKHN0cnVjdCBnb2FjY19hc3luY3F1ZXVl KSk7Ci0gIGFxLT5jdWRhX3N0cmVhbSA9IE5VTEw7Ci0gIENVREFfQ0FMTF9B U1NFUlQgKGN1U3RyZWFtQ3JlYXRlLCAmYXEtPmN1ZGFfc3RyZWFtLCBDVV9T VFJFQU1fREVGQVVMVCk7Ci0gIGlmIChhcS0+Y3VkYV9zdHJlYW0gPT0gTlVM TCkKLSAgICBHT01QX1BMVUdJTl9mYXRhbCAoIkNVREEgc3RyZWFtIGNyZWF0 ZSBOVUxMXG4iKTsKLQotICBDVURBX0NBTExfQVNTRVJUIChjdVN0cmVhbVN5 bmNocm9uaXplLCBhcS0+Y3VkYV9zdHJlYW0pOwotCi0KKyAgYXEtPmN1ZGFf c3RyZWFtID0gc3RyZWFtOwogICByZXR1cm4gYXE7CiB9CiAK --------------81BE6BCFE5C17E0274976211 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="async-06.nvptx.v3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="async-06.nvptx.v3.patch" Content-length: 57784 SW5kZXg6IGxpYmdvbXAvcGx1Z2luL2N1ZGEvY3VkYS5oCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGxpYmdvbXAvcGx1Z2luL2N1ZGEvY3VkYS5oCShy ZXZpc2lvbiAyNjcyMjYpCisrKyBsaWJnb21wL3BsdWdpbi9jdWRhL2N1ZGEu aAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsMTEgQEAgdHlwZWRlZiBl bnVtIHsKICAgQ1VEQV9FUlJPUl9JTlZBTElEX0NPTlRFWFQgPSAyMDEsCiAg IENVREFfRVJST1JfTk9UX0ZPVU5EID0gNTAwLAogICBDVURBX0VSUk9SX05P VF9SRUFEWSA9IDYwMCwKLSAgQ1VEQV9FUlJPUl9MQVVOQ0hfRkFJTEVEID0g NzE5CisgIENVREFfRVJST1JfTEFVTkNIX0ZBSUxFRCA9IDcxOSwKKyAgQ1VE QV9FUlJPUl9DT09QRVJBVElWRV9MQVVOQ0hfVE9PX0xBUkdFID0gNzIwLAor ICBDVURBX0VSUk9SX05PVF9QRVJNSVRURUQgPSA4MDAsCisgIENVREFfRVJS T1JfTk9UX1NVUFBPUlRFRCA9IDgwMSwKKyAgQ1VEQV9FUlJPUl9VTktOT1dO ID0gOTk5CiB9IENVcmVzdWx0OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTcz LDYgKzE3Nyw4IEBAIENVcmVzdWx0IGN1TW9kdWxlTG9hZERhdGEgKENVbW9k dWxlICosIGNvbnN0IHZvaWQKIENVcmVzdWx0IGN1TW9kdWxlVW5sb2FkIChD VW1vZHVsZSk7CiBDVXJlc3VsdCBjdU9jY3VwYW5jeU1heFBvdGVudGlhbEJs b2NrU2l6ZShpbnQgKiwgaW50ICosIENVZnVuY3Rpb24sCiAJCQkJCSAgQ1Vv Y2N1cGFuY3lCMkRTaXplLCBzaXplX3QsIGludCk7Cit0eXBlZGVmIHZvaWQg KCpDVXN0cmVhbUNhbGxiYWNrKShDVXN0cmVhbSwgQ1VyZXN1bHQsIHZvaWQg Kik7CitDVXJlc3VsdCBjdVN0cmVhbUFkZENhbGxiYWNrKENVc3RyZWFtLCBD VXN0cmVhbUNhbGxiYWNrLCB2b2lkICosIHVuc2lnbmVkIGludCk7CiBDVXJl c3VsdCBjdVN0cmVhbUNyZWF0ZSAoQ1VzdHJlYW0gKiwgdW5zaWduZWQpOwog I2RlZmluZSBjdVN0cmVhbURlc3Ryb3kgY3VTdHJlYW1EZXN0cm95X3YyCiBD VXJlc3VsdCBjdVN0cmVhbURlc3Ryb3kgKENVc3RyZWFtKTsKSW5kZXg6IGxp YmdvbXAvcGx1Z2luL2N1ZGEtbGliLmRlZgo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBsaWJnb21wL3BsdWdpbi9jdWRhLWxpYi5kZWYJKHJldmlzaW9u IDI2NzIyNikKKysrIGxpYmdvbXAvcGx1Z2luL2N1ZGEtbGliLmRlZgkod29y a2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBDVURBX09ORV9DQUxMIChj dU1vZHVsZUxvYWQpCiBDVURBX09ORV9DQUxMIChjdU1vZHVsZUxvYWREYXRh KQogQ1VEQV9PTkVfQ0FMTCAoY3VNb2R1bGVVbmxvYWQpCiBDVURBX09ORV9D QUxMX01BWUJFX05VTEwgKGN1T2NjdXBhbmN5TWF4UG90ZW50aWFsQmxvY2tT aXplKQorQ1VEQV9PTkVfQ0FMTCAoY3VTdHJlYW1BZGRDYWxsYmFjaykKIENV REFfT05FX0NBTEwgKGN1U3RyZWFtQ3JlYXRlKQogQ1VEQV9PTkVfQ0FMTCAo Y3VTdHJlYW1EZXN0cm95KQogQ1VEQV9PTkVfQ0FMTCAoY3VTdHJlYW1RdWVy eSkKSW5kZXg6IGxpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0eC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGxpYmdvbXAvcGx1Z2luL3BsdWdpbi1u dnB0eC5jCShyZXZpc2lvbiAyNjcyMjYpCisrKyBsaWJnb21wL3BsdWdpbi9w 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 ZmFsc2UsIE5VTEwpOwotICBpZiAoIXMpCi0gICAgcmV0dXJuIDE7Ci0KLSAg ciA9IENVREFfQ0FMTF9OT0NIRUNLIChjdVN0cmVhbVF1ZXJ5LCBzLT5zdHJl YW0pOwotICBpZiAociA9PSBDVURBX1NVQ0NFU1MpCi0gICAgewotICAgICAg LyogVGhlIG9hY2MtcGFyYWxsZWwuYzpnb2FjY193YWl0IGZ1bmN0aW9uIGNh bGxzIHRoaXMgaG9vayB0byBkZXRlcm1pbmUKLQkgd2hldGhlciBhbGwgd29y ayBoYXMgY29tcGxldGVkIG9uIHRoaXMgc3RyZWFtLCBhbmQgaWYgc28gb21p dHMgdGhlIGNhbGwKLQkgdG8gdGhlIHdhaXQgaG9vay4gIElmIHRoYXQgaGFw cGVucywgZXZlbnRfZ2MgbWlnaHQgbm90IGdldCBjYWxsZWQKLQkgKHdoaWNo IHByZXZlbnRzIHZhcmlhYmxlcyBmcm9tIGdldHRpbmcgdW5tYXBwZWQgYW5k IHRoZWlyIGFzc29jaWF0ZWQKLQkgZGV2aWNlIHN0b3JhZ2UgZnJlZWQpLCBz byBjYWxsIGl0IGhlcmUuICAqLwotICAgICAgZXZlbnRfZ2MgKHRydWUpOwot ICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICBlbHNlIGlmIChyID09IENVREFf RVJST1JfTk9UX1JFQURZKQotICAgIHJldHVybiAwOwotCi0gIEdPTVBfUExV R0lOX2ZhdGFsICgiY3VTdHJlYW1RdWVyeSBlcnJvcjogJXMiLCBjdWRhX2Vy cm9yIChyKSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW52 cHR4X2FzeW5jX3Rlc3RfYWxsICh2b2lkKQotewotICBzdHJ1Y3QgcHR4X3N0 cmVhbSAqczsKLSAgcHRocmVhZF90IHNlbGYgPSBwdGhyZWFkX3NlbGYgKCk7 Ci0gIHN0cnVjdCBudnB0eF90aHJlYWQgKm52dGhkID0gbnZwdHhfdGhyZWFk ICgpOwotCi0gIHB0aHJlYWRfbXV0ZXhfbG9jayAoJm52dGhkLT5wdHhfZGV2 LT5zdHJlYW1fbG9jayk7Ci0KLSAgZm9yIChzID0gbnZ0aGQtPnB0eF9kZXYt PmFjdGl2ZV9zdHJlYW1zOyBzICE9IE5VTEw7IHMgPSBzLT5uZXh0KQotICAg IHsKLSAgICAgIGlmICgocy0+bXVsdGl0aHJlYWRlZCB8fCBwdGhyZWFkX2Vx dWFsIChzLT5ob3N0X3RocmVhZCwgc2VsZikpCi0JICAmJiBDVURBX0NBTExf Tk9DSEVDSyAoY3VTdHJlYW1RdWVyeSwKLQkJCQlzLT5zdHJlYW0pID09IENV REFfRVJST1JfTk9UX1JFQURZKQotCXsKLQkgIHB0aHJlYWRfbXV0ZXhfdW5s b2NrICgmbnZ0aGQtPnB0eF9kZXYtPnN0cmVhbV9sb2NrKTsKLQkgIHJldHVy biAwOwotCX0KLSAgICB9Ci0KLSAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZu dnRoZC0+cHR4X2Rldi0+c3RyZWFtX2xvY2spOwotCi0gIGV2ZW50X2djICh0 cnVlKTsKLQotICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQKLW52cHR4 X3dhaXQgKGludCBhc3luYykKLXsKLSAgc3RydWN0IHB0eF9zdHJlYW0gKnM7 Ci0KLSAgcyA9IHNlbGVjdF9zdHJlYW1fZm9yX2FzeW5jIChhc3luYywgcHRo cmVhZF9zZWxmICgpLCBmYWxzZSwgTlVMTCk7Ci0gIGlmICghcykKLSAgICBy ZXR1cm47Ci0KLSAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VTdHJlYW1TeW5jaHJv bml6ZSwgcy0+c3RyZWFtKTsKLQotICBldmVudF9nYyAodHJ1ZSk7Ci19Ci0K LXN0YXRpYyB2b2lkCi1udnB0eF93YWl0X2FzeW5jIChpbnQgYXN5bmMxLCBp bnQgYXN5bmMyKQotewotICBDVWV2ZW50ICplOwotICBzdHJ1Y3QgcHR4X3N0 cmVhbSAqczEsICpzMjsKLSAgcHRocmVhZF90IHNlbGYgPSBwdGhyZWFkX3Nl bGYgKCk7Ci0KLSAgczEgPSBzZWxlY3Rfc3RyZWFtX2Zvcl9hc3luYyAoYXN5 bmMxLCBzZWxmLCBmYWxzZSwgTlVMTCk7Ci0gIGlmICghczEpCi0gICAgcmV0 dXJuOwotCi0gIC8qIFRoZSBzdHJlYW0gdGhhdCBpcyB3YWl0aW5nIChyYXRo ZXIgdGhhbiBiZWluZyB3YWl0ZWQgZm9yKSBkb2Vzbid0Ci0gICAgIG5lY2Vz c2FyaWx5IGhhdmUgdG8gZXhpc3QgYWxyZWFkeS4gICovCi0gIHMyID0gc2Vs ZWN0X3N0cmVhbV9mb3JfYXN5bmMgKGFzeW5jMiwgc2VsZiwgdHJ1ZSwgTlVM TCk7Ci0KLSAgLyogQSBzdHJlYW0gaXMgYWx3YXlzIHN5bmNocm9uaXplZCB3 aXRoIGl0c2VsZi4gICovCi0gIGlmIChzMSA9PSBzMikKLSAgICByZXR1cm47 Ci0KLSAgZSA9IChDVWV2ZW50ICopIEdPTVBfUExVR0lOX21hbGxvYyAoc2l6 ZW9mIChDVWV2ZW50KSk7Ci0KLSAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VFdmVu dENyZWF0ZSwgZSwgQ1VfRVZFTlRfRElTQUJMRV9USU1JTkcpOwotCi0gIGV2 ZW50X2djICh0cnVlKTsKLQotICBDVURBX0NBTExfQVNTRVJUIChjdUV2ZW50 UmVjb3JkLCAqZSwgczEtPnN0cmVhbSk7Ci0KLSAgZXZlbnRfYWRkIChQVFhf RVZUX1NZTkMsIGUsIE5VTEwsIDApOwotCi0gIENVREFfQ0FMTF9BU1NFUlQg KGN1U3RyZWFtV2FpdEV2ZW50LCBzMi0+c3RyZWFtLCAqZSwgMCk7Ci19Ci0K LXN0YXRpYyB2b2lkCi1udnB0eF93YWl0X2FsbCAodm9pZCkKLXsKLSAgQ1Vy ZXN1bHQgcjsKLSAgc3RydWN0IHB0eF9zdHJlYW0gKnM7Ci0gIHB0aHJlYWRf dCBzZWxmID0gcHRocmVhZF9zZWxmICgpOwotICBzdHJ1Y3QgbnZwdHhfdGhy ZWFkICpudnRoZCA9IG52cHR4X3RocmVhZCAoKTsKLQotICBwdGhyZWFkX211 dGV4X2xvY2sgKCZudnRoZC0+cHR4X2Rldi0+c3RyZWFtX2xvY2spOwotCi0g IC8qIFdhaXQgZm9yIGFjdGl2ZSBzdHJlYW1zIGluaXRpYXRlZCBieSB0aGlz IHRocmVhZCAob3IgYnkgbXVsdGlwbGUgdGhyZWFkcykKLSAgICAgdG8gY29t cGxldGUuICAqLwotICBmb3IgKHMgPSBudnRoZC0+cHR4X2Rldi0+YWN0aXZl X3N0cmVhbXM7IHMgIT0gTlVMTDsgcyA9IHMtPm5leHQpCi0gICAgewotICAg ICAgaWYgKHMtPm11bHRpdGhyZWFkZWQgfHwgcHRocmVhZF9lcXVhbCAocy0+ aG9zdF90aHJlYWQsIHNlbGYpKQotCXsKLQkgIHIgPSBDVURBX0NBTExfTk9D SEVDSyAoY3VTdHJlYW1RdWVyeSwgcy0+c3RyZWFtKTsKLQkgIGlmIChyID09 IENVREFfU1VDQ0VTUykKLQkgICAgY29udGludWU7Ci0JICBlbHNlIGlmIChy ICE9IENVREFfRVJST1JfTk9UX1JFQURZKQotCSAgICBHT01QX1BMVUdJTl9m YXRhbCAoImN1U3RyZWFtUXVlcnkgZXJyb3I6ICVzIiwgY3VkYV9lcnJvciAo cikpOwotCi0JICBDVURBX0NBTExfQVNTRVJUIChjdVN0cmVhbVN5bmNocm9u aXplLCBzLT5zdHJlYW0pOwotCX0KLSAgICB9Ci0KLSAgcHRocmVhZF9tdXRl eF91bmxvY2sgKCZudnRoZC0+cHR4X2Rldi0+c3RyZWFtX2xvY2spOwotCi0g IGV2ZW50X2djICh0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQKLW52cHR4X3dh aXRfYWxsX2FzeW5jIChpbnQgYXN5bmMpCi17Ci0gIHN0cnVjdCBwdHhfc3Ry ZWFtICp3YWl0aW5nX3N0cmVhbSwgKm90aGVyX3N0cmVhbTsKLSAgQ1VldmVu dCAqZTsKLSAgc3RydWN0IG52cHR4X3RocmVhZCAqbnZ0aGQgPSBudnB0eF90 aHJlYWQgKCk7Ci0gIHB0aHJlYWRfdCBzZWxmID0gcHRocmVhZF9zZWxmICgp OwotCi0gIC8qIFRoZSBzdHJlYW0gZG9pbmcgdGhlIHdhaXRpbmcuICBUaGlz IGNvdWxkIGJlIHRoZSBmaXJzdCBtZW50aW9uIG9mIHRoZQotICAgICBzdHJl YW0sIHNvIGNyZWF0ZSBpdCBpZiBuZWNlc3NhcnkuICAqLwotICB3YWl0aW5n X3N0cmVhbQotICAgID0gc2VsZWN0X3N0cmVhbV9mb3JfYXN5bmMgKGFzeW5j LCBwdGhyZWFkX3NlbGYgKCksIHRydWUsIE5VTEwpOwotCi0gIC8qIExhdW5j aGVzIG9uIHRoZSBudWxsIHN0cmVhbSBhbHJlYWR5IGJsb2NrIG9uIG90aGVy IHN0cmVhbXMgaW4gdGhlCi0gICAgIGNvbnRleHQuICAqLwotICBpZiAoIXdh aXRpbmdfc3RyZWFtIHx8IHdhaXRpbmdfc3RyZWFtID09IG52dGhkLT5wdHhf ZGV2LT5udWxsX3N0cmVhbSkKLSAgICByZXR1cm47Ci0KLSAgZXZlbnRfZ2Mg KHRydWUpOwotCi0gIHB0aHJlYWRfbXV0ZXhfbG9jayAoJm52dGhkLT5wdHhf ZGV2LT5zdHJlYW1fbG9jayk7Ci0KLSAgZm9yIChvdGhlcl9zdHJlYW0gPSBu dnRoZC0+cHR4X2Rldi0+YWN0aXZlX3N0cmVhbXM7Ci0gICAgICAgb3RoZXJf c3RyZWFtICE9IE5VTEw7Ci0gICAgICAgb3RoZXJfc3RyZWFtID0gb3RoZXJf c3RyZWFtLT5uZXh0KQotICAgIHsKLSAgICAgIGlmICghb3RoZXJfc3RyZWFt LT5tdWx0aXRocmVhZGVkCi0JICAmJiAhcHRocmVhZF9lcXVhbCAob3RoZXJf c3RyZWFtLT5ob3N0X3RocmVhZCwgc2VsZikpCi0JY29udGludWU7Ci0KLSAg ICAgIGUgPSAoQ1VldmVudCAqKSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVv ZiAoQ1VldmVudCkpOwotCi0gICAgICBDVURBX0NBTExfQVNTRVJUIChjdUV2 ZW50Q3JlYXRlLCBlLCBDVV9FVkVOVF9ESVNBQkxFX1RJTUlORyk7Ci0KLSAg ICAgIC8qIFJlY29yZCBhbiBldmVudCBvbiB0aGUgd2FpdGVkLWZvciBzdHJl YW0uICAqLwotICAgICAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VFdmVudFJlY29y ZCwgKmUsIG90aGVyX3N0cmVhbS0+c3RyZWFtKTsKLQotICAgICAgZXZlbnRf YWRkIChQVFhfRVZUX1NZTkMsIGUsIE5VTEwsIDApOwotCi0gICAgICBDVURB X0NBTExfQVNTRVJUIChjdVN0cmVhbVdhaXRFdmVudCwgd2FpdGluZ19zdHJl YW0tPnN0cmVhbSwgKmUsIDApOwotICAgfQotCi0gIHB0aHJlYWRfbXV0ZXhf dW5sb2NrICgmbnZ0aGQtPnB0eF9kZXYtPnN0cmVhbV9sb2NrKTsKLX0KLQog c3RhdGljIHZvaWQgKgogbnZwdHhfZ2V0X2N1cnJlbnRfY3VkYV9kZXZpY2Ug KHZvaWQpCiB7CkBAIC0xNzMyLDc1ICs5NTMsNiBAQCBudnB0eF9nZXRfY3Vy cmVudF9jdWRhX2NvbnRleHQgKHZvaWQpCiAgIHJldHVybiBudnRoZC0+cHR4 X2Rldi0+Y3R4OwogfQogCi1zdGF0aWMgdm9pZCAqCi1udnB0eF9nZXRfY3Vk YV9zdHJlYW0gKGludCBhc3luYykKLXsKLSAgc3RydWN0IHB0eF9zdHJlYW0g KnM7Ci0gIHN0cnVjdCBudnB0eF90aHJlYWQgKm52dGhkID0gbnZwdHhfdGhy ZWFkICgpOwotCi0gIGlmICghbnZ0aGQgfHwgIW52dGhkLT5wdHhfZGV2KQot ICAgIHJldHVybiBOVUxMOwotCi0gIHMgPSBzZWxlY3Rfc3RyZWFtX2Zvcl9h c3luYyAoYXN5bmMsIHB0aHJlYWRfc2VsZiAoKSwgZmFsc2UsIE5VTEwpOwot Ci0gIHJldHVybiBzID8gcy0+c3RyZWFtIDogTlVMTDsKLX0KLQotc3RhdGlj IGludAotbnZwdHhfc2V0X2N1ZGFfc3RyZWFtIChpbnQgYXN5bmMsIHZvaWQg KnN0cmVhbSkKLXsKLSAgc3RydWN0IHB0eF9zdHJlYW0gKm9sZHN0cmVhbTsK LSAgcHRocmVhZF90IHNlbGYgPSBwdGhyZWFkX3NlbGYgKCk7Ci0gIHN0cnVj dCBudnB0eF90aHJlYWQgKm52dGhkID0gbnZwdHhfdGhyZWFkICgpOwotCi0g IC8qIER1ZSB0byB0aGUgIm51bGxfc3RyZWFtIiB1c2FnZSBmb3IgImFjY19h c3luY19zeW5jIiwgdGhpcyBjYW5ub3QgYmUgdXNlZAotICAgICB0byBjaGFu Z2UgdGhlIHN0cmVhbSBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoICJhY2NfYXN5 bmNfc3luYyIuICAqLwotICBpZiAoYXN5bmMgPT0gYWNjX2FzeW5jX3N5bmMp Ci0gICAgewotICAgICAgR09NUF9QTFVHSU5fZGVidWcgKDAsICJSZWZ1c2lu ZyByZXF1ZXN0IHRvIHNldCBDVURBIHN0cmVhbSBhc3NvY2lhdGVkIgotCQkJ ICIgd2l0aCBcImFjY19hc3luY19zeW5jXCJcbiIpOwotICAgICAgcmV0dXJu IDA7Ci0gICAgfQotCi0gIHB0aHJlYWRfbXV0ZXhfbG9jayAoJm52dGhkLT5w dHhfZGV2LT5zdHJlYW1fbG9jayk7Ci0KLSAgLyogV2UgaGF2ZSBhIGxpc3Qg b2YgYWN0aXZlIHN0cmVhbXMgYW5kIGFuIGFycmF5IG1hcHBpbmcgYXN5bmMg dmFsdWVzIHRvCi0gICAgIGVudHJpZXMgb2YgdGhhdCBsaXN0LiAgV2UgbmVl ZCB0byB0YWtlICJvd25lcnNoaXAiIG9mIHRoZSBwYXNzZWQtaW4gc3RyZWFt LAotICAgICBhbmQgYWRkIGl0IHRvIG91ciBsaXN0LCByZW1vdmluZyB0aGUg cHJldmlvdXMgZW50cnkgYWxzbyAoaWYgdGhlcmUgd2FzIG9uZSkKLSAgICAg aW4gb3JkZXIgdG8gcHJldmVudCByZXNvdXJjZSBsZWFrcy4gIE5vdGUgdGhl IHBvdGVudGlhbCBmb3Igc3VycHJpc2UKLSAgICAgaGVyZTogbWF5YmUgd2Ug c2hvdWxkIGtlZXAgdHJhY2sgb2YgcGFzc2VkLWluIHN0cmVhbXMgYW5kIGxl YXZlIGl0IHVwIHRvCi0gICAgIHRoZSB1c2VyIHRvIHRpZHkgdGhvc2UgdXAs IGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBmb3Igc3RyZWFtIGhhbmRsZXMKLSAg ICAgcmV0dXJuZWQgZnJvbSBhY2NfZ2V0X2N1ZGFfc3RyZWFtIGFib3ZlLi4u ICAqLwotCi0gIG9sZHN0cmVhbSA9IHNlbGVjdF9zdHJlYW1fZm9yX2FzeW5j IChhc3luYywgc2VsZiwgZmFsc2UsIE5VTEwpOwotCi0gIGlmIChvbGRzdHJl YW0pCi0gICAgewotICAgICAgaWYgKG52dGhkLT5wdHhfZGV2LT5hY3RpdmVf c3RyZWFtcyA9PSBvbGRzdHJlYW0pCi0JbnZ0aGQtPnB0eF9kZXYtPmFjdGl2 ZV9zdHJlYW1zID0gbnZ0aGQtPnB0eF9kZXYtPmFjdGl2ZV9zdHJlYW1zLT5u ZXh0OwotICAgICAgZWxzZQotCXsKLQkgIHN0cnVjdCBwdHhfc3RyZWFtICpz ID0gbnZ0aGQtPnB0eF9kZXYtPmFjdGl2ZV9zdHJlYW1zOwotCSAgd2hpbGUg KHMtPm5leHQgIT0gb2xkc3RyZWFtKQotCSAgICBzID0gcy0+bmV4dDsKLQkg IHMtPm5leHQgPSBzLT5uZXh0LT5uZXh0OwotCX0KLQotICAgICAgQ1VEQV9D QUxMX0FTU0VSVCAoY3VTdHJlYW1EZXN0cm95LCBvbGRzdHJlYW0tPnN0cmVh bSk7Ci0KLSAgICAgIGlmICghbWFwX2ZpbmkgKG9sZHN0cmVhbSkpCi0JR09N UF9QTFVHSU5fZmF0YWwgKCJlcnJvciB3aGVuIGZyZWVpbmcgaG9zdCBtZW1v cnkiKTsKLQotICAgICAgZnJlZSAob2xkc3RyZWFtKTsKLSAgICB9Ci0KLSAg cHRocmVhZF9tdXRleF91bmxvY2sgKCZudnRoZC0+cHR4X2Rldi0+c3RyZWFt X2xvY2spOwotCi0gICh2b2lkKSBzZWxlY3Rfc3RyZWFtX2Zvcl9hc3luYyAo YXN5bmMsIHNlbGYsIHRydWUsIChDVXN0cmVhbSkgc3RyZWFtKTsKLQotICBy ZXR1cm4gMTsKLX0KLQogLyogUGx1Z2luIGVudHJ5IHBvaW50cy4gICovCiAK IGNvbnN0IGNoYXIgKgpAQCAtMjAzNCw2ICsxMTg2LDIzIEBAIEdPTVBfT0ZG TE9BRF9hbGxvYyAoaW50IG9yZCwgc2l6ZV90IHNpemUpCiB7CiAgIGlmICgh bnZwdHhfYXR0YWNoX2hvc3RfdGhyZWFkX3RvX2RldmljZSAob3JkKSkKICAg ICByZXR1cm4gTlVMTDsKKworICBzdHJ1Y3QgcHR4X2RldmljZSAqcHR4X2Rl diA9IHB0eF9kZXZpY2VzW29yZF07CisgIHN0cnVjdCBwdHhfZnJlZV9ibG9j ayAqYmxvY2tzLCAqdG1wOworCisgIHB0aHJlYWRfbXV0ZXhfbG9jayAoJnB0 eF9kZXYtPmZyZWVfYmxvY2tzX2xvY2spOworICBibG9ja3MgPSBwdHhfZGV2 LT5mcmVlX2Jsb2NrczsKKyAgcHR4X2Rldi0+ZnJlZV9ibG9ja3MgPSBOVUxM OworICBwdGhyZWFkX211dGV4X3VubG9jayAoJnB0eF9kZXYtPmZyZWVfYmxv Y2tzX2xvY2spOworCisgIHdoaWxlIChibG9ja3MpCisgICAgeworICAgICAg dG1wID0gYmxvY2tzLT5uZXh0OworICAgICAgbnZwdHhfZnJlZSAoYmxvY2tz LT5wdHIsIHB0eF9kZXYpOworICAgICAgZnJlZSAoYmxvY2tzKTsKKyAgICAg IGJsb2NrcyA9IHRtcDsKKyAgICB9CisKICAgcmV0dXJuIG52cHR4X2FsbG9j IChzaXplKTsKIH0KIApAQCAtMjA0MSw5MyArMTIxMCw5MiBAQCBib29sCiBH T01QX09GRkxPQURfZnJlZSAoaW50IG9yZCwgdm9pZCAqcHRyKQogewogICBy ZXR1cm4gKG52cHR4X2F0dGFjaF9ob3N0X3RocmVhZF90b19kZXZpY2UgKG9y ZCkKLQkgICYmIG52cHR4X2ZyZWUgKHB0cikpOworCSAgJiYgbnZwdHhfZnJl ZSAocHRyLCBwdHhfZGV2aWNlc1tvcmRdKSk7CiB9CiAKLWJvb2wKLUdPTVBf T0ZGTE9BRF9kZXYyaG9zdCAoaW50IG9yZCwgdm9pZCAqZHN0LCBjb25zdCB2 b2lkICpzcmMsIHNpemVfdCBuKQotewotICByZXR1cm4gKG52cHR4X2F0dGFj aF9ob3N0X3RocmVhZF90b19kZXZpY2UgKG9yZCkKLQkgICYmIG52cHR4X2Rl djJob3N0IChkc3QsIHNyYywgbikpOwotfQotCi1ib29sCi1HT01QX09GRkxP QURfaG9zdDJkZXYgKGludCBvcmQsIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAq c3JjLCBzaXplX3QgbikKLXsKLSAgcmV0dXJuIChudnB0eF9hdHRhY2hfaG9z dF90aHJlYWRfdG9fZGV2aWNlIChvcmQpCi0JICAmJiBudnB0eF9ob3N0MmRl diAoZHN0LCBzcmMsIG4pKTsKLX0KLQotYm9vbAotR09NUF9PRkZMT0FEX2Rl djJkZXYgKGludCBvcmQsIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBz aXplX3QgbikKLXsKLSAgc3RydWN0IHB0eF9kZXZpY2UgKnB0eF9kZXYgPSBw dHhfZGV2aWNlc1tvcmRdOwotICBDVURBX0NBTEwgKGN1TWVtY3B5RHRvREFz eW5jLCAoQ1VkZXZpY2VwdHIpIGRzdCwgKENVZGV2aWNlcHRyKSBzcmMsIG4s Ci0JCQkJcHR4X2Rldi0+bnVsbF9zdHJlYW0tPnN0cmVhbSk7Ci0gIHJldHVy biB0cnVlOwotfQotCi12b2lkICgqZGV2aWNlX3J1bikgKGludCBuLCB2b2lk ICpmbl9wdHIsIHZvaWQgKnZhcnMpID0gTlVMTDsKLQogdm9pZAogR09NUF9P RkZMT0FEX29wZW5hY2NfZXhlYyAodm9pZCAoKmZuKSAodm9pZCAqKSwgc2l6 ZV90IG1hcG51bSwKIAkJCSAgIHZvaWQgKipob3N0YWRkcnMsIHZvaWQgKipk ZXZhZGRycywKLQkJCSAgIGludCBhc3luYywgdW5zaWduZWQgKmRpbXMsIHZv aWQgKnRhcmdfbWVtX2Rlc2MpCisJCQkgICB1bnNpZ25lZCAqZGltcywgdm9p ZCAqdGFyZ19tZW1fZGVzYykKIHsKLSAgbnZwdHhfZXhlYyAoZm4sIG1hcG51 bSwgaG9zdGFkZHJzLCBkZXZhZGRycywgYXN5bmMsIGRpbXMsIHRhcmdfbWVt X2Rlc2MpOwotfQorICBHT01QX1BMVUdJTl9kZWJ1ZyAoMCwgIiAgJXM6IHBy ZXBhcmUgbWFwcGluZ3NcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLXZvaWQKLUdP TVBfT0ZGTE9BRF9vcGVuYWNjX3JlZ2lzdGVyX2FzeW5jX2NsZWFudXAgKHZv aWQgKnRhcmdfbWVtX2Rlc2MsIGludCBhc3luYykKLXsKLSAgc3RydWN0IG52 cHR4X3RocmVhZCAqbnZ0aGQgPSBudnB0eF90aHJlYWQgKCk7Ci0gIENVZXZl bnQgKmUgPSAoQ1VldmVudCAqKSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVv ZiAoQ1VldmVudCkpOworICB2b2lkICoqaHAgPSBOVUxMOworICBDVWRldmlj ZXB0ciBkcCA9IDA7CiAKLSAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VFdmVudENy ZWF0ZSwgZSwgQ1VfRVZFTlRfRElTQUJMRV9USU1JTkcpOwotICBDVURBX0NB TExfQVNTRVJUIChjdUV2ZW50UmVjb3JkLCAqZSwgbnZ0aGQtPmN1cnJlbnRf c3RyZWFtLT5zdHJlYW0pOwotICBldmVudF9hZGQgKFBUWF9FVlRfQVNZTkNf Q0xFQU5VUCwgZSwgdGFyZ19tZW1fZGVzYywgYXN5bmMpOwotfQorICBpZiAo bWFwbnVtID4gMCkKKyAgICB7CisgICAgICBocCA9IGFsbG9jYSAobWFwbnVt ICogc2l6ZW9mICh2b2lkICopKTsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbWFwbnVtOyBpKyspCisJaHBbaV0gPSAoZGV2YWRkcnNbaV0gPyBkZXZh ZGRyc1tpXSA6IGhvc3RhZGRyc1tpXSk7CisgICAgICBDVURBX0NBTExfQVNT RVJUIChjdU1lbUFsbG9jLCAmZHAsIG1hcG51bSAqIHNpemVvZiAodm9pZCAq KSk7CisgICAgfQogCi1pbnQKLUdPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5j X3Rlc3QgKGludCBhc3luYykKLXsKLSAgcmV0dXJuIG52cHR4X2FzeW5jX3Rl c3QgKGFzeW5jKTsKLX0KKyAgLyogQ29weSB0aGUgKGRldmljZSkgcG9pbnRl cnMgdG8gYXJndW1lbnRzIHRvIHRoZSBkZXZpY2UgKGRwIGFuZCBocCBtaWdo dCBpbgorICAgICBmYWN0IGhhdmUgdGhlIHNhbWUgdmFsdWUgb24gYSB1bmlm aWVkLW1lbW9yeSBzeXN0ZW0pLiAgKi8KKyAgaWYgKG1hcG51bSA+IDApCisg ICAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VNZW1jcHlIdG9ELCBkcCwgKHZvaWQg KikgaHAsCisJCSAgICAgIG1hcG51bSAqIHNpemVvZiAodm9pZCAqKSk7CiAK LWludAotR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfdGVzdF9hbGwgKHZv aWQpCi17Ci0gIHJldHVybiBudnB0eF9hc3luY190ZXN0X2FsbCAoKTsKLX0K KyAgbnZwdHhfZXhlYyAoZm4sIG1hcG51bSwgaG9zdGFkZHJzLCBkZXZhZGRy cywgZGltcywgdGFyZ19tZW1fZGVzYywKKwkgICAgICBkcCwgTlVMTCk7CiAK LXZvaWQKLUdPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX3dhaXQgKGludCBh c3luYykKLXsKLSAgbnZwdHhfd2FpdCAoYXN5bmMpOworICBDVXJlc3VsdCBy ID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1U3RyZWFtU3luY2hyb25pemUsIE5V TEwpOworICBjb25zdCBjaGFyICptYXliZV9hYm9ydF9tc2cgPSAiKHBlcmhh cHMgYWJvcnQgd2FzIGNhbGxlZCkiOworICBpZiAociA9PSBDVURBX0VSUk9S X0xBVU5DSF9GQUlMRUQpCisgICAgR09NUF9QTFVHSU5fZmF0YWwgKCJjdVN0 cmVhbVN5bmNocm9uaXplIGVycm9yOiAlcyAlc1xuIiwgY3VkYV9lcnJvciAo ciksCisJCSAgICAgICBtYXliZV9hYm9ydF9tc2cpOworICBlbHNlIGlmIChy ICE9IENVREFfU1VDQ0VTUykKKyAgICBHT01QX1BMVUdJTl9mYXRhbCAoImN1 U3RyZWFtU3luY2hyb25pemUgZXJyb3I6ICVzIiwgY3VkYV9lcnJvciAocikp OworICBDVURBX0NBTExfQVNTRVJUIChjdU1lbUZyZWUsIGRwKTsKIH0KIAot dm9pZAotR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfd2FpdF9hc3luYyAo aW50IGFzeW5jMSwgaW50IGFzeW5jMikKK3N0YXRpYyB2b2lkCitjdWRhX2Zy ZWVfYXJnbWVtICh2b2lkICpwdHIpCiB7Ci0gIG52cHR4X3dhaXRfYXN5bmMg KGFzeW5jMSwgYXN5bmMyKTsKKyAgdm9pZCAqKmJsb2NrID0gKHZvaWQgKiop IHB0cjsKKyAgbnZwdHhfZnJlZSAoYmxvY2tbMF0sIChzdHJ1Y3QgcHR4X2Rl dmljZSAqKSBibG9ja1sxXSk7CisgIGZyZWUgKGJsb2NrKTsKIH0KIAogdm9p ZAotR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfd2FpdF9hbGwgKHZvaWQp CitHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19leGVjICh2b2lkICgqZm4p ICh2b2lkICopLCBzaXplX3QgbWFwbnVtLAorCQkJCSB2b2lkICoqaG9zdGFk ZHJzLCB2b2lkICoqZGV2YWRkcnMsCisJCQkJIHVuc2lnbmVkICpkaW1zLCB2 b2lkICp0YXJnX21lbV9kZXNjLAorCQkJCSBzdHJ1Y3QgZ29hY2NfYXN5bmNx dWV1ZSAqYXEpCiB7Ci0gIG52cHR4X3dhaXRfYWxsICgpOwotfQorICBHT01Q X1BMVUdJTl9kZWJ1ZyAoMCwgIiAgJXM6IHByZXBhcmUgbWFwcGluZ3NcbiIs IF9fRlVOQ1RJT05fXyk7CiAKLXZvaWQKLUdPTVBfT0ZGTE9BRF9vcGVuYWNj X2FzeW5jX3dhaXRfYWxsX2FzeW5jIChpbnQgYXN5bmMpCi17Ci0gIG52cHR4 X3dhaXRfYWxsX2FzeW5jIChhc3luYyk7Ci19CisgIHZvaWQgKipocCA9IE5V TEw7CisgIENVZGV2aWNlcHRyIGRwID0gMDsKKyAgdm9pZCAqKmJsb2NrID0g TlVMTDsKIAotdm9pZAotR09NUF9PRkZMT0FEX29wZW5hY2NfYXN5bmNfc2V0 X2FzeW5jIChpbnQgYXN5bmMpCi17Ci0gIG52cHR4X3NldF9hc3luYyAoYXN5 bmMpOworICBpZiAobWFwbnVtID4gMCkKKyAgICB7CisgICAgICBibG9jayA9 ICh2b2lkICoqKSBHT01QX1BMVUdJTl9tYWxsb2MgKChtYXBudW0gKyAyKSAq IHNpemVvZiAodm9pZCAqKSk7CisgICAgICBocCA9IGJsb2NrICsgMjsKKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFwbnVtOyBpKyspCisJaHBbaV0g PSAoZGV2YWRkcnNbaV0gPyBkZXZhZGRyc1tpXSA6IGhvc3RhZGRyc1tpXSk7 CisgICAgICBDVURBX0NBTExfQVNTRVJUIChjdU1lbUFsbG9jLCAmZHAsIG1h cG51bSAqIHNpemVvZiAodm9pZCAqKSk7CisgICAgfQorCisgIC8qIENvcHkg dGhlIChkZXZpY2UpIHBvaW50ZXJzIHRvIGFyZ3VtZW50cyB0byB0aGUgZGV2 aWNlIChkcCBhbmQgaHAgbWlnaHQgaW4KKyAgICAgZmFjdCBoYXZlIHRoZSBz YW1lIHZhbHVlIG9uIGEgdW5pZmllZC1tZW1vcnkgc3lzdGVtKS4gICovCisg IGlmIChtYXBudW0gPiAwKQorICAgIHsKKyAgICAgIENVREFfQ0FMTF9BU1NF UlQgKGN1TWVtY3B5SHRvREFzeW5jLCBkcCwgKHZvaWQgKikgaHAsCisJCQlt YXBudW0gKiBzaXplb2YgKHZvaWQgKiksIGFxLT5jdWRhX3N0cmVhbSk7Cisg ICAgICBibG9ja1swXSA9ICh2b2lkICopIGRwOworCisgICAgICBzdHJ1Y3Qg bnZwdHhfdGhyZWFkICpudnRoZCA9CisJKHN0cnVjdCBudnB0eF90aHJlYWQg KikgR09NUF9QTFVHSU5fYWNjX3RocmVhZCAoKTsKKyAgICAgIGJsb2NrWzFd ID0gKHZvaWQgKikgbnZ0aGQtPnB0eF9kZXY7CisgICAgfQorICBudnB0eF9l eGVjIChmbiwgbWFwbnVtLCBob3N0YWRkcnMsIGRldmFkZHJzLCBkaW1zLCB0 YXJnX21lbV9kZXNjLAorCSAgICAgIGRwLCBhcS0+Y3VkYV9zdHJlYW0pOwor CisgIGlmIChtYXBudW0gPiAwKQorICAgIEdPTVBfT0ZGTE9BRF9vcGVuYWNj X2FzeW5jX3F1ZXVlX2NhbGxiYWNrIChhcSwgY3VkYV9mcmVlX2FyZ21lbSwg YmxvY2spOwogfQogCiB2b2lkICoKQEAgLTIxNDksNyArMTMxNyw2IEBAIEdP TVBfT0ZGTE9BRF9vcGVuYWNjX2NyZWF0ZV90aHJlYWRfZGF0YSAoaW50IG9y ZCkKICAgaWYgKCF0aGRfY3R4KQogICAgIENVREFfQ0FMTF9BU1NFUlQgKGN1 Q3R4UHVzaEN1cnJlbnQsIHB0eF9kZXYtPmN0eCk7CiAKLSAgbnZ0aGQtPmN1 cnJlbnRfc3RyZWFtID0gcHR4X2Rldi0+bnVsbF9zdHJlYW07CiAgIG52dGhk LT5wdHhfZGV2ID0gcHR4X2RldjsKIAogICByZXR1cm4gKHZvaWQgKikgbnZ0 aGQ7CkBAIC0yMTc0LDIxICsxMzQxLDE4MyBAQCBHT01QX09GRkxPQURfb3Bl bmFjY19jdWRhX2dldF9jdXJyZW50X2NvbnRleHQgKHZvaQogfQogCiAvKiBO T1RFOiBUaGlzIHJldHVybnMgYSBDVXN0cmVhbSwgbm90IGEgcHR4X3N0cmVh bSBwb2ludGVyLiAgKi8KLQogdm9pZCAqCi1HT01QX09GRkxPQURfb3BlbmFj Y19jdWRhX2dldF9zdHJlYW0gKGludCBhc3luYykKK0dPTVBfT0ZGTE9BRF9v cGVuYWNjX2N1ZGFfZ2V0X3N0cmVhbSAoc3RydWN0IGdvYWNjX2FzeW5jcXVl dWUgKmFxKQogewotICByZXR1cm4gbnZwdHhfZ2V0X2N1ZGFfc3RyZWFtIChh c3luYyk7CisgIHJldHVybiAodm9pZCAqKSBhcS0+Y3VkYV9zdHJlYW07CiB9 CiAKIC8qIE5PVEU6IFRoaXMgdGFrZXMgYSBDVXN0cmVhbSwgbm90IGEgcHR4 X3N0cmVhbSBwb2ludGVyLiAgKi8KK2ludAorR09NUF9PRkZMT0FEX29wZW5h Y2NfY3VkYV9zZXRfc3RyZWFtIChzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAq YXEsIHZvaWQgKnN0cmVhbSkKK3sKKyAgaWYgKGFxLT5jdWRhX3N0cmVhbSkK KyAgICB7CisgICAgICBDVURBX0NBTExfQVNTRVJUIChjdVN0cmVhbVN5bmNo cm9uaXplLCBhcS0+Y3VkYV9zdHJlYW0pOworICAgICAgQ1VEQV9DQUxMX0FT U0VSVCAoY3VTdHJlYW1EZXN0cm95LCBhcS0+Y3VkYV9zdHJlYW0pOworICAg IH0KIAorICBhcS0+Y3VkYV9zdHJlYW0gPSAoQ1VzdHJlYW0pIHN0cmVhbTsK KyAgcmV0dXJuIDE7Cit9CisKK3N0cnVjdCBnb2FjY19hc3luY3F1ZXVlICoK K0dPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX2NvbnN0cnVjdCAodm9pZCkK K3sKKyAgQ1VzdHJlYW0gc3RyZWFtID0gTlVMTDsKKyAgQ1VEQV9DQUxMX0VS RVQgKE5VTEwsIGN1U3RyZWFtQ3JlYXRlLCAmc3RyZWFtLCBDVV9TVFJFQU1f REVGQVVMVCk7CisKKyAgc3RydWN0IGdvYWNjX2FzeW5jcXVldWUgKmFxCisg ICAgPSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IGdvYWNj X2FzeW5jcXVldWUpKTsKKyAgYXEtPmN1ZGFfc3RyZWFtID0gc3RyZWFtOwor ICByZXR1cm4gYXE7Cit9CisKK2Jvb2wKK0dPTVBfT0ZGTE9BRF9vcGVuYWNj X2FzeW5jX2Rlc3RydWN0IChzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXEp Cit7CisgIENVREFfQ0FMTF9FUkVUIChmYWxzZSwgY3VTdHJlYW1EZXN0cm95 LCBhcS0+Y3VkYV9zdHJlYW0pOworICBmcmVlIChhcSk7CisgIHJldHVybiB0 cnVlOworfQorCiBpbnQKLUdPTVBfT0ZGTE9BRF9vcGVuYWNjX2N1ZGFfc2V0 X3N0cmVhbSAoaW50IGFzeW5jLCB2b2lkICpzdHJlYW0pCitHT01QX09GRkxP QURfb3BlbmFjY19hc3luY190ZXN0IChzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1 ZSAqYXEpCiB7Ci0gIHJldHVybiBudnB0eF9zZXRfY3VkYV9zdHJlYW0gKGFz eW5jLCBzdHJlYW0pOworICBDVXJlc3VsdCByID0gQ1VEQV9DQUxMX05PQ0hF Q0sgKGN1U3RyZWFtUXVlcnksIGFxLT5jdWRhX3N0cmVhbSk7CisgIGlmIChy ID09IENVREFfU1VDQ0VTUykKKyAgICByZXR1cm4gMTsKKyAgaWYgKHIgPT0g Q1VEQV9FUlJPUl9OT1RfUkVBRFkpCisgICAgcmV0dXJuIDA7CisKKyAgR09N UF9QTFVHSU5fZXJyb3IgKCJjdVN0cmVhbVF1ZXJ5IGVycm9yOiAlcyIsIGN1 ZGFfZXJyb3IgKHIpKTsKKyAgcmV0dXJuIC0xOwogfQogCit2b2lkCitHT01Q X09GRkxPQURfb3BlbmFjY19hc3luY19zeW5jaHJvbml6ZSAoc3RydWN0IGdv YWNjX2FzeW5jcXVldWUgKmFxKQoreworICBDVURBX0NBTExfQVNTRVJUIChj dVN0cmVhbVN5bmNocm9uaXplLCBhcS0+Y3VkYV9zdHJlYW0pOworfQorCit2 b2lkCitHT01QX09GRkxPQURfb3BlbmFjY19hc3luY19zZXJpYWxpemUgKHN0 cnVjdCBnb2FjY19hc3luY3F1ZXVlICphcTEsCisJCQkJICAgICAgc3RydWN0 IGdvYWNjX2FzeW5jcXVldWUgKmFxMikKK3sKKyAgQ1VldmVudCBlOworICBD VURBX0NBTExfQVNTRVJUIChjdUV2ZW50Q3JlYXRlLCAmZSwgQ1VfRVZFTlRf RElTQUJMRV9USU1JTkcpOworICBDVURBX0NBTExfQVNTRVJUIChjdUV2ZW50 UmVjb3JkLCBlLCBhcTEtPmN1ZGFfc3RyZWFtKTsKKyAgQ1VEQV9DQUxMX0FT U0VSVCAoY3VTdHJlYW1XYWl0RXZlbnQsIGFxMi0+Y3VkYV9zdHJlYW0sIGUs IDApOworfQorCitzdGF0aWMgdm9pZAorY3VkYV9jYWxsYmFja193cmFwcGVy IChDVXN0cmVhbSBzdHJlYW0sIENVcmVzdWx0IHJlcywgdm9pZCAqcHRyKQor eworICBpZiAocmVzICE9IENVREFfU1VDQ0VTUykKKyAgICBHT01QX1BMVUdJ Tl9mYXRhbCAoIiVzIGVycm9yOiAlcyIsIF9fRlVOQ1RJT05fXywgY3VkYV9l cnJvciAocmVzKSk7CisgIHN0cnVjdCBudnB0eF9jYWxsYmFjayAqY2IgPSAo c3RydWN0IG52cHR4X2NhbGxiYWNrICopIHB0cjsKKyAgY2ItPmZuIChjYi0+ cHRyKTsKKyAgZnJlZSAocHRyKTsKK30KKwordm9pZAorR09NUF9PRkZMT0FE X29wZW5hY2NfYXN5bmNfcXVldWVfY2FsbGJhY2sgKHN0cnVjdCBnb2FjY19h c3luY3F1ZXVlICphcSwKKwkJCQkJICAgdm9pZCAoKmNhbGxiYWNrX2ZuKSh2 b2lkICopLAorCQkJCQkgICB2b2lkICp1c2VycHRyKQoreworICBzdHJ1Y3Qg bnZwdHhfY2FsbGJhY2sgKmIgPSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVv ZiAoKmIpKTsKKyAgYi0+Zm4gPSBjYWxsYmFja19mbjsKKyAgYi0+cHRyID0g dXNlcnB0cjsKKyAgYi0+YXEgPSBhcTsKKyAgQ1VEQV9DQUxMX0FTU0VSVCAo Y3VTdHJlYW1BZGRDYWxsYmFjaywgYXEtPmN1ZGFfc3RyZWFtLAorCQkgICAg Y3VkYV9jYWxsYmFja193cmFwcGVyLCAodm9pZCAqKSBiLCAwKTsKK30KKwor c3RhdGljIGJvb2wKK2N1ZGFfbWVtY3B5X3Nhbml0eV9jaGVjayAoY29uc3Qg dm9pZCAqaCwgY29uc3Qgdm9pZCAqZCwgc2l6ZV90IHMpCit7CisgIENVZGV2 aWNlcHRyIHBiOworICBzaXplX3QgcHM7CisgIGlmICghcykKKyAgICByZXR1 cm4gdHJ1ZTsKKyAgaWYgKCFkKQorICAgIHsKKyAgICAgIEdPTVBfUExVR0lO X2Vycm9yICgiaW52YWxpZCBkZXZpY2UgYWRkcmVzcyIpOworICAgICAgcmV0 dXJuIGZhbHNlOworICAgIH0KKyAgQ1VEQV9DQUxMIChjdU1lbUdldEFkZHJl c3NSYW5nZSwgJnBiLCAmcHMsIChDVWRldmljZXB0cikgZCk7CisgIGlmICgh cGIpCisgICAgeworICAgICAgR09NUF9QTFVHSU5fZXJyb3IgKCJpbnZhbGlk IGRldmljZSBhZGRyZXNzIik7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAg fQorICBpZiAoIWgpCisgICAgeworICAgICAgR09NUF9QTFVHSU5fZXJyb3Ig KCJpbnZhbGlkIGhvc3QgYWRkcmVzcyIpOworICAgICAgcmV0dXJuIGZhbHNl OworICAgIH0KKyAgaWYgKGQgPT0gaCkKKyAgICB7CisgICAgICBHT01QX1BM VUdJTl9lcnJvciAoImludmFsaWQgaG9zdCBvciBkZXZpY2UgYWRkcmVzcyIp OworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgaWYgKCh2b2lkICop KGQgKyBzKSA+ICh2b2lkICopKHBiICsgcHMpKQorICAgIHsKKyAgICAgIEdP TVBfUExVR0lOX2Vycm9yICgiaW52YWxpZCBzaXplIik7CisgICAgICByZXR1 cm4gZmFsc2U7CisgICAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbAor R09NUF9PRkZMT0FEX2hvc3QyZGV2IChpbnQgb3JkLCB2b2lkICpkc3QsIGNv bnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisgIGlmICghbnZwdHhfYXR0 YWNoX2hvc3RfdGhyZWFkX3RvX2RldmljZSAob3JkKQorICAgICAgfHwgIWN1 ZGFfbWVtY3B5X3Nhbml0eV9jaGVjayAoc3JjLCBkc3QsIG4pKQorICAgIHJl dHVybiBmYWxzZTsKKyAgQ1VEQV9DQUxMIChjdU1lbWNweUh0b0QsIChDVWRl dmljZXB0cikgZHN0LCBzcmMsIG4pOworICByZXR1cm4gdHJ1ZTsKK30KKwor Ym9vbAorR09NUF9PRkZMT0FEX2RldjJob3N0IChpbnQgb3JkLCB2b2lkICpk c3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisgIGlmICghbnZw dHhfYXR0YWNoX2hvc3RfdGhyZWFkX3RvX2RldmljZSAob3JkKQorICAgICAg fHwgIWN1ZGFfbWVtY3B5X3Nhbml0eV9jaGVjayAoZHN0LCBzcmMsIG4pKQor ICAgIHJldHVybiBmYWxzZTsKKyAgQ1VEQV9DQUxMIChjdU1lbWNweUR0b0gs IGRzdCwgKENVZGV2aWNlcHRyKSBzcmMsIG4pOworICByZXR1cm4gdHJ1ZTsK K30KKworYm9vbAorR09NUF9PRkZMT0FEX2RldjJkZXYgKGludCBvcmQsIHZv aWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKK3sKKyAgQ1VE QV9DQUxMIChjdU1lbWNweUR0b0RBc3luYywgKENVZGV2aWNlcHRyKSBkc3Qs IChDVWRldmljZXB0cikgc3JjLCBuLCBOVUxMKTsKKyAgcmV0dXJuIHRydWU7 Cit9CisKK2Jvb2wKK0dPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX2hvc3Qy ZGV2IChpbnQgb3JkLCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKKwkJ CQkgICAgIHNpemVfdCBuLCBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXEp Cit7CisgIGlmICghbnZwdHhfYXR0YWNoX2hvc3RfdGhyZWFkX3RvX2Rldmlj ZSAob3JkKQorICAgICAgfHwgIWN1ZGFfbWVtY3B5X3Nhbml0eV9jaGVjayAo c3JjLCBkc3QsIG4pKQorICAgIHJldHVybiBmYWxzZTsKKyAgQ1VEQV9DQUxM IChjdU1lbWNweUh0b0RBc3luYywgKENVZGV2aWNlcHRyKSBkc3QsIHNyYywg biwgYXEtPmN1ZGFfc3RyZWFtKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jv b2wKK0dPTVBfT0ZGTE9BRF9vcGVuYWNjX2FzeW5jX2RldjJob3N0IChpbnQg b3JkLCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKKwkJCQkgICAgIHNp emVfdCBuLCBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXEpCit7CisgIGlm ICghbnZwdHhfYXR0YWNoX2hvc3RfdGhyZWFkX3RvX2RldmljZSAob3JkKQor ICAgICAgfHwgIWN1ZGFfbWVtY3B5X3Nhbml0eV9jaGVjayAoZHN0LCBzcmMs IG4pKQorICAgIHJldHVybiBmYWxzZTsKKyAgQ1VEQV9DQUxMIChjdU1lbWNw eUR0b0hBc3luYywgZHN0LCAoQ1VkZXZpY2VwdHIpIHNyYywgbiwgYXEtPmN1 ZGFfc3RyZWFtKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKIC8qIEFkanVzdCBs YXVuY2ggZGltZW5zaW9uczogcGljayBnb29kIHZhbHVlcyBmb3IgbnVtYmVy IG9mIGJsb2NrcyBhbmQgd2FycHMKICAgIGFuZCBlbnN1cmUgdGhhdCBudW1i ZXIgb2Ygd2FycHMgZG9lcyBub3QgZXhjZWVkIENVREEgbGltaXRzIGFzIHdl bGwgYXMgR0NDJ3MKICAgIG93biBsaW1pdHMuICAqLwpAQCAtMjI4Nyw4ICsx NjE2LDcgQEAgR09NUF9PRkZMT0FEX3J1biAoaW50IG9yZCwgdm9pZCAqdGd0 X2ZuLCB2b2lkICp0Z3QKICAgICBDVV9MQVVOQ0hfUEFSQU1fRU5ECiAgIH07 CiAgIHIgPSBDVURBX0NBTExfTk9DSEVDSyAoY3VMYXVuY2hLZXJuZWwsIGZ1 bmN0aW9uLCB0ZWFtcywgMSwgMSwKLQkJCSAzMiwgdGhyZWFkcywgMSwgMCwg cHR4X2Rldi0+bnVsbF9zdHJlYW0tPnN0cmVhbSwKLQkJCSBOVUxMLCBjb25m aWcpOworCQkJIDMyLCB0aHJlYWRzLCAxLCAwLCBOVUxMLCBOVUxMLCBjb25m aWcpOwogICBpZiAociAhPSBDVURBX1NVQ0NFU1MpCiAgICAgR09NUF9QTFVH SU5fZmF0YWwgKCJjdUxhdW5jaEtlcm5lbCBlcnJvcjogJXMiLCBjdWRhX2Vy cm9yIChyKSk7CiAK --------------81BE6BCFE5C17E0274976211--