From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 9F2DA385734D for ; Tue, 11 Jul 2023 10:35:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9F2DA385734D 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="6.01,196,1684828800"; d="diff'?c'?scan'208";a="12862570" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 11 Jul 2023 02:35:50 -0800 IronPort-SDR: oCnTKNYwzQwOIrqdQiLkGfPx49lCbtuUF4r4MG3yONYpK49E3j+d6F2E8xmFRwCovkrBAycVfz hNQfF937dLBTNMlXcqgOLHR43qNfm4ibPaD2ZIRqxO5xWAT5IpkkGyU4Q9wdco0vqMnvyJwDaa IeZu1c51LoLh03d0mxIXobx1/2H7RkD+PoImILqlQ4C9NMyPIiofxTnrTEKcoCU6qTAt13T+cq DVbIIqQ5Uxivy6guQL6oLsacQr6bXhf3E6F3g7ct4yRlELD/mil7CZnwufTBUUOfK0vVDeLFdg DGM= Content-Type: multipart/mixed; boundary="------------0xUjA4xSU8kJzc1OygrtfQno" Message-ID: <34fce57b-69a0-a9fd-f8ff-671ee7f94227@codesourcery.com> Date: Tue, 11 Jul 2023 12:35:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Content-Language: en-US To: gcc-patches , Jakub Jelinek From: Tobias Burnus Subject: [Patch] libgomp: Use libnuma for OpenMP's partition=nearest allocation trait X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: --------------0xUjA4xSU8kJzc1OygrtfQno Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable While by default 'malloc' allocates memory on the same node as the calling process/thread ('numactl --show' shows 'preferred node: current', Linux kernel memory policy MPOL_DEFAULT), this can be changed. For instance, when running the program as follows, 'malloc' now prefers to allocate on the second node: numactl --preferred=3D1 ./myproc Thus, it seems to be sensible to provide a means to ensure the 'nearest' allocation. The MPOL_LOCAL policy does so, as provided by libnuma's numa_alloc_local. (Which is just wrapper around the syscalls mmap and mbind.) As with (lib)memkind, there is a run-time dlopen check for (lib)numa - and no numa*.h is required when bulding GCC. The patch assumes that yesterday's patch 'libgomp: Update OpenMP memory allocation doc, fix omp_high_bw_mem_space= ' https://gcc.gnu.org/pipermail/gcc-patches/2023-July/624030.html has already been applied. (Which is mostly a .texi only patch, except for one 'return' -> 'break' change.) This patch has been bootstrapped and manually tested on x86-64. It also passed "make check". Comments, remarks, thoughts? [I really dislike committing patches without any feedback from others, but I still intent to do so, if no one comments. This applies to this patch and the other one.] Tobias PS: I have attached a testcase, but as it needs -lnuma, I do not intent to commit it. An alternative which could be to do the same as we do in the patch itself; namely, to use the dlopen handle to obtain the two libnuma library calls. - I am unsure whether I should do so or whether I should just leave out the testcase. Thoughts? ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------0xUjA4xSU8kJzc1OygrtfQno Content-Type: text/x-patch; charset="UTF-8"; name="libnuma.diff" Content-Disposition: attachment; filename="libnuma.diff" Content-Transfer-Encoding: base64 bGliZ29tcDogVXNlIGxpYm51bWEgZm9yIE9wZW5NUCdzIHBhcnRpdGlvbj1uZWFyZXN0IGFs bG9jYXRpb24gdHJhaXQKCmxpYmdvbXAvQ2hhbmdlTG9nOgoKCSogYWxsb2NhdG9yLmM6IEFk ZCBpZmRlZiBmb3IgTElCR09NUF9VU0VfTElCTlVNQS4KCShlbnVtIGdvbXBfbnVtYV9tZW1r aW5kX2tpbmQpOiBSZW5hbWVkIGZyb20gZ29tcF9tZW1raW5kX2tpbmQ7CglhZGQgR09NUF9N RU1LSU5EX0xJQk5VTUEuCgkoc3RydWN0IGdvbXBfbGlibnVtYV9kYXRhLCBnb21wX2luaXRf bGlibnVtYSwgZ29tcF9nZXRfbGlibnVtYSk6IE5ldy4KCShvbXBfaW5pdF9hbGxvY2F0b3Ip OiBIYW5kbGUgcGFydGl0aW9uPW5lYXJlc3Qgd2l0aCBsaWJudW1hIGlmIGF2YWlsLgoJKG9t cF9hbGlnbmVkX2FsbG9jLCBvbXBfZnJlZSwgb21wX2FsaWduZWRfY2FsbG9jLCBvbXBfcmVh bGxvYyk6IEFkZAoJbnVtYV9hbGxvY19sb2NhbCAoKyBtZW1zZXQpLCBudW1hX2ZyZWUsIGFu ZCBudW1hX3JlYWxsb2MgY2FsbHMgYXMKCW5lZWRlZC4KCSogY29uZmlnL2xpbnV4L2FsbG9j YXRvci5jIChMSUJHT01QX1VTRV9MSUJOVU1BKTogRGVmaW5lCgkqIGxpYmdvbXAudGV4aSAo TWVtb3J5IGFsbG9jYXRpb24pOiBSZW5hbWVkIGZyb20gJ01lbW9yeSBhbGxvY2F0aW9uCgl3 aXRoIGxpYm1lbWtpbmQnOyB1cGRhdGVkIGZvciBsaWJudW1hIHVzYWdlLgoKIGxpYmdvbXAv YWxsb2NhdG9yLmMgICAgICAgICAgICAgIHwgMjAyICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLQogbGliZ29tcC9jb25maWcvbGludXgvYWxsb2NhdG9yLmMgfCAg IDEgKwogbGliZ29tcC9saWJnb21wLnRleGkgICAgICAgICAgICAgfCAgMjIgKysrKy0KIDMg ZmlsZXMgY2hhbmdlZCwgMTk1IGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2xpYmdvbXAvYWxsb2NhdG9yLmMgYi9saWJnb21wL2FsbG9jYXRvci5jCmlu ZGV4IDI1YzBmMTUwMzAyLi4yNjMyZjE2ZTEzMiAxMDA2NDQKLS0tIGEvbGliZ29tcC9hbGxv Y2F0b3IuYworKysgYi9saWJnb21wL2FsbG9jYXRvci5jCkBAIC0zMSwxMyArMzEsMTMgQEAK ICNpbmNsdWRlICJsaWJnb21wLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8 c3RyaW5nLmg+Ci0jaWZkZWYgTElCR09NUF9VU0VfTUVNS0lORAorI2lmIGRlZmluZWQoTElC R09NUF9VU0VfTUVNS0lORCkgfHwgZGVmaW5lZChMSUJHT01QX1VTRV9MSUJOVU1BKQogI2lu Y2x1ZGUgPGRsZmNuLmg+CiAjZW5kaWYKIAogI2RlZmluZSBvbXBfbWF4X3ByZWRlZmluZWRf YWxsb2Mgb21wX3RocmVhZF9tZW1fYWxsb2MKIAotZW51bSBnb21wX21lbWtpbmRfa2luZAor ZW51bSBnb21wX251bWFfbWVta2luZF9raW5kCiB7CiAgIEdPTVBfTUVNS0lORF9OT05FID0g MCwKICNkZWZpbmUgR09NUF9NRU1LSU5EX0tJTkRTIFwKQEAgLTUwLDcgKzUwLDggQEAgZW51 bSBnb21wX21lbWtpbmRfa2luZAogI2RlZmluZSBHT01QX01FTUtJTkRfS0lORChraW5kKSBH T01QX01FTUtJTkRfIyNraW5kCiAgIEdPTVBfTUVNS0lORF9LSU5EUywKICN1bmRlZiBHT01Q X01FTUtJTkRfS0lORAotICBHT01QX01FTUtJTkRfQ09VTlQKKyAgR09NUF9NRU1LSU5EX0NP VU5ULAorICBHT01QX01FTUtJTkRfTElCTlVNQSA9IEdPTVBfTUVNS0lORF9DT1VOVAogfTsK IAogc3RydWN0IG9tcF9hbGxvY2F0b3JfZGF0YQpAQCAtNjUsNyArNjYsNyBAQCBzdHJ1Y3Qg b21wX2FsbG9jYXRvcl9kYXRhCiAgIHVuc2lnbmVkIGludCBmYWxsYmFjayA6IDg7CiAgIHVu c2lnbmVkIGludCBwaW5uZWQgOiAxOwogICB1bnNpZ25lZCBpbnQgcGFydGl0aW9uIDogNzsK LSNpZmRlZiBMSUJHT01QX1VTRV9NRU1LSU5ECisjaWYgZGVmaW5lZChMSUJHT01QX1VTRV9N RU1LSU5EKSB8fCBkZWZpbmVkKExJQkdPTVBfVVNFX0xJQk5VTUEpCiAgIHVuc2lnbmVkIGlu dCBtZW1raW5kIDogODsKICNlbmRpZgogI2lmbmRlZiBIQVZFX1NZTkNfQlVJTFRJTlMKQEAg LTgxLDYgKzgyLDE0IEBAIHN0cnVjdCBvbXBfbWVtX2hlYWRlcgogICB2b2lkICpwYWQ7CiB9 OwogCitzdHJ1Y3QgZ29tcF9saWJudW1hX2RhdGEKK3sKKyAgdm9pZCAqbnVtYV9oYW5kbGU7 CisgIHZvaWQgKigqbnVtYV9hbGxvY19sb2NhbCkgKHNpemVfdCk7CisgIHZvaWQgKigqbnVt YV9yZWFsbG9jKSAodm9pZCAqLCBzaXplX3QsIHNpemVfdCk7CisgIHZvaWQgKCpudW1hX2Zy ZWUpICh2b2lkICosIHNpemVfdCk7Cit9OworCiBzdHJ1Y3QgZ29tcF9tZW1raW5kX2RhdGEK IHsKICAgdm9pZCAqbWVta2luZF9oYW5kbGU7CkBAIC05Miw2ICsxMDEsNTAgQEAgc3RydWN0 IGdvbXBfbWVta2luZF9kYXRhCiAgIHZvaWQgKipraW5kc1tHT01QX01FTUtJTkRfQ09VTlRd OwogfTsKIAorI2lmZGVmIExJQkdPTVBfVVNFX0xJQk5VTUEKK3N0YXRpYyBzdHJ1Y3QgZ29t cF9saWJudW1hX2RhdGEgKmxpYm51bWFfZGF0YTsKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBs aWJudW1hX2RhdGFfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworCitzdGF0aWMgdm9pZAor Z29tcF9pbml0X2xpYm51bWEgKHZvaWQpCit7CisgIHZvaWQgKmhhbmRsZSA9IGRsb3BlbiAo ImxpYm51bWEuc28uMSIsIFJUTERfTEFaWSk7CisgIHN0cnVjdCBnb21wX2xpYm51bWFfZGF0 YSAqZGF0YTsKKworICBkYXRhID0gY2FsbG9jICgxLCBzaXplb2YgKHN0cnVjdCBnb21wX2xp Ym51bWFfZGF0YSkpOworICBpZiAoZGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGlmICho YW5kbGUpCisJZGxjbG9zZSAoaGFuZGxlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGlm ICghaGFuZGxlKQorICAgIHsKKyAgICAgIF9fYXRvbWljX3N0b3JlX24gKCZsaWJudW1hX2Rh dGEsIGRhdGEsIE1FTU1PREVMX1JFTEVBU0UpOworICAgICAgcmV0dXJuOworICAgIH0KKyAg ZGF0YS0+bnVtYV9oYW5kbGUgPSBoYW5kbGU7CisgIGRhdGEtPm51bWFfYWxsb2NfbG9jYWwK KyAgICA9IChfX3R5cGVvZiAoZGF0YS0+bnVtYV9hbGxvY19sb2NhbCkpIGRsc3ltIChoYW5k bGUsICJudW1hX2FsbG9jX2xvY2FsIik7CisgIGRhdGEtPm51bWFfcmVhbGxvYworICAgID0g KF9fdHlwZW9mIChkYXRhLT5udW1hX3JlYWxsb2MpKSBkbHN5bSAoaGFuZGxlLCAibnVtYV9y ZWFsbG9jIik7CisgIGRhdGEtPm51bWFfZnJlZQorICAgID0gKF9fdHlwZW9mIChkYXRhLT5u dW1hX2ZyZWUpKSBkbHN5bSAoaGFuZGxlLCAibnVtYV9mcmVlIik7CisgIF9fYXRvbWljX3N0 b3JlX24gKCZsaWJudW1hX2RhdGEsIGRhdGEsIE1FTU1PREVMX1JFTEVBU0UpOworfQorCitz dGF0aWMgc3RydWN0IGdvbXBfbGlibnVtYV9kYXRhICoKK2dvbXBfZ2V0X2xpYm51bWEgKHZv aWQpCit7CisgIHN0cnVjdCBnb21wX2xpYm51bWFfZGF0YSAqZGF0YQorICAgID0gX19hdG9t aWNfbG9hZF9uICgmbGlibnVtYV9kYXRhLCBNRU1NT0RFTF9BQ1FVSVJFKTsKKyAgaWYgKGRh dGEpCisgICAgcmV0dXJuIGRhdGE7CisgIHB0aHJlYWRfb25jZSAoJmxpYm51bWFfZGF0YV9v bmNlLCBnb21wX2luaXRfbGlibnVtYSk7CisgIHJldHVybiBfX2F0b21pY19sb2FkX24gKCZs aWJudW1hX2RhdGEsIE1FTU1PREVMX0FDUVVJUkUpOworfQorI2VuZGlmCisKICNpZmRlZiBM SUJHT01QX1VTRV9NRU1LSU5ECiBzdGF0aWMgc3RydWN0IGdvbXBfbWVta2luZF9kYXRhICpt ZW1raW5kX2RhdGE7CiBzdGF0aWMgcHRocmVhZF9vbmNlX3QgbWVta2luZF9kYXRhX29uY2Ug PSBQVEhSRUFEX09OQ0VfSU5JVDsKQEAgLTE2Niw3ICsyMTksNyBAQCBvbXBfaW5pdF9hbGxv Y2F0b3IgKG9tcF9tZW1zcGFjZV9oYW5kbGVfdCBtZW1zcGFjZSwgaW50IG50cmFpdHMsCiAg IHN0cnVjdCBvbXBfYWxsb2NhdG9yX2RhdGEgZGF0YQogICAgID0geyBtZW1zcGFjZSwgMSwg fih1aW50cHRyX3QpIDAsIDAsIDAsIG9tcF9hdHZfY29udGVuZGVkLCBvbXBfYXR2X2FsbCwK IAlvbXBfYXR2X2RlZmF1bHRfbWVtX2ZiLCBvbXBfYXR2X2ZhbHNlLCBvbXBfYXR2X2Vudmly b25tZW50LAotI2lmZGVmIExJQkdPTVBfVVNFX01FTUtJTkQKKyNpZiBkZWZpbmVkKExJQkdP TVBfVVNFX01FTUtJTkQpIHx8IGRlZmluZWQoTElCR09NUF9VU0VfTElCTlVNQSkKIAlHT01Q X01FTUtJTkRfTk9ORQogI2VuZGlmCiAgICAgICB9OwpAQCAtMjg1LDggKzMzOCw4IEBAIG9t cF9pbml0X2FsbG9jYXRvciAob21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCBpbnQg bnRyYWl0cywKIAogICBzd2l0Y2ggKG1lbXNwYWNlKQogICAgIHsKLSAgICBjYXNlIG9tcF9o aWdoX2J3X21lbV9zcGFjZToKICNpZmRlZiBMSUJHT01QX1VTRV9NRU1LSU5ECisgICAgY2Fz ZSBvbXBfaGlnaF9id19tZW1fc3BhY2U6CiAgICAgICBzdHJ1Y3QgZ29tcF9tZW1raW5kX2Rh dGEgKm1lbWtpbmRfZGF0YTsKICAgICAgIG1lbWtpbmRfZGF0YSA9IGdvbXBfZ2V0X21lbWtp bmQgKCk7CiAgICAgICBpZiAoZGF0YS5wYXJ0aXRpb24gPT0gb21wX2F0dl9pbnRlcmxlYXZl ZApAQCAtMzAwLDE3ICszNTMsMTUgQEAgb21wX2luaXRfYWxsb2NhdG9yIChvbXBfbWVtc3Bh Y2VfaGFuZGxlX3QgbWVtc3BhY2UsIGludCBudHJhaXRzLAogCSAgZGF0YS5tZW1raW5kID0g R09NUF9NRU1LSU5EX0hCV19QUkVGRVJSRUQ7CiAJICBicmVhazsKIAl9Ci0jZW5kaWYKICAg ICAgIGJyZWFrOwogICAgIGNhc2Ugb21wX2xhcmdlX2NhcF9tZW1fc3BhY2U6Ci0jaWZkZWYg TElCR09NUF9VU0VfTUVNS0lORAogICAgICAgbWVta2luZF9kYXRhID0gZ29tcF9nZXRfbWVt a2luZCAoKTsKICAgICAgIGlmIChtZW1raW5kX2RhdGEtPmtpbmRzW0dPTVBfTUVNS0lORF9E QVhfS01FTV9BTExdKQogCWRhdGEubWVta2luZCA9IEdPTVBfTUVNS0lORF9EQVhfS01FTV9B TEw7CiAgICAgICBlbHNlIGlmIChtZW1raW5kX2RhdGEtPmtpbmRzW0dPTVBfTUVNS0lORF9E QVhfS01FTV0pCiAJZGF0YS5tZW1raW5kID0gR09NUF9NRU1LSU5EX0RBWF9LTUVNOwotI2Vu ZGlmCiAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAjaWZkZWYgTElCR09N UF9VU0VfTUVNS0lORAogICAgICAgaWYgKGRhdGEucGFydGl0aW9uID09IG9tcF9hdHZfaW50 ZXJsZWF2ZWQpCkBAIC0zMjMsNiArMzc0LDE0IEBAIG9tcF9pbml0X2FsbG9jYXRvciAob21w X21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCBpbnQgbnRyYWl0cywKICAgICAgIGJyZWFr OwogICAgIH0KIAorI2lmZGVmIExJQkdPTVBfVVNFX0xJQk5VTUEKKyAgaWYgKGRhdGEubWVt a2luZCA9PSBHT01QX01FTUtJTkRfTk9ORSAmJiBkYXRhLnBhcnRpdGlvbiA9PSBvbXBfYXR2 X25lYXJlc3QpCisgICAgeworICAgICAgZGF0YS5tZW1raW5kID0gR09NUF9NRU1LSU5EX0xJ Qk5VTUE7CisgICAgICBsaWJudW1hX2RhdGEgPSBnb21wX2dldF9saWJudW1hICgpOworICAg IH0KKyNlbmRpZgorCiAgIC8qIE5vIHN1cHBvcnQgZm9yIHRoaXMgc28gZmFyLiAgKi8KICAg aWYgKGRhdGEucGlubmVkKQogICAgIHJldHVybiBvbXBfbnVsbF9hbGxvY2F0b3I7CkBAIC0z NTcsOCArNDE2LDggQEAgb21wX2FsaWduZWRfYWxsb2MgKHNpemVfdCBhbGlnbm1lbnQsIHNp emVfdCBzaXplLAogICBzdHJ1Y3Qgb21wX2FsbG9jYXRvcl9kYXRhICphbGxvY2F0b3JfZGF0 YTsKICAgc2l6ZV90IG5ld19zaXplLCBuZXdfYWxpZ25tZW50OwogICB2b2lkICpwdHIsICpy ZXQ7Ci0jaWZkZWYgTElCR09NUF9VU0VfTUVNS0lORAotICBlbnVtIGdvbXBfbWVta2luZF9r aW5kIG1lbWtpbmQ7CisjaWYgZGVmaW5lZChMSUJHT01QX1VTRV9NRU1LSU5EKSB8fCBkZWZp bmVkKExJQkdPTVBfVVNFX0xJQk5VTUEpCisgIGVudW0gZ29tcF9udW1hX21lbWtpbmRfa2lu ZCBtZW1raW5kOwogI2VuZGlmCiAKICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHNpemUgPT0g MCwgMCkpCkBAIC0zNzksNyArNDM4LDcgQEAgcmV0cnk6CiAgICAgICBhbGxvY2F0b3JfZGF0 YSA9IChzdHJ1Y3Qgb21wX2FsbG9jYXRvcl9kYXRhICopIGFsbG9jYXRvcjsKICAgICAgIGlm IChuZXdfYWxpZ25tZW50IDwgYWxsb2NhdG9yX2RhdGEtPmFsaWdubWVudCkKIAluZXdfYWxp Z25tZW50ID0gYWxsb2NhdG9yX2RhdGEtPmFsaWdubWVudDsKLSNpZmRlZiBMSUJHT01QX1VT RV9NRU1LSU5ECisjaWYgZGVmaW5lZChMSUJHT01QX1VTRV9NRU1LSU5EKSB8fCBkZWZpbmVk KExJQkdPTVBfVVNFX0xJQk5VTUEpCiAgICAgICBtZW1raW5kID0gYWxsb2NhdG9yX2RhdGEt Pm1lbWtpbmQ7CiAjZW5kaWYKICAgICB9CkBAIC0zODgsOCArNDQ3LDEwIEBAIHJldHJ5Ogog ICAgICAgYWxsb2NhdG9yX2RhdGEgPSBOVUxMOwogICAgICAgaWYgKG5ld19hbGlnbm1lbnQg PCBzaXplb2YgKHZvaWQgKikpCiAJbmV3X2FsaWdubWVudCA9IHNpemVvZiAodm9pZCAqKTsK LSNpZmRlZiBMSUJHT01QX1VTRV9NRU1LSU5ECisjaWYgZGVmaW5lZChMSUJHT01QX1VTRV9N RU1LSU5EKSB8fCBkZWZpbmVkKExJQkdPTVBfVVNFX0xJQk5VTUEpCiAgICAgICBtZW1raW5k ID0gR09NUF9NRU1LSU5EX05PTkU7CisjZW5kaWYKKyNpZmRlZiBMSUJHT01QX1VTRV9NRU1L SU5ECiAgICAgICBpZiAoYWxsb2NhdG9yID09IG9tcF9oaWdoX2J3X21lbV9hbGxvYykKIAlt ZW1raW5kID0gR09NUF9NRU1LSU5EX0hCV19QUkVGRVJSRUQ7CiAgICAgICBlbHNlIGlmIChh bGxvY2F0b3IgPT0gb21wX2xhcmdlX2NhcF9tZW1fYWxsb2MpCkBAIC00NDQsNiArNTA1LDEz IEBAIHJldHJ5OgogICAgICAgYWxsb2NhdG9yX2RhdGEtPnVzZWRfcG9vbF9zaXplID0gdXNl ZF9wb29sX3NpemU7CiAgICAgICBnb21wX211dGV4X3VubG9jayAoJmFsbG9jYXRvcl9kYXRh LT5sb2NrKTsKICNlbmRpZgorI2lmZGVmIExJQkdPTVBfVVNFX0xJQk5VTUEKKyAgICAgIGlm IChtZW1raW5kID09IEdPTVBfTUVNS0lORF9MSUJOVU1BKQorCXB0ciA9IGxpYm51bWFfZGF0 YS0+bnVtYV9hbGxvY19sb2NhbCAobmV3X3NpemUpOworIyBpZmRlZiBMSUJHT01QX1VTRV9N RU1LSU5ECisgICAgICBlbHNlCisjIGVuZGlmCisjZW5kaWYKICNpZmRlZiBMSUJHT01QX1VT RV9NRU1LSU5ECiAgICAgICBpZiAobWVta2luZCkKIAl7CkBAIC00NjksNiArNTM3LDEzIEBA IHJldHJ5OgogICAgIH0KICAgZWxzZQogICAgIHsKKyNpZmRlZiBMSUJHT01QX1VTRV9MSUJO VU1BCisgICAgICBpZiAobWVta2luZCA9PSBHT01QX01FTUtJTkRfTElCTlVNQSkKKwlwdHIg PSBsaWJudW1hX2RhdGEtPm51bWFfYWxsb2NfbG9jYWwgKG5ld19zaXplKTsKKyMgaWZkZWYg TElCR09NUF9VU0VfTUVNS0lORAorICAgICAgZWxzZQorIyBlbmRpZgorI2VuZGlmCiAjaWZk ZWYgTElCR09NUF9VU0VfTUVNS0lORAogICAgICAgaWYgKG1lbWtpbmQpCiAJewpAQCAtNTAy LDcgKzU3Nyw3IEBAIGZhaWw6CiAJewogCWNhc2Ugb21wX2F0dl9kZWZhdWx0X21lbV9mYjoK IAkgIGlmICgobmV3X2FsaWdubWVudCA+IHNpemVvZiAodm9pZCAqKSAmJiBuZXdfYWxpZ25t ZW50ID4gYWxpZ25tZW50KQotI2lmZGVmIExJQkdPTVBfVVNFX01FTUtJTkQKKyNpZiBkZWZp bmVkKExJQkdPTVBfVVNFX01FTUtJTkQpIHx8IGRlZmluZWQoTElCR09NUF9VU0VfTElCTlVN QSkKIAkgICAgICB8fCBtZW1raW5kCiAjZW5kaWYKIAkgICAgICB8fCAoYWxsb2NhdG9yX2Rh dGEKQEAgLTU3Nyw2ICs2NTIsMTYgQEAgb21wX2ZyZWUgKHZvaWQgKnB0ciwgb21wX2FsbG9j YXRvcl9oYW5kbGVfdCBhbGxvY2F0b3IpCiAJICBnb21wX211dGV4X3VubG9jayAoJmFsbG9j YXRvcl9kYXRhLT5sb2NrKTsKICNlbmRpZgogCX0KKyNpZmRlZiBMSUJHT01QX1VTRV9MSUJO VU1BCisgICAgICBpZiAoYWxsb2NhdG9yX2RhdGEtPm1lbWtpbmQgPT0gR09NUF9NRU1LSU5E X0xJQk5VTUEpCisJeworCSAgbGlibnVtYV9kYXRhLT5udW1hX2ZyZWUgKGRhdGEtPnB0ciwg ZGF0YS0+c2l6ZSk7CisJICByZXR1cm47CisJfQorIyBpZmRlZiBMSUJHT01QX1VTRV9NRU1L SU5ECisgICAgICBlbHNlCisjIGVuZGlmCisjZW5kaWYKICNpZmRlZiBMSUJHT01QX1VTRV9N RU1LSU5ECiAgICAgICBpZiAoYWxsb2NhdG9yX2RhdGEtPm1lbWtpbmQpCiAJewpAQCAtNTkw LDcgKzY3NSw3IEBAIG9tcF9mcmVlICh2b2lkICpwdHIsIG9tcF9hbGxvY2F0b3JfaGFuZGxl X3QgYWxsb2NhdG9yKQogI2lmZGVmIExJQkdPTVBfVVNFX01FTUtJTkQKICAgZWxzZQogICAg IHsKLSAgICAgIGVudW0gZ29tcF9tZW1raW5kX2tpbmQgbWVta2luZCA9IEdPTVBfTUVNS0lO RF9OT05FOworICAgICAgZW51bSBnb21wX251bWFfbWVta2luZF9raW5kIG1lbWtpbmQgPSBH T01QX01FTUtJTkRfTk9ORTsKICAgICAgIGlmIChkYXRhLT5hbGxvY2F0b3IgPT0gb21wX2hp Z2hfYndfbWVtX2FsbG9jKQogCW1lbWtpbmQgPSBHT01QX01FTUtJTkRfSEJXX1BSRUZFUlJF RDsKICAgICAgIGVsc2UgaWYgKGRhdGEtPmFsbG9jYXRvciA9PSBvbXBfbGFyZ2VfY2FwX21l bV9hbGxvYykKQEAgLTYyNSw4ICs3MTAsOCBAQCBvbXBfYWxpZ25lZF9jYWxsb2MgKHNpemVf dCBhbGlnbm1lbnQsIHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsCiAgIHN0cnVjdCBvbXBf YWxsb2NhdG9yX2RhdGEgKmFsbG9jYXRvcl9kYXRhOwogICBzaXplX3QgbmV3X3NpemUsIHNp emVfdGVtcCwgbmV3X2FsaWdubWVudDsKICAgdm9pZCAqcHRyLCAqcmV0OwotI2lmZGVmIExJ QkdPTVBfVVNFX01FTUtJTkQKLSAgZW51bSBnb21wX21lbWtpbmRfa2luZCBtZW1raW5kOwor I2lmIGRlZmluZWQoTElCR09NUF9VU0VfTUVNS0lORCkgfHwgZGVmaW5lZChMSUJHT01QX1VT RV9MSUJOVU1BKQorICBlbnVtIGdvbXBfbnVtYV9tZW1raW5kX2tpbmQgbWVta2luZDsKICNl bmRpZgogCiAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChzaXplID09IDAgfHwgbm1lbWIgPT0g MCwgMCkpCkBAIC02NDcsNyArNzMyLDcgQEAgcmV0cnk6CiAgICAgICBhbGxvY2F0b3JfZGF0 YSA9IChzdHJ1Y3Qgb21wX2FsbG9jYXRvcl9kYXRhICopIGFsbG9jYXRvcjsKICAgICAgIGlm IChuZXdfYWxpZ25tZW50IDwgYWxsb2NhdG9yX2RhdGEtPmFsaWdubWVudCkKIAluZXdfYWxp Z25tZW50ID0gYWxsb2NhdG9yX2RhdGEtPmFsaWdubWVudDsKLSNpZmRlZiBMSUJHT01QX1VT RV9NRU1LSU5ECisjaWYgZGVmaW5lZChMSUJHT01QX1VTRV9NRU1LSU5EKSB8fCBkZWZpbmVk KExJQkdPTVBfVVNFX0xJQk5VTUEpCiAgICAgICBtZW1raW5kID0gYWxsb2NhdG9yX2RhdGEt Pm1lbWtpbmQ7CiAjZW5kaWYKICAgICB9CkBAIC02NTYsOCArNzQxLDEwIEBAIHJldHJ5Ogog ICAgICAgYWxsb2NhdG9yX2RhdGEgPSBOVUxMOwogICAgICAgaWYgKG5ld19hbGlnbm1lbnQg PCBzaXplb2YgKHZvaWQgKikpCiAJbmV3X2FsaWdubWVudCA9IHNpemVvZiAodm9pZCAqKTsK LSNpZmRlZiBMSUJHT01QX1VTRV9NRU1LSU5ECisjaWYgZGVmaW5lZChMSUJHT01QX1VTRV9N RU1LSU5EKSB8fCBkZWZpbmVkKExJQkdPTVBfVVNFX0xJQk5VTUEpCiAgICAgICBtZW1raW5k ID0gR09NUF9NRU1LSU5EX05PTkU7CisjZW5kaWYKKyNpZmRlZiBMSUJHT01QX1VTRV9NRU1L SU5ECiAgICAgICBpZiAoYWxsb2NhdG9yID09IG9tcF9oaWdoX2J3X21lbV9hbGxvYykKIAlt ZW1raW5kID0gR09NUF9NRU1LSU5EX0hCV19QUkVGRVJSRUQ7CiAgICAgICBlbHNlIGlmIChh bGxvY2F0b3IgPT0gb21wX2xhcmdlX2NhcF9tZW1fYWxsb2MpCkBAIC03MTQsNiArODAxLDE2 IEBAIHJldHJ5OgogICAgICAgYWxsb2NhdG9yX2RhdGEtPnVzZWRfcG9vbF9zaXplID0gdXNl ZF9wb29sX3NpemU7CiAgICAgICBnb21wX211dGV4X3VubG9jayAoJmFsbG9jYXRvcl9kYXRh LT5sb2NrKTsKICNlbmRpZgorI2lmZGVmIExJQkdPTVBfVVNFX0xJQk5VTUEKKyAgICAgIGlm IChtZW1raW5kID09IEdPTVBfTUVNS0lORF9MSUJOVU1BKQorCXsKKwkgIHB0ciA9IGxpYm51 bWFfZGF0YS0+bnVtYV9hbGxvY19sb2NhbCAobmV3X3NpemUpOworCSAgbWVtc2V0IChwdHIs ICdcMCcsIG5ld19zaXplKTsKKwl9CisjIGlmZGVmIExJQkdPTVBfVVNFX01FTUtJTkQKKyAg ICAgIGVsc2UKKyMgZW5kaWYKKyNlbmRpZgogI2lmZGVmIExJQkdPTVBfVVNFX01FTUtJTkQK ICAgICAgIGlmIChtZW1raW5kKQogCXsKQEAgLTczOSw2ICs4MzYsMTYgQEAgcmV0cnk6CiAg ICAgfQogICBlbHNlCiAgICAgeworI2lmZGVmIExJQkdPTVBfVVNFX0xJQk5VTUEKKyAgICAg IGlmIChtZW1raW5kID09IEdPTVBfTUVNS0lORF9MSUJOVU1BKQorCXsKKwkgIHB0ciA9IGxp Ym51bWFfZGF0YS0+bnVtYV9hbGxvY19sb2NhbCAobmV3X3NpemUpOworCSAgbWVtc2V0IChw dHIsICdcMCcsIG5ld19zaXplKTsKKwl9CisjIGlmZGVmIExJQkdPTVBfVVNFX01FTUtJTkQK KyAgICAgIGVsc2UKKyMgZW5kaWYKKyNlbmRpZgogI2lmZGVmIExJQkdPTVBfVVNFX01FTUtJ TkQKICAgICAgIGlmIChtZW1raW5kKQogCXsKQEAgLTc3Miw3ICs4NzksNyBAQCBmYWlsOgog CXsKIAljYXNlIG9tcF9hdHZfZGVmYXVsdF9tZW1fZmI6CiAJICBpZiAoKG5ld19hbGlnbm1l bnQgPiBzaXplb2YgKHZvaWQgKikgJiYgbmV3X2FsaWdubWVudCA+IGFsaWdubWVudCkKLSNp ZmRlZiBMSUJHT01QX1VTRV9NRU1LSU5ECisjaWYgZGVmaW5lZChMSUJHT01QX1VTRV9NRU1L SU5EKSB8fCBkZWZpbmVkKExJQkdPTVBfVVNFX0xJQk5VTUEpCiAJICAgICAgfHwgbWVta2lu ZAogI2VuZGlmCiAJICAgICAgfHwgKGFsbG9jYXRvcl9kYXRhCkBAIC04MTUsOCArOTIyLDgg QEAgb21wX3JlYWxsb2MgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIG9tcF9hbGxvY2F0b3Jf aGFuZGxlX3QgYWxsb2NhdG9yLAogICBzaXplX3QgbmV3X3NpemUsIG9sZF9zaXplLCBuZXdf YWxpZ25tZW50LCBvbGRfYWxpZ25tZW50OwogICB2b2lkICpuZXdfcHRyLCAqcmV0OwogICBz dHJ1Y3Qgb21wX21lbV9oZWFkZXIgKmRhdGE7Ci0jaWZkZWYgTElCR09NUF9VU0VfTUVNS0lO RAotICBlbnVtIGdvbXBfbWVta2luZF9raW5kIG1lbWtpbmQsIGZyZWVfbWVta2luZDsKKyNp ZiBkZWZpbmVkKExJQkdPTVBfVVNFX01FTUtJTkQpIHx8IGRlZmluZWQoTElCR09NUF9VU0Vf TElCTlVNQSkKKyAgZW51bSBnb21wX251bWFfbWVta2luZF9raW5kIG1lbWtpbmQsIGZyZWVf bWVta2luZDsKICNlbmRpZgogCiAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChwdHIgPT0gTlVM TCwgMCkpCkBAIC04NDEsMTUgKzk0OCwxNyBAQCByZXRyeToKICAgICAgIGFsbG9jYXRvcl9k YXRhID0gKHN0cnVjdCBvbXBfYWxsb2NhdG9yX2RhdGEgKikgYWxsb2NhdG9yOwogICAgICAg aWYgKG5ld19hbGlnbm1lbnQgPCBhbGxvY2F0b3JfZGF0YS0+YWxpZ25tZW50KQogCW5ld19h bGlnbm1lbnQgPSBhbGxvY2F0b3JfZGF0YS0+YWxpZ25tZW50OwotI2lmZGVmIExJQkdPTVBf VVNFX01FTUtJTkQKKyNpZiBkZWZpbmVkKExJQkdPTVBfVVNFX01FTUtJTkQpIHx8IGRlZmlu ZWQoTElCR09NUF9VU0VfTElCTlVNQSkKICAgICAgIG1lbWtpbmQgPSBhbGxvY2F0b3JfZGF0 YS0+bWVta2luZDsKICNlbmRpZgogICAgIH0KICAgZWxzZQogICAgIHsKICAgICAgIGFsbG9j YXRvcl9kYXRhID0gTlVMTDsKLSNpZmRlZiBMSUJHT01QX1VTRV9NRU1LSU5ECisjaWYgZGVm aW5lZChMSUJHT01QX1VTRV9NRU1LSU5EKSB8fCBkZWZpbmVkKExJQkdPTVBfVVNFX0xJQk5V TUEpCiAgICAgICBtZW1raW5kID0gR09NUF9NRU1LSU5EX05PTkU7CisjZW5kaWYKKyNpZmRl ZiBMSUJHT01QX1VTRV9NRU1LSU5ECiAgICAgICBpZiAoYWxsb2NhdG9yID09IG9tcF9oaWdo X2J3X21lbV9hbGxvYykKIAltZW1raW5kID0gR09NUF9NRU1LSU5EX0hCV19QUkVGRVJSRUQ7 CiAgICAgICBlbHNlIGlmIChhbGxvY2F0b3IgPT0gb21wX2xhcmdlX2NhcF9tZW1fYWxsb2Mp CkBAIC04NjUsMTUgKzk3NCwxNyBAQCByZXRyeToKICAgaWYgKGZyZWVfYWxsb2NhdG9yID4g b21wX21heF9wcmVkZWZpbmVkX2FsbG9jKQogICAgIHsKICAgICAgIGZyZWVfYWxsb2NhdG9y X2RhdGEgPSAoc3RydWN0IG9tcF9hbGxvY2F0b3JfZGF0YSAqKSBmcmVlX2FsbG9jYXRvcjsK LSNpZmRlZiBMSUJHT01QX1VTRV9NRU1LSU5ECisjaWYgZGVmaW5lZChMSUJHT01QX1VTRV9N RU1LSU5EKSB8fCBkZWZpbmVkKExJQkdPTVBfVVNFX0xJQk5VTUEpCiAgICAgICBmcmVlX21l bWtpbmQgPSBmcmVlX2FsbG9jYXRvcl9kYXRhLT5tZW1raW5kOwogI2VuZGlmCiAgICAgfQog ICBlbHNlCiAgICAgewogICAgICAgZnJlZV9hbGxvY2F0b3JfZGF0YSA9IE5VTEw7Ci0jaWZk ZWYgTElCR09NUF9VU0VfTUVNS0lORAorI2lmIGRlZmluZWQoTElCR09NUF9VU0VfTUVNS0lO RCkgfHwgZGVmaW5lZChMSUJHT01QX1VTRV9MSUJOVU1BKQogICAgICAgZnJlZV9tZW1raW5k ID0gR09NUF9NRU1LSU5EX05PTkU7CisjZW5kaWYKKyNpZmRlZiBMSUJHT01QX1VTRV9NRU1L SU5ECiAgICAgICBpZiAoZnJlZV9hbGxvY2F0b3IgPT0gb21wX2hpZ2hfYndfbWVtX2FsbG9j KQogCWZyZWVfbWVta2luZCA9IEdPTVBfTUVNS0lORF9IQldfUFJFRkVSUkVEOwogICAgICAg ZWxzZSBpZiAoZnJlZV9hbGxvY2F0b3IgPT0gb21wX2xhcmdlX2NhcF9tZW1fYWxsb2MpCkBA IC05NTMsNiArMTA2NCwxOSBAQCByZXRyeToKICAgICAgIGFsbG9jYXRvcl9kYXRhLT51c2Vk X3Bvb2xfc2l6ZSA9IHVzZWRfcG9vbF9zaXplOwogICAgICAgZ29tcF9tdXRleF91bmxvY2sg KCZhbGxvY2F0b3JfZGF0YS0+bG9jayk7CiAjZW5kaWYKKyNpZmRlZiBMSUJHT01QX1VTRV9M SUJOVU1BCisgICAgICBpZiAobWVta2luZCA9PSBHT01QX01FTUtJTkRfTElCTlVNQSkKKwl7 CisJICBpZiAocHJldl9zaXplKQorCSAgICBuZXdfcHRyID0gbGlibnVtYV9kYXRhLT5udW1h X3JlYWxsb2MgKGRhdGEtPnB0ciwgZGF0YS0+c2l6ZSwKKwkJCQkJCSAgbmV3X3NpemUpOwor CSAgZWxzZQorCSAgICBuZXdfcHRyID0gbGlibnVtYV9kYXRhLT5udW1hX2FsbG9jX2xvY2Fs IChuZXdfc2l6ZSk7CisJfQorIyBpZmRlZiBMSUJHT01QX1VTRV9NRU1LSU5ECisgICAgICBl bHNlCisjIGVuZGlmCisjZW5kaWYKICNpZmRlZiBMSUJHT01QX1VTRV9NRU1LSU5ECiAgICAg ICBpZiAobWVta2luZCkKIAl7CkBAIC0xMDAwLDYgKzExMjQsMTMgQEAgcmV0cnk6CiAJICAg JiYgKGZyZWVfYWxsb2NhdG9yX2RhdGEgPT0gTlVMTAogCSAgICAgICB8fCBmcmVlX2FsbG9j YXRvcl9kYXRhLT5wb29sX3NpemUgPT0gfih1aW50cHRyX3QpIDApKQogICAgIHsKKyNpZmRl ZiBMSUJHT01QX1VTRV9MSUJOVU1BCisgICAgICBpZiAobWVta2luZCA9PSBHT01QX01FTUtJ TkRfTElCTlVNQSkKKwluZXdfcHRyID0gbGlibnVtYV9kYXRhLT5udW1hX3JlYWxsb2MgKGRh dGEtPnB0ciwgZGF0YS0+c2l6ZSwgbmV3X3NpemUpOworIyBpZmRlZiBMSUJHT01QX1VTRV9N RU1LSU5ECisgICAgICBlbHNlCisjIGVuZGlmCisjZW5kaWYKICNpZmRlZiBMSUJHT01QX1VT RV9NRU1LSU5ECiAgICAgICBpZiAobWVta2luZCkKIAl7CkBAIC0xMDIxLDYgKzExNTIsMTMg QEAgcmV0cnk6CiAgICAgfQogICBlbHNlCiAgICAgeworI2lmZGVmIExJQkdPTVBfVVNFX0xJ Qk5VTUEKKyAgICAgIGlmIChtZW1raW5kID09IEdPTVBfTUVNS0lORF9MSUJOVU1BKQorCW5l d19wdHIgPSBsaWJudW1hX2RhdGEtPm51bWFfYWxsb2NfbG9jYWwgKG5ld19zaXplKTsKKyMg aWZkZWYgTElCR09NUF9VU0VfTUVNS0lORAorICAgICAgZWxzZQorIyBlbmRpZgorI2VuZGlm CiAjaWZkZWYgTElCR09NUF9VU0VfTUVNS0lORAogICAgICAgaWYgKG1lbWtpbmQpCiAJewpA QCAtMTA2MCw2ICsxMTk4LDE2IEBAIHJldHJ5OgogICAgICAgZ29tcF9tdXRleF91bmxvY2sg KCZmcmVlX2FsbG9jYXRvcl9kYXRhLT5sb2NrKTsKICNlbmRpZgogICAgIH0KKyNpZmRlZiBM SUJHT01QX1VTRV9MSUJOVU1BCisgICAgICBpZiAobWVta2luZCA9PSBHT01QX01FTUtJTkRf TElCTlVNQSkKKwl7CisJICBsaWJudW1hX2RhdGEtPm51bWFfZnJlZSAoZGF0YS0+cHRyLCBk YXRhLT5zaXplKTsKKwkgIHJldHVybiByZXQ7CisJfQorIyBpZmRlZiBMSUJHT01QX1VTRV9N RU1LSU5ECisgICAgICBlbHNlCisjIGVuZGlmCisjZW5kaWYKICNpZmRlZiBMSUJHT01QX1VT RV9NRU1LSU5ECiAgIGlmIChmcmVlX21lbWtpbmQpCiAgICAgewpAQCAtMTA3OSw3ICsxMjI3 LDcgQEAgZmFpbDoKIAl7CiAJY2FzZSBvbXBfYXR2X2RlZmF1bHRfbWVtX2ZiOgogCSAgaWYg KG5ld19hbGlnbm1lbnQgPiBzaXplb2YgKHZvaWQgKikKLSNpZmRlZiBMSUJHT01QX1VTRV9N RU1LSU5ECisjaWYgZGVmaW5lZChMSUJHT01QX1VTRV9NRU1LSU5EKSB8fCBkZWZpbmVkKExJ QkdPTVBfVVNFX0xJQk5VTUEpCiAJICAgICAgfHwgbWVta2luZAogI2VuZGlmCiAJICAgICAg fHwgKGFsbG9jYXRvcl9kYXRhCmRpZmYgLS1naXQgYS9saWJnb21wL2NvbmZpZy9saW51eC9h bGxvY2F0b3IuYyBiL2xpYmdvbXAvY29uZmlnL2xpbnV4L2FsbG9jYXRvci5jCmluZGV4IDE1 YmFiY2QxYWRhLi42NGIxYjRiOTYyMyAxMDA2NDQKLS0tIGEvbGliZ29tcC9jb25maWcvbGlu dXgvYWxsb2NhdG9yLmMKKysrIGIvbGliZ29tcC9jb25maWcvbGludXgvYWxsb2NhdG9yLmMK QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJsaWJnb21wLmgiCiAjaWYgZGVmaW5lZChQ TFVHSU5fU1VQUE9SVCkgJiYgZGVmaW5lZChMSUJHT01QX1VTRV9QVEhSRUFEUykKICNkZWZp bmUgTElCR09NUF9VU0VfTUVNS0lORAorI2RlZmluZSBMSUJHT01QX1VTRV9MSUJOVU1BCiAj ZW5kaWYKIAogI2luY2x1ZGUgIi4uLy4uL2FsbG9jYXRvci5jIgpkaWZmIC0tZ2l0IGEvbGli Z29tcC9saWJnb21wLnRleGkgYi9saWJnb21wL2xpYmdvbXAudGV4aQppbmRleCBiMWY1OGU3 NDkwMy4uNDAzMjg0NTZhMWQgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvbGliZ29tcC50ZXhpCisr KyBiL2xpYmdvbXAvbGliZ29tcC50ZXhpCkBAIC00NTg0LDcgKzQ1ODQsNyBAQCBvZmZsb2Fk aW5nIGRldmljZXMgKGl0J3Mgbm90IGNsZWFyIGlmIHRoZXkgc2hvdWxkIGJlKToKIEBtZW51 CiAqIEltcGxlbWVudGF0aW9uLWRlZmluZWQgSUNWIEluaXRpYWxpemF0aW9uOjoKICogT3Bl bk1QIENvbnRleHQgU2VsZWN0b3JzOjoKLSogTWVtb3J5IGFsbG9jYXRpb24gd2l0aCBsaWJt ZW1raW5kOjoKKyogTWVtb3J5IGFsbG9jYXRpb246OgogQGVuZCBtZW51CiAKIEBub2RlIElt cGxlbWVudGF0aW9uLWRlZmluZWQgSUNWIEluaXRpYWxpemF0aW9uCkBAIC00NjMxLDggKzQ2 MzEsOCBAQCBzbWFsbGVyIG51bWJlci4gIE9uIG5vbi1ob3N0IGRldmljZXMsIHRoZSB2YWx1 ZSBvZiB0aGUKICAgICAgIEB0YWIgU2VlIEBjb2Rley1tYXJjaD19IGluIGBgTnZpZGlhIFBU WCBPcHRpb25zJycKIEBlbmQgbXVsdGl0YWJsZQogCi1Abm9kZSBNZW1vcnkgYWxsb2NhdGlv biB3aXRoIGxpYm1lbWtpbmQKLUBzZWN0aW9uIE1lbW9yeSBhbGxvY2F0aW9uIHdpdGggbGli bWVta2luZAorQG5vZGUgTWVtb3J5IGFsbG9jYXRpb24KK0BzZWN0aW9uIE1lbW9yeSBhbGxv Y2F0aW9uCiAKIEZvciB0aGUgbWVtb3J5IHNwYWNlcywgdGhlIGZvbGxvd2luZyBhcHBsaWVz OgogQGl0ZW1pemUKQEAgLTQ2NTYsNiArNDY1NiwyMiBAQCBjcmVhdGluZyBtZW1vcnkgYWxs b2NhdG9ycyByZXF1ZXN0aW5nCiAgICAgICBAY29kZXtvbXBfbGFyZ2VfY2FwX21lbV9zcGFj ZX0gdGhlIGFsbG9jYXRpb24gd2lsbCBub3QgYmUgaW50ZXJsZWF2ZWQKIEBlbmQgaXRlbWl6 ZQogCitPbiBMaW51eCBzeXN0ZW1zLCB3aGVyZSB0aGUgQHVyZWZ7aHR0cHM6Ly9naXRodWIu Y29tL251bWFjdGwvbnVtYWN0bCwgbnVtYQorbGlicmFyeX0gKEBjb2Rle2xpYm51bWEuc28u MX0pIGlzIGF2YWlsYWJsZSBhdCBydW50aW1lLCBpdCB1c2VkIHdoZW4gY3JlYXRpbmcKK21l bW9yeSBhbGxvY2F0b3JzIHJlcXVlc3RpbmcKKworQGl0ZW1pemUKK0BpdGVtIHRoZSBwYXJ0 aXRpb24gdHJhaXQgQGNvZGV7b21wX2F0dl9uZWFyZXN0fSwgZXhjZXB0IHdoZW4gdGhlIGxp Ym1lbWtpbmQKK2xpYnJhcnkgaXMgYXZhaWxhYmxlIGFuZCB0aGUgbWVtb3J5IHNwYWNlIGlz IGVpdGhlcgorQGNvZGV7b21wX2xhcmdlX2NhcF9tZW1fc3BhY2V9IG9yIEBjb2Rle29tcF9o aWdoX2J3X21lbV9zcGFjZX0KK0BlbmQgaXRlbWl6ZQorCitOb3RlIHRoYXQgdGhlIG51bWEg bGlicmFyeSB3aWxsIHJvdW5kIHVwIHRoZSBhbGxvY2F0aW9uIHNpemUgdG8gYSBtdWx0aXBs ZSBvZgordGhlIHN5c3RlbSBwYWdlIHNpemU7IHRoZXJlZm9yZSwgY29uc2lkZXIgdXNpbmcg aXQgb25seSB3aXRoIGxhcmdlIGRhdGEgb3IKK2J5IHNoYXJpbmcgYWxsb2NhdGlvbnMgYnkg dXNpbmcgdGhlIEBjb2Rle3Bvb2xfc2l6ZX0gdHJhaXQuICBBZGRpdGlvbmFsbHksCit0aGUg bnVtYSBsaWJyYXJ5IGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IGZvciByZWFsbG9jYXRpb25z IHRoZSBzYW1lIG5vZGUgd2lsbAorYmUgdXNlZC4KKwogQWRkaXRpb25hbCBub3RlczoKIEBp dGVtaXplCiBAaXRlbSBUaGUgQGNvZGV7cGlubmVkfSB0cmFpdCBpcyB1bnN1cHBvcnRlZC4K --------------0xUjA4xSU8kJzc1OygrtfQno Content-Type: text/x-csrc; charset="UTF-8"; name="allocator-7.c" Content-Disposition: attachment; filename="allocator-7.c" Content-Transfer-Encoding: base64 LyogTGluayB3aXRoICItbG51bWEiICAqLwoKLyogQ2hlY2sgdGhhdCB0aGUgYWxsb2NhdGlv biBpcyBkb25lIG9uIHRoZSBzYW1lIG5vZGUKICAgYXMgdGhlIENQVSBleGVjdXRpbmcgdGhl IHRocmVhZCAoJ3Bhcml0aW9uJyA9ICduZWFyZXN0JykuICAqLwoKI2luY2x1ZGUgPHN0ZGlv Lmg+CgojaWYgIV9faGFzX2luY2x1ZGUoPHNjaGVkLmg+KSB8fCAhX19oYXNfaW5jbHVkZSg8 bnVtYWlmLmg+KSB8fCAhX19oYXNfaW5jbHVkZSg8ZGxmY24uaD4pCmludAptYWluICgpCnsK ICBmcHJpbnRmIChzdGRlcnIsICJTS0lQUEVEIGFjdHVhbCBleGVjdXRpb246IChnKWxpYmMg YW5kL29yIGxpYm51bWEgaGVhZGVyIGZpbGVzIG5vdCBmb3VuZFxuIik7CiAgcmV0dXJuIDA7 Cn0KCiNlbHNlCgovKiBBc3N1bWUgdGhhdCB3aGVuIG51bWFpZi5oIGlzIGF2YWlsYWJsZSwg dGhlIHN5c3RlbSBhbHNvIGhhcyBhIEdMSUJDL0tlcm5lbAogICBzdXBwb3J0aW5nICdzY2hl ZF9nZXRjcHUnLiAgKi8KCiNkZWZpbmUgX19VU0VfR05VCiNpbmNsdWRlIDxzY2hlZC5oPiAg IC8qIHNjaGVkX2dldGNwdSAtIGFkZGVkIGluIGVjMDhmMTNkYWQgZm9yIEdMSUJDXzIuNi4g Ki8KI2luY2x1ZGUgPGRsZmNuLmg+ICAgLyogZGxvcGVuL2RsY29zZSAgKi8KI2luY2x1ZGUg PG51bWEuaD4gICAgLyogbnVtYV9ub2RlX29mX2NwdSAgKi8KI2luY2x1ZGUgPG51bWFpZi5o PiAgLyogZ2V0X21lbXBvbGljeSAgKi8KI2luY2x1ZGUgPGFzc2VydC5oPgojaW5jbHVkZSA8 b21wLmg+CgppbnQgbWFpbigpCnsKICBjb25zdCBvbXBfYWxsb2N0cmFpdF90IHRyYWl0c1td CiAgICA9IHsgeyBvbXBfYXRrX2ZhbGxiYWNrLCBvbXBfYXR2X2Fib3J0X2ZiIH0sCgl7IG9t cF9hdGtfcGFydGl0aW9uLCBvbXBfYXR2X25lYXJlc3QgfSB9OwogIGludCBoYXNfbGlibnVt YSwgaGFzX21lbWtpbmQ7CgogIHZvaWQgKmhhbmRsZSA9IGRsb3BlbiAoImxpYm51bWEuc28u MSIsIFJUTERfTEFaWSk7CiAgaGFzX2xpYm51bWEgPSBoYW5kbGUgIT0gTlVMTDsKICBkbGNs b3NlIChoYW5kbGUpOwoKICBoYW5kbGUgPSBkbG9wZW4gKCJsaWJtZW1raW5kLnNvLjAiLCBS VExEX0xBWlkpOwogIGhhc19tZW1raW5kID0gaGFuZGxlICE9IE5VTEw7CiAgZGxjbG9zZSAo aGFuZGxlKTsKCiAgaWYgKCFoYXNfbGlibnVtYSkKICAgIHsKICAgICAgZnByaW50ZiAoc3Rk ZXJyLCAiU0tJUFBFRCBhY3R1YWwgZXhlY3V0aW9uOiBkbG9wZW4gb2YgbGlibnVtYS5zby4x IGZhaWxlZCAobm90IGluc3RhbGxlZD8pXG4iKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAg ZnByaW50ZiAoc3RkZXJyLCAiTm90ZTogbGlibWVta2luZC5zby4wIGRvZXMgJXNleGlzdFxu IiwgaGFzX21lbWtpbmQgPyAiIiA6ICJOT1QgIik7CgogIG9tcF9hbGxvY2F0b3JfaGFuZGxl X3QgYTEsIGEyLCBhMywgYTQ7CgogIGExID0gb21wX2luaXRfYWxsb2NhdG9yIChvbXBfZGVm YXVsdF9tZW1fc3BhY2UsIDIsIHRyYWl0cyk7CiAgYXNzZXJ0IChhMSAhPSBvbXBfbnVsbF9h bGxvY2F0b3IpOwoKICBhMiA9IG9tcF9pbml0X2FsbG9jYXRvciAob21wX2xvd19sYXRfbWVt X3NwYWNlLCAyLCB0cmFpdHMpOwogIGFzc2VydCAoYTIgIT0gb21wX251bGxfYWxsb2NhdG9y KTsKCiAgaWYgKCFoYXNfbWVta2luZCkKICAgIHsKICAgICAgYTMgPSBvbXBfaW5pdF9hbGxv Y2F0b3IgKG9tcF9sYXJnZV9jYXBfbWVtX3NwYWNlLCAyLCB0cmFpdHMpOwogICAgICBhc3Nl cnQgKGEzICE9IG9tcF9udWxsX2FsbG9jYXRvcik7CgogICAgICBhNCA9IG9tcF9pbml0X2Fs bG9jYXRvciAob21wX2hpZ2hfYndfbWVtX3NwYWNlLCAyLCB0cmFpdHMpOwogICAgICBhc3Nl cnQgKGE0ICE9IG9tcF9udWxsX2FsbG9jYXRvcik7CiAgICB9CgogICNwcmFnbWEgb21wIHBh cmFsbGVsICAvKiBJbmNyZWFzZSB0aGUgY2hhbmNlIHRoYXQgbXVsdGlwbGUgbm9kZXMgYXJl IHVzZWQuICovCiAgewogICAgdW5zaWduZWQgbm9kZV9jcHU7CiAgICBpbnQgbm9kZV9tZW1v cnk7CiAgICBpbnQgKmkxLCAqaTIsICppMywgKmk0OwoKICAgIG5vZGVfY3B1ID0gbnVtYV9u b2RlX29mX2NwdSAoc2NoZWRfZ2V0Y3B1ICgpKTsKCiAgICBpMSA9IChpbnQqKSBvbXBfYWxs b2MgKHNpemVvZihpbnQpKjEwMjUqMSwgYTEpOwogICAgYXNzZXJ0IChpMSAhPSBOVUxMKTsK ICAgIGkxWzEwMjRdID0gMTsKICAgIGkyID0gKGludCopIG9tcF9hbGxvYyAoc2l6ZW9mKGlu dCkqMTAyNSoyLCBhMik7CiAgICBhc3NlcnQgKGkyICE9IE5VTEwpOwogICAgaTJbMTAyNF0g PSAyOwoKICAgIGlmICghaGFzX21lbWtpbmQpCiAgICAgIHsKICAgICAgICBpMyA9IChpbnQq KSBvbXBfYWxsb2MgKHNpemVvZihpbnQpKjEwMjUqMywgYTMpOwoJYXNzZXJ0IChpMyAhPSBO VUxMKTsKICAgICAgICBpM1sxMDI0XSA9IDM7CiAgICAgICAgaTQgPSAoaW50Kikgb21wX2Fs bG9jIChzaXplb2YoaW50KSoxMDI1KjQsIGE0KTsKCWFzc2VydCAoaTMgIT0gTlVMTCk7CiAg ICAgICAgaTRbMTAyNF0gPSA0OwogICAgICB9CgogICAgbm9kZV9tZW1vcnkgPSAtMTsKICAg IGlmIChnZXRfbWVtcG9saWN5ICgmbm9kZV9tZW1vcnksIE5VTEwsIDAsIGkxLCBNUE9MX0Zf QUREUnxNUE9MX0ZfTk9ERSkgPCAwKQogICAgICBhc3NlcnQgKDAgJiYgImdldF9tZW1wb2xp Y3kgZm9yIGkxIik7CiAgICBhc3NlcnQgKG5vZGVfbWVtb3J5ID09IG5vZGVfY3B1KTsKCiAg ICBub2RlX21lbW9yeSA9IC0xOwogICAgaWYgKGdldF9tZW1wb2xpY3kgKCZub2RlX21lbW9y eSwgTlVMTCwgMCwgaTIsIE1QT0xfRl9BRERSfE1QT0xfRl9OT0RFKSA8IDApCiAgICAgIGFz c2VydCAoMCAmJiAiZ2V0X21lbXBvbGljeSBmb3IgaTIiKTsKICAgIGFzc2VydCAobm9kZV9t ZW1vcnkgPT0gbm9kZV9jcHUpOwoKICAgIGlmICghaGFzX21lbWtpbmQpCiAgICAgIHsKCW5v ZGVfbWVtb3J5ID0gLTE7CglpZiAoZ2V0X21lbXBvbGljeSAoJm5vZGVfbWVtb3J5LCBOVUxM LCAwLCBpMywgTVBPTF9GX0FERFJ8TVBPTF9GX05PREUpIDwgMCkKCSAgYXNzZXJ0ICgwICYm ICJnZXRfbWVtcG9saWN5IGZvciBpMyIpOwoJYXNzZXJ0IChub2RlX21lbW9yeSA9PSBub2Rl X2NwdSk7CgoJbm9kZV9tZW1vcnkgPSAtMTsKCWlmIChnZXRfbWVtcG9saWN5ICgmbm9kZV9t ZW1vcnksIE5VTEwsIDAsIGk0LCBNUE9MX0ZfQUREUnxNUE9MX0ZfTk9ERSkgPCAwKQoJICBh c3NlcnQgKDAgJiYgImdldF9tZW1wb2xpY3kgZm9yIGk0Iik7Cglhc3NlcnQgKG5vZGVfbWVt b3J5ID09IG5vZGVfY3B1KTsKICAgICAgfQoKICAgICBvbXBfZnJlZSAoaTEsIGExKTsKICAg ICBvbXBfZnJlZSAoaTIsIGEyKTsKICAgIGlmICghaGFzX21lbWtpbmQpCiAgICAgIHsKCW9t cF9mcmVlIChpMywgYTMpOwoJb21wX2ZyZWUgKGk0LCBhNCk7CiAgICAgIH0KICB9CgogIG9t cF9kZXN0cm95X2FsbG9jYXRvciAoYTEpOwogIG9tcF9kZXN0cm95X2FsbG9jYXRvciAoYTIp OwogIGlmICghaGFzX21lbWtpbmQpCiAgICB7CiAgICAgIG9tcF9kZXN0cm95X2FsbG9jYXRv ciAoYTMpOwogICAgICBvbXBfZGVzdHJveV9hbGxvY2F0b3IgKGE0KTsKICAgIH0KICByZXR1 cm4gMDsKfQoKI2VuZGlmCg== --------------0xUjA4xSU8kJzc1OygrtfQno--