From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 4E1453857400 for ; Wed, 8 Mar 2023 16:27:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4E1453857400 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7F30F1063; Wed, 8 Mar 2023 08:27:45 -0800 (PST) Received: from [10.57.79.24] (unknown [10.57.79.24]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 297FA3F71A; Wed, 8 Mar 2023 08:27:01 -0800 (PST) Content-Type: multipart/mixed; boundary="------------i0Hu0hcGnpgDpgBfex9fs6lf" Message-ID: Date: Wed, 8 Mar 2023 16:26:59 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: [RFC 5/X] omp: Create simd clones from 'omp declare variant's Content-Language: en-US To: "gcc-patches@gcc.gnu.org" Cc: "jakub@redhat.com" , Richard Sandiford , Richard Biener References: From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-15.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,KAM_SHORT,SPF_HELO_NONE,SPF_NONE,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: This is a multi-part message in MIME format. --------------i0Hu0hcGnpgDpgBfex9fs6lf Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, This RFC extends the omp-simd-clone pass to create simd clones for functions with 'omp declare variant' pragmas that contain simd constructs. This patch also implements AArch64's use for this functionality. This requires two extra pieces of information be kept for each simd-clone, a 'variant_name' since each variant has to be named upon declaration, and a 'device' since a omp variant has the capability of having device clauses that can 'select' the device the variant is meant to be used with. For the latter I decided to currently implement it as an 'int', to keep a 'code' per device which is target dependent. Though we may want to expand this in the future to contain a target dependent 'target selector' of sorts. This would enable the implementation of the 'arch' device clause we describe in the BETA ABI can be found in the vfabia64 subdir of https://github.com/ARM-software/abi-aa/, this patch only implements support for the two 'isa' device clauses isa("simd") and isa("sve"). I'll create a ChangeLog when I turn this into a PATCH if we agree on this direction. --------------i0Hu0hcGnpgDpgBfex9fs6lf Content-Type: text/plain; charset=UTF-8; name="libmvec_5.patch" Content-Disposition: attachment; filename="libmvec_5.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jZ3JhcGguaCBiL2djYy9jZ3JhcGguaAppbmRleCBiNWZjNzM5 ZjFiMDYwMmE4NzEwNDAyOTJhNWJiMWQ2OWE5ZWYzMDVmLi5hZTFhZjY1YTliNTkxM2VjNDM1 ZTc4MzIyM2U3OTc2N2RkZDY4MzQxIDEwMDY0NAotLS0gYS9nY2MvY2dyYXBoLmgKKysrIGIv Z2NjL2NncmFwaC5oCkBAIC04MTAsNiArODEwLDE0IEBAIHN0cnVjdCBHVFkoKCkpIGNncmFw aF9zaW1kX2Nsb25lIHsKICAgLyogT3JpZ2luYWwgY2dyYXBoIG5vZGUgdGhlIFNJTUQgY2xv bmVzIHdlcmUgY3JlYXRlZCBmb3IuICAqLwogICBjZ3JhcGhfbm9kZSAqb3JpZ2luOwogCisg IC8qIFRoaXMgaXMgYSBmbGFnIHRvIGluZGljYXRlIHdoYXQgZGV2aWNlIHdhcyBzZWxlY3Rl ZCBmb3IgdGhlIHZhcmlhbnQKKyAgICAgY2xvbmUuICBBbHdheXMgMCBmb3IgJ29tcCBkZWNs YXJlIHNpbWQnIGNsb25lcy4gICovCisgIHVuc2lnbmVkIGRldmljZTsKKworICAvKiBUaGUg aWRlbnRpZmllciBmb3IgdGhlIG5hbWUgb2YgdGhlIHZhcmlhbnQgaW4gY2FzZSBvZiBhIGRl Y2xhcmUgdmFyaWFudAorICAgICBjbG9uZSwgdGhpcyBpcyBOVUxMX1RSRUUgZm9yIGRlY2xh cmUgc2ltZCBjbG9uZXMuICAqLworICB0cmVlIHZhcmlhbnRfbmFtZTsKKwogICAvKiBBbm5v dGF0ZWQgZnVuY3Rpb24gYXJndW1lbnRzIGZvciB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uICAq LwogICBjZ3JhcGhfc2ltZF9jbG9uZV9hcmcgR1RZKChsZW5ndGggKCIlaC5uYXJncyIpKSkg YXJnc1sxXTsKIH07CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5j YyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmNjCmluZGV4IGVmOTNhNGU5ZDQzNzk5 ZGY0NDEwZjE1MmNkZDc5OGRiMjg1ZTg4OTcuLjM0NGM2MDAxZmRkNjQ2YTMxMzI2ZjVkZWI4 ZmY5NDg3M2QzNDZlZDEgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0 LmNjCisrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmNjCkBAIC0yNjk3MCwxNSAr MjY5NzAsMjggQEAgYWFyY2g2NF9zaW1kX2Nsb25lX2NvbXB1dGVfdmVjc2l6ZV9hbmRfc2lt ZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLAogCiAgIGNsb25laS0+bWFza19tb2Rl ID0gVk9JRG1vZGU7CiAgIGVsdF9iaXRzID0gR0VUX01PREVfQklUU0laRSAoU0NBTEFSX1RZ UEVfTU9ERSAoYmFzZV90eXBlKSk7CisgIC8qIEEgc2ltZGNsb25lIHdpdGhvdXQgc2ltZGxl biBjYW4gbGVnYWxseSBvcmlnaW5hdGUgZnJvbSBlaXRoZXIgYToKKyAgICAgJ29tcCBkZWNs YXJlIHNpbWQnOgorCUluIHRoaXMgY2FzZSBnZW5lcmF0ZSBhdCBsZWFzdCAzIHNpbWQgY2xv bmVzLCBvbmUgZm9yIEFkdmFuY2VkIFNJTUQKKwk2NC1iaXQgdmVjdG9ycywgb25lIGZvciBB ZHZhbmNlZCBTSU1EIDEyOC1iaXQgdmVjdG9ycyBhbmQgb25lIGZvciBTVkUKKwl2ZWN0b3Ig bGVuZ3RoIGFnbm9zdGljIHZlY3RvcnMuCisgICAgICAnb21wIGRlY2xhcmUgdmFyaWFudCc6 CisJSW4gdGhpcyBjYXNlIHdlIG11c3QgYmUgZ2VuZXJhdGluZyBhIHNpbWQgY2xvbmUgZm9y IFNWRSB2ZWN0b3IgbGVuZ3RoCisJYWdub3N0aWMgdmVjdG9ycy4KKyAgICovCiAgIGlmIChr bm93bl9lcSAoY2xvbmVpLT5zaW1kbGVuLCAwVSkpCiAgICAgewotICAgICAgaWYgKG51bSA+ PSAyKQorICAgICAgaWYgKGNsb25laS0+ZGV2aWNlID09IDIgfHwgbnVtID49IDIpCiAJewor CSAgY291bnQgPSAxOwogCSAgdmVjX2JpdHMgPSBwb2x5X3VpbnQ2NCAoMTI4LCAxMjgpOwog CSAgY2xvbmVpLT5zaW1kbGVuID0gZXhhY3RfZGl2ICh2ZWNfYml0cywgZWx0X2JpdHMpOwog CX0KICAgICAgIGVsc2UKIAl7CisJICBpZiAoY2xvbmVpLT5kZXZpY2UgIT0gMCkKKwkgICAg cmV0dXJuIDA7CisKIAkgIGNvdW50ID0gMzsKIAkgIHZlY19iaXRzID0gKG51bSA9PSAwID8g NjQgOiAxMjgpOwogCSAgY2xvbmVpLT5zaW1kbGVuID0gZXhhY3RfZGl2ICh2ZWNfYml0cywg ZWx0X2JpdHMpOwpAQCAtMjY5OTEsNyArMjcwMDQsMTQgQEAgYWFyY2g2NF9zaW1kX2Nsb25l X2NvbXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2Rl LAogICAgICAgLyogRm9yIG5vdywgU1ZFIHNpbWRjbG9uZXMgd29uJ3QgcHJvZHVjZSBpbGxl Z2FsIHNpbWRsZW4sIFNvIG9ubHkgY2hlY2sKIAkgY29uc3Qgc2ltZGxlbnMgaGVyZS4gICov CiAgICAgICBpZiAoY2xvbmVpLT5zaW1kbGVuLmlzX2NvbnN0YW50ICgmY29uc3Rfc2ltZGxl bikKLQkgICYmIG1heWJlX25lICh2ZWNfYml0cywgNjRVKSAmJiBtYXliZV9uZSAodmVjX2Jp dHMsIDEyOFUpKQorCSAgLyogRm9yIEFkdmFuY2VkIFNJTUQgd2UgcmVxdWlyZSBlaXRoZXIg NjQtIG9yIDEyOC1iaXQgdmVjdG9ycy4gICovCisJICAmJiAoKGNsb25laS0+ZGV2aWNlIDwg MgorCSAgICAgICAmJiBtYXliZV9uZSAodmVjX2JpdHMsIDY0VSkKKwkgICAgICAgJiYgbWF5 YmVfbmUgKHZlY19iaXRzLCAxMjhVKSkKKwkgIC8qIEZvciBTVkUgd2UgcmVxdWlyZSBtdWx0 aXBsZXMgb2YgMTI4LWJpdHMuICBUT0RPOiBzaG91bGQgd2UgY2hlY2sKKwkgICAgIGZvciBt YXggVkw/ICAqLworCSAgICAgIHx8IChjbG9uZWktPmRldmljZSA9PSAyCisJCSAgJiYgIWNv bnN0YW50X211bHRpcGxlX3AgKHZlY19iaXRzLCAxMjgpKSkpCiAJewogCSAgaWYgKGV4cGxp Y2l0X3ApCiAJICAgIHdhcm5pbmdfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChub2RlLT5k ZWNsKSwgMCwKQEAgLTI3MDAyLDcgKzI3MDIyLDcgQEAgYWFyY2g2NF9zaW1kX2Nsb25lX2Nv bXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLAog CX0KICAgICB9CiAKLSAgaWYgKG51bSA+PSAyKQorICBpZiAoY2xvbmVpLT5kZXZpY2UgPT0g MiB8fCBudW0gPj0gMikKICAgICB7CiAgICAgICBjbG9uZWktPnZlY3NpemVfbWFuZ2xlID0g J3MnOwogICAgICAgY2xvbmVpLT5pbmJyYW5jaCA9IDE7CkBAIC0yNzA4MiwyMiArMjcxMDIs MjEgQEAgYWFyY2g2NF9zaW1kX2Nsb25lX2FkanVzdF9yZXRfb3JfcGFyYW0gKHN0cnVjdCBj Z3JhcGhfbm9kZSAqbm9kZSwgdHJlZSB0eXBlLAogCWFhcmNoNjRfc3ZlX3ZnID0gcG9seV91 aW50MTYgKDIsIDIpOwogICAgICAgdW5zaWduZWQgaW50IG51bV96ciA9IDA7CiAgICAgICB1 bnNpZ25lZCBpbnQgbnVtX3ByID0gMDsKKyAgICAgIHRyZWUgYmFzZV90eXBlID0gVFJFRV9U WVBFICh0eXBlKTsKKyAgICAgIGlmIChQT0lOVEVSX1RZUEVfUCAoYmFzZV90eXBlKSkKKwli YXNlX3R5cGUgPSBwb2ludGVyX3NpemVkX2ludF9ub2RlOworICAgICAgc2NhbGFyX21vZGUg YmFzZV9tb2RlID0gYXNfYSA8c2NhbGFyX21vZGU+IChUWVBFX01PREUgKGJhc2VfdHlwZSkp OworICAgICAgbWFjaGluZV9tb2RlIHZlY19tb2RlID0gYWFyY2g2NF9mdWxsX3N2ZV9tb2Rl IChiYXNlX21vZGUpLnJlcXVpcmUgKCk7CisgICAgICB0cmVlIHZlY3R5cGUgPSBidWlsZF92 ZWN0b3JfdHlwZV9mb3JfbW9kZSAoYmFzZV90eXBlLCB2ZWNfbW9kZSk7CiAgICAgICBpZiAo aXNfbWFzaykKIAl7Ci0JICB0eXBlID0gdHJ1dGhfdHlwZV9mb3IgKHR5cGUpOwogCSAgbnVt X3ByID0gMTsKKwkgIHR5cGUgPSB0cnV0aF90eXBlX2ZvciAodmVjdHlwZSk7CiAJfQogICAg ICAgZWxzZQogCXsKIAkgIG51bV96ciA9IDE7Ci0JICB0cmVlIGJhc2VfdHlwZSA9IFRSRUVf VFlQRSAodHlwZSk7Ci0JICBpZiAoUE9JTlRFUl9UWVBFX1AgKGJhc2VfdHlwZSkpCi0JICAg IGJhc2VfdHlwZSA9IHBvaW50ZXJfc2l6ZWRfaW50X25vZGU7Ci0JICBwb2x5X2ludDY0IHZl Y19zaXplID0gdHJlZV90b19wb2x5X2ludDY0IChUWVBFX1NJWkUgKHR5cGUpKTsKLQkgIHNj YWxhcl9tb2RlIGJhc2VfbW9kZSA9IGFzX2EgPHNjYWxhcl9tb2RlPiAoVFlQRV9NT0RFIChi YXNlX3R5cGUpKTsKLQkgIG1hY2hpbmVfbW9kZSB2ZWNfbW9kZQotCSAgICA9IGFhcmNoNjRf c2ltZF9jb250YWluZXJfbW9kZSAoYmFzZV9tb2RlLCB2ZWNfc2l6ZSk7Ci0JICB0eXBlID0g YnVpbGRfdmVjdG9yX3R5cGVfZm9yX21vZGUgKGJhc2VfdHlwZSwgdmVjX21vZGUpOworCSAg dHlwZSA9IHZlY3R5cGU7CiAJfQogCiAgICAgICBhYXJjaDY0X3N2ZTo6YWRkX3N2ZV90eXBl X2F0dHJpYnV0ZSAodHlwZSwgbnVtX3pyLCBudW1fcHIsIE5VTEwsIE5VTEwpOwpAQCAtMjcy MjMsNiArMjcyNDIsMjIgQEAgYWFyY2g2NF9jYW5fdGFnX2FkZHJlc3NlcyAoKQogICByZXR1 cm4gIVRBUkdFVF9JTFAzMjsKIH0KIAoraW50CithYXJjaDY0X29tcF9kZXZpY2Vfa2luZF9h cmNoX2lzYSAoZW51bSBvbXBfZGV2aWNlX2tpbmRfYXJjaF9pc2EgdHJhaXQsCisJCQkJICBj b25zdCBjaGFyICpuYW1lKQoreworICBpZiAodHJhaXQgIT0gb21wX2RldmljZV9pc2EpCisg ICAgcmV0dXJuIGRlZmF1bHRfb21wX2RldmljZV9raW5kX2FyY2hfaXNhICh0cmFpdCwgbmFt ZSk7CisKKyAgaWYgKHN0cm5jbXAgKG5hbWUsICJzaW1kIiwgc3RybGVuICgic2ltZCIpKSA9 PSAwKQorICAgIHJldHVybiAxOworICBpZiAoc3RybmNtcCAobmFtZSwgInN2ZSIsIHN0cmxl biAoInN2ZSIpKSA9PSAwCisgICAgICAmJiBUQVJHRVRfU1ZFKQorICAgIHJldHVybiAyOwor CisgIHJldHVybiAwOworfQorCiAvKiBJbXBsZW1lbnQgVEFSR0VUX0FTTV9GSUxFX0VORCBm b3IgQUFyY2g2NC4gIFRoaXMgYWRkcyB0aGUgQUFyY2g2NCBHTlUgTk9URQogICAgc2VjdGlv biBhdCB0aGUgZW5kIGlmIG5lZWRlZC4gICovCiAjZGVmaW5lIEdOVV9QUk9QRVJUWV9BQVJD SDY0X0ZFQVRVUkVfMV9BTkQJMHhjMDAwMDAwMApAQCAtMjgxNDYsNiArMjgxODEsOSBAQCBh YXJjaDY0X2xpYmdjY19mbG9hdGluZ19tb2RlX3N1cHBvcnRlZF9wCiAjdW5kZWYgVEFSR0VU X01FTVRBR19DQU5fVEFHX0FERFJFU1NFUwogI2RlZmluZSBUQVJHRVRfTUVNVEFHX0NBTl9U QUdfQUREUkVTU0VTIGFhcmNoNjRfY2FuX3RhZ19hZGRyZXNzZXMKIAorI3VuZGVmIFRBUkdF VF9PTVBfREVWSUNFX0tJTkRfQVJDSF9JU0EKKyNkZWZpbmUgVEFSR0VUX09NUF9ERVZJQ0Vf S0lORF9BUkNIX0lTQSBhYXJjaDY0X29tcF9kZXZpY2Vfa2luZF9hcmNoX2lzYQorCiAjaWYg Q0hFQ0tJTkdfUAogI3VuZGVmIFRBUkdFVF9SVU5fVEFSR0VUX1NFTEZURVNUUwogI2RlZmlu ZSBUQVJHRVRfUlVOX1RBUkdFVF9TRUxGVEVTVFMgc2VsZnRlc3Q6OmFhcmNoNjRfcnVuX3Nl bGZ0ZXN0cwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL2RlY2wuY2MgYi9nY2MvY3AvZGVjbC5jYwpp bmRleCAzMGM3NDcwOTc0ZDRiNjJlYzZjMDNiMmE3ZGQzN2YwNDY5ODNhMjQ3Li4xYWE1ZjFh Nzg5OGRmOTQ4M2EyYWY0ZjZmOWZlYTk5ZTZiMjE5MjcxIDEwMDY0NAotLS0gYS9nY2MvY3Av ZGVjbC5jYworKysgYi9nY2MvY3AvZGVjbC5jYwpAQCAtNzk5OCw2ICs3OTk4LDE4IEBAIGRl Y2xfbWF5YmVfY29uc3RhbnRfZGVzdHJ1Y3Rpb24gKHRyZWUgZGVjbCwgdHJlZSB0eXBlKQog CiBzdGF0aWMgdHJlZSBkZWNsYXJlX3NpbWRfYWRqdXN0X3RoaXMgKHRyZWUgKiwgaW50ICos IHZvaWQgKik7CiAKK3RyZWUgZGVjbGFyZV92YXJpYW50X2FkanVzdF9wYXJtICh0cmVlICp0 cCwgaW50ICp3YWxrX3N1YnRyZWVzLCB2b2lkICpkYXRhKQoreworICB0cmVlICpwYXJtID0g KHRyZWUgKikgZGF0YTsKKyAgaWYgKFRSRUVfQ09ERSAoKnRwKSA9PSBGVU5DVElPTl9ERUNM KQorICAgIHsKKyAgICAgICpwYXJtID0gREVDTF9BUkdVTUVOVFMgKCp0cCk7CisgICAgICAq d2Fsa19zdWJ0cmVlcyA9IDA7CisgICAgICByZXR1cm4gTlVMTF9UUkVFOworICAgIH0KKyAg cmV0dXJuIE5VTExfVFJFRTsKK30KKwogLyogSGVscGVyIGZ1bmN0aW9uIG9mIG9tcF9kZWNs YXJlX3ZhcmlhbnRfZmluYWxpemUuICBGaW5hbGl6ZSBvbmUKICAgICJvbXAgZGVjbGFyZSB2 YXJpYW50IGJhc2UiIGF0dHJpYnV0ZS4gIFJldHVybiB0cnVlIGlmIGl0IHNob3VsZCBiZQog ICAgcmVtb3ZlZC4gICovCkBAIC04MDE1LDEzICs4MDI3LDE0IEBAIG9tcF9kZWNsYXJlX3Zh cmlhbnRfZmluYWxpemVfb25lICh0cmVlIGRlY2wsIHRyZWUgYXR0cikKIAogICB0cmVlIGN0 eCA9IFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0dHIpKTsKICAgdHJlZSBzaW1kID0gb21w X2dldF9jb250ZXh0X3NlbGVjdG9yIChjdHgsICJjb25zdHJ1Y3QiLCAic2ltZCIpOworICB0 cmVlIHBhcm0gPSBOVUxMX1RSRUU7CiAgIGlmIChzaW1kKQogICAgIHsKICAgICAgIFRSRUVf VkFMVUUgKHNpbWQpCiAJPSBjX29tcF9kZWNsYXJlX3NpbWRfY2xhdXNlc190b19udW1iZXJz IChERUNMX0FSR1VNRU5UUyAoZGVjbCksCiAJCQkJCQkgVFJFRV9WQUxVRSAoc2ltZCkpOwot ICAgICAgLyogRklYTUUsIGFkanVzdGluZyBzaW1kIGFyZ3MgdW5pbXBsZW1lbnRlZC4gICov Ci0gICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIHdhbGtfdHJlZSAoJlRSRUVfUFVSUE9TRSAo VFJFRV9WQUxVRSAoYXR0cikpLCBkZWNsYXJlX3ZhcmlhbnRfYWRqdXN0X3Bhcm0sCisJCSAm cGFybSwgTlVMTCk7CiAgICAgfQogCiAgIHRyZWUgY2hhaW4gPSBUUkVFX0NIQUlOIChUUkVF X1ZBTFVFIChhdHRyKSk7CkBAIC04MDM1LDcgKzgwNDgsOCBAQCBvbXBfZGVjbGFyZV92YXJp YW50X2ZpbmFsaXplX29uZSAodHJlZSBkZWNsLCB0cmVlIGF0dHIpCiAgIGlucHV0X2xvY2F0 aW9uID0gdmFyaWRfbG9jOwogCiAgIHJlbGVhc2luZ192ZWMgYXJnczsKLSAgdHJlZSBwYXJt ID0gREVDTF9BUkdVTUVOVFMgKGRlY2wpOworICBpZiAoIXBhcm0pCisgICAgcGFybSA9IERF Q0xfQVJHVU1FTlRTIChkZWNsKTsKICAgaWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChkZWNs KSkgPT0gTUVUSE9EX1RZUEUpCiAgICAgcGFybSA9IERFQ0xfQ0hBSU4gKHBhcm0pOwogICBm b3IgKDsgcGFybTsgcGFybSA9IERFQ0xfQ0hBSU4gKHBhcm0pKQpAQCAtODA5Niw3ICs4MTEw LDkgQEAgb21wX2RlY2xhcmVfdmFyaWFudF9maW5hbGl6ZV9vbmUgKHRyZWUgZGVjbCwgdHJl ZSBhdHRyKQogICBpZiAodmFyaWFudCkKICAgICB7CiAgICAgICBjb25zdCBjaGFyICp2YXJu YW1lID0gSURFTlRJRklFUl9QT0lOVEVSIChERUNMX05BTUUgKHZhcmlhbnQpKTsKLSAgICAg IGlmICghY29tcHR5cGVzIChUUkVFX1RZUEUgKGRlY2wpLCBUUkVFX1RZUEUgKHZhcmlhbnQp LCAwKSkKKyAgICAgIC8qIFRPRE86IFNob3VsZCB3ZSBjaGVjayB0aGF0IGlmIChzaW1kKSB0 aGUgcmV0dXJuIHZlY3RvciB0eXBlIGhhcyBhbgorCSBlbGVtZW50IHR5cGUgdGhhdCBpcyBj b21wYXRpYmxlIHRvIHRoZSBkZWNsYXJhdGlvbidzIHJldHVybiB0eXBlLiAgKi8KKyAgICAg IGlmICghc2ltZCAmJiAhY29tcHR5cGVzIChUUkVFX1RZUEUgKGRlY2wpLCBUUkVFX1RZUEUg KHZhcmlhbnQpLCAwKSkKIAl7CiAJICBlcnJvcl9hdCAodmFyaWRfbG9jLCAidmFyaWFudCAl cUQgYW5kIGJhc2UgJXFEIGhhdmUgaW5jb21wYXRpYmxlICIKIAkJCSAgICAgICAidHlwZXMi LCB2YXJpYW50LCBkZWNsKTsKZGlmZiAtLWdpdCBhL2djYy9vbXAtc2ltZC1jbG9uZS5jYyBi L2djYy9vbXAtc2ltZC1jbG9uZS5jYwppbmRleCA0ODA4NjA4YjdhMWMwNjgwMmVlMjMxNDgw YzIwMDNjZjQxYzExNzk5Li45ZTdlMWExNWNiMGMxZGRmNTllOTljNTY4ZDE2YzQ1ZmVkZTVm OGE4IDEwMDY0NAotLS0gYS9nY2Mvb21wLXNpbWQtY2xvbmUuY2MKKysrIGIvZ2NjL29tcC1z aW1kLWNsb25lLmNjCkBAIC0yOTksMzkgKzI5OSw1OCBAQCBzaW1kX2Nsb25lX3ZlY3Rvcl9v Zl9mb3JtYWxfcGFybV90eXBlcyAodmVjPHRyZWU+ICphcmdzLCB0cmVlIGZuZGVjbCkKICAg ICAoKmFyZ3MpW2ldID0gVFJFRV9UWVBFICgoKmFyZ3MpW2ldKTsKIH0KIAorc3RhdGljIHRy ZWUKK2ZpbmRfdmFyaWFudF9jbGF1c2VzICh0cmVlIGF0dHIsIHRyZWUgKmZuX2RlY2wsIHRy ZWUgKmRldmljZV9jbGF1c2VzKQoreworICBpZiAoIWF0dHIpCisgICAgcmV0dXJuIE5VTExf VFJFRTsKKworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKGF0dHIpID09IFRSRUVfTElTVCk7 CisKKyAgKmZuX2RlY2wgPSBUUkVFX1BVUlBPU0UgKGF0dHIpOworCisgIHRyZWUgY2xhdXNl cyA9IFRSRUVfVkFMVUUgKGF0dHIpOworICB0cmVlIHNpbWRfY2xhdXNlID0gTlVMTF9UUkVF OworCisgIHdoaWxlIChjbGF1c2VzKQorICAgIHsKKyAgICAgIHRyZWUgaWRlbnRpZmllciA9 IFRSRUVfUFVSUE9TRSAoY2xhdXNlcyk7CisgICAgICBpZiAoaWRlbnRpZmllciA9PSBtYXli ZV9nZXRfaWRlbnRpZmllciAoImNvbnN0cnVjdCIpKQorCXsKKwkgIHRyZWUgY29uc3RydWN0 X2NsYXVzZXMgPSBUUkVFX1ZBTFVFIChjbGF1c2VzKTsKKwkgIHdoaWxlIChjb25zdHJ1Y3Rf Y2xhdXNlcykKKwkgICAgeworCSAgICAgIGlkZW50aWZpZXIgPSBUUkVFX1BVUlBPU0UgKGNv bnN0cnVjdF9jbGF1c2VzKTsKKwkgICAgICBpZiAoaWRlbnRpZmllciA9PSBtYXliZV9nZXRf aWRlbnRpZmllciAoInNpbWQiKSkKKwkJc2ltZF9jbGF1c2UgPSBUUkVFX1ZBTFVFIChjb25z dHJ1Y3RfY2xhdXNlcyk7CisJICAgICAgZWxzZQorCQlyZXR1cm4gTlVMTF9UUkVFOworCSAg ICAgIGNvbnN0cnVjdF9jbGF1c2VzID0gVFJFRV9DSEFJTiAoY29uc3RydWN0X2NsYXVzZXMp OworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoaWRlbnRpZmllciA9PSBtYXliZV9nZXRf aWRlbnRpZmllciAoImRldmljZSIpKQorCSpkZXZpY2VfY2xhdXNlcyA9IFRSRUVfVkFMVUUg KGNsYXVzZXMpOworICAgICAgY2xhdXNlcyA9IFRSRUVfQ0hBSU4gKGNsYXVzZXMpOworICAg IH0KKyAgcmV0dXJuIHNpbWRfY2xhdXNlOworfQorCiAvKiBHaXZlbiBhIHNpbWQgZnVuY3Rp b24gaW4gTk9ERSwgZXh0cmFjdCB0aGUgc2ltZCBzcGVjaWZpYwogICAgaW5mb3JtYXRpb24g ZnJvbSB0aGUgT01QIGNsYXVzZXMgcGFzc2VkIGluIENMQVVTRVMsIGFuZCByZXR1cm4KICAg IHRoZSBzdHJ1Y3QgY2dyYXBoX3NpbWRfY2xvbmUgKiBpZiBpdCBzaG91bGQgYmUgY2xvbmVk LiAgKklOQlJBTkNIX1NQRUNJRklFRAogICAgaXMgc2V0IHRvIFRSVUUgaWYgdGhlIGBpbmJy YW5jaCcgb3IgYG5vdGluYnJhbmNoJyBjbGF1c2Ugc3BlY2lmaWVkLAogICAgb3RoZXJ3aXNl IHNldCB0byBGQUxTRS4gICovCiAKLXN0YXRpYyBzdHJ1Y3QgY2dyYXBoX3NpbWRfY2xvbmUg Kgotc2ltZF9jbG9uZV9jbGF1c2VzX2V4dHJhY3QgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9k ZSwgdHJlZSBjbGF1c2VzLAorc3RhdGljIGJvb2wKK3NpbWRfY2xvbmVfY2xhdXNlc19leHRy YWN0IChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUgQVRUUklCVVRFX1VOVVNFRCwKKwkJCSAg ICBzdHJ1Y3QgY2dyYXBoX3NpbWRfY2xvbmUgKmNsb25lX2luZm8sCisJCQkgICAgYXV0b192 ZWM8dHJlZT4gJmFyZ3MsIHRyZWUgY2xhdXNlcywKIAkJCSAgICBib29sICppbmJyYW5jaF9z cGVjaWZpZWQpCiB7Ci0gIGF1dG9fdmVjPHRyZWU+IGFyZ3M7Ci0gIHNpbWRfY2xvbmVfdmVj dG9yX29mX2Zvcm1hbF9wYXJtX3R5cGVzICgmYXJncywgbm9kZS0+ZGVjbCk7Ci0gIHRyZWUg dDsKLSAgaW50IG47Ci0gICppbmJyYW5jaF9zcGVjaWZpZWQgPSBmYWxzZTsKLQotICBuID0g YXJncy5sZW5ndGggKCk7Ci0gIGlmIChuID4gMCAmJiBhcmdzLmxhc3QgKCkgPT0gdm9pZF90 eXBlX25vZGUpCi0gICAgbi0tOwotCi0gIC8qIEFsbG9jYXRlIG9uZSBtb3JlIHRoYW4gbmVl ZGVkIGp1c3QgaW4gY2FzZSB0aGlzIGlzIGFuIGluLWJyYW5jaAotICAgICBjbG9uZSB3aGlj aCB3aWxsIHJlcXVpcmUgYSBtYXNrIGFyZ3VtZW50LiAgKi8KLSAgc3RydWN0IGNncmFwaF9z aW1kX2Nsb25lICpjbG9uZV9pbmZvID0gc2ltZF9jbG9uZV9zdHJ1Y3RfYWxsb2MgKG4gKyAx KTsKLSAgY2xvbmVfaW5mby0+bmFyZ3MgPSBuOwotCi0gIGlmICghY2xhdXNlcykKLSAgICBn b3RvIG91dDsKLQotICBjbGF1c2VzID0gVFJFRV9WQUxVRSAoY2xhdXNlcyk7CiAgIGlmICgh Y2xhdXNlcyB8fCBUUkVFX0NPREUgKGNsYXVzZXMpICE9IE9NUF9DTEFVU0UpCi0gICAgZ290 byBvdXQ7CisgICAgcmV0dXJuIHRydWU7CiAKLSAgZm9yICh0ID0gY2xhdXNlczsgdDsgdCA9 IE9NUF9DTEFVU0VfQ0hBSU4gKHQpKQorICBmb3IgKHRyZWUgdCA9IGNsYXVzZXM7IHQ7IHQg PSBPTVBfQ0xBVVNFX0NIQUlOICh0KSkKICAgICB7CiAgICAgICBzd2l0Y2ggKE9NUF9DTEFV U0VfQ09ERSAodCkpCiAJewpAQCAtMzkwLDEzICs0MDksMTMgQEAgc2ltZF9jbG9uZV9jbGF1 c2VzX2V4dHJhY3QgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSwgdHJlZSBjbGF1c2VzLAog CQkgIHsKIAkJICAgIHdhcm5pbmdfYXQgKE9NUF9DTEFVU0VfTE9DQVRJT04gKHQpLCAwLAog CQkJCSJpZ25vcmluZyBsYXJnZSBsaW5lYXIgc3RlcCIpOwotCQkgICAgcmV0dXJuIE5VTEw7 CisJCSAgICByZXR1cm4gZmFsc2U7CiAJCSAgfQogCQllbHNlIGlmIChpbnRlZ2VyX3plcm9w IChzdGVwKSkKIAkJICB7CiAJCSAgICB3YXJuaW5nX2F0IChPTVBfQ0xBVVNFX0xPQ0FUSU9O ICh0KSwgMCwKIAkJCQkiaWdub3JpbmcgemVybyBsaW5lYXIgc3RlcCIpOwotCQkgICAgcmV0 dXJuIE5VTEw7CisJCSAgICByZXR1cm4gZmFsc2U7CiAJCSAgfQogCQllbHNlCiAJCSAgewpA QCAtNDUzLDcgKzQ3Miw3NiBAQCBzaW1kX2Nsb25lX2NsYXVzZXNfZXh0cmFjdCAoc3RydWN0 IGNncmFwaF9ub2RlICpub2RlLCB0cmVlIGNsYXVzZXMsCiAJfQogICAgIH0KIAotIG91dDoK KyAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2dyYXBoX3NpbWRfY2xvbmUg KgorY3JlYXRlX3NpbWRfY2xvbmVfZm9yX3NpbWRfb3JfdmFyaWFudCAoc3RydWN0IGNncmFw aF9ub2RlICpub2RlLCB0cmVlIGF0dHIsCisJCQkJICAgICAgIGJvb2wgdmFyaWFudCwgYm9v bCAqaW5icmFuY2hfc3BlY2lmaWVkKQoreworICB0cmVlIGZuX2RlY2wgPSBOVUxMX1RSRUU7 CisgIHRyZWUgZGV2aWNlX2NsYXVzZXMgPSBOVUxMX1RSRUU7CisgICppbmJyYW5jaF9zcGVj aWZpZWQgPSBmYWxzZTsKKworICB0cmVlIHNpbWRfY2xhdXNlczsKKyAgaWYgKHZhcmlhbnQp CisgICAgc2ltZF9jbGF1c2VzID0gZmluZF92YXJpYW50X2NsYXVzZXMgKGF0dHIsICZmbl9k ZWNsLCAmZGV2aWNlX2NsYXVzZXMpOworICBlbHNlCisgICAgeworICAgICAgLyogQVRUUiBp cyBjdXJyZW50bHkgcG9pbnRpbmcgdG8gJ29tcCBkZWNsYXJlIHNpbWQnLCB1c2UgVFJFRV9W QUxVRSB0bworCSB0byBnZXQgdGhlIFRSRUVfTElTVCB3aXRoIE9NUF9DTEFVU0UuICAqLwor ICAgICAgc2ltZF9jbGF1c2VzID0gVFJFRV9WQUxVRSAoYXR0cik7CisgICAgICAvKiBJZiBT SU1EX0NMQVVTRVMgaXMgbm90IE5VTExfVFJFRSwgdGhlbiBpdCBzaG91bGQgYmUgYSBUUkVF X0xJU1Qgd2l0aAorCSBPTVBfQ0xBVVNFIGluc2lkZS4gICovCisgICAgICBpZiAoc2ltZF9j bGF1c2VzKQorCXNpbWRfY2xhdXNlcyA9IFRSRUVfVkFMVUUgKHNpbWRfY2xhdXNlcyk7Cisg ICAgfQorICBhdXRvX3ZlYzx0cmVlPiBhcmdzOworICBzaW1kX2Nsb25lX3ZlY3Rvcl9vZl9m b3JtYWxfcGFybV90eXBlcyAoJmFyZ3MsIG5vZGUtPmRlY2wpOworCisgIGludCBuID0gYXJn cy5sZW5ndGggKCk7CisgIGlmIChuID4gMCAmJiBhcmdzLmxhc3QgKCkgPT0gdm9pZF90eXBl X25vZGUpCisgICAgbi0tOworCisgIC8qIEFsbG9jYXRlIG9uZSBtb3JlIHRoYW4gbmVlZGVk IGp1c3QgaW4gY2FzZSB0aGlzIGlzIGFuIGluLWJyYW5jaAorICAgICBjbG9uZSB3aGljaCB3 aWxsIHJlcXVpcmUgYSBtYXNrIGFyZ3VtZW50LiAgKi8KKyAgc3RydWN0IGNncmFwaF9zaW1k X2Nsb25lICpjbG9uZV9pbmZvID0gc2ltZF9jbG9uZV9zdHJ1Y3RfYWxsb2MgKG4gKyAxKTsK KyAgY2xvbmVfaW5mby0+bmFyZ3MgPSBuOworCisgIGlmICghc2ltZF9jbG9uZV9jbGF1c2Vz X2V4dHJhY3QgKG5vZGUsIGNsb25lX2luZm8sIGFyZ3MsCisJCQkJICAgc2ltZF9jbGF1c2Vz LAorCQkJCSAgIGluYnJhbmNoX3NwZWNpZmllZCkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAg aWYgKCFjbG9uZV9pbmZvKQorICAgIHJldHVybiBOVUxMOworCisgIGNsb25lX2luZm8tPmRl dmljZSA9IDA7CisgIGlmIChkZXZpY2VfY2xhdXNlcykKKyAgICB7CisgICAgICB3aGlsZSAo ZGV2aWNlX2NsYXVzZXMpCisJeworCSAgdHJlZSBpZGVudGlmaWVyID0gVFJFRV9QVVJQT1NF IChkZXZpY2VfY2xhdXNlcyk7CisJICBpZiAoaWRlbnRpZmllciA9PSBtYXliZV9nZXRfaWRl bnRpZmllciAoImlzYSIpKQorCSAgICB7CisJICAgICAgdHJlZSBzdHJpbmdfY3N0ID0gVFJF RV9WQUxVRSAoVFJFRV9WQUxVRSAoZGV2aWNlX2NsYXVzZXMpKTsKKwkgICAgICBjb25zdCBj aGFyICogc3RyaW5nX2NzdF9wID0gVFJFRV9TVFJJTkdfUE9JTlRFUiAoc3RyaW5nX2NzdCk7 CisJICAgICAgY2xvbmVfaW5mby0+ZGV2aWNlCisJCXw9IHRhcmdldG0ub21wLmRldmljZV9r aW5kX2FyY2hfaXNhIChvbXBfZGV2aWNlX2lzYSwKKwkJCQkJCSAgICBzdHJpbmdfY3N0X3Ap OworCSAgICB9CisJICBlbHNlIGlmIChpZGVudGlmaWVyID09IG1heWJlX2dldF9pZGVudGlm aWVyICgiYXJjaCIpKQorCSAgICB7CisJICAgICAgdHJlZSBzdHJpbmdfY3N0ID0gVFJFRV9W QUxVRSAoVFJFRV9WQUxVRSAoZGV2aWNlX2NsYXVzZXMpKTsKKwkgICAgICBjb25zdCBjaGFy ICogc3RyaW5nX2NzdF9wID0gVFJFRV9TVFJJTkdfUE9JTlRFUiAoc3RyaW5nX2NzdCk7CisJ ICAgICAgY2xvbmVfaW5mby0+ZGV2aWNlCisJCXw9IHRhcmdldG0ub21wLmRldmljZV9raW5k X2FyY2hfaXNhIChvbXBfZGV2aWNlX2FyY2gsCisJCQkJCQkgICAgc3RyaW5nX2NzdF9wKTsK KwkgICAgfQorCSAgZGV2aWNlX2NsYXVzZXMgPSBUUkVFX0NIQUlOIChkZXZpY2VfY2xhdXNl cyk7CisJfQorICAgIH0KKwogICBpZiAoVFlQRV9BVE9NSUMgKFRSRUVfVFlQRSAoVFJFRV9U WVBFIChub2RlLT5kZWNsKSkpKQogICAgIHsKICAgICAgIHdhcm5pbmdfYXQgKERFQ0xfU09V UkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwgMCwKQEAgLTQ3Myw2ICs1NjEsMTEgQEAgc2lt ZF9jbG9uZV9jbGF1c2VzX2V4dHJhY3QgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSwgdHJl ZSBjbGF1c2VzLAogCXJldHVybiBOVUxMOwogICAgICAgfQogCisgIGlmICh2YXJpYW50KQor ICAgIGNsb25lX2luZm8tPnZhcmlhbnRfbmFtZSA9IERFQ0xfTkFNRSAoVFJFRV9QVVJQT1NF IChhdHRyKSk7CisgIGVsc2UKKyAgICBjbG9uZV9pbmZvLT52YXJpYW50X25hbWUgPSBOVUxM X1RSRUU7CisKICAgcmV0dXJuIGNsb25lX2luZm87CiB9CiAKQEAgLTUzMSw2ICs2MjQsOSBA QCBzdGF0aWMgdHJlZQogc2ltZF9jbG9uZV9tYW5nbGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAq bm9kZSwKIAkJICAgc3RydWN0IGNncmFwaF9zaW1kX2Nsb25lICpjbG9uZV9pbmZvKQogewor ICBpZiAoY2xvbmVfaW5mby0+dmFyaWFudF9uYW1lKQorICAgIHJldHVybiBjbG9uZV9pbmZv LT52YXJpYW50X25hbWU7CisKICAgY2hhciB2ZWNzaXplX21hbmdsZSA9IGNsb25lX2luZm8t PnZlY3NpemVfbWFuZ2xlOwogICBjaGFyIG1hc2sgPSBjbG9uZV9pbmZvLT5pbmJyYW5jaCA/ ICdNJyA6ICdOJzsKICAgcG9seV91aW50NjQgc2ltZGxlbiA9IGNsb25lX2luZm8tPnNpbWRs ZW47CkBAIC0xOTExLDIxICsyMDA3LDQ4IEBAIHNpbWRfY2xvbmVfYWRqdXN0IChzdHJ1Y3Qg Y2dyYXBoX25vZGUgKm5vZGUpCiAgIHBvcF9jZnVuICgpOwogfQogCit0cmVlCitnZXRfc2lt ZF9vcl92YXJpYW50X2F0dHJzICh0cmVlIGF0dHJzLCBib29sICp2YXJpYW50KQoreworICB0 cmVlIGF0dHIgPSBsb29rdXBfYXR0cmlidXRlICgib21wIGRlY2xhcmUgc2ltZCIsIGF0dHJz KTsKKyAgKnZhcmlhbnQgPSBmYWxzZTsKKyAgaWYgKGF0dHIpCisgICAgcmV0dXJuIGF0dHI7 CisgIGF0dHIgPSBsb29rdXBfYXR0cmlidXRlICgib21wIGRlY2xhcmUgdmFyaWFudCBiYXNl IiwgYXR0cnMpOworICBpZiAoIWF0dHIpCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgLyog R28gdGhyb3VnaCB0aGUgJ29tcCBkZWNsYXJlIHZhcmlhbnQgYmFzZScgYW5kIGZ1bmN0aW9u IGRlY2xhcmF0aW9uLiAgKi8KKyAgYXR0ciA9IFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0 dHIpKTsKKyAgYXR0ciA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJjb25zdHJ1Y3QiLCBhdHRyKTsK KyAgaWYgKCFhdHRyKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisgIC8qIEdvIHRocm91Z2gg J2NvbnN0cnVjdCcuICAqLworICBhdHRyID0gVFJFRV9WQUxVRSAoYXR0cik7CisgIGF0dHIg PSBsb29rdXBfYXR0cmlidXRlICgic2ltZCIsIGF0dHIpOworICBpZiAoIWF0dHIpCisgICAg cmV0dXJuIE5VTExfVFJFRTsKKyAgKnZhcmlhbnQgPSB0cnVlOworICByZXR1cm4gVFJFRV9W QUxVRSAoYXR0cnMpOworfQorCiAvKiBJZiB0aGUgZnVuY3Rpb24gaW4gTk9ERSBpcyB0YWdn ZWQgYXMgYW4gZWxlbWVudGFsIFNJTUQgZnVuY3Rpb24sCiAgICBjcmVhdGUgdGhlIGFwcHJv cHJpYXRlIFNJTUQgY2xvbmVzLiAgKi8KIAogdm9pZAogZXhwYW5kX3NpbWRfY2xvbmVzIChz dHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCiB7Ci0gIHRyZWUgYXR0cjsKKyAgdHJlZSBhdHRy LCBhdHRyczsKKyAgYm9vbCB2YXJpYW50ID0gZmFsc2U7CiAgIGJvb2wgZXhwbGljaXRfcCA9 IHRydWU7CiAKICAgaWYgKG5vZGUtPmlubGluZWRfdG8KICAgICAgIHx8IGxvb2t1cF9hdHRy aWJ1dGUgKCJub2Nsb25lIiwgREVDTF9BVFRSSUJVVEVTIChub2RlLT5kZWNsKSkpCiAgICAg cmV0dXJuOwogCi0gIGF0dHIgPSBsb29rdXBfYXR0cmlidXRlICgib21wIGRlY2xhcmUgc2lt ZCIsCi0JCQkgICBERUNMX0FUVFJJQlVURVMgKG5vZGUtPmRlY2wpKTsKKyAgYXR0cnMgPSBE RUNMX0FUVFJJQlVURVMgKG5vZGUtPmRlY2wpOworICBhdHRyID0gZ2V0X3NpbWRfb3JfdmFy aWFudF9hdHRycyAoYXR0cnMsICZ2YXJpYW50KTsKKyAgaWYgKHZhcmlhbnQpCisgICAgZXhw bGljaXRfcCA9IGZhbHNlOwogCiAgIC8qIFNlZSBpZiB3ZSBjYW4gYWRkIGFuICJvbXAgZGVj bGFyZSBzaW1kIiBkaXJlY3RpdmUgaW1wbGljaXRseQogICAgICBiZWZvcmUgZ2l2aW5nIHVw LiAgKi8KQEAgLTE5NDQsOCArMjA2Nyw3IEBAIGV4cGFuZF9zaW1kX2Nsb25lcyAoc3RydWN0 IGNncmFwaF9ub2RlICpub2RlKQogICAgICAgJiYgIW9hY2NfZ2V0X2ZuX2F0dHJpYiAobm9k ZS0+ZGVjbCkKICAgICAgICYmIG9rX2Zvcl9hdXRvX3NpbWRfY2xvbmUgKG5vZGUpKQogICAg IHsKLSAgICAgIGF0dHIgPSB0cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgib21wIGRlY2xh cmUgc2ltZCIpLCBOVUxMLAotCQkJREVDTF9BVFRSSUJVVEVTIChub2RlLT5kZWNsKSk7Cisg ICAgICBhdHRyID0gdHJlZV9jb25zIChnZXRfaWRlbnRpZmllciAoIm9tcCBkZWNsYXJlIHNp bWQiKSwgTlVMTCwgYXR0cnMpOwogICAgICAgREVDTF9BVFRSSUJVVEVTIChub2RlLT5kZWNs KSA9IGF0dHI7CiAgICAgICBleHBsaWNpdF9wID0gZmFsc2U7CiAgICAgfQpAQCAtMTk3MCw4 ICsyMDkyLDkgQEAgZXhwYW5kX3NpbWRfY2xvbmVzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5v ZGUpCiAgICAgICAvKiBTdGFydCB3aXRoIHBhcnNpbmcgdGhlICJvbXAgZGVjbGFyZSBzaW1k IiBhdHRyaWJ1dGUocykuICAqLwogICAgICAgYm9vbCBpbmJyYW5jaF9jbGF1c2Vfc3BlY2lm aWVkOwogICAgICAgc3RydWN0IGNncmFwaF9zaW1kX2Nsb25lICpjbG9uZV9pbmZvCi0JPSBz aW1kX2Nsb25lX2NsYXVzZXNfZXh0cmFjdCAobm9kZSwgVFJFRV9WQUxVRSAoYXR0ciksCi0J CQkJICAgICAgJmluYnJhbmNoX2NsYXVzZV9zcGVjaWZpZWQpOworCT0gY3JlYXRlX3NpbWRf Y2xvbmVfZm9yX3NpbWRfb3JfdmFyaWFudCAobm9kZSwgYXR0ciwgdmFyaWFudCwKKwkJCQkJ CSAmaW5icmFuY2hfY2xhdXNlX3NwZWNpZmllZCk7CisKICAgICAgIGlmIChjbG9uZV9pbmZv ID09IE5VTEwpCiAJY29udGludWU7CiAKQEAgLTIwNzAsNyArMjE5Myw4IEBAIGV4cGFuZF9z aW1kX2Nsb25lcyAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQogCQkgICAgIElERU5USUZJ RVJfUE9JTlRFUiAoREVDTF9BU1NFTUJMRVJfTkFNRSAobi0+ZGVjbCkpKTsKIAl9CiAgICAg fQotICB3aGlsZSAoKGF0dHIgPSBsb29rdXBfYXR0cmlidXRlICgib21wIGRlY2xhcmUgc2lt ZCIsIFRSRUVfQ0hBSU4gKGF0dHIpKSkpOworICB3aGlsZSAoKGF0dHJzID0gVFJFRV9DSEFJ TiAoYXR0cnMpKQorCSAgJiYgKGF0dHIgPSBnZXRfc2ltZF9vcl92YXJpYW50X2F0dHJzIChh dHRycywgJnZhcmlhbnQpKSk7CiB9CiAKIC8qIEVudHJ5IHBvaW50IGZvciBJUEEgc2ltZCBj bG9uZSBjcmVhdGlvbiBwYXNzLiAgKi8KZGlmZiAtLWdpdCBhL2djYy90YXJnZXQuZGVmIGIv Z2NjL3RhcmdldC5kZWYKaW5kZXggZmZhMTJhYTkwMjNiYjhmMjZhNjQ3YTk4NDg4MDBjNzdm MzRhZmM2Ny4uYmExNGNjNmRhOWRiYTViNjI5NGM3OGM1NGI5NWI0NjIyZWEzMTM5YSAxMDA2 NDQKLS0tIGEvZ2NjL3RhcmdldC5kZWYKKysrIGIvZ2NjL3RhcmdldC5kZWYKQEAgLTE2ODMs NyArMTY4Myw4IEBAIERFRkhPT0sKIGRldmljZSB0cmFpdCBzZXQsIHJldHVybiAwIGlmIG5v dCBwcmVzZW50IGluIGFueSBPcGVuTVAgY29udGV4dCBpbiB0aGVcblwKIHdob2xlIHRyYW5z bGF0aW9uIHVuaXQsIG9yIC0xIGlmIG5vdCBwcmVzZW50IGluIHRoZSBjdXJyZW50IE9wZW5N UCBjb250ZXh0XG5cCiBidXQgbWlnaHQgYmUgcHJlc2VudCBpbiBhbm90aGVyIE9wZW5NUCBj b250ZXh0IGluIHRoZSBzYW1lIFRVLiIsCi1pbnQsIChlbnVtIG9tcF9kZXZpY2Vfa2luZF9h cmNoX2lzYSB0cmFpdCwgY29uc3QgY2hhciAqbmFtZSksIE5VTEwpCitpbnQsIChlbnVtIG9t cF9kZXZpY2Vfa2luZF9hcmNoX2lzYSB0cmFpdCwgY29uc3QgY2hhciAqbmFtZSksCitkZWZh dWx0X29tcF9kZXZpY2Vfa2luZF9hcmNoX2lzYSkKIAogSE9PS19WRUNUT1JfRU5EIChvbXAp CiAKZGlmZiAtLWdpdCBhL2djYy90YXJnaG9va3MuaCBiL2djYy90YXJnaG9va3MuaAppbmRl eCA4NjBmYjhjY2JmMWFiMDBjNDNkYzRiNGQzMjgwOGMxZjQ4ODQwNmU0Li4yNTk5ZDNmYWQw NDUxZTAwZGY4ZmNmMmFjMWQ2NDM0ZDMzZmQ5OTk3IDEwMDY0NAotLS0gYS9nY2MvdGFyZ2hv b2tzLmgKKysrIGIvZ2NjL3Rhcmdob29rcy5oCkBAIC03Niw2ICs3Niw4IEBAIGV4dGVybiB0 cmVlIGRlZmF1bHRfbWFuZ2xlX2Fzc2VtYmxlcl9uYW1lIChjb25zdCBjaGFyICopOwogZXh0 ZXJuIHRyZWUgZGVmYXVsdF9zaW1kX2Nsb25lX2FkanVzdF9yZXRfb3JfcGFyYW0KICAgKHN0 cnVjdCBjZ3JhcGhfbm9kZSAqLHRyZWUgLCBib29sKTsKIAorZXh0ZXJuIGludCBkZWZhdWx0 X29tcF9kZXZpY2Vfa2luZF9hcmNoX2lzYQorICAob21wX2RldmljZV9raW5kX2FyY2hfaXNh ICwgY29uc3QgY2hhciAqKTsKIAogZXh0ZXJuIG1hY2hpbmVfbW9kZSBkZWZhdWx0X3RyYW5z bGF0ZV9tb2RlX2F0dHJpYnV0ZSAobWFjaGluZV9tb2RlKTsKIGV4dGVybiBib29sIGRlZmF1 bHRfc2NhbGFyX21vZGVfc3VwcG9ydGVkX3AgKHNjYWxhcl9tb2RlKTsKZGlmZiAtLWdpdCBh L2djYy90YXJnaG9va3MuY2MgYi9nY2MvdGFyZ2hvb2tzLmNjCmluZGV4IDRlNTRjZWIwMjk3 ODI4Y2YxM2U0MThkZmExMTM2NTE2NzBhNmYxMTIuLmU2YzY1NDQ3ZmI3ZGI0ZmY5NjEwOGRl OTg4MDdhMDEyZDgzOWJhYzggMTAwNjQ0Ci0tLSBhL2djYy90YXJnaG9va3MuY2MKKysrIGIv Z2NjL3Rhcmdob29rcy5jYwpAQCAtNDA4LDYgKzQwOCwxNCBAQCBkZWZhdWx0X3NpbWRfY2xv bmVfYWRqdXN0X3JldF9vcl9wYXJhbSAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlIEFUVFJJ QlVURV9VTlVTRQogICByZXR1cm4gdHlwZTsKIH0KIAoraW50CitkZWZhdWx0X29tcF9kZXZp Y2Vfa2luZF9hcmNoX2lzYSAob21wX2RldmljZV9raW5kX2FyY2hfaXNhIHRyYWl0LCBjb25z dCBjaGFyICpuYW1lKQoreworICAgIGlmICh0cmFpdCA9PSBvbXBfZGV2aWNlX2tpbmQpCisg ICAgICByZXR1cm4gc3RybmNtcCAobmFtZSwgImNwdSIsIHN0cmxlbiAoImNwdSIpKSA9PSAw OworICAgIHJldHVybiAwOworfQorCiAvKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBv ZiBUQVJHRVRfVFJBTlNMQVRFX01PREVfQVRUUklCVVRFLiAgKi8KIAogbWFjaGluZV9tb2Rl CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9kZWNsYXJl LXZhcmlhbnQtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZGVjbGFy ZS12YXJpYW50LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDRjOTQ2NGY0ZTI3MDQ3ZGI5YmU1YjBj OTcxMGFlM2NmZWU4ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2FhcmNoNjQvZGVjbGFyZS12YXJpYW50LTEuYwpAQCAtMCwwICsxLDcgQEAKKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMyAtZm9wZW5tcCIg fSAqLworCisjaW5jbHVkZSAiZGVjbGFyZS12YXJpYW50LTEueCIKKworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJfWkdWbk40dl9jYWxsZWUiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfWkdWbk44dl9jYWxsZWUiIH0gfSAqLwpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZGVjbGFyZS12YXJpYW50 LTEueCBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2RlY2xhcmUtdmFyaWFu dC0xLngKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjFiY2Y4ZWZmMDJlNDE1YTUwNDRhN2NiZGE4YTU5MzYw N2ZkMGM1NgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h YXJjaDY0L2RlY2xhcmUtdmFyaWFudC0xLngKQEAgLTAsMCArMSwyNyBAQAorI2lmIF9fQVJN X0ZFQVRVUkVfU1ZFCitfX1NWSW50MTZfdCBfWkdWc014dl9jYWxsZWUgKF9fU1ZJbnQxNl90 LCBfX1NWQm9vbF90KTsKK19fU1ZJbnQxNl90IF9aR1ZzTTh2X2NhbGxlZSAoX19TVkludDE2 X3QsIF9fU1ZCb29sX3QpOworX19TVkludDE2X3QgX1pHVnNNMTZ2X2NhbGxlZSAoX19TVklu dDE2X3QsIF9fU1ZCb29sX3QpOworI2VuZGlmCitfX0ludDE2eDRfdCBfWkdWbk40dl9jYWxs ZWUgKF9fSW50MTZ4NF90KTsKK19fSW50MTZ4OF90IF9aR1ZuTjh2X2NhbGxlZSAoX19JbnQx Nng4X3QpOworI2lmIF9fQVJNX0ZFQVRVUkVfU1ZFCisjcHJhZ21hIG9tcCBkZWNsYXJlIHZh cmlhbnQoX1pHVnNNMTZ2X2NhbGxlZSkgXAorICAgIG1hdGNoKGNvbnN0cnVjdCA9IHtzaW1k KG5vdGluYnJhbmNoLCBzaW1kbGVuKDE2KSl9LCBkZXZpY2UgPSB7aXNhKCJzdmUiKX0pCisj cHJhZ21hIG9tcCBkZWNsYXJlIHZhcmlhbnQoX1pHVnNNOHZfY2FsbGVlKSBcCisgICAgbWF0 Y2goY29uc3RydWN0ID0ge3NpbWQobm90aW5icmFuY2gsIHNpbWRsZW4oOCkpfSwgZGV2aWNl ID0ge2lzYSgic3ZlIil9KQorI3ByYWdtYSBvbXAgZGVjbGFyZSB2YXJpYW50KF9aR1ZzTXh2 X2NhbGxlZSkgXAorICAgIG1hdGNoKGNvbnN0cnVjdCA9IHtzaW1kKG5vdGluYnJhbmNoKX0s IGRldmljZSA9IHtpc2EoInN2ZSIpfSkKKyNlbmRpZgorI3ByYWdtYSBvbXAgZGVjbGFyZSB2 YXJpYW50KF9aR1ZuTjR2X2NhbGxlZSkgXAorICAgIG1hdGNoKGNvbnN0cnVjdCA9IHtzaW1k KG5vdGluYnJhbmNoLCBzaW1kbGVuKDQpKX0sIGRldmljZSA9IHtpc2EoInNpbWQiKX0pCisj cHJhZ21hIG9tcCBkZWNsYXJlIHZhcmlhbnQoX1pHVm5OOHZfY2FsbGVlKSBcCisgICAgbWF0 Y2goY29uc3RydWN0ID0ge3NpbWQobm90aW5icmFuY2gsIHNpbWRsZW4oOCkpfSwgZGV2aWNl ID0ge2lzYSgic2ltZCIpfSkKK2V4dGVybiBzaG9ydCBfX2F0dHJpYnV0ZV9fICgoY29uc3Qp KSBjYWxsZWUgKHNob3J0KTsKKworCit2b2lkIGNhbGxlcl9hdXRvdmVjIChzaG9ydCAqIF9f cmVzdHJpY3QgYSwgc2hvcnQgKl9fcmVzdHJpY3QgYiwgdW5zaWduZWQgbikKK3sKKyAgZm9y ICh1bnNpZ25lZCBpID0gMDsgaSA8IG47ICsraSkKKyAgICBhW2ldID0gY2FsbGVlIChiW2ld KTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2 ZS9kZWNsYXJlLXZhcmlhbnQtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvc3ZlL2RlY2xhcmUtdmFyaWFudC0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E4MTI5ZmU4OGFj OTc1OWIyMzM3ODkyYTNkMTRmNGU4MTk2ZTYxZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9kZWNsYXJlLXZhcmlhbnQtMS5jCkBA IC0wLDAgKzEsNiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8zIC1mb3Blbm1wIiB9ICovCisKKyNpbmNsdWRlICIuLi9kZWNsYXJlLXZhcmlhbnQt MS54IgorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIl9aR1ZzTXh2X2NhbGxl ZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2 NC9zdmUvZGVjbGFyZS12YXJpYW50LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h YXJjaDY0L3N2ZS9kZWNsYXJlLXZhcmlhbnQtMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiNmVhYmFj NzZjZjFjZDA1OWVjOGQ5NjBkZGQ5ZTMwOTczZGM3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUvZGVjbGFyZS12YXJpYW50LTIu YwpAQCAtMCwwICsxLDYgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1PMyAtZm9wZW5tcCAtbXN2ZS12ZWN0b3ItYml0cz0xMjgiIH0gKi8KKworI2lu Y2x1ZGUgIi4uL2RlY2xhcmUtdmFyaWFudC0xLngiCisKKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlciAiX1pHVnNNOHZfY2FsbGVlIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9kZWNsYXJlLXZhcmlhbnQtMy5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2RlY2xhcmUtdmFyaWFudC0z LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uZThiNTk4ZmU0NzlkN2UxZTkyZWI3ZjllMzQxM2Q1YWMxODM2 MjZhOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJj aDY0L3N2ZS9kZWNsYXJlLXZhcmlhbnQtMy5jCkBAIC0wLDAgKzEsNiBAQAorLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIC1mb3Blbm1wIC1tc3ZlLXZl Y3Rvci1iaXRzPTI1NiIgfSAqLworCisjaW5jbHVkZSAiLi4vZGVjbGFyZS12YXJpYW50LTEu eCIKKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfWkdWc00xNnZfY2FsbGVl IiB9IH0gKi8K --------------i0Hu0hcGnpgDpgBfex9fs6lf--