From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 68ADEA328D for ; Wed, 23 Oct 2019 08:23:50 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3010E1BF97; Wed, 23 Oct 2019 08:23:50 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70057.outbound.protection.outlook.com [40.107.7.57]) by dpdk.org (Postfix) with ESMTP id DEC1D1BF96 for ; Wed, 23 Oct 2019 08:23:47 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RDtMnlES/LaAMD7CCVYC1QkptTs3YvteYl4O5F5tJsp4/6fGN2GnebHp1X0gIk/k6pe3FVUvdOtSOyQBkOBlAtk2ZpyWOWp3i9F1lHPNAhmKhR4+VzU27nwTG/EtTV7vbFTwzqzfbbmpG4AGSiI6+u4euElPB0pxldPw/0spHTTkbG0QGwtstOF7oXLRgTCNFZ5FJaigKRF30L1g95YJ3/d+Ax7g1b9ZcuYAzmCybCTQcn+uP6RR4QrGh/JuLzOEQMTvJWJKHA7ZSFmxbGNp8688HpNCCvi7cAXb7rOlFBLIZuVSfz7ss9yVlzS27PnRNSftXl5YfdrWVLDQo9qAhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W1bk+mKy+qJ8QC/KBjS6y1Y3dgexcbaOk35KvdMjdms=; b=lw+mM3AXiAiOWW8l/uSxUiZRJmfFsviOwPGU57FBdsjyAwt36VV03VJzH7OC8nVTtolz45RF/9TGumERP9p+bjtxViQEdJDBMO8uzUmEbc2pmMqxqTlqQ6Dzt0cEZsalBmL6uX1pRR7PTjG/gZ4bxSjQT2l3nq83ZqPCE8ZWVjC2V5f60cUVPOAAY6p8leOhVs0JiZ6whMHDdF4kcuLvhN6VvEs/wXmL8v51H4u6loLQRyJjugPqiEqVxcCPOWY1nbHuDU2ul+cEWXVpP4TW9+/RFNWfy2lI7jT20N3cNa8J1k6v3Rv6zKnevd0w0WOKoSzY6Cq0HrFAIlX0ZTR6tg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W1bk+mKy+qJ8QC/KBjS6y1Y3dgexcbaOk35KvdMjdms=; b=ogogxqrI95P/oG2OcDjLy0FXf06s1BRVyyoomkNPhOec6Epuz/5xZrZVIPzzE7K06g5le2FRTlvO32HOQw+yBuM20g5u9J/KKQpudYEiXhekd7+LNC0QqruZFLPZkrlKSoxonEhFBq7ElbIkyASvxtys5j0Qme6NenwzTFCdvhI= Received: from AM4PR05MB3425.eurprd05.prod.outlook.com (10.171.190.15) by AM4PR05MB3346.eurprd05.prod.outlook.com (10.171.189.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.16; Wed, 23 Oct 2019 06:23:46 +0000 Received: from AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::70a7:a312:cbc6:d178]) by AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::70a7:a312:cbc6:d178%7]) with mapi id 15.20.2367.025; Wed, 23 Oct 2019 06:23:46 +0000 From: Ori Kam To: Andrew Rybchenko , Thomas Monjalon , Ferruh Yigit CC: "dev@dpdk.org" , "jingjing.wu@intel.com" , "stephen@networkplumber.org" Thread-Topic: [PATCH v4 02/15] ethdev: add support for hairpin queue Thread-Index: AQHVhQAgFv2i5Ft140GXJtacKsVcmadmkDKAgAE4kdA= Date: Wed, 23 Oct 2019 06:23:45 +0000 Message-ID: References: <1569479349-36962-1-git-send-email-orika@mellanox.com> <1571326337-42692-1-git-send-email-orika@mellanox.com> <1571326337-42692-3-git-send-email-orika@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=orika@mellanox.com; x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 01ed731f-42d0-4e24-f384-08d757818f38 x-ms-traffictypediagnostic: AM4PR05MB3346: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 019919A9E4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(376002)(136003)(346002)(396003)(366004)(39860400002)(13464003)(189003)(199004)(71190400001)(8936002)(7696005)(26005)(76176011)(2906002)(476003)(99286004)(486006)(11346002)(446003)(81166006)(8676002)(81156014)(71200400001)(186003)(305945005)(6116002)(7736002)(3846002)(74316002)(66446008)(256004)(14444005)(53546011)(86362001)(6506007)(102836004)(110136005)(5660300002)(76116006)(54906003)(6246003)(316002)(30864003)(478600001)(14454004)(25786009)(4326008)(66066001)(52536014)(9686003)(66556008)(64756008)(66476007)(6436002)(55016002)(33656002)(229853002)(66946007)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3346; H:AM4PR05MB3425.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: f0D+Io12s1Yy5qdOno3iKq8cxyFAvxJn3XG6gUkGhC2cCS6w6/bOMHHpCnrFDNubs9a//+lM+HkHVrTiw/sU+vlE4pyjUflCYNdbwKWzTZ6G6d1gdjapuxnl+L9MalNMFuFVsC8I10dwl2K5AF5NVNxDT1Kn4mDIlZ3ZjXTNc/QGJNqeC1TyDk6khkHGdpvZu47aEd5ZhClkMpRi/ZLjA8DEAVEcVf7mRBq14gl4vHCv8hqzpyZVhAdM2yNoms/IApK6DFLZeK9XDtBKeG5LxNndCR5sDAcmBljXlD9Hnb7ex8oTfyMonv+H622fMHjK7JNaylK8cQV8x4YXNfUgALVQlfyJu/6kgjwscGbWOoirmIEvQsWO/WeokVNkYZVUBBo58CQg4OPIAfZkWsFLKSxmDdoRcihLVr2FFRzQscbAo99nDUCaEgAA5LfT7ewb x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 01ed731f-42d0-4e24-f384-08d757818f38 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Oct 2019 06:23:45.9917 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: cPZ7uYqlUKYF1zx9+dv/puv3s3rbrRvztSATEZpslaW5Cl1iuL4+HHohSkJ/WbzSPRMX39rYJqi9A8+Ys8Enrw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3346 Subject: Re: [dpdk-dev] [PATCH v4 02/15] ethdev: add support for hairpin queue X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgQW5kcmV3LA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFuZHJl dyBSeWJjaGVua28gPGFyeWJjaGVua29Ac29sYXJmbGFyZS5jb20+DQo+IFNlbnQ6IFR1ZXNkYXks IE9jdG9iZXIgMjIsIDIwMTkgMjozOCBQTQ0KPiBUbzogT3JpIEthbSA8b3Jpa2FAbWVsbGFub3gu Y29tPjsgVGhvbWFzIE1vbmphbG9uDQo+IDx0aG9tYXNAbW9uamFsb24ubmV0PjsgRmVycnVoIFlp Z2l0IDxmZXJydWgueWlnaXRAaW50ZWwuY29tPg0KPiBDYzogZGV2QGRwZGsub3JnOyBqaW5namlu Zy53dUBpbnRlbC5jb207IHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnDQo+IFN1YmplY3Q6IFJl OiBbUEFUQ0ggdjQgMDIvMTVdIGV0aGRldjogYWRkIHN1cHBvcnQgZm9yIGhhaXJwaW4gcXVldWUN Cj4gDQo+IEhpIE9yaSwNCj4gDQo+IHNlZSBteSBub3RlcyBiZWxvdy4NCj4gDQo+IEEgZ2VuZXJp YyBub3RlIGlzIHRoYXQgd2UgaGF2ZSBzdHJpY3QgcG9saWN5IGFib3V0IFJ4L1R4IChub3QgUlgv VFgpIGluDQo+IGNvbW1pdCBtZXNzYWdlcywgYnV0IEknZCBsaWtlIHRvIGZvbGxvdyBpdCBpbiBj b21tZW50cyBhbmQgbG9nIG1lc3NhZ2VzDQo+IGF0IGxlYXN0IGluIGEgbmV3IGNvZGUuIEl0IGlz IGFscmVhZHkgYSBtaXh0dXJlIGluIHRoZSBleGlzdGluZyBjb2RlLg0KPg0KDQpPLksuIHdpbGwg bWFrZSBzdXJlIG15IGNvZGUgaXMgYWxpZ25lZC4NCiANCj4gT24gMTAvMTcvMTkgNjozMiBQTSwg T3JpIEthbSB3cm90ZToNCj4gPiBUaGlzIGNvbW1pdCBpbnRyb2R1Y2UgaGFpcnBpbiBxdWV1ZSB0 eXBlLg0KPiA+DQo+ID4gVGhlIGhhaXJwaW4gcXVldWUgaW4gYnVpbGQgZnJvbSBSeCBxdWV1ZSBi aW5kZWQgdG8gVHggcXVldWUuDQo+ID4gSXQgaXMgdXNlZCB0byBvZmZsb2FkIHRyYWZmaWMgY29t aW5nIGZyb20gdGhlIHdpcmUgYW5kIHJlZGlyZWN0IGl0IGJhY2sNCj4gPiB0byB0aGUgd2lyZS4N Cj4gPg0KPiA+IFRoZXJlIGFyZSAzIG5ldyBmdW5jdGlvbnM6DQo+ID4gLSBydGVfZXRoX2Rldl9o YWlycGluX2NhcGFiaWxpdHlfZ2V0DQo+ID4gLSBydGVfZXRoX3J4X2hhaXJwaW5fcXVldWVfc2V0 dXANCj4gPiAtIHJ0ZV9ldGhfdHhfaGFpcnBpbl9xdWV1ZV9zZXR1cA0KPiA+DQo+ID4gSW4gb3Jk ZXIgdG8gdXNlIHRoZSBxdWV1ZSwgdGhlcmUgaXMgYSBuZWVkIHRvIGNyZWF0ZSBydGVfZmxvdw0K PiA+IHdpdGggcXVldWUgLyBSU1MgYWN0aW9uIHRoYXQgdGFyZ2V0cyBvbmUgb3IgbW9yZSBvZiB0 aGUgUnggcXVldWVzLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogT3JpIEthbSA8b3Jpa2FAbWVs bGFub3guY29tPg0KPiA+DQo+ID4gLS0tDQo+ID4gVjQ6DQo+ID4gICAtIHVwZGF0ZSBhY2NvcmRp bmcgdG8gTUwgY29tbWVudHMuDQo+ID4NCj4gPiBWMzoNCj4gPiAgIC0gdXBkYXRlIGFjY29yZGlu ZyB0byBNTCBjb21tZW50cy4NCj4gPg0KPiA+IFYyOg0KPiA+ICAgLSB1cGRhdGUgYWNjb3JkaW5n IHRvIE1MIGNvbW1lbnRzLg0KPiA+DQo+ID4gLS0tDQo+ID4gICBsaWIvbGlicnRlX2V0aGRldi9y dGVfZXRoZGV2LmMgICAgICAgICAgIHwgMjI5DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysNCj4gPiAgIGxpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXYuaCAgICAgICAgICAgfCAx NDMgKysrKysrKysrKysrKysrKysrLQ0KPiA+ICAgbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRl dl9jb3JlLmggICAgICB8ICA5MSArKysrKysrKysrKy0NCj4gPiAgIGxpYi9saWJydGVfZXRoZGV2 L3J0ZV9ldGhkZXZfZHJpdmVyLmggICAgfCAgIDEgKw0KPiA+ICAgbGliL2xpYnJ0ZV9ldGhkZXYv cnRlX2V0aGRldl92ZXJzaW9uLm1hcCB8ICAgNSArDQo+ID4gICA1IGZpbGVzIGNoYW5nZWQsIDQ2 MSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2xp Yi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXYuYyBiL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhk ZXYuYw0KPiA+IGluZGV4IGFmODIzNjAuLjEwYThiZjIgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2xp YnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5jDQo+ID4gKysrIGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRl X2V0aGRldi5jDQo+ID4gQEAgLTkwNCw2ICs5MDQsMTQgQEAgc3RydWN0IHJ0ZV9ldGhfZGV2ICoN Cj4gPg0KPiA+ICAgCVJURV9GVU5DX1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRldl9vcHMtPnJ4X3F1 ZXVlX3N0YXJ0LCAtDQo+IEVOT1RTVVApOw0KPiA+DQo+ID4gKwlpZiAoZGV2LT5kYXRhLT5yeF9x dWV1ZV9zdGF0ZVtyeF9xdWV1ZV9pZF0gPT0NCj4gPiArCSAgICBSVEVfRVRIX1FVRVVFX1NUQVRF X0hBSVJQSU4pIHsNCj4gDQo+IE1heSBJIHN1Z2dlc3QgdG8gYWRkIGhlbHBlciBzdGF0aWMgZnVu Y3Rpb24gdG8gY2hlY2sNCj4gaWYgZGV2aWNlIFJ4IHF1ZXVlIGlzIGhhaXJwaW4uIFBsdXMgc2lt aWxhciBmdW5jdGlvbiBmb3IgVHguDQo+IEl0IHdpbGwgYWxsb3cgdG8gbWFrZSBjaGFuZ2VzIGlu IHJ4X3F1ZXVlX3N0YXRlIGxlc3MNCj4gaW50cnVzaXZlLg0KPiBUaGVzZSBmdW5jdGlvbnMgc2hv dWxkIGJlIHVzZWQgZXZlcnl3aGVyZSBiZWxvdyBpbg0KPiB0aGUgY29kZS4NCj4gDQoNCkFncmVl LCB3aWxsIGNoYW5nZS4NCg0KPiA+ICsJCVJURV9FVEhERVZfTE9HKElORk8sDQo+ID4gKwkJCSJR dWV1ZSAlIlBSSXUxNiIgb2YgZGV2aWNlIHdpdGggcG9ydF9pZD0lIlBSSXUxNiIgaXMNCj4gaGFp cnBpbiBxdWV1ZVxuIiwNCj4gDQo+IFRoZSBtZXNzYWdlIGlzIHRoZSBzYW1lIGZvciBtYW55IGNh c2VzIGFuZCBpdCBpcyBiYWQgc2luY2UgaXQgZG9lcw0KPiBub3QgYWxsb3cgdG8gaWRlbnRpZnkg cGxhY2Ugd2hlcmUgaXQgd2FzIGxvZ2dlZCBlYXNpbHkuDQo+IEl0IHNob3VsZCBiZSBtZW50aW9u ZWQgaGVyZSB0aGF0IGl0IGlzIGFuIGF0dGVtcHQgdG8gc3RhcnQgUnggcXVldWUuDQo+IA0KDQpP Lksgd2lsbCBjaGFuZ2UuDQoNCj4gPiArCQkJcnhfcXVldWVfaWQsIHBvcnRfaWQpOw0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAgIAlpZiAoZGV2LT5kYXRhLT5y eF9xdWV1ZV9zdGF0ZVtyeF9xdWV1ZV9pZF0gIT0NCj4gUlRFX0VUSF9RVUVVRV9TVEFURV9TVE9Q UEVEKSB7DQo+ID4gICAJCVJURV9FVEhERVZfTE9HKElORk8sDQo+ID4gICAJCQkiUXVldWUgJSJQ Ukl1MTYiIG9mIGRldmljZSB3aXRoIHBvcnRfaWQ9JSJQUkl1MTYiDQo+IGFscmVhZHkgc3RhcnRl ZFxuIiwNCj4gPiBAQCAtOTMxLDYgKzkzOSwxNCBAQCBzdHJ1Y3QgcnRlX2V0aF9kZXYgKg0KPiA+ DQo+ID4gICAJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0+cnhfcXVldWVf c3RvcCwgLQ0KPiBFTk9UU1VQKTsNCj4gPg0KPiA+ICsJaWYgKGRldi0+ZGF0YS0+cnhfcXVldWVf c3RhdGVbcnhfcXVldWVfaWRdID09DQo+ID4gKwkgICAgUlRFX0VUSF9RVUVVRV9TVEFURV9IQUlS UElOKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coSU5GTywNCj4gPiArCQkJIlF1ZXVlICUiUFJJ dTE2IiBvZiBkZXZpY2Ugd2l0aCBwb3J0X2lkPSUiUFJJdTE2IiBpcw0KPiBoYWlycGluIHF1ZXVl XG4iLA0KPiA+ICsJCQlyeF9xdWV1ZV9pZCwgcG9ydF9pZCk7DQo+ID4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICAgCWlmIChkZXYtPmRhdGEtPnJ4X3F1ZXVlX3N0YXRl W3J4X3F1ZXVlX2lkXSA9PQ0KPiBSVEVfRVRIX1FVRVVFX1NUQVRFX1NUT1BQRUQpIHsNCj4gPiAg IAkJUlRFX0VUSERFVl9MT0coSU5GTywNCj4gPiAgIAkJCSJRdWV1ZSAlIlBSSXUxNiIgb2YgZGV2 aWNlIHdpdGggcG9ydF9pZD0lIlBSSXUxNiINCj4gYWxyZWFkeSBzdG9wcGVkXG4iLA0KPiA+IEBA IC05NjQsNiArOTgwLDE0IEBAIHN0cnVjdCBydGVfZXRoX2RldiAqDQo+ID4NCj4gPiAgIAlSVEVf RlVOQ19QVFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3BzLT50eF9xdWV1ZV9zdGFydCwgLQ0KPiBF Tk9UU1VQKTsNCj4gPg0KPiA+ICsJaWYgKGRldi0+ZGF0YS0+dHhfcXVldWVfc3RhdGVbdHhfcXVl dWVfaWRdID09DQo+ID4gKwkgICBSVEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU4pIHsNCj4gPiAr CQlSVEVfRVRIREVWX0xPRyhJTkZPLA0KPiA+ICsJCQkiUXVldWUgJSJQUkl1MTYiIG9mIGRldmlj ZSB3aXRoIHBvcnRfaWQ9JSJQUkl1MTYiIGlzDQo+IGhhaXJwaW4gcXVldWVcbiIsDQo+ID4gKwkJ CXR4X3F1ZXVlX2lkLCBwb3J0X2lkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gICAJaWYgKGRldi0+ZGF0YS0+dHhfcXVldWVfc3RhdGVbdHhfcXVldWVfaWRd ICE9DQo+IFJURV9FVEhfUVVFVUVfU1RBVEVfU1RPUFBFRCkgew0KPiA+ICAgCQlSVEVfRVRIREVW X0xPRyhJTkZPLA0KPiA+ICAgCQkJIlF1ZXVlICUiUFJJdTE2IiBvZiBkZXZpY2Ugd2l0aCBwb3J0 X2lkPSUiUFJJdTE2Ig0KPiBhbHJlYWR5IHN0YXJ0ZWRcbiIsDQo+ID4gQEAgLTk4OSw2ICsxMDEz LDE0IEBAIHN0cnVjdCBydGVfZXRoX2RldiAqDQo+ID4NCj4gPiAgIAlSVEVfRlVOQ19QVFJfT1Jf RVJSX1JFVCgqZGV2LT5kZXZfb3BzLT50eF9xdWV1ZV9zdG9wLCAtDQo+IEVOT1RTVVApOw0KPiA+ DQo+ID4gKwlpZiAoZGV2LT5kYXRhLT50eF9xdWV1ZV9zdGF0ZVt0eF9xdWV1ZV9pZF0gPT0NCj4g PiArCSAgICBSVEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU4pIHsNCj4gPiArCQlSVEVfRVRIREVW X0xPRyhJTkZPLA0KPiA+ICsJCQkiUXVldWUgJSJQUkl1MTYiIG9mIGRldmljZSB3aXRoIHBvcnRf aWQ9JSJQUkl1MTYiIGlzDQo+IGhhaXJwaW4gcXVldWVcbiIsDQo+ID4gKwkJCXR4X3F1ZXVlX2lk LCBwb3J0X2lkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4g ICAJaWYgKGRldi0+ZGF0YS0+dHhfcXVldWVfc3RhdGVbdHhfcXVldWVfaWRdID09DQo+IFJURV9F VEhfUVVFVUVfU1RBVEVfU1RPUFBFRCkgew0KPiA+ICAgCQlSVEVfRVRIREVWX0xPRyhJTkZPLA0K PiA+ICAgCQkJIlF1ZXVlICUiUFJJdTE2IiBvZiBkZXZpY2Ugd2l0aCBwb3J0X2lkPSUiUFJJdTE2 Ig0KPiBhbHJlYWR5IHN0b3BwZWRcbiIsDQo+ID4gQEAgLTE3NTgsNiArMTc5MCw4MSBAQCBzdHJ1 Y3QgcnRlX2V0aF9kZXYgKg0KPiA+ICAgfQ0KPiA+DQo+ID4gICBpbnQNCj4gPiArcnRlX2V0aF9y eF9oYWlycGluX3F1ZXVlX3NldHVwKHVpbnQxNl90IHBvcnRfaWQsIHVpbnQxNl90IHJ4X3F1ZXVl X2lkLA0KPiA+ICsJCQkgICAgICAgdWludDE2X3QgbmJfcnhfZGVzYywNCj4gPiArCQkJICAgICAg IGNvbnN0IHN0cnVjdCBydGVfZXRoX2hhaXJwaW5fY29uZiAqY29uZikNCj4gPiArew0KPiA+ICsJ aW50IHJldDsNCj4gPiArCXN0cnVjdCBydGVfZXRoX2RldiAqZGV2Ow0KPiA+ICsJc3RydWN0IHJ0 ZV9ldGhfaGFpcnBpbl9jYXAgY2FwOw0KPiA+ICsJdm9pZCAqKnJ4cTsNCj4gPiArCWludCBpOw0K PiA+ICsJaW50IGNvdW50ID0gMDsNCj4gPiArDQo+ID4gKwlSVEVfRVRIX1ZBTElEX1BPUlRJRF9P Ul9FUlJfUkVUKHBvcnRfaWQsIC1FSU5WQUwpOw0KPiA+ICsNCj4gPiArCWRldiA9ICZydGVfZXRo X2RldmljZXNbcG9ydF9pZF07DQo+ID4gKwlpZiAocnhfcXVldWVfaWQgPj0gZGV2LT5kYXRhLT5u Yl9yeF9xdWV1ZXMpIHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhFUlIsICJJbnZhbGlkIFJYIHF1 ZXVlX2lkPSV1XG4iLA0KPiByeF9xdWV1ZV9pZCk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ID4gKwl9DQo+ID4gKwlyZXQgPSBydGVfZXRoX2Rldl9oYWlycGluX2NhcGFiaWxpdHlfZ2V0KHBv cnRfaWQsICZjYXApOw0KPiA+ICsJaWYgKHJldCAhPSAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gKwlSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3BzLQ0KPiA+cnhfaGFpcnBp bl9xdWV1ZV9zZXR1cCwNCj4gPiArCQkJCS1FTk9UU1VQKTsNCj4gPiArCS8qIFVzZSBkZWZhdWx0 IHNwZWNpZmllZCBieSBkcml2ZXIsIGlmIG5iX3J4X2Rlc2MgaXMgemVybyAqLw0KPiA+ICsJaWYg KG5iX3J4X2Rlc2MgPT0gMCkNCj4gPiArCQluYl9yeF9kZXNjID0gY2FwLm1heF9uYl9kZXNjOw0K PiA+ICsJaWYgKG5iX3J4X2Rlc2MgPiBjYXAubWF4X25iX2Rlc2MpIHsNCj4gPiArCQlSVEVfRVRI REVWX0xPRyhFUlIsDQo+ID4gKwkJCSAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgbmJfcnhfZGVz Yyg9JWh1KSwgc2hvdWxkIGJlOiAiDQo+ID4gKwkJCSAgICAgICAiPD0gJWh1IiwgbmJfcnhfZGVz YywgY2FwLm1heF9uYl9kZXNjKTsNCj4gDQo+IFBsZWFzZSwgZG9uJ3Qgc3BsaXQgZm9ybWF0IHN0 cmluZw0KPiANCg0KTy5LLiB3aWxsIGZpeC4NCg0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ ICsJfQ0KPiA+ICsJaWYgKGNvbmYtPnBlZXJfbiA+IGNhcC5tYXhfcnhfMl90eCkgew0KPiA+ICsJ CVJURV9FVEhERVZfTE9HKEVSUiwNCj4gPiArCQkJICAgICAgICJJbnZhbGlkIHZhbHVlIGZvciBu dW1iZXIgb2YgcGVlcnMoPSVodSksICINCj4gPiArCQkJICAgICAgICJzaG91bGQgYmU6IDw9ICVo dSIsIGNvbmYtPnBlZXJfbiwNCj4gDQo+IFBsZWFzZSwgZG9uJ3Qgc3BsaXQgZm9ybWF0IHN0cmlu Zy4NCj4gQWxzbyBtYWtlIHRoZSBtZXNzYWdlIHVuaXF1ZS4gUmlnaHQgbm93IGl0IGlzIHNhbWUg Zm9yIFJ4IGFuZCBUeC4NCj4NCg0KTy5LLiB3aWxsIGZpeC4NCiANCj4gPiArCQkJICAgICAgIGNh cC5tYXhfcnhfMl90eCk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwlp ZiAoY29uZi0+cGVlcl9uID09IDApIHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4g KwkJCSAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgbnVtYmVyIG9mIHBlZXJzKD0laHUpLCAiDQo+ ID4gKwkJCSAgICAgICAic2hvdWxkIGJlOiA+IDAiLCBjb25mLT5wZWVyX24pOw0KPiANCj4gUGxl YXNlLCBkb24ndCBzcGxpdCBmb3JtYXQgc3RyaW5nDQo+IEFsc28gbWFrZSB0aGUgbWVzc2FnZSB1 bmlxdWUuIFJpZ2h0IG5vdyBpdCBpcyBzYW1lIGZvciBSeCBhbmQgVHguDQo+IA0KDQpPLksuIHdp bGwgZml4Lg0KDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwlpZiAoY2Fw Lm1heF9uX3F1ZXVlcyAhPSBVSU5UMTZfTUFYKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGRl di0+ZGF0YS0+bmJfcnhfcXVldWVzOyBpKyspIHsNCj4gPiArCQkJaWYgKGRldi0+ZGF0YS0+cnhf cXVldWVfc3RhdGVbaV0gPT0NCj4gPiArCQkJICAgIFJURV9FVEhfUVVFVUVfU1RBVEVfSEFJUlBJ TikNCj4gPiArCQkJCWNvdW50Kys7DQo+ID4gKwkJfQ0KPiA+ICsJCWlmIChjb3VudCA+IGNhcC5t YXhfbl9xdWV1ZXMpIHsNCj4gPiArCQkJUlRFX0VUSERFVl9MT0coRVJSLA0KPiA+ICsJCQkJICAg ICAgICJUbyBtYW55IFJ4IGhhaXJwaW4gcXVldWVzICVkIiwgY291bnQpOw0KPiA+ICsJCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKwlpZiAoZGV2LT5kYXRhLT5kZXZf c3RhcnRlZCkNCj4gPiArCQlyZXR1cm4gLUVCVVNZOw0KPiA+ICsJcnhxID0gZGV2LT5kYXRhLT5y eF9xdWV1ZXM7DQo+ID4gKwlpZiAocnhxW3J4X3F1ZXVlX2lkXSAhPSBOVUxMKSB7DQo+ID4gKwkJ UlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0NCj4gPnJ4X3F1ZXVlX3JlbGVh c2UsDQo+ID4gKwkJCQkJLUVOT1RTVVApOw0KPiA+ICsJCSgqZGV2LT5kZXZfb3BzLT5yeF9xdWV1 ZV9yZWxlYXNlKShyeHFbcnhfcXVldWVfaWRdKTsNCj4gPiArCQlyeHFbcnhfcXVldWVfaWRdID0g TlVMTDsNCj4gPiArCX0NCj4gPiArCXJldCA9ICgqZGV2LT5kZXZfb3BzLT5yeF9oYWlycGluX3F1 ZXVlX3NldHVwKShkZXYsIHJ4X3F1ZXVlX2lkLA0KPiA+ICsJCQkJCQkgICAgICBuYl9yeF9kZXNj LCBjb25mKTsNCj4gPiArCWlmIChyZXQgPT0gMCkNCj4gPiArCQlkZXYtPmRhdGEtPnJ4X3F1ZXVl X3N0YXRlW3J4X3F1ZXVlX2lkXSA9DQo+ID4gKwkJCVJURV9FVEhfUVVFVUVfU1RBVEVfSEFJUlBJ TjsNCj4gPiArCXJldHVybiBldGhfZXJyKHBvcnRfaWQsIHJldCk7DQo+ID4gK30NCj4gPiArDQo+ ID4gK2ludA0KPiA+ICAgcnRlX2V0aF90eF9xdWV1ZV9zZXR1cCh1aW50MTZfdCBwb3J0X2lkLCB1 aW50MTZfdCB0eF9xdWV1ZV9pZCwNCj4gPiAgIAkJICAgICAgIHVpbnQxNl90IG5iX3R4X2Rlc2Ms IHVuc2lnbmVkIGludCBzb2NrZXRfaWQsDQo+ID4gICAJCSAgICAgICBjb25zdCBzdHJ1Y3QgcnRl X2V0aF90eGNvbmYgKnR4X2NvbmYpDQo+ID4gQEAgLTE4NTYsNiArMTk2Myw4MCBAQCBzdHJ1Y3Qg cnRlX2V0aF9kZXYgKg0KPiA+ICAgCQkgICAgICAgdHhfcXVldWVfaWQsIG5iX3R4X2Rlc2MsIHNv Y2tldF9pZCwgJmxvY2FsX2NvbmYpKTsNCj4gPiAgIH0NCj4gPg0KPiA+ICtpbnQNCj4gPiArcnRl X2V0aF90eF9oYWlycGluX3F1ZXVlX3NldHVwKHVpbnQxNl90IHBvcnRfaWQsIHVpbnQxNl90IHR4 X3F1ZXVlX2lkLA0KPiA+ICsJCQkgICAgICAgdWludDE2X3QgbmJfdHhfZGVzYywNCj4gPiArCQkJ ICAgICAgIGNvbnN0IHN0cnVjdCBydGVfZXRoX2hhaXJwaW5fY29uZiAqY29uZikNCj4gPiArew0K PiA+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXY7DQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aF9oYWly cGluX2NhcCBjYXA7DQo+ID4gKwl2b2lkICoqdHhxOw0KPiA+ICsJaW50IGk7DQo+ID4gKwlpbnQg Y291bnQgPSAwOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlSVEVfRVRIX1ZBTElEX1BP UlRJRF9PUl9FUlJfUkVUKHBvcnRfaWQsIC1FSU5WQUwpOw0KPiA+ICsJZGV2ID0gJnJ0ZV9ldGhf ZGV2aWNlc1twb3J0X2lkXTsNCj4gPiArCWlmICh0eF9xdWV1ZV9pZCA+PSBkZXYtPmRhdGEtPm5i X3R4X3F1ZXVlcykgew0KPiA+ICsJCVJURV9FVEhERVZfTE9HKEVSUiwgIkludmFsaWQgVFggcXVl dWVfaWQ9JXVcbiIsDQo+IHR4X3F1ZXVlX2lkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiArCX0NCj4gPiArCXJldCA9IHJ0ZV9ldGhfZGV2X2hhaXJwaW5fY2FwYWJpbGl0eV9nZXQocG9y dF9pZCwgJmNhcCk7DQo+ID4gKwlpZiAocmV0ICE9IDApDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4g PiArCVJURV9GVU5DX1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRldl9vcHMtDQo+ID50eF9oYWlycGlu X3F1ZXVlX3NldHVwLA0KPiA+ICsJCQkJLUVOT1RTVVApOw0KPiA+ICsJLyogVXNlIGRlZmF1bHQg c3BlY2lmaWVkIGJ5IGRyaXZlciwgaWYgbmJfdHhfZGVzYyBpcyB6ZXJvICovDQo+ID4gKwlpZiAo bmJfdHhfZGVzYyA9PSAwKQ0KPiA+ICsJCW5iX3R4X2Rlc2MgPSBjYXAubWF4X25iX2Rlc2M7DQo+ ID4gKwlpZiAobmJfdHhfZGVzYyA+IGNhcC5tYXhfbmJfZGVzYykgew0KPiA+ICsJCVJURV9FVEhE RVZfTE9HKEVSUiwNCj4gPiArCQkJICAgICAgICJJbnZhbGlkIHZhbHVlIGZvciBuYl90eF9kZXNj KD0laHUpLCBzaG91bGQgYmU6ICINCj4gPiArCQkJICAgICAgICI8PSAlaHUiLCBuYl90eF9kZXNj LCBjYXAubWF4X25iX2Rlc2MpOw0KPiANCj4gUGxlYXNlLCBkb24ndCBzcGxpdCBmb3JtYXQgc3Ry aW5nDQo+DQoNCiANCk8uSy4gd2lsbCBmaXguDQoNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiArCX0NCj4gPiArCWlmIChjb25mLT5wZWVyX24gPiBjYXAubWF4X3R4XzJfcngpIHsNCj4gPiAr CQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4gKwkJCSAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3Ig bnVtYmVyIG9mIHBlZXJzKD0laHUpLCAiDQo+ID4gKwkJCSAgICAgICAic2hvdWxkIGJlOiA8PSAl aHUiLCBjb25mLT5wZWVyX24sDQo+IA0KPiBQbGVhc2UsIGRvbid0IHNwbGl0IGZvcm1hdCBzdHJp bmcNCj4gDQoNCk8uSy4gd2lsbCBmaXguDQoNCj4gPiArCQkJICAgICAgIGNhcC5tYXhfdHhfMl9y eCk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwlpZiAoY29uZi0+cGVl cl9uID09IDApIHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4gKwkJCSAgICAgICAi SW52YWxpZCB2YWx1ZSBmb3IgbnVtYmVyIG9mIHBlZXJzKD0laHUpLCAiDQo+ID4gKwkJCSAgICAg ICAic2hvdWxkIGJlOiA+IDAiLCBjb25mLT5wZWVyX24pOw0KPiANCj4gUGxlYXNlLCBkb24ndCBz cGxpdCBmb3JtYXQgc3RyaW5nDQo+IA0KDQpPLksuIHdpbGwgZml4Lg0KDQo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwlpZiAoY2FwLm1heF9uX3F1ZXVlcyAhPSBVSU5UMTZf TUFYKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGRldi0+ZGF0YS0+bmJfdHhfcXVldWVzOyBp KyspIHsNCj4gPiArCQkJaWYgKGRldi0+ZGF0YS0+dHhfcXVldWVfc3RhdGVbaV0gPT0NCj4gPiAr CQkJICAgIFJURV9FVEhfUVVFVUVfU1RBVEVfSEFJUlBJTikNCj4gPiArCQkJCWNvdW50Kys7DQo+ ID4gKwkJfQ0KPiA+ICsJCWlmIChjb3VudCA+IGNhcC5tYXhfbl9xdWV1ZXMpIHsNCj4gPiArCQkJ UlRFX0VUSERFVl9MT0coRVJSLA0KPiA+ICsJCQkJICAgICAgICJUbyBtYW55IFJ4IGhhaXJwaW4g cXVldWVzICVkIiwgY291bnQpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ ID4gKwl9DQo+ID4gKwlpZiAoZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCkNCj4gPiArCQlyZXR1cm4g LUVCVVNZOw0KPiA+ICsJdHhxID0gZGV2LT5kYXRhLT50eF9xdWV1ZXM7DQo+ID4gKwlpZiAodHhx W3R4X3F1ZXVlX2lkXSAhPSBOVUxMKSB7DQo+ID4gKwkJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQo KmRldi0+ZGV2X29wcy0NCj4gPnR4X3F1ZXVlX3JlbGVhc2UsDQo+ID4gKwkJCQkJLUVOT1RTVVAp Ow0KPiA+ICsJCSgqZGV2LT5kZXZfb3BzLT50eF9xdWV1ZV9yZWxlYXNlKSh0eHFbdHhfcXVldWVf aWRdKTsNCj4gPiArCQl0eHFbdHhfcXVldWVfaWRdID0gTlVMTDsNCj4gPiArCX0NCj4gPiArCXJl dCA9ICgqZGV2LT5kZXZfb3BzLT50eF9oYWlycGluX3F1ZXVlX3NldHVwKQ0KPiA+ICsJCShkZXYs IHR4X3F1ZXVlX2lkLCBuYl90eF9kZXNjLCBjb25mKTsNCj4gPiArCWlmIChyZXQgPT0gMCkNCj4g PiArCQlkZXYtPmRhdGEtPnR4X3F1ZXVlX3N0YXRlW3R4X3F1ZXVlX2lkXSA9DQo+ID4gKwkJCVJU RV9FVEhfUVVFVUVfU1RBVEVfSEFJUlBJTjsNCj4gPiArCXJldHVybiBldGhfZXJyKHBvcnRfaWQs IHJldCk7DQo+ID4gK30NCj4gPiArDQo+ID4gICB2b2lkDQo+ID4gICBydGVfZXRoX3R4X2J1ZmZl cl9kcm9wX2NhbGxiYWNrKHN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IHVuc2VudCwN Cj4gPiAgIAkJdm9pZCAqdXNlcmRhdGEgX19ydGVfdW51c2VkKQ0KPiA+IEBAIC0zOTgxLDEyICs0 MTYyLDIwIEBAIGludCBydGVfZXRoX3NldF9xdWV1ZV9yYXRlX2xpbWl0KHVpbnQxNl90DQo+IHBv cnRfaWQsIHVpbnQxNl90IHF1ZXVlX2lkeCwNCj4gPiAgIAlydGVfZXJybm8gPSBFTk9UU1VQOw0K PiA+ICAgCXJldHVybiBOVUxMOw0KPiA+ICAgI2VuZGlmDQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aF9k ZXYgKmRldjsNCj4gPiArDQo+ID4gICAJLyogY2hlY2sgaW5wdXQgcGFyYW1ldGVycyAqLw0KPiA+ ICAgCWlmICghcnRlX2V0aF9kZXZfaXNfdmFsaWRfcG9ydChwb3J0X2lkKSB8fCBmbiA9PSBOVUxM IHx8DQo+ID4gICAJCSAgICBxdWV1ZV9pZCA+PSBydGVfZXRoX2RldmljZXNbcG9ydF9pZF0uZGF0 YS0+bmJfcnhfcXVldWVzKSB7DQo+ID4gICAJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiAgIAkJ cmV0dXJuIE5VTEw7DQo+ID4gICAJfQ0KPiA+ICsJZGV2ID0gJnJ0ZV9ldGhfZGV2aWNlc1twb3J0 X2lkXTsNCj4gPiArCWlmIChkZXYtPmRhdGEtPnJ4X3F1ZXVlX3N0YXRlW3F1ZXVlX2lkXSA9PQ0K PiA+ICsJICAgIFJURV9FVEhfUVVFVUVfU1RBVEVfSEFJUlBJTikgew0KPiA+ICsJCXJ0ZV9lcnJu byA9IEVJTlZBTDsNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArCX0NCj4gPiAgIAlzdHJ1Y3Qg cnRlX2V0aF9yeHR4X2NhbGxiYWNrICpjYiA9IHJ0ZV96bWFsbG9jKE5VTEwsIHNpemVvZigqY2Ip LCAwKTsNCj4gPg0KPiA+ICAgCWlmIChjYiA9PSBOVUxMKSB7DQo+ID4gQEAgLTQwNTgsNiArNDI0 Nyw4IEBAIGludCBydGVfZXRoX3NldF9xdWV1ZV9yYXRlX2xpbWl0KHVpbnQxNl90IHBvcnRfaWQs DQo+IHVpbnQxNl90IHF1ZXVlX2lkeCwNCj4gPiAgIAlydGVfZXJybm8gPSBFTk9UU1VQOw0KPiA+ ICAgCXJldHVybiBOVUxMOw0KPiA+ICAgI2VuZGlmDQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXYg KmRldjsNCj4gPiArDQo+ID4gICAJLyogY2hlY2sgaW5wdXQgcGFyYW1ldGVycyAqLw0KPiA+ICAg CWlmICghcnRlX2V0aF9kZXZfaXNfdmFsaWRfcG9ydChwb3J0X2lkKSB8fCBmbiA9PSBOVUxMIHx8 DQo+ID4gICAJCSAgICBxdWV1ZV9pZCA+PSBydGVfZXRoX2RldmljZXNbcG9ydF9pZF0uZGF0YS0+ bmJfdHhfcXVldWVzKSB7DQo+ID4gQEAgLTQwNjUsNiArNDI1NiwxMyBAQCBpbnQgcnRlX2V0aF9z ZXRfcXVldWVfcmF0ZV9saW1pdCh1aW50MTZfdA0KPiBwb3J0X2lkLCB1aW50MTZfdCBxdWV1ZV9p ZHgsDQo+ID4gICAJCXJldHVybiBOVUxMOw0KPiA+ICAgCX0NCj4gPg0KPiA+ICsJZGV2ID0gJnJ0 ZV9ldGhfZGV2aWNlc1twb3J0X2lkXTsNCj4gPiArCWlmIChkZXYtPmRhdGEtPnR4X3F1ZXVlX3N0 YXRlW3F1ZXVlX2lkXSA9PQ0KPiA+ICsJICAgIFJURV9FVEhfUVVFVUVfU1RBVEVfSEFJUlBJTikg ew0KPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gICAJc3RydWN0IHJ0ZV9ldGhfcnh0eF9jYWxsYmFjayAqY2IgPSBydGVf em1hbGxvYyhOVUxMLCBzaXplb2YoKmNiKSwgMCk7DQo+ID4NCj4gPiAgIAlpZiAoY2IgPT0gTlVM TCkgew0KPiA+IEBAIC00MTgwLDYgKzQzNzgsMTQgQEAgaW50IHJ0ZV9ldGhfc2V0X3F1ZXVlX3Jh dGVfbGltaXQodWludDE2X3QNCj4gcG9ydF9pZCwgdWludDE2X3QgcXVldWVfaWR4LA0KPiA+DQo+ ID4gICAJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0+cnhxX2luZm9fZ2V0 LCAtDQo+IEVOT1RTVVApOw0KPiA+DQo+ID4gKwlpZiAoZGV2LT5kYXRhLT5yeF9xdWV1ZV9zdGF0 ZVtxdWV1ZV9pZF0gPT0NCj4gPiArCSAgICBSVEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU4pIHsN Cj4gPiArCQlSVEVfRVRIREVWX0xPRyhJTkZPLA0KPiA+ICsJCQkiUXVldWUgJSJQUkl1MTYiIG9m IGRldmljZSB3aXRoIHBvcnRfaWQ9JSJQUkl1MTYiIGlzDQo+IGhhaXJwaW4gcXVldWVcbiIsDQo+ IA0KPiBJIHRoaW5rIGl0IHdvdWxkIGJlIHVzZWZ1bCBpZiBsb2cgbWVudGlvbnMgd2hhdCBjYWxs ZXIgdHJpZWQgdG8gZG8uDQo+IFNlZSBub3RlIGFib3V0IGxvZyBtZXNzYWdlcyB1bmlxdWVuZXNz LCBlLmcuDQo+ICJDYW5ub3QgZ2V0IFJ4USBpbmZvOiBwb3J0ICUiUFJJdTE2IiBxdWV1ZSAlIlBS SXUxNiIgaXMgaGFpcnBpbiINCj4gQWxzbyBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBjaGVjayBp dCBiZWZvcmUgcnhxX2luZm9fZ2V0IGNoZWNrDQo+IG1haW5seSB0byBwdXQgaXQgbmVhcmJ5IHF1 ZXVlIHJhbmdlIGNoZWNrIHRvIGdyb3VwIGFsbA0KPiBxdWV1ZSBJRCBjaGVja3MgdG9nZXRoZXIu DQo+IA0KDQpPLksuIHdpbGwgZml4Lg0KDQo+ID4gKwkJCXF1ZXVlX2lkLCBwb3J0X2lkKTsNCj4g PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gICAJbWVtc2V0KHFpbmZv LCAwLCBzaXplb2YoKnFpbmZvKSk7DQo+ID4gICAJZGV2LT5kZXZfb3BzLT5yeHFfaW5mb19nZXQo ZGV2LCBxdWV1ZV9pZCwgcWluZm8pOw0KPiA+ICAgCXJldHVybiAwOw0KPiA+IEBAIC00MjAyLDYg KzQ0MDgsMTQgQEAgaW50IHJ0ZV9ldGhfc2V0X3F1ZXVlX3JhdGVfbGltaXQodWludDE2X3QNCj4g cG9ydF9pZCwgdWludDE2X3QgcXVldWVfaWR4LA0KPiA+ICAgCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiAgIAl9DQo+ID4NCj4gPiArCWlmIChkZXYtPmRhdGEtPnR4X3F1ZXVlX3N0YXRlW3F1ZXVlX2lk XSA9PQ0KPiA+ICsJICAgIFJURV9FVEhfUVVFVUVfU1RBVEVfSEFJUlBJTikgew0KPiA+ICsJCVJU RV9FVEhERVZfTE9HKElORk8sDQo+ID4gKwkJCSJRdWV1ZSAlIlBSSXUxNiIgb2YgZGV2aWNlIHdp dGggcG9ydF9pZD0lIlBSSXUxNiIgaXMNCj4gaGFpcnBpbiBxdWV1ZVxuIiwNCj4gDQo+IFNhbWUg YXMgYWJvdmUuDQo+IA0KDQpPLksuIHdpbGwgZml4Lg0KDQo+ID4gKwkJCXF1ZXVlX2lkLCBwb3J0 X2lkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gICAJUlRF X0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0+dHhxX2luZm9fZ2V0LCAtDQo+IEVO T1RTVVApOw0KPiA+DQo+ID4gICAJbWVtc2V0KHFpbmZvLCAwLCBzaXplb2YoKnFpbmZvKSk7DQo+ ID4gQEAgLTQ1MTAsNiArNDcyNCwyMSBAQCBpbnQgcnRlX2V0aF9zZXRfcXVldWVfcmF0ZV9saW1p dCh1aW50MTZfdA0KPiBwb3J0X2lkLCB1aW50MTZfdCBxdWV1ZV9pZHgsDQo+ID4gICB9DQo+ID4N Cj4gPiAgIGludA0KPiA+ICtydGVfZXRoX2Rldl9oYWlycGluX2NhcGFiaWxpdHlfZ2V0KHVpbnQx Nl90IHBvcnRfaWQsDQo+ID4gKwkJCQkgICBzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NhcCAqY2Fw KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldjsNCj4gPiArDQo+ID4gKwlS VEVfRVRIX1ZBTElEX1BPUlRJRF9PUl9FUlJfUkVUKHBvcnRfaWQsIC1FSU5WQUwpOw0KPiA+ICsN Cj4gPiArCWRldiA9ICZydGVfZXRoX2RldmljZXNbcG9ydF9pZF07DQo+ID4gKwlSVEVfRlVOQ19Q VFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3BzLT5oYWlycGluX2NhcF9nZXQsDQo+ID4gKwkJCQkt RU5PVFNVUCk7DQo+ID4gKwltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOw0KPiA+ICsJcmV0 dXJuIGV0aF9lcnIocG9ydF9pZCwgKCpkZXYtPmRldl9vcHMtPmhhaXJwaW5fY2FwX2dldCkoZGV2 LCBjYXApKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50DQo+ID4gICBydGVfZXRoX2Rldl9wb29s X29wc19zdXBwb3J0ZWQodWludDE2X3QgcG9ydF9pZCwgY29uc3QgY2hhciAqcG9vbCkNCj4gPiAg IHsNCj4gPiAgIAlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldjsNCj4gPiBkaWZmIC0tZ2l0IGEvbGli L2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oIGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRl di5oDQo+ID4gaW5kZXggMTg3YTJiYi4uMjc2ZjU1ZiAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGli cnRlX2V0aGRldi9ydGVfZXRoZGV2LmgNCj4gPiArKysgYi9saWIvbGlicnRlX2V0aGRldi9ydGVf ZXRoZGV2LmgNCj4gPiBAQCAtODA0LDYgKzgwNCw0NiBAQCBzdHJ1Y3QgcnRlX2V0aF90eGNvbmYg ew0KPiA+ICAgfTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBi IEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91 dCBwcmlvcg0KPiBub3RpY2UNCj4gPiArICoNCj4gPiArICogQSBzdHJ1Y3R1cmUgdXNlZCB0byBy ZXR1cm4gdGhlIGhhaXJwaW4gY2FwYWJpbGl0aWVzIHRoYXQgYXJlIHN1cHBvcnRlZC4NCj4gPiAr ICovDQo+ID4gK3N0cnVjdCBydGVfZXRoX2hhaXJwaW5fY2FwIHsNCj4gPiArCXVpbnQxNl90IG1h eF9uX3F1ZXVlczsNCj4gPiArCS8qKjwgVGhlIG1heCBudW1iZXIgb2YgaGFpcnBpbiBxdWV1ZXMg KGRpZmZlcmVudCBiaW5kaW5ncykuICovDQo+ID4gKwl1aW50MTZfdCBtYXhfcnhfMl90eDsNCj4g PiArCS8qKjwgTWF4IG51bWJlciBvZiBSeCBxdWV1ZXMgdG8gYmUgY29ubmVjdGVkIHRvIG9uZSBU eCBxdWV1ZS4gKi8NCj4gPiArCXVpbnQxNl90IG1heF90eF8yX3J4Ow0KPiA+ICsJLyoqPCBNYXgg bnVtYmVyIG9mIFR4IHF1ZXVlcyB0byBiZSBjb25uZWN0ZWQgdG8gb25lIFJ4IHF1ZXVlLiAqLw0K PiA+ICsJdWludDE2X3QgbWF4X25iX2Rlc2M7IC8qKjwgVGhlIG1heCBudW0gb2YgZGVzY3JpcHRv cnMuICovDQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJURV9FVEhfTUFYX0hBSVJQSU5f UEVFUlMgMzINCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBF WFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQg cHJpb3INCj4gbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEEgc3RydWN0dXJlIHVzZWQgdG8gaG9s ZCBoYWlycGluIHBlZXIgZGF0YS4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfZXRoX2hhaXJw aW5fcGVlciB7DQo+ID4gKwl1aW50MTZfdCBwb3J0OyAvKio8IFBlZXIgcG9ydC4gKi8NCj4gPiAr CXVpbnQxNl90IHF1ZXVlOyAvKio8IFBlZXIgcXVldWUuICovDQo+ID4gK307DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQ SSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9yDQo+IG5vdGljZQ0KPiA+ ICsgKg0KPiA+ICsgKiBBIHN0cnVjdHVyZSB1c2VkIHRvIGNvbmZpZ3VyZSBoYWlycGluIGJpbmRp bmcuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NvbmYgew0KPiA+ICsJ dWludDE2X3QgcGVlcl9uOyAvKio8IFRoZSBudW1iZXIgb2YgcGVlcnMuICovDQo+ID4gKwlzdHJ1 Y3QgcnRlX2V0aF9oYWlycGluX3BlZXIgcGVlcnNbUlRFX0VUSF9NQVhfSEFJUlBJTl9QRUVSU107 DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAgICAqIEEgc3RydWN0dXJlIGNvbnRhaW5z IGluZm9ybWF0aW9uIGFib3V0IEhXIGRlc2NyaXB0b3IgcmluZyBsaW1pdGF0aW9ucy4NCj4gPiAg ICAqLw0KPiA+ICAgc3RydWN0IHJ0ZV9ldGhfZGVzY19saW0gew0KPiA+IEBAIC0xNzY1LDYgKzE4 MDUsMzcgQEAgaW50IHJ0ZV9ldGhfcnhfcXVldWVfc2V0dXAodWludDE2X3QgcG9ydF9pZCwNCj4g dWludDE2X3QgcnhfcXVldWVfaWQsDQo+ID4gICAJCXN0cnVjdCBydGVfbWVtcG9vbCAqbWJfcG9v bCk7DQo+ID4NCj4gPiAgIC8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklN RU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3IN Cj4gbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEFsbG9jYXRlIGFuZCBzZXQgdXAgYSBoYWlycGlu IHJlY2VpdmUgcXVldWUgZm9yIGFuIEV0aGVybmV0IGRldmljZS4NCj4gPiArICoNCj4gPiArICog VGhlIGZ1bmN0aW9uIHNldCB1cCB0aGUgc2VsZWN0ZWQgcXVldWUgdG8gYmUgdXNlZCBpbiBoYWly cGluLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gcG9ydF9pZA0KPiA+ICsgKiAgIFRoZSBwb3J0 IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtIHJ4X3F1 ZXVlX2lkDQo+ID4gKyAqICAgVGhlIGluZGV4IG9mIHRoZSByZWNlaXZlIHF1ZXVlIHRvIHNldCB1 cC4NCj4gPiArICogICBUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIG5iX3J4X3F1 ZXVlIC0gMV0gcHJldmlvdXNseSBzdXBwbGllZA0KPiA+ICsgKiAgIHRvIHJ0ZV9ldGhfZGV2X2Nv bmZpZ3VyZSgpLg0KPiA+ICsgKiBAcGFyYW0gbmJfcnhfZGVzYw0KPiA+ICsgKiAgIFRoZSBudW1i ZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyB0byBhbGxvY2F0ZSBmb3IgdGhlIHJlY2VpdmUgcmlu Zy4NCj4gPiArICogICAwIG1lYW5zIHRoZSBQTUQgd2lsbCB1c2UgZGVmYXVsdCB2YWx1ZS4NCj4g PiArICogQHBhcmFtIGNvbmYNCj4gPiArICogICBUaGUgcG9pbnRlciB0byB0aGUgaGFpcnBpbiBj b25maWd1cmF0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgLSAoMCkg aWYgc3VjY2Vzc2Z1bC4NCj4gPiArICogICAtICgtRU5PVFNVUCkgaWYgaGFyZHdhcmUgZG9lc24n dCBzdXBwb3J0Lg0KPiA+ICsgKiAgIC0gKC1FSU5WQUwpIGlmIGJhZCBwYXJhbWV0ZXIuDQo+ID4g KyAqICAgLSAoLUVOT01FTSkgaWYgdW5hYmxlIHRvIGFsbG9jYXRlIHRoZSByZXNvdXJjZXMuDQo+ ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAraW50IHJ0ZV9ldGhfcnhfaGFp cnBpbl9xdWV1ZV9zZXR1cA0KPiA+ICsJKHVpbnQxNl90IHBvcnRfaWQsIHVpbnQxNl90IHJ4X3F1 ZXVlX2lkLCB1aW50MTZfdCBuYl9yeF9kZXNjLA0KPiA+ICsJIGNvbnN0IHN0cnVjdCBydGVfZXRo X2hhaXJwaW5fY29uZiAqY29uZik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAgICAqIEFsbG9jYXRl IGFuZCBzZXQgdXAgYSB0cmFuc21pdCBxdWV1ZSBmb3IgYW4gRXRoZXJuZXQgZGV2aWNlLg0KPiA+ ICAgICoNCj4gPiAgICAqIEBwYXJhbSBwb3J0X2lkDQo+ID4gQEAgLTE4MTcsNiArMTg4OCwzNSBA QCBpbnQgcnRlX2V0aF90eF9xdWV1ZV9zZXR1cCh1aW50MTZfdCBwb3J0X2lkLA0KPiB1aW50MTZf dCB0eF9xdWV1ZV9pZCwNCj4gPiAgIAkJY29uc3Qgc3RydWN0IHJ0ZV9ldGhfdHhjb25mICp0eF9j b25mKTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVS SU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlv cg0KPiBub3RpY2UNCj4gPiArICoNCj4gPiArICogQWxsb2NhdGUgYW5kIHNldCB1cCBhIHRyYW5z bWl0IGhhaXJwaW4gcXVldWUgZm9yIGFuIEV0aGVybmV0IGRldmljZS4NCj4gPiArICoNCj4gPiAr ICogQHBhcmFtIHBvcnRfaWQNCj4gPiArICogICBUaGUgcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBF dGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbSB0eF9xdWV1ZV9pZA0KPiA+ICsgKiAgIFRo ZSBpbmRleCBvZiB0aGUgdHJhbnNtaXQgcXVldWUgdG8gc2V0IHVwLg0KPiA+ICsgKiAgIFRoZSB2 YWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwgbmJfdHhfcXVldWUgLSAxXSBwcmV2aW91c2x5 IHN1cHBsaWVkDQo+ID4gKyAqICAgdG8gcnRlX2V0aF9kZXZfY29uZmlndXJlKCkuDQo+ID4gKyAq IEBwYXJhbSBuYl90eF9kZXNjDQo+ID4gKyAqICAgVGhlIG51bWJlciBvZiB0cmFuc21pdCBkZXNj cmlwdG9ycyB0byBhbGxvY2F0ZSBmb3IgdGhlIHRyYW5zbWl0IHJpbmcuDQo+ID4gKyAqICAgMCB0 byBzZXQgZGVmYXVsdCBQTUQgdmFsdWUuDQo+ID4gKyAqIEBwYXJhbSBjb25mDQo+ID4gKyAqICAg VGhlIGhhaXJwaW4gY29uZmlndXJhdGlvbi4NCj4gPiArICoNCj4gPiArICogQHJldHVybg0KPiA+ ICsgKiAgIC0gKDApIGlmIHN1Y2Nlc3NmdWwuDQo+ID4gKyAqICAgLSAoLUVOT1RTVVApIGlmIGhh cmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydC4NCj4gPiArICogICAtICgtRUlOVkFMKSBpZiBiYWQgcGFy YW1ldGVyLg0KPiA+ICsgKiAgIC0gKC1FTk9NRU0pIGlmIHVuYWJsZSB0byBhbGxvY2F0ZSB0aGUg cmVzb3VyY2VzLg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK2ludCBy dGVfZXRoX3R4X2hhaXJwaW5fcXVldWVfc2V0dXANCj4gPiArCSh1aW50MTZfdCBwb3J0X2lkLCB1 aW50MTZfdCB0eF9xdWV1ZV9pZCwgdWludDE2X3QgbmJfdHhfZGVzYywNCj4gPiArCSBjb25zdCBz dHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NvbmYgKmNvbmYpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g ICAgKiBSZXR1cm4gdGhlIE5VTUEgc29ja2V0IHRvIHdoaWNoIGFuIEV0aGVybmV0IGRldmljZSBp cyBjb25uZWN0ZWQNCj4gPiAgICAqDQo+ID4gICAgKiBAcGFyYW0gcG9ydF9pZA0KPiA+IEBAIC0x ODUxLDcgKzE5NTEsNyBAQCBpbnQgcnRlX2V0aF90eF9xdWV1ZV9zZXR1cCh1aW50MTZfdCBwb3J0 X2lkLA0KPiB1aW50MTZfdCB0eF9xdWV1ZV9pZCwNCj4gPiAgICAqICAgdG8gcnRlX2V0aF9kZXZf Y29uZmlndXJlKCkuDQo+ID4gICAgKiBAcmV0dXJuDQo+ID4gICAgKiAgIC0gMDogU3VjY2Vzcywg dGhlIHJlY2VpdmUgcXVldWUgaXMgc3RhcnRlZC4NCj4gPiAtICogICAtIC1FSU5WQUw6IFRoZSBw b3J0X2lkIG9yIHRoZSBxdWV1ZV9pZCBvdXQgb2YgcmFuZ2UuDQo+ID4gKyAqICAgLSAtRUlOVkFM OiBUaGUgcG9ydF9pZCBvciB0aGUgcXVldWVfaWQgb3V0IG9mIHJhbmdlIG9yIGJlbG9uZyB0byBo YWlycGluLg0KPiA+ICAgICogICAtIC1FSU86IGlmIGRldmljZSBpcyByZW1vdmVkLg0KPiA+ICAg ICogICAtIC1FTk9UU1VQOiBUaGUgZnVuY3Rpb24gbm90IHN1cHBvcnRlZCBpbiBQTUQgZHJpdmVy Lg0KPiA+ICAgICovDQo+ID4gQEAgLTE4NjgsNyArMTk2OCw3IEBAIGludCBydGVfZXRoX3R4X3F1 ZXVlX3NldHVwKHVpbnQxNl90IHBvcnRfaWQsDQo+IHVpbnQxNl90IHR4X3F1ZXVlX2lkLA0KPiA+ ICAgICogICB0byBydGVfZXRoX2Rldl9jb25maWd1cmUoKS4NCj4gPiAgICAqIEByZXR1cm4NCj4g PiAgICAqICAgLSAwOiBTdWNjZXNzLCB0aGUgcmVjZWl2ZSBxdWV1ZSBpcyBzdG9wcGVkLg0KPiA+ IC0gKiAgIC0gLUVJTlZBTDogVGhlIHBvcnRfaWQgb3IgdGhlIHF1ZXVlX2lkIG91dCBvZiByYW5n ZS4NCj4gPiArICogICAtIC1FSU5WQUw6IFRoZSBwb3J0X2lkIG9yIHRoZSBxdWV1ZV9pZCBvdXQg b2YgcmFuZ2Ugb3IgYmVsb25nIHRvIGhhaXJwaW4uDQo+ID4gICAgKiAgIC0gLUVJTzogaWYgZGV2 aWNlIGlzIHJlbW92ZWQuDQo+ID4gICAgKiAgIC0gLUVOT1RTVVA6IFRoZSBmdW5jdGlvbiBub3Qg c3VwcG9ydGVkIGluIFBNRCBkcml2ZXIuDQo+ID4gICAgKi8NCj4gPiBAQCAtMTg4Niw3ICsxOTg2 LDcgQEAgaW50IHJ0ZV9ldGhfdHhfcXVldWVfc2V0dXAodWludDE2X3QgcG9ydF9pZCwNCj4gdWlu dDE2X3QgdHhfcXVldWVfaWQsDQo+ID4gICAgKiAgIHRvIHJ0ZV9ldGhfZGV2X2NvbmZpZ3VyZSgp Lg0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogICAtIDA6IFN1Y2Nlc3MsIHRoZSB0cmFuc21p dCBxdWV1ZSBpcyBzdGFydGVkLg0KPiA+IC0gKiAgIC0gLUVJTlZBTDogVGhlIHBvcnRfaWQgb3Ig dGhlIHF1ZXVlX2lkIG91dCBvZiByYW5nZS4NCj4gPiArICogICAtIC1FSU5WQUw6IFRoZSBwb3J0 X2lkIG9yIHRoZSBxdWV1ZV9pZCBvdXQgb2YgcmFuZ2Ugb3IgYmVsb25nIHRvIGhhaXJwaW4uDQo+ ID4gICAgKiAgIC0gLUVJTzogaWYgZGV2aWNlIGlzIHJlbW92ZWQuDQo+ID4gICAgKiAgIC0gLUVO T1RTVVA6IFRoZSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkIGluIFBNRCBkcml2ZXIuDQo+ID4gICAg Ki8NCj4gPiBAQCAtMTkwMyw3ICsyMDAzLDcgQEAgaW50IHJ0ZV9ldGhfdHhfcXVldWVfc2V0dXAo dWludDE2X3QgcG9ydF9pZCwNCj4gdWludDE2X3QgdHhfcXVldWVfaWQsDQo+ID4gICAgKiAgIHRv IHJ0ZV9ldGhfZGV2X2NvbmZpZ3VyZSgpLg0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogICAt IDA6IFN1Y2Nlc3MsIHRoZSB0cmFuc21pdCBxdWV1ZSBpcyBzdG9wcGVkLg0KPiA+IC0gKiAgIC0g LUVJTlZBTDogVGhlIHBvcnRfaWQgb3IgdGhlIHF1ZXVlX2lkIG91dCBvZiByYW5nZS4NCj4gPiAr ICogICAtIC1FSU5WQUw6IFRoZSBwb3J0X2lkIG9yIHRoZSBxdWV1ZV9pZCBvdXQgb2YgcmFuZ2Ug b3IgYmVsb25nIHRvIGhhaXJwaW4uDQo+ID4gICAgKiAgIC0gLUVJTzogaWYgZGV2aWNlIGlzIHJl bW92ZWQuDQo+ID4gICAgKiAgIC0gLUVOT1RTVVA6IFRoZSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVk IGluIFBNRCBkcml2ZXIuDQo+ID4gICAgKi8NCj4gPiBAQCAtMzU2OSw3ICszNjY5LDggQEAgaW50 IHJ0ZV9ldGhfcmVtb3ZlX3R4X2NhbGxiYWNrKHVpbnQxNl90IHBvcnRfaWQsDQo+IHVpbnQxNl90 IHF1ZXVlX2lkLA0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogICAtIDA6IFN1Y2Nlc3MNCj4g PiAgICAqICAgLSAtRU5PVFNVUDogcm91dGluZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZp Y2UgUE1ELg0KPiA+IC0gKiAgIC0gLUVJTlZBTDogIFRoZSBwb3J0X2lkIG9yIHRoZSBxdWV1ZV9p ZCBpcyBvdXQgb2YgcmFuZ2UuDQo+ID4gKyAqICAgLSAtRUlOVkFMOiAgVGhlIHBvcnRfaWQgb3Ig dGhlIHF1ZXVlX2lkIGlzIG91dCBvZiByYW5nZSwgb3IgdGhlIHF1ZXVlDQo+ID4gKyAqICAgICAg ICAgICAgICAgaXMgaGFpcnBpbiBxdWV1ZS4NCj4gPiAgICAqLw0KPiA+ICAgaW50IHJ0ZV9ldGhf cnhfcXVldWVfaW5mb19nZXQodWludDE2X3QgcG9ydF9pZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ ID4gICAJc3RydWN0IHJ0ZV9ldGhfcnhxX2luZm8gKnFpbmZvKTsNCj4gPiBAQCAtMzU4OSw3ICsz NjkwLDggQEAgaW50IHJ0ZV9ldGhfcnhfcXVldWVfaW5mb19nZXQodWludDE2X3QgcG9ydF9pZCwN Cj4gdWludDE2X3QgcXVldWVfaWQsDQo+ID4gICAgKiBAcmV0dXJuDQo+ID4gICAgKiAgIC0gMDog U3VjY2Vzcw0KPiA+ICAgICogICAtIC1FTk9UU1VQOiByb3V0aW5lIGlzIG5vdCBzdXBwb3J0ZWQg YnkgdGhlIGRldmljZSBQTUQuDQo+ID4gLSAqICAgLSAtRUlOVkFMOiAgVGhlIHBvcnRfaWQgb3Ig dGhlIHF1ZXVlX2lkIGlzIG91dCBvZiByYW5nZS4NCj4gPiArICogICAtIC1FSU5WQUw6ICBUaGUg cG9ydF9pZCBvciB0aGUgcXVldWVfaWQgaXMgb3V0IG9mIHJhbmdlLCBvciB0aGUgcXVldWUNCj4g PiArICogICAgICAgICAgICAgICBpcyBoYWlycGluIHF1ZXVlLg0KPiA+ICAgICovDQo+ID4gICBp bnQgcnRlX2V0aF90eF9xdWV1ZV9pbmZvX2dldCh1aW50MTZfdCBwb3J0X2lkLCB1aW50MTZfdCBx dWV1ZV9pZCwNCj4gPiAgIAlzdHJ1Y3QgcnRlX2V0aF90eHFfaW5mbyAqcWluZm8pOw0KPiA+IEBA IC00MDMxLDYgKzQxMzMsMjMgQEAgaW50IHJ0ZV9ldGhfZGV2X2FkanVzdF9uYl9yeF90eF9kZXNj KHVpbnQxNl90DQo+IHBvcnRfaWQsDQo+ID4gICB2b2lkICoNCj4gPiAgIHJ0ZV9ldGhfZGV2X2dl dF9zZWNfY3R4KHVpbnQxNl90IHBvcnRfaWQpOw0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgKiBAd2Fy bmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJl IHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIFF1ZXJ5 IHRoZSBkZXZpY2UgaGFpcnBpbiBjYXBhYmlsaXRpZXMuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJh bSBwb3J0X2lkDQo+ID4gKyAqICAgVGhlIHBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQg ZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW0gY2FwDQo+ID4gKyAqICAgUG9pbnRlciB0byBhIHN0cnVj dHVyZSB0aGF0IHdpbGwgaG9sZCB0aGUgaGFpcnBpbiBjYXBhYmlsaXRpZXMuDQo+ID4gKyAqIEBy ZXR1cm4NCj4gPiArICogICAtICgwKSBpZiBzdWNjZXNzZnVsLg0KPiA+ICsgKiAgIC0gKC1FTk9U U1VQKSBpZiBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9l eHBlcmltZW50YWwNCj4gPiAraW50IHJ0ZV9ldGhfZGV2X2hhaXJwaW5fY2FwYWJpbGl0eV9nZXQo dWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJCSAgICAgICBzdHJ1Y3QgcnRlX2V0aF9oYWlycGlu X2NhcCAqY2FwKTsNCj4gPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV9ldGhkZXZfY29yZS5oPg0KPiA+ DQo+ID4gQEAgLTQxMzEsNiArNDI1MCwxMiBAQCBpbnQgcnRlX2V0aF9kZXZfYWRqdXN0X25iX3J4 X3R4X2Rlc2ModWludDE2X3QNCj4gcG9ydF9pZCwNCj4gPiAgIAkJUlRFX0VUSERFVl9MT0coRVJS LCAiSW52YWxpZCBSWCBxdWV1ZV9pZD0ldVxuIiwNCj4gcXVldWVfaWQpOw0KPiA+ICAgCQlyZXR1 cm4gMDsNCj4gPiAgIAl9DQo+ID4gKwlpZiAoZGV2LT5kYXRhLT5yeF9xdWV1ZV9zdGF0ZVtxdWV1 ZV9pZF0gPT0NCj4gPiArCSAgICBSVEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU4pIHsNCj4gPiAr CQlSVEVfRVRIREVWX0xPRyhFUlIsICJSWCBxdWV1ZV9pZD0ldSBpcyBoYWlycGluIHF1ZXVlXG4i LA0KPiANCj4gSSBzZWUgYnV0IHRoZXNlIGxvZyBtZXNzYWdlcyBhcmUgdmVyeSBzaW1pbGFyIHRv IGFib3ZlLCBidXQgSSBzdGlsbCB0aGluaw0KPiBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gbWVudGlv biBjb250ZXh0IHRvIG1ha2UgaXQgY2xlYXIgaW4gbG9nLCBlLmcuDQo+ICJDYW5ub3QgUnggZnJv bSBoYWlycGluIHF1ZXVlJSJQUkl1MTYiIGF0IHBvcnQgJSJQUkl1MTYNCj4gDQoNCk8uSy4gd2ls bCBmaXguDQoNCj4gPiArCQkJICAgICAgIHF1ZXVlX2lkKTsNCj4gPiArCQlyZXR1cm4gMDsNCj4g PiArCX0NCj4gPiAgICNlbmRpZg0KPiA+ICAgCW5iX3J4ID0gKCpkZXYtPnJ4X3BrdF9idXJzdCko ZGV2LT5kYXRhLT5yeF9xdWV1ZXNbcXVldWVfaWRdLA0KPiA+ICAgCQkJCSAgICAgcnhfcGt0cywg bmJfcGt0cyk7DQo+ID4gQEAgLTQzOTcsNiArNDUyMiwxMiBAQCBzdGF0aWMgaW5saW5lIGludA0K PiBydGVfZXRoX3R4X2Rlc2NyaXB0b3Jfc3RhdHVzKHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gICAJ CVJURV9FVEhERVZfTE9HKEVSUiwgIkludmFsaWQgVFggcXVldWVfaWQ9JXVcbiIsDQo+IHF1ZXVl X2lkKTsNCj4gPiAgIAkJcmV0dXJuIDA7DQo+ID4gICAJfQ0KPiA+ICsJaWYgKGRldi0+ZGF0YS0+ dHhfcXVldWVfc3RhdGVbcXVldWVfaWRdID09DQo+ID4gKwkgICAgUlRFX0VUSF9RVUVVRV9TVEFU RV9IQUlSUElOKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coRVJSLCAiVFggcXVldWVfaWQ9JXUg aXMgaGFpcnBpbiBxdWV1ZVxuIiwNCj4gPiArCQkJICAgICAgIHF1ZXVlX2lkKTsNCj4gDQo+IEkg dGhpbmsgaXQgd291bGQgYmUgdXNlZnVsIHRvIG1lbnRpb24gY29udGV4dCB0byBtYWtlIGl0IGNs ZWFyIGluIGxvZywgZS5nLg0KPiAiQ2Fubm90IFR4IHRvIGhhaXJwaW4gcXVldWUlIlBSSXUxNiIg YXQgcG9ydCAlIlBSSXUxNg0KPiANCg0KTy5LLiB3aWxsIGZpeC4NCg0KPiA+ICsJCXJldHVybiAw Ow0KPiA+ICsJfQ0KPiA+ICAgI2VuZGlmDQo+ID4NCj4gPiAgICNpZmRlZiBSVEVfRVRIREVWX1JY VFhfQ0FMTEJBQ0tTDQo+IA0KPiBbc25pcF0NCg0K