From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 3A096383A83F for ; Mon, 2 Aug 2021 13:11:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3A096383A83F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: bTeAZGus5tQmg47KwXxB0SMZ3IYKTRXMg7rcj+ERAGK64oWDK5tN/KrZzZD8p+f35wBqvcc242 OcDdPBZ++oYSRG6rfIXuWIwlmpfMbX61U9Cmz6bUsvNzHZ2yz+JtDMHD6C64yI3pFJckbcCeDf zjx2bxGT5AzCJKEq5wdJPa+rrQh1sDo5nV9j/KtJ1tqAhAEmH8lsuLYfzntOWOdEnlPa0WGKO0 PtNSTyjnbJtYEEp+JtAQ1ehmK+5IcTUyFdhVhMwxtXieU3lfDzzIz6Q9IBiMaje4sDgsaDBua8 6MoclZAYd+xXv1f1EXkwQ2oi X-IronPort-AV: E=Sophos;i="5.84,289,1620720000"; d="scan'208";a="64179822" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 02 Aug 2021 05:11:04 -0800 IronPort-SDR: xmuiQ8DXTM7eVaQNBU2qzz0UsCQW3qcwMSdU4ENV5huwQyh9mrBAxJBNsBab0ZnXNrwzRdCutF EYSn2BXPssyxZKFI4kI+eW7e6I2uUEtxaIYnKz+ccUd96kFtJDZaQPz5lTZugSEBGY9tpYvReR X2vQtQw30TXlRheNZSF/9LFkX0v0SR8zNpCT7jO09BVACQFe1KE8HanP749Bbyecmq0FRyfXQe NgTxwkA+QUgJJM2vjqjfmO/knDQeIUEEHc/BE5xqhrx2V1lX+kUw92ioG19107iT8frXkkBURS 4PY= Subject: [PATCH, v2, libgomp, OpenMP 5.0] Implement omp_get_device_num To: Jakub Jelinek CC: gcc-patches , Thomas Schwinge , Andrew Stubbs , Tom de Vries , Catherine Moore , "Vollweiler, Marcel (DI SW CAS EPS STS)" References: <32c3546a-49c1-bedf-3002-c4e7783bf312@codesourcery.com> <20210723103913.GB2380545@tucnak> From: Chung-Lin Tang Message-ID: <7121c061-c57c-da35-4618-94cbfe4e1bb1@codesourcery.com> Date: Mon, 2 Aug 2021 21:10:57 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: <20210723103913.GB2380545@tucnak> Content-Type: multipart/mixed; boundary="------------BF10910E610B4B9186603ED1" Content-Language: en-US X-ClientProxiedBy: svr-orw-mbx-04.mgc.mentorg.com (147.34.90.204) To svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) X-Spam-Status: No, score=-9.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_STOCKGEN, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Aug 2021 13:11:09 -0000 --------------BF10910E610B4B9186603ED1 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit On 2021/7/23 6:39 PM, Jakub Jelinek wrote: > On Fri, Jul 23, 2021 at 06:21:41PM +0800, Chung-Lin Tang wrote: >> --- a/libgomp/icv-device.c >> +++ b/libgomp/icv-device.c >> @@ -61,8 +61,17 @@ omp_is_initial_device (void) >> return 1; >> } >> >> +int >> +omp_get_device_num (void) >> +{ >> + /* By specification, this is equivalent to omp_get_initial_device >> + on the host. */ >> + return omp_get_initial_device (); >> +} >> + > > I think this won't work properly with the intel micoffload, where the host > libgomp is used in the offloaded code. > For omp_is_initial_device, the plugin solves it by: > liboffloadmic/plugin/offload_target_main.cpp > overriding it: > /* Override the corresponding functions from libgomp. */ > extern "C" int > omp_is_initial_device (void) __GOMP_NOTHROW > { > return 0; > } > > extern "C" int32_t > omp_is_initial_device_ (void) > { > return omp_is_initial_device (); > } > but guess it will need slightly more work because we need to copy the value > to the offloading device too. > It can be done incrementally though. I guess this part of intelmic functionality will just have to wait later. There seem to be other parts of liboffloadmic that seems to need re-work, e.g. omp_get_num_devices() return mic_engines_total, where it should actually return the number of all devices (not just intelmic). omp_get_initial_device() returning -1 (which I don't quite understand), etc. Really suggest to have intelmic support be re-worked as an offload plugin inside libgomp, rather than floating outside by itself. >> --- a/libgomp/libgomp-plugin.h >> +++ b/libgomp/libgomp-plugin.h >> @@ -102,6 +102,12 @@ struct addr_pair >> uintptr_t end; >> }; >> >> +/* This symbol is to name a target side variable that holds the designated >> + 'device number' of the target device. The symbol needs to be available to >> + libgomp code and the offload plugin (which in the latter case must be >> + stringified). */ >> +#define GOMP_DEVICE_NUM_VAR __gomp_device_num > > For a single var it is acceptable (though, please avoid the double space > before offload plugin in the comment), but once we have more than one > variable, I think we should simply have a struct which will contain all the > parameters that need to be copied from the host to the offloading device at > image load time (and have eventually another struct that holds parameters > that we'll need to copy to the device on each kernel launch, I bet some ICVs > will be one category, other ICVs another one). Actually, if you look at the 5.[01] specifications, omp_get_device_num() is not defined in terms of an ICV. Maybe it conceptually ought to be, but the current description of "the device number of the device on which the calling thread is executing" is not one if the defined ICVs. It looks like there will eventually be some kind of ICV block handled in a similar way, but I think that the modifications will be straightforward then. For now, I think it's okay for GOMP_DEVICE_NUM_VAR to just be a normal global variable. >> diff --git a/libgomp/libgomp.map b/libgomp/libgomp.map >> index 8ea27b5565f..ffcb98ae99e 100644 >> --- a/libgomp/libgomp.map >> +++ b/libgomp/libgomp.map >> @@ -197,6 +197,8 @@ OMP_5.0.1 { >> omp_get_supported_active_levels_; >> omp_fulfill_event; >> omp_fulfill_event_; >> + omp_get_device_num; >> + omp_get_device_num_; >> } OMP_5.0; > > This is wrong. We've already released GCC 11.1 with the OMP_5.0.1 > symbol version, so we must not add any further symbols into that symbol > version. OpenMP 5.0 routines added in GCC 12 should be OMP_5.0.2 symbol > version. I've adjusted this into 5.0.2, in between 5.0.1 and the new 5.1 added by the recent omp_display_env[_] routines. omp_get_device_num is a OpenMP 5.0 introduced API function, so I think this is the correct handling (instead of stashing into 5.1). There is a new function check_effective_target_offload_target_intelmic() in testsuite/lib/libgomp.exp, used to test for non-intelmic offloading situations. Re-tested with no regressions, seeking approval for trunk. Thanks, Chung-Lin 2021-08-02 Chung-Lin Tang libgomp/ChangeLog * icv-device.c (omp_get_device_num): New API function, host side. * fortran.c (omp_get_device_num_): New interface function. * libgomp-plugin.h (GOMP_DEVICE_NUM_VAR): Define macro symbol. * libgomp.map (OMP_5.0.2): New version space with omp_get_device_num, omp_get_device_num_. * libgomp.texi (omp_get_device_num): Add documentation for new API function. * omp.h.in (omp_get_device_num): Add declaration. * omp_lib.f90.in (omp_get_device_num): Likewise. * omp_lib.h.in (omp_get_device_num): Likewise. * target.c (gomp_load_image_to_device): If additional entry for device number exists at end of returned entries from 'load_image_func' hook, copy the assigned device number over to the device variable. * config/gcn/icv-device.c (GOMP_DEVICE_NUM_VAR): Define static global. (omp_get_device_num): New API function, device side. * config/plugin/plugin-gcn.c ("symcat.h"): Add include. (GOMP_OFFLOAD_load_image): Add addresses of device GOMP_DEVICE_NUM_VAR at end of returned 'target_table' entries. * config/nvptx/icv-device.c (GOMP_DEVICE_NUM_VAR): Define static global. (omp_get_device_num): New API function, device side. * config/plugin/plugin-nvptx.c ("symcat.h"): Add include. (GOMP_OFFLOAD_load_image): Add addresses of device GOMP_DEVICE_NUM_VAR at end of returned 'target_table' entries. * testsuite/lib/libgomp.exp (check_effective_target_offload_target_intelmic): New function for testing for intelmic offloading. * testsuite/libgomp.c-c++-common/target-45.c: New test. * testsuite/libgomp.fortran/target10.f90: New test. --------------BF10910E610B4B9186603ED1 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="omp_get_device_num-v2.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="omp_get_device_num-v2.patch" ZGlmZiAtLWdpdCBhL2xpYmdvbXAvY29uZmlnL2djbi9pY3YtZGV2aWNlLmMgYi9saWJnb21w L2NvbmZpZy9nY24vaWN2LWRldmljZS5jCmluZGV4IDcyZDRmN2NmZjc0Li44ZjcyMDI4YTZj OCAxMDA2NDQKLS0tIGEvbGliZ29tcC9jb25maWcvZ2NuL2ljdi1kZXZpY2UuYworKysgYi9s aWJnb21wL2NvbmZpZy9nY24vaWN2LWRldmljZS5jCkBAIC03MCw2ICs3MCwxNiBAQCBvbXBf aXNfaW5pdGlhbF9kZXZpY2UgKHZvaWQpCiAgIHJldHVybiAwOwogfQogCisvKiBUaGlzIGlz IHNldCB0byB0aGUgZGV2aWNlIG51bWJlciBvZiBjdXJyZW50IEdQVSBkdXJpbmcgZGV2aWNl IGluaXRpYWxpemF0aW9uLAorICAgd2hlbiB0aGUgb2ZmbG9hZCBpbWFnZSBjb250YWluaW5n IHRoaXMgbGliZ29tcCBwb3J0aW9uIGlzIGxvYWRlZC4gICovCitzdGF0aWMgaW50IEdPTVBf REVWSUNFX05VTV9WQVI7CisKK2ludAorb21wX2dldF9kZXZpY2VfbnVtICh2b2lkKQorewor ICByZXR1cm4gR09NUF9ERVZJQ0VfTlVNX1ZBUjsKK30KKwogaWFsaWFzIChvbXBfc2V0X2Rl ZmF1bHRfZGV2aWNlKQogaWFsaWFzIChvbXBfZ2V0X2RlZmF1bHRfZGV2aWNlKQogaWFsaWFz IChvbXBfZ2V0X2luaXRpYWxfZGV2aWNlKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC9jb25maWcv bnZwdHgvaWN2LWRldmljZS5jIGIvbGliZ29tcC9jb25maWcvbnZwdHgvaWN2LWRldmljZS5j CmluZGV4IDNiOTY4OTBmMzM4Li5lNTg2ZGExZDNhOCAxMDA2NDQKLS0tIGEvbGliZ29tcC9j b25maWcvbnZwdHgvaWN2LWRldmljZS5jCisrKyBiL2xpYmdvbXAvY29uZmlnL252cHR4L2lj di1kZXZpY2UuYwpAQCAtNTgsOCArNTgsMTkgQEAgb21wX2lzX2luaXRpYWxfZGV2aWNlICh2 b2lkKQogICByZXR1cm4gMDsKIH0KIAorLyogVGhpcyBpcyBzZXQgdG8gdGhlIGRldmljZSBu dW1iZXIgb2YgY3VycmVudCBHUFUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiwKKyAg IHdoZW4gdGhlIG9mZmxvYWQgaW1hZ2UgY29udGFpbmluZyB0aGlzIGxpYmdvbXAgcG9ydGlv biBpcyBsb2FkZWQuICAqLworc3RhdGljIGludCBHT01QX0RFVklDRV9OVU1fVkFSOworCitp bnQKK29tcF9nZXRfZGV2aWNlX251bSAodm9pZCkKK3sKKyAgcmV0dXJuIEdPTVBfREVWSUNF X05VTV9WQVI7Cit9CisKIGlhbGlhcyAob21wX3NldF9kZWZhdWx0X2RldmljZSkKIGlhbGlh cyAob21wX2dldF9kZWZhdWx0X2RldmljZSkKIGlhbGlhcyAob21wX2dldF9pbml0aWFsX2Rl dmljZSkKIGlhbGlhcyAob21wX2dldF9udW1fZGV2aWNlcykKIGlhbGlhcyAob21wX2lzX2lu aXRpYWxfZGV2aWNlKQoraWFsaWFzIChvbXBfZ2V0X2RldmljZV9udW0pCmRpZmYgLS1naXQg YS9saWJnb21wL2ZvcnRyYW4uYyBiL2xpYmdvbXAvZm9ydHJhbi5jCmluZGV4IGUwNDI3MDJh YzkxLi41Y2ZmODg0MGVhYiAxMDA2NDQKLS0tIGEvbGliZ29tcC9mb3J0cmFuLmMKKysrIGIv bGliZ29tcC9mb3J0cmFuLmMKQEAgLTU5OSw2ICs1OTksMTIgQEAgb21wX2dldF9pbml0aWFs X2RldmljZV8gKHZvaWQpCiAgIHJldHVybiBvbXBfZ2V0X2luaXRpYWxfZGV2aWNlICgpOwog fQogCitpbnQzMl90CitvbXBfZ2V0X2RldmljZV9udW1fICh2b2lkKQoreworICByZXR1cm4g b21wX2dldF9kZXZpY2VfbnVtICgpOworfQorCiBpbnQzMl90CiBvbXBfZ2V0X21heF90YXNr X3ByaW9yaXR5XyAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvaWN2LWRldmljZS5j IGIvbGliZ29tcC9pY3YtZGV2aWNlLmMKaW5kZXggYzFiZWRmNDY2NDcuLmYxMWJkZmE4NWM0 IDEwMDY0NAotLS0gYS9saWJnb21wL2ljdi1kZXZpY2UuYworKysgYi9saWJnb21wL2ljdi1k ZXZpY2UuYwpAQCAtNjEsOCArNjEsMTcgQEAgb21wX2lzX2luaXRpYWxfZGV2aWNlICh2b2lk KQogICByZXR1cm4gMTsKIH0KIAoraW50CitvbXBfZ2V0X2RldmljZV9udW0gKHZvaWQpCit7 CisgIC8qIEJ5IHNwZWNpZmljYXRpb24sIHRoaXMgaXMgZXF1aXZhbGVudCB0byBvbXBfZ2V0 X2luaXRpYWxfZGV2aWNlCisgICAgIG9uIHRoZSBob3N0LiAgKi8KKyAgcmV0dXJuIG9tcF9n ZXRfaW5pdGlhbF9kZXZpY2UgKCk7Cit9CisKIGlhbGlhcyAob21wX3NldF9kZWZhdWx0X2Rl dmljZSkKIGlhbGlhcyAob21wX2dldF9kZWZhdWx0X2RldmljZSkKIGlhbGlhcyAob21wX2dl dF9pbml0aWFsX2RldmljZSkKIGlhbGlhcyAob21wX2dldF9udW1fZGV2aWNlcykKIGlhbGlh cyAob21wX2lzX2luaXRpYWxfZGV2aWNlKQoraWFsaWFzIChvbXBfZ2V0X2RldmljZV9udW0p CmRpZmYgLS1naXQgYS9saWJnb21wL2xpYmdvbXAtcGx1Z2luLmggYi9saWJnb21wL2xpYmdv bXAtcGx1Z2luLmgKaW5kZXggNjI2NDVjZTk5NTQuLmNmMjRhMmJlZTQxIDEwMDY0NAotLS0g YS9saWJnb21wL2xpYmdvbXAtcGx1Z2luLmgKKysrIGIvbGliZ29tcC9saWJnb21wLXBsdWdp bi5oCkBAIC0xMDIsNiArMTAyLDEyIEBAIHN0cnVjdCBhZGRyX3BhaXIKICAgdWludHB0cl90 IGVuZDsKIH07CiAKKy8qIFRoaXMgc3ltYm9sIGlzIHRvIG5hbWUgYSB0YXJnZXQgc2lkZSB2 YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBkZXNpZ25hdGVkCisgICAnZGV2aWNlIG51bWJlcicg b2YgdGhlIHRhcmdldCBkZXZpY2UuIFRoZSBzeW1ib2wgbmVlZHMgdG8gYmUgYXZhaWxhYmxl IHRvCisgICBsaWJnb21wIGNvZGUgYW5kIHRoZSBvZmZsb2FkIHBsdWdpbiAod2hpY2ggaW4g dGhlIGxhdHRlciBjYXNlIG11c3QgYmUKKyAgIHN0cmluZ2lmaWVkKS4gICovCisjZGVmaW5l IEdPTVBfREVWSUNFX05VTV9WQVIgX19nb21wX2RldmljZV9udW0KKwogLyogTWlzY2VsbGFu ZW91cyBmdW5jdGlvbnMuICAqLwogZXh0ZXJuIHZvaWQgKkdPTVBfUExVR0lOX21hbGxvYyAo c2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgobWFsbG9jKSk7CiBleHRlcm4gdm9pZCAqR09NUF9Q TFVHSU5fbWFsbG9jX2NsZWFyZWQgKHNpemVfdCkgX19hdHRyaWJ1dGVfXyAoKG1hbGxvYykp OwpkaWZmIC0tZ2l0IGEvbGliZ29tcC9saWJnb21wLm1hcCBiL2xpYmdvbXAvbGliZ29tcC5t YXAKaW5kZXggNjlhYTY5NTYyYjguLmNjNDQ4ODVjYmE5IDEwMDY0NAotLS0gYS9saWJnb21w L2xpYmdvbXAubWFwCisrKyBiL2xpYmdvbXAvbGliZ29tcC5tYXAKQEAgLTE5OSwxMiArMTk5 LDE4IEBAIE9NUF81LjAuMSB7CiAJb21wX2Z1bGZpbGxfZXZlbnRfOwogfSBPTVBfNS4wOwog CitPTVBfNS4wLjIgeworICBnbG9iYWw6CisJb21wX2dldF9kZXZpY2VfbnVtOworCW9tcF9n ZXRfZGV2aWNlX251bV87Cit9IE9NUF81LjAuMTsKKwogT01QXzUuMSB7CiAgIGdsb2JhbDoK IAlvbXBfZGlzcGxheV9lbnY7CiAJb21wX2Rpc3BsYXlfZW52XzsKIAlvbXBfZGlzcGxheV9l bnZfOF87Ci19IE9NUF81LjAuMTsKK30gT01QXzUuMC4yOwogCiBHT01QXzEuMCB7CiAgIGds b2JhbDoKZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGliZ29tcC50ZXhpIGIvbGliZ29tcC9saWJn b21wLnRleGkKaW5kZXggMmMxZjFiNTk2OGIuLmZjOWU3MDhhOGQyIDEwMDY0NAotLS0gYS9s aWJnb21wL2xpYmdvbXAudGV4aQorKysgYi9saWJnb21wL2xpYmdvbXAudGV4aQpAQCAtMTY1 LDYgKzE2NSw3IEBAIGxpbmthZ2UsIGFuZCBkbyBub3QgdGhyb3cgZXhjZXB0aW9ucy4KICog b21wX2dldF9hbmNlc3Rvcl90aHJlYWRfbnVtOjogQW5jZXN0b3IgdGhyZWFkIElECiAqIG9t cF9nZXRfY2FuY2VsbGF0aW9uOjogICAgICAgIFdoZXRoZXIgY2FuY2VsbGF0aW9uIHN1cHBv cnQgaXMgZW5hYmxlZAogKiBvbXBfZ2V0X2RlZmF1bHRfZGV2aWNlOjogICAgICBHZXQgdGhl IGRlZmF1bHQgZGV2aWNlIGZvciB0YXJnZXQgcmVnaW9ucworKiBvbXBfZ2V0X2RldmljZV9u dW06OiAgICAgICAgICBHZXQgZGV2aWNlIHRoYXQgY3VycmVudCB0aHJlYWQgaXMgcnVubmlu ZyBvbgogKiBvbXBfZ2V0X2R5bmFtaWM6OiAgICAgICAgICAgICBEeW5hbWljIHRlYW1zIHNl dHRpbmcKICogb21wX2dldF9pbml0aWFsX2RldmljZTo6ICAgICAgRGV2aWNlIG51bWJlciBv ZiBob3N0IGRldmljZQogKiBvbXBfZ2V0X2xldmVsOjogICAgICAgICAgICAgICBOdW1iZXIg b2YgcGFyYWxsZWwgcmVnaW9ucwpAQCAtMzg1LDYgKzM4NiwzNCBAQCBGb3IgT3Blbk1QIDUu MSwgdGhpcyBtdXN0IGJlIGVxdWFsIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUKIAog CiAKK0Bub2RlIG9tcF9nZXRfZGV2aWNlX251bQorQHNlY3Rpb24gQGNvZGV7b21wX2dldF9k ZXZpY2VfbnVtfSAtLSBSZXR1cm4gZGV2aWNlIG51bWJlciBvZiBjdXJyZW50IGRldmljZQor QHRhYmxlIEBhc2lzCitAaXRlbSBAZW1waHtEZXNjcmlwdGlvbn06CitUaGlzIGZ1bmN0aW9u IHJldHVybnMgYSBkZXZpY2UgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgZGV2aWNlIHRo YXQgdGhlCitjdXJyZW50IHRocmVhZCBpcyBleGVjdXRpbmcgb24uIEZvciBPcGVuTVAgNS4w LCB0aGlzIG11c3QgYmUgZXF1YWwgdG8gdGhlCit2YWx1ZSByZXR1cm5lZCBieSB0aGUgQGNv ZGV7b21wX2dldF9pbml0aWFsX2RldmljZX0gZnVuY3Rpb24gd2hlbiBjYWxsZWQKK2Zyb20g dGhlIGhvc3QuCisKK0BpdGVtIEBlbXBoe0MvQysrfQorQG11bHRpdGFibGUgQGNvbHVtbmZy YWN0aW9ucyAuMjAgLjgwCitAaXRlbSBAZW1waHtQcm90b3R5cGV9OiBAdGFiIEBjb2Rle2lu dCBvbXBfZ2V0X2RldmljZV9udW0odm9pZCk7fQorQGVuZCBtdWx0aXRhYmxlCisKK0BpdGVt IEBlbXBoe0ZvcnRyYW59OgorQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMjAgLjgw CitAaXRlbSBAZW1waHtJbnRlcmZhY2V9OiBAdGFiIEBjb2Rle2ludGVnZXIgZnVuY3Rpb24g b21wX2dldF9kZXZpY2VfbnVtKCl9CitAZW5kIG11bHRpdGFibGUKKworQGl0ZW0gQGVtcGh7 U2VlIGFsc299OgorQHJlZntvbXBfZ2V0X2luaXRpYWxfZGV2aWNlfQorCitAaXRlbSBAZW1w aHtSZWZlcmVuY2V9OgorQHVyZWZ7aHR0cHM6Ly93d3cub3Blbm1wLm9yZywgT3Blbk1QIHNw ZWNpZmljYXRpb24gdjUuMH0sIFNlY3Rpb24gMy4yLjM3LgorQGVuZCB0YWJsZQorCisKKwog QG5vZGUgb21wX2dldF9sZXZlbAogQHNlY3Rpb24gQGNvZGV7b21wX2dldF9sZXZlbH0gLS0g T2J0YWluIHRoZSBjdXJyZW50IG5lc3RpbmcgbGV2ZWwKIEB0YWJsZSBAYXNpcwpkaWZmIC0t Z2l0IGEvbGliZ29tcC9vbXAuaC5pbiBiL2xpYmdvbXAvb21wLmguaW4KaW5kZXggYzkzZGI5 NjhkMmUuLmRhMzRhOWQ5OGE2IDEwMDY0NAotLS0gYS9saWJnb21wL29tcC5oLmluCisrKyBi L2xpYmdvbXAvb21wLmguaW4KQEAgLTI0Myw2ICsyNDMsNyBAQCBleHRlcm4gdm9pZCBvbXBf Z2V0X3BhcnRpdGlvbl9wbGFjZV9udW1zIChpbnQgKikgX19HT01QX05PVEhST1c7CiBleHRl cm4gdm9pZCBvbXBfc2V0X2RlZmF1bHRfZGV2aWNlIChpbnQpIF9fR09NUF9OT1RIUk9XOwog ZXh0ZXJuIGludCBvbXBfZ2V0X2RlZmF1bHRfZGV2aWNlICh2b2lkKSBfX0dPTVBfTk9USFJP VzsKIGV4dGVybiBpbnQgb21wX2dldF9udW1fZGV2aWNlcyAodm9pZCkgX19HT01QX05PVEhS T1c7CitleHRlcm4gaW50IG9tcF9nZXRfZGV2aWNlX251bSAodm9pZCkgX19HT01QX05PVEhS T1c7CiBleHRlcm4gaW50IG9tcF9nZXRfbnVtX3RlYW1zICh2b2lkKSBfX0dPTVBfTk9USFJP VzsKIGV4dGVybiBpbnQgb21wX2dldF90ZWFtX251bSAodm9pZCkgX19HT01QX05PVEhST1c7 CiAKZGlmZiAtLWdpdCBhL2xpYmdvbXAvb21wX2xpYi5mOTAuaW4gYi9saWJnb21wL29tcF9s aWIuZjkwLmluCmluZGV4IDVmYzY1ODdlNDllLi5kN2U4MDRmNGZkNSAxMDA2NDQKLS0tIGEv bGliZ29tcC9vbXBfbGliLmY5MC5pbgorKysgYi9saWJnb21wL29tcF9saWIuZjkwLmluCkBA IC01NTAsNiArNTUwLDEyIEBACiAgICAgICAgICAgZW5kIGZ1bmN0aW9uIG9tcF9nZXRfaW5p dGlhbF9kZXZpY2UKICAgICAgICAgZW5kIGludGVyZmFjZQogCisgICAgICAgIGludGVyZmFj ZQorICAgICAgICAgIGZ1bmN0aW9uIG9tcF9nZXRfZGV2aWNlX251bSAoKQorICAgICAgICAg ICAgaW50ZWdlciAoNCkgOjogb21wX2dldF9kZXZpY2VfbnVtCisgICAgICAgICAgZW5kIGZ1 bmN0aW9uIG9tcF9nZXRfZGV2aWNlX251bQorICAgICAgICBlbmQgaW50ZXJmYWNlCisKICAg ICAgICAgaW50ZXJmYWNlCiAgICAgICAgICAgZnVuY3Rpb24gb21wX2dldF9tYXhfdGFza19w cmlvcml0eSAoKQogICAgICAgICAgICAgaW50ZWdlciAoNCkgOjogb21wX2dldF9tYXhfdGFz a19wcmlvcml0eQpkaWZmIC0tZ2l0IGEvbGliZ29tcC9vbXBfbGliLmguaW4gYi9saWJnb21w L29tcF9saWIuaC5pbgppbmRleCA5ODczY2VhOWFjMS4uMjBjMzI2NDVlM2MgMTAwNjQ0Ci0t LSBhL2xpYmdvbXAvb21wX2xpYi5oLmluCisrKyBiL2xpYmdvbXAvb21wX2xpYi5oLmluCkBA IC0yNDQsNiArMjQ0LDkgQEAKICAgICAgIGV4dGVybmFsIG9tcF9nZXRfaW5pdGlhbF9kZXZp Y2UKICAgICAgIGludGVnZXIoNCkgb21wX2dldF9pbml0aWFsX2RldmljZQogCisgICAgICBl eHRlcm5hbCBvbXBfZ2V0X2RldmljZV9udW0KKyAgICAgIGludGVnZXIoNCkgb21wX2dldF9k ZXZpY2VfbnVtCisKICAgICAgIGV4dGVybmFsIG9tcF9nZXRfbWF4X3Rhc2tfcHJpb3JpdHkK ICAgICAgIGludGVnZXIoNCkgb21wX2dldF9tYXhfdGFza19wcmlvcml0eQogCmRpZmYgLS1n aXQgYS9saWJnb21wL3BsdWdpbi9wbHVnaW4tZ2NuLmMgYi9saWJnb21wL3BsdWdpbi9wbHVn aW4tZ2NuLmMKaW5kZXggMjU0ODYxNGEyZTUuLmU2ZDhiNmFhZTI1IDEwMDY0NAotLS0gYS9s aWJnb21wL3BsdWdpbi9wbHVnaW4tZ2NuLmMKKysrIGIvbGliZ29tcC9wbHVnaW4vcGx1Z2lu LWdjbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAvKiB7e3sgSW5jbHVkZXMgYW5kIGRlZmluZXMg ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeW1jYXQuaCIKICNpbmNs dWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5o PgpAQCAtMzMwNSw2ICszMzA2LDcgQEAgR09NUF9PRkZMT0FEX2xvYWRfaW1hZ2UgKGludCBv cmQsIHVuc2lnbmVkIHZlcnNpb24sIGNvbnN0IHZvaWQgKnRhcmdldF9kYXRhLAogICBzdHJ1 Y3Qga2VybmVsX2luZm8gKmtlcm5lbDsKICAgaW50IGtlcm5lbF9jb3VudCA9IGltYWdlX2Rl c2MtPmtlcm5lbF9jb3VudDsKICAgdW5zaWduZWQgdmFyX2NvdW50ID0gaW1hZ2VfZGVzYy0+ Z2xvYmFsX3ZhcmlhYmxlX2NvdW50OworICBpbnQgb3RoZXJfY291bnQgPSAxOwogCiAgIGFn ZW50ID0gZ2V0X2FnZW50X2luZm8gKG9yZCk7CiAgIGlmICghYWdlbnQpCkBAIC0zMzIxLDcg KzMzMjMsOCBAQCBHT01QX09GRkxPQURfbG9hZF9pbWFnZSAoaW50IG9yZCwgdW5zaWduZWQg dmVyc2lvbiwgY29uc3Qgdm9pZCAqdGFyZ2V0X2RhdGEsCiAKICAgR0NOX0RFQlVHICgiRW5j b3VudGVyZWQgJWQga2VybmVscyBpbiBhbiBpbWFnZVxuIiwga2VybmVsX2NvdW50KTsKICAg R0NOX0RFQlVHICgiRW5jb3VudGVyZWQgJXUgZ2xvYmFsIHZhcmlhYmxlcyBpbiBhbiBpbWFn ZVxuIiwgdmFyX2NvdW50KTsKLSAgcGFpciA9IEdPTVBfUExVR0lOX21hbGxvYyAoKGtlcm5l bF9jb3VudCArIHZhcl9jb3VudCAtIDIpCisgIEdDTl9ERUJVRyAoIkV4cGVjdCAlZCBvdGhl ciB2YXJpYWJsZXMgaW4gYW4gaW1hZ2VcbiIsIG90aGVyX2NvdW50KTsKKyAgcGFpciA9IEdP TVBfUExVR0lOX21hbGxvYyAoKGtlcm5lbF9jb3VudCArIHZhcl9jb3VudCArIG90aGVyX2Nv dW50IC0gMikKIAkJCSAgICAgKiBzaXplb2YgKHN0cnVjdCBhZGRyX3BhaXIpKTsKICAgKnRh cmdldF90YWJsZSA9IHBhaXI7CiAgIG1vZHVsZSA9IChzdHJ1Y3QgbW9kdWxlX2luZm8gKikK QEAgLTMzOTYsNiArMzM5OSwzNSBAQCBHT01QX09GRkxPQURfbG9hZF9pbWFnZSAoaW50IG9y ZCwgdW5zaWduZWQgdmVyc2lvbiwgY29uc3Qgdm9pZCAqdGFyZ2V0X2RhdGEsCiAgICAgICBw YWlyKys7CiAgICAgfQogCisgIEdDTl9ERUJVRyAoIkxvb2tpbmcgZm9yIHZhcmlhYmxlICVz XG4iLCBTVFJJTkdYIChHT01QX0RFVklDRV9OVU1fVkFSKSk7CisKKyAgaHNhX3N0YXR1c190 IHN0YXR1czsKKyAgaHNhX2V4ZWN1dGFibGVfc3ltYm9sX3QgdmFyX3N5bWJvbDsKKyAgc3Rh dHVzID0gaHNhX2Zucy5oc2FfZXhlY3V0YWJsZV9nZXRfc3ltYm9sX2ZuIChhZ2VudC0+ZXhl Y3V0YWJsZSwgTlVMTCwKKwkJCQkJCSBTVFJJTkdYIChHT01QX0RFVklDRV9OVU1fVkFSKSwK KwkJCQkJCSBhZ2VudC0+aWQsIDAsICZ2YXJfc3ltYm9sKTsKKyAgaWYgKHN0YXR1cyA9PSBI U0FfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgdWludDY0X3QgZGV2aWNlX251bV92 YXJwdHI7CisgICAgICB1aW50MzJfdCBkZXZpY2VfbnVtX3ZhcnNpemU7CisKKyAgICAgIHN0 YXR1cyA9IGhzYV9mbnMuaHNhX2V4ZWN1dGFibGVfc3ltYm9sX2dldF9pbmZvX2ZuCisJKHZh cl9zeW1ib2wsIEhTQV9FWEVDVVRBQkxFX1NZTUJPTF9JTkZPX1ZBUklBQkxFX0FERFJFU1Ms CisJICZkZXZpY2VfbnVtX3ZhcnB0cik7CisgICAgICBpZiAoc3RhdHVzICE9IEhTQV9TVEFU VVNfU1VDQ0VTUykKKwloc2FfZmF0YWwgKCJDb3VsZCBub3QgZXh0cmFjdCBhIHZhcmlhYmxl IGZyb20gaXRzIHN5bWJvbCIsIHN0YXR1cyk7CisgICAgICBzdGF0dXMgPSBoc2FfZm5zLmhz YV9leGVjdXRhYmxlX3N5bWJvbF9nZXRfaW5mb19mbgorCSh2YXJfc3ltYm9sLCBIU0FfRVhF Q1VUQUJMRV9TWU1CT0xfSU5GT19WQVJJQUJMRV9TSVpFLAorCSAmZGV2aWNlX251bV92YXJz aXplKTsKKyAgICAgIGlmIChzdGF0dXMgIT0gSFNBX1NUQVRVU19TVUNDRVNTKQorCWhzYV9m YXRhbCAoIkNvdWxkIG5vdCBleHRyYWN0IGEgdmFyaWFibGUgc2l6ZSBmcm9tIGl0cyBzeW1i b2wiLCBzdGF0dXMpOworCisgICAgICBwYWlyLT5zdGFydCA9IGRldmljZV9udW1fdmFycHRy OworICAgICAgcGFpci0+ZW5kID0gZGV2aWNlX251bV92YXJwdHIgKyBkZXZpY2VfbnVtX3Zh cnNpemU7CisgICAgfQorICBlbHNlCisgICAgcGFpci0+c3RhcnQgPSBwYWlyLT5lbmQgPSAw OworCiAgIC8qIEVuc3VyZSB0aGF0IGNvbnN0cnVjdG9ycyBhcmUgcnVuIGZpcnN0LiAgKi8K ICAgc3RydWN0IEdPTVBfa2VybmVsX2xhdW5jaF9hdHRyaWJ1dGVzIGtsYSA9CiAgICAgeyAz LApAQCAtMzQxOCw3ICszNDUwLDcgQEAgR09NUF9PRkZMT0FEX2xvYWRfaW1hZ2UgKGludCBv cmQsIHVuc2lnbmVkIHZlcnNpb24sIGNvbnN0IHZvaWQgKnRhcmdldF9kYXRhLAogICBpZiAo bW9kdWxlLT5maW5pX2FycmF5X2Z1bmMpCiAgICAga2VybmVsX2NvdW50LS07CiAKLSAgcmV0 dXJuIGtlcm5lbF9jb3VudCArIHZhcl9jb3VudDsKKyAgcmV0dXJuIGtlcm5lbF9jb3VudCAr IHZhcl9jb3VudCArIG90aGVyX2NvdW50OwogfQogCiAvKiBVbmxvYWQgR0NOIG9iamVjdC1j b2RlIG1vZHVsZSBkZXNjcmliZWQgYnkgc3RydWN0IGdjbl9pbWFnZV9kZXNjIGluCmRpZmYg LS1naXQgYS9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHguYyBiL2xpYmdvbXAvcGx1Z2lu L3BsdWdpbi1udnB0eC5jCmluZGV4IDEyMTUyMTJkNTAxLi44YjM0ODk1YTg4ZiAxMDA2NDQK LS0tIGEvbGliZ29tcC9wbHVnaW4vcGx1Z2luLW52cHR4LmMKKysrIGIvbGliZ29tcC9wbHVn aW4vcGx1Z2luLW52cHR4LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNkZWZpbmUgX0dOVV9TT1VS Q0UKICNpbmNsdWRlICJvcGVuYWNjLmgiCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk ZSAic3ltY2F0LmgiCiAjaW5jbHVkZSAibGliZ29tcC1wbHVnaW4uaCIKICNpbmNsdWRlICJv YWNjLXBsdWdpbi5oIgogI2luY2x1ZGUgImdvbXAtY29uc3RhbnRzLmgiCkBAIC0xMjY1LDcg KzEyNjYsNyBAQCBHT01QX09GRkxPQURfbG9hZF9pbWFnZSAoaW50IG9yZCwgdW5zaWduZWQg dmVyc2lvbiwgY29uc3Qgdm9pZCAqdGFyZ2V0X2RhdGEsCiAgIENVbW9kdWxlIG1vZHVsZTsK ICAgY29uc3QgY2hhciAqY29uc3QgKnZhcl9uYW1lczsKICAgY29uc3Qgc3RydWN0IHRhcmdf Zm5fbGF1bmNoICpmbl9kZXNjczsKLSAgdW5zaWduZWQgaW50IGZuX2VudHJpZXMsIHZhcl9l bnRyaWVzLCBpLCBqOworICB1bnNpZ25lZCBpbnQgZm5fZW50cmllcywgdmFyX2VudHJpZXMs IG90aGVyX2VudHJpZXMsIGksIGo7CiAgIHN0cnVjdCB0YXJnX2ZuX2Rlc2NyaXB0b3IgKnRh cmdfZm5zOwogICBzdHJ1Y3QgYWRkcl9wYWlyICp0YXJnX3RibDsKICAgY29uc3QgbnZwdHhf dGRhdGFfdCAqaW1nX2hlYWRlciA9IChjb25zdCBudnB0eF90ZGF0YV90ICopIHRhcmdldF9k YXRhOwpAQCAtMTI5NSw4ICsxMjk2LDExIEBAIEdPTVBfT0ZGTE9BRF9sb2FkX2ltYWdlIChp bnQgb3JkLCB1bnNpZ25lZCB2ZXJzaW9uLCBjb25zdCB2b2lkICp0YXJnZXRfZGF0YSwKICAg Zm5fZW50cmllcyA9IGltZ19oZWFkZXItPmZuX251bTsKICAgZm5fZGVzY3MgPSBpbWdfaGVh ZGVyLT5mbl9kZXNjczsKIAorICAvKiBDdXJyZW50bHksIHRoZSBvbmx5IG90aGVyIGVudHJ5 IGtpbmQgaXMgJ2RldmljZSBudW1iZXInLiAgKi8KKyAgb3RoZXJfZW50cmllcyA9IDE7CisK ICAgdGFyZ190YmwgPSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IGFkZHJf cGFpcikKLQkJCQkgKiAoZm5fZW50cmllcyArIHZhcl9lbnRyaWVzKSk7CisJCQkJICogKGZu X2VudHJpZXMgKyB2YXJfZW50cmllcyArIG90aGVyX2VudHJpZXMpKTsKICAgdGFyZ19mbnMg PSBHT01QX1BMVUdJTl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IHRhcmdfZm5fZGVzY3JpcHRv cikKIAkJCQkgKiBmbl9lbnRyaWVzKTsKIApAQCAtMTM0NSw5ICsxMzQ5LDIyIEBAIEdPTVBf T0ZGTE9BRF9sb2FkX2ltYWdlIChpbnQgb3JkLCB1bnNpZ25lZCB2ZXJzaW9uLCBjb25zdCB2 b2lkICp0YXJnZXRfZGF0YSwKICAgICAgIHRhcmdfdGJsLT5lbmQgPSB0YXJnX3RibC0+c3Rh cnQgKyBieXRlczsKICAgICB9CiAKKyAgQ1VkZXZpY2VwdHIgZGV2aWNlX251bV92YXJwdHI7 CisgIHNpemVfdCBkZXZpY2VfbnVtX3ZhcnNpemU7CisgIENVcmVzdWx0IHIgPSBDVURBX0NB TExfTk9DSEVDSyAoY3VNb2R1bGVHZXRHbG9iYWwsICZkZXZpY2VfbnVtX3ZhcnB0ciwKKwkJ CQkgICZkZXZpY2VfbnVtX3ZhcnNpemUsIG1vZHVsZSwKKwkJCQkgIFNUUklOR1ggKEdPTVBf REVWSUNFX05VTV9WQVIpKTsKKyAgaWYgKHIgPT0gQ1VEQV9TVUNDRVNTKQorICAgIHsKKyAg ICAgIHRhcmdfdGJsLT5zdGFydCA9ICh1aW50cHRyX3QpIGRldmljZV9udW1fdmFycHRyOwor ICAgICAgdGFyZ190YmwtPmVuZCA9ICh1aW50cHRyX3QpIChkZXZpY2VfbnVtX3ZhcnB0ciAr IGRldmljZV9udW1fdmFyc2l6ZSk7CisgICAgfQorICBlbHNlCisgICAgdGFyZ190YmwtPnN0 YXJ0ID0gdGFyZ190YmwtPmVuZCA9IDA7CisKICAgbnZwdHhfc2V0X2Nsb2NrdGljayAobW9k dWxlLCBkZXYpOwogCi0gIHJldHVybiBmbl9lbnRyaWVzICsgdmFyX2VudHJpZXM7CisgIHJl dHVybiBmbl9lbnRyaWVzICsgdmFyX2VudHJpZXMgKyBvdGhlcl9lbnRyaWVzOwogfQogCiAv KiBVbmxvYWQgdGhlIHByb2dyYW0gZGVzY3JpYmVkIGJ5IFRBUkdFVF9EQVRBLiAgREVWX0RB VEEgaXMgdGhlCmRpZmYgLS1naXQgYS9saWJnb21wL3RhcmdldC5jIGIvbGliZ29tcC90YXJn ZXQuYwppbmRleCA0NTNiMzIxMGU0MC4uOTZmM2Q2YWQxY2YgMTAwNjQ0Ci0tLSBhL2xpYmdv bXAvdGFyZ2V0LmMKKysrIGIvbGliZ29tcC90YXJnZXQuYwpAQCAtMTk3NCw2ICsxOTc0LDkg QEAgZ29tcF9sb2FkX2ltYWdlX3RvX2RldmljZSAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2Ny ICpkZXZpY2VwLCB1bnNpZ25lZCB2ZXJzaW9uLAogICBpbnQgbnVtX2Z1bmNzID0gaG9zdF9m dW5jc19lbmQgLSBob3N0X2Z1bmNfdGFibGU7CiAgIGludCBudW1fdmFycyAgPSAoaG9zdF92 YXJzX2VuZCAtIGhvc3RfdmFyX3RhYmxlKSAvIDI7CiAKKyAgLyogT3RoZXJzIGN1cnJlbnRs eSBpcyBvbmx5ICdkZXZpY2VfbnVtJyAqLworICBpbnQgbnVtX290aGVycyA9IDE7CisKICAg LyogTG9hZCBpbWFnZSB0byBkZXZpY2UgYW5kIGdldCB0YXJnZXQgYWRkcmVzc2VzIGZvciB0 aGUgaW1hZ2UuICAqLwogICBzdHJ1Y3QgYWRkcl9wYWlyICp0YXJnZXRfdGFibGUgPSBOVUxM OwogICBpbnQgaSwgbnVtX3RhcmdldF9lbnRyaWVzOwpAQCAtMTk4Miw3ICsxOTg1LDkgQEAg Z29tcF9sb2FkX2ltYWdlX3RvX2RldmljZSAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpk ZXZpY2VwLCB1bnNpZ25lZCB2ZXJzaW9uLAogICAgID0gZGV2aWNlcC0+bG9hZF9pbWFnZV9m dW5jIChkZXZpY2VwLT50YXJnZXRfaWQsIHZlcnNpb24sCiAJCQkJdGFyZ2V0X2RhdGEsICZ0 YXJnZXRfdGFibGUpOwogCi0gIGlmIChudW1fdGFyZ2V0X2VudHJpZXMgIT0gbnVtX2Z1bmNz ICsgbnVtX3ZhcnMpCisgIGlmIChudW1fdGFyZ2V0X2VudHJpZXMgIT0gbnVtX2Z1bmNzICsg bnVtX3ZhcnMKKyAgICAgIC8qIE90aGVycyAoZGV2aWNlX251bSkgYXJlIGluY2x1ZGVkIGFz IHRyYWlsaW5nIGVudHJpZXMgaW4gcGFpciBsaXN0LiAgKi8KKyAgICAgICYmIG51bV90YXJn ZXRfZW50cmllcyAhPSBudW1fZnVuY3MgKyBudW1fdmFycyArIG51bV9vdGhlcnMpCiAgICAg ewogICAgICAgZ29tcF9tdXRleF91bmxvY2sgKCZkZXZpY2VwLT5sb2NrKTsKICAgICAgIGlm IChpc19yZWdpc3Rlcl9sb2NrKQpAQCAtMjA1NCw2ICsyMDU5LDMxIEBAIGdvbXBfbG9hZF9p bWFnZV90b19kZXZpY2UgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqZGV2aWNlcCwgdW5z aWduZWQgdmVyc2lvbiwKICAgICAgIGFycmF5Kys7CiAgICAgfQogCisgIC8qIExhc3QgZW50 cnkgaXMgZm9yIHRoZSBvbi1kZXZpY2UgJ2RldmljZV9udW0nIHZhcmlhYmxlLiBUb2xlcmF0 ZSBjYXNlCisgICAgIHdoZXJlIHBsdWdpbiBkb2VzIG5vdCByZXR1cm4gdGhpcyBlbnRyeS4g ICovCisgIGlmIChudW1fZnVuY3MgKyBudW1fdmFycyA8IG51bV90YXJnZXRfZW50cmllcykK KyAgICB7CisgICAgICBzdHJ1Y3QgYWRkcl9wYWlyICpkZXZpY2VfbnVtX3ZhciA9ICZ0YXJn ZXRfdGFibGVbbnVtX2Z1bmNzICsgbnVtX3ZhcnNdOworICAgICAgaWYgKGRldmljZV9udW1f dmFyLT5zdGFydCAhPSAwKQorCXsKKwkgIC8qIFRoZSBpbmRleCBvZiB0aGUgZGV2aWNlcCB3 aXRoaW4gZGV2aWNlc1tdIGlzIHJlZ2FyZGVkIGFzIGl0cworCSAgICAgJ2RldmljZSBudW1i ZXInLCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcGVyLWRldmljZSB0eXBlCisJICAg ICBkZXZpY2VwLT50YXJnZXRfaWQuICAqLworCSAgaW50IGRldmljZV9udW1fdmFsID0gKGlu dCkgKGRldmljZXAgLSAmZGV2aWNlc1swXSk7CisJICBpZiAoZGV2aWNlX251bV92YXItPmVu ZCAtIGRldmljZV9udW1fdmFyLT5zdGFydCAhPSBzaXplb2YgKGludCkpCisJICAgIHsKKwkg ICAgICBnb21wX211dGV4X3VubG9jayAoJmRldmljZXAtPmxvY2spOworCSAgICAgIGdvbXBf ZmF0YWwgKCJvZmZsb2FkIHBsdWdpbiBtYW5hZ2VkICdkZXZpY2VfbnVtJyBub3Qgb2YgZXhw ZWN0ZWQgIgorCQkJICAiZm9ybWF0Iik7CisJICAgIH0KKworCSAgLyogQ29weSBkZXZpY2Vf bnVtIHZhbHVlIHRvIHBsYWNlIG9uIGRldmljZSBtZW1vcnksIGhlcmVieSBhY3R1YWxseQor CSAgICAgZGVzaWduYXRpbmcgaXRzIGRldmljZSBudW1iZXIgaW50byBlZmZlY3QuICAqLwor CSAgZ29tcF9jb3B5X2hvc3QyZGV2IChkZXZpY2VwLCBOVUxMLCAodm9pZCAqKSBkZXZpY2Vf bnVtX3Zhci0+c3RhcnQsCisJCQkgICAgICAmZGV2aWNlX251bV92YWwsIHNpemVvZiAoaW50 KSwgZmFsc2UsIE5VTEwpOworCX0KKyAgICB9CisKICAgZnJlZSAodGFyZ2V0X3RhYmxlKTsK IH0KIApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliL2xpYmdvbXAuZXhwIGIv bGliZ29tcC90ZXN0c3VpdGUvbGliL2xpYmdvbXAuZXhwCmluZGV4IGEyMDUwMTUxZTg0Li5i YThhNzMyNzVjNSAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0c3VpdGUvbGliL2xpYmdvbXAu ZXhwCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYi9saWJnb21wLmV4cApAQCAtMzc0LDYg KzM3NCwxMSBAQCBwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfb2ZmbG9hZF90YXJnZXRf YW1kZ2NuIHsgfSB7CiAgICAgcmV0dXJuIFtsaWJnb21wX2NoZWNrX2VmZmVjdGl2ZV90YXJn ZXRfb2ZmbG9hZF90YXJnZXQgImFtZGdjbiJdCiB9CiAKKyMgUmV0dXJuIDEgaWYgY29tcGls aW5nIGZvciBvZmZsb2FkIHRhcmdldCBpbnRlbG1pYworcHJvYyBjaGVja19lZmZlY3RpdmVf dGFyZ2V0X29mZmxvYWRfdGFyZ2V0X2ludGVsbWljIHsgfSB7CisgICAgcmV0dXJuIFtsaWJn b21wX2NoZWNrX2VmZmVjdGl2ZV90YXJnZXRfb2ZmbG9hZF90YXJnZXQgIiotaW50ZWxtaWMi XQorfQorCiAjIFJldHVybiAxIGlmIG9mZmxvYWQgZGV2aWNlIGlzIGF2YWlsYWJsZS4KIHBy b2MgY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9vZmZsb2FkX2RldmljZSB7IH0gewogICAgIHJl dHVybiBbY2hlY2tfcnVudGltZV9ub2NhY2hlIG9mZmxvYWRfZGV2aWNlX2F2YWlsYWJsZV8g ewpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24v dGFyZ2V0LTQ1LmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90 YXJnZXQtNDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWMw ZDIwMmU1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21w LmMtYysrLWNvbW1vbi90YXJnZXQtNDUuYwpAQCAtMCwwICsxLDMwIEBACisvKiB7IGRnLWRv IHJ1biB7IHRhcmdldCB7ICEgb2ZmbG9hZF90YXJnZXRfaW50ZWxtaWMgfSB9IH0gKi8KKwor I2luY2x1ZGUgPG9tcC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQgbWFpbiAodm9p ZCkKK3sKKworICBpbnQgaG9zdF9kZXZpY2VfbnVtID0gb21wX2dldF9kZXZpY2VfbnVtICgp OworCisgIGlmIChob3N0X2RldmljZV9udW0gIT0gb21wX2dldF9pbml0aWFsX2RldmljZSAo KSkKKyAgICBhYm9ydCAoKTsKKworICBpbnQgZGV2aWNlX251bTsKKyAgaW50IGluaXRpYWxf ZGV2aWNlOworCisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAoZnJvbTogZGV2aWNlX251bSwg aW5pdGlhbF9kZXZpY2UpCisgIHsKKyAgICBpbml0aWFsX2RldmljZSA9IG9tcF9pc19pbml0 aWFsX2RldmljZSAoKTsKKyAgICBkZXZpY2VfbnVtID0gb21wX2dldF9kZXZpY2VfbnVtICgp OworICB9CisKKyAgaWYgKGluaXRpYWxfZGV2aWNlICYmIGhvc3RfZGV2aWNlX251bSAhPSBk ZXZpY2VfbnVtKQorICAgIGFib3J0ICgpOworCisgIGlmICghaW5pdGlhbF9kZXZpY2UgJiYg aG9zdF9kZXZpY2VfbnVtID09IGRldmljZV9udW0pCisgICAgYWJvcnQgKCk7CisKKyAgcmV0 dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRy YW4vdGFyZ2V0MTAuZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rh cmdldDEwLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTdh NjQyMmZkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21w LmZvcnRyYW4vdGFyZ2V0MTAuZjkwCkBAIC0wLDAgKzEsMjAgQEAKKyEgeyBkZy1kbyBydW4g eyB0YXJnZXQgeyAhIG9mZmxvYWRfdGFyZ2V0X2ludGVsbWljIH0gfSB9CisKK3Byb2dyYW0g bWFpbgorICB1c2Ugb21wX2xpYgorICBpbXBsaWNpdCBub25lCisgIGludGVnZXIgOjogZGV2 aWNlX251bSwgaG9zdF9kZXZpY2VfbnVtCisgIGxvZ2ljYWwgOjogaW5pdGlhbF9kZXZpY2UK KworICBob3N0X2RldmljZV9udW0gPSBvbXBfZ2V0X2RldmljZV9udW0gKCkKKyAgaWYgKGhv c3RfZGV2aWNlX251bSAubmUuIG9tcF9nZXRfaW5pdGlhbF9kZXZpY2UgKCkpIHN0b3AgMQor CisgICEkb21wIHRhcmdldCBtYXAoZnJvbTogZGV2aWNlX251bSwgaW5pdGlhbF9kZXZpY2Up CisgIGluaXRpYWxfZGV2aWNlID0gb21wX2lzX2luaXRpYWxfZGV2aWNlICgpCisgIGRldmlj ZV9udW0gPSBvbXBfZ2V0X2RldmljZV9udW0gKCkKKyAgISRvbXAgZW5kIHRhcmdldAorCisg IGlmIChpbml0aWFsX2RldmljZSAuYW5kLiBob3N0X2RldmljZV9udW0gLm5lLiBkZXZpY2Vf bnVtKSBzdG9wIDIKKyAgaWYgKGluaXRpYWxfZGV2aWNlIC5hbmQuIGhvc3RfZGV2aWNlX251 bSAuZXEuIGRldmljZV9udW0pIHN0b3AgMworCitlbmQgcHJvZ3JhbSBtYWluCg== --------------BF10910E610B4B9186603ED1--