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 958C03858D37 for ; Mon, 26 Sep 2022 15:08:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 958C03858D37 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,346,1654588800"; d="diff'?scan'208";a="83626568" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa4.mentor.iphmx.com with ESMTP; 26 Sep 2022 07:08:01 -0800 IronPort-SDR: 4rjmuMOTnuX9FMqRgYqs1QeVyUp4vzf/cGqwhtyK9Y4kCasHKAaei6pI3iSySWw6HgigVCvAYR bLM5V7LFmktAq6DU/ob5pzInbujRH2B/yT2OPlZr+JhSt0cXPWeKlE8lwKBaIFTWAXFw3GjBEJ kb+6WwZweW27PR+x7XhtS+DgEwStCBv/kQiyoLCIOhZyg05IzHSm8UurNMNbBrBr1xKHG5ObW3 vdgIIoXDQEFGnVIMBlWiEb+GPKdYaPiWxlGGbLsMnB90JAVG4cdkjdyYlr5+0sLVNE3/8NoB97 99g= Content-Type: multipart/mixed; boundary="------------yhGMcLFgryjLyV0PhuF1Pi0E" Message-ID: Date: Mon, 26 Sep 2022 17:07:53 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0 Subject: Re: [Patch] libgomp/nvptx: Prepare for reverse-offload callback handling Content-Language: en-US To: Alexander Monakov CC: Jakub Jelinek , Tom de Vries , gcc-patches References: <57b3ae5e-8f15-8bea-fa09-39bccbaa2414@codesourcery.com> <3f0fc49f-b07f-bee2-51a8-a5d03f1c33ed@codesourcery.com> From: Tobias Burnus In-Reply-To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-09.mgc.mentorg.com (139.181.222.9) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,NICE_REPLY_A,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: --------------yhGMcLFgryjLyV0PhuF1Pi0E Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Hi Alexander, On 21.09.22 22:06, Alexander Monakov wrote: > It also goes > against the good practice of accelerator programming, which requires queu= eing > work on the accelerator and letting it run asynchronously with the CPU wi= th high > occupancy. > (I know libgomp still waits for the GPU to finish in each GOMP_offload_ru= n, > but maybe it's better to improve *that* instead of piling on new slowness= ) Doesn't OpenMP 'nowait' permit this? (+ 'depend' clause if needed). > On to the patch itself. > And for non-USM code path you're relying on cudaMemcpy observing device-s= ide > atomics in the right order. > Atomics aside, CUDA pinned memory would be a natural choice for such a ti= ny > structure. Did you rule it out for some reason? I did use pinned memory (cuMemAllocHost) =E2=80=93 but somehow it did escap= e me that: "All host memory allocated in all contexts using cuMemAllocHost() and cuMemHostAlloc() is always directly accessible from all contexts on all devices that support unified addressing." I have now updated (but using cuMemHostAlloc instead, using a flag in the hope that this choice is a tad faster). >> +++ b/libgomp/config/nvptx/target.c >> ... >> +#define GOMP_REV_OFFLOAD_VAR __gomp_rev_offload_var > Shouldn't this be in a header (needs to be in sync with the plugin). I have now created one. >> + >> +#if (__SIZEOF_SHORT__ !=3D 2 \ >> + || __SIZEOF_SIZE_T__ !=3D 8 \ >> + || __SIZEOF_POINTER__ !=3D 8) >> +#error "Data-type conversion required for rev_offload" >> +#endif > Huh? This is not a requirement that is new for reverse offload, it has al= ways > been like that for offloading (all ABI rules regarding type sizes, struct > layout, bitfield layout, endianness must match). In theory, compiling with "-m32 -foffload-options=3D-m64" or "-m32 -foffload-options=3D-m32" or "-m64 -foffload-options=3D-m32" is supported. In practice, -m64 everywhere is required. I just want to make sure that for this code the sizes are fine because, here, I am sure it breaks. For other parts, I think the 64bit assumption is coded in but I am not completely sure that's really the case. >> + if (device !=3D GOMP_DEVICE_HOST_FALLBACK >> + || fn =3D=3D NULL >> + || GOMP_REV_OFFLOAD_VAR =3D=3D NULL) >> + return; > Shouldn't this be an 'assert' instead? This tries to mimic what was there before =E2=80=93 doing nothing. In any c= ase, this code path is unspecified or implementation defined (I forgot which of the two), but a user might still be able to construct such a code. I leave it to Jakub whether he likes to have an assert, a error/warning message, or just the return here. >> + __atomic_store_n (&GOMP_REV_OFFLOAD_VAR->dev_num, >> + GOMP_ADDITIONAL_ICVS.device_num, __ATOMIC_SEQ_CST); > Looks like all these can be plain stores, you only need ... > >> + __atomic_store_n (&GOMP_REV_OFFLOAD_VAR->fn, fn, __ATOMIC_SEQ_CST); > ... this to be atomic with 'release' semantics in the usual producer-cons= umer > pattern. > >> + if (ptx_dev->rev_data->fn !=3D 0) > Surely this needs to be an atomic load with 'acquire' semantics in has_us= m case? >> + rev_data->fn =3D 0; >> >> Atomic store? Done so =E2=80=93 updated patch attached. Thanks for the comments. 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 --------------yhGMcLFgryjLyV0PhuF1Pi0E Content-Type: text/x-patch; charset="UTF-8"; name="rev-offload-run-nvptx-v3.diff" Content-Disposition: attachment; filename="rev-offload-run-nvptx-v3.diff" Content-Transfer-Encoding: base64 bGliZ29tcC9udnB0eDogUHJlcGFyZSBmb3IgcmV2ZXJzZS1vZmZsb2FkIGNhbGxiYWNrIGhh bmRsaW5nCgpUaGlzIHBhdGNoIGFkZHMgYSBzdHViICdnb21wX3RhcmdldF9yZXYnIGluIHRo ZSBob3N0J3MgdGFyZ2V0LmMsIHdoaWNoIHdpbGwKbGF0ZXIgaGFuZGxlIHRoZSByZXZlcnNl IG9mZmxvYWQuCkZvciBudnB0eCwgaXQgYWRkcyBzdXBwb3J0IGZvciBmb3J3YXJkaW5nIHRo ZSBvZmZsb2FkIGdvbXBfdGFyZ2V0X2V4dCBjYWxsCnRvIHRoZSBob3N0IGJ5IHNldHRpbmcg dmFsdWVzIGluIGEgc3RydWN0IG9uIHRoZSBkZXZpY2UgYW5kIHF1ZXJ5aW5nIGl0IG9uCnRo ZSBob3N0IC0gaW52b2tpbmcgZ29tcF90YXJnZXRfcmV2IG9uIHRoZSByZXN1bHQuCgppbmNs dWRlL0NoYW5nZUxvZzoKCgkqIGN1ZGEvY3VkYS5oIChlbnVtIENVZGV2aWNlX2F0dHJpYnV0 ZSk6IEFkZAoJQ1VfREVWSUNFX0FUVFJJQlVURV9VTklGSUVEX0FERFJFU1NJTkcuCgkoY3VN ZW1Ib3N0QWxsb2MpOiBBZGQgcHJvdG90eXBlLgoKbGliZ29tcC9DaGFuZ2VMb2c6CgoJKiBj b25maWcvbnZwdHgvaWN2LWRldmljZS5jIChHT01QX0RFVklDRV9OVU1fVkFSKTogUmVtb3Zl Cgknc3RhdGljJyBmb3IgdGhpcyB2YXJpYWJsZS4KCSogY29uZmlnL252cHR4L2xpYmdvbXAt bnZwdHguaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9udnB0eC90YXJnZXQuYzogSW5jbHVkZSBp dC4KCShHT01QX0FERElUSU9OQUxfSUNWUyk6IERlY2xhcmUgZXh0ZXJuIHZhci4KCShHT01Q X1JFVl9PRkZMT0FEX1ZBUik6IERlY2xhcmUgdmFyLgoJKEdPTVBfdGFyZ2V0X2V4dCk6IEhh bmRsZSByZXZlcnNlIG9mZmxvYWQuCgkqIGxpYmdvbXAtcGx1Z2luLmggKEdPTVBfUExVR0lO X3RhcmdldF9yZXYpOiBOZXcgcHJvdG90eXBlLgoJKiBsaWJnb21wLXBsdWdpbi5jIChHT01Q X1BMVUdJTl90YXJnZXRfcmV2KTogTmV3LCBjYWxsIC4uLgoJKiB0YXJnZXQuYyAoZ29tcF90 YXJnZXRfcmV2KTogLi4uIHRoaXMgbmV3IHN0dWIgZnVuY3Rpb24uCgkqIGxpYmdvbXAuaCAo Z29tcF90YXJnZXRfcmV2KTogRGVjbGFyZS4KCSogbGliZ29tcC5tYXAgKEdPTVBfUExVR0lO XzEuNCk6IE5ldzsgYWRkIEdPTVBfUExVR0lOX3RhcmdldF9yZXYuCgkqIHBsdWdpbi9jdWRh LWxpYi5kZWYgKGN1TWVtSG9zdEFsbG9jKTogQWRkLgoJKiBwbHVnaW4vcGx1Z2luLW52cHR4 LmM6IEluY2x1ZGUgbGliZ29tcC1udnB0eC5oLgoJKHN0cnVjdCBwdHhfZGV2aWNlKTogQWRk IHJldl9kYXRhIG1lbWJlci4gCgkobnZwdHhfb3Blbl9kZXZpY2UpOiAjaWYgMCB1bnVzZWQg Y2hlY2s7IGFkZAoJdW5pZmllZCBhZGRyZXNzIGFzc2VydCBjaGVjay4KCShHT01QX09GRkxP QURfZ2V0X251bV9kZXZpY2VzKTogQ2xhaW0gdW5pZmllZCBhZGRyZXNzCglzdXBwb3J0LgoJ KEdPTVBfT0ZGTE9BRF9sb2FkX2ltYWdlKTogRnJlZSByZXZfZm5fdGFibGUgaWYgbm8KCW9m ZmxvYWQgZnVuY3Rpb25zIGV4aXN0LiBNYWtlIG9mZmxvYWQgdmFyIGF2YWlsYWJsZQoJb24g aG9zdCBhbmQgZGV2aWNlLgoJKHJldl9vZmZfZGV2X3RvX2hvc3RfY3B5LCByZXZfb2ZmX2hv c3RfdG9fZGV2X2NweSk6IE5ldy4KCShHT01QX09GRkxPQURfcnVuKTogSGFuZGxlIHJldmVy c2Ugb2ZmbG9hZC4KCiBpbmNsdWRlL2N1ZGEvY3VkYS5oICAgICAgICAgICAgICAgICAgfCAg IDMgKwogbGliZ29tcC9jb25maWcvbnZwdHgvaWN2LWRldmljZS5jICAgIHwgICAyICstCiBs aWJnb21wL2NvbmZpZy9udnB0eC9saWJnb21wLW52cHR4LmggfCAgNTIgKysrKysrKysrKysr KysrKwogbGliZ29tcC9jb25maWcvbnZwdHgvdGFyZ2V0LmMgICAgICAgIHwgIDMyICsrKysr KystLS0KIGxpYmdvbXAvbGliZ29tcC1wbHVnaW4uYyAgICAgICAgICAgICB8ICAxMiArKysr CiBsaWJnb21wL2xpYmdvbXAtcGx1Z2luLmggICAgICAgICAgICAgfCAgIDcgKysrCiBsaWJn b21wL2xpYmdvbXAuaCAgICAgICAgICAgICAgICAgICAgfCAgIDUgKysKIGxpYmdvbXAvbGli Z29tcC5tYXAgICAgICAgICAgICAgICAgICB8ICAgNSArKwogbGliZ29tcC9wbHVnaW4vY3Vk YS1saWIuZGVmICAgICAgICAgIHwgICAxICsKIGxpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0 eC5jICAgICAgICB8IDExMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQog bGliZ29tcC90YXJnZXQuYyAgICAgICAgICAgICAgICAgICAgIHwgIDE5ICsrKysrKwogMTEg ZmlsZXMgY2hhbmdlZCwgMjM1IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2luY2x1ZGUvY3VkYS9jdWRhLmggYi9pbmNsdWRlL2N1ZGEvY3VkYS5oCmlu ZGV4IDM5MzhkMDUuLmUwODFmMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3VkYS9jdWRhLmgK KysrIGIvaW5jbHVkZS9jdWRhL2N1ZGEuaApAQCAtNzcsNiArNzcsNyBAQCB0eXBlZGVmIGVu dW0gewogICBDVV9ERVZJQ0VfQVRUUklCVVRFX0NPTkNVUlJFTlRfS0VSTkVMUyA9IDMxLAog ICBDVV9ERVZJQ0VfQVRUUklCVVRFX01BWF9USFJFQURTX1BFUl9NVUxUSVBST0NFU1NPUiA9 IDM5LAogICBDVV9ERVZJQ0VfQVRUUklCVVRFX0FTWU5DX0VOR0lORV9DT1VOVCA9IDQwLAor ICBDVV9ERVZJQ0VfQVRUUklCVVRFX1VOSUZJRURfQUREUkVTU0lORyA9IDQxLAogICBDVV9E RVZJQ0VfQVRUUklCVVRFX01BWF9SRUdJU1RFUlNfUEVSX01VTFRJUFJPQ0VTU09SID0gODIK IH0gQ1VkZXZpY2VfYXR0cmlidXRlOwogCkBAIC0xMTMsNiArMTE0LDcgQEAgZW51bSB7CiAj ZGVmaW5lIENVX0xBVU5DSF9QQVJBTV9FTkQgKCh2b2lkICopIDApCiAjZGVmaW5lIENVX0xB VU5DSF9QQVJBTV9CVUZGRVJfUE9JTlRFUiAoKHZvaWQgKikgMSkKICNkZWZpbmUgQ1VfTEFV TkNIX1BBUkFNX0JVRkZFUl9TSVpFICgodm9pZCAqKSAyKQorI2RlZmluZSBDVV9NRU1IT1NU QUxMT0NfREVWSUNFTUFQIDB4MDJVCiAKIGVudW0gewogICBDVV9TVFJFQU1fREVGQVVMVCA9 IDAsCkBAIC0xNjksNiArMTcxLDcgQEAgQ1VyZXN1bHQgY3VNZW1HZXRJbmZvIChzaXplX3Qg Kiwgc2l6ZV90ICopOwogQ1VyZXN1bHQgY3VNZW1BbGxvYyAoQ1VkZXZpY2VwdHIgKiwgc2l6 ZV90KTsKICNkZWZpbmUgY3VNZW1BbGxvY0hvc3QgY3VNZW1BbGxvY0hvc3RfdjIKIENVcmVz dWx0IGN1TWVtQWxsb2NIb3N0ICh2b2lkICoqLCBzaXplX3QpOworQ1VyZXN1bHQgY3VNZW1I b3N0QWxsb2MgKHZvaWQgKiosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKIENVcmVzdWx0IGN1 TWVtY3B5IChDVWRldmljZXB0ciwgQ1VkZXZpY2VwdHIsIHNpemVfdCk7CiAjZGVmaW5lIGN1 TWVtY3B5RHRvREFzeW5jIGN1TWVtY3B5RHRvREFzeW5jX3YyCiBDVXJlc3VsdCBjdU1lbWNw eUR0b0RBc3luYyAoQ1VkZXZpY2VwdHIsIENVZGV2aWNlcHRyLCBzaXplX3QsIENVc3RyZWFt KTsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvY29uZmlnL252cHR4L2ljdi1kZXZpY2UuYyBiL2xp YmdvbXAvY29uZmlnL252cHR4L2ljdi1kZXZpY2UuYwppbmRleCA2Zjg2OWJlLi5lZWYxNTFj IDEwMDY0NAotLS0gYS9saWJnb21wL2NvbmZpZy9udnB0eC9pY3YtZGV2aWNlLmMKKysrIGIv bGliZ29tcC9jb25maWcvbnZwdHgvaWN2LWRldmljZS5jCkBAIC0zMCw3ICszMCw3IEBACiAK IC8qIFRoaXMgaXMgc2V0IHRvIHRoZSBJQ1YgdmFsdWVzIG9mIGN1cnJlbnQgR1BVIGR1cmlu ZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24sCiAgICB3aGVuIHRoZSBvZmZsb2FkIGltYWdlIGNv bnRhaW5pbmcgdGhpcyBsaWJnb21wIHBvcnRpb24gaXMgbG9hZGVkLiAgKi8KLXN0YXRpYyB2 b2xhdGlsZSBzdHJ1Y3QgZ29tcF9vZmZsb2FkX2ljdnMgR09NUF9BRERJVElPTkFMX0lDVlM7 Cit2b2xhdGlsZSBzdHJ1Y3QgZ29tcF9vZmZsb2FkX2ljdnMgR09NUF9BRERJVElPTkFMX0lD VlM7CiAKIHZvaWQKIG9tcF9zZXRfZGVmYXVsdF9kZXZpY2UgKGludCBkZXZpY2VfbnVtIF9f YXR0cmlidXRlX18oKHVudXNlZCkpKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC9jb25maWcvbnZw dHgvbGliZ29tcC1udnB0eC5oIGIvbGliZ29tcC9jb25maWcvbnZwdHgvbGliZ29tcC1udnB0 eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZDFiMjcKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJnb21wL2NvbmZpZy9udnB0eC9saWJnb21wLW52cHR4LmgKQEAg LTAsMCArMSw1MiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjIgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBUb2JpYXMgQnVybnVzIDx0 b2JpYXNAY29kZXNvdXJjZXJ5LmNvbT4uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo ZSBHTlUgT2ZmbG9hZGluZyBhbmQgTXVsdGkgUHJvY2Vzc2luZyBMaWJyYXJ5CisgICAobGli Z29tcCkuCisKKyAgIExpYmdvbXAgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9w dGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBMaWJnb21wIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFO WQorICAgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUworICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgIG1vcmUgZGV0 YWlscy4KKworICAgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUg Z3JhbnRlZCBhZGRpdGlvbmFsCisgICBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdD QyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisgICAzLjEsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhbmQKKyAgIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24g YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisgICBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFu ZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAgIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgZmlsZSBjb250YWlu cyBkZWZpbmVzIGFuZCB0eXBlIGRlZmluaXRpb25zIHNoYXJlZCBiZXR3ZWVuIHRoZQorICAg bnZwdHggdGFyZ2V0J3MgbGliZ29tcC5hIGFuZCB0aGUgcGx1Z2luLW52cHR4LmMsIGJ1dCB0 aGF0IGlzIG9ubHkKKyAgIG5lZWRlZiBmb3IgdGhpcyB0YXJnZXQuICAqLworCisjaWZuZGVm IExJQkdPTVBfTlZQVFhfSCAKKyNkZWZpbmUgTElCR09NUF9OVlBUWF9IIDEKKworI2RlZmlu ZSBHT01QX1JFVl9PRkZMT0FEX1ZBUiBfX2dvbXBfcmV2X29mZmxvYWRfdmFyCisKK3N0cnVj dCByZXZfb2ZmbG9hZCB7CisgIHVpbnQ2NF90IGZuOworICB1aW50NjRfdCBtYXBudW07Cisg IHVpbnQ2NF90IGFkZHJzOworICB1aW50NjRfdCBzaXplczsKKyAgdWludDY0X3Qga2luZHM7 CisgIGludDMyX3QgZGV2X251bTsKKyAgdWludDMyX3QgbG9jazsKK307CisKKyNpZiAoX19T SVpFT0ZfU0hPUlRfXyAhPSAyIFwKKyAgICAgfHwgX19TSVpFT0ZfU0laRV9UX18gIT0gOCBc CisgICAgIHx8IF9fU0laRU9GX1BPSU5URVJfXyAhPSA4KQorI2Vycm9yICJEYXRhLXR5cGUg Y29udmVyc2lvbiByZXF1aXJlZCBmb3IgcmV2X29mZmxvYWQiCisjZW5kaWYKKworI2VuZGlm ICAvKiBMSUJHT01QX05WUFRYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbGliZ29tcC9jb25maWcv bnZwdHgvdGFyZ2V0LmMgYi9saWJnb21wL2NvbmZpZy9udnB0eC90YXJnZXQuYwppbmRleCAx MTEwOGQyLi43Zjg0Y2RjIDEwMDY0NAotLS0gYS9saWJnb21wL2NvbmZpZy9udnB0eC90YXJn ZXQuYworKysgYi9saWJnb21wL2NvbmZpZy9udnB0eC90YXJnZXQuYwpAQCAtMjQsOSArMjQs MTIgQEAKICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNs dWRlICJsaWJnb21wLmgiCisjaW5jbHVkZSAibGliZ29tcC1udnB0eC5oIiAgLyogRm9yIHN0 cnVjdCByZXZfb2ZmbG9hZCArIEdPTVBfUkVWX09GRkxPQURfVkFSLiAqLwogI2luY2x1ZGUg PGxpbWl0cy5oPgogCiBleHRlcm4gaW50IF9fZ29tcF90ZWFtX251bSBfX2F0dHJpYnV0ZV9f KChzaGFyZWQpKTsKK2V4dGVybiB2b2xhdGlsZSBzdHJ1Y3QgZ29tcF9vZmZsb2FkX2ljdnMg R09NUF9BRERJVElPTkFMX0lDVlM7Cit2b2xhdGlsZSBzdHJ1Y3QgcmV2X29mZmxvYWQgKkdP TVBfUkVWX09GRkxPQURfVkFSOwogCiBib29sCiBHT01QX3RlYW1zNCAodW5zaWduZWQgaW50 IG51bV90ZWFtc19sb3dlciwgdW5zaWduZWQgaW50IG51bV90ZWFtc191cHBlciwKQEAgLTg4 LDE2ICs5MSwzMSBAQCBHT01QX3RhcmdldF9leHQgKGludCBkZXZpY2UsIHZvaWQgKCpmbikg KHZvaWQgKiksIHNpemVfdCBtYXBudW0sCiAJCSB2b2lkICoqaG9zdGFkZHJzLCBzaXplX3Qg KnNpemVzLCB1bnNpZ25lZCBzaG9ydCAqa2luZHMsCiAJCSB1bnNpZ25lZCBpbnQgZmxhZ3Ms IHZvaWQgKipkZXBlbmQsIHZvaWQgKiphcmdzKQogewotICAodm9pZCkgZGV2aWNlOwotICAo dm9pZCkgZm47Ci0gICh2b2lkKSBtYXBudW07Ci0gICh2b2lkKSBob3N0YWRkcnM7Ci0gICh2 b2lkKSBzaXplczsKLSAgKHZvaWQpIGtpbmRzOwogICAodm9pZCkgZmxhZ3M7CiAgICh2b2lk KSBkZXBlbmQ7CiAgICh2b2lkKSBhcmdzOwotICBfX2J1aWx0aW5fdW5yZWFjaGFibGUgKCk7 CisKKyAgaWYgKGRldmljZSAhPSBHT01QX0RFVklDRV9IT1NUX0ZBTExCQUNLCisgICAgICB8 fCBmbiA9PSBOVUxMCisgICAgICB8fCBHT01QX1JFVl9PRkZMT0FEX1ZBUiA9PSBOVUxMKQor ICAgIHJldHVybjsKKworICB3aGlsZSAoX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0ICgmR09N UF9SRVZfT0ZGTE9BRF9WQVItPmxvY2ssICh1aW50OF90KSAxKSkKKyAgICA7ICAvKiBzcGlu ICAqLworCisgIEdPTVBfUkVWX09GRkxPQURfVkFSLT5tYXBudW0gPSBtYXBudW07CisgIEdP TVBfUkVWX09GRkxPQURfVkFSLT5hZGRycyA9ICh1aW50NjRfdCkgaG9zdGFkZHJzOworICBH T01QX1JFVl9PRkZMT0FEX1ZBUi0+c2l6ZXMgPSAodWludDY0X3QpIHNpemVzOworICBHT01Q X1JFVl9PRkZMT0FEX1ZBUi0+a2luZHMgPSAodWludDY0X3QpIGtpbmRzOworICBHT01QX1JF Vl9PRkZMT0FEX1ZBUi0+ZGV2X251bSA9IEdPTVBfQURESVRJT05BTF9JQ1ZTLmRldmljZV9u dW07CisKKyAgLyogJ2ZuJyBtdXN0IGJlIGxhc3QuICAqLworICBfX2F0b21pY19zdG9yZV9u ICgmR09NUF9SRVZfT0ZGTE9BRF9WQVItPmZuLCBmbiwgX19BVE9NSUNfUkVMRUFTRSk7CisK KyAgLyogUHJvY2Vzc2VkIG9uIHRoZSBob3N0IC0gd2hlbiBkb25lLCBmbiBpcyBzZXQgdG8g TlVMTC4gICovCisgIHdoaWxlIChfX2F0b21pY19sb2FkX24gKCZHT01QX1JFVl9PRkZMT0FE X1ZBUi0+Zm4sIF9fQVRPTUlDX1NFUV9DU1QpICE9IDApCisgICAgOyAgLyogc3BpbiAgKi8K KyAgX19zeW5jX2xvY2tfcmVsZWFzZSAoJkdPTVBfUkVWX09GRkxPQURfVkFSLT5sb2NrKTsK IH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvbGliZ29tcC9saWJnb21wLXBsdWdpbi5jIGIvbGli Z29tcC9saWJnb21wLXBsdWdpbi5jCmluZGV4IDlkNGNjNjIuLjMxNmRlNzQgMTAwNjQ0Ci0t LSBhL2xpYmdvbXAvbGliZ29tcC1wbHVnaW4uYworKysgYi9saWJnb21wL2xpYmdvbXAtcGx1 Z2luLmMKQEAgLTc4LDMgKzc4LDE1IEBAIEdPTVBfUExVR0lOX2ZhdGFsIChjb25zdCBjaGFy ICptc2csIC4uLikKICAgZ29tcF92ZmF0YWwgKG1zZywgYXApOwogICB2YV9lbmQgKGFwKTsK IH0KKwordm9pZAorR09NUF9QTFVHSU5fdGFyZ2V0X3JldiAodWludDY0X3QgZm5fcHRyLCB1 aW50NjRfdCBtYXBudW0sIHVpbnQ2NF90IGRldmFkZHJzX3B0ciwKKwkJCXVpbnQ2NF90IHNp emVzX3B0ciwgdWludDY0X3Qga2luZHNfcHRyLCBpbnQgZGV2X251bSwKKwkJCXZvaWQgKCpk ZXZfdG9faG9zdF9jcHkpICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorCQkJCQkJ IHZvaWQgKiksCisJCQl2b2lkICgqaG9zdF90b19kZXZfY3B5KSAodm9pZCAqLCBjb25zdCB2 b2lkICosIHNpemVfdCwKKwkJCQkJCSB2b2lkICopLCB2b2lkICp0b2tlbikKK3sKKyAgZ29t cF90YXJnZXRfcmV2IChmbl9wdHIsIG1hcG51bSwgZGV2YWRkcnNfcHRyLCBzaXplc19wdHIs IGtpbmRzX3B0ciwgZGV2X251bSwKKwkJICAgZGV2X3RvX2hvc3RfY3B5LCBob3N0X3RvX2Rl dl9jcHksIHRva2VuKTsKK30KZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGliZ29tcC1wbHVnaW4u aCBiL2xpYmdvbXAvbGliZ29tcC1wbHVnaW4uaAppbmRleCA2YWI1YWM2Li44NzVmOTY3IDEw MDY0NAotLS0gYS9saWJnb21wL2xpYmdvbXAtcGx1Z2luLmgKKysrIGIvbGliZ29tcC9saWJn b21wLXBsdWdpbi5oCkBAIC0xMjEsNiArMTIxLDEzIEBAIGV4dGVybiB2b2lkIEdPTVBfUExV R0lOX2Vycm9yIChjb25zdCBjaGFyICosIC4uLikKIGV4dGVybiB2b2lkIEdPTVBfUExVR0lO X2ZhdGFsIChjb25zdCBjaGFyICosIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4s IGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogCitleHRlcm4gdm9pZCBHT01QX1BMVUdJTl90 YXJnZXRfcmV2ICh1aW50NjRfdCwgdWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwKKwkJ CQkgICAgdWludDY0X3QsIGludCwKKwkJCQkgICAgdm9pZCAoKikgKHZvaWQgKiwgY29uc3Qg dm9pZCAqLCBzaXplX3QsCisJCQkJCSAgICAgIHZvaWQgKiksCisJCQkJICAgIHZvaWQgKCop ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorCQkJCQkgICAgICB2b2lkICopLCB2 b2lkICopOworCiAvKiBQcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgYnkg bGliZ29tcCBwbHVnaW5zLiAgKi8KIGV4dGVybiBjb25zdCBjaGFyICpHT01QX09GRkxPQURf Z2V0X25hbWUgKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBHT01QX09GRkxPQURfZ2V0 X2NhcHMgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvbGliZ29tcC9saWJnb21wLmggYi9saWJnb21w L2xpYmdvbXAuaAppbmRleCA3NTE5Mjc0Li41ODAzNjgzIDEwMDY0NAotLS0gYS9saWJnb21w L2xpYmdvbXAuaAorKysgYi9saWJnb21wL2xpYmdvbXAuaApAQCAtMTEyOCw2ICsxMTI4LDEx IEBAIGV4dGVybiBpbnQgZ29tcF9wYXVzZV9ob3N0ICh2b2lkKTsKIGV4dGVybiB2b2lkIGdv bXBfaW5pdF90YXJnZXRzX29uY2UgKHZvaWQpOwogZXh0ZXJuIGludCBnb21wX2dldF9udW1f ZGV2aWNlcyAodm9pZCk7CiBleHRlcm4gYm9vbCBnb21wX3RhcmdldF90YXNrX2ZuICh2b2lk ICopOworZXh0ZXJuIHZvaWQgZ29tcF90YXJnZXRfcmV2ICh1aW50NjRfdCwgdWludDY0X3Qs IHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QsCisJCQkgICAgIGludCwKKwkJCSAgICAg dm9pZCAoKikgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHZvaWQgKiksCisJCQkg ICAgIHZvaWQgKCopICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCB2b2lkICopLAor CQkJICAgICB2b2lkICopOwogCiAvKiBTcGxheSB0cmVlIGRlZmluaXRpb25zLiAgKi8KIHR5 cGVkZWYgc3RydWN0IHNwbGF5X3RyZWVfbm9kZV9zICpzcGxheV90cmVlX25vZGU7CmRpZmYg LS1naXQgYS9saWJnb21wL2xpYmdvbXAubWFwIGIvbGliZ29tcC9saWJnb21wLm1hcAppbmRl eCA0NmQ1ZjEwLi4xMmY3NmY3IDEwMDY0NAotLS0gYS9saWJnb21wL2xpYmdvbXAubWFwCisr KyBiL2xpYmdvbXAvbGliZ29tcC5tYXAKQEAgLTYyMiwzICs2MjIsOCBAQCBHT01QX1BMVUdJ Tl8xLjMgewogCUdPTVBfUExVR0lOX2dvYWNjX3Byb2ZpbGluZ19kaXNwYXRjaDsKIAlHT01Q X1BMVUdJTl9nb2FjY190aHJlYWQ7CiB9IEdPTVBfUExVR0lOXzEuMjsKKworR09NUF9QTFVH SU5fMS40IHsKKyAgZ2xvYmFsOgorCUdPTVBfUExVR0lOX3RhcmdldF9yZXY7Cit9IEdPTVBf UExVR0lOXzEuMzsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvcGx1Z2luL2N1ZGEtbGliLmRlZiBi L2xpYmdvbXAvcGx1Z2luL2N1ZGEtbGliLmRlZgppbmRleCBjZDkxYjM5Li5kZmY0MmQ2IDEw MDY0NAotLS0gYS9saWJnb21wL3BsdWdpbi9jdWRhLWxpYi5kZWYKKysrIGIvbGliZ29tcC9w bHVnaW4vY3VkYS1saWIuZGVmCkBAIC0yOSw2ICsyOSw3IEBAIENVREFfT05FX0NBTExfTUFZ QkVfTlVMTCAoY3VMaW5rQ3JlYXRlX3YyKQogQ1VEQV9PTkVfQ0FMTCAoY3VMaW5rRGVzdHJv eSkKIENVREFfT05FX0NBTEwgKGN1TWVtQWxsb2MpCiBDVURBX09ORV9DQUxMIChjdU1lbUFs bG9jSG9zdCkKK0NVREFfT05FX0NBTEwgKGN1TWVtSG9zdEFsbG9jKQogQ1VEQV9PTkVfQ0FM TCAoY3VNZW1jcHkpCiBDVURBX09ORV9DQUxMIChjdU1lbWNweUR0b0RBc3luYykKIENVREFf T05FX0NBTEwgKGN1TWVtY3B5RHRvSCkKZGlmZiAtLWdpdCBhL2xpYmdvbXAvcGx1Z2luL3Bs dWdpbi1udnB0eC5jIGIvbGliZ29tcC9wbHVnaW4vcGx1Z2luLW52cHR4LmMKaW5kZXggYmE2 YjIyOS4uNDNiMzRkZiAxMDA2NDQKLS0tIGEvbGliZ29tcC9wbHVnaW4vcGx1Z2luLW52cHR4 LmMKKysrIGIvbGliZ29tcC9wbHVnaW4vcGx1Z2luLW52cHR4LmMKQEAgLTQwLDYgKzQwLDkg QEAKICNpbmNsdWRlICJnb21wLWNvbnN0YW50cy5oIgogI2luY2x1ZGUgIm9hY2MtaW50Lmgi CiAKKy8qIEZvciBzdHJ1Y3QgcmV2X29mZmxvYWQgKyBHT01QX1JFVl9PRkZMT0FEX1ZBUi4g Ki8KKyNpbmNsdWRlICJjb25maWcvbnZwdHgvbGliZ29tcC1udnB0eC5oIgorCiAjaW5jbHVk ZSA8cHRocmVhZC5oPgogI2lmbmRlZiBQTFVHSU5fTlZQVFhfSU5DTFVERV9TWVNURU1fQ1VE QV9ICiAjIGluY2x1ZGUgImN1ZGEvY3VkYS5oIgpAQCAtMzI5LDYgKzMzMiw3IEBAIHN0cnVj dCBwdHhfZGV2aWNlCiAgICAgICBwdGhyZWFkX211dGV4X3QgbG9jazsKICAgICB9IG9tcF9z dGFja3M7CiAKKyAgc3RydWN0IHJldl9vZmZsb2FkICpyZXZfZGF0YTsKICAgc3RydWN0IHB0 eF9kZXZpY2UgKm5leHQ7CiB9OwogCkBAIC00MjMsNyArNDI3LDcgQEAgbnZwdHhfb3Blbl9k ZXZpY2UgKGludCBuKQogICBzdHJ1Y3QgcHR4X2RldmljZSAqcHR4X2RldjsKICAgQ1VkZXZp Y2UgZGV2LCBjdHhfZGV2OwogICBDVXJlc3VsdCByOwotICBpbnQgYXN5bmNfZW5naW5lcywg cGk7CisgIGludCBwaTsKIAogICBDVURBX0NBTExfRVJFVCAoTlVMTCwgY3VEZXZpY2VHZXQs ICZkZXYsIG4pOwogCkBAIC01MTksMTAgKzUyMywyMCBAQCBudnB0eF9vcGVuX2RldmljZSAo aW50IG4pCiAJCSAgQ1VfREVWSUNFX0FUVFJJQlVURV9NQVhfVEhSRUFEU19QRVJfTVVMVElQ Uk9DRVNTT1IsIGRldik7CiAgIHB0eF9kZXYtPm1heF90aHJlYWRzX3Blcl9tdWx0aXByb2Nl c3NvciA9IHBpOwogCisjaWYgMAorICBpbnQgYXN5bmNfZW5naW5lczsKICAgciA9IENVREFf Q0FMTF9OT0NIRUNLIChjdURldmljZUdldEF0dHJpYnV0ZSwgJmFzeW5jX2VuZ2luZXMsCiAJ CQkgQ1VfREVWSUNFX0FUVFJJQlVURV9BU1lOQ19FTkdJTkVfQ09VTlQsIGRldik7CiAgIGlm IChyICE9IENVREFfU1VDQ0VTUykKICAgICBhc3luY19lbmdpbmVzID0gMTsKKyNlbmRpZgor CisgIC8qIFJlcXVpcmVkIGJlbG93IGZvciByZXZlcnNlIG9mZmxvYWQgYXMgaW1wbGVtZW50 ZWQsIGJ1dCB3aXRoIGNvbXB1dGUKKyAgICAgY2FwYWJpbGl0eSA+PSAyLjAgYW5kIDY0Yml0 IGRldmljZSBwcm9jZXNzZXMsIHRoaXMgc2hvdWxkIGJlIHVuaXZlcnNhbGx5IGJlCisgICAg IHRoZSBjYXNlOyBoZW5jZSwgYW4gYXNzZXJ0LiAgKi8KKyAgciA9IENVREFfQ0FMTF9OT0NI RUNLIChjdURldmljZUdldEF0dHJpYnV0ZSwgJnBpLAorCQkJIENVX0RFVklDRV9BVFRSSUJV VEVfVU5JRklFRF9BRERSRVNTSU5HLCBkZXYpOworICBhc3NlcnQgKHIgPT0gQ1VEQV9TVUND RVNTICYmIHBpKTsKIAogICBmb3IgKGludCBpID0gMDsgaSAhPSBHT01QX0RJTV9NQVg7IGkr KykKICAgICBwdHhfZGV2LT5kZWZhdWx0X2RpbXNbaV0gPSAwOwpAQCAtMTE3OSw4ICsxMTkz LDEwIEBAIEdPTVBfT0ZGTE9BRF9nZXRfbnVtX2RldmljZXMgKHVuc2lnbmVkIGludCBvbXBf cmVxdWlyZXNfbWFzaykKIHsKICAgaW50IG51bV9kZXZpY2VzID0gbnZwdHhfZ2V0X251bV9k ZXZpY2VzICgpOwogICAvKiBSZXR1cm4gLTEgaWYgbm8gb21wX3JlcXVpcmVzX21hc2sgY2Fu bm90IGJlIGZ1bGZpbGxlZCBidXQKLSAgICAgZGV2aWNlcyB3ZXJlIHByZXNlbnQuICAqLwot ICBpZiAobnVtX2RldmljZXMgPiAwICYmIG9tcF9yZXF1aXJlc19tYXNrICE9IDApCisgICAg IGRldmljZXMgd2VyZSBwcmVzZW50LiBVbmlmaWVkLXNoYXJlZCBhZGRyZXNzOiBzZWUgY29t bWVudCBpbgorICAgICBudnB0eF9vcGVuX2RldmljZSBmb3IgQ1VfREVWSUNFX0FUVFJJQlVU RV9VTklGSUVEX0FERFJFU1NJTkcuICAqLworICBpZiAobnVtX2RldmljZXMgPiAwCisgICAg ICAmJiAob21wX3JlcXVpcmVzX21hc2sgJiB+R09NUF9SRVFVSVJFU19VTklGSUVEX0FERFJF U1MpICE9IDApCiAgICAgcmV0dXJuIC0xOwogICByZXR1cm4gbnVtX2RldmljZXM7CiB9CkBA IC0xMzgwLDcgKzEzOTYsNyBAQCBHT01QX09GRkxPQURfbG9hZF9pbWFnZSAoaW50IG9yZCwg dW5zaWduZWQgdmVyc2lvbiwgY29uc3Qgdm9pZCAqdGFyZ2V0X2RhdGEsCiAgIGVsc2UgaWYg KHJldl9mbl90YWJsZSkKICAgICB7CiAgICAgICBDVWRldmljZXB0ciB2YXI7Ci0gICAgICBz aXplX3QgYnl0ZXM7CisgICAgICBzaXplX3QgYnl0ZXMsIGk7CiAgICAgICByID0gQ1VEQV9D QUxMX05PQ0hFQ0sgKGN1TW9kdWxlR2V0R2xvYmFsLCAmdmFyLCAmYnl0ZXMsIG1vZHVsZSwK IAkJCSAgICAgIiRvZmZsb2FkX2Z1bmNfdGFibGUiKTsKICAgICAgIGlmIChyICE9IENVREFf U1VDQ0VTUykKQEAgLTEzOTAsNiArMTQwNiwzNyBAQCBHT01QX09GRkxPQURfbG9hZF9pbWFn ZSAoaW50IG9yZCwgdW5zaWduZWQgdmVyc2lvbiwgY29uc3Qgdm9pZCAqdGFyZ2V0X2RhdGEs CiAgICAgICByID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1TWVtY3B5RHRvSCwgKnJldl9mbl90 YWJsZSwgdmFyLCBieXRlcyk7CiAgICAgICBpZiAociAhPSBDVURBX1NVQ0NFU1MpCiAJR09N UF9QTFVHSU5fZmF0YWwgKCJjdU1lbWNweUR0b0ggZXJyb3I6ICVzIiwgY3VkYV9lcnJvciAo cikpOworICAgICAgLyogRnJlZSBpZiBvbmx5IE5VTEwgZW50cmllcy4gICovCisgICAgICBm b3IgKGkgPSAwOyBpIDwgZm5fZW50cmllczsgKytpKQorCWlmICgoKnJldl9mbl90YWJsZSlb aV0gIT0gMCkKKwkgIGJyZWFrOworICAgICAgaWYgKGkgPT0gZm5fZW50cmllcykKKwl7CisJ ICBmcmVlICgqcmV2X2ZuX3RhYmxlKTsKKwkgICpyZXZfZm5fdGFibGUgPSBOVUxMOworCX0K KyAgICB9CisKKyAgaWYgKHJldl9mbl90YWJsZSAmJiAqcmV2X2ZuX3RhYmxlICYmIGRldi0+ cmV2X2RhdGEgPT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBjdU1lbUhvc3RBbGxvYyBtZW1v cnkgaXMgYWNjZXNzaWJsZSBvbiB0aGUgZGV2aWNlLCBpZiB1bmlmaWVkLXNoYXJlZAorCSBh ZGRyZXNzIGlzIHN1cHBvcnRlZDsgdGhpcyBpcyBhc3N1bWVkIC0gc2VlIGNvbW1lbnQgaW4K KwkgbnZwdHhfb3Blbl9kZXZpY2UgZm9yIENVX0RFVklDRV9BVFRSSUJVVEVfVU5JRklFRF9B RERSRVNTSU5HLiAgICovCisgICAgICBDVURBX0NBTExfQVNTRVJUIChjdU1lbUhvc3RBbGxv YywgKHZvaWQgKiopICZkZXYtPnJldl9kYXRhLAorCQkJc2l6ZW9mICgqZGV2LT5yZXZfZGF0 YSksIENVX01FTUhPU1RBTExPQ19ERVZJQ0VNQVApOworICAgICAgQ1VkZXZpY2VwdHIgZHAg PSAoQ1VkZXZpY2VwdHIpIGRldi0+cmV2X2RhdGE7CisgICAgICBDVWRldmljZXB0ciBkZXZp Y2VfcmV2X29mZmxvYWRfdmFyOworICAgICAgc2l6ZV90IGRldmljZV9yZXZfb2ZmbG9hZF9z aXplOworICAgICAgQ1VyZXN1bHQgciA9IENVREFfQ0FMTF9OT0NIRUNLIChjdU1vZHVsZUdl dEdsb2JhbCwKKwkJCQkgICAgICAmZGV2aWNlX3Jldl9vZmZsb2FkX3ZhciwKKwkJCQkgICAg ICAmZGV2aWNlX3Jldl9vZmZsb2FkX3NpemUsIG1vZHVsZSwKKwkJCQkgICAgICBYU1RSSU5H IChHT01QX1JFVl9PRkZMT0FEX1ZBUikpOworICAgICAgaWYgKHIgIT0gQ1VEQV9TVUNDRVNT KQorCUdPTVBfUExVR0lOX2ZhdGFsICgiY3VNb2R1bGVHZXRHbG9iYWwgZXJyb3IgLSBHT01Q X1JFVl9PRkZMT0FEX1ZBUjogJXMiLCBjdWRhX2Vycm9yIChyKSk7CisgICAgICByID0gQ1VE QV9DQUxMX05PQ0hFQ0sgKGN1TWVtY3B5SHRvRCwgZGV2aWNlX3Jldl9vZmZsb2FkX3Zhciwg JmRwLAorCQkJICAgICBzaXplb2YgKGRwKSk7CisgICAgICBpZiAociAhPSBDVURBX1NVQ0NF U1MpCisJR09NUF9QTFVHSU5fZmF0YWwgKCJjdU1lbWNweUh0b0QgZXJyb3I6ICVzIiwgY3Vk YV9lcnJvciAocikpOwogICAgIH0KIAogICBudnB0eF9zZXRfY2xvY2t0aWNrIChtb2R1bGUs IGRldik7CkBAIC0yMDAxLDYgKzIwNDgsMjMgQEAgbnZwdHhfc3RhY2tzX2FjcXVpcmUgKHN0 cnVjdCBwdHhfZGV2aWNlICpwdHhfZGV2LCBzaXplX3Qgc2l6ZSwgaW50IG51bSkKICAgcmV0 dXJuICh2b2lkICopIHB0eF9kZXYtPm9tcF9zdGFja3MucHRyOwogfQogCisKK3ZvaWQKK3Jl dl9vZmZfZGV2X3RvX2hvc3RfY3B5ICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNp emVfdCBzaXplLAorCQkJIENVc3RyZWFtIHN0cmVhbSkKK3sKKyAgQ1VEQV9DQUxMX0FTU0VS VCAoY3VNZW1jcHlEdG9IQXN5bmMsIGRlc3QsIChDVWRldmljZXB0cikgc3JjLCBzaXplLCBz dHJlYW0pOworICBDVURBX0NBTExfQVNTRVJUIChjdVN0cmVhbVN5bmNocm9uaXplLCBzdHJl YW0pOworfQorCit2b2lkCityZXZfb2ZmX2hvc3RfdG9fZGV2X2NweSAodm9pZCAqZGVzdCwg Y29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSwKKwkJCSBDVXN0cmVhbSBzdHJlYW0pCit7 CisgIENVREFfQ0FMTF9BU1NFUlQgKGN1TWVtY3B5SHRvREFzeW5jLCAoQ1VkZXZpY2VwdHIp IGRlc3QsIHNyYywgc2l6ZSwgc3RyZWFtKTsKKyAgQ1VEQV9DQUxMX0FTU0VSVCAoY3VTdHJl YW1TeW5jaHJvbml6ZSwgc3RyZWFtKTsKK30KKwogdm9pZAogR09NUF9PRkZMT0FEX3J1biAo aW50IG9yZCwgdm9pZCAqdGd0X2ZuLCB2b2lkICp0Z3RfdmFycywgdm9pZCAqKmFyZ3MpCiB7 CkBAIC0yMDM1LDYgKzIwOTksOCBAQCBHT01QX09GRkxPQURfcnVuIChpbnQgb3JkLCB2b2lk ICp0Z3RfZm4sIHZvaWQgKnRndF92YXJzLCB2b2lkICoqYXJncykKICAgbnZwdHhfYWRqdXN0 X2xhdW5jaF9ib3VuZHMgKHRndF9mbiwgcHR4X2RldiwgJnRlYW1zLCAmdGhyZWFkcyk7CiAK ICAgc2l6ZV90IHN0YWNrX3NpemUgPSBudnB0eF9zdGFja3Nfc2l6ZSAoKTsKKyAgYm9vbCBy ZXZlcnNlX29mZiA9IHB0eF9kZXYtPnJldl9kYXRhICE9IE5VTEw7CisgIENVc3RyZWFtIGNv cHlfc3RyZWFtID0gTlVMTDsKIAogICBwdGhyZWFkX211dGV4X2xvY2sgKCZwdHhfZGV2LT5v bXBfc3RhY2tzLmxvY2spOwogICB2b2lkICpzdGFja3MgPSBudnB0eF9zdGFja3NfYWNxdWly ZSAocHR4X2Rldiwgc3RhY2tfc2l6ZSwgdGVhbXMgKiB0aHJlYWRzKTsKQEAgLTIwNDgsMTIg KzIxMTQsNDUgQEAgR09NUF9PRkZMT0FEX3J1biAoaW50IG9yZCwgdm9pZCAqdGd0X2ZuLCB2 b2lkICp0Z3RfdmFycywgdm9pZCAqKmFyZ3MpCiAgIEdPTVBfUExVR0lOX2RlYnVnICgwLCAi ICAlczoga2VybmVsICVzOiBsYXVuY2giCiAJCSAgICAgIiBbKHRlYW1zOiAldSksIDEsIDFd IFsobGFuZXM6IDMyKSwgKHRocmVhZHM6ICV1KSwgMV1cbiIsCiAJCSAgICAgX19GVU5DVElP Tl9fLCBmbl9uYW1lLCB0ZWFtcywgdGhyZWFkcyk7CisgIGlmIChyZXZlcnNlX29mZikKKyAg ICBDVURBX0NBTExfQVNTRVJUIChjdVN0cmVhbUNyZWF0ZSwgJmNvcHlfc3RyZWFtLCBDVV9T VFJFQU1fTk9OX0JMT0NLSU5HKTsKICAgciA9IENVREFfQ0FMTF9OT0NIRUNLIChjdUxhdW5j aEtlcm5lbCwgZnVuY3Rpb24sIHRlYW1zLCAxLCAxLAogCQkJIDMyLCB0aHJlYWRzLCAxLCAw LCBOVUxMLCBOVUxMLCBjb25maWcpOwogICBpZiAociAhPSBDVURBX1NVQ0NFU1MpCiAgICAg R09NUF9QTFVHSU5fZmF0YWwgKCJjdUxhdW5jaEtlcm5lbCBlcnJvcjogJXMiLCBjdWRhX2Vy cm9yIChyKSk7Ci0KLSAgciA9IENVREFfQ0FMTF9OT0NIRUNLIChjdUN0eFN5bmNocm9uaXpl LCApOworICBpZiAocmV2ZXJzZV9vZmYpCisgICAgd2hpbGUgKHRydWUpCisgICAgICB7CisJ ciA9IENVREFfQ0FMTF9OT0NIRUNLIChjdVN0cmVhbVF1ZXJ5LCBOVUxMKTsKKwlpZiAociA9 PSBDVURBX1NVQ0NFU1MpCisJICBicmVhazsKKwlpZiAociA9PSBDVURBX0VSUk9SX0xBVU5D SF9GQUlMRUQpCisJICBHT01QX1BMVUdJTl9mYXRhbCAoImN1U3RyZWFtUXVlcnkgZXJyb3I6 ICVzICVzXG4iLCBjdWRhX2Vycm9yIChyKSwKKwkJCSAgICAgbWF5YmVfYWJvcnRfbXNnKTsK KwllbHNlIGlmIChyICE9IENVREFfRVJST1JfTk9UX1JFQURZKQorCSAgR09NUF9QTFVHSU5f ZmF0YWwgKCJjdVN0cmVhbVF1ZXJ5IGVycm9yOiAlcyIsIGN1ZGFfZXJyb3IgKHIpKTsKKwor CWlmIChfX2F0b21pY19sb2FkX24gKCZwdHhfZGV2LT5yZXZfZGF0YS0+Zm4sIF9fQVRPTUlD X0FDUVVJUkUpICE9IDApCisJICB7CisJICAgIHN0cnVjdCByZXZfb2ZmbG9hZCAqcmV2X2Rh dGEgPSBwdHhfZGV2LT5yZXZfZGF0YTsKKwkgICAgdWludDY0X3QgZm5fcHRyID0gcmV2X2Rh dGEtPmZuOworCSAgICB1aW50NjRfdCBtYXBudW0gPSByZXZfZGF0YS0+bWFwbnVtOworCSAg ICB1aW50NjRfdCBhZGRyX3B0ciA9IHJldl9kYXRhLT5hZGRyczsKKwkgICAgdWludDY0X3Qg c2l6ZXNfcHRyID0gcmV2X2RhdGEtPnNpemVzOworCSAgICB1aW50NjRfdCBraW5kc19wdHIg PSByZXZfZGF0YS0+a2luZHM7CisJICAgIGludCBkZXZfbnVtID0gKGludCkgcmV2X2RhdGEt PmRldl9udW07CisJICAgIEdPTVBfUExVR0lOX3RhcmdldF9yZXYgKGZuX3B0ciwgbWFwbnVt LCBhZGRyX3B0ciwgc2l6ZXNfcHRyLAorCQkJCSAgICBraW5kc19wdHIsIGRldl9udW0sIHJl dl9vZmZfZGV2X3RvX2hvc3RfY3B5LAorCQkJCSAgICByZXZfb2ZmX2hvc3RfdG9fZGV2X2Nw eSwgY29weV9zdHJlYW0pOworCSAgICBDVURBX0NBTExfQVNTRVJUIChjdVN0cmVhbVN5bmNo cm9uaXplLCBjb3B5X3N0cmVhbSk7CisJICAgIF9fYXRvbWljX3N0b3JlX24gKCZyZXZfZGF0 YS0+Zm4sIDAsIF9fQVRPTUlDX1JFTEVBU0UpOworCSAgfQorCXVzbGVlcCAoMSk7CisgICAg ICB9CisgIGVsc2UKKyAgICByID0gQ1VEQV9DQUxMX05PQ0hFQ0sgKGN1Q3R4U3luY2hyb25p emUsICk7CisgIGlmIChyZXZlcnNlX29mZikKKyAgICBDVURBX0NBTExfQVNTRVJUIChjdVN0 cmVhbURlc3Ryb3ksIGNvcHlfc3RyZWFtKTsKICAgaWYgKHIgPT0gQ1VEQV9FUlJPUl9MQVVO Q0hfRkFJTEVEKQogICAgIEdPTVBfUExVR0lOX2ZhdGFsICgiY3VDdHhTeW5jaHJvbml6ZSBl cnJvcjogJXMgJXNcbiIsIGN1ZGFfZXJyb3IgKHIpLAogCQkgICAgICAgbWF5YmVfYWJvcnRf bXNnKTsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGFyZ2V0LmMgYi9saWJnb21wL3RhcmdldC5j CmluZGV4IDU3NjM0ODMuLjkzNzdkZTAgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGFyZ2V0LmMK KysrIGIvbGliZ29tcC90YXJnZXQuYwpAQCAtMjkyNSw2ICsyOTI1LDI1IEBAIEdPTVBfdGFy Z2V0X2V4dCAoaW50IGRldmljZSwgdm9pZCAoKmZuKSAodm9pZCAqKSwgc2l6ZV90IG1hcG51 bSwKICAgICBodGFiX2ZyZWUgKHJlZmNvdW50X3NldCk7CiB9CiAKKy8qIEhhbmRsZSByZXZl cnNlIG9mZmxvYWQuIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBkZXZpY2UgcGx1Z2lucyBmb3Ig YQorICAgcmV2ZXJzZSBvZmZsb2FkOyBpdCBpcyBub3QgY2FsbGVkIGlmIHRoZSBvdXRlciB0 YXJnZXQgcnVucyBvbiB0aGUgaG9zdC4gICovCisKK3ZvaWQKK2dvbXBfdGFyZ2V0X3JldiAo dWludDY0X3QgZm5fcHRyIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKwkJIHVpbnQ2NF90 IG1hcG51bSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisJCSB1aW50NjRfdCBkZXZhZGRy c19wdHIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorCQkgdWludDY0X3Qgc2l6ZXNfcHRy IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKwkJIHVpbnQ2NF90IGtpbmRzX3B0ciBfX2F0 dHJpYnV0ZV9fICgodW51c2VkKSksCisJCSBpbnQgZGV2X251bSBfX2F0dHJpYnV0ZV9fICgo dW51c2VkKSksCisJCSB2b2lkICgqZGV2X3RvX2hvc3RfY3B5KSAodm9pZCAqLCBjb25zdCB2 b2lkICosIHNpemVfdCwKKwkJCQkJICB2b2lkICopIF9fYXR0cmlidXRlX18gKCh1bnVzZWQp KSwKKwkJIHZvaWQgKCpob3N0X3RvX2Rldl9jcHkpICh2b2lkICosIGNvbnN0IHZvaWQgKiwg c2l6ZV90LAorCQkJCQkgIHZvaWQgKikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorCQkg dm9pZCAqdG9rZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQoreworICBfX2J1aWx0aW5f dW5yZWFjaGFibGUgKCk7Cit9CisKIC8qIEhvc3QgZmFsbGJhY2sgZm9yIEdPTVBfdGFyZ2V0 X2RhdGF7LF9leHR9IHJvdXRpbmVzLiAgKi8KIAogc3RhdGljIHZvaWQK --------------yhGMcLFgryjLyV0PhuF1Pi0E--