From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id CBE983858D33 for ; Thu, 16 Feb 2023 18:06:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CBE983858D33 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.97,302,1669104000"; d="scan'208";a="97261490" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 16 Feb 2023 10:06:46 -0800 IronPort-SDR: mqd2HuWTTXoJNR3OHRs5mamj9wyt07ahXAQvPlgYnB7x6Pnph3W8X6JW9gM0qxrZeXifckvVKS 8xwi9pc51yjJv0u3eZ6BLq3jeWWXR+Ie6jHaOMpc24f0DziBt5/y3WP8y8hKjl3UCt0xrB0icM UzrCKSRzVujpkD2G6sh6pVDoURfJj08IApUSCVgmlALr8DtlS96MVHJ2+OOc9KZU298mVYFGHB cZMy7dv9kY3Z6ntk4GjEj3AubmW3CnnPDupb271sych6f09ixZozHiaypOojOOIQTNMw33JalS uso= Content-Type: multipart/mixed; boundary="------------BpR3iAtoxC0Yu46FjlrmDx00" Message-ID: <5eaeddf5-317a-4574-868b-87999bb6af33@codesourcery.com> Date: Thu, 16 Feb 2023 18:06:41 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Content-Language: en-GB To: "gcc-patches@gcc.gnu.org" From: Andrew Stubbs Subject: [OG12][committed] amdgcn: OpenMP low-latency allocator X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) To svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------BpR3iAtoxC0Yu46FjlrmDx00 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit These patches implement an LDS memory allocator for OpenMP on AMD. 1. 230216-basic-allocator.patch Separate the allocator from NVPTX so the code can be shared. 2. 230216-amd-low-lat.patch Allocate the memory, adjust the default address space, and hook up the allocator. They will need to be integrated with the rest of the memory management patch-stack when I repost that for mainline. Andrew --------------BpR3iAtoxC0Yu46FjlrmDx00 Content-Type: text/plain; charset="UTF-8"; name="230216-basic-allocator.patch" Content-Disposition: attachment; filename="230216-basic-allocator.patch" Content-Transfer-Encoding: base64 bnZwdHgsIGxpYmdvbXA6IE1vdmUgdGhlIGxvdy1sYXRlbmN5IGFsbG9jYXRvciBjb2RlCgpU aGVyZSBzaG91bGRuJ3QgYmUgYSBmdW5jdGlvbmFsaXR5IGNoYW5nZTsgdGhpcyBpcyBqdXN0 IHNvIEFNRCBjYW4gc2hhcmUKdGhlIGNvZGUuCgpUaGUgbmV3IGJhc2ljLWFsbG9jYXRvci5j IGlzIGRlc2lnbmVkIHRvIGJlIGluY2x1ZGVkIHNvIGl0IGNhbiBiZSB1c2VkIGFzIGEKdGVt cGxhdGUgbXVsdGlwbGUgdGltZXMgYW5kIGlubGluZWQuCgpsaWJnb21wL0NoYW5nZUxvZzoK CgkqIGNvbmZpZy9udnB0eC9hbGxvY2F0b3IuYyAoQkFTSUNfQUxMT0NfUFJFRklYKTogTmV3 IGRlZmluZSwgYW5kCglpbmNsdWRlIGJhc2ljLWFsbG9jYXRvci5jLgoJKF9fbnZwdHhfbG93 bGF0X2hlYXBfcm9vdCk6IFJlbW92ZS4KCShoZWFwZGVzYyk6IFJlbW92ZS4KCShudnB0eF9t ZW1zcGFjZV9hbGxvYyk6IE1vdmUgaW1wbGVtZW50YXRpb24gdG8gYmFzaWMtYWxsb2NhdG9y LmMuCgkobnZwdHhfbWVtc3BhY2VfY2FsbG9jKTogTGlrZXdpc2UuCgkobnZwdHhfbWVtc3Bh Y2VfZnJlZSk6IExpa2V3aXNlLgoJKG52cHR4X21lbXNwYWNlX3JlYWxsb2MpOiBMaWtld2lz ZS4KCSogY29uZmlnL252cHR4L3RlYW0uYyAoX19udnB0eF9sb3dsYXRfaGVhcF9yb290KTog UmVtb3ZlLgoJKGdvbXBfbnZwdHhfbWFpbik6IENhbGwgX19udnB0eF9sb3dsYXRfaW5pdC4K CSogYmFzaWMtYWxsb2NhdG9yLmM6IE5ldyBmaWxlLgoKZGlmZiAtLWdpdCBhL2xpYmdvbXAv YmFzaWMtYWxsb2NhdG9yLmMgYi9saWJnb21wL2Jhc2ljLWFsbG9jYXRvci5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NGI5OWE4OWUwYgotLS0gL2Rldi9u dWxsCisrKyBiL2xpYmdvbXAvYmFzaWMtYWxsb2NhdG9yLmMKQEAgLTAsMCArMSwzODAgQEAK Ky8qIENvcHlyaWdodCAoQykgMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBPZmZsb2FkaW5nIGFuZCBNdWx0 aSBQcm9jZXNzaW5nIExpYnJhcnkKKyAgIChsaWJnb21wKS4KKworICAgTGliZ29tcCBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIExpYmdvbXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgICBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT CisgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvcgorICAgbW9yZSBkZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9u IDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyAgIHBl cm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRp b24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgYSBjb3B5IG9mIHRoZSBH Q0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsK KyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0 aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LiAgKi8KKworLyogVGhpcyBpcyBhIGJhc2ljICJtYWxsb2MiIGltcGxlbWVudGF0aW9uIGlu dGVuZGVkIGZvciB1c2Ugd2l0aCBzbWFsbCwKKyAgIGxvdy1sYXRlbmN5IG1lbW9yaWVzLgor CisgICBUbyB1c2UgdGhpcyB0ZW1wbGF0ZSwgZGVmaW5lIEJBU0lDX0FMTE9DX1BSRUZJWCwg YW5kIHRoZW4gI2luY2x1ZGUgdGhlCisgICBzb3VyY2UgZmlsZS4gIFRoZSBvdGhlciBjb25m aWd1cmF0aW9uIG1hY3JvcyBhcmUgb3B0aW9uYWwuCisKKyAgIFRoZSByb290IGhlYXAgZGVz Y3JpcHRvciBpcyBzdG9yZWQgaW4gdGhlIGZpcnN0IGJ5dGVzIG9mIHRoZSBoZWFwLCBhbmQg ZWFjaAorICAgZnJlZSBjaHVuayBjb250YWlucyBhIHNpbWlsYXIgZGVzY3JpcHRvciBmb3Ig dGhlIG5leHQgZnJlZSBjaHVuayBpbiB0aGUKKyAgIGNoYWluLgorCisgICBUaGUgZGVzY3Jp cHRvciBpcyB0d28gdmFsdWVzOiBvZmZzZXQgYW5kIHNpemUsIHdoaWNoIGRlc2NyaWJlIHRo ZQorICAgbG9jYXRpb24gb2YgYSBjaHVuayBvZiBtZW1vcnkgYXZhaWxhYmxlIGZvciBhbGxv Y2F0aW9uLiBUaGUgb2Zmc2V0IGlzCisgICByZWxhdGl2ZSB0byB0aGUgYmFzZSBvZiB0aGUg aGVhcC4gIFRoZSBzcGVjaWFsIG9mZnNldCB2YWx1ZSAweGZmZmZmZmZmCisgICBpbmRpY2F0 ZXMgdGhhdCB0aGUgaGVhcCAoZnJlZSBjaGFpbikgaXMgbG9ja2VkLiAgVGhlIG9mZnNldCBh bmQgc2l6ZSBhcmUKKyAgIDMyLWJpdCB2YWx1ZXMgc28gdGhlIGJhc2UgYWxpZ25tZW50IGNh biBiZSA4LWJ5dGVzLgorCisgICBNZW1vcnkgaXMgYWxsb2NhdGVkIHRvIHRoZSBmaXJzdCBm cmVlIGNodW5rIHRoYXQgZml0cy4gIFRoZSBmcmVlIGNoYWluCisgICBpcyBhbHdheXMgc3Rv cmVkIGluIG9yZGVyIG9mIHRoZSBvZmZzZXQgdG8gYXNzaXN0IGNvYWxlc2NpbmcgYWRqYWNl bnQKKyAgIGNodW5rcy4gICovCisKKyNpbmNsdWRlICJsaWJnb21wLmgiCisKKyNpZm5kZWYg QkFTSUNfQUxMT0NfUFJFRklYCisjZXJyb3IgIkJBU0lDX0FMTE9DX1BSRUZJWCBub3QgZGVm aW5lZC4iCisjZW5kaWYKKworI2lmbmRlZiBCQVNJQ19BTExPQ19ZSUVMRAorI2RlaW5lIEJB U0lDX0FMTE9DX1lJRUxECisjZW5kaWYKKworI2RlZmluZSBBTElHTihWQVIpICgoKFZBUikg KyA3KSAmIH43KSAgICAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkuICAqLworCisjZGVmaW5lIGZu MShwcmVmaXgsIG5hbWUpIHByZWZpeCAjIyBfICMjIG5hbWUKKyNkZWZpbmUgZm4ocHJlZml4 LCBuYW1lKSBmbjEgKHByZWZpeCwgbmFtZSkKKyNkZWZpbmUgYmFzaWNfYWxsb2NfaW5pdCBm bihCQVNJQ19BTExPQ19QUkVGSVgsaW5pdCkKKyNkZWZpbmUgYmFzaWNfYWxsb2NfYWxsb2Mg Zm4oQkFTSUNfQUxMT0NfUFJFRklYLGFsbG9jKQorI2RlZmluZSBiYXNpY19hbGxvY19jYWxs b2MgZm4oQkFTSUNfQUxMT0NfUFJFRklYLGNhbGxvYykKKyNkZWZpbmUgYmFzaWNfYWxsb2Nf ZnJlZSBmbihCQVNJQ19BTExPQ19QUkVGSVgsZnJlZSkKKyNkZWZpbmUgYmFzaWNfYWxsb2Nf cmVhbGxvYyBmbihCQVNJQ19BTExPQ19QUkVGSVgscmVhbGxvYykKKwordHlwZWRlZiBzdHJ1 Y3QgeworICB1aW50MzJfdCBvZmZzZXQ7CisgIHVpbnQzMl90IHNpemU7Cit9IGhlYXBkZXNj OworCit2b2lkCitiYXNpY19hbGxvY19pbml0IChjaGFyICpoZWFwLCBzaXplX3QgbGltaXQp Cit7CisgIGlmIChoZWFwID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIC8qIEluaXRpYWxp emUgdGhlIGhlYWQgb2YgdGhlIGZyZWUgY2hhaW4uICAqLworICBoZWFwZGVzYyAqcm9vdCA9 IChoZWFwZGVzYyopaGVhcDsKKyAgcm9vdC0+b2Zmc2V0ID0gQUxJR04oMSk7CisgIHJvb3Qt PnNpemUgPSBsaW1pdCAtIHJvb3QtPm9mZnNldDsKKworICAvKiBBbmQgdGVybWluYXRlIHRo ZSBjaGFpbi4gICovCisgIGhlYXBkZXNjICpuZXh0ID0gKGhlYXBkZXNjKikoaGVhcCArIHJv b3QtPm9mZnNldCk7CisgIG5leHQtPm9mZnNldCA9IDA7CisgIG5leHQtPnNpemUgPSAwOwor fQorCitzdGF0aWMgdm9pZCAqCitiYXNpY19hbGxvY19hbGxvYyAoY2hhciAqaGVhcCwgc2l6 ZV90IHNpemUpCit7CisgIGlmIChoZWFwID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisK KyAgLyogTWVtb3J5IGlzIGFsbG9jYXRlZCBpbiBOLWJ5dGUgZ3JhbnVsYXJpdHkuICAqLwor ICBzaXplID0gQUxJR04gKHNpemUpOworCisgIC8qIEFjcXVpcmUgYSBsb2NrIG9uIHRoZSBs b3ctbGF0ZW5jeSBoZWFwLiAgKi8KKyAgaGVhcGRlc2Mgcm9vdCwgKnJvb3RfcHRyID0gKGhl YXBkZXNjKiloZWFwOworICBkbworICAgIHsKKyAgICAgIHJvb3Qub2Zmc2V0ID0gX19hdG9t aWNfZXhjaGFuZ2VfbiAoJnJvb3RfcHRyLT5vZmZzZXQsIDB4ZmZmZmZmZmYsIAorCQkJCQkg TUVNTU9ERUxfQUNRVUlSRSk7CisgICAgICBpZiAocm9vdC5vZmZzZXQgIT0gMHhmZmZmZmZm ZikKKwl7CisJICByb290LnNpemUgPSByb290X3B0ci0+c2l6ZTsKKwkgIGJyZWFrOworCX0K KyAgICAgIC8qIFNwaW4uICAqLworICAgICAgQkFTSUNfQUxMT0NfWUlFTEQ7CisgICAgfQor ICB3aGlsZSAoMSk7CisKKyAgLyogV2FsayB0aGUgZnJlZSBjaGFpbi4gICovCisgIGhlYXBk ZXNjIGNodW5rID0gcm9vdDsKKyAgaGVhcGRlc2MgKnByZXZfY2h1bmtwdHIgPSBOVUxMOwor ICBoZWFwZGVzYyAqY2h1bmtwdHIgPSAoaGVhcGRlc2MqKShoZWFwICsgY2h1bmsub2Zmc2V0 KTsKKyAgaGVhcGRlc2Mgb253YXJkX2NoYWluID0gKmNodW5rcHRyOworICB3aGlsZSAoY2h1 bmsuc2l6ZSAhPSAwICYmICh1aW50MzJfdClzaXplID4gY2h1bmsuc2l6ZSkKKyAgICB7Cisg ICAgICBjaHVuayA9IG9ud2FyZF9jaGFpbjsKKyAgICAgIHByZXZfY2h1bmtwdHIgPSBjaHVu a3B0cjsKKyAgICAgIGNodW5rcHRyID0gKGhlYXBkZXNjKikoaGVhcCArIGNodW5rLm9mZnNl dCk7CisgICAgICBvbndhcmRfY2hhaW4gPSAqY2h1bmtwdHI7CisgICAgfQorCisgIHZvaWQg KnJlc3VsdCA9IE5VTEw7CisgIGlmIChjaHVuay5zaXplICE9IDApCisgICAgeworICAgICAg LyogQWxsb2NhdGlvbiBzdWNjZXNzZnVsLiAgKi8KKyAgICAgIHJlc3VsdCA9IGNodW5rcHRy OworCisgICAgICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hhaW4uICAqLworICAgICAgaGVhcGRl c2Mgc3RpbGxmcmVlID0gY2h1bms7CisgICAgICBzdGlsbGZyZWUub2Zmc2V0ICs9IHNpemU7 CisgICAgICBzdGlsbGZyZWUuc2l6ZSAtPSBzaXplOworICAgICAgaGVhcGRlc2MgKnN0aWxs ZnJlZXB0ciA9IChoZWFwZGVzYyopKGhlYXAgKyBzdGlsbGZyZWUub2Zmc2V0KTsKKworICAg ICAgaWYgKHN0aWxsZnJlZS5zaXplID09IDApCisJLyogVGhlIHdob2xlIGNodW5rIHdhcyB1 c2VkLiAgKi8KKwlzdGlsbGZyZWUgPSBvbndhcmRfY2hhaW47CisgICAgICBlbHNlCisJLyog VGhlIGNodW5rIHdhcyBzcGxpdCwgc28gcmVzdG9yZSB0aGUgb253YXJkIGNoYWluLiAgKi8K Kwkqc3RpbGxmcmVlcHRyID0gb253YXJkX2NoYWluOworCisgICAgICAvKiBUaGUgcHJldmlv dXMgZnJlZSBzbG90IG9yIHJvb3Qgbm93IHBvaW50cyB0byBzdGlsbGZyZWUuICAqLworICAg ICAgaWYgKHByZXZfY2h1bmtwdHIpCisJKnByZXZfY2h1bmtwdHIgPSBzdGlsbGZyZWU7Cisg ICAgICBlbHNlCisJcm9vdCA9IHN0aWxsZnJlZTsKKyAgICB9CisKKyAgLyogVXBkYXRlIHRo ZSBmcmVlIGNoYWluIHJvb3QgYW5kIHJlbGVhc2UgdGhlIGxvY2suICAqLworICByb290X3B0 ci0+c2l6ZSA9IHJvb3Quc2l6ZTsKKyAgX19hdG9taWNfc3RvcmVfbiAoJnJvb3RfcHRyLT5v ZmZzZXQsIHJvb3Qub2Zmc2V0LCBNRU1NT0RFTF9SRUxFQVNFKTsKKworICByZXR1cm4gcmVz dWx0OworfQorCitzdGF0aWMgdm9pZCAqCitiYXNpY19hbGxvY19jYWxsb2MgKGNoYXIgKmhl YXAsIHNpemVfdCBzaXplKQoreworICAvKiBNZW1vcnkgaXMgYWxsb2NhdGVkIGluIE4tYnl0 ZSBncmFudWxhcml0eS4gICovCisgIHNpemUgPSBBTElHTiAoc2l6ZSk7CisKKyAgdWludDY0 X3QgKnJlc3VsdCA9IGJhc2ljX2FsbG9jX2FsbG9jIChoZWFwLCBzaXplKTsKKyAgaWYgKHJl c3VsdCkKKyAgICAvKiBJbmxpbmUgbWVtc2V0IGluIHdoaWNoIHdlIGtub3cgc2l6ZSBpcyBh IG11bHRpcGxlIG9mIDguICAqLworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAodW5z aWduZWQpc2l6ZS84OyBpKyspCisgICAgcmVzdWx0W2ldID0gMDsKKworICByZXR1cm4gcmVz dWx0OworfQorCitzdGF0aWMgdm9pZAorYmFzaWNfYWxsb2NfZnJlZSAoY2hhciAqaGVhcCwg dm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCit7CisgIC8qIE1lbW9yeSBpcyBhbGxvY2F0ZWQg aW4gTi1ieXRlIGdyYW51bGFyaXR5LiAgKi8KKyAgc2l6ZSA9IEFMSUdOIChzaXplKTsKKwor ICAvKiBBY3F1aXJlIGEgbG9jayBvbiB0aGUgbG93LWxhdGVuY3kgaGVhcC4gICovCisgIGhl YXBkZXNjIHJvb3QsICpyb290X3B0ciA9IChoZWFwZGVzYyopaGVhcDsKKyAgZG8KKyAgICB7 CisgICAgICByb290Lm9mZnNldCA9IF9fYXRvbWljX2V4Y2hhbmdlX24gKCZyb290X3B0ci0+ b2Zmc2V0LCAweGZmZmZmZmZmLCAKKwkJCQkJIE1FTU1PREVMX0FDUVVJUkUpOworICAgICAg aWYgKHJvb3Qub2Zmc2V0ICE9IDB4ZmZmZmZmZmYpCisJeworCSAgcm9vdC5zaXplID0gcm9v dF9wdHItPnNpemU7CisJICBicmVhazsKKwl9CisgICAgICAvKiBTcGluLiAgKi8KKyAgICB9 CisgIHdoaWxlICgxKTsKKworICAvKiBXYWxrIHRoZSBmcmVlIGNoYWluIHRvIGZpbmQgd2hl cmUgdG8gaW5zZXJ0IGEgbmV3IGVudHJ5LiAgKi8KKyAgaGVhcGRlc2MgY2h1bmsgPSByb290 LCBwcmV2X2NodW5rOworICBoZWFwZGVzYyAqcHJldl9jaHVua3B0ciA9IE5VTEwsICpwcmV2 cHJldl9jaHVua3B0ciA9IE5VTEw7CisgIGhlYXBkZXNjICpjaHVua3B0ciA9IChoZWFwZGVz YyopKGhlYXAgKyBjaHVuay5vZmZzZXQpOworICBoZWFwZGVzYyBvbndhcmRfY2hhaW4gPSAq Y2h1bmtwdHI7CisgIHdoaWxlIChjaHVuay5zaXplICE9IDAgJiYgYWRkciA+ICh2b2lkKilj aHVua3B0cikKKyAgICB7CisgICAgICBwcmV2X2NodW5rID0gY2h1bms7CisgICAgICBjaHVu ayA9IG9ud2FyZF9jaGFpbjsKKyAgICAgIHByZXZwcmV2X2NodW5rcHRyID0gcHJldl9jaHVu a3B0cjsKKyAgICAgIHByZXZfY2h1bmtwdHIgPSBjaHVua3B0cjsKKyAgICAgIGNodW5rcHRy ID0gKGhlYXBkZXNjKikoaGVhcCArIGNodW5rLm9mZnNldCk7CisgICAgICBvbndhcmRfY2hh aW4gPSAqY2h1bmtwdHI7CisgICAgfQorCisgIC8qIENyZWF0ZSB0aGUgbmV3IGNodW5rIGRl c2NyaXB0b3IuICAqLworICBoZWFwZGVzYyBuZXdmcmVlY2h1bms7CisgIG5ld2ZyZWVjaHVu ay5vZmZzZXQgPSAodWludDMyX3QpKCh1aW50cHRyX3QpYWRkciAtICh1aW50cHRyX3QpaGVh cCk7CisgIG5ld2ZyZWVjaHVuay5zaXplID0gKHVpbnQzMl90KXNpemU7CisKKyAgLyogQ29h bGVzY2UgYWRqYWNlbnQgZnJlZSBjaHVua3MuICAqLworICBpZiAobmV3ZnJlZWNodW5rLm9m ZnNldCArIHNpemUgPT0gY2h1bmsub2Zmc2V0KQorICAgIHsKKyAgICAgIC8qIEZyZWUgY2h1 bmsgZm9sbG93cy4gICovCisgICAgICBuZXdmcmVlY2h1bmsuc2l6ZSArPSBjaHVuay5zaXpl OworICAgICAgY2h1bmsgPSBvbndhcmRfY2hhaW47CisgICAgfQorICBpZiAocHJldl9jaHVu a3B0cikKKyAgICB7CisgICAgICBpZiAocHJldl9jaHVuay5vZmZzZXQgKyBwcmV2X2NodW5r LnNpemUKKwkgID09IG5ld2ZyZWVjaHVuay5vZmZzZXQpCisJeworCSAgLyogRnJlZSBjaHVu ayBwcmVjZWRlcy4gICovCisJICBuZXdmcmVlY2h1bmsub2Zmc2V0ID0gcHJldl9jaHVuay5v ZmZzZXQ7CisJICBuZXdmcmVlY2h1bmsuc2l6ZSArPSBwcmV2X2NodW5rLnNpemU7CisJICBh ZGRyID0gaGVhcCArIHByZXZfY2h1bmsub2Zmc2V0OworCSAgcHJldl9jaHVua3B0ciA9IHBy ZXZwcmV2X2NodW5rcHRyOworCX0KKyAgICB9CisKKyAgLyogVXBkYXRlIHRoZSBmcmVlIGNo YWluIGluIHRoZSBuZXcgYW5kIHByZXZpb3VzIGNodW5rcy4gICovCisgICooaGVhcGRlc2Mq KWFkZHIgPSBjaHVuazsKKyAgaWYgKHByZXZfY2h1bmtwdHIpCisgICAgKnByZXZfY2h1bmtw dHIgPSBuZXdmcmVlY2h1bms7CisgIGVsc2UKKyAgICByb290ID0gbmV3ZnJlZWNodW5rOwor CisgIC8qIFVwZGF0ZSB0aGUgZnJlZSBjaGFpbiByb290IGFuZCByZWxlYXNlIHRoZSBsb2Nr LiAgKi8KKyAgcm9vdF9wdHItPnNpemUgPSByb290LnNpemU7CisgIF9fYXRvbWljX3N0b3Jl X24gKCZyb290X3B0ci0+b2Zmc2V0LCByb290Lm9mZnNldCwgTUVNTU9ERUxfUkVMRUFTRSk7 CisKK30KKworc3RhdGljIHZvaWQgKgorYmFzaWNfYWxsb2NfcmVhbGxvYyAoY2hhciAqaGVh cCwgdm9pZCAqYWRkciwgc2l6ZV90IG9sZHNpemUsCisJCQkJICAgICAgc2l6ZV90IHNpemUp Cit7CisgIC8qIE1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4gTi1ieXRlIGdyYW51bGFyaXR5LiAg Ki8KKyAgb2xkc2l6ZSA9IEFMSUdOIChvbGRzaXplKTsKKyAgc2l6ZSA9IEFMSUdOIChzaXpl KTsKKworICBpZiAob2xkc2l6ZSA9PSBzaXplKQorICAgIHJldHVybiBhZGRyOworCisgIC8q IEFjcXVpcmUgYSBsb2NrIG9uIHRoZSBsb3ctbGF0ZW5jeSBoZWFwLiAgKi8KKyAgaGVhcGRl c2Mgcm9vdCwgKnJvb3RfcHRyID0gKGhlYXBkZXNjKiloZWFwOworICBkbworICAgIHsKKyAg ICAgIHJvb3Qub2Zmc2V0ID0gX19hdG9taWNfZXhjaGFuZ2VfbiAoJnJvb3RfcHRyLT5vZmZz ZXQsIDB4ZmZmZmZmZmYsIAorCQkJCQkgTUVNTU9ERUxfQUNRVUlSRSk7CisgICAgICBpZiAo cm9vdC5vZmZzZXQgIT0gMHhmZmZmZmZmZikKKwl7CisJICByb290LnNpemUgPSByb290X3B0 ci0+c2l6ZTsKKwkgIGJyZWFrOworCX0KKyAgICAgIC8qIFNwaW4uICAqLworICAgIH0KKyAg d2hpbGUgKDEpOworCisgIC8qIFdhbGsgdGhlIGZyZWUgY2hhaW4uICAqLworICBoZWFwZGVz YyBjaHVuayA9IHJvb3Q7CisgIGhlYXBkZXNjICpwcmV2X2NodW5rcHRyID0gTlVMTDsKKyAg aGVhcGRlc2MgKmNodW5rcHRyID0gKGhlYXBkZXNjKikoaGVhcCArIGNodW5rLm9mZnNldCk7 CisgIGhlYXBkZXNjIG9ud2FyZF9jaGFpbiA9ICpjaHVua3B0cjsKKyAgd2hpbGUgKGNodW5r LnNpemUgIT0gMCAmJiAodm9pZCopY2h1bmtwdHIgPCBhZGRyKQorICAgIHsKKyAgICAgIGNo dW5rID0gb253YXJkX2NoYWluOworICAgICAgcHJldl9jaHVua3B0ciA9IGNodW5rcHRyOwor ICAgICAgY2h1bmtwdHIgPSAoaGVhcGRlc2MqKShoZWFwICsgY2h1bmsub2Zmc2V0KTsKKyAg ICAgIG9ud2FyZF9jaGFpbiA9ICpjaHVua3B0cjsKKyAgICB9CisKKyAgdm9pZCAqcmVzdWx0 ID0gTlVMTDsKKyAgaWYgKHNpemUgPCBvbGRzaXplKQorICAgIHsKKyAgICAgIC8qIFRoZSBu ZXcgYWxsb2NhdGlvbiBpcyBzbWFsbGVyIHRoYW4gdGhlIG9sZDsgd2UgY2FuIGFsd2F5cwor CSBzaHJpbmsgYW4gYWxsb2NhdGlvbiBpbiBwbGFjZS4gICovCisgICAgICByZXN1bHQgPSBh ZGRyOworCisgICAgICBoZWFwZGVzYyAqbm93ZnJlZXB0ciA9IChoZWFwZGVzYyopKGFkZHIg KyBzaXplKTsKKworICAgICAgLyogVXBkYXRlIHRoZSBmcmVlIGNoYWluLiAgKi8KKyAgICAg IGhlYXBkZXNjIG5vd2ZyZWU7CisgICAgICBub3dmcmVlLm9mZnNldCA9IChjaGFyKilub3dm cmVlcHRyIC0gaGVhcDsKKyAgICAgIG5vd2ZyZWUuc2l6ZSA9IG9sZHNpemUgLSBzaXplOwor CisgICAgICBpZiAobm93ZnJlZS5vZmZzZXQgKyBzaXplID09IGNodW5rLm9mZnNldCkKKwl7 CisJICAvKiBDb2FsZXNjZSBmb2xsb3dpbmcgZnJlZSBjaHVuay4gICovCisJICBub3dmcmVl LnNpemUgKz0gY2h1bmsuc2l6ZTsKKwkgICpub3dmcmVlcHRyID0gb253YXJkX2NoYWluOwor CX0KKyAgICAgIGVsc2UKKwkqbm93ZnJlZXB0ciA9IGNodW5rOworCisgICAgICAvKiBUaGUg cHJldmlvdXMgZnJlZSBzbG90IG9yIHJvb3Qgbm93IHBvaW50cyB0byBub3dmcmVlLiAgKi8K KyAgICAgIGlmIChwcmV2X2NodW5rcHRyKQorCSpwcmV2X2NodW5rcHRyID0gbm93ZnJlZTsK KyAgICAgIGVsc2UKKwlyb290ID0gbm93ZnJlZTsKKyAgICB9CisgIGVsc2UgaWYgKGNodW5r LnNpemUgIT0gMAorCSAgICYmIChjaGFyICopYWRkciArIG9sZHNpemUgPT0gKGNoYXIgKilj aHVua3B0cgorCSAgICYmIGNodW5rLnNpemUgPj0gc2l6ZS1vbGRzaXplKQorICAgIHsKKyAg ICAgIC8qIFRoZSBuZXcgYWxsb2NhdGlvbiBpcyBsYXJnZXIgdGhhbiB0aGUgb2xkLCBhbmQg d2UgZm91bmQgYQorCSBsYXJnZSBlbm91Z2ggZnJlZSBibG9jayByaWdodCBhZnRlciB0aGUg ZXhpc3RpbmcgYmxvY2ssCisJIHNvIHdlIGV4dGVuZCBpbnRvIHRoYXQgc3BhY2UuICAqLwor ICAgICAgcmVzdWx0ID0gYWRkcjsKKworICAgICAgdWludDMyX3QgZGVsdGEgPSBzaXplLW9s ZHNpemU7CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgZnJlZSBjaGFpbi4gICovCisgICAgICBo ZWFwZGVzYyBzdGlsbGZyZWUgPSBjaHVuazsKKyAgICAgIHN0aWxsZnJlZS5vZmZzZXQgKz0g ZGVsdGE7CisgICAgICBzdGlsbGZyZWUuc2l6ZSAtPSBkZWx0YTsKKyAgICAgIGhlYXBkZXNj ICpzdGlsbGZyZWVwdHIgPSAoaGVhcGRlc2MqKShoZWFwICsgc3RpbGxmcmVlLm9mZnNldCk7 CisKKyAgICAgIGlmIChzdGlsbGZyZWUuc2l6ZSA9PSAwKQorCS8qIFRoZSB3aG9sZSBjaHVu ayB3YXMgdXNlZC4gICovCisJc3RpbGxmcmVlID0gb253YXJkX2NoYWluOworICAgICAgZWxz ZQorCS8qIFRoZSBjaHVuayB3YXMgc3BsaXQsIHNvIHJlc3RvcmUgdGhlIG9ud2FyZCBjaGFp bi4gICovCisJKnN0aWxsZnJlZXB0ciA9IG9ud2FyZF9jaGFpbjsKKworICAgICAgLyogVGhl IHByZXZpb3VzIGZyZWUgc2xvdCBvciByb290IG5vdyBwb2ludHMgdG8gc3RpbGxmcmVlLiAg Ki8KKyAgICAgIGlmIChwcmV2X2NodW5rcHRyKQorCSpwcmV2X2NodW5rcHRyID0gc3RpbGxm cmVlOworICAgICAgZWxzZQorCXJvb3QgPSBzdGlsbGZyZWU7CisgICAgfQorICAvKiBFbHNl IHJlYWxsb2MgaW4tcGxhY2UgaGFzIGZhaWxlZCBhbmQgcmVzdWx0IHJlbWFpbnMgTlVMTC4g ICovCisKKyAgLyogVXBkYXRlIHRoZSBmcmVlIGNoYWluIHJvb3QgYW5kIHJlbGVhc2UgdGhl IGxvY2suICAqLworICByb290X3B0ci0+c2l6ZSA9IHJvb3Quc2l6ZTsKKyAgX19hdG9taWNf c3RvcmVfbiAoJnJvb3RfcHRyLT5vZmZzZXQsIHJvb3Qub2Zmc2V0LCBNRU1NT0RFTF9SRUxF QVNFKTsKKworICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgeworICAgICAgLyogVGhlIGFs bG9jYXRpb24gY291bGQgbm90IGJlIGV4dGVuZGVkIGluIHBsYWNlLCBzbyB3ZSBzaW1wbHkK KwkgYWxsb2NhdGUgZnJlc2ggbWVtb3J5IGFuZCBtb3ZlIHRoZSBkYXRhLiAgSWYgd2UgY2Fu J3QgYWxsb2NhdGUKKwkgZnJvbSBsb3ctbGF0ZW5jeSBtZW1vcnkgdGhlbiB3ZSBsZWF2ZSB0 aGUgb3JpZ2luYWwgYWxsb2FjdGlvbgorCSBpbnRhY3QgYW5kIHJldHVybiBOVUxMLgorCSBX ZSBjb3VsZCBkbyBhIGZhbGwtYmFjayB0byBtYWluIG1lbW9yeSwgYnV0IHdlIGRvbid0IGtu b3cgd2hhdAorCSB0aGUgZmFsbC1iYWNrIHRyYWl0IHNhaWQgdG8gZG8uICAqLworICAgICAg cmVzdWx0ID0gYmFzaWNfYWxsb2NfYWxsb2MgKGhlYXAsIHNpemUpOworICAgICAgaWYgKHJl c3VsdCAhPSBOVUxMKQorCXsKKwkgIC8qIElubGluZSBtZW1jcHkgaW4gd2hpY2ggd2Uga25v dyBvbGRzaXplIGlzIGEgbXVsdGlwbGUgb2YgOC4gICovCisJICB1aW50NjRfdCAqZnJvbSA9 IGFkZHIsICp0byA9IHJlc3VsdDsKKwkgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAodW5z aWduZWQpb2xkc2l6ZS84OyBpKyspCisJICAgIHRvW2ldID0gZnJvbVtpXTsKKworCSAgYmFz aWNfYWxsb2NfZnJlZSAoaGVhcCwgYWRkciwgb2xkc2l6ZSk7CisJfQorICAgIH0KKworICBy ZXR1cm4gcmVzdWx0OworfQorCisjdW5kZWYgQUxJR04KKyN1bmRlZiBmbjEKKyN1bmRlZiBm bgorI3VuZGVmIGJhc2ljX2FsbG9jX2luaXQKKyN1bmRlZiBiYXNpY19hbGxvY19hbGxvYwor I3VuZGVmIGJhc2ljX2FsbG9jX2ZyZWUKKyN1bmRlZiBiYXNpY19hbGxvY19yZWFsbG9jCmRp ZmYgLS1naXQgYS9saWJnb21wL2NvbmZpZy9udnB0eC9hbGxvY2F0b3IuYyBiL2xpYmdvbXAv Y29uZmlnL252cHR4L2FsbG9jYXRvci5jCmluZGV4IGMxYTczNTExNjIzLi43YzJhNzQ2M2Jm NyAxMDA2NDQKLS0tIGEvbGliZ29tcC9jb25maWcvbnZwdHgvYWxsb2NhdG9yLmMKKysrIGIv bGliZ29tcC9jb25maWcvbnZwdHgvYWxsb2NhdG9yLmMKQEAgLTQ0LDIwICs0NCwxMyBAQAog I2luY2x1ZGUgImxpYmdvbXAuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorI2RlZmluZSBC QVNJQ19BTExPQ19QUkVGSVggX19udnB0eF9sb3dsYXQKKyNpbmNsdWRlICIuLi8uLi9iYXNp Yy1hbGxvY2F0b3IuYyIKKwogLyogVGhlcmUgc2hvdWxkIGJlIHNvbWUgLnNoYXJlZCBzcGFj ZSByZXNlcnZlZCBmb3IgdXMuICBUaGVyZSdzIG5vIHdheSB0bwogICAgZXhwcmVzcyB0aGlz IG1hZ2ljIGV4dGVybiBzaXplbGVzcyBhcnJheSBpbiBDIHNvIHVzZSBhc20uICAqLwogYXNt ICgiLmV4dGVybiAuc2hhcmVkIC51OCBfX252cHR4X2xvd2xhdF9wb29sW107XG4iKTsKIAot ZXh0ZXJuIHVpbnQzMl90IF9fbnZwdHhfbG93bGF0X2hlYXBfcm9vdCBfX2F0dHJpYnV0ZV9f KChzaGFyZWQsbm9jb21tb24pKTsKLQotdHlwZWRlZiB1bmlvbiB7Ci0gIHVpbnQzMl90IHJh dzsKLSAgc3RydWN0IHsKLSAgICB1aW50MTZfdCBvZmZzZXQ7Ci0gICAgdWludDE2X3Qgc2l6 ZTsKLSAgfSBkZXNjOwotfSBoZWFwZGVzYzsKLQogc3RhdGljIHZvaWQgKgogbnZwdHhfbWVt c3BhY2VfYWxsb2MgKG9tcF9tZW1zcGFjZV9oYW5kbGVfdCBtZW1zcGFjZSwgc2l6ZV90IHNp emUpCiB7CkBAIC02Niw2NCArNTksNyBAQCBudnB0eF9tZW1zcGFjZV9hbGxvYyAob21wX21l bXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCBzaXplX3Qgc2l6ZSkKICAgICAgIGNoYXIgKnNo YXJlZF9wb29sOwogICAgICAgYXNtICgiY3Z0YS5zaGFyZWQudTY0XHQlMCwgX19udnB0eF9s b3dsYXRfcG9vbDsiIDogIj1yIihzaGFyZWRfcG9vbCkpOwogCi0gICAgICAvKiBNZW1vcnkg aXMgYWxsb2NhdGVkIGluIDgtYnl0ZSBncmFudWxhcml0eS4gICovCi0gICAgICBzaXplID0g KHNpemUgKyA3KSAmIH43OwotCi0gICAgICAvKiBBY3F1aXJlIGEgbG9jayBvbiB0aGUgbG93 LWxhdGVuY3kgaGVhcC4gICovCi0gICAgICBoZWFwZGVzYyByb290OwotICAgICAgZG8KLQl7 Ci0JICByb290LnJhdyA9IF9fYXRvbWljX2V4Y2hhbmdlX24gKCZfX252cHR4X2xvd2xhdF9o ZWFwX3Jvb3QsCi0JCQkJCSAgMHhmZmZmZmZmZiwgTUVNTU9ERUxfQUNRVUlSRSk7Ci0JICBp ZiAocm9vdC5yYXcgIT0gMHhmZmZmZmZmZikKLQkgICAgYnJlYWs7Ci0JICAvKiBTcGluLiAg Ki8KLQl9Ci0gICAgICB3aGlsZSAoMSk7Ci0KLSAgICAgIC8qIFdhbGsgdGhlIGZyZWUgY2hh aW4uICAqLwotICAgICAgaGVhcGRlc2MgY2h1bmsgPSB7cm9vdC5yYXd9OwotICAgICAgdWlu dDMyX3QgKnByZXZfY2h1bmtwdHIgPSBOVUxMOwotICAgICAgdWludDMyX3QgKmNodW5rcHRy ID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bvb2wgKyBjaHVuay5kZXNjLm9mZnNldCk7Ci0gICAg ICBoZWFwZGVzYyBvbndhcmRfY2hhaW4gPSB7Y2h1bmtwdHJbMF19OwotICAgICAgd2hpbGUg KGNodW5rLmRlc2Muc2l6ZSAhPSAwICYmICh1aW50MzJfdClzaXplID4gY2h1bmsuZGVzYy5z aXplKQotCXsKLQkgIGNodW5rLnJhdyA9IG9ud2FyZF9jaGFpbi5yYXc7Ci0JICBwcmV2X2No dW5rcHRyID0gY2h1bmtwdHI7Ci0JICBjaHVua3B0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9w b29sICsgY2h1bmsuZGVzYy5vZmZzZXQpOwotCSAgb253YXJkX2NoYWluLnJhdyA9IGNodW5r cHRyWzBdOwotCX0KLQotICAgICAgdm9pZCAqcmVzdWx0ID0gTlVMTDsKLSAgICAgIGlmIChj aHVuay5kZXNjLnNpemUgIT0gMCkKLQl7Ci0JICAvKiBBbGxvY2F0aW9uIHN1Y2Nlc3NmdWwu ICAqLwotCSAgcmVzdWx0ID0gY2h1bmtwdHI7Ci0KLQkgIC8qIFVwZGF0ZSB0aGUgZnJlZSBj aGFpbi4gICovCi0JICBoZWFwZGVzYyBzdGlsbGZyZWUgPSB7Y2h1bmsucmF3fTsKLQkgIHN0 aWxsZnJlZS5kZXNjLm9mZnNldCArPSBzaXplOwotCSAgc3RpbGxmcmVlLmRlc2Muc2l6ZSAt PSBzaXplOwotCSAgdWludDMyX3QgKnN0aWxsZnJlZXB0ciA9ICh1aW50MzJfdCopKHNoYXJl ZF9wb29sCi0JCQkJCSAgICAgICArIHN0aWxsZnJlZS5kZXNjLm9mZnNldCk7Ci0KLQkgIGlm IChzdGlsbGZyZWUuZGVzYy5zaXplID09IDApCi0JICAgIC8qIFRoZSB3aG9sZSBjaHVuayB3 YXMgdXNlZC4gICovCi0JICAgIHN0aWxsZnJlZS5yYXcgPSBvbndhcmRfY2hhaW4ucmF3Owot CSAgZWxzZQotCSAgICAvKiBUaGUgY2h1bmsgd2FzIHNwbGl0LCBzbyByZXN0b3JlIHRoZSBv bndhcmQgY2hhaW4uICAqLwotCSAgICBzdGlsbGZyZWVwdHJbMF0gPSBvbndhcmRfY2hhaW4u cmF3OwotCi0JICAvKiBUaGUgcHJldmlvdXMgZnJlZSBzbG90IG9yIHJvb3Qgbm93IHBvaW50 cyB0byBzdGlsbGZyZWUuICAqLwotCSAgaWYgKHByZXZfY2h1bmtwdHIpCi0JICAgIHByZXZf Y2h1bmtwdHJbMF0gPSBzdGlsbGZyZWUucmF3OwotCSAgZWxzZQotCSAgICByb290LnJhdyA9 IHN0aWxsZnJlZS5yYXc7Ci0JfQotCi0gICAgICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hhaW4g cm9vdCBhbmQgcmVsZWFzZSB0aGUgbG9jay4gICovCi0gICAgICBfX2F0b21pY19zdG9yZV9u ICgmX19udnB0eF9sb3dsYXRfaGVhcF9yb290LCByb290LnJhdywgTUVNTU9ERUxfUkVMRUFT RSk7Ci0gICAgICByZXR1cm4gcmVzdWx0OworICAgICAgcmV0dXJuIF9fbnZwdHhfbG93bGF0 X2FsbG9jIChzaGFyZWRfcG9vbCwgc2l6ZSk7CiAgICAgfQogICBlbHNlIGlmIChtZW1zcGFj ZSA9PSBvbXB4X2hvc3RfbWVtX3NwYWNlKQogICAgIHJldHVybiBOVUxMOwpAQCAtMTM2LDE2 ICs3MiwxMCBAQCBudnB0eF9tZW1zcGFjZV9jYWxsb2MgKG9tcF9tZW1zcGFjZV9oYW5kbGVf dCBtZW1zcGFjZSwgc2l6ZV90IHNpemUpCiB7CiAgIGlmIChtZW1zcGFjZSA9PSBvbXBfbG93 X2xhdF9tZW1fc3BhY2UpCiAgICAgewotICAgICAgLyogTWVtb3J5IGlzIGFsbG9jYXRlZCBp biA4LWJ5dGUgZ3JhbnVsYXJpdHkuICAqLwotICAgICAgc2l6ZSA9IChzaXplICsgNykgJiB+ NzsKLQotICAgICAgdWludDY0X3QgKnJlc3VsdCA9IG52cHR4X21lbXNwYWNlX2FsbG9jICht ZW1zcGFjZSwgc2l6ZSk7Ci0gICAgICBpZiAocmVzdWx0KQotCS8qIElubGluZSBtZW1zZXQg aW4gd2hpY2ggd2Uga25vdyBzaXplIGlzIGEgbXVsdGlwbGUgb2YgOC4gICovCi0JZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8ICh1bnNpZ25lZClzaXplLzg7IGkrKykKLQkgIHJlc3VsdFtp XSA9IDA7CisgICAgICBjaGFyICpzaGFyZWRfcG9vbDsKKyAgICAgIGFzbSAoImN2dGEuc2hh cmVkLnU2NFx0JTAsIF9fbnZwdHhfbG93bGF0X3Bvb2w7IiA6ICI9ciIoc2hhcmVkX3Bvb2wp KTsKIAotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIHJldHVybiBfX252cHR4X2xvd2xh dF9jYWxsb2MgKHNoYXJlZF9wb29sLCBzaXplKTsKICAgICB9CiAgIGVsc2UgaWYgKG1lbXNw YWNlID09IG9tcHhfaG9zdF9tZW1fc3BhY2UpCiAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNjEs NzEgKzkxLDcgQEAgbnZwdHhfbWVtc3BhY2VfZnJlZSAob21wX21lbXNwYWNlX2hhbmRsZV90 IG1lbXNwYWNlLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAgICAgIGNoYXIgKnNoYXJl ZF9wb29sOwogICAgICAgYXNtICgiY3Z0YS5zaGFyZWQudTY0XHQlMCwgX19udnB0eF9sb3ds YXRfcG9vbDsiIDogIj1yIihzaGFyZWRfcG9vbCkpOwogCi0gICAgICAvKiBNZW1vcnkgaXMg YWxsb2NhdGVkIGluIDgtYnl0ZSBncmFudWxhcml0eS4gICovCi0gICAgICBzaXplID0gKHNp emUgKyA3KSAmIH43OwotCi0gICAgICAvKiBBY3F1aXJlIGEgbG9jayBvbiB0aGUgbG93LWxh dGVuY3kgaGVhcC4gICovCi0gICAgICBoZWFwZGVzYyByb290OwotICAgICAgZG8KLQl7Ci0J ICByb290LnJhdyA9IF9fYXRvbWljX2V4Y2hhbmdlX24gKCZfX252cHR4X2xvd2xhdF9oZWFw X3Jvb3QsCi0JCQkJCSAgMHhmZmZmZmZmZiwgTUVNTU9ERUxfQUNRVUlSRSk7Ci0JICBpZiAo cm9vdC5yYXcgIT0gMHhmZmZmZmZmZikKLQkgICAgYnJlYWs7Ci0JICAvKiBTcGluLiAgKi8K LQl9Ci0gICAgICB3aGlsZSAoMSk7Ci0KLSAgICAgIC8qIFdhbGsgdGhlIGZyZWUgY2hhaW4g dG8gZmluZCB3aGVyZSB0byBpbnNlcnQgYSBuZXcgZW50cnkuICAqLwotICAgICAgaGVhcGRl c2MgY2h1bmsgPSB7cm9vdC5yYXd9LCBwcmV2X2NodW5rOwotICAgICAgdWludDMyX3QgKnBy ZXZfY2h1bmtwdHIgPSBOVUxMLCAqcHJldnByZXZfY2h1bmtwdHIgPSBOVUxMOwotICAgICAg dWludDMyX3QgKmNodW5rcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bvb2wgKyBjaHVuay5k ZXNjLm9mZnNldCk7Ci0gICAgICBoZWFwZGVzYyBvbndhcmRfY2hhaW4gPSB7Y2h1bmtwdHJb MF19OwotICAgICAgd2hpbGUgKGNodW5rLmRlc2Muc2l6ZSAhPSAwICYmIGFkZHIgPiAodm9p ZCopY2h1bmtwdHIpCi0JewotCSAgcHJldl9jaHVuay5yYXcgPSBjaHVuay5yYXc7Ci0JICBj aHVuay5yYXcgPSBvbndhcmRfY2hhaW4ucmF3OwotCSAgcHJldnByZXZfY2h1bmtwdHIgPSBw cmV2X2NodW5rcHRyOwotCSAgcHJldl9jaHVua3B0ciA9IGNodW5rcHRyOwotCSAgY2h1bmtw dHIgPSAodWludDMyX3QqKShzaGFyZWRfcG9vbCArIGNodW5rLmRlc2Mub2Zmc2V0KTsKLQkg IG9ud2FyZF9jaGFpbi5yYXcgPSBjaHVua3B0clswXTsKLQl9Ci0KLSAgICAgIC8qIENyZWF0 ZSB0aGUgbmV3IGNodW5rIGRlc2NyaXB0b3IuICAqLwotICAgICAgaGVhcGRlc2MgbmV3ZnJl ZWNodW5rOwotICAgICAgbmV3ZnJlZWNodW5rLmRlc2Mub2Zmc2V0ID0gKHVpbnQxNl90KSgo dWludHB0cl90KWFkZHIKLQkJCQkJICAgIC0gKHVpbnRwdHJfdClzaGFyZWRfcG9vbCk7Ci0g ICAgICBuZXdmcmVlY2h1bmsuZGVzYy5zaXplID0gKHVpbnQxNl90KXNpemU7Ci0KLSAgICAg IC8qIENvYWxlc2NlIGFkamFjZW50IGZyZWUgY2h1bmtzLiAgKi8KLSAgICAgIGlmIChuZXdm cmVlY2h1bmsuZGVzYy5vZmZzZXQgKyBzaXplID09IGNodW5rLmRlc2Mub2Zmc2V0KQotCXsK LQkgIC8qIEZyZWUgY2h1bmsgZm9sbG93cy4gICovCi0JICBuZXdmcmVlY2h1bmsuZGVzYy5z aXplICs9IGNodW5rLmRlc2Muc2l6ZTsKLQkgIGNodW5rLnJhdyA9IG9ud2FyZF9jaGFpbi5y YXc7Ci0JfQotICAgICAgaWYgKHByZXZfY2h1bmtwdHIpCi0JewotCSAgaWYgKHByZXZfY2h1 bmsuZGVzYy5vZmZzZXQgKyBwcmV2X2NodW5rLmRlc2Muc2l6ZQotCSAgICAgID09IG5ld2Zy ZWVjaHVuay5kZXNjLm9mZnNldCkKLQkgICAgewotCSAgICAgIC8qIEZyZWUgY2h1bmsgcHJl Y2VkZXMuICAqLwotCSAgICAgIG5ld2ZyZWVjaHVuay5kZXNjLm9mZnNldCA9IHByZXZfY2h1 bmsuZGVzYy5vZmZzZXQ7Ci0JICAgICAgbmV3ZnJlZWNodW5rLmRlc2Muc2l6ZSArPSBwcmV2 X2NodW5rLmRlc2Muc2l6ZTsKLQkgICAgICBhZGRyID0gc2hhcmVkX3Bvb2wgKyBwcmV2X2No dW5rLmRlc2Mub2Zmc2V0OwotCSAgICAgIHByZXZfY2h1bmtwdHIgPSBwcmV2cHJldl9jaHVu a3B0cjsKLQkgICAgfQotCX0KLQotICAgICAgLyogVXBkYXRlIHRoZSBmcmVlIGNoYWluIGlu IHRoZSBuZXcgYW5kIHByZXZpb3VzIGNodW5rcy4gICovCi0gICAgICAoKHVpbnQzMl90Kilh ZGRyKVswXSA9IGNodW5rLnJhdzsKLSAgICAgIGlmIChwcmV2X2NodW5rcHRyKQotCXByZXZf Y2h1bmtwdHJbMF0gPSBuZXdmcmVlY2h1bmsucmF3OwotICAgICAgZWxzZQotCXJvb3QucmF3 ID0gbmV3ZnJlZWNodW5rLnJhdzsKLQotICAgICAgLyogVXBkYXRlIHRoZSBmcmVlIGNoYWlu IHJvb3QgYW5kIHJlbGVhc2UgdGhlIGxvY2suICAqLwotICAgICAgX19hdG9taWNfc3RvcmVf biAoJl9fbnZwdHhfbG93bGF0X2hlYXBfcm9vdCwgcm9vdC5yYXcsIE1FTU1PREVMX1JFTEVB U0UpOworICAgICAgX19udnB0eF9sb3dsYXRfZnJlZSAoc2hhcmVkX3Bvb2wsIGFkZHIsIHNp emUpOwogICAgIH0KICAgZWxzZQogICAgIGZyZWUgKGFkZHIpOwpAQCAtMjQwLDEyMyArMTA2 LDcgQEAgbnZwdHhfbWVtc3BhY2VfcmVhbGxvYyAob21wX21lbXNwYWNlX2hhbmRsZV90IG1l bXNwYWNlLCB2b2lkICphZGRyLAogICAgICAgY2hhciAqc2hhcmVkX3Bvb2w7CiAgICAgICBh c20gKCJjdnRhLnNoYXJlZC51NjRcdCUwLCBfX252cHR4X2xvd2xhdF9wb29sOyIgOiAiPXIi KHNoYXJlZF9wb29sKSk7CiAKLSAgICAgIC8qIE1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4gOC1i eXRlIGdyYW51bGFyaXR5LiAgKi8KLSAgICAgIG9sZHNpemUgPSAob2xkc2l6ZSArIDcpICYg fjc7Ci0gICAgICBzaXplID0gKHNpemUgKyA3KSAmIH43OwotCi0gICAgICBpZiAob2xkc2l6 ZSA9PSBzaXplKQotCXJldHVybiBhZGRyOwotCi0gICAgICAvKiBBY3F1aXJlIGEgbG9jayBv biB0aGUgbG93LWxhdGVuY3kgaGVhcC4gICovCi0gICAgICBoZWFwZGVzYyByb290OwotICAg ICAgZG8KLQl7Ci0JICByb290LnJhdyA9IF9fYXRvbWljX2V4Y2hhbmdlX24gKCZfX252cHR4 X2xvd2xhdF9oZWFwX3Jvb3QsCi0JCQkJCSAgMHhmZmZmZmZmZiwgTUVNTU9ERUxfQUNRVUlS RSk7Ci0JICBpZiAocm9vdC5yYXcgIT0gMHhmZmZmZmZmZikKLQkgICAgYnJlYWs7Ci0JICAv KiBTcGluLiAgKi8KLQl9Ci0gICAgICB3aGlsZSAoMSk7Ci0KLSAgICAgIC8qIFdhbGsgdGhl IGZyZWUgY2hhaW4uICAqLwotICAgICAgaGVhcGRlc2MgY2h1bmsgPSB7cm9vdC5yYXd9Owot ICAgICAgdWludDMyX3QgKnByZXZfY2h1bmtwdHIgPSBOVUxMOwotICAgICAgdWludDMyX3Qg KmNodW5rcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bvb2wgKyBjaHVuay5kZXNjLm9mZnNl dCk7Ci0gICAgICBoZWFwZGVzYyBvbndhcmRfY2hhaW4gPSB7Y2h1bmtwdHJbMF19OwotICAg ICAgd2hpbGUgKGNodW5rLmRlc2Muc2l6ZSAhPSAwICYmICh2b2lkKiljaHVua3B0ciA8IGFk ZHIpCi0JewotCSAgY2h1bmsucmF3ID0gb253YXJkX2NoYWluLnJhdzsKLQkgIHByZXZfY2h1 bmtwdHIgPSBjaHVua3B0cjsKLQkgIGNodW5rcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bv b2wgKyBjaHVuay5kZXNjLm9mZnNldCk7Ci0JICBvbndhcmRfY2hhaW4ucmF3ID0gY2h1bmtw dHJbMF07Ci0JfQotCi0gICAgICB2b2lkICpyZXN1bHQgPSBOVUxMOwotICAgICAgaWYgKHNp emUgPCBvbGRzaXplKQotCXsKLQkgIC8qIFRoZSBuZXcgYWxsb2NhdGlvbiBpcyBzbWFsbGVy IHRoYW4gdGhlIG9sZDsgd2UgY2FuIGFsd2F5cwotCSAgICAgc2hyaW5rIGFuIGFsbG9jYXRp b24gaW4gcGxhY2UuICAqLwotCSAgcmVzdWx0ID0gYWRkcjsKLQotCSAgdWludDMyX3QgKm5v d2ZyZWVwdHIgPSAodWludDMyX3QqKShhZGRyICsgc2l6ZSk7Ci0KLQkgIC8qIFVwZGF0ZSB0 aGUgZnJlZSBjaGFpbi4gICovCi0JICBoZWFwZGVzYyBub3dmcmVlOwotCSAgbm93ZnJlZS5k ZXNjLm9mZnNldCA9IChjaGFyKilub3dmcmVlcHRyIC0gc2hhcmVkX3Bvb2w7Ci0JICBub3dm cmVlLmRlc2Muc2l6ZSA9IG9sZHNpemUgLSBzaXplOwotCi0JICBpZiAobm93ZnJlZS5kZXNj Lm9mZnNldCArIHNpemUgPT0gY2h1bmsuZGVzYy5vZmZzZXQpCi0JICAgIHsKLQkgICAgICAv KiBDb2FsZXNjZSBmb2xsb3dpbmcgZnJlZSBjaHVuay4gICovCi0JICAgICAgbm93ZnJlZS5k ZXNjLnNpemUgKz0gY2h1bmsuZGVzYy5zaXplOwotCSAgICAgIG5vd2ZyZWVwdHJbMF0gPSBv bndhcmRfY2hhaW4ucmF3OwotCSAgICB9Ci0JICBlbHNlCi0JICAgIG5vd2ZyZWVwdHJbMF0g PSBjaHVuay5yYXc7Ci0KLQkgIC8qIFRoZSBwcmV2aW91cyBmcmVlIHNsb3Qgb3Igcm9vdCBu b3cgcG9pbnRzIHRvIG5vd2ZyZWUuICAqLwotCSAgaWYgKHByZXZfY2h1bmtwdHIpCi0JICAg IHByZXZfY2h1bmtwdHJbMF0gPSBub3dmcmVlLnJhdzsKLQkgIGVsc2UKLQkgICAgcm9vdC5y YXcgPSBub3dmcmVlLnJhdzsKLQl9Ci0gICAgICBlbHNlIGlmIChjaHVuay5kZXNjLnNpemUg IT0gMAotCSAgICAgICAmJiAoY2hhciAqKWFkZHIgKyBvbGRzaXplID09IChjaGFyICopY2h1 bmtwdHIKLQkgICAgICAgJiYgY2h1bmsuZGVzYy5zaXplID49IHNpemUtb2xkc2l6ZSkKLQl7 Ci0JICAvKiBUaGUgbmV3IGFsbG9jYXRpb24gaXMgbGFyZ2VyIHRoYW4gdGhlIG9sZCwgYW5k IHdlIGZvdW5kIGEKLQkgICAgIGxhcmdlIGVub3VnaCBmcmVlIGJsb2NrIHJpZ2h0IGFmdGVy IHRoZSBleGlzdGluZyBibG9jaywKLQkgICAgIHNvIHdlIGV4dGVuZCBpbnRvIHRoYXQgc3Bh Y2UuICAqLwotCSAgcmVzdWx0ID0gYWRkcjsKLQotCSAgdWludDE2X3QgZGVsdGEgPSBzaXpl LW9sZHNpemU7Ci0KLQkgIC8qIFVwZGF0ZSB0aGUgZnJlZSBjaGFpbi4gICovCi0JICBoZWFw ZGVzYyBzdGlsbGZyZWUgPSB7Y2h1bmsucmF3fTsKLQkgIHN0aWxsZnJlZS5kZXNjLm9mZnNl dCArPSBkZWx0YTsKLQkgIHN0aWxsZnJlZS5kZXNjLnNpemUgLT0gZGVsdGE7Ci0JICB1aW50 MzJfdCAqc3RpbGxmcmVlcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bvb2wKLQkJCQkJICAg ICAgICsgc3RpbGxmcmVlLmRlc2Mub2Zmc2V0KTsKLQotCSAgaWYgKHN0aWxsZnJlZS5kZXNj LnNpemUgPT0gMCkKLQkgICAgLyogVGhlIHdob2xlIGNodW5rIHdhcyB1c2VkLiAgKi8KLQkg ICAgc3RpbGxmcmVlLnJhdyA9IG9ud2FyZF9jaGFpbi5yYXc7Ci0JICBlbHNlCi0JICAgIC8q IFRoZSBjaHVuayB3YXMgc3BsaXQsIHNvIHJlc3RvcmUgdGhlIG9ud2FyZCBjaGFpbi4gICov Ci0JICAgIHN0aWxsZnJlZXB0clswXSA9IG9ud2FyZF9jaGFpbi5yYXc7Ci0KLQkgIC8qIFRo ZSBwcmV2aW91cyBmcmVlIHNsb3Qgb3Igcm9vdCBub3cgcG9pbnRzIHRvIHN0aWxsZnJlZS4g ICovCi0JICBpZiAocHJldl9jaHVua3B0cikKLQkgICAgcHJldl9jaHVua3B0clswXSA9IHN0 aWxsZnJlZS5yYXc7Ci0JICBlbHNlCi0JICAgIHJvb3QucmF3ID0gc3RpbGxmcmVlLnJhdzsK LQl9Ci0gICAgICAvKiBFbHNlIHJlYWxsb2MgaW4tcGxhY2UgaGFzIGZhaWxlZCBhbmQgcmVz dWx0IHJlbWFpbnMgTlVMTC4gICovCi0KLSAgICAgIC8qIFVwZGF0ZSB0aGUgZnJlZSBjaGFp biByb290IGFuZCByZWxlYXNlIHRoZSBsb2NrLiAgKi8KLSAgICAgIF9fYXRvbWljX3N0b3Jl X24gKCZfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3QsIHJvb3QucmF3LCBNRU1NT0RFTF9SRUxF QVNFKTsKLQotICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotCXsKLQkgIC8qIFRoZSBhbGxv Y2F0aW9uIGNvdWxkIG5vdCBiZSBleHRlbmRlZCBpbiBwbGFjZSwgc28gd2Ugc2ltcGx5Ci0J ICAgICBhbGxvY2F0ZSBmcmVzaCBtZW1vcnkgYW5kIG1vdmUgdGhlIGRhdGEuICBJZiB3ZSBj YW4ndCBhbGxvY2F0ZQotCSAgICAgZnJvbSBsb3ctbGF0ZW5jeSBtZW1vcnkgdGhlbiB3ZSBs ZWF2ZSB0aGUgb3JpZ2luYWwgYWxsb2FjdGlvbgotCSAgICAgaW50YWN0IGFuZCByZXR1cm4g TlVMTC4KLQkgICAgIFdlIGNvdWxkIGRvIGEgZmFsbC1iYWNrIHRvIG1haW4gbWVtb3J5LCBi dXQgd2UgZG9uJ3Qga25vdyB3aGF0Ci0JICAgICB0aGUgZmFsbC1iYWNrIHRyYWl0IHNhaWQg dG8gZG8uICAqLwotCSAgcmVzdWx0ID0gbnZwdHhfbWVtc3BhY2VfYWxsb2MgKG1lbXNwYWNl LCBzaXplKTsKLQkgIGlmIChyZXN1bHQgIT0gTlVMTCkKLQkgICAgewotCSAgICAgIC8qIElu bGluZSBtZW1jcHkgaW4gd2hpY2ggd2Uga25vdyBvbGRzaXplIGlzIGEgbXVsdGlwbGUgb2Yg OC4gICovCi0JICAgICAgdWludDY0X3QgKmZyb20gPSBhZGRyLCAqdG8gPSByZXN1bHQ7Ci0J ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8ICh1bnNpZ25lZClvbGRzaXplLzg7IGkr KykKLQkJdG9baV0gPSBmcm9tW2ldOwotCi0JICAgICAgbnZwdHhfbWVtc3BhY2VfZnJlZSAo bWVtc3BhY2UsIGFkZHIsIG9sZHNpemUpOwotCSAgICB9Ci0JfQotICAgICAgcmV0dXJuIHJl c3VsdDsKKyAgICAgIHJldHVybiBfX252cHR4X2xvd2xhdF9yZWFsbG9jIChzaGFyZWRfcG9v bCwgYWRkciwgb2xkc2l6ZSwgc2l6ZSk7CiAgICAgfQogICBlbHNlIGlmIChtZW1zcGFjZSA9 PSBvbXB4X2hvc3RfbWVtX3NwYWNlKQogICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEv bGliZ29tcC9jb25maWcvbnZwdHgvdGVhbS5jIGIvbGliZ29tcC9jb25maWcvbnZwdHgvdGVh bS5jCmluZGV4IDY4NTYxMGUwMGJlLi5iMzBiOGRmMTc4ZCAxMDA2NDQKLS0tIGEvbGliZ29t cC9jb25maWcvbnZwdHgvdGVhbS5jCisrKyBiL2xpYmdvbXAvY29uZmlnL252cHR4L3RlYW0u YwpAQCAtMzMsNyArMzMsNiBAQAogCiBzdHJ1Y3QgZ29tcF90aHJlYWQgKm52cHR4X3RocnMg X19hdHRyaWJ1dGVfXygoc2hhcmVkLG5vY29tbW9uKSk7CiBpbnQgX19nb21wX3RlYW1fbnVt IF9fYXR0cmlidXRlX18oKHNoYXJlZCxub2NvbW1vbikpOwotdWludDMyX3QgX19udnB0eF9s b3dsYXRfaGVhcF9yb290IF9fYXR0cmlidXRlX18oKHNoYXJlZCxub2NvbW1vbikpOwogCiBz dGF0aWMgdm9pZCBnb21wX3RocmVhZF9zdGFydCAoc3RydWN0IGdvbXBfdGhyZWFkX3Bvb2wg Kik7CiAKQEAgLTQxLDYgKzQwLDkgQEAgc3RhdGljIHZvaWQgZ29tcF90aHJlYWRfc3RhcnQg KHN0cnVjdCBnb21wX3RocmVhZF9wb29sICopOwogICAgZXhwcmVzcyB0aGlzIG1hZ2ljIGV4 dGVybiBzaXplbGVzcyBhcnJheSBpbiBDIHNvIHVzZSBhc20uICAqLwogYXNtICgiLmV4dGVy biAuc2hhcmVkIC51OCBfX252cHR4X2xvd2xhdF9wb29sW107XG4iKTsKIAorLyogRGVmaW5l ZCBpbiBiYXNpYy1hbGxvY2F0b3IuYyB2aWEgY29uZmlnL252cHR4L2FsbG9jYXRvci5jLiAg Ki8KK3ZvaWQgX19udnB0eF9sb3dsYXRfaW5pdCAodm9pZCAqaGVhcCwgc2l6ZV90IHNpemUp OworCiAvKiBUaGlzIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbiBoYW5kbGVzIHRhcmdl dCByZWdpb24gZW50cnkuICBJdAogICAgc2V0cyB1cCBhIHBlci10ZWFtIHRocmVhZCBwb29s IGFuZCB0cmFuc2ZlcnMgY29udHJvbCBieSBjYWxsaW5nIEZOIChGTl9EQVRBKQogICAgaW4g dGhlIG1hc3RlciB0aHJlYWQgb3IgZ29tcF90aHJlYWRfc3RhcnQgaW4gb3RoZXIgdGhyZWFk cy4KQEAgLTc2LDE5ICs3OCw3IEBAIGdvbXBfbnZwdHhfbWFpbiAodm9pZCAoKmZuKSAodm9p ZCAqKSwgdm9pZCAqZm5fZGF0YSkKICAgICAgIGFzbSAoIm1vdi51MzJcdCUwLCAlJWR5bmFt aWNfc21lbV9zaXplO1xuIgogCSAgIDogIj1yIihzaGFyZWRfcG9vbF9zaXplKSk7CiAjZW5k aWYKLQotICAgICAgLyogLi4uIGFuZCBpbml0aWFsaXplIGl0IHdpdGggYW4gZW1wdHkgZnJl ZS1jaGFpbi4gICovCi0gICAgICB1bmlvbiB7Ci0JdWludDMyX3QgcmF3OwotCXN0cnVjdCB7 Ci0JICB1aW50MTZfdCBvZmZzZXQ7Ci0JICB1aW50MTZfdCBzaXplOwotCX0gZGVzYzsKLSAg ICAgIH0gcm9vdDsKLSAgICAgIHJvb3QuZGVzYy5vZmZzZXQgPSAwOwkJIC8qIFRoZSBmaXJz dCBieXRlIGlzIGZyZWUuICAqLwotICAgICAgcm9vdC5kZXNjLnNpemUgPSBzaGFyZWRfcG9v bF9zaXplOyAvKiBUaGUgd2hvbGUgc3BhY2UgaXMgZnJlZS4gICovCi0gICAgICBfX252cHR4 X2xvd2xhdF9oZWFwX3Jvb3QgPSByb290LnJhdzsKLSAgICAgIHNoYXJlZF9wb29sWzBdID0g MDsJCSAvKiBUZXJtaW5hdGUgZnJlZSBjaGFpbi4gICovCisgICAgICBfX252cHR4X2xvd2xh dF9pbml0IChzaGFyZWRfcG9vbCwgc2hhcmVkX3Bvb2xfc2l6ZSk7CiAKICAgICAgIC8qIElu aXRpYWxpemUgdGhlIHRocmVhZCBwb29sLiAgKi8KICAgICAgIHN0cnVjdCBnb21wX3RocmVh ZF9wb29sICpwb29sID0gYWxsb2NhIChzaXplb2YgKCpwb29sKSk7Cg== --------------BpR3iAtoxC0Yu46FjlrmDx00 Content-Type: text/plain; charset="UTF-8"; name="230216-amd-low-lat.patch" Content-Disposition: attachment; filename="230216-amd-low-lat.patch" Content-Transfer-Encoding: base64 YW1kZ2NuLCBsaWJnb21wOiBsb3ctbGF0ZW5jeSBhbGxvY2F0b3IKClRoaXMgaW1wbGVtZW50 cyB0aGUgT3Blbk1QIGxvdy1sYXRlbmN5IG1lbW9yeSBhbGxvY2F0b3IgZm9yIEFNRCBHQ04g dXNpbmcgdGhlCnNtYWxsIHBlci10ZWFtIExEUyBtZW1vcnkgKExvY2FsIERhdGEgU3RvcmUp LgoKU2luY2UgYWRkcmVzc2VzIGNhbiBub3cgcmVmZXIgdG8gTERTIHNwYWNlLCB0aGUgIkds b2JhbCIgYWRkcmVzcyBzcGFjZSBpcwpuby1sb25nZXIgY29tcGF0aWJsZS4gIFRoaXMgcGF0 Y2ggdGhlcmVmb3JlIHN3aXRjaGVzIHRoZSBiYWNrZW5kIHRvIHVzZQplbnRpcmVseSAiRmxh dCIgYWRkcmVzc2luZyAod2hpY2ggc3VwcG9ydHMgYm90aCBtZW1vcmllcykuICBBIGZ1dHVy ZSBwYXRjaAp3aWxsIHJlLWVuYWJsZSAiZ2xvYmFsIiBpbnN0cnVjdGlvbnMgZm9yIGNhc2Vz IHdoZXJlIGl0IGlzIGtub3duIHRvIGJlIHNhZmUKdG8gZG8gc28uCgpnY2MvQ2hhbmdlTG9n OgoKCSogY29uZmlnL2djbi9nY24tYnVpbHRpbnMuZGVmIChESVNQQVRDSF9QVFIpOiBOZXcg YnVpbHQtaW4uCgkqIGNvbmZpZy9nY24vZ2NuLmNjIChnY25faW5pdF9tYWNoaW5lX3N0YXR1 cyk6IERpc2FibGUgZ2xvYmFsCglhZGRyZXNzaW5nLgoJKGdjbl9leHBhbmRfYnVpbHRpbl8x KTogSW1wbGVtZW50IEdDTl9CVUlMVElOX0RJU1BBVENIX1BUUi4KCmxpYmdvbXAvQ2hhbmdl TG9nOgoKCSogY29uZmlnL2djbi9saWJnb21wLWdjbi5oIChURUFNX0FSRU5BX1NUQVJUKTog TW92ZSB0byBoZXJlLgoJKFRFQU1fQVJFTkFfRlJFRSk6IExpa2V3aXNlLgoJKFRFQU1fQVJF TkFfRU5EKTogTGlrZXdpc2UuCgkoR0NOX0xPV0xBVF9IRUFQKTogTmV3LgoJKiBjb25maWcv Z2NuL3RlYW0uYyAoTElUVExFRU5ESUFOX0NQVSk6IE5ldywgYW5kIGltcG9ydCBoc2EuaC4K CShfX2djbl9sb3dsYXRfaW5pdCk6IE5ldyBwcm90b3R5cGUuCgkoZ29tcF9nY25fZW50ZXJf a2VybmVsKTogSW5pdGlhbGl6ZSB0aGUgbG93LWxhdGVuY3kgaGVhcC4KCSogbGliZ29tcC5o IChURUFNX0FSRU5BX1NUQVJUKTogTW92ZSB0byBsaWJnb21wLmguCgkoVEVBTV9BUkVOQV9G UkVFKTogTGlrZXdpc2UuCgkoVEVBTV9BUkVOQV9FTkQpOiBMaWtld2lzZS4KCSogcGx1Z2lu L3BsdWdpbi1nY24uYyAobG93bGF0X3NpemUpOiBOZXcgdmFyaWFibGUuCgkocHJpbnRfa2Vy bmVsX2Rpc3BhdGNoKTogTGFiZWwgdGhlIGdyb3VwX3NlZ21lbnRfc2l6ZSBwdXJwb3NlLgoJ KGluaXRfZW52aXJvbm1lbnRfdmFyaWFibGVzKTogUmVhZCBHT01QX0dDTl9MT1dMQVRfUE9P TC4KCShjcmVhdGVfa2VybmVsX2Rpc3BhdGNoKTogUGFzcyBsb3ctbGF0ZW5jeSBoZWFkIGFs bG9jYXRpb24gdG8ga2VybmVsLgoJKHJ1bl9rZXJuZWwpOiBVc2Ugc2hhZG93OyBkb24ndCBh c3N1bWUgdmFsdWVzLgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtNy5jOiBF bmFibGUgZm9yIGFtZGdjbi4KCSogY29uZmlnL2djbi9hbGxvY2F0b3IuYzogTmV3IGZpbGUu CgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9nY24vZ2NuLWJ1aWx0aW5zLmRlZiBiL2djYy9j b25maWcvZ2NuL2djbi1idWlsdGlucy5kZWYKaW5kZXggZjFjZjMwYmJjOTQuLjM2MTljYWI0 NDAyIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2djbi9nY24tYnVpbHRpbnMuZGVmCisrKyBi L2djYy9jb25maWcvZ2NuL2djbi1idWlsdGlucy5kZWYKQEAgLTE2NCw2ICsxNjQsOCBAQCBE RUZfQlVJTFRJTiAoRklSU1RfQ0FMTF9USElTX1RIUkVBRF9QLCAtMSwgImZpcnN0X2NhbGxf dGhpc190aHJlYWRfcCIsIEJfSU5TTiwKIAkgICAgIF9BMSAoR0NOX0JUSV9CT09MKSwgZ2Nu X2V4cGFuZF9idWlsdGluXzEpCiBERUZfQlVJTFRJTiAoS0VSTkFSR19QVFIsIC0xLCAia2Vy bmFyZ19wdHIiLCBCX0lOU04sIF9BMSAoR0NOX0JUSV9WT0lEUFRSKSwKIAkgICAgIGdjbl9l eHBhbmRfYnVpbHRpbl8xKQorREVGX0JVSUxUSU4gKERJU1BBVENIX1BUUiwgLTEsICJkaXNw YXRjaF9wdHIiLCBCX0lOU04sIF9BMSAoR0NOX0JUSV9WT0lEUFRSKSwKKwkgICAgIGdjbl9l eHBhbmRfYnVpbHRpbl8xKQogREVGX0JVSUxUSU4gKEdFVF9TVEFDS19MSU1JVCwgLTEsICJn ZXRfc3RhY2tfbGltaXQiLCBCX0lOU04sCiAJICAgICBfQTEgKEdDTl9CVElfVk9JRFBUUiks IGdjbl9leHBhbmRfYnVpbHRpbl8xKQogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2djbi9n Y24uY2MgYi9nY2MvY29uZmlnL2djbi9nY24uY2MKaW5kZXggMGIyMWRiZDI1NmUuLjhlNDg3 Yjk0ZTk1IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2djbi9nY24uY2MKKysrIGIvZ2NjL2Nv bmZpZy9nY24vZ2NuLmNjCkBAIC0xMTQsNyArMTE0LDggQEAgZ2NuX2luaXRfbWFjaGluZV9z dGF0dXMgKHZvaWQpCiAKICAgZiA9IGdnY19jbGVhcmVkX2FsbG9jPG1hY2hpbmVfZnVuY3Rp b24+ICgpOwogCi0gIGlmIChUQVJHRVRfR0NOMykKKyAgLy8gRklYTUU6IHJlLWVuYWJsZSBn bG9iYWwgYWRkcmVzc2luZyB3aXRoIHNhZmV0eSBmb3IgTERTLWZsYXQgYWRkcmVzc2VzCisg IC8vaWYgKFRBUkdFVF9HQ04zKQogICAgIGYtPnVzZV9mbGF0X2FkZHJlc3NpbmcgPSB0cnVl OwogCiAgIHJldHVybiBmOwpAQCAtNDYyNiw2ICs0NjI3LDE5IEBAIGdjbl9leHBhbmRfYnVp bHRpbl8xICh0cmVlIGV4cCwgcnR4IHRhcmdldCwgcnR4IC8qc3VidGFyZ2V0ICovICwKIAkg IH0KIAlyZXR1cm4gcHRyOwogICAgICAgfQorICAgIGNhc2UgR0NOX0JVSUxUSU5fRElTUEFU Q0hfUFRSOgorICAgICAgeworCXJ0eCBwdHI7CisJaWYgKGNmdW4tPm1hY2hpbmUtPmFyZ3Mu cmVnW0RJU1BBVENIX1BUUl9BUkddID49IDApCisJICAgcHRyID0gZ2VuX3J0eF9SRUcgKERJ bW9kZSwKKwkJCSAgICAgIGNmdW4tPm1hY2hpbmUtPmFyZ3MucmVnW0RJU1BBVENIX1BUUl9B UkddKTsKKwllbHNlCisJICB7CisJICAgIHB0ciA9IGdlbl9yZWdfcnR4IChESW1vZGUpOwor CSAgICBlbWl0X21vdmVfaW5zbiAocHRyLCBjb25zdDBfcnR4KTsKKwkgIH0KKwlyZXR1cm4g cHRyOworICAgICAgfQogICAgIGNhc2UgR0NOX0JVSUxUSU5fRklSU1RfQ0FMTF9USElTX1RI UkVBRF9QOgogICAgICAgewogCS8qIFN0YXNoIGEgbWFya2VyIGluIHRoZSB1bnVzZWQgdXBw ZXIgMTYgYml0cyBvZiBzWzA6MV0gdG8gaW5kaWNhdGUKZGlmZiAtLWdpdCBhL2xpYmdvbXAv Y29uZmlnL2djbi9hbGxvY2F0b3IuYyBiL2xpYmdvbXAvY29uZmlnL2djbi9hbGxvY2F0b3Iu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDAxZGU4OWZmZTAK LS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL2NvbmZpZy9nY24vYWxsb2NhdG9yLmMKQEAg LTAsMCArMSwxMjkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAyMyBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBPZmZs b2FkaW5nIGFuZCBNdWx0aSBQcm9jZXNzaW5nIExpYnJhcnkKKyAgIChsaWJnb21wKS4KKwor ICAgTGliZ29tcCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIExpYmdvbXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgICBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTCisgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICAgbW9yZSBkZXRhaWxzLgorCisg ICBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFk ZGl0aW9uYWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUg TGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAg YSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcu UlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhlIGxvdy1sYXRlbmN5IGFsbG9jYXRvcnMg dXNlIHNwYWNlIHJlc2VydmVkIGluIExEUyBtZW1vcnkgd2hlbiB0aGUKKyAgIGtlcm5lbCBp cyBsYXVuY2hlZC4gIFRoZSBoZWFwIGlzIGluaXRpYWxpemVkIGluIGdvbXBfZ2NuX2VudGVy X2tlcm5lbCBhbmQKKyAgIGFsbCBhbGxvY2F0aW9ucyBhcmUgZm9yZ290dGVuIHdoZW4gdGhl IGtlcm5lbCBleGl0cy4gIEFsbG9jYXRpb25zIHRvIG90aGVyCisgICBtZW1vcnkgc3BhY2Vz IGFsbCB1c2UgdGhlIHN5c3RlbSBtYWxsb2Mgc3lzY2FsbC4KKworICAgVGhlIHBvaW50ZXJz IHJldHVybmVkIGFyZSA2NC1iaXQgIkZsYXQiIGFkZHJlc3NlcyBpbmRpc3Rpbmd1aXNoYWJs ZSBmcm9tCisgICByZWd1bGFyIHBvaW50ZXJzLCBidXQgb25seSBjb21wYXRpYmxlIHdpdGgg dGhlICJmbGF0X2xvYWQvc3RvcmUiCisgICBpbnN0cnVjdGlvbnMuICBUaGUgY29tcGlsZXIg aGFzIGJlZW4gY29kZWQgdG8gYXNzaWduIGRlZmF1bHQgYWRkcmVzcworICAgc3BhY2VzIGFj Y29yZGluZ2x5LgorCisgICBMRFMgbWVtb3J5IGlzIG5vdCB2aXNpYmxlIHRvIG90aGVyIHRl YW1zLCBhbmQgdGhlcmVmb3JlIG1heSBvbmx5IGJlIHVzZWQKKyAgIHdoZW4gdGhlIG1lbXNw YWNlIGFjY2VzcyB0cmFpdCBpcyBzZXQgYWNjb3JkaW5nbHkuICAqLworCisjaW5jbHVkZSAi bGliZ29tcC5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIEJBU0lDX0FMTE9D X1BSRUZJWCBfX2djbl9sb3dsYXQKKyNkZWZpbmUgQkFTSUNfQUxMT0NfWUlFTEQgYXNtKCJz X3NsZWVwIDEiIDo6OiAibWVtb3J5IikKKyNpbmNsdWRlICIuLi8uLi9iYXNpYy1hbGxvY2F0 b3IuYyIKKworLyogVGhlIGxvdy1sYXRlbmN5IGhlYXAgaXMgbG9jYXRlZCBpbiBMRFMgbWVt b3J5LCBidXQgd2UgbmVlZCB0aGUgX19mbGF0CisgICBhZGRyZXNzIHNwYWNlIGZvciBjb21w YXRpYmlsaXR5IHJlYXNvbnMuICAqLworI2RlZmluZSBGTEFUX0hFQVBfUFRSIFwKKyAgKCh2 b2lkKikodWludHB0cl90KSh2b2lkIF9fZmxhdCopKHZvaWQgX19sZHMgKilHQ05fTE9XTEFU X0hFQVApCisKK3N0YXRpYyB2b2lkICoKK2djbl9tZW1zcGFjZV9hbGxvYyAob21wX21lbXNw YWNlX2hhbmRsZV90IG1lbXNwYWNlLCBzaXplX3Qgc2l6ZSkKK3sKKyAgaWYgKG1lbXNwYWNl ID09IG9tcF9sb3dfbGF0X21lbV9zcGFjZSkKKyAgICB7CisgICAgICBjaGFyICpzaGFyZWRf cG9vbCA9IEZMQVRfSEVBUF9QVFI7CisKKyAgICAgIHJldHVybiBfX2djbl9sb3dsYXRfYWxs b2MgKHNoYXJlZF9wb29sLCBzaXplKTsKKyAgICB9CisgIGVsc2UgaWYgKG1lbXNwYWNlID09 IG9tcHhfaG9zdF9tZW1fc3BhY2UpCisgICAgcmV0dXJuIE5VTEw7CisgIGVsc2UKKyAgICBy ZXR1cm4gbWFsbG9jIChzaXplKTsKK30KKworc3RhdGljIHZvaWQgKgorZ2NuX21lbXNwYWNl X2NhbGxvYyAob21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCBzaXplX3Qgc2l6ZSkK K3sKKyAgaWYgKG1lbXNwYWNlID09IG9tcF9sb3dfbGF0X21lbV9zcGFjZSkKKyAgICB7Cisg ICAgICBjaGFyICpzaGFyZWRfcG9vbCA9IEZMQVRfSEVBUF9QVFI7CisKKyAgICAgIHJldHVy biBfX2djbl9sb3dsYXRfY2FsbG9jIChzaGFyZWRfcG9vbCwgc2l6ZSk7CisgICAgfQorICBl bHNlIGlmIChtZW1zcGFjZSA9PSBvbXB4X2hvc3RfbWVtX3NwYWNlKQorICAgIHJldHVybiBO VUxMOworICBlbHNlCisgICAgcmV0dXJuIGNhbGxvYyAoMSwgc2l6ZSk7Cit9CisKK3N0YXRp YyB2b2lkCitnY25fbWVtc3BhY2VfZnJlZSAob21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNw YWNlLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgaWYgKG1lbXNwYWNlID09IG9t cF9sb3dfbGF0X21lbV9zcGFjZSkKKyAgICB7CisgICAgICBjaGFyICpzaGFyZWRfcG9vbCA9 IEZMQVRfSEVBUF9QVFI7CisKKyAgICAgIF9fZ2NuX2xvd2xhdF9mcmVlIChzaGFyZWRfcG9v bCwgYWRkciwgc2l6ZSk7CisgICAgfQorICBlbHNlCisgICAgZnJlZSAoYWRkcik7Cit9CisK K3N0YXRpYyB2b2lkICoKK2djbl9tZW1zcGFjZV9yZWFsbG9jIChvbXBfbWVtc3BhY2VfaGFu ZGxlX3QgbWVtc3BhY2UsIHZvaWQgKmFkZHIsCisJCQlzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90 IHNpemUpCit7CisgIGlmIChtZW1zcGFjZSA9PSBvbXBfbG93X2xhdF9tZW1fc3BhY2UpCisg ICAgeworICAgICAgY2hhciAqc2hhcmVkX3Bvb2wgPSBGTEFUX0hFQVBfUFRSOworCisgICAg ICByZXR1cm4gX19nY25fbG93bGF0X3JlYWxsb2MgKHNoYXJlZF9wb29sLCBhZGRyLCBvbGRz aXplLCBzaXplKTsKKyAgICB9CisgIGVsc2UgaWYgKG1lbXNwYWNlID09IG9tcHhfaG9zdF9t ZW1fc3BhY2UpCisgICAgcmV0dXJuIE5VTEw7CisgIGVsc2UKKyAgICByZXR1cm4gcmVhbGxv YyAoYWRkciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitnY25fbWVtc3BhY2Vf dmFsaWRhdGUgKG9tcF9tZW1zcGFjZV9oYW5kbGVfdCBtZW1zcGFjZSwgdW5zaWduZWQgYWNj ZXNzKQoreworICAvKiBEaXNhbGxvdyB1c2Ugb2YgbG93LWxhdGVuY3kgbWVtb3J5IHdoZW4g aXQgbXVzdCBiZSBhY2Nlc3NpYmxlIGJ5CisgICAgIGFsbCB0aHJlYWRzLiAgKi8KKyAgcmV0 dXJuIChtZW1zcGFjZSAhPSBvbXBfbG93X2xhdF9tZW1fc3BhY2UKKwkgIHx8IGFjY2VzcyAh PSBvbXBfYXR2X2FsbCk7Cit9CisKKyNkZWZpbmUgTUVNU1BBQ0VfQUxMT0MoTUVNU1BBQ0Us IFNJWkUsIFBJTikgXAorICBnY25fbWVtc3BhY2VfYWxsb2MgKE1FTVNQQUNFLCBTSVpFKQor I2RlZmluZSBNRU1TUEFDRV9DQUxMT0MoTUVNU1BBQ0UsIFNJWkUsIFBJTikgXAorICBnY25f bWVtc3BhY2VfY2FsbG9jIChNRU1TUEFDRSwgU0laRSkKKyNkZWZpbmUgTUVNU1BBQ0VfUkVB TExPQyhNRU1TUEFDRSwgQUREUiwgT0xEU0laRSwgU0laRSwgT0xEUElOLCBQSU4pIFwKKyAg Z2NuX21lbXNwYWNlX3JlYWxsb2MgKE1FTVNQQUNFLCBBRERSLCBPTERTSVpFLCBTSVpFKQor I2RlZmluZSBNRU1TUEFDRV9GUkVFKE1FTVNQQUNFLCBBRERSLCBTSVpFLCBQSU4pIFwKKyAg Z2NuX21lbXNwYWNlX2ZyZWUgKE1FTVNQQUNFLCBBRERSLCBTSVpFKQorI2RlZmluZSBNRU1T UEFDRV9WQUxJREFURShNRU1TUEFDRSwgQUNDRVNTKSBcCisgIGdjbl9tZW1zcGFjZV92YWxp ZGF0ZSAoTUVNU1BBQ0UsIEFDQ0VTUykKKworI2luY2x1ZGUgIi4uLy4uL2FsbG9jYXRvci5j IgpkaWZmIC0tZ2l0IGEvbGliZ29tcC9jb25maWcvZ2NuL2xpYmdvbXAtZ2NuLmggYi9saWJn b21wL2NvbmZpZy9nY24vbGliZ29tcC1nY24uaAppbmRleCAxNTIxMTY2YmFhMy4uM2U4ZDc0 NTE0NTMgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvY29uZmlnL2djbi9saWJnb21wLWdjbi5oCisr KyBiL2xpYmdvbXAvY29uZmlnL2djbi9saWJnb21wLWdjbi5oCkBAIC0zMyw2ICszMywxMiBA QAogI2RlZmluZSBERUZBVUxUX0dDTl9TVEFDS19TSVpFICgzMioxMDI0KQogI2RlZmluZSBE RUZBVUxUX1RFQU1fQVJFTkFfU0laRSAoNjQqMTAyNCkKIAorLyogVGhlc2UgZGVmaW5lIHRo ZSBMRFMgbG9jYXRpb24gb2YgZGF0YSBuZWVkZWQgYnkgT3Blbk1QLiAgKi8KKyNkZWZpbmUg VEVBTV9BUkVOQV9TVEFSVCAxNiAgLyogTERTIG9mZnNldCBvZiBmcmVlIHBvaW50ZXIuICAq LworI2RlZmluZSBURUFNX0FSRU5BX0ZSRUUgIDI0ICAvKiBMRFMgb2Zmc2V0IG9mIGZyZWUg cG9pbnRlci4gICovCisjZGVmaW5lIFRFQU1fQVJFTkFfRU5EICAgMzIgIC8qIExEUyBvZmZz ZXQgb2YgZW5kIHBvaW50ZXIuICAqLworI2RlZmluZSBHQ05fTE9XTEFUX0hFQVAgIDQwICAv KiBMRFMgb2Zmc2V0IG9mIHRoZSBPcGVuTVAgbG93LWxhdGVuY3kgaGVhcC4gICovCisKIHN0 cnVjdCBoZWFwCiB7CiAgIGludDY0X3Qgc2l6ZTsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvY29u ZmlnL2djbi90ZWFtLmMgYi9saWJnb21wL2NvbmZpZy9nY24vdGVhbS5jCmluZGV4IGZmZGMw OWI3ZjM1Li4xMzY0MWE0NzAyYyAxMDA2NDQKLS0tIGEvbGliZ29tcC9jb25maWcvZ2NuL3Rl YW0uYworKysgYi9saWJnb21wL2NvbmZpZy9nY24vdGVhbS5jCkBAIC0yOSw2ICsyOSwxMiBA QAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCisjZGVmaW5l IExJVFRMRUVORElBTl9DUFUKKyNpbmNsdWRlICJoc2EuaCIKKworLyogRGVmaW5lZCBpbiBi YXNpYy1hbGxvY2F0b3IuYyB2aWEgY29uZmlnL2FtZGdjbi9hbGxvY2F0b3IuYy4gICovCit2 b2lkIF9fZ2NuX2xvd2xhdF9pbml0ICh2b2lkICpoZWFwLCBzaXplX3Qgc2l6ZSk7CisKIHN0 YXRpYyB2b2lkIGdvbXBfdGhyZWFkX3N0YXJ0IChzdHJ1Y3QgZ29tcF90aHJlYWRfcG9vbCAq KTsKIAogLyogVGhpcyBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24gaGFuZGxlcyB0YXJn ZXQgcmVnaW9uIGVudHJ5LiAgSXQKQEAgLTcxLDYgKzc3LDEyIEBAIGdvbXBfZ2NuX2VudGVy X2tlcm5lbCAodm9pZCkKICAgICAgICphcmVuYV9mcmVlID0gdGVhbV9hcmVuYTsKICAgICAg ICphcmVuYV9lbmQgPSB0ZWFtX2FyZW5hICsga2VybmFyZ3MtPmFyZW5hX3NpemVfcGVyX3Rl YW07CiAKKyAgICAgIC8qIEluaXRpYWxpemUgdGhlIGxvdy1sYXRlbmN5IGhlYXAuICBUaGUg aGVhZGVyIGlzIHRoZSBzaXplLiAgKi8KKyAgICAgIHZvaWQgX19sZHMgKmxvd2xhdCA9ICh2 b2lkIF9fbGRzICopR0NOX0xPV0xBVF9IRUFQOworICAgICAgaHNhX2tlcm5lbF9kaXNwYXRj aF9wYWNrZXRfdCAqcXVldWVfcHRyID0gX19idWlsdGluX2djbl9kaXNwYXRjaF9wdHIgKCk7 CisgICAgICBfX2djbl9sb3dsYXRfaW5pdCAoKHZvaWQqKSh1aW50cHRyX3QpKHZvaWQgX19m bGF0Kilsb3dsYXQsCisJCQkgcXVldWVfcHRyLT5ncm91cF9zZWdtZW50X3NpemUgLSBHQ05f TE9XTEFUX0hFQVApOworCiAgICAgICAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUg dGVhbS1sb2NhbC1zdG9yYWdlIGRhdGEuICAqLwogICAgICAgc3RydWN0IGdvbXBfdGhyZWFk ICp0aHJzID0gdGVhbV9tYWxsb2NfY2xlYXJlZCAoc2l6ZW9mICgqdGhycykKIAkJCQkJCSAg ICAgICogbnVtdGhyZWFkcyk7CmRpZmYgLS1naXQgYS9saWJnb21wL2xpYmdvbXAuaCBiL2xp YmdvbXAvbGliZ29tcC5oCmluZGV4IGEwYWY2NmUzOTZiLi5kMWU0NWNjNTg0ZSAxMDA2NDQK LS0tIGEvbGliZ29tcC9saWJnb21wLmgKKysrIGIvbGliZ29tcC9saWJnb21wLmgKQEAgLTEx NCw5ICsxMTQsNiBAQCBleHRlcm4gdm9pZCBnb21wX2FsaWduZWRfZnJlZSAodm9pZCAqKTsK ICNpZmRlZiBfX0FNREdDTl9fCiAjaW5jbHVkZSAibGliZ29tcC1nY24uaCIKIC8qIFRoZSBh cmVuYSBpcyBpbml0aWFsaXplZCBpbiBjb25maWcvZ2NuL3RlYW0uYy4gICovCi0jZGVmaW5l IFRFQU1fQVJFTkFfU1RBUlQgMTYgIC8qIExEUyBvZmZzZXQgb2YgZnJlZSBwb2ludGVyLiAg Ki8KLSNkZWZpbmUgVEVBTV9BUkVOQV9GUkVFICAyNCAgLyogTERTIG9mZnNldCBvZiBmcmVl IHBvaW50ZXIuICAqLwotI2RlZmluZSBURUFNX0FSRU5BX0VORCAgIDMyICAvKiBMRFMgb2Zm c2V0IG9mIGVuZCBwb2ludGVyLiAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkICogX19hdHRy aWJ1dGVfXygobWFsbG9jKSkKIHRlYW1fbWFsbG9jIChzaXplX3Qgc2l6ZSkKZGlmZiAtLWdp dCBhL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1nY24uYyBiL2xpYmdvbXAvcGx1Z2luL3BsdWdp bi1nY24uYwppbmRleCA3MGE1NTVhMjRhMi4uY2E4OWJhNjU4ZmQgMTAwNjQ0Ci0tLSBhL2xp YmdvbXAvcGx1Z2luL3BsdWdpbi1nY24uYworKysgYi9saWJnb21wL3BsdWdpbi9wbHVnaW4t Z2NuLmMKQEAgLTU2Myw2ICs1NjMsNyBAQCBzdGF0aWMgc2l6ZV90IGdjbl9rZXJuZWxfaGVh cF9zaXplID0gREVGQVVMVF9HQ05fSEVBUF9TSVpFOwogCiBzdGF0aWMgaW50IHRlYW1fYXJl bmFfc2l6ZSA9IERFRkFVTFRfVEVBTV9BUkVOQV9TSVpFOwogc3RhdGljIGludCBzdGFja19z aXplID0gREVGQVVMVF9HQ05fU1RBQ0tfU0laRTsKK3N0YXRpYyBpbnQgbG93bGF0X3NpemUg PSAtMTsKIAogLyogRmxhZyB0byBkZWNpZGUgd2hldGhlciBwcmludCB0byBzdGRlcnIgaW5m b3JtYXRpb24gYWJvdXQgd2hhdCBpcyBnb2luZyBvbi4KICAgIFNldCBpbiBpbml0X2RlYnVn IGRlcGVuZGluZyBvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAqLwpAQCAtMTA0Nyw4ICsx MDQ4LDggQEAgcHJpbnRfa2VybmVsX2Rpc3BhdGNoIChzdHJ1Y3Qga2VybmVsX2Rpc3BhdGNo ICpkaXNwYXRjaCwgdW5zaWduZWQgaW5kZW50KQogICBmcHJpbnRmIChzdGRlcnIsICIlKnNv YmplY3Q6ICVsdVxuIiwgaW5kZW50LCAiIiwgZGlzcGF0Y2gtPm9iamVjdCk7CiAgIGZwcmlu dGYgKHN0ZGVyciwgIiUqc3ByaXZhdGVfc2VnbWVudF9zaXplOiAldVxuIiwgaW5kZW50LCAi IiwKIAkgICBkaXNwYXRjaC0+cHJpdmF0ZV9zZWdtZW50X3NpemUpOwotICBmcHJpbnRmIChz dGRlcnIsICIlKnNncm91cF9zZWdtZW50X3NpemU6ICV1XG4iLCBpbmRlbnQsICIiLAotCSAg IGRpc3BhdGNoLT5ncm91cF9zZWdtZW50X3NpemUpOworICBmcHJpbnRmIChzdGRlcnIsICIl KnNncm91cF9zZWdtZW50X3NpemU6ICV1IChsb3ctbGF0ZW5jeSBwb29sKVxuIiwgaW5kZW50 LAorCSAgICIiLCBkaXNwYXRjaC0+Z3JvdXBfc2VnbWVudF9zaXplKTsKICAgZnByaW50ZiAo c3RkZXJyLCAiXG4iKTsKIH0KIApAQCAtMTExOSw2ICsxMTIwLDEwIEBAIGluaXRfZW52aXJv bm1lbnRfdmFyaWFibGVzICh2b2lkKQogICAgICAgaWYgKHRtcCkKIAlzdGFja19zaXplID0g dG1wOzsKICAgICB9CisKKyAgY29uc3QgY2hhciAqbG93bGF0ID0gc2VjdXJlX2dldGVudiAo IkdPTVBfR0NOX0xPV0xBVF9QT09MIik7CisgIGlmIChsb3dsYXQpCisgICAgbG93bGF0X3Np emUgPSBhdG9pIChsb3dsYXQpOwogfQogCiAvKiBSZXR1cm4gbWFsbG9jJ2Qgc3RyaW5nIHdp dGggbmFtZSBvZiBTWU1CT0wuICAqLwpAQCAtMTk0Niw3ICsxOTUxLDI1IEBAIGNyZWF0ZV9r ZXJuZWxfZGlzcGF0Y2ggKHN0cnVjdCBrZXJuZWxfaW5mbyAqa2VybmVsLCBpbnQgbnVtX3Rl YW1zLAogCiAgIHNoYWRvdy0+c2lnbmFsID0gc3luY19zaWduYWwuaGFuZGxlOwogICBzaGFk b3ctPnByaXZhdGVfc2VnbWVudF9zaXplID0ga2VybmVsLT5wcml2YXRlX3NlZ21lbnRfc2l6 ZTsKLSAgc2hhZG93LT5ncm91cF9zZWdtZW50X3NpemUgPSBrZXJuZWwtPmdyb3VwX3NlZ21l bnRfc2l6ZTsKKworICBpZiAobG93bGF0X3NpemUgPCAwKQorICAgIHsKKyAgICAgIC8qIERp dmlkZSB0aGUgTERTIGJldHdlZW4gdGhlIG51bWJlciBvZiBydW5uaW5nIHRlYW1zLgorCSBB bGxvY2F0ZSBub3QgbGVzcyB0aGFuIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBtZXRhZGF0 YS4gICovCisgICAgICBpbnQgdGVhbXNfcGVyX2N1ID0gbnVtX3RlYW1zIC8gZ2V0X2N1X2Nv dW50IChhZ2VudCk7CisgICAgICBpbnQgTERTX3Blcl90ZWFtID0gKHRlYW1zX3Blcl9jdSA/ IDY1NTM2IC8gdGVhbXNfcGVyX2N1IDogNjU1MzYpOworICAgICAgc2hhZG93LT5ncm91cF9z ZWdtZW50X3NpemUKKwk9IChrZXJuZWwtPmdyb3VwX3NlZ21lbnRfc2l6ZSA+IExEU19wZXJf dGVhbQorCSAgID8ga2VybmVsLT5ncm91cF9zZWdtZW50X3NpemUKKwkgICA6IExEU19wZXJf dGVhbSk7OworICAgIH0KKyAgZWxzZSBpZiAobG93bGF0X3NpemUgPCBHQ05fTE9XTEFUX0hF QVArOCkKKyAgICAvKiBFbnN1cmUgdGhhdCB0aGVyZSdzIHNwYWNlIGZvciB0aGUgT3Blbk1Q IGxpYmdvbXAgZGF0YS4gICovCisgICAgc2hhZG93LT5ncm91cF9zZWdtZW50X3NpemUgPSBH Q05fTE9XTEFUX0hFQVArODsKKyAgZWxzZQorICAgIHNoYWRvdy0+Z3JvdXBfc2VnbWVudF9z aXplID0gKGxvd2xhdF9zaXplID4gNjU1MzYKKwkJCQkgID8gNjU1MzYKKwkJCQkgIDogbG93 bGF0X3NpemUpOwogCiAgIC8qIFdlIGV4cGVjdCBrZXJuZWxzIHRvIHJlcXVlc3QgYSBzaW5n bGUgcG9pbnRlciwgZXhwbGljaXRseSwgYW5kIHRoZQogICAgICByZXN0IG9mIHN0cnVjdCBr ZXJuYXJncywgaW1wbGljaXRseS4gIElmIHRoZXkgcmVxdWVzdCBhbnl0aGluZyBlbHNlCkBA IC0yMzA1LDkgKzIzMjgsOSBAQCBydW5fa2VybmVsIChzdHJ1Y3Qga2VybmVsX2luZm8gKmtl cm5lbCwgdm9pZCAqdmFycywKICAgICAgIHByaW50X2tlcm5lbF9kaXNwYXRjaCAoc2hhZG93 LCAyKTsKICAgICB9CiAKLSAgcGFja2V0LT5wcml2YXRlX3NlZ21lbnRfc2l6ZSA9IGtlcm5l bC0+cHJpdmF0ZV9zZWdtZW50X3NpemU7Ci0gIHBhY2tldC0+Z3JvdXBfc2VnbWVudF9zaXpl ID0ga2VybmVsLT5ncm91cF9zZWdtZW50X3NpemU7Ci0gIHBhY2tldC0+a2VybmVsX29iamVj dCA9IGtlcm5lbC0+b2JqZWN0OworICBwYWNrZXQtPnByaXZhdGVfc2VnbWVudF9zaXplID0g c2hhZG93LT5wcml2YXRlX3NlZ21lbnRfc2l6ZTsKKyAgcGFja2V0LT5ncm91cF9zZWdtZW50 X3NpemUgPSBzaGFkb3ctPmdyb3VwX3NlZ21lbnRfc2l6ZTsKKyAgcGFja2V0LT5rZXJuZWxf b2JqZWN0ID0gc2hhZG93LT5vYmplY3Q7CiAgIHBhY2tldC0+a2VybmFyZ19hZGRyZXNzID0g c2hhZG93LT5rZXJuYXJnX2FkZHJlc3M7CiAgIGhzYV9zaWduYWxfdCBzOwogICBzLmhhbmRs ZSA9IHNoYWRvdy0+c2lnbmFsOwpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGli Z29tcC5jL2FsbG9jYXRvcnMtNy5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2Fs bG9jYXRvcnMtNy5jCmluZGV4IGEwYTczOGIxZDFkLi41ZWYwYzVjYjNlMyAxMDA2NDQKLS0t IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtNy5jCisrKyBiL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTcuYwpAQCAtMSw3ICsxLDcg QEAKIC8qIHsgZGctZG8gcnVuIH0gKi8KIAogLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgb2ZmbG9hZF9kZXZpY2UgfSAqLwotLyogeyBkZy14ZmFpbC1pZiAibm90IGltcGxl bWVudGVkIiB7ICEgb2ZmbG9hZF90YXJnZXRfbnZwdHggfSB9ICovCisvKiB7IGRnLXhmYWls LWlmICJub3QgaW1wbGVtZW50ZWQiIHsgISB7IG9mZmxvYWRfdGFyZ2V0X252cHR4IHx8IG9m ZmxvYWRfdGFyZ2V0X2FtZGdjbiB9IH0gfSAqLwogCiAvKiBUZXN0IHRoYXQgR1BVIGxvdy1s YXRlbmN5IGFsbG9jYXRpb24gaXMgbGltaXRlZCB0byB0ZWFtIGFjY2Vzcy4gICovCiAK --------------BpR3iAtoxC0Yu46FjlrmDx00--