From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DECF6C3F2D1 for ; Mon, 2 Mar 2020 19:27:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 96B8721775 for ; Mon, 2 Mar 2020 19:27:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727432AbgCBT1I (ORCPT ); Mon, 2 Mar 2020 14:27:08 -0500 Received: from mga12.intel.com ([192.55.52.136]:39257 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727126AbgCBT1I (ORCPT ); Mon, 2 Mar 2020 14:27:08 -0500 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Mar 2020 11:27:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,508,1574150400"; d="diff'?scan'208";a="258060506" Received: from jekeller-mobl1.amr.corp.intel.com (HELO [134.134.177.106]) ([134.134.177.106]) by orsmga002.jf.intel.com with ESMTP; 02 Mar 2020 11:27:06 -0800 Subject: Re: [RFC PATCH v2 00/22] devlink region updates To: Jiri Pirko Cc: netdev@vger.kernel.org, valex@mellanox.com, linyunsheng@huawei.com, lihong.yang@intel.com, kuba@kernel.org References: <20200214232223.3442651-1-jacob.e.keller@intel.com> <20200302162758.GA2168@nanopsycho> From: Jacob Keller Organization: Intel Corporation Message-ID: Date: Mon, 2 Mar 2020 11:27:06 -0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: <20200302162758.GA2168@nanopsycho> Content-Type: multipart/mixed; boundary="------------CE1A861DE979DACF802A78BE" Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This is a multi-part message in MIME format. --------------CE1A861DE979DACF802A78BE Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 3/2/2020 8:27 AM, Jiri Pirko wrote: > Sat, Feb 15, 2020 at 12:21:59AM CET, jacob.e.keller@intel.com wrote: >> This is a second revision of the previous RFC series I sent to enable two >> new devlink region features. >> >> The original series can be viewed on the list archives at >> >> https://lore.kernel.org/netdev/20200130225913.1671982-1-jacob.e.keller@intel.com/ >> >> Overall, this series can be broken into 5 phases: >> >> 1) implement basic devlink support in the ice driver, including .info_get >> 2) convert regions to use the new devlink_region_ops structure >> 3) implement support for DEVLINK_CMD_REGION_NEW >> 4) implement support for directly reading from a region >> 5) use these new features in the ice driver for the Shadow RAM region > > Hmm. I think it is better to push this in multiple patchsets. For example, > for 1) you don't really need RFC as it is only related to the ice driver > implementing the existing API. > Yes that's my plan for the next revision. I'm working on getting the ice support ready to submit through IWL now. The other parts I will break into 2 series. > >> >> (1) comprises 6 patches for the ice driver that add the devlink framework >> and cleanup a few places in the code in preparation for the new region. >> >> (2) comprises 2 patches which convert regions to use the new >> devlink_region_ops structure, and additionally move the snapshot destructor >> to a region operation. >> >> (3) comprises 6 patches to enable supporting the DEVLINK_CMD_REGION_NEW >> operation. This replaces what was previously the >> DEVLINK_CMD_REGION_TAKE_SNAPSHOT, as per Jiri's suggestion. The new >> operation supports specifying the requested id for the snapshot. To make >> that possible, first snapshot id management is refactored to use an IDR. >> Note that the extra complexity of the IDR is necessary in order to maintain >> the ability for the snapshot IDs to be generated so that multiple regions >> can use the same ID if triggered at the same time. >> >> (4) comprises 6 patches for modifying DEVLINK_CMD_REGION_READ so that it >> accepts a request without a snapshot id. A new region operation is defined >> for regions to optionally support the requests. The first few patches >> refactor and simplify the functions used so that adding the new read method >> reuses logic where possible. >> >> (5) finally comprises a single patch to implement a region for the ice >> device hardware's Shadow RAM contents. >> >> Note that I plan to submit the ice patches through the Intel Wired LAN list, >> but am sending the complete set here as an RFC in case there is further >> feedback, and so that reviewers can have the correct context. >> >> I expect to get further feedback this RFC revision, and will hopefully send >> the patches as non-RFC following this, if feedback looks good. Thank you for >> the diligent review. >> >> Changes since v1: > > Per-patch please. This is no good for review :/ > I've attached the git range-diff between the v1 and v2 series. I'll keep in mind for future revision logs. Thanks, Jake --------------CE1A861DE979DACF802A78BE Content-Type: text/plain; charset=UTF-8; name="range-diff-since-v1.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="range-diff-since-v1.diff" IDU6ICBkZmUzZjEzZGM3YzggPSAgMTogIDMyODliMGU0NmMxZiBpY2U6IHVzZSBfX2xlMTYg dHlwZXMgZm9yIGV4cGxpY2l0bHkgTGl0dGxlIEVuZGlhbiB2YWx1ZXMKIDY6ICBlZmQyYTc4 ZThmYjYgISAgMjogIGU3MDJjNzczYmY4MSBpY2U6IGNyZWF0ZSBmdW5jdGlvbiB0byByZWFk IGEgc2VjdGlvbiBvZiB0aGUgTlZNIGFuZCBTaGFkb3cgUkFNCiAgICBAQCBkcml2ZXJzL25l dC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOiBpY2VfYXFfcmVhZF9udm0oc3RydWN0 IGljZV9odyAqaHcsIHUxNgogICAgICsgKiBAZGF0YTogYnVmZmVyIHRvIHJldHVybiBkYXRh IGluIChzaXplZCB0byBmaXQgdGhlIHNwZWNpZmllZCBsZW5ndGgpCiAgICAgKyAqIEByZWFk X3NoYWRvd19yYW06IGlmIHRydWUsIHJlYWQgZnJvbSBzaGFkb3cgUkFNIGluc3RlYWQgb2Yg TlZNCiAgICAgKyAqCiAgICAtKyAqIFJlYWRzIGEgcG9ydGlvbiBvZiB0aGUgTlZNLCBhcyBh IGZsYXQgbWVtb3J5IHNwYWNlLiBUaGlzIGZ1bmN0aW9uIHdpbGwKICAgIC0rICogY29ycmVj dGx5IGhhbmRsZSByZWFkaW5nIG9mIHNpemVzIGJleW9uZCBhIHBhZ2UgYnkgYnJlYWtpbmcg dGhlIHJlcXVlc3QKICAgIC0rICogaW50byBtdWx0aXBsZSByZWFkcy4KICAgICsrICogUmVh ZHMgYSBwb3J0aW9uIG9mIHRoZSBOVk0sIGFzIGEgZmxhdCBtZW1vcnkgc3BhY2UuIFRoaXMg ZnVuY3Rpb24gY29ycmVjdGx5CiAgICArKyAqIGJyZWFrcyByZWFkIHJlcXVlc3RzIGFjcm9z cyBTaGFkb3cgUkFNIHNlY3RvcnMgYW5kIGVuc3VyZXMgdGhhdCBubyBzaW5nbGUKICAgICsr ICogcmVhZCByZXF1ZXN0IGV4Y2VlZHMgdGhlIG1heGltdW0gNEtiIHJlYWQgZm9yIGEgc2lu Z2xlIEFkbWluUSBjb21tYW5kLgogICAgICsgKgogICAgICsgKiBSZXR1cm5zIGEgc3RhdHVz IGNvZGUgb24gZmFpbHVyZS4gTm90ZSB0aGF0IHRoZSBkYXRhIHBvaW50ZXIgbWF5IGJlCiAg ICAgKyAqIHBhcnRpYWxseSB1cGRhdGVkIGlmIHNvbWUgcmVhZHMgc3VjY2VlZCBiZWZvcmUg YSBmYWlsdXJlLgogICAgQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9u dm0uYzogaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYKICAgICArCQkg IGJvb2wgcmVhZF9zaGFkb3dfcmFtKQogICAgICt7CiAgICAgKwllbnVtIGljZV9zdGF0dXMg c3RhdHVzOwogICAgLSsJYm9vbCBsYXN0X2NtZCA9IHRydWU7CiAgICAgKwl1MzIgaW5sZW4g PSAqbGVuZ3RoOwogICAgICsJdTMyIGJ5dGVzX3JlYWQgPSAwOwogICAgKysJYm9vbCBsYXN0 X2NtZDsKICAgICArCiAgICAgKwkqbGVuZ3RoID0gMDsKICAgICArCiAgICAgKwkvKiBWZXJp ZnkgdGhlIGxlbmd0aCBvZiB0aGUgcmVhZCBpZiB0aGlzIGlzIGZvciB0aGUgU2hhZG93IFJB TSAqLwogICAgLSsJaWYgKHJlYWRfc2hhZG93X3JhbSAmJiAoKG9mZnNldCArIGlubGVuKSA+ IChody0+bnZtLnNyX3dvcmRzICogMikpKSB7CiAgICArKwlpZiAocmVhZF9zaGFkb3dfcmFt ICYmICgob2Zmc2V0ICsgaW5sZW4pID4gKGh3LT5udm0uc3Jfd29yZHMgKiAydSkpKSB7CiAg ICAgKwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX05WTSwKICAgICArCQkJICAiTlZNIGVycm9y OiByZXF1ZXN0ZWQgb2Zmc2V0IGlzIGJleW9uZCBTaGFkb3cgUkFNIGxpbWl0XG4iKTsKICAg ICArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsKICAgICArCX0KICAgICArCiAgICAgKwlkbyB7 CiAgICAtKwkJdTMyIHJlYWRfc2l6ZSwgcGFnZV9vZmZzZXQ7CiAgICArKwkJdTMyIHJlYWRf c2l6ZSwgc2VjdG9yX29mZnNldDsKICAgICArCiAgICAgKwkJLyogaWNlX2FxX3JlYWRfbnZt IGNhbm5vdCByZWFkIG1vcmUgdGhhbiA0S2IgYXQgYSB0aW1lLgogICAgLSsJCSAqIEFkZGl0 aW9uYWxseSwgYnJlYWsgdGhlIHJlYWRzIHVwIHNvIHRoYXQgdGhleSBkbyBub3QgY3Jvc3MK ICAgIC0rCQkgKiBhIHBhZ2UgYm91bmRhcnkuCiAgICArKwkJICogQWRkaXRpb25hbGx5LCBh IHJlYWQgZnJvbSB0aGUgU2hhZG93IFJBTSBtYXkgbm90IGNyb3NzIG92ZXIKICAgICsrCQkg KiBhIHNlY3RvciBib3VuZGFyeS4gQ29udmVuaWVudGx5LCB0aGUgc2VjdG9yIHNpemUgaXMg YWxzbwogICAgKysJCSAqIDRLYi4KICAgICArCQkgKi8KICAgIC0rCQlwYWdlX29mZnNldCA9 IG9mZnNldCAlIElDRV9BUV9NQVhfQlVGX0xFTjsKICAgIC0rCQlyZWFkX3NpemUgPSBtaW5f dCh1MzIsIElDRV9BUV9NQVhfQlVGX0xFTiAtIHBhZ2Vfb2Zmc2V0LAogICAgKysJCXNlY3Rv cl9vZmZzZXQgPSBvZmZzZXQgJSBJQ0VfQVFfTUFYX0JVRl9MRU47CiAgICArKwkJcmVhZF9z aXplID0gbWluX3QodTMyLCBJQ0VfQVFfTUFYX0JVRl9MRU4gLSBzZWN0b3Jfb2Zmc2V0LAog ICAgICsJCQkJICBpbmxlbiAtIGJ5dGVzX3JlYWQpOwogICAgICsKICAgIC0rCQlpZiAoKGJ5 dGVzX3JlYWQgKyByZWFkX3NpemUpIDwgaW5sZW4pCiAgICAtKwkJCWxhc3RfY21kID0gZmFs c2U7CiAgICArKwkJbGFzdF9jbWQgPSAhKGJ5dGVzX3JlYWQgKyByZWFkX3NpemUgPCBpbmxl bik7CiAgICAgKwogICAgICsJCXN0YXR1cyA9IGljZV9hcV9yZWFkX252bShodywgSUNFX0FR Q19OVk1fU1RBUlRfUE9JTlQsCiAgICAgKwkJCQkJIG9mZnNldCwgcmVhZF9zaXplLAogICAg QEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzogaWNlX3JlYWRf c3JfYXEoc3RydWN0IGljZV9odyAqaHcsIHUzMgogICAgIC0Jc3RhdHVzID0gaWNlX3JlYWRf c3JfYXEoaHcsIG9mZnNldCwgMSwgJmRhdGFfbG9jYWwsIHRydWUpOwogICAgIC0JaWYgKCFz dGF0dXMpCiAgICAgLQkJKmRhdGEgPSBsZTE2X3RvX2NwdShkYXRhX2xvY2FsKTsKICAgIC0r CS8qIE5vdGUgdGhhdCBpY2VfcmVhZF9mbGF0X252bSBjaGVja3MgaWYgdGhlIHJlYWQgaXMg cGFzdCB0aGUgU2hhZG93CiAgICAtKwkgKiBSQU0gc2l6ZSwgYW5kIGVuc3VyZXMgd2UgZG9u J3QgcmVhZCBhY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5CiAgICArKwkvKiBOb3RlIHRoYXQgaWNl X3JlYWRfZmxhdF9udm0gdGFrZXMgaW50byBhY2NvdW50IHRoZSA0S2IgQWRtaW5RIGFuZAog ICAgKysJICogU2hhZG93IFJBTSBzZWN0b3IgcmVzdHJpY3Rpb25zIG5lY2Vzc2FyeSB3aGVu IHJlYWRpbmcgZnJvbSB0aGUgTlZNLgogICAgICsJICovCiAgICAgKwlzdGF0dXMgPSBpY2Vf cmVhZF9mbGF0X252bShodywgb2Zmc2V0ICogc2l6ZW9mKHUxNiksICZieXRlcywKICAgICAr CQkJCSAgICh1OCAqKSZkYXRhX2xvY2FsLCB0cnVlKTsKIDc6ICA1ZjRmNmJhMGU1NjEgPSAg MzogIDU0ZWYzMWI0NjllZSBpY2U6IGltcGxlbWVudCBmdWxsIE5WTSByZWFkIGZyb20gRVRI VE9PTF9HRUVQUk9NCiA5OiAgNmJjNDU5YzdhZGU3ICEgIDQ6ICA1ODA1OWVmYjU5MzYgaWNl OiBlbmFibGUgaW5pdGlhbCBkZXZsaW5rIHN1cHBvcnQKICAgIEBAIENvbW1pdCBtZXNzYWdl CiAgICAgICAgIGljZTogZW5hYmxlIGluaXRpYWwgZGV2bGluayBzdXBwb3J0CiAgICAgCiAg ICAgICAgIEJlZ2luIGltcGxlbWVudGluZyBzdXBwb3J0IGZvciB0aGUgZGV2bGluayBpbnRl cmZhY2Ugd2l0aCB0aGUgaWNlCiAgICAtICAgIGRyaXZlci4gVXNlIGRldmxpbmttX2FsbG9j IHRvIGFsbG9jYXRlIHRoZSBkZXZsaW5rIG1lbW9yeS4gVGhlIFBGCiAgICAtICAgIHByaXZh dGUgZGF0YSBzdHJ1Y3R1cmUgaXMgbm93IGFsbG9jYXRlZCBhcyBwYXJ0IG9mIHRoZSBkZXZs aW5rIGluc3RlYWQKICAgIC0gICAgb2YgYXMgYSBzdGFuZGFsb25lIGFsbG9jYXRpb24uCiAg ICArICAgIGRyaXZlci4KICAgICsKICAgICsgICAgVGhlIHBmIHN0cnVjdHVyZSBpcyBjdXJy ZW50bHkgbWVtb3J5IG1hbmFnZWQgdGhyb3VnaCBkZXZyZXMsIHZpYQogICAgKyAgICBhIGRl dm1fYWxsb2MuIFRvIG1pbWljIHRoaXMgYmVoYXZpb3IsIGFmdGVyIGFsbG9jYXRpbmcgdGhl IGRldmxpbmsKICAgICsgICAgcG9pbnRlciwgdXNlIGRldm1fYWRkX2FjdGlvbiB0byBhZGQg YSB0ZWFyZG93biBhY3Rpb24gZm9yIHJlbGVhc2luZyB0aGUKICAgICsgICAgZGV2bGluayBt ZW1vcnkgb24gZXhpdC4KICAgICAKICAgICAgICAgVGhlIGljZSBoYXJkd2FyZSBpcyBhIG11 bHRpLWZ1bmN0aW9uIFBDSWUgZGV2aWNlLiBUaHVzLCBlYWNoIHBoeXNpY2FsCiAgICAgICAg IGZ1bmN0aW9uIHdpbGwgZ2V0IGl0cyBvd24gZGV2bGluayBpbnN0YW5jZS4gVGhpcyBtZWFu cyB0aGF0IGVhY2gKICAgIEBAIENvbW1pdCBtZXNzYWdlCiAgICAgICAgIGNvbmZpZ3VyYXRp b24uIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHRoZSBpY2UgZHJpdmVyIGxvYWRzIGEgc2VwYXJh dGUKICAgICAgICAgaW5zdGFuY2UgZm9yIGVhY2ggZnVuY3Rpb24uCiAgICAgCiAgICAtICAg IFRoYXQgbWVhbnMgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGVuYWJsZSBk ZXZsaW5rIHRvIG1hbmFnZQogICAgKyAgICBEdWUgdG8gdGhpcywgdGhlIGltcGxlbWVudGF0 aW9uIGRvZXMgbm90IGVuYWJsZSBkZXZsaW5rIHRvIG1hbmFnZQogICAgICAgICBkZXZpY2Ut d2lkZSByZXNvdXJjZXMgb3IgY29uZmlndXJhdGlvbiwgYXMgZWFjaCBwaHlzaWNhbCBmdW5j dGlvbiB3aWxsCiAgICAgICAgIGJlIHRyZWF0ZWQgaW5kZXBlbmRlbnRseS4gVGhpcyBpcyBk b25lIGZvciBzaW1wbGljaXR5LCBhcyBtYW5hZ2luZwogICAgICAgICBhIGRldmxpbmsgaW5z dGFuY2UgYWNyb3NzIG11bHRpcGxlIGRyaXZlciBpbnN0YW5jZXMgd291bGQgc2lnbmlmaWNh bnRseQogICAgQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZXZsaW5r LmMgKG5ldykKICAgICArY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGljZV9kZXZsaW5rX29w cyA9IHsKICAgICArfTsKICAgICArCiAgICArK3N0YXRpYyB2b2lkIGljZV9kZXZsaW5rX2Zy ZWUodm9pZCAqZGV2bGlua19wdHIpCiAgICArK3sKICAgICsrCWRldmxpbmtfZnJlZSgoc3Ry dWN0IGRldmxpbmsgKilkZXZsaW5rX3B0cik7CiAgICArK30KICAgICsrCiAgICArKy8qKgog ICAgKysgKiBpY2VfYWxsb2NhdGVfcGYgLSBBbGxvY2F0ZSBkZXZsaW5rIGFuZCByZXR1cm4g UEYgc3RydWN0dXJlIHBvaW50ZXIKICAgICsrICogQGRldjogdGhlIGRldmljZSB0byBhbGxv Y2F0ZSBmb3IKICAgICsrICoKICAgICsrICogQWxsb2NhdGUgYSBkZXZsaW5rIGluc3RhbmNl IGZvciB0aGlzIGRldmljZSBhbmQgcmV0dXJuIHRoZSBwcml2YXRlIGFyZWEgYXMKICAgICsr ICogdGhlIFBGIHN0cnVjdHVyZS4gVGhlIGRldmxpbmsgbWVtb3J5IGlzIGtlcHQgdHJhY2sg b2YgdGhyb3VnaCBkZXZyZXMgYnkKICAgICsrICogYWRkaW5nIGFuIGFjdGlvbiB0byByZW1v dmUgaXQgd2hlbiB1bndpbmRpbmcuCiAgICArKyAqLwogICAgKytzdHJ1Y3QgaWNlX3BmICpp Y2VfYWxsb2NhdGVfcGYoc3RydWN0IGRldmljZSAqZGV2KQogICAgKyt7CiAgICArKwlzdHJ1 Y3QgZGV2bGluayAqZGV2bGluazsKICAgICsrCiAgICArKwlkZXZsaW5rID0gZGV2bGlua19h bGxvYygmaWNlX2Rldmxpbmtfb3BzLCBzaXplb2Yoc3RydWN0IGljZV9wZikpOwogICAgKysJ aWYgKCFkZXZsaW5rKQogICAgKysJCXJldHVybiBOVUxMOwogICAgKysKICAgICsrCS8qIEFk ZCBhbiBhY3Rpb24gdG8gdGVhcmRvd24gdGhlIGRldmxpbmsgd2hlbiB1bndpbmRpbmcgdGhl IGRyaXZlciAqLwogICAgKysJaWYgKGRldm1fYWRkX2FjdGlvbihkZXYsIGljZV9kZXZsaW5r X2ZyZWUsIGRldmxpbmspKSB7CiAgICArKwkJZGV2bGlua19mcmVlKGRldmxpbmspOwogICAg KysJCXJldHVybiBOVUxMOwogICAgKysJfQogICAgKysKICAgICsrCXJldHVybiBkZXZsaW5r X3ByaXYoZGV2bGluayk7CiAgICArK30KICAgICsrCiAgICAgKy8qKgogICAgICsgKiBpY2Vf ZGV2bGlua19yZWdpc3RlciAtIFJlZ2lzdGVyIGRldmxpbmsgaW50ZXJmYWNlIGZvciB0aGlz IFBGCiAgICAgKyAqIEBwZjogdGhlIFBGIHRvIHJlZ2lzdGVyIHRoZSBkZXZsaW5rIGZvci4K ICAgIEBAIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGV2bGluay5jIChu ZXcpCiAgICAgK30KICAgICArCiAgICAgKy8qKgogICAgLSsgKiBpY2VfZGV2bGlua191bnJl Z2lzdGVyIC0gVW5yZWdpc3RlciBkZXZsaW5rIHJlc291cmNlcyBmb3IgdGhpcyBwZi4KICAg ICsrICogaWNlX2RldmxpbmtfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgZGV2bGluayByZXNv dXJjZXMgZm9yIHRoaXMgUEYuCiAgICAgKyAqIEBwZjogdGhlIFBGIHN0cnVjdHVyZSB0byBj bGVhbnVwCiAgICAgKyAqCiAgICAgKyAqIFJlbGVhc2VzIHJlc291cmNlcyB1c2VkIGJ5IGRl dmxpbmsgYW5kIGNsZWFucyB1cCBhc3NvY2lhdGVkIG1lbW9yeS4KICAgIEBAIGRyaXZlcnMv bmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGV2bGluay5jIChuZXcpCiAgICAgKyAqIEBw ZjogdGhlIFBGIHRvIGNyZWF0ZSBhIHBvcnQgZm9yCiAgICAgKyAqCiAgICAgKyAqIENyZWF0 ZSBhbmQgcmVnaXN0ZXIgYSBkZXZsaW5rX3BvcnQgZm9yIHRoaXMgUEYuIE5vdGUgdGhhdCBh bHRob3VnaCBlYWNoCiAgICAtKyAqIHBoeXNpY2FsIGZ1bmN0aW9uIGNvbm5lY3RlZCB0byBh IHNlcGFyYXRlIGRldmxpbmsgaW5zdGFuY2UsIHRoZSBwb3J0IHdpbGwKICAgIC0rICogc3Rp bGwgYmUgbnVtYmVyZWQgYWNjb3JkaW5nIHRvIHRoZSBwaHlzaWNhbCBmdW5jdGlvbiBpZC4K ICAgICsrICogcGh5c2ljYWwgZnVuY3Rpb24gaXMgY29ubmVjdGVkIHRvIGEgc2VwYXJhdGUg ZGV2bGluayBpbnN0YW5jZSwgdGhlIHBvcnQKICAgICsrICogd2lsbCBzdGlsbCBiZSBudW1i ZXJlZCBhY2NvcmRpbmcgdG8gdGhlIHBoeXNpY2FsIGZ1bmN0aW9uIGlkLgogICAgICsgKgog ICAgICsgKiBAcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvbiBm YWlsdXJlLgogICAgICsgKi8KICAgIEBAIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lj ZS9pY2VfZGV2bGluay5jIChuZXcpCiAgICAgKwlpbnQgZXJyOwogICAgICsKICAgICArCWlm ICghdnNpKSB7CiAgICAtKwkJZGV2X3dhcm4oZGV2LCAiJXM6IHVuYWJsZSB0byBmaW5kIG1h aW4gVlNJXG4iLCBfX2Z1bmNfXyk7CiAgICArKwkJZGV2X2VycihkZXYsICIlczogdW5hYmxl IHRvIGZpbmQgbWFpbiBWU0lcbiIsIF9fZnVuY19fKTsKICAgICArCQlyZXR1cm4gLUVJTzsK ICAgICArCX0KICAgICArCiAgICBAQCBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2Uv aWNlX2RldmxpbmsuYyAobmV3KQogICAgICsJCWRldl9lcnIoZGV2LCAiZGV2bGlua19wb3J0 X3JlZ2lzdGVyIGZhaWxlZDogJWRcbiIsIGVycik7CiAgICAgKwkJcmV0dXJuIGVycjsKICAg ICArCX0KICAgIC0rCWRldmxpbmtfcG9ydF90eXBlX2V0aF9zZXQoJnBmLT5kZXZsaW5rX3Bv cnQsIHZzaS0+bmV0ZGV2KTsKICAgICsrCWlmICh2c2ktPm5ldGRldikKICAgICsrCQlkZXZs aW5rX3BvcnRfdHlwZV9ldGhfc2V0KCZwZi0+ZGV2bGlua19wb3J0LCB2c2ktPm5ldGRldik7 CiAgICAgKwogICAgICsJcmV0dXJuIDA7CiAgICAgK30KICAgIEBAIGRyaXZlcnMvbmV0L2V0 aGVybmV0L2ludGVsL2ljZS9pY2VfZGV2bGluay5oIChuZXcpCiAgICAgKyNpZm5kZWYgX0lD RV9ERVZMSU5LX0hfCiAgICAgKyNkZWZpbmUgX0lDRV9ERVZMSU5LX0hfCiAgICAgKwogICAg LStleHRlcm4gY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGljZV9kZXZsaW5rX29wczsKICAg ICsrc3RydWN0IGljZV9wZiAqaWNlX2FsbG9jYXRlX3BmKHN0cnVjdCBkZXZpY2UgKmRldik7 CiAgICAgKwogICAgICtpbnQgaWNlX2RldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGljZV9wZiAq cGYpOwogICAgICt2b2lkIGljZV9kZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGljZV9wZiAq cGYpOwogICAgQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMK ICAgICAgCiAgICAgICNkZWZpbmUgRFJWX1ZFUlNJT05fTUFKT1IgMAogICAgICAjZGVmaW5l IERSVl9WRVJTSU9OX01JTk9SIDgKICAgIC1AQCBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRl bC9pY2UvaWNlX21haW4uYzogc3RhdGljIGludCBpY2Vfc2V0dXBfcGZfc3coc3RydWN0IGlj ZV9wZiAqcGYpCiAgICAtIAkJc3RhdHVzID0gLUVOT0RFVjsKICAgIC0gCQlnb3RvIHVucm9s bF92c2lfc2V0dXA7CiAgICAtIAl9CiAgICAtKwogICAgLSsJc3RhdHVzID0gaWNlX2Rldmxp bmtfY3JlYXRlX3BvcnQocGYpOwogICAgLSsJaWYgKHN0YXR1cykKICAgIC0rCQlnb3RvIHVu cm9sbF92c2lfc2V0dXA7CiAgICAtKwogICAgLSAJLyogbmV0ZGV2IGhhcyB0byBiZSBjb25m aWd1cmVkIGJlZm9yZSBzZXR0aW5nIGZyYW1lIHNpemUgKi8KICAgIC0gCWljZV92c2lfY2Zn X2ZyYW1lX3NpemUodnNpKTsKICAgIC0gCiAgICAtQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQv aW50ZWwvaWNlL2ljZV9tYWluLmM6IHN0YXRpYyBpbnQgaWNlX3NldHVwX3BmX3N3KHN0cnVj dCBpY2VfcGYgKnBmKQogICAgLSAJCX0KICAgIC0gCX0KICAgIC0gCiAgICAtKwlpY2VfZGV2 bGlua19kZXN0cm95X3BvcnQocGYpOwogICAgLSsKICAgIC0gdW5yb2xsX3ZzaV9zZXR1cDoK ICAgIC0gCWlmICh2c2kpIHsKICAgIC0gCQlpY2VfdnNpX2ZyZWVfcV92ZWN0b3JzKHZzaSk7 CiAgICAtQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6IHN0 YXRpYyBpbnQKICAgIC0gaWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBz dHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudCkKICAgIC0gewogICAg LSAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKICAgIC0rCXN0cnVjdCBkZXZs aW5rICpkZXZsaW5rOwogICAgLSAJc3RydWN0IGljZV9wZiAqcGY7CiAgICAtIAlzdHJ1Y3Qg aWNlX2h3ICpodzsKICAgIC0gCWludCBlcnI7CiAgICAgQEAgZHJpdmVycy9uZXQvZXRoZXJu ZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6IGljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRl diwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpCiAg ICAgIAkJcmV0dXJuIGVycjsKICAgICAgCX0KICAgICAgCiAgICAgLQlwZiA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqcGYpLCBHRlBfS0VSTkVMKTsKICAgIC0tCWlmICghcGYpCiAg ICAtKwlkZXZsaW5rID0gZGV2bGlua21fYWxsb2MoZGV2LCAmaWNlX2Rldmxpbmtfb3BzLCBz aXplb2YoKnBmKSk7CiAgICAtKwlpZiAoIWRldmxpbmspIHsKICAgIC0rCQlkZXZfZXJyKGRl diwgImRldmxpbmsgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogICAgKysJcGYgPSBpY2VfYWxs b2NhdGVfcGYoZGV2KTsKICAgICsgCWlmICghcGYpCiAgICAgIAkJcmV0dXJuIC1FTk9NRU07 CiAgICAtKwl9CiAgICAgIAogICAgLSAJLyogc2V0IHVwIGZvciBoaWdoIG9yIGxvdyBETUEg Ki8KICAgIC0gCWVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklU X01BU0soNjQpKTsKICAgIC1AQCBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNl X21haW4uYzogaWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3Qg cGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudCkKICAgIC0gCXBjaV9lbmFibGVf cGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CiAgICAtIAlwY2lfc2V0X21hc3RlcihwZGV2 KTsKICAgIC0gCiAgICAtKwlwZiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTsKICAgIC0gCXBm LT5wZGV2ID0gcGRldjsKICAgIC0gCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwZik7CiAgICAt IAlzZXRfYml0KF9fSUNFX0RPV04sIHBmLT5zdGF0ZSk7CiAgICAgQEAgZHJpdmVycy9uZXQv ZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6IGljZV9wcm9iZShzdHJ1Y3QgcGNpX2Rl diAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICpl bnQpCiAgICAgIAogICAgICAJcGYtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1 ZywgSUNFX0RGTFRfTkVUSUZfTSk7CiAgICBAQCBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRl bC9pY2UvaWNlX21haW4uYzogaWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25z dAogICAgICAjaWZuZGVmIENPTkZJR19EWU5BTUlDX0RFQlVHCiAgICAgIAlpZiAoZGVidWcg PCAtMSkKICAgICAgCQlody0+ZGVidWdfbWFzayA9IGRlYnVnOwogICAgK0BAIGRyaXZlcnMv bmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOiBpY2VfcHJvYmUoc3RydWN0IHBj aV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNl ZCAqZW50KQogICAgKyAJCWdvdG8gZXJyX2FsbG9jX3N3X3Vucm9sbDsKICAgICsgCX0KICAg ICsgCiAgICArKwllcnIgPSBpY2VfZGV2bGlua19jcmVhdGVfcG9ydChwZik7CiAgICArKwlp ZiAoZXJyKQogICAgKysJCWdvdG8gZXJyX2FsbG9jX3N3X3Vucm9sbDsKICAgICsrCiAgICAr KwogICAgKyAJY2xlYXJfYml0KF9fSUNFX1NFUlZJQ0VfRElTLCBwZi0+c3RhdGUpOwogICAg KyAKICAgICsgCS8qIHRlbGwgdGhlIGZpcm13YXJlIHdlIGFyZSB1cCAqLwogICAgK0BAIGRy aXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOiBpY2VfcHJvYmUoc3Ry dWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlz X3VudXNlZCAqZW50KQogICAgKyAJcmV0dXJuIDA7CiAgICArIAogICAgKyBlcnJfYWxsb2Nf c3dfdW5yb2xsOgogICAgKysJaWNlX2RldmxpbmtfZGVzdHJveV9wb3J0KHBmKTsKICAgICsg CXNldF9iaXQoX19JQ0VfU0VSVklDRV9ESVMsIHBmLT5zdGF0ZSk7CiAgICArIAlzZXRfYml0 KF9fSUNFX0RPV04sIHBmLT5zdGF0ZSk7CiAgICArIAlkZXZtX2tmcmVlKGRldiwgcGYtPmZp cnN0X3N3KTsKICAgICBAQCBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21h aW4uYzogaWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNp X2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudCkKICAgICAgCWljZV9kZWluaXRfcGYo cGYpOwogICAgICAJaWNlX2RlaW5pdF9odyhodyk7CiAtOiAgLS0tLS0tLS0tLS0tID4gIDU6 ICAwYjIyOTAxZGRjOWEgaWNlOiByZW5hbWUgdmFyaWFibGVzIHVzZWQgZm9yIE9wdGlvbiBS T00gdmVyc2lvbgogLTogIC0tLS0tLS0tLS0tLSA+ICA2OiAgOTRlMTg3ZmY5ZjRkIGljZTog YWRkIGJhc2ljIGhhbmRsZXIgZm9yIGRldmxpbmsgLmluZm9fZ2V0CjExOiAgZTM4NjExOWFi YmZiICEgIDc6ICA1OTQwOGU2NjZiMjYgaWNlOiBhZGQgYm9hcmQgaWRlbnRpZmllciBpbmZv IHRvIGRldmxpbmsgLmluZm9fZ2V0CiAgICBAQCBDb21taXQgbWVzc2FnZQogICAgIAogICAg ICAgICBTaWduZWQtb2ZmLWJ5OiBKYWNvYiBLZWxsZXIgPGphY29iLmUua2VsbGVyQGludGVs LmNvbT4KICAgICAKICAgICsgIyMgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldmxpbmsv aWNlLnJzdCAjIwogICAgK0BAIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2lj ZS5yc3Q6IFRoZSBgYGljZWBgIGRyaXZlciByZXBvcnRzIHRoZSBmb2xsb3dpbmcgdmVyc2lv bnMKICAgICsgICAgICAgLSBUeXBlCiAgICArICAgICAgIC0gRXhhbXBsZQogICAgKyAgICAg ICAtIERlc2NyaXB0aW9uCiAgICArKyAgICAqIC0gYGBib2FyZC5pZGBgCiAgICArKyAgICAg IC0gZml4ZWQKICAgICsrICAgICAgLSBLNjUzOTAtMDAwCiAgICArKyAgICAgIC0gVGhlIFBy b2R1Y3QgQm9hcmQgQXNzZW1ibHkgKFBCQSkgaWRlbnRpZmllciBvZiB0aGUgYm9hcmQuCiAg ICArICAgICAqIC0gYGBmdy5tZ210YGAKICAgICsgICAgICAgLSBydW5uaW5nCiAgICArICAg ICAgIC0gMS4xNi4xMAogICAgK0BAIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5r L2ljZS5yc3Q6IFRoZSBgYGljZWBgIGRyaXZlciByZXBvcnRzIHRoZSBmb2xsb3dpbmcgdmVy c2lvbnMKICAgICsgICAgICAgICBhcmUgc3VwcG9ydGVkLgogICAgKyAgICAgKiAtIGBgZncu bWdtdC5idW5kbGVgYAogICAgKyAgICAgICAtIHJ1bm5pbmcKICAgICstICAgICAgLSBlY2Fi ZDA2NgogICAgKy0gICAgICAtIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBtYW5hZ2VtZW50 IGZpcm13YXJlLgogICAgKysgICAgICAtIDB4ZWNhYmQwNjYKICAgICsrICAgICAgLSBVbmlx dWUgaWRlbnRpZmllciBvZiB0aGUgbWFuYWdlbWVudCBmaXJtd2FyZSBidWlsZC4KICAgICsg ICAgICogLSBgYGZ3LnVuZGkub3JvbWBgCiAgICArICAgICAgIC0gcnVubmluZwogICAgKyAg ICAgICAtIDEuMjE4Ni4wCiAgICArICAgICAgIC0gVmVyc2lvbiBvZiB0aGUgT3B0aW9uIFJP TSBjb250YWluaW5nIHRoZSBVRUZJIGRyaXZlci4gVGhlIHZlcnNpb24gaXMKICAgICsgICAg ICAgICByZXBvcnRlZCBpbiBgYG1ham9yLm1pbm9yLnBhdGNoYGAgZm9ybWF0LiBUaGUgbWFq b3IgdmVyc2lvbiBpcwogICAgKy0gICAgICAgIGluY3JlbWVudGVkIHdoZW5ldmVyIGEgbWFq b3IgYnJlYWtpbmcgY2hhbmdlIG9jY3Vycywgb3Igd2hlbgogICAgKy0gICAgICAgIHRoZSBt aW5vciB2ZXJzaW9uIHdvdWxkIG92ZXJmbG93LiBUaGUgbWlub3IgdmVyc2lvbiBpcyBpbmNy ZW1lbnRlZAogICAgKy0gICAgICAgIGZvciBub24tYnJlYWtpbmcgY2hhbmdlcywgYW5kIGlz IHJlc2V0IHRvIDEgd2hlbiB0aGUgbWFqb3IgdmVyc2lvbgogICAgKy0gICAgICAgIGlzIGlu Y3JlbWVudGVkLiBUaGUgcGF0Y2ggdmVyc2lvbiBpcyBub3JtYWxseSAwIGJ1dCBpcyBpbmNy ZW1lbnRlZAogICAgKy0gICAgICAgIHdoZW4gYSBmaXggaXMgZGVsaXZlcmVkIGFzIGEgcGF0 Y2ggYWdhaW5zdCBhbiBvbGRlciBiYXNlIE9wdGlvbiBST00uCiAgICArKyAgICAgICAgaW5j cmVtZW50ZWQgd2hlbmV2ZXIgYSBtYWpvciBicmVha2luZyBjaGFuZ2Ugb2NjdXJzLCBvciB3 aGVuIHRoZQogICAgKysgICAgICAgIG1pbm9yIHZlcnNpb24gd291bGQgb3ZlcmZsb3cuIFRo ZSBtaW5vciB2ZXJzaW9uIGlzIGluY3JlbWVudGVkIGZvcgogICAgKysgICAgICAgIG5vbi1i cmVha2luZyBjaGFuZ2VzIGFuZCByZXNldCB0byAxIHdoZW4gdGhlIG1ham9yIHZlcnNpb24g aXMKICAgICsrICAgICAgICBpbmNyZW1lbnRlZC4gVGhlIHBhdGNoIHZlcnNpb24gaXMgbm9y bWFsbHkgMCBidXQgaXMgaW5jcmVtZW50ZWQgd2hlbgogICAgKysgICAgICAgIGEgZml4IGlz IGRlbGl2ZXJlZCBhcyBhIHBhdGNoIGFnYWluc3QgYW4gb2xkZXIgYmFzZSBPcHRpb24gUk9N LgogICAgKyAgICAgKiAtIGBgbnZtLnBzaWRgYAogICAgKyAgICAgICAtIHJ1bm5pbmcKICAg ICsgICAgICAgLSAwLjUwCiAgICArLSAgICAgIC0gVmVyc2lvbiBvZiB0aGUgZm9ybWF0IGZv ciB0aGUgTlZNIHBhcmFtZXRlciBzZXQKICAgICsrICAgICAgLSBWZXJzaW9uIGRlc2NyaWJp bmcgdGhlIGZvcm1hdCBvZiB0aGUgTlZNIHBhcmFtZXRlciBzZXQuCiAgICArICAgICAqIC0g YGBudm0uYnVuZGxlYGAKICAgICsgICAgICAgLSBydW5uaW5nCiAgICArICAgICAgIC0gMHg4 MDAwMTcwOQogICAgKy0gICAgICAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZW50aXJl IE5WTSBpbWFnZSBjb250ZW50cywgYWxzbyBrbm93biBhcwogICAgKy0gICAgICAgIHRoZSBF RVRSQUNLIGlkLgogICAgKysgICAgICAtIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBOVk0g aW1hZ2UgY29udGVudHMsIGFsc28ga25vd24gYXMgdGhlCiAgICArKyAgICAgICAgRUVUUkFD SyBpZC4KICAgICsKICAgICAgIyMgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2lj ZV9jb21tb24uYyAjIwogICAgIEBAIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9p Y2VfY29tbW9uLmM6IGVudW0gaWNlX3N0YXR1cyBpY2VfcmVzZXQoc3RydWN0IGljZV9odyAq aHcsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXEpCiAgICAgIAlyZXR1cm4gaWNlX2NoZWNrX3Jl c2V0KGh3KTsKICAgIEBAIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29t bW9uLmg6IGVudW0gaWNlX3N0YXR1cyBpY2VfbnZtX3ZhbGlkYXRlX2NoCiAgICAgCiAgICAg ICMjIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGV2bGluay5jICMjCiAg ICAgQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZXZsaW5rLmM6IHN0 YXRpYyBpbnQgaWNlX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmss CiAgICAtIAl1OCBvZW1fdmVyLCBvZW1fcGF0Y2gsIG52bV92ZXJfaGksIG52bV92ZXJfbG87 CiAgICArIAl1OCBvcm9tX21haiwgb3JvbV9wYXRjaCwgbnZtX3Zlcl9oaSwgbnZtX3Zlcl9s bzsKICAgICAgCXN0cnVjdCBpY2VfcGYgKnBmID0gZGV2bGlua19wcml2KGRldmxpbmspOwog ICAgICAJc3RydWN0IGljZV9odyAqaHcgPSAmcGYtPmh3OwogICAgICsJZW51bSBpY2Vfc3Rh dHVzIHN0YXR1czsKICAgIC0gCXUxNiBvZW1fYnVpbGQ7CiAgICAtIAljaGFyIGJ1ZlszMl07 IC8qIFRPRE86IHNpemUgdGhpcyBwcm9wZXJseSAqLwogICAgKyAJdTE2IG9yb21fbWluOwog ICAgKy0JY2hhciBidWZbMzJdOyAvKiBUT0RPOiBzaXplIHRoaXMgcHJvcGVybHkgKi8KICAg ICsrCWNoYXIgYnVmWzMyXTsKICAgICAgCWludCBlcnI7CiAgICArIAogICAgKyAJaWNlX2dl dF9udm1fdmVyc2lvbihodywgJm9yb21fbWFqLCAmb3JvbV9taW4sICZvcm9tX3BhdGNoLCAm bnZtX3Zlcl9oaSwKICAgICBAQCBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNl X2RldmxpbmsuYzogc3RhdGljIGludCBpY2VfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2 bGluayAqZGV2bGluaywKICAgICAgCQlyZXR1cm4gZXJyOwogICAgICAJfQogICAgQEAgZHJp dmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZXZsaW5rLmM6IHN0YXRpYyBpbnQg aWNlX2RldmxpbmtfaW5mb19nZXQoc3QKICAgICArCQlyZXR1cm4gLUVJTzsKICAgICArCX0K ICAgICArCiAgICAtKwkvKiBib2FyZC5pZCAoREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJ Q19CT0FSRF9JRCkgKi8KICAgIC0rCWVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVk X3B1dChyZXEsICJib2FyZC5pZCIsIGJ1Zik7CiAgICArKwllcnIgPSBkZXZsaW5rX2luZm9f dmVyc2lvbl9maXhlZF9wdXQocmVxLAogICAgKysJCQkJCSAgICAgREVWTElOS19JTkZPX1ZF UlNJT05fR0VORVJJQ19CT0FSRF9JRCwKICAgICsrCQkJCQkgICAgIGJ1Zik7CiAgICAgKwlp ZiAoZXJyKSB7CiAgICAgKwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgIlVuYWJsZSB0 byBzZXQgYm9hcmQgaWRlbnRpZmllciIpOwogICAgICsJCXJldHVybiBlcnI7CiAgICAgKwl9 CiAgICAgKwogICAgLSAJLyogZncgKG1hdGNoIGV4YWN0IG91dHB1dCBvZiBldGh0b29sIC1p IGZpcm13YXJlLXZlcnNpb24pICovCiAgICArIAlzbnByaW50ZihidWYsIHNpemVvZihidWYp LCAiJXUuJXUuJXUiLCBody0+ZndfbWFqX3ZlciwgaHctPmZ3X21pbl92ZXIsCiAgICArIAkJ IGh3LT5md19wYXRjaCk7CiAgICAgIAllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5u aW5nX3B1dChyZXEsCiAgICAtIAkJCQkJICAgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dF TkVSSUNfRlcsCiAgICArQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9k ZXZsaW5rLmM6IHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxp bmsgKmRldmxpbmssCiAgICArIAkJcmV0dXJuIGVycjsKICAgICsgCX0KICAgICsgCiAgICAr LQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUuJXUiLCBody0+YXBpX21hal92ZXIs CiAgICArLQkJIGh3LT5hcGlfbWluX3Zlcik7CiAgICArKwlzbnByaW50ZihidWYsIHNpemVv ZihidWYpLCAiJXUuJXUiLCBody0+YXBpX21hal92ZXIsIGh3LT5hcGlfbWluX3Zlcik7CiAg ICArIAllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsICJmdy5t Z210LmFwaSIsIGJ1Zik7CiAgICArIAlpZiAoZXJyKSB7CiAgICArIAkJTkxfU0VUX0VSUl9N U0dfTU9EKGV4dGFjaywgIlVuYWJsZSB0byBzZXQgbWdtdCBmdyBBUEkgZGF0YSIpOwogICAg IAogICAgICAjIyBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jICMj CiAgICAgQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzogZW51 bSBpY2Vfc3RhdHVzIGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBv ZmZzZXQsIHUxNiAqZGF0YSkKICAgIEBAIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lj ZS9pY2VfbnZtLmM6IGVudW0gaWNlX3N0YXR1cyBpY2VfcmVhZF9zcl93b3JkKHN0cnVjCiAg ICAgKwkgKi8KICAgICArCXBiYV9zaXplLS07CiAgICAgKwlpZiAocGJhX251bV9zaXplIDwg KCgodTMyKXBiYV9zaXplICogMikgKyAxKSkgewogICAgLSsJCWljZV9kZWJ1ZyhodywgSUNF X0RCR19JTklULAogICAgLSsJCQkgICJCdWZmZXIgdG9vIHNtYWxsIGZvciBQQkEgZGF0YS5c biIpOwogICAgKysJCWljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCAiQnVmZmVyIHRvbyBz bWFsbCBmb3IgUEJBIGRhdGEuXG4iKTsKICAgICArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsK ICAgICArCX0KICAgICArCiAgICAgKwlmb3IgKGkgPSAwOyBpIDwgcGJhX3NpemU7IGkrKykg ewogICAgICsJCXN0YXR1cyA9IGljZV9yZWFkX3NyX3dvcmQoaHcsIChwYmFfdGx2ICsgMiAr IDEpICsgaSwgJnBiYV93b3JkKTsKICAgICArCQlpZiAoc3RhdHVzKSB7CiAgICAtKwkJCWlj ZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULAogICAgLSsJCQkJICAiRmFpbGVkIHRvIHJlYWQg UEJBIEJsb2NrIHdvcmQgJWQuXG4iLCBpKTsKICAgICsrCQkJaWNlX2RlYnVnKGh3LCBJQ0Vf REJHX0lOSVQsICJGYWlsZWQgdG8gcmVhZCBQQkEgQmxvY2sgd29yZCAlZC5cbiIsIGkpOwog ICAgICsJCQlyZXR1cm4gc3RhdHVzOwogICAgICsJCX0KICAgICArCiAgICBAQCBkcml2ZXJz L25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R5cGUuaAogICAgIEBAIGRyaXZlcnMvbmV0 L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHlwZS5oOiBzdHJ1Y3QgaWNlX2h3X3BvcnRfc3Rh dHMgewogICAgICAvKiBDaGVja3N1bSBhbmQgU2hhZG93IFJBTSBwb2ludGVycyAqLwogICAg ICAjZGVmaW5lIElDRV9TUl9CT09UX0NGR19QVFIJCTB4MTMyCiAgICAtICNkZWZpbmUgSUNF X05WTV9PRU1fVkVSX09GRgkJMHgwMgogICAgKyAjZGVmaW5lIElDRV9OVk1fT1JPTV9WRVJf T0ZGCQkweDAyCiAgICAgKyNkZWZpbmUgSUNFX1NSX1BCQV9CTE9DS19QVFIJCTB4MTYKICAg ICAgI2RlZmluZSBJQ0VfU1JfTlZNX0RFVl9TVEFSVEVSX1ZFUgkweDE4CiAgICAgICNkZWZp bmUgSUNFX1NSX05WTV9FRVRSQUNLX0xPCQkweDJECiAxOiAgN2Q1NzFmZTc0OThiICEgIDg6 ICAxYjc0NWQ0NTQ4NGIgZGV2bGluazogcHJlcGFyZSB0byBzdXBwb3J0IHJlZ2lvbiBvcGVy YXRpb25zCiAgICBAQCBDb21taXQgbWVzc2FnZQogICAgICAgICB0aGUgZnV0dXJlIHN1Y2gg YXMgcmVxdWVzdGluZyBzbmFwc2hvdHMsIG9yIGFjY2Vzc2luZyB0aGUgcmVnaW9uCiAgICAg ICAgIGRpcmVjdGx5IHdpdGhvdXQgYSBzbmFwc2hvdC4KICAgICAKICAgICsgICAgSW4gb3Jk ZXIgdG8gcmUtdXNlIHRoZSBjb25zdGFudCBzdHJpbmdzIGluIHRoZSBtbHg0IGRyaXZlciB0 aGVpcgogICAgKyAgICBkZWNsYXJhdGlvbiBtdXN0IGJlIGNoYW5nZWQgdG8gJ2NvbnN0IGNo YXIgKiBjb25zdCcgdG8gZW5zdXJlIHRoZQogICAgKyAgICBjb21waWxlciByZWFsaXplcyB0 aGF0IGJvdGggdGhlIGRhdGEgYW5kIHRoZSBwb2ludGVyIGNhbm5vdCBjaGFuZ2UuCiAgICAr CiAgICAgICAgIFNpZ25lZC1vZmYtYnk6IEphY29iIEtlbGxlciA8amFjb2IuZS5rZWxsZXJA aW50ZWwuY29tPgogICAgKyAgICBSZXZpZXdlZC1ieTogSmFrdWIgS2ljaW5za2kgPGt1YmFA a2VybmVsLm9yZz4KICAgICAKICAgICAgIyMgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFu b3gvbWx4NC9jcmR1bXAuYyAjIwogICAgIEBACiAgICBAQCBkcml2ZXJzL25ldC9ldGhlcm5l dC9tZWxsYW5veC9tbHg0L2NyZHVtcC5jCiAgICAgIAogICAgIC1zdGF0aWMgY29uc3QgY2hh ciAqcmVnaW9uX2NyX3NwYWNlX3N0ciA9ICJjci1zcGFjZSI7CiAgICAgLXN0YXRpYyBjb25z dCBjaGFyICpyZWdpb25fZndfaGVhbHRoX3N0ciA9ICJmdy1oZWFsdGgiOwogICAgKytzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlZ2lvbl9jcl9zcGFjZV9zdHIgPSAiY3Itc3BhY2Ui OwogICAgKytzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlZ2lvbl9md19oZWFsdGhfc3Ry ID0gImZ3LWhlYWx0aCI7CiAgICArKwogICAgICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxp bmtfcmVnaW9uX29wcyByZWdpb25fY3Jfc3BhY2Vfb3BzID0gewogICAgLSsJLm5hbWUgPSAi Y3Itc3BhY2UiLAogICAgKysJLm5hbWUgPSByZWdpb25fY3Jfc3BhY2Vfc3RyLAogICAgICt9 OwogICAgICsKICAgICArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3JlZ2lvbl9vcHMg cmVnaW9uX2Z3X2hlYWx0aF9vcHMgPSB7CiAgICAtKwkubmFtZSA9ICJmdy1oZWFsdGgiLAog ICAgKysJLm5hbWUgPSByZWdpb25fZndfaGVhbHRoX3N0ciwKICAgICArfTsKICAgICAgCiAg ICAgIC8qIFNldCB0byB0cnVlIGluIGNhc2UgY3IgZW5hYmxlIGJpdCB3YXMgc2V0IHRvIHRy dWUgYmVmb3JlIGNyZHVtcCAqLwogICAgICBzdGF0aWMgYm9vbCBjcmR1bXBfZW5iYWxlX2Jp dF9zZXQ7CiAgICAtQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9jcmR1 bXAuYzogc3RhdGljIHZvaWQgbWx4NF9jcmR1bXBfY29sbGVjdF9jcnNwYWNlKHN0cnVjdCBt bHg0X2RldiAqZGV2LAogICAgLSAJCWlmIChlcnIpIHsKICAgIC0gCQkJa3ZmcmVlKGNyc3Bh Y2VfZGF0YSk7CiAgICAtIAkJCW1seDRfd2FybihkZXYsICJjcmR1bXA6IGRldmxpbmsgY3Jl YXRlICVzIHNuYXBzaG90IGlkICVkIGVyciAlZFxuIiwKICAgIC0tCQkJCSAgcmVnaW9uX2Ny X3NwYWNlX3N0ciwgaWQsIGVycik7CiAgICAtKwkJCQkgIHJlZ2lvbl9jcl9zcGFjZV9vcHMu bmFtZSwgaWQsIGVycik7CiAgICAtIAkJfSBlbHNlIHsKICAgIC0gCQkJbWx4NF9pbmZvKGRl diwgImNyZHVtcDogYWRkZWQgc25hcHNob3QgJWQgdG8gZGV2bGluayByZWdpb24gJXNcbiIs CiAgICAtLQkJCQkgIGlkLCByZWdpb25fY3Jfc3BhY2Vfc3RyKTsKICAgIC0rCQkJCSAgaWQs IHJlZ2lvbl9jcl9zcGFjZV9vcHMubmFtZSk7CiAgICAtIAkJfQogICAgLSAJfSBlbHNlIHsK ICAgIC0gCQltbHg0X2VycihkZXYsICJjcmR1bXA6IEZhaWxlZCB0byBhbGxvY2F0ZSBjcnNw YWNlIGJ1ZmZlclxuIik7CiAgICAtQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gv bWx4NC9jcmR1bXAuYzogc3RhdGljIHZvaWQgbWx4NF9jcmR1bXBfY29sbGVjdF9md19oZWFs dGgoc3RydWN0IG1seDRfZGV2ICpkZXYsCiAgICAtIAkJaWYgKGVycikgewogICAgLSAJCQlr dmZyZWUoaGVhbHRoX2RhdGEpOwogICAgLSAJCQltbHg0X3dhcm4oZGV2LCAiY3JkdW1wOiBk ZXZsaW5rIGNyZWF0ZSAlcyBzbmFwc2hvdCBpZCAlZCBlcnIgJWRcbiIsCiAgICAtLQkJCQkg IHJlZ2lvbl9md19oZWFsdGhfc3RyLCBpZCwgZXJyKTsKICAgIC0rCQkJCSAgcmVnaW9uX2Z3 X2hlYWx0aF9vcHMubmFtZSwgaWQsIGVycik7CiAgICAtIAkJfSBlbHNlIHsKICAgIC0gCQkJ bWx4NF9pbmZvKGRldiwgImNyZHVtcDogYWRkZWQgc25hcHNob3QgJWQgdG8gZGV2bGluayBy ZWdpb24gJXNcbiIsCiAgICAtLQkJCQkgIGlkLCByZWdpb25fZndfaGVhbHRoX3N0cik7CiAg ICAtKwkJCQkgIGlkLCByZWdpb25fZndfaGVhbHRoX29wcy5uYW1lKTsKICAgIC0gCQl9CiAg ICAtIAl9IGVsc2UgewogICAgLSAJCW1seDRfZXJyKGRldiwgImNyZHVtcDogRmFpbGVkIHRv IGFsbG9jYXRlIGhlYWx0aCBidWZmZXJcbiIpOwogICAgIEBAIGRyaXZlcnMvbmV0L2V0aGVy bmV0L21lbGxhbm94L21seDQvY3JkdW1wLmM6IGludCBtbHg0X2NyZHVtcF9pbml0KHN0cnVj dCBtbHg0X2RldiAqZGV2KQogICAgICAJLyogQ3JlYXRlIGNyLXNwYWNlIHJlZ2lvbiAqLwog ICAgICAJY3JkdW1wLT5yZWdpb25fY3JzcGFjZSA9CiAgICBAQCBkcml2ZXJzL25ldC9ldGhl cm5ldC9tZWxsYW5veC9tbHg0L2NyZHVtcC5jOiBpbnQgbWx4NF9jcmR1bXBfaW5pdChzdHJ1 Y3QgbWx4NF9kZQogICAgICAJCQkJICAgICAgTUFYX05VTV9PRl9EVU1QU19UT19TVE9SRSwK ICAgICAgCQkJCSAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwogICAgICAJaWYg KElTX0VSUihjcmR1bXAtPnJlZ2lvbl9jcnNwYWNlKSkKICAgIC0gCQltbHg0X3dhcm4oZGV2 LCAiY3JkdW1wOiBjcmVhdGUgZGV2bGluayByZWdpb24gJXMgZXJyICVsZFxuIiwKICAgIC0t CQkJICByZWdpb25fY3Jfc3BhY2Vfc3RyLAogICAgLSsJCQkgIHJlZ2lvbl9jcl9zcGFjZV9v cHMubmFtZSwKICAgIC0gCQkJICBQVFJfRVJSKGNyZHVtcC0+cmVnaW9uX2Nyc3BhY2UpKTsK ICAgIC0gCiAgICArQEAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9jcmR1 bXAuYzogaW50IG1seDRfY3JkdW1wX2luaXQoc3RydWN0IG1seDRfZGV2ICpkZXYpCiAgICAg IAkvKiBDcmVhdGUgZnctaGVhbHRoIHJlZ2lvbiAqLwogICAgICAJY3JkdW1wLT5yZWdpb25f ZndfaGVhbHRoID0KICAgICAgCQlkZXZsaW5rX3JlZ2lvbl9jcmVhdGUoZGV2bGluaywKICAg IEBAIGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvY3JkdW1wLmM6IGludCBt bHg0X2NyZHVtcF9pbml0KHN0cnVjdCBtbHg0X2RlCiAgICAgIAkJCQkgICAgICBNQVhfTlVN X09GX0RVTVBTX1RPX1NUT1JFLAogICAgICAJCQkJICAgICAgSEVBTFRIX0JVRkZFUl9TSVpF KTsKICAgICAgCWlmIChJU19FUlIoY3JkdW1wLT5yZWdpb25fZndfaGVhbHRoKSkKICAgIC0g CQltbHg0X3dhcm4oZGV2LCAiY3JkdW1wOiBjcmVhdGUgZGV2bGluayByZWdpb24gJXMgZXJy ICVsZFxuIiwKICAgIC0tCQkJICByZWdpb25fZndfaGVhbHRoX3N0ciwKICAgIC0rCQkJICBy ZWdpb25fZndfaGVhbHRoX29wcy5uYW1lLAogICAgLSAJCQkgIFBUUl9FUlIoY3JkdW1wLT5y ZWdpb25fZndfaGVhbHRoKSk7CiAgICAtIAogICAgLSAJcmV0dXJuIDA7CiAgICAgCiAgICAg ICMjIGRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYyAjIwogICAgIEBAIGRyaXZlcnMvbmV0 L25ldGRldnNpbS9kZXYuYzogc3RhdGljIHZvaWQgbnNpbV9kZXZsaW5rX3BhcmFtX2xvYWRf ZHJpdmVyaW5pdF92YWx1ZXMoc3RydWN0IGRldmxpbmsgKmRldmxpbmspCiAgICBAQCBpbmNs dWRlL25ldC9kZXZsaW5rLmg6IHZvaWQgZGV2bGlua19wb3J0X3BhcmFtX3ZhbHVlX2NoYW5n ZWQoc3RydWN0IGRldmxpbmtfcG9ydAogICAgICtzdHJ1Y3QgZGV2bGlua19yZWdpb24gKgog ICAgICtkZXZsaW5rX3JlZ2lvbl9jcmVhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiAg ICAgKwkJICAgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfcmVnaW9uX29wcyAqb3BzLAogICAg LSsJCSAgICAgIHUzMiByZWdpb25fbWF4X3NuYXBzaG90cywKICAgIC0rCQkgICAgICB1NjQg cmVnaW9uX3NpemUpOwogICAgKysJCSAgICAgIHUzMiByZWdpb25fbWF4X3NuYXBzaG90cywg dTY0IHJlZ2lvbl9zaXplKTsKICAgICAgdm9pZCBkZXZsaW5rX3JlZ2lvbl9kZXN0cm95KHN0 cnVjdCBkZXZsaW5rX3JlZ2lvbiAqcmVnaW9uKTsKICAgICAgdTMyIGRldmxpbmtfcmVnaW9u X3NuYXBzaG90X2lkX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7CiAgICAgIGludCBk ZXZsaW5rX3JlZ2lvbl9zbmFwc2hvdF9jcmVhdGUoc3RydWN0IGRldmxpbmtfcmVnaW9uICpy ZWdpb24sCiAgICBAQCBuZXQvY29yZS9kZXZsaW5rLmM6IEVYUE9SVF9TWU1CT0xfR1BMKGRl dmxpbmtfcGFyYW1fdmFsdWVfc3RyX2ZpbGwpOwogICAgICtzdHJ1Y3QgZGV2bGlua19yZWdp b24gKgogICAgICtkZXZsaW5rX3JlZ2lvbl9jcmVhdGUoc3RydWN0IGRldmxpbmsgKmRldmxp bmssCiAgICAgKwkJICAgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfcmVnaW9uX29wcyAqb3Bz LAogICAgLSsJCSAgICAgIHUzMiByZWdpb25fbWF4X3NuYXBzaG90cywKICAgIC0rCQkgICAg ICB1NjQgcmVnaW9uX3NpemUpCiAgICArKwkJICAgICAgdTMyIHJlZ2lvbl9tYXhfc25hcHNo b3RzLCB1NjQgcmVnaW9uX3NpemUpCiAgICAgIHsKICAgICAgCXN0cnVjdCBkZXZsaW5rX3Jl Z2lvbiAqcmVnaW9uOwogICAgICAJaW50IGVyciA9IDA7CiAtOiAgLS0tLS0tLS0tLS0tID4g IDk6ICA5MDMyY2MzMmQ3YjAgZGV2bGluazogY29udmVydCBzbmFwc2hvdCBkZXN0cnVjdG9y IGNhbGxiYWNrIHRvIHJlZ2lvbiBvcAogLTogIC0tLS0tLS0tLS0tLSA+IDEwOiAgMDczM2Q1 YWNkNGViIGRldmxpbms6IHRyaXZpYWw6IGZpeCB0YWIgaW4gZnVuY3Rpb24gZG9jdW1lbnRh dGlvbgogMjogIDVhNTMyZjMzNTkyNyAhIDExOiAgZGIwMDBmMTFjMTIxIGRldmxpbms6IGFk ZCBmdW5jdGlvbnMgdG8gdGFrZSBzbmFwc2hvdCB3aGlsZSBsb2NrZWQKICAgIEBAIENvbW1p dCBtZXNzYWdlCiAgICAgICAgIGRldmxpbmtfcmVnaW9uX3NuYXBzaG90X2lkX2dldCBhbmQg ZGV2bGlua19yZWdpb25fc25hcHNob3RfY3JlYXRlCiAgICAgICAgIGZ1bmN0aW9ucyB3aGls ZSBhbHJlYWR5IGhvbGRpbmcgdGhlIGRldmxpbmsgaW5zdGFuY2UgbG9jay4KICAgICAKICAg IC0gICAgRXh0cmFjdCB0aGUgbG9naWMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRvIHN0 YXRpYyBmdW5jdGlvbnMgd2l0aCB0aGUKICAgIC0gICAgX2xvY2tlZCBwb3N0Zml4LiBNb2Rp ZnkgdGhlIG9yaWdpbmFsIGZ1bmN0aW9ucyB0byBiZSBpbXBsZW1lbnRlZCBpbgogICAgLSAg ICB0ZXJtcyBvZiB0aGUgbmV3IGxvY2tlZCBmdW5jdGlvbnMuCiAgICArICAgIEV4dHJhY3Qg dGhlIGxvZ2ljIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgaW50byBzdGF0aWMgZnVuY3Rpb25z IHByZWZpeGVkCiAgICArICAgIGJ5IGBfX2AgdG8gaW5kaWNhdGUgdGhleSBhcmUgaW50ZXJu YWwgaGVscGVyIGZ1bmN0aW9ucy4gTW9kaWZ5IHRoZQogICAgKyAgICBvcmlnaW5hbCBmdW5j dGlvbnMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgdGhlIG5ldyBsb2NrZWQKICAg ICsgICAgZnVuY3Rpb25zLgogICAgIAogICAgICAgICBTaWduZWQtb2ZmLWJ5OiBKYWNvYiBL ZWxsZXIgPGphY29iLmUua2VsbGVyQGludGVsLmNvbT4KICAgICAKICAgIEBAIG5ldC9jb3Jl L2RldmxpbmsuYzogc3RhdGljIHZvaWQgZGV2bGlua19ubF9yZWdpb25fbm90aWZ5KHN0cnVj dCBkZXZsaW5rX3JlZ2lvbiAqCiAgICAgIH0KICAgICAgCiAgICAgKy8qKgogICAgLSsgKglk ZXZsaW5rX3JlZ2lvbl9zbmFwc2hvdF9pZF9nZXRfbG9ja2VkIC0gZ2V0IHNuYXBzaG90IElE CiAgICArKyAqCV9fZGV2bGlua19yZWdpb25fc25hcHNob3RfaWRfZ2V0IC0gZ2V0IHNuYXBz aG90IElECiAgICArKyAqCUBkZXZsaW5rOiBkZXZsaW5rIGluc3RhbmNlCiAgICAgKyAqCiAg ICAgKyAqCVJldHVybnMgYSBuZXcgc25hcHNob3QgaWQuIE11c3QgYmUgY2FsbGVkIHdoaWxl IGhvbGRpbmcgdGhlCiAgICAgKyAqCWRldmxpbmsgaW5zdGFuY2UgbG9jay4KICAgICArICov CiAgICAtK3N0YXRpYyB1MzIgZGV2bGlua19yZWdpb25fc25hcHNob3RfaWRfZ2V0X2xvY2tl ZChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKICAgICsrc3RhdGljIHUzMiBfX2Rldmxpbmtf cmVnaW9uX3NuYXBzaG90X2lkX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKICAgICAr ewogICAgKysJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2bGluay0+bG9jayk7CiAgICAgKwly ZXR1cm4gKytkZXZsaW5rLT5zbmFwc2hvdF9pZDsKICAgICArfQogICAgICsKICAgICArLyoq CiAgICAtKyAqCWRldmxpbmtfcmVnaW9uX3NuYXBzaG90X2NyZWF0ZV9sb2NrZWQgLSBjcmVh dGUgYSBuZXcgc25hcHNob3QKICAgICsrICoJX19kZXZsaW5rX3JlZ2lvbl9zbmFwc2hvdF9j cmVhdGUgLSBjcmVhdGUgYSBuZXcgc25hcHNob3QKICAgICArICoJVGhpcyB3aWxsIGFkZCBh IG5ldyBzbmFwc2hvdCBvZiBhIHJlZ2lvbi4gVGhlIHNuYXBzaG90CiAgICAgKyAqCXdpbGwg YmUgc3RvcmVkIG9uIHRoZSByZWdpb24gc3RydWN0IGFuZCBjYW4gYmUgYWNjZXNzZWQKICAg IC0rICoJZnJvbSBkZXZsaW5rLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZnV0dXJlCWFuYWx5c2Vz IG9mIHNuYXBzaG90cy4KICAgICsrICoJZnJvbSBkZXZsaW5rLiBUaGlzIGlzIHVzZWZ1bCBm b3IgZnV0dXJlIGFuYWx5c2VzIG9mIHNuYXBzaG90cy4KICAgICArICoJTXVsdGlwbGUgc25h cHNob3RzIGNhbiBiZSBjcmVhdGVkIG9uIGEgcmVnaW9uLgogICAgICsgKglUaGUgQHNuYXBz aG90X2lkIHNob3VsZCBiZSBvYnRhaW5lZCB1c2luZyB0aGUgZ2V0dGVyIGZ1bmN0aW9uLgog ICAgICsgKgogICAgQEAgbmV0L2NvcmUvZGV2bGluay5jOiBzdGF0aWMgdm9pZCBkZXZsaW5r X25sX3JlZ2lvbl9ub3RpZnkoc3RydWN0IGRldmxpbmtfcmVnaW9uICoKICAgICArICoJQHJl Z2lvbjogZGV2bGluayByZWdpb24gb2YgdGhlIHNuYXBzaG90CiAgICAgKyAqCUBkYXRhOiBz bmFwc2hvdCBkYXRhCiAgICAgKyAqCUBzbmFwc2hvdF9pZDogc25hcHNob3QgaWQgdG8gYmUg Y3JlYXRlZAogICAgLSsgKglAZGVzdHJ1Y3RvcjogcG9pbnRlciB0byBkZXN0cnVjdG9yIGZ1 bmN0aW9uIHRvIGZyZWUgZGF0YQogICAgICsgKi8KICAgICArc3RhdGljIGludAogICAgLStk ZXZsaW5rX3JlZ2lvbl9zbmFwc2hvdF9jcmVhdGVfbG9ja2VkKHN0cnVjdCBkZXZsaW5rX3Jl Z2lvbiAqcmVnaW9uLAogICAgLSsJCQkJICAgICAgdTggKmRhdGEsIHUzMiBzbmFwc2hvdF9p ZCwKICAgIC0rCQkJCSAgICAgIGRldmxpbmtfc25hcHNob3RfZGF0YV9kZXN0X3QgKmRlc3Ry dWN0b3IpCiAgICArK19fZGV2bGlua19yZWdpb25fc25hcHNob3RfY3JlYXRlKHN0cnVjdCBk ZXZsaW5rX3JlZ2lvbiAqcmVnaW9uLAogICAgKysJCQkJIHU4ICpkYXRhLCB1MzIgc25hcHNo b3RfaWQpCiAgICAgK3sKICAgICsrCXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcmVnaW9u LT5kZXZsaW5rOwogICAgICsJc3RydWN0IGRldmxpbmtfc25hcHNob3QgKnNuYXBzaG90Owog ICAgICsKICAgICsrCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldmxpbmstPmxvY2spOwogICAg KysKICAgICArCS8qIGNoZWNrIGlmIHJlZ2lvbiBjYW4gaG9sZCBvbmUgbW9yZSBzbmFwc2hv dCAqLwogICAgICsJaWYgKHJlZ2lvbi0+Y3VyX3NuYXBzaG90cyA9PSByZWdpb24tPm1heF9z bmFwc2hvdHMpCiAgICAgKwkJcmV0dXJuIC1FTk9NRU07CiAgICBAQCBuZXQvY29yZS9kZXZs aW5rLmM6IHN0YXRpYyB2b2lkIGRldmxpbmtfbmxfcmVnaW9uX25vdGlmeShzdHJ1Y3QgZGV2 bGlua19yZWdpb24gKgogICAgICsJc25hcHNob3QtPmlkID0gc25hcHNob3RfaWQ7CiAgICAg KwlzbmFwc2hvdC0+cmVnaW9uID0gcmVnaW9uOwogICAgICsJc25hcHNob3QtPmRhdGEgPSBk YXRhOwogICAgLSsJc25hcHNob3QtPmRhdGFfZGVzdHJ1Y3RvciA9IGRlc3RydWN0b3I7CiAg ICAgKwogICAgICsJbGlzdF9hZGRfdGFpbCgmc25hcHNob3QtPmxpc3QsICZyZWdpb24tPnNu YXBzaG90X2xpc3QpOwogICAgICsKICAgIEBAIG5ldC9jb3JlL2RldmxpbmsuYzogdTMyIGRl dmxpbmtfcmVnaW9uX3NuYXBzaG90X2lkX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykK ICAgICAgCiAgICAgIAltdXRleF9sb2NrKCZkZXZsaW5rLT5sb2NrKTsKICAgICAtCWlkID0g KytkZXZsaW5rLT5zbmFwc2hvdF9pZDsKICAgIC0rCWlkID0gZGV2bGlua19yZWdpb25fc25h cHNob3RfaWRfZ2V0X2xvY2tlZChkZXZsaW5rKTsKICAgICsrCWlkID0gX19kZXZsaW5rX3Jl Z2lvbl9zbmFwc2hvdF9pZF9nZXQoZGV2bGluayk7CiAgICAgIAltdXRleF91bmxvY2soJmRl dmxpbmstPmxvY2spOwogICAgICAKICAgICAgCXJldHVybiBpZDsKICAgIC1AQCBuZXQvY29y ZS9kZXZsaW5rLmM6IEVYUE9SVF9TWU1CT0xfR1BMKGRldmxpbmtfcmVnaW9uX3NuYXBzaG90 X2lkX2dldCk7CiAgICAtICAqCWRldmxpbmtfcmVnaW9uX3NuYXBzaG90X2NyZWF0ZSAtIGNy ZWF0ZSBhIG5ldyBzbmFwc2hvdAogICAgLSAgKglUaGlzIHdpbGwgYWRkIGEgbmV3IHNuYXBz aG90IG9mIGEgcmVnaW9uLiBUaGUgc25hcHNob3QKICAgIC0gICoJd2lsbCBiZSBzdG9yZWQg b24gdGhlIHJlZ2lvbiBzdHJ1Y3QgYW5kIGNhbiBiZSBhY2Nlc3NlZAogICAgLS0gKglmcm9t IGRldmxpbmsuIFRoaXMgaXMgdXNlZnVsIGZvciBmdXR1cmUJYW5hbHlzZXMgb2Ygc25hcHNo b3RzLgogICAgLSsgKglmcm9tIGRldmxpbmsuIFRoaXMgaXMgdXNlZnVsIGZvciBmdXR1cmUg YW5hbHlzZXMgb2Ygc25hcHNob3RzLgogICAgLSAgKglNdWx0aXBsZSBzbmFwc2hvdHMgY2Fu IGJlIGNyZWF0ZWQgb24gYSByZWdpb24uCiAgICAtICAqCVRoZSBAc25hcHNob3RfaWQgc2hv dWxkIGJlIG9idGFpbmVkIHVzaW5nIHRoZSBnZXR0ZXIgZnVuY3Rpb24uCiAgICAtICAqCiAg ICAgQEAgbmV0L2NvcmUvZGV2bGluay5jOiBpbnQgZGV2bGlua19yZWdpb25fc25hcHNob3Rf Y3JlYXRlKHN0cnVjdCBkZXZsaW5rX3JlZ2lvbiAqcmVnaW9uLAogICAgLSAJCQkJICAgZGV2 bGlua19zbmFwc2hvdF9kYXRhX2Rlc3RfdCAqZGF0YV9kZXN0cnVjdG9yKQogICAgKyAJCQkJ ICAgdTggKmRhdGEsIHUzMiBzbmFwc2hvdF9pZCkKICAgICAgewogICAgICAJc3RydWN0IGRl dmxpbmsgKmRldmxpbmsgPSByZWdpb24tPmRldmxpbms7CiAgICAgLQlzdHJ1Y3QgZGV2bGlu a19zbmFwc2hvdCAqc25hcHNob3Q7CiAgICBAQCBuZXQvY29yZS9kZXZsaW5rLmM6IGludCBk ZXZsaW5rX3JlZ2lvbl9zbmFwc2hvdF9jcmVhdGUoc3RydWN0IGRldmxpbmtfcmVnaW9uICpy ZQogICAgIC0Jc25hcHNob3QtPmlkID0gc25hcHNob3RfaWQ7CiAgICAgLQlzbmFwc2hvdC0+ cmVnaW9uID0gcmVnaW9uOwogICAgIC0Jc25hcHNob3QtPmRhdGEgPSBkYXRhOwogICAgLS0J c25hcHNob3QtPmRhdGFfZGVzdHJ1Y3RvciA9IGRhdGFfZGVzdHJ1Y3RvcjsKICAgICAtCiAg ICAgLQlsaXN0X2FkZF90YWlsKCZzbmFwc2hvdC0+bGlzdCwgJnJlZ2lvbi0+c25hcHNob3Rf bGlzdCk7CiAgICAgLQogICAgIC0JcmVnaW9uLT5jdXJfc25hcHNob3RzKys7CiAgICAgLQog ICAgIC0JZGV2bGlua19ubF9yZWdpb25fbm90aWZ5KHJlZ2lvbiwgc25hcHNob3QsIERFVkxJ TktfQ01EX1JFR0lPTl9ORVcpOwogICAgLSsJZXJyID0gZGV2bGlua19yZWdpb25fc25hcHNo b3RfY3JlYXRlX2xvY2tlZChyZWdpb24sIGRhdGEsIHNuYXBzaG90X2lkLAogICAgLSsJCQkJ CQkgICAgZGF0YV9kZXN0cnVjdG9yKTsKICAgICsrCWVyciA9IF9fZGV2bGlua19yZWdpb25f c25hcHNob3RfY3JlYXRlKHJlZ2lvbiwgZGF0YSwgc25hcHNob3RfaWQpOwogICAgICAJbXV0 ZXhfdW5sb2NrKCZkZXZsaW5rLT5sb2NrKTsKICAgICAtCXJldHVybiAwOwogICAgICAKIDM6 ICA4MDZhOTdhZTNkZTkgPCAgLTogIC0tLS0tLS0tLS0tLSBkZXZsaW5rOiBhZGQgb3BlcmF0 aW9uIHRvIHRha2UgYW4gaW1tZWRpYXRlIHNuYXBzaG90CiA0OiAgYjQyNzY0NDZmZGNmIDwg IC06ICAtLS0tLS0tLS0tLS0gbmV0ZGV2c2ltOiBzdXBwb3J0IHRha2luZyBpbW1lZGlhdGUg c25hcHNob3QgdmlhIGRldmxpbmsKIDg6ICBmMzE0MWE3NTVmYjUgPCAgLTogIC0tLS0tLS0t LS0tLSBkZXZsaW5rOiBhZGQgZGV2cmVzIG1hbmFnZWQgZGV2bGlua21fYWxsb2MgYW5kIGRl dmxpbmttX2ZyZWUKMTA6ICBkMTI4NGZkNWIwZWUgPCAgLTogIC0tLS0tLS0tLS0tLSBpY2U6 IGFkZCBiYXNpYyBoYW5kbGVyIGZvciBkZXZsaW5rIC5pbmZvX2dldAoxMjogIDMwYTYyMTAx OGFjMiA8ICAtOiAgLS0tLS0tLS0tLS0tIGljZTogYWRkIGEgZGV2bGluayByZWdpb24gdG8g ZHVtcCBzaGFkb3cgUkFNIGNvbnRlbnRzCjEzOiAgY2IxYjRkMjdkOWFmIDwgIC06ICAtLS0t LS0tLS0tLS0gZGV2bGluazogc3VwcG9ydCBkaXJlY3RseSByZWFkaW5nIGZyb20gcmVnaW9u IG1lbW9yeQoxNDogIGZlYWUyNmZmMzU0MSA8ICAtOiAgLS0tLS0tLS0tLS0tIGljZTogc3Vw cG9ydCBkaXJlY3QgcmVhZCBvZiB0aGUgc2hhZG93IHJhbSByZWdpb24KMTU6ICAxZTdjMmNk NWZiNjYgPCAgLTogIC0tLS0tLS0tLS0tLSBpY2U6IGFkZCBpY2UucnN0IGRldmxpbmsgZG9j dW1lbnRhdGlvbiBmaWxlCiAtOiAgLS0tLS0tLS0tLS0tID4gMTI6ICAxOTJkNzY0NGQ1OWYg ZGV2bGluazogY29udmVydCBzbmFwc2hvdCBpZCBnZXR0ZXIgdG8gcmV0dXJuIGFuIGVycm9y CiAtOiAgLS0tLS0tLS0tLS0tID4gMTM6ICAzN2I5MWNhMDVlNjMgZGV2bGluazogdHJhY2sg c25hcHNob3QgaWRzIHVzaW5nIGFuIElEUiBhbmQgcmVmY291bnRzCiAtOiAgLS0tLS0tLS0t LS0tID4gMTQ6ICBjZjY0NzJlNTkwYjAgZGV2bGluazogaW1wbGVtZW50IERFVkxJTktfQ01E X1JFR0lPTl9ORVcKIC06ICAtLS0tLS0tLS0tLS0gPiAxNTogIDMzNzE3NzZmMDBhMyBuZXRk ZXZzaW06IHN1cHBvcnQgdGFraW5nIGltbWVkaWF0ZSBzbmFwc2hvdCB2aWEgZGV2bGluawog LTogIC0tLS0tLS0tLS0tLSA+IDE2OiAgMzAxN2U1NTA1OGUxIGRldmxpbms6IHNpbXBsaWZ5 IGFyZ3VtZW50cyBmb3IgcmVhZF9zbmFwc2hvdF9maWxsCiAtOiAgLS0tLS0tLS0tLS0tID4g MTc6ICBkMWVmOTYwZjE1NmMgZGV2bGluazogdXNlIG1pbl90IHRvIGNhbGN1bGF0ZSBkYXRh X3NpemUKIC06ICAtLS0tLS0tLS0tLS0gPiAxODogIDA2Yzc5MWUwZGY0ZCBkZXZsaW5rOiBy ZXBvcnQgZXh0ZW5kZWQgZXJyb3IgbWVzc2FnZSBpbiByZWdpb25fcmVhZF9kdW1waXQKIC06 ICAtLS0tLS0tLS0tLS0gPiAxOTogIDVhYTRjZWUwOWExZiBkZXZsaW5rOiByZW1vdmUgdW5u ZWNlc3NhcnkgcGFyYW1ldGVyIGZyb20gY2h1bmtfZmlsbCBmdW5jdGlvbgogLTogIC0tLS0t LS0tLS0tLSA+IDIwOiAgMmViMDZjYWI5MDFiIGRldmxpbms6IHJlZmFjdG9yIHJlZ2lvbl9y ZWFkX3NuYXBzaG90X2ZpbGwgdG8gdXNlIGEgY2FsbGJhY2sgZnVuY3Rpb24KIC06ICAtLS0t LS0tLS0tLS0gPiAyMTogIDg1NDg3NWRkNzg3MiBkZXZsaW5rOiBzdXBwb3J0IGRpcmVjdGx5 IHJlYWRpbmcgZnJvbSByZWdpb24gbWVtb3J5CiAtOiAgLS0tLS0tLS0tLS0tID4gMjI6ICAw ZWJmODU0OGRkYjIgaWNlOiBhZGQgYSBkZXZsaW5rIHJlZ2lvbiB0byBkdW1wIHNoYWRvdyBS QU0gY29udGVudHMK --------------CE1A861DE979DACF802A78BE--