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 92E67385142A for ; Fri, 26 Aug 2022 09:07:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 92E67385142A 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.93,264,1654588800"; d="diff'?scan'208,217";a="81990010" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 26 Aug 2022 01:07:37 -0800 IronPort-SDR: gIWhXNg9xsCvqmCG0ghD6B4WgGold5WRd3sxKtWNXQ6yvRig6lQZUHrXJ+JvZpnkvsR1/Gti02 e4zHJOs9mf3WPc6nXvTz2XDeoRBpmoCAbYCTxQi+Pm4CmwVJdNtsZHkGe1rOkdy9s9Soj/QcoL iKeNhiLSfaYsBSMOgPK8Jyw4wqeoDWghZWGjHshZxQjOun/1neSvGgmB7LRu0fZbewFY388Wty lPFOHkIx2nzN0/XqS6EyKzJEw3cqp/72a06fUZ/fLr0AC8/VUQs9v0W7utazB5Z1tzO2SjETYW pfI= Content-Type: multipart/mixed; boundary="------------KQw6xnbzVBDT0ypNmD0e5TD8" Message-ID: <57b3ae5e-8f15-8bea-fa09-39bccbaa2414@codesourcery.com> Date: Fri, 26 Aug 2022 11:07:28 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.0 Content-Language: en-US From: Tobias Burnus To: Jakub Jelinek , Tom de Vries , gcc-patches CC: Alexander Monakov Subject: [Patch] libgomp/nvptx: Prepare for reverse-offload callback handling X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE,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: Message-ID: <20220826090728.bl6YugMOjViZTzay3lO9j9C66QjKs-bIGcHhgS3qbZ0@z> --------------KQw6xnbzVBDT0ypNmD0e5TD8 Content-Type: multipart/alternative; boundary="------------b6FEzRUMprHe28PtyulUNtg1" --------------b6FEzRUMprHe28PtyulUNtg1 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: quoted-printable @Tom and Alexander: Better suggestions are welcome for the busy loop in libgomp/plugin/plugin-nvptx.c regarding the variable placement and checking its value. PRE-REMARK As nvptx (and all other plugins) returns <=3D 0 for GOMP_OFFLOAD_get_num_devices if GOMP_REQUIRES_REVERSE_OFFLOAD is set. This patch is currently still a no op. The patch is almost stand alone, except that it either needs a void *rev_fn_table =3D NULL; in GOMP_OFFLOAD_load_image or the following patch: [Patch][2/3] nvptx: libgomp+mkoffload.cc: Prepare for reverse offload fn = lookup https://gcc.gnu.org/pipermail/gcc-patches/2022-August/600348.html (which in turn needs the '[1/3]' patch). Not required to be compilable, but the patch is based on the ideas/code from the reverse-offload ME patch; the latter adds calls to GOMP_target_ext (omp_initial_device, which is for host fallback code processed by the normal target_ext and for device code by the target_ext of this patch. =E2=86=92 "[Patch] OpenMP: Support reverse offload (middle end part)" https://gcc.gnu.org/pipermail/gcc-patches/2022-July/598662.html * * * This patch adds initial offloading support for nvptx. When the nvptx's device GOMP_target_ext is called - it creates a lock, fills a struct with the argument pointers (addr, kinds, sizes), its device number and the set the function pointer address. On the host side, the last address is checked - if fn_addr !=3D NULL, it passes all arguments on to the generic (target.c) gomp_target_rev to do the actual offloading. CUDA does lockup when trying to copy data from the currently running stream; hence, a new stream is generated to do the memory copying. Just having managed memory is not enough - it needs to be concurrently accessible - otherwise, it will segfault on the host when migrated to the device. OK for mainline? * * * Future work for nvptx: * Adjust 'sleep', possibly using different values with and without USM and to do shorter sleeps than usleep(1)? * Set a flag whether there is any offload function at all, avoiding to run the more expensive check if there is 'requires reverse_offload' without actual reverse-offloading functions present. (Recall that the '2/3' patch, mentioned above, only has fn !=3D NULL for reverse-offload functions.) * Document =E2=86=92 libgomp.texi that reverse offload may cause some perfo= rmance overhead for all target regions. + That reverse offload is run serialized. And obviously: submitting the missing bits to get reverse offload working, but that's mostly not an nvptx topic. Tobias ----------------- 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 --------------b6FEzRUMprHe28PtyulUNtg1-- --------------KQw6xnbzVBDT0ypNmD0e5TD8 Content-Type: text/x-patch; charset="UTF-8"; name="rev-offload-run-nvptx.diff" Content-Disposition: attachment; filename="rev-offload-run-nvptx.diff" Content-Transfer-Encoding: base64 bGliZ29tcC9udnB0eDogUHJlcGFyZSBmb3IgcmV2ZXJzZS1vZmZsb2FkIGNh bGxiYWNrIGhhbmRsaW5nCgpUaGlzIHBhdGNoIGFkZHMgYSBzdHViICdnb21w X3RhcmdldF9yZXYnIGluIHRoZSBob3N0J3MgdGFyZ2V0LmMsIHdoaWNoIHdp bGwKbGF0ZXIgaGFuZGxlIHRoZSByZXZlcnNlIG9mZmxvYWQuCkZvciBudnB0 eCwgaXQgYWRkcyBzdXBwb3J0IGZvciBmb3J3YXJkaW5nIHRoZSBvZmZsb2Fk IGdvbXBfdGFyZ2V0X2V4dCBjYWxsCnRvIHRoZSBob3N0IGJ5IHNldHRpbmcg dmFsdWVzIGluIGEgc3RydWN0IG9uIHRoZSBkZXZpY2UgYW5kIHF1ZXJ5aW5n IGl0IG9uCnRoZSBob3N0IC0gaW52b2tpbmcgZ29tcF90YXJnZXRfcmV2IG9u IHRoZSByZXN1bHQuCgppbmNsdWRlL0NoYW5nZUxvZzoKCgkqIGN1ZGEvY3Vk YS5oIChlbnVtIENVZGV2aWNlX2F0dHJpYnV0ZSk6IEFkZAoJQ1VfREVWSUNF X0FUVFJJQlVURV9DT05DVVJSRU5UX01BTkFHRURfQUNDRVNTLgoJKGVudW0g Q1VtZW1BdHRhY2hfZmxhZ3MpOiBOZXcgc3R1YiB3aXRoIG9ubHkgbWVtYmVy CglDVV9NRU1fQVRUQUNIX0dMT0JBTC4KCShjdU1lbUFsbG9jTWFuYWdlZCk6 IEFkZCBwcm90b3R5cGUuCgpsaWJnb21wL0NoYW5nZUxvZzoKCgkqIGNvbmZp Zy9udnB0eC9pY3YtZGV2aWNlLmMgKEdPTVBfREVWSUNFX05VTV9WQVIpOiBS ZW1vdmUKCSdzdGF0aWMnIGZvciB0aGlzIHZhcmlhYmxlLgoJKiBjb25maWcv bnZwdHgvdGFyZ2V0LmMgKEdPTVBfUkVWX09GRkxPQURfVkFSKTogI2RlZmlu ZSBhcwoJdmFyaWFibGUtbmFtZSBzdHJpbmcgYW5kIHVzZSBpdCB0byBkZWZp bmUgdGhlIHZhcmlhYmxlLgoJKEdPTVBfREVWSUNFX05VTV9WQVIpOiBEZWNs YXJlIHRoaXMgZXh0ZXJuIGdsb2JhbCB2YXIuCgkoc3RydWN0IHJldl9vZmZs b2FkKTogRGVmaW5lLgoJKEdPTVBfdGFyZ2V0X2V4dCk6IEhhbmRsZSByZXZl cnNlIG9mZmxvYWQuCgkqIGxpYmdvbXAtcGx1Z2luLmggKEdPTVBfUExVR0lO X3RhcmdldF9yZXYpOiBOZXcgcHJvdG90eXBlLgoJKiBsaWJnb21wLXBsdWdp bi5jIChHT01QX1BMVUdJTl90YXJnZXRfcmV2KTogTmV3LCBjYWxsIC4uLgoJ KiB0YXJnZXQuYyAoZ29tcF90YXJnZXRfcmV2KTogLi4uIHRoaXMgbmV3IHN0 dWIgZnVuY3Rpb24uCgkqIGxpYmdvbXAuaCAoZ29tcF90YXJnZXRfcmV2KTog RGVjbGFyZS4KCSogbGliZ29tcC5tYXAgKEdPTVBfUExVR0lOXzEuNCk6IE5l dzsgYWRkIEdPTVBfUExVR0lOX3RhcmdldF9yZXYuCgkqIHBsdWdpbi9jdWRh LWxpYi5kZWYgKGN1TWVtQWxsb2NNYW5hZ2VkKTogQWRkLgoJKiBwbHVnaW4v cGx1Z2luLW52cHR4LmMgKEdPTVBfUkVWX09GRkxPQURfVkFSKTogI2RlZmlu ZSB2YXIgc3RyaW5nLgoJKHN0cnVjdCByZXZfb2ZmbG9hZCk6IE5ldy4KCShz dHJ1Y3QgcHR4X2RldmljZSk6IEFkZCBjb25jdXJyX21hbmFnZWRfYWNjZXNz LCByZXZfZGF0YQoJYW5kIHJldl9kYXRhX2Rldi4KCShudnB0eF9vcGVuX2Rl dmljZSk6IFNldCBwdHhfZGV2aWNlJ3MgY29uY3Vycl9tYW5hZ2VkX2FjY2Vz czsKCScjaWYgMCcgdW51c2VkIGFzeW5jX2VuZ2luZXMuCgkoR09NUF9PRkZM T0FEX2xvYWRfaW1hZ2UpOiBBbGxvY2F0ZSByZXZfZGF0YSB2YXJpYWJsZS4K CShyZXZfb2ZmX2Rldl90b19ob3N0X2NweSwgcmV2X29mZl9ob3N0X3RvX2Rl dl9jcHkpOiBOZXcuCgkoR09NUF9PRkZMT0FEX3J1bik6IEhhbmRsZSByZXZl cnNlIG9mZmxvYWRpbmcuCgogaW5jbHVkZS9jdWRhL2N1ZGEuaCAgICAgICAg ICAgICAgIHwgICA4ICsrLQogbGliZ29tcC9jb25maWcvbnZwdHgvaWN2LWRl dmljZS5jIHwgICAyICstCiBsaWJnb21wL2NvbmZpZy9udnB0eC90YXJnZXQu YyAgICAgfCAgNTIgKysrKysrKysrKysrLS0KIGxpYmdvbXAvbGliZ29tcC1w bHVnaW4uYyAgICAgICAgICB8ICAxMiArKysrCiBsaWJnb21wL2xpYmdvbXAt cGx1Z2luLmggICAgICAgICAgfCAgIDcgKysKIGxpYmdvbXAvbGliZ29tcC5o ICAgICAgICAgICAgICAgICB8ICAgNSArKwogbGliZ29tcC9saWJnb21wLm1h cCAgICAgICAgICAgICAgIHwgICA1ICsrCiBsaWJnb21wL3BsdWdpbi9jdWRh LWxpYi5kZWYgICAgICAgfCAgIDEgKwogbGliZ29tcC9wbHVnaW4vcGx1Z2lu LW52cHR4LmMgICAgIHwgMTQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystCiBsaWJnb21wL3RhcmdldC5jICAgICAgICAgICAgICAg ICAgfCAgMTggKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDI0NiBpbnNlcnRp b25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRl L2N1ZGEvY3VkYS5oIGIvaW5jbHVkZS9jdWRhL2N1ZGEuaAppbmRleCAzOTM4 ZDA1ZDE1MC4uMDhlNDk2YTJlOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3Vk YS9jdWRhLmgKKysrIGIvaW5jbHVkZS9jdWRhL2N1ZGEuaApAQCAtNzcsOSAr NzcsMTQgQEAgdHlwZWRlZiBlbnVtIHsKICAgQ1VfREVWSUNFX0FUVFJJQlVU RV9DT05DVVJSRU5UX0tFUk5FTFMgPSAzMSwKICAgQ1VfREVWSUNFX0FUVFJJ QlVURV9NQVhfVEhSRUFEU19QRVJfTVVMVElQUk9DRVNTT1IgPSAzOSwKICAg Q1VfREVWSUNFX0FUVFJJQlVURV9BU1lOQ19FTkdJTkVfQ09VTlQgPSA0MCwK LSAgQ1VfREVWSUNFX0FUVFJJQlVURV9NQVhfUkVHSVNURVJTX1BFUl9NVUxU SVBST0NFU1NPUiA9IDgyCisgIENVX0RFVklDRV9BVFRSSUJVVEVfTUFYX1JF R0lTVEVSU19QRVJfTVVMVElQUk9DRVNTT1IgPSA4MiwKKyAgQ1VfREVWSUNF X0FUVFJJQlVURV9DT05DVVJSRU5UX01BTkFHRURfQUNDRVNTID0gODkKIH0g Q1VkZXZpY2VfYXR0cmlidXRlOwogCit0eXBlZGVmIGVudW0geworICBDVV9N RU1fQVRUQUNIX0dMT0JBTCA9IDB4MQorfSBDVW1lbUF0dGFjaF9mbGFnczsK KwogZW51bSB7CiAgIENVX0VWRU5UX0RFRkFVTFQgPSAwLAogICBDVV9FVkVO VF9ESVNBQkxFX1RJTUlORyA9IDIKQEAgLTE2OSw2ICsxNzQsNyBAQCBDVXJl c3VsdCBjdU1lbUdldEluZm8gKHNpemVfdCAqLCBzaXplX3QgKik7CiBDVXJl c3VsdCBjdU1lbUFsbG9jIChDVWRldmljZXB0ciAqLCBzaXplX3QpOwogI2Rl ZmluZSBjdU1lbUFsbG9jSG9zdCBjdU1lbUFsbG9jSG9zdF92MgogQ1VyZXN1 bHQgY3VNZW1BbGxvY0hvc3QgKHZvaWQgKiosIHNpemVfdCk7CitDVXJlc3Vs dCBjdU1lbUFsbG9jTWFuYWdlZCAoQ1VkZXZpY2VwdHIgKiwgc2l6ZV90LCB1 bnNpZ25lZCBpbnQpOwogQ1VyZXN1bHQgY3VNZW1jcHkgKENVZGV2aWNlcHRy LCBDVWRldmljZXB0ciwgc2l6ZV90KTsKICNkZWZpbmUgY3VNZW1jcHlEdG9E QXN5bmMgY3VNZW1jcHlEdG9EQXN5bmNfdjIKIENVcmVzdWx0IGN1TWVtY3B5 RHRvREFzeW5jIChDVWRldmljZXB0ciwgQ1VkZXZpY2VwdHIsIHNpemVfdCwg Q1VzdHJlYW0pOwpkaWZmIC0tZ2l0IGEvbGliZ29tcC9jb25maWcvbnZwdHgv aWN2LWRldmljZS5jIGIvbGliZ29tcC9jb25maWcvbnZwdHgvaWN2LWRldmlj ZS5jCmluZGV4IGZhZjkwZjk5NDdjLi5mNGYxOGNkYWM1ZSAxMDA2NDQKLS0t IGEvbGliZ29tcC9jb25maWcvbnZwdHgvaWN2LWRldmljZS5jCisrKyBiL2xp YmdvbXAvY29uZmlnL252cHR4L2ljdi1kZXZpY2UuYwpAQCAtNjAsNyArNjAs NyBAQCBvbXBfaXNfaW5pdGlhbF9kZXZpY2UgKHZvaWQpCiAKIC8qIFRoaXMg aXMgc2V0IHRvIHRoZSBkZXZpY2UgbnVtYmVyIG9mIGN1cnJlbnQgR1BVIGR1 cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24sCiAgICB3aGVuIHRoZSBvZmZs b2FkIGltYWdlIGNvbnRhaW5pbmcgdGhpcyBsaWJnb21wIHBvcnRpb24gaXMg bG9hZGVkLiAgKi8KLXN0YXRpYyB2b2xhdGlsZSBpbnQgR09NUF9ERVZJQ0Vf TlVNX1ZBUjsKK3ZvbGF0aWxlIGludCBHT01QX0RFVklDRV9OVU1fVkFSOwog CiBpbnQKIG9tcF9nZXRfZGV2aWNlX251bSAodm9pZCkKZGlmZiAtLWdpdCBh L2xpYmdvbXAvY29uZmlnL252cHR4L3RhcmdldC5jIGIvbGliZ29tcC9jb25m aWcvbnZwdHgvdGFyZ2V0LmMKaW5kZXggMTExMDhkMjBlMTUuLjA2ZjZjZDhi NjExIDEwMDY0NAotLS0gYS9saWJnb21wL2NvbmZpZy9udnB0eC90YXJnZXQu YworKysgYi9saWJnb21wL2NvbmZpZy9udnB0eC90YXJnZXQuYwpAQCAtMjYs NyArMjYsMjkgQEAKICNpbmNsdWRlICJsaWJnb21wLmgiCiAjaW5jbHVkZSA8 bGltaXRzLmg+CiAKKyNkZWZpbmUgR09NUF9SRVZfT0ZGTE9BRF9WQVIgX19n b21wX3Jldl9vZmZsb2FkX3ZhcgorCisvKiBSZXZlcnNlIG9mZmxvYWQuIE11 c3QgbWF0Y2ggdmVyc2lvbiB1c2VkIGluIHBsdWdpbi9wbHVnaW4tbnZwdHgu Yy4gKi8KK3N0cnVjdCByZXZfb2ZmbG9hZCB7CisgIHVpbnQ2NF90IGZuOwor ICB1aW50NjRfdCBtYXBudW07CisgIHVpbnQ2NF90IGFkZHJzOworICB1aW50 NjRfdCBzaXplczsKKyAgdWludDY0X3Qga2luZHM7CisgIGludDMyX3QgZGV2 X251bTsKKyAgdWludDMyX3QgbG9jazsKK307CisKKyNpZiAoX19TSVpFT0Zf U0hPUlRfXyAhPSAyIFwKKyAgICAgfHwgX19TSVpFT0ZfU0laRV9UX18gIT0g OCBcCisgICAgIHx8IF9fU0laRU9GX1BPSU5URVJfXyAhPSA4KQorI2Vycm9y ICJEYXRhLXR5cGUgY29udmVyc2lvbiByZXF1aXJlZCBmb3IgcmV2X29mZmxv YWQiCisjZW5kaWYKKworCiBleHRlcm4gaW50IF9fZ29tcF90ZWFtX251bSBf X2F0dHJpYnV0ZV9fKChzaGFyZWQpKTsKK2V4dGVybiB2b2xhdGlsZSBpbnQg R09NUF9ERVZJQ0VfTlVNX1ZBUjsKK3ZvbGF0aWxlIHN0cnVjdCByZXZfb2Zm bG9hZCAqR09NUF9SRVZfT0ZGTE9BRF9WQVI7CiAKIGJvb2wKIEdPTVBfdGVh bXM0ICh1bnNpZ25lZCBpbnQgbnVtX3RlYW1zX2xvd2VyLCB1bnNpZ25lZCBp bnQgbnVtX3RlYW1zX3VwcGVyLApAQCAtODgsMTYgKzExMCwzMiBAQCBHT01Q X3RhcmdldF9leHQgKGludCBkZXZpY2UsIHZvaWQgKCpmbikgKHZvaWQgKiks IHNpemVfdCBtYXBudW0sCiAJCSB2b2lkICoqaG9zdGFkZHJzLCBzaXplX3Qg KnNpemVzLCB1bnNpZ25lZCBzaG9ydCAqa2luZHMsCiAJCSB1bnNpZ25lZCBp bnQgZmxhZ3MsIHZvaWQgKipkZXBlbmQsIHZvaWQgKiphcmdzKQogewotICAo dm9pZCkgZGV2aWNlOwotICAodm9pZCkgZm47Ci0gICh2b2lkKSBtYXBudW07 Ci0gICh2b2lkKSBob3N0YWRkcnM7Ci0gICh2b2lkKSBzaXplczsKLSAgKHZv aWQpIGtpbmRzOwogICAodm9pZCkgZmxhZ3M7CiAgICh2b2lkKSBkZXBlbmQ7 CiAgICh2b2lkKSBhcmdzOwotICBfX2J1aWx0aW5fdW5yZWFjaGFibGUgKCk7 CisKKyAgaWYgKGRldmljZSAhPSBHT01QX0RFVklDRV9IT1NUX0ZBTExCQUNL CisgICAgICB8fCBmbiA9PSBOVUxMCisgICAgICB8fCBHT01QX1JFVl9PRkZM T0FEX1ZBUiA9PSBOVUxMKQorICAgIHJldHVybjsKKworICB3aGlsZSAoX19z eW5jX2xvY2tfdGVzdF9hbmRfc2V0ICgmR09NUF9SRVZfT0ZGTE9BRF9WQVIt PmxvY2ssICh1aW50OF90KSAxKSkKKyAgICA7ICAvKiBzcGluICAqLworCisg IF9fYXRvbWljX3N0b3JlX24gKCZHT01QX1JFVl9PRkZMT0FEX1ZBUi0+bWFw bnVtLCBtYXBudW0sIF9fQVRPTUlDX1NFUV9DU1QpOworICBfX2F0b21pY19z dG9yZV9uICgmR09NUF9SRVZfT0ZGTE9BRF9WQVItPmFkZHJzLCBob3N0YWRk cnMsIF9fQVRPTUlDX1NFUV9DU1QpOworICBfX2F0b21pY19zdG9yZV9uICgm R09NUF9SRVZfT0ZGTE9BRF9WQVItPnNpemVzLCBzaXplcywgX19BVE9NSUNf U0VRX0NTVCk7CisgIF9fYXRvbWljX3N0b3JlX24gKCZHT01QX1JFVl9PRkZM T0FEX1ZBUi0+a2luZHMsIGtpbmRzLCBfX0FUT01JQ19TRVFfQ1NUKTsKKyAg X19hdG9taWNfc3RvcmVfbiAoJkdPTVBfUkVWX09GRkxPQURfVkFSLT5kZXZf bnVtLCBHT01QX0RFVklDRV9OVU1fVkFSLAorCQkgICAgX19BVE9NSUNfU0VR X0NTVCk7CisKKyAgLyogJ2ZuJyBtdXN0IGJlIGxhc3QuICAqLworICBfX2F0 b21pY19zdG9yZV9uICgmR09NUF9SRVZfT0ZGTE9BRF9WQVItPmZuLCBmbiwg X19BVE9NSUNfU0VRX0NTVCk7CisKKyAgLyogUHJvY2Vzc2VkIG9uIHRoZSBo b3N0IC0gd2hlbiBkb25lLCBmbiBpcyBzZXQgdG8gTlVMTC4gICovCisgIHdo aWxlIChfX2F0b21pY19sb2FkX24gKCZHT01QX1JFVl9PRkZMT0FEX1ZBUi0+ Zm4sIF9fQVRPTUlDX1NFUV9DU1QpICE9IDApCisgICAgOyAgLyogc3BpbiAg Ki8KKyAgX19zeW5jX2xvY2tfcmVsZWFzZSAoJkdPTVBfUkVWX09GRkxPQURf VkFSLT5sb2NrKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvbGliZ29tcC9s aWJnb21wLXBsdWdpbi5jIGIvbGliZ29tcC9saWJnb21wLXBsdWdpbi5jCmlu ZGV4IDlkNGNjNjIzYTEwLi4zMTZkZTc0OWY2OSAxMDA2NDQKLS0tIGEvbGli Z29tcC9saWJnb21wLXBsdWdpbi5jCisrKyBiL2xpYmdvbXAvbGliZ29tcC1w bHVnaW4uYwpAQCAtNzgsMyArNzgsMTUgQEAgR09NUF9QTFVHSU5fZmF0YWwg KGNvbnN0IGNoYXIgKm1zZywgLi4uKQogICBnb21wX3ZmYXRhbCAobXNnLCBh cCk7CiAgIHZhX2VuZCAoYXApOwogfQorCit2b2lkCitHT01QX1BMVUdJTl90 YXJnZXRfcmV2ICh1aW50NjRfdCBmbl9wdHIsIHVpbnQ2NF90IG1hcG51bSwg dWludDY0X3QgZGV2YWRkcnNfcHRyLAorCQkJdWludDY0X3Qgc2l6ZXNfcHRy LCB1aW50NjRfdCBraW5kc19wdHIsIGludCBkZXZfbnVtLAorCQkJdm9pZCAo KmRldl90b19ob3N0X2NweSkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXpl X3QsCisJCQkJCQkgdm9pZCAqKSwKKwkJCXZvaWQgKCpob3N0X3RvX2Rldl9j cHkpICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorCQkJCQkJIHZv aWQgKiksIHZvaWQgKnRva2VuKQoreworICBnb21wX3RhcmdldF9yZXYgKGZu X3B0ciwgbWFwbnVtLCBkZXZhZGRyc19wdHIsIHNpemVzX3B0ciwga2luZHNf cHRyLCBkZXZfbnVtLAorCQkgICBkZXZfdG9faG9zdF9jcHksIGhvc3RfdG9f ZGV2X2NweSwgdG9rZW4pOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC9saWJn b21wLXBsdWdpbi5oIGIvbGliZ29tcC9saWJnb21wLXBsdWdpbi5oCmluZGV4 IGFiM2VkNjM4NDc1Li40MGRmYjUyZTQ0ZSAxMDA2NDQKLS0tIGEvbGliZ29t cC9saWJnb21wLXBsdWdpbi5oCisrKyBiL2xpYmdvbXAvbGliZ29tcC1wbHVn aW4uaApAQCAtMTIxLDYgKzEyMSwxMyBAQCBleHRlcm4gdm9pZCBHT01QX1BM VUdJTl9lcnJvciAoY29uc3QgY2hhciAqLCAuLi4pCiBleHRlcm4gdm9pZCBH T01QX1BMVUdJTl9mYXRhbCAoY29uc3QgY2hhciAqLCAuLi4pCiAJX19hdHRy aWJ1dGVfXyAoKG5vcmV0dXJuLCBmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsK IAorZXh0ZXJuIHZvaWQgR09NUF9QTFVHSU5fdGFyZ2V0X3JldiAodWludDY0 X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QsCisJCQkJICAgIHVp bnQ2NF90LCBpbnQsCisJCQkJICAgIHZvaWQgKCopICh2b2lkICosIGNvbnN0 IHZvaWQgKiwgc2l6ZV90LAorCQkJCQkgICAgICB2b2lkICopLAorCQkJCSAg ICB2b2lkICgqKSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCwKKwkJ CQkJICAgICAgdm9pZCAqKSwgdm9pZCAqKTsKKwogLyogUHJvdG90eXBlcyBm b3IgZnVuY3Rpb25zIGltcGxlbWVudGVkIGJ5IGxpYmdvbXAgcGx1Z2lucy4g ICovCiBleHRlcm4gY29uc3QgY2hhciAqR09NUF9PRkZMT0FEX2dldF9uYW1l ICh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgR09NUF9PRkZMT0FEX2dl dF9jYXBzICh2b2lkKTsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGliZ29tcC5o IGIvbGliZ29tcC9saWJnb21wLmgKaW5kZXggYzI0M2M0ZDZjZjQuLmJiYWI1 YjRiMGFmIDEwMDY0NAotLS0gYS9saWJnb21wL2xpYmdvbXAuaAorKysgYi9s aWJnb21wL2xpYmdvbXAuaApAQCAtMTAxNCw2ICsxMDE0LDExIEBAIGV4dGVy biBpbnQgZ29tcF9wYXVzZV9ob3N0ICh2b2lkKTsKIGV4dGVybiB2b2lkIGdv bXBfaW5pdF90YXJnZXRzX29uY2UgKHZvaWQpOwogZXh0ZXJuIGludCBnb21w X2dldF9udW1fZGV2aWNlcyAodm9pZCk7CiBleHRlcm4gYm9vbCBnb21wX3Rh cmdldF90YXNrX2ZuICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ29tcF90YXJn ZXRfcmV2ICh1aW50NjRfdCwgdWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRf dCwgdWludDY0X3QsCisJCQkgICAgIGludCwKKwkJCSAgICAgdm9pZCAoKikg KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHZvaWQgKiksCisJCQkg ICAgIHZvaWQgKCopICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCB2 b2lkICopLAorCQkJICAgICB2b2lkICopOwogCiAvKiBTcGxheSB0cmVlIGRl ZmluaXRpb25zLiAgKi8KIHR5cGVkZWYgc3RydWN0IHNwbGF5X3RyZWVfbm9k ZV9zICpzcGxheV90cmVlX25vZGU7CmRpZmYgLS1naXQgYS9saWJnb21wL2xp YmdvbXAubWFwIGIvbGliZ29tcC9saWJnb21wLm1hcAppbmRleCA0NmQ1ZjEw ZjNlMS4uMTJmNzZmN2U0OGYgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvbGliZ29t cC5tYXAKKysrIGIvbGliZ29tcC9saWJnb21wLm1hcApAQCAtNjIyLDMgKzYy Miw4IEBAIEdPTVBfUExVR0lOXzEuMyB7CiAJR09NUF9QTFVHSU5fZ29hY2Nf cHJvZmlsaW5nX2Rpc3BhdGNoOwogCUdPTVBfUExVR0lOX2dvYWNjX3RocmVh ZDsKIH0gR09NUF9QTFVHSU5fMS4yOworCitHT01QX1BMVUdJTl8xLjQgewor ICBnbG9iYWw6CisJR09NUF9QTFVHSU5fdGFyZ2V0X3JldjsKK30gR09NUF9Q TFVHSU5fMS4zOwpkaWZmIC0tZ2l0IGEvbGliZ29tcC9wbHVnaW4vY3VkYS1s aWIuZGVmIGIvbGliZ29tcC9wbHVnaW4vY3VkYS1saWIuZGVmCmluZGV4IGNk OTFiMzliMWQyLi42MTM1OWM3ZTc0ZSAxMDA2NDQKLS0tIGEvbGliZ29tcC9w bHVnaW4vY3VkYS1saWIuZGVmCisrKyBiL2xpYmdvbXAvcGx1Z2luL2N1ZGEt bGliLmRlZgpAQCAtMjksNiArMjksNyBAQCBDVURBX09ORV9DQUxMX01BWUJF X05VTEwgKGN1TGlua0NyZWF0ZV92MikKIENVREFfT05FX0NBTEwgKGN1TGlu a0Rlc3Ryb3kpCiBDVURBX09ORV9DQUxMIChjdU1lbUFsbG9jKQogQ1VEQV9P TkVfQ0FMTCAoY3VNZW1BbGxvY0hvc3QpCitDVURBX09ORV9DQUxMIChjdU1l bUFsbG9jTWFuYWdlZCkKIENVREFfT05FX0NBTEwgKGN1TWVtY3B5KQogQ1VE QV9PTkVfQ0FMTCAoY3VNZW1jcHlEdG9EQXN5bmMpCiBDVURBX09ORV9DQUxM IChjdU1lbWNweUR0b0gpCmRpZmYgLS1naXQgYS9saWJnb21wL3BsdWdpbi9w bHVnaW4tbnZwdHguYyBiL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0eC5j CmluZGV4IGJjNjNlMjc0Y2RmLi43YWI5NDIxYjA2MCAxMDA2NDQKLS0tIGEv bGliZ29tcC9wbHVnaW4vcGx1Z2luLW52cHR4LmMKKysrIGIvbGliZ29tcC9w bHVnaW4vcGx1Z2luLW52cHR4LmMKQEAgLTU0LDYgKzU0LDggQEAKICNpbmNs dWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCisjZGVmaW5l IEdPTVBfUkVWX09GRkxPQURfVkFSIF9fZ29tcF9yZXZfb2ZmbG9hZF92YXIK KwogLyogQW4gYXJiaXRyYXJ5IGZpeGVkIGxpbWl0ICgxMjhNQikgZm9yIHRo ZSBzaXplIG9mIHRoZSBPcGVuTVAgc29mdCBzdGFja3MKICAgIGJsb2NrIHRv IGNhY2hlIGJldHdlZW4ga2VybmVsIGludm9jYXRpb25zLiAgRm9yIHNvZnQt c3RhY2tzIGJsb2NrcyBiaWdnZXIKICAgIHRoYW4gdGhpcywgd2Ugd2lsbCBm cmVlIHRoZSBibG9jayBiZWZvcmUgYXR0ZW1wdGluZyBhbm90aGVyIEdQVSBt ZW1vcnkKQEAgLTI3NCw2ICsyNzYsMTcgQEAgc3RydWN0IHRhcmdfZm5fZGVz Y3JpcHRvcgogICBpbnQgbWF4X3RocmVhZHNfcGVyX2Jsb2NrOwogfTsKIAor LyogUmV2ZXJzZSBvZmZsb2FkLiBNdXN0IG1hdGNoIHZlcnNpb24gdXNlZCBp biBjb25maWcvbnZwdHgvdGFyZ2V0LmMuICovCitzdHJ1Y3QgcmV2X29mZmxv YWQgeworICB1aW50NjRfdCBmbjsKKyAgdWludDY0X3QgbWFwbnVtOworICB1 aW50NjRfdCBhZGRyczsKKyAgdWludDY0X3Qgc2l6ZXM7CisgIHVpbnQ2NF90 IGtpbmRzOworICBpbnQzMl90IGRldl9udW07CisgIHVpbnQzMl90IGxvY2s7 Cit9OworCiAvKiBBIGxvYWRlZCBQVFggaW1hZ2UuICAqLwogc3RydWN0IHB0 eF9pbWFnZV9kYXRhCiB7CkBAIC0zMDIsNiArMzE1LDcgQEAgc3RydWN0IHB0 eF9kZXZpY2UKICAgYm9vbCBtYXA7CiAgIGJvb2wgY29uY3VyOwogICBib29s IG1rZXJuOworICBib29sIGNvbmN1cnJfbWFuYWdlZF9hY2Nlc3M7CiAgIGlu dCBtb2RlOwogICBpbnQgY2xvY2tfa2h6OwogICBpbnQgbnVtX3NtczsKQEAg LTMyOSw2ICszNDMsOSBAQCBzdHJ1Y3QgcHR4X2RldmljZQogICAgICAgcHRo cmVhZF9tdXRleF90IGxvY2s7CiAgICAgfSBvbXBfc3RhY2tzOwogCisgIHN0 cnVjdCByZXZfb2ZmbG9hZCAqcmV2X2RhdGE7CisgIENVZGV2aWNlcHRyIHJl dl9kYXRhX2RldjsKKwogICBzdHJ1Y3QgcHR4X2RldmljZSAqbmV4dDsKIH07 CiAKQEAgLTQyMyw3ICs0NDAsNyBAQCBudnB0eF9vcGVuX2RldmljZSAoaW50 IG4pCiAgIHN0cnVjdCBwdHhfZGV2aWNlICpwdHhfZGV2OwogICBDVWRldmlj ZSBkZXYsIGN0eF9kZXY7CiAgIENVcmVzdWx0IHI7Ci0gIGludCBhc3luY19l bmdpbmVzLCBwaTsKKyAgaW50IHBpOwogCiAgIENVREFfQ0FMTF9FUkVUIChO VUxMLCBjdURldmljZUdldCwgJmRldiwgbik7CiAKQEAgLTUxOSwxMSArNTM2 LDE3IEBAIG52cHR4X29wZW5fZGV2aWNlIChpbnQgbikKIAkJICBDVV9ERVZJ Q0VfQVRUUklCVVRFX01BWF9USFJFQURTX1BFUl9NVUxUSVBST0NFU1NPUiwg ZGV2KTsKICAgcHR4X2Rldi0+bWF4X3RocmVhZHNfcGVyX211bHRpcHJvY2Vz c29yID0gcGk7CiAKKyNpZiAwCisgIGludCBhc3luY19lbmdpbmVzOwogICBy ID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1RGV2aWNlR2V0QXR0cmlidXRlLCAm YXN5bmNfZW5naW5lcywKIAkJCSBDVV9ERVZJQ0VfQVRUUklCVVRFX0FTWU5D X0VOR0lORV9DT1VOVCwgZGV2KTsKICAgaWYgKHIgIT0gQ1VEQV9TVUNDRVNT KQogICAgIGFzeW5jX2VuZ2luZXMgPSAxOworI2VuZGlmCiAKKyAgciA9IENV REFfQ0FMTF9OT0NIRUNLIChjdURldmljZUdldEF0dHJpYnV0ZSwgJnBpLAor CQkJIENVX0RFVklDRV9BVFRSSUJVVEVfQ09OQ1VSUkVOVF9NQU5BR0VEX0FD Q0VTUywgZGV2KTsKKyAgcHR4X2Rldi0+Y29uY3Vycl9tYW5hZ2VkX2FjY2Vz cyA9IHIgPT0gQ1VEQV9TVUNDRVNTID8gcGkgOiBmYWxzZTsKICAgZm9yIChp bnQgaSA9IDA7IGkgIT0gR09NUF9ESU1fTUFYOyBpKyspCiAgICAgcHR4X2Rl di0+ZGVmYXVsdF9kaW1zW2ldID0gMDsKIApAQCAtMTMxMyw2ICsxMzM2LDM4 IEBAIEdPTVBfT0ZGTE9BRF9sb2FkX2ltYWdlIChpbnQgb3JkLCB1bnNpZ25l ZCB2ZXJzaW9uLCBjb25zdCB2b2lkICp0YXJnZXRfZGF0YSwKICAgdGFyZ19m bnMgPSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IHRhcmdf Zm5fZGVzY3JpcHRvcikKIAkJCQkgKiBmbl9lbnRyaWVzKTsKIAorICBpZiAo cmV2X2ZuX3RhYmxlICYmIGRldi0+cmV2X2RhdGEgPT0gTlVMTCkKKyAgICB7 CisgICAgICBDVWRldmljZXB0ciBkcCA9IDA7CisgICAgICBpZiAoZGV2LT5j b25jdXJyX21hbmFnZWRfYWNjZXNzICYmIENVREFfQ0FMTF9FWElTVFMgKGN1 TWVtQWxsb2NNYW5hZ2VkKSkKKwl7CisJICBDVURBX0NBTExfQVNTRVJUIChj dU1lbUFsbG9jTWFuYWdlZCwgKHZvaWQgKikgJmRldi0+cmV2X2RhdGEsCisJ CQkgICAgc2l6ZW9mICgqZGV2LT5yZXZfZGF0YSksIENVX01FTV9BVFRBQ0hf R0xPQkFMKTsKKwkgIGRwID0gKENVZGV2aWNlcHRyKSBkZXYtPnJldl9kYXRh OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBDVURBX0NBTExfQVNTRVJUIChj dU1lbUFsbG9jSG9zdCwgKHZvaWQgKiopICZkZXYtPnJldl9kYXRhLAorCQkJ ICAgIHNpemVvZiAoKmRldi0+cmV2X2RhdGEpKTsKKwkgIG1lbXNldCAoZGV2 LT5yZXZfZGF0YSwgJ1wwJywgc2l6ZW9mICgqZGV2LT5yZXZfZGF0YSkpOwor CSAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VNZW1BbGxvYywgJmRldi0+cmV2X2Rh dGFfZGV2LAorCQkJICAgIHNpemVvZiAoKmRldi0+cmV2X2RhdGEpKTsKKwkg IGRwID0gZGV2LT5yZXZfZGF0YV9kZXY7CisJfQorICAgICAgQ1VkZXZpY2Vw dHIgZGV2aWNlX3Jldl9vZmZsb2FkX3ZhcjsKKyAgICAgIHNpemVfdCBkZXZp Y2VfcmV2X29mZmxvYWRfc2l6ZTsKKyAgICAgIENVcmVzdWx0IHIgPSBDVURB X0NBTExfTk9DSEVDSyAoY3VNb2R1bGVHZXRHbG9iYWwsCisJCQkJICAgICAg JmRldmljZV9yZXZfb2ZmbG9hZF92YXIsCisJCQkJICAgICAgJmRldmljZV9y ZXZfb2ZmbG9hZF9zaXplLCBtb2R1bGUsCisJCQkJICAgICAgWFNUUklORyAo R09NUF9SRVZfT0ZGTE9BRF9WQVIpKTsKKyAgICAgIGlmIChyICE9IENVREFf U1VDQ0VTUykKKwlHT01QX1BMVUdJTl9mYXRhbCAoImN1TW9kdWxlR2V0R2xv YmFsIGVycm9yOiAlcyIsIGN1ZGFfZXJyb3IgKHIpKTsKKyAgICAgIHIgPSBD VURBX0NBTExfTk9DSEVDSyAoY3VNZW1jcHlIdG9ELCBkZXZpY2VfcmV2X29m ZmxvYWRfdmFyLCAmZHAsCisJCQkgICAgIHNpemVvZiAoZHApKTsKKyAgICAg IGlmIChyICE9IENVREFfU1VDQ0VTUykKKwlHT01QX1BMVUdJTl9mYXRhbCAo ImN1TWVtY3B5SHRvRCBlcnJvcjogJXMiLCBjdWRhX2Vycm9yIChyKSk7Cisg ICAgfQorCiAgICp0YXJnZXRfdGFibGUgPSB0YXJnX3RibDsKIAogICBuZXdf aW1hZ2UgPSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IHB0 eF9pbWFnZV9kYXRhKSk7CkBAIC0xMzczLDYgKzE0MjgsMjIgQEAgR09NUF9P RkZMT0FEX2xvYWRfaW1hZ2UgKGludCBvcmQsIHVuc2lnbmVkIHZlcnNpb24s IGNvbnN0IHZvaWQgKnRhcmdldF9kYXRhLAogICAgIHRhcmdfdGJsLT5zdGFy dCA9IHRhcmdfdGJsLT5lbmQgPSAwOwogICB0YXJnX3RibCsrOwogCisgIGlm IChyZXZfZm5fdGFibGUpCisgICAgeworICAgICAgQ1VkZXZpY2VwdHIgdmFy OworICAgICAgc2l6ZV90IGJ5dGVzOworICAgICAgciA9IENVREFfQ0FMTF9O T0NIRUNLIChjdU1vZHVsZUdldEdsb2JhbCwgJnZhciwgJmJ5dGVzLCBtb2R1 bGUsCisJCQkgICAgICIkb2ZmbG9hZF9mdW5jX3RhYmxlIik7CisgICAgICBp ZiAociAhPSBDVURBX1NVQ0NFU1MpCisJR09NUF9QTFVHSU5fZmF0YWwgKCJj dU1vZHVsZUdldEdsb2JhbCBlcnJvcjogJXMiLCBjdWRhX2Vycm9yIChyKSk7 CisgICAgICBhc3NlcnQgKGJ5dGVzID09IHNpemVvZiAodWludDY0X3QpICog Zm5fZW50cmllcyk7CisgICAgICAqcmV2X2ZuX3RhYmxlID0gR09NUF9QTFVH SU5fbWFsbG9jIChzaXplb2YgKHVpbnQ2NF90KSAqIGZuX2VudHJpZXMpOwor ICAgICAgciA9IENVREFfQ0FMTF9OT0NIRUNLIChjdU1lbWNweUR0b0gsICpy ZXZfZm5fdGFibGUsIHZhciwgYnl0ZXMpOworICAgICAgaWYgKHIgIT0gQ1VE QV9TVUNDRVNTKQorCUdPTVBfUExVR0lOX2ZhdGFsICgiY3VNZW1jcHlEdG9I IGVycm9yOiAlcyIsIGN1ZGFfZXJyb3IgKHIpKTsKKyAgICB9CisKKwogICBu dnB0eF9zZXRfY2xvY2t0aWNrIChtb2R1bGUsIGRldik7CiAKICAgcmV0dXJu IGZuX2VudHJpZXMgKyB2YXJfZW50cmllcyArIG90aGVyX2VudHJpZXM7CkBA IC0xOTgyLDYgKzIwNTMsMjMgQEAgbnZwdHhfc3RhY2tzX2FjcXVpcmUgKHN0 cnVjdCBwdHhfZGV2aWNlICpwdHhfZGV2LCBzaXplX3Qgc2l6ZSwgaW50IG51 bSkKICAgcmV0dXJuICh2b2lkICopIHB0eF9kZXYtPm9tcF9zdGFja3MucHRy OwogfQogCisKK3ZvaWQKK3Jldl9vZmZfZGV2X3RvX2hvc3RfY3B5ICh2b2lk ICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplLAorCQkJIENV c3RyZWFtIHN0cmVhbSkKK3sKKyAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VNZW1j cHlEdG9IQXN5bmMsIGRlc3QsIChDVWRldmljZXB0cikgc3JjLCBzaXplLCBz dHJlYW0pOworICBDVURBX0NBTExfQVNTRVJUIChjdVN0cmVhbVN5bmNocm9u aXplLCBzdHJlYW0pOworfQorCit2b2lkCityZXZfb2ZmX2hvc3RfdG9fZGV2 X2NweSAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6 ZSwKKwkJCSBDVXN0cmVhbSBzdHJlYW0pCit7CisgIENVREFfQ0FMTF9BU1NF UlQgKGN1TWVtY3B5SHRvREFzeW5jLCAoQ1VkZXZpY2VwdHIpIGRlc3QsIHNy Yywgc2l6ZSwgc3RyZWFtKTsKKyAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VTdHJl YW1TeW5jaHJvbml6ZSwgc3RyZWFtKTsKK30KKwogdm9pZAogR09NUF9PRkZM T0FEX3J1biAoaW50IG9yZCwgdm9pZCAqdGd0X2ZuLCB2b2lkICp0Z3RfdmFy cywgdm9pZCAqKmFyZ3MpCiB7CkBAIC0yMDE2LDYgKzIxMDQsMTAgQEAgR09N UF9PRkZMT0FEX3J1biAoaW50IG9yZCwgdm9pZCAqdGd0X2ZuLCB2b2lkICp0 Z3RfdmFycywgdm9pZCAqKmFyZ3MpCiAgIG52cHR4X2FkanVzdF9sYXVuY2hf Ym91bmRzICh0Z3RfZm4sIHB0eF9kZXYsICZ0ZWFtcywgJnRocmVhZHMpOwog CiAgIHNpemVfdCBzdGFja19zaXplID0gbnZwdHhfc3RhY2tzX3NpemUgKCk7 CisgIGJvb2wgcmV2ZXJzZV9vZmYgPSBwdHhfZGV2LT5yZXZfZGF0YSAhPSBO VUxMOworICBib29sIGhhc191c20gPSAocHR4X2Rldi0+Y29uY3Vycl9tYW5h Z2VkX2FjY2VzcworCQkgICYmIENVREFfQ0FMTF9FWElTVFMgKGN1TWVtQWxs b2NNYW5hZ2VkKSk7CisgIENVc3RyZWFtIGNvcHlfc3RyZWFtID0gTlVMTDsK IAogICBwdGhyZWFkX211dGV4X2xvY2sgKCZwdHhfZGV2LT5vbXBfc3RhY2tz LmxvY2spOwogICB2b2lkICpzdGFja3MgPSBudnB0eF9zdGFja3NfYWNxdWly ZSAocHR4X2Rldiwgc3RhY2tfc2l6ZSwgdGVhbXMgKiB0aHJlYWRzKTsKQEAg LTIwMjksMTIgKzIxMjEsNjIgQEAgR09NUF9PRkZMT0FEX3J1biAoaW50IG9y ZCwgdm9pZCAqdGd0X2ZuLCB2b2lkICp0Z3RfdmFycywgdm9pZCAqKmFyZ3Mp CiAgIEdPTVBfUExVR0lOX2RlYnVnICgwLCAiICAlczoga2VybmVsICVzOiBs YXVuY2giCiAJCSAgICAgIiBbKHRlYW1zOiAldSksIDEsIDFdIFsobGFuZXM6 IDMyKSwgKHRocmVhZHM6ICV1KSwgMV1cbiIsCiAJCSAgICAgX19GVU5DVElP Tl9fLCBmbl9uYW1lLCB0ZWFtcywgdGhyZWFkcyk7CisgIGlmIChyZXZlcnNl X29mZikKKyAgICBDVURBX0NBTExfQVNTRVJUIChjdVN0cmVhbUNyZWF0ZSwg JmNvcHlfc3RyZWFtLCBDVV9TVFJFQU1fTk9OX0JMT0NLSU5HKTsKICAgciA9 IENVREFfQ0FMTF9OT0NIRUNLIChjdUxhdW5jaEtlcm5lbCwgZnVuY3Rpb24s IHRlYW1zLCAxLCAxLAogCQkJIDMyLCB0aHJlYWRzLCAxLCAwLCBOVUxMLCBO VUxMLCBjb25maWcpOwogICBpZiAociAhPSBDVURBX1NVQ0NFU1MpCiAgICAg R09NUF9QTFVHSU5fZmF0YWwgKCJjdUxhdW5jaEtlcm5lbCBlcnJvcjogJXMi LCBjdWRhX2Vycm9yIChyKSk7Ci0KLSAgciA9IENVREFfQ0FMTF9OT0NIRUNL IChjdUN0eFN5bmNocm9uaXplLCApOworICBpZiAocmV2ZXJzZV9vZmYpCisg ICAgd2hpbGUgKHRydWUpCisgICAgICB7CisJciA9IENVREFfQ0FMTF9OT0NI RUNLIChjdVN0cmVhbVF1ZXJ5LCBOVUxMKTsKKwlpZiAociA9PSBDVURBX1NV Q0NFU1MpCisJICBicmVhazsKKwlpZiAociA9PSBDVURBX0VSUk9SX0xBVU5D SF9GQUlMRUQpCisJICBHT01QX1BMVUdJTl9mYXRhbCAoImN1U3RyZWFtUXVl cnkgZXJyb3I6ICVzICVzXG4iLCBjdWRhX2Vycm9yIChyKSwKKwkJCSAgICAg bWF5YmVfYWJvcnRfbXNnKTsKKwllbHNlIGlmIChyICE9IENVREFfRVJST1Jf Tk9UX1JFQURZKQorCSAgR09NUF9QTFVHSU5fZmF0YWwgKCJjdVN0cmVhbVF1 ZXJ5IGVycm9yOiAlcyIsIGN1ZGFfZXJyb3IgKHIpKTsKKwlpZiAoIWhhc191 c20pCisJICB7CisJICAgIENVREFfQ0FMTF9BU1NFUlQgKGN1TWVtY3B5RHRv SEFzeW5jLCBwdHhfZGV2LT5yZXZfZGF0YSwKKwkJCSAgICAgIHB0eF9kZXYt PnJldl9kYXRhX2RldiwKKwkJCSAgICAgIHNpemVvZiAoKnB0eF9kZXYtPnJl dl9kYXRhKSwgY29weV9zdHJlYW0pOworCSAgICBDVURBX0NBTExfQVNTRVJU IChjdVN0cmVhbVN5bmNocm9uaXplLCBjb3B5X3N0cmVhbSk7CisJICB9CisJ aWYgKHB0eF9kZXYtPnJldl9kYXRhLT5mbiAhPSAwKQorCSAgeworCSAgICBz dHJ1Y3QgcmV2X29mZmxvYWQgKnJldl9kYXRhID0gcHR4X2Rldi0+cmV2X2Rh dGE7CisJICAgIHVpbnQ2NF90IGZuX3B0ciA9IHJldl9kYXRhLT5mbjsKKwkg ICAgdWludDY0X3QgbWFwbnVtID0gcmV2X2RhdGEtPm1hcG51bTsKKwkgICAg dWludDY0X3QgYWRkcl9wdHIgPSByZXZfZGF0YS0+YWRkcnM7CisJICAgIHVp bnQ2NF90IHNpemVzX3B0ciA9IHJldl9kYXRhLT5zaXplczsKKwkgICAgdWlu dDY0X3Qga2luZHNfcHRyID0gcmV2X2RhdGEtPmtpbmRzOworCSAgICBpbnQg ZGV2X251bSA9IChpbnQpIHJldl9kYXRhLT5kZXZfbnVtOworCSAgICBHT01Q X1BMVUdJTl90YXJnZXRfcmV2IChmbl9wdHIsIG1hcG51bSwgYWRkcl9wdHIs IHNpemVzX3B0ciwKKwkJCQkgICAga2luZHNfcHRyLCBkZXZfbnVtLCByZXZf b2ZmX2Rldl90b19ob3N0X2NweSwKKwkJCQkgICAgcmV2X29mZl9ob3N0X3Rv X2Rldl9jcHksIGNvcHlfc3RyZWFtKTsKKwkgICAgcmV2X2RhdGEtPmZuID0g MDsKKwkgICAgaWYgKCFoYXNfdXNtKQorCSAgICAgIHsKKwkJLyogZm4gaXMg dGhlIGZpcnN0IGVsZW1lbnQuICovCisJCXIgPSBDVURBX0NBTExfTk9DSEVD SyAoY3VNZW1jcHlIdG9EQXN5bmMsCisJCQkJICAgICAgIHB0eF9kZXYtPnJl dl9kYXRhX2RldiwKKwkJCQkgICAgICAgcHR4X2Rldi0+cmV2X2RhdGEsCisJ CQkJICAgICAgIHNpemVvZiAocHR4X2Rldi0+cmV2X2RhdGEtPmZuKSwKKwkJ CQkgICAgICAgY29weV9zdHJlYW0pOworCQlpZiAociAhPSBDVURBX1NVQ0NF U1MpCisJCSAgR09NUF9QTFVHSU5fZmF0YWwgKCJjdU1lbWNweUh0b0QgZXJy b3I6ICVzIiwgY3VkYV9lcnJvciAocikpOworCQlDVURBX0NBTExfQVNTRVJU IChjdVN0cmVhbVN5bmNocm9uaXplLCBjb3B5X3N0cmVhbSk7CisJICAgICAg fQorCSAgfQorCXVzbGVlcCAoMSk7CisgICAgICB9CisgIGVsc2UKKyAgICBy ID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1Q3R4U3luY2hyb25pemUsICk7Cisg IGlmIChyZXZlcnNlX29mZikKKyAgICBDVURBX0NBTExfQVNTRVJUIChjdVN0 cmVhbURlc3Ryb3ksIGNvcHlfc3RyZWFtKTsKICAgaWYgKHIgPT0gQ1VEQV9F UlJPUl9MQVVOQ0hfRkFJTEVEKQogICAgIEdPTVBfUExVR0lOX2ZhdGFsICgi Y3VDdHhTeW5jaHJvbml6ZSBlcnJvcjogJXMgJXNcbiIsIGN1ZGFfZXJyb3Ig KHIpLAogCQkgICAgICAgbWF5YmVfYWJvcnRfbXNnKTsKZGlmZiAtLWdpdCBh L2xpYmdvbXAvdGFyZ2V0LmMgYi9saWJnb21wL3RhcmdldC5jCmluZGV4IDEz NWRiMWQ4OGFiLi4wYzZmYWQ2OTBmMSAxMDA2NDQKLS0tIGEvbGliZ29tcC90 YXJnZXQuYworKysgYi9saWJnb21wL3RhcmdldC5jCkBAIC0yODU2LDYgKzI4 NTYsMjQgQEAgR09NUF90YXJnZXRfZXh0IChpbnQgZGV2aWNlLCB2b2lkICgq Zm4pICh2b2lkICopLCBzaXplX3QgbWFwbnVtLAogICAgIGh0YWJfZnJlZSAo cmVmY291bnRfc2V0KTsKIH0KIAorLyogSGFuZGxlIHJldmVyc2Ugb2ZmbG9h ZC4gVGhpcyBpcyBub3QgY2FsbGVkIGZvciB0aGUgaG9zdC4gKi8KKwordm9p ZAorZ29tcF90YXJnZXRfcmV2ICh1aW50NjRfdCBmbl9wdHIgX19hdHRyaWJ1 dGVfXyAoKHVudXNlZCkpLAorCQkgdWludDY0X3QgbWFwbnVtIF9fYXR0cmli dXRlX18gKCh1bnVzZWQpKSwKKwkJIHVpbnQ2NF90IGRldmFkZHJzX3B0ciBf X2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisJCSB1aW50NjRfdCBzaXplc19w dHIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorCQkgdWludDY0X3Qga2lu ZHNfcHRyIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKwkJIGludCBkZXZf bnVtIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKwkJIHZvaWQgKCpkZXZf dG9faG9zdF9jcHkpICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LAor CQkJCQkgIHZvaWQgKikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorCQkg dm9pZCAoKmhvc3RfdG9fZGV2X2NweSkgKHZvaWQgKiwgY29uc3Qgdm9pZCAq LCBzaXplX3QsCisJCQkJCSAgdm9pZCAqKSBfX2F0dHJpYnV0ZV9fICgodW51 c2VkKSksCisJCSB2b2lkICp0b2tlbiBfX2F0dHJpYnV0ZV9fICgodW51c2Vk KSkpCit7CisgIF9fYnVpbHRpbl91bnJlYWNoYWJsZSAoKTsKK30KKwogLyog SG9zdCBmYWxsYmFjayBmb3IgR09NUF90YXJnZXRfZGF0YXssX2V4dH0gcm91 dGluZXMuICAqLwogCiBzdGF0aWMgdm9pZAo= --------------KQw6xnbzVBDT0ypNmD0e5TD8--