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 80A36A00BE; Mon, 28 Oct 2019 19:44:13 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 49EA21BFAC; Mon, 28 Oct 2019 19:44:12 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150043.outbound.protection.outlook.com [40.107.15.43]) by dpdk.org (Postfix) with ESMTP id E63D11BF3D for ; Mon, 28 Oct 2019 19:44:10 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EIFIQVg/4cp0JJp3n6lBEMbgvzGk72ZUwlpEO0EgLHHXHomNEyoo6lTE/R7SNPegSCevVRq7kr+VnOgTw1BjDkCg69yQEmqKKNpbmvpNwQzkCJrXD9gaO6myppLaTfQyf/NGsH7IZ1v0yj+c89iYCeqTqSN8OgoDBjm8awAzKF8S/SK3DdbMBrK5ysp3FXHDMhlDZRfSEDtycMgXHtAzvSzZjTyV7Lp+FvGiR7rspg0HjH46MhKSgQu9R9kw3JW6U5FQ0zITFhJYSEqb+MgzXMoYkuIFKml3T/iUyczbYdcrf8KeGZEkMN/TjweTBFjeRk0r3nDjTlGCShXB8JRZ0A== 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=eamxk8iKtGyt6YbTvgW9ish1m0nc54tG9pOqGDaL3s4=; b=XvIOEpZ1ZTQWTjdq3FMUkMt2Vs0syBFoyBsmZBA/UUgePJCOKWu9oG20Um1siU21Ls6xwa9E7iuPWkGs7qzUB5SuOMn7MOY0KG5EHEn+JtlbFaYKT7fsOwSFq2cPRNBu48r95d7tRCXPjFY65rOGP/plVH0A0JT6sYCWQrqudBKxMWIe18qG7iDqG9ZSTcyvtusfcPelP6P94OnYz6Xt6qPm2JjLLIcjCY/dY2vZ/nIkuFGeP6JzhytDycjuc1vcwJbV5L+XMdTLM0wqOD/tMF+ehvCePXuIV1z1oiDsswAhLjNYMdjvtDERbsdKeTPTNFRSGATHGIuomrp4Jurlkw== 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=eamxk8iKtGyt6YbTvgW9ish1m0nc54tG9pOqGDaL3s4=; b=sDZpc752IpudGyg8e1YTpvjiYeAsckuND4M6UBRBq92Lq+c2EfOUT+DFdZkMt/eDVB6W5mv+2/k3w+d/E1A7Xzg79OOqkJXQdzrxPbpc3XYvxmt0rcIxADVfBcBDasKp5sJ29pk4C27RdBfV2FjYc8W9gG/vQ3WD7qRs0taYLyU= Received: from AM4PR05MB3425.eurprd05.prod.outlook.com (10.171.190.15) by AM4PR05MB3171.eurprd05.prod.outlook.com (10.171.189.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2387.24; Mon, 28 Oct 2019 18:44:05 +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.2387.025; Mon, 28 Oct 2019 18:44:05 +0000 From: Ori Kam To: Andrew Rybchenko , John McNamara , Marko Kovacevic , Thomas Monjalon , Ferruh Yigit CC: "dev@dpdk.org" , "jingjing.wu@intel.com" , "stephen@networkplumber.org" Thread-Topic: [dpdk-dev] [PATCH v6 02/14] ethdev: add support for hairpin queue Thread-Index: AQHVjMGZ2GuEETdFDEKLhhN6JpyaTadwK8mAgAAyO3A= Date: Mon, 28 Oct 2019 18:44:05 +0000 Message-ID: References: <1569479349-36962-1-git-send-email-orika@mellanox.com> <1572179102-163236-1-git-send-email-orika@mellanox.com> <1572179102-163236-3-git-send-email-orika@mellanox.com> <0ceaf36f-a18d-4bb8-0356-7dc28057ae2f@solarflare.com> In-Reply-To: <0ceaf36f-a18d-4bb8-0356-7dc28057ae2f@solarflare.com> 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: [185.175.35.255] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 4ededcb0-3b83-4bb3-055b-08d75bd6cf39 x-ms-traffictypediagnostic: AM4PR05MB3171: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0204F0BDE2 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(376002)(366004)(39860400002)(136003)(396003)(346002)(51444003)(199004)(189003)(13464003)(186003)(86362001)(30864003)(76176011)(11346002)(446003)(99286004)(476003)(71200400001)(71190400001)(53546011)(55016002)(6506007)(66066001)(66446008)(66946007)(66556008)(66476007)(316002)(6436002)(110136005)(102836004)(6246003)(64756008)(7696005)(9686003)(256004)(14444005)(76116006)(4326008)(81156014)(81166006)(229853002)(52536014)(14454004)(33656002)(5660300002)(26005)(478600001)(305945005)(486006)(6116002)(3846002)(8676002)(25786009)(2906002)(7736002)(8936002)(74316002)(54906003); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3171; H:AM4PR05MB3425.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:3; 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: P+jWDue17nO8Ge0beP5qBq2PRy3sOlgXaZkl2fdfb96HaPTfnjZ1vMMn6flFDpJt+QfSsMYWc6GYO9o+MyzKtkRA8m6au21iu7mefe7Qh9cteSUt5LCAJK7L6odVdOuqdTi1RqvnpnvyQ70UzeGe8GtjsSr5fCvVBP24hYjMPtiTxMSi5RHm41xClo5/aKBZAVKHAoGrn7ZOj/a7LJZ4OwIPzllsCCpSWFRuGY5LJmc6k3/e4x3mdA6aAxuMuQfddzes2FVOuznHU3gfFSZZQDrhEWuqkpFBObPKG5mQl7II0SydEwpG8x52s2z8sG+PSO13SYfUnZE4J6fnhXkJ9ixBnamobN8Pt33ZrH0uDpgcwLJtqHac/FpWrx3e6b0WzXqE4ThXdkRf7tOVIDvu7PkeK7AxIXnT6htVqvZmqVhsngdiHKpgTtSOC0leGPNo 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: 4ededcb0-3b83-4bb3-055b-08d75bd6cf39 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Oct 2019 18:44:05.2764 (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: qvFgMTRQkXSI7Kz6uQE4tPSPAbgVRbpnSaPPTvUCWNRpiC/r93GF3oHykK3KbHYVvlMP8c5/oZ482wIzhn7qJQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3171 Subject: Re: [dpdk-dev] [PATCH v6 02/14] 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" SGkgQW5kcmV3LA0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQW5k cmV3IFJ5YmNoZW5rbyA8YXJ5YmNoZW5rb0Bzb2xhcmZsYXJlLmNvbT4NCj4gU2VudDogTW9uZGF5 LCBPY3RvYmVyIDI4LCAyMDE5IDU6MTYgUE0NCj4gVG86IE9yaSBLYW0gPG9yaWthQG1lbGxhbm94 LmNvbT47IEpvaG4gTWNOYW1hcmENCj4gPGpvaG4ubWNuYW1hcmFAaW50ZWwuY29tPjsgTWFya28g S292YWNldmljDQo+IDxtYXJrby5rb3ZhY2V2aWNAaW50ZWwuY29tPjsgVGhvbWFzIE1vbmphbG9u IDx0aG9tYXNAbW9uamFsb24ubmV0PjsNCj4gRmVycnVoIFlpZ2l0IDxmZXJydWgueWlnaXRAaW50 ZWwuY29tPg0KPiBDYzogZGV2QGRwZGsub3JnOyBqaW5namluZy53dUBpbnRlbC5jb207IHN0ZXBo ZW5AbmV0d29ya3BsdW1iZXIub3JnDQo+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2 NiAwMi8xNF0gZXRoZGV2OiBhZGQgc3VwcG9ydCBmb3IgaGFpcnBpbiBxdWV1ZQ0KPiANCj4gSGkg T3JpLA0KPiANCj4gT24gMTAvMjcvMTkgMzoyNCBQTSwgT3JpIEthbSB3cm90ZToNCj4gPiBUaGlz IGNvbW1pdCBpbnRyb2R1Y2UgaGFpcnBpbiBxdWV1ZSB0eXBlLg0KPiA+DQo+ID4gVGhlIGhhaXJw aW4gcXVldWUgaW4gYnVpbGQgZnJvbSBSeCBxdWV1ZSBiaW5kZWQgdG8gVHggcXVldWUuDQo+ID4g SXQgaXMgdXNlZCB0byBvZmZsb2FkIHRyYWZmaWMgY29taW5nIGZyb20gdGhlIHdpcmUgYW5kIHJl ZGlyZWN0IGl0IGJhY2sNCj4gPiB0byB0aGUgd2lyZS4NCj4gPg0KPiA+IFRoZXJlIGFyZSAzIG5l dyBmdW5jdGlvbnM6DQo+ID4gLSBydGVfZXRoX2Rldl9oYWlycGluX2NhcGFiaWxpdHlfZ2V0DQo+ ID4gLSBydGVfZXRoX3J4X2hhaXJwaW5fcXVldWVfc2V0dXANCj4gPiAtIHJ0ZV9ldGhfdHhfaGFp cnBpbl9xdWV1ZV9zZXR1cA0KPiA+DQo+ID4gSW4gb3JkZXIgdG8gdXNlIHRoZSBxdWV1ZSwgdGhl cmUgaXMgYSBuZWVkIHRvIGNyZWF0ZSBydGVfZmxvdw0KPiA+IHdpdGggcXVldWUgLyBSU1MgYWN0 aW9uIHRoYXQgdGFyZ2V0cyBvbmUgb3IgbW9yZSBvZiB0aGUgUnggcXVldWVzLg0KPiA+DQo+ID4g U2lnbmVkLW9mZi1ieTogT3JpIEthbSA8b3Jpa2FAbWVsbGFub3guY29tPg0KPiA+IFJldmlld2Vk LWJ5OiBBbmRyZXcgUnliY2hlbmtvIDxhcnliY2hlbmtvQHNvbGFyZmxhcmUuY29tPg0KPiANCj4g TEdUTSwgbm90aGluZyBjcml0aWNhbCBtYXkgYmUgZXhjZXB0IG1heGltdW0gbnVtYmVyIGNoZWNr DQo+IHdoaWNoIEkgbG9zdCBmcm9tIG15IHZpZXcgYmVmb3JlLg0KPiBQbHVzIGZldyBzdHlsZSBz dWdnZXN0aW9ucyB3aGljaCBtYXkgYmUgZHJvcHBlZCwgYnV0IEknZCBiZQ0KPiBoYXBwaWVyIGlm IGFwcGxpZWQuDQo+IA0KPiBUaGFua3MuDQo+IA0KSSByZWFsbHkgYXByaWNhdGUgeW91ciB0aW1l IGFuZCBjb21tZW50cywNClRoaXMgcGF0Y2ggaXMgdGhlIGJhc2Ugb2YgYSBudW1iZXIgb2Ygb3Ro ZXIgc2VyaWVzIChNZXRhL01ldGVyaW5nKSANClNvIGlmIGl0IGlzIG5vdGhpbmcgY3JpdGljYWwg SSBwcmVmZXIgdG8gZ2V0IHRoaXMgc2V0IG1lcmdlZCBhbmQgdGhlbiBjaGFuZ2Ugd2hhdCBpcyBu ZWVkZWQsDQppZiBpdCBpcyBPLksgYnkgeW91Lg0KDQpEZXRhaWwgIGNvbW1lbnRzIHBsZWFzZSBz ZWUgYmVsb3cuDQoNCj4gW3NuaXBdDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2V0 aGRldi9ydGVfZXRoZGV2LmMgYi9saWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2LmMNCj4gPiBp bmRleCA3NzQzMjA1Li42OGFjYTFmIDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfZXRoZGV2 L3J0ZV9ldGhkZXYuYw0KPiA+ICsrKyBiL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXYuYw0K PiA+IEBAIC05MjMsNiArOTIzLDEzIEBAIHN0cnVjdCBydGVfZXRoX2RldiAqDQo+ID4NCj4gPiAg IAlSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3BzLT5yeF9xdWV1ZV9zdGFydCwg LQ0KPiBFTk9UU1VQKTsNCj4gPg0KPiA+ICsJaWYgKHJ0ZV9ldGhfZGV2X2lzX3J4X2hhaXJwaW5f cXVldWUoZGV2LCByeF9xdWV1ZV9pZCkpIHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhJTkZPLA0K PiA+ICsJCQkiQ2FuJ3Qgc3RhcnQgUnggcXVldWUgJSJQUkl1MTYiIG9mIGRldmljZSB3aXRoDQo+ IHBvcnRfaWQ9JSJQUkl1MTYiIGlzIGhhaXJwaW4gcXVldWVcbiIsDQo+IA0KPiBMb2cgbWVzc2Fn ZSBsb29rcyBhIGJpdCBzdHJhbmdlOg0KPiAgwqDCoMKgIENhbid0IHN0YXJ0IFJ4IHF1ZXVlIDUg b2YgZGV2aWNlIHdpdGggcG9ydF9pZD0wIGlzIGhhaXJwaW4gcXVldWUNCj4gbWF5IGJlIHRvIHB1 dCBrZXkgaW5mb3JtYXRpb24gZmlyc3Q6DQo+ICDCoMKgwqAgQ2FuJ3Qgc3RhcnQgaGFpcnBpbiBS eCBxdWV1ZSA1IG9mIGRldmljZSB3aXRoIHBvcnRfaWQ9MA0KPiANCg0KSSdtIG5vdCBhIG5hdGl2 ZSBFbmdsaXNoIHNwZWFrZXIgYnV0IEkgdGhpbmsgdGhlIG1lYW5pbmcgaXMgZGlmZmVyZW50Lg0K SW4gbXkgb3JpZ2luYWwgbG9nIGl0IG1lYW5zIHRoYXQgeW91IHRyeSB0byBzdGFydCBhIHF1ZXVl IGJ1dCBmYWlsIGR1ZSB0byANCnRoZSBmYWN0IHRoYXQgdGhlIHF1ZXVlIGlzIGhhaXJwaW4gcXVl dWUuDQoNCkluIHlvdXIgdmVyc2lvbiBpdCBtZWFucyB0aGF0IHlvdSBjYW4ndCBzdGFydCBhbiBo YWlycGluIHF1ZXVlIGJ1dCB0aGVyZSBpcyBubw0KcmVhc29uIHdoeSBub3QuDQoNCldoYXQgZG8g eW91IHRoaW5rPw0KDQo+ID4gKwkJCXJ4X3F1ZXVlX2lkLCBwb3J0X2lkKTsNCj4gPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gICAJaWYgKGRldi0+ZGF0YS0+cnhfcXVl dWVfc3RhdGVbcnhfcXVldWVfaWRdICE9DQo+IFJURV9FVEhfUVVFVUVfU1RBVEVfU1RPUFBFRCkg ew0KPiA+ICAgCQlSVEVfRVRIREVWX0xPRyhJTkZPLA0KPiA+ICAgCQkJIlF1ZXVlICUiUFJJdTE2 IiBvZiBkZXZpY2Ugd2l0aCBwb3J0X2lkPSUiUFJJdTE2Ig0KPiBhbHJlYWR5IHN0YXJ0ZWRcbiIs DQo+ID4gQEAgLTk1MCw2ICs5NTcsMTMgQEAgc3RydWN0IHJ0ZV9ldGhfZGV2ICoNCj4gPg0KPiA+ ICAgCVJURV9GVU5DX1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRldl9vcHMtPnJ4X3F1ZXVlX3N0b3As IC0NCj4gRU5PVFNVUCk7DQo+ID4NCj4gPiArCWlmIChydGVfZXRoX2Rldl9pc19yeF9oYWlycGlu X3F1ZXVlKGRldiwgcnhfcXVldWVfaWQpKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coSU5GTywN Cj4gPiArCQkJIkNhbid0IHN0b3AgUnggcXVldWUgJSJQUkl1MTYiIG9mIGRldmljZSB3aXRoDQo+ IHBvcnRfaWQ9JSJQUkl1MTYiIGlzIGhhaXJwaW4gcXVldWVcbiIsDQo+IA0KPiBTYW1lDQo+DQpQ bGVhc2Ugc2VlIGNvbW1lbnQgYWJvdmUuDQogDQo+ID4gKwkJCXJ4X3F1ZXVlX2lkLCBwb3J0X2lk KTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gICAJaWYgKGRl di0+ZGF0YS0+cnhfcXVldWVfc3RhdGVbcnhfcXVldWVfaWRdID09DQo+IFJURV9FVEhfUVVFVUVf U1RBVEVfU1RPUFBFRCkgew0KPiA+ICAgCQlSVEVfRVRIREVWX0xPRyhJTkZPLA0KPiA+ICAgCQkJ IlF1ZXVlICUiUFJJdTE2IiBvZiBkZXZpY2Ugd2l0aCBwb3J0X2lkPSUiUFJJdTE2Ig0KPiBhbHJl YWR5IHN0b3BwZWRcbiIsDQo+ID4gQEAgLTk4Myw2ICs5OTcsMTMgQEAgc3RydWN0IHJ0ZV9ldGhf ZGV2ICoNCj4gPg0KPiA+ICAgCVJURV9GVU5DX1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRldl9vcHMt PnR4X3F1ZXVlX3N0YXJ0LCAtDQo+IEVOT1RTVVApOw0KPiA+DQo+ID4gKwlpZiAocnRlX2V0aF9k ZXZfaXNfdHhfaGFpcnBpbl9xdWV1ZShkZXYsIHR4X3F1ZXVlX2lkKSkgew0KPiA+ICsJCVJURV9F VEhERVZfTE9HKElORk8sDQo+ID4gKwkJCSJDYW4ndCBzdGFydCBUeCBxdWV1ZSAlIlBSSXUxNiIg b2YgZGV2aWNlIHdpdGgNCj4gcG9ydF9pZD0lIlBSSXUxNiIgaXMgaGFpcnBpbiBxdWV1ZVxuIiwN Cj4gDQo+IFNhbWUNCj4gDQpQbGVhc2Ugc2VlIGNvbW1lbnQgYWJvdmUuDQoNCj4gPiArCQkJdHhf cXVldWVfaWQsIHBvcnRfaWQpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiAgIAlpZiAoZGV2LT5kYXRhLT50eF9xdWV1ZV9zdGF0ZVt0eF9xdWV1ZV9pZF0gIT0N Cj4gUlRFX0VUSF9RVUVVRV9TVEFURV9TVE9QUEVEKSB7DQo+ID4gICAJCVJURV9FVEhERVZfTE9H KElORk8sDQo+ID4gICAJCQkiUXVldWUgJSJQUkl1MTYiIG9mIGRldmljZSB3aXRoIHBvcnRfaWQ9 JSJQUkl1MTYiDQo+IGFscmVhZHkgc3RhcnRlZFxuIiwNCj4gPiBAQCAtMTAwOCw2ICsxMDI5LDEz IEBAIHN0cnVjdCBydGVfZXRoX2RldiAqDQo+ID4NCj4gPiAgIAlSVEVfRlVOQ19QVFJfT1JfRVJS X1JFVCgqZGV2LT5kZXZfb3BzLT50eF9xdWV1ZV9zdG9wLCAtDQo+IEVOT1RTVVApOw0KPiA+DQo+ ID4gKwlpZiAocnRlX2V0aF9kZXZfaXNfdHhfaGFpcnBpbl9xdWV1ZShkZXYsIHR4X3F1ZXVlX2lk KSkgew0KPiA+ICsJCVJURV9FVEhERVZfTE9HKElORk8sDQo+ID4gKwkJCSJDYW4ndCBzdG9wIFR4 IHF1ZXVlICUiUFJJdTE2IiBvZiBkZXZpY2Ugd2l0aA0KPiBwb3J0X2lkPSUiUFJJdTE2IiBpcyBo YWlycGluIHF1ZXVlXG4iLA0KPiANCj4gU2FtZQ0KPg0KDQpQbGVhc2Ugc2VlIGNvbW1lbnQgYWJv dmUuDQogDQo+ID4gKwkJCXR4X3F1ZXVlX2lkLCBwb3J0X2lkKTsNCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gICAJaWYgKGRldi0+ZGF0YS0+dHhfcXVldWVfc3Rh dGVbdHhfcXVldWVfaWRdID09DQo+IFJURV9FVEhfUVVFVUVfU1RBVEVfU1RPUFBFRCkgew0KPiA+ ICAgCQlSVEVfRVRIREVWX0xPRyhJTkZPLA0KPiA+ICAgCQkJIlF1ZXVlICUiUFJJdTE2IiBvZiBk ZXZpY2Ugd2l0aCBwb3J0X2lkPSUiUFJJdTE2Ig0KPiBhbHJlYWR5IHN0b3BwZWRcbiIsDQo+ID4g QEAgLTE3ODAsNiArMTgwOCw3OSBAQCBzdHJ1Y3QgcnRlX2V0aF9kZXYgKg0KPiA+ICAgfQ0KPiA+ DQo+ID4gICBpbnQNCj4gPiArcnRlX2V0aF9yeF9oYWlycGluX3F1ZXVlX3NldHVwKHVpbnQxNl90 IHBvcnRfaWQsIHVpbnQxNl90IHJ4X3F1ZXVlX2lkLA0KPiA+ICsJCQkgICAgICAgdWludDE2X3Qg bmJfcnhfZGVzYywNCj4gPiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBydGVfZXRoX2hhaXJwaW5f Y29uZiAqY29uZikNCj4gPiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArCXN0cnVjdCBydGVfZXRo X2RldiAqZGV2Ow0KPiA+ICsJc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jYXAgY2FwOw0KPiA+ICsJ dm9pZCAqKnJ4cTsNCj4gPiArCWludCBpOw0KPiA+ICsJaW50IGNvdW50ID0gMDsNCj4gPiArDQo+ ID4gKwlSVEVfRVRIX1ZBTElEX1BPUlRJRF9PUl9FUlJfUkVUKHBvcnRfaWQsIC1FSU5WQUwpOw0K PiA+ICsNCj4gPiArCWRldiA9ICZydGVfZXRoX2RldmljZXNbcG9ydF9pZF07DQo+ID4gKwlpZiAo cnhfcXVldWVfaWQgPj0gZGV2LT5kYXRhLT5uYl9yeF9xdWV1ZXMpIHsNCj4gPiArCQlSVEVfRVRI REVWX0xPRyhFUlIsICJJbnZhbGlkIFJYIHF1ZXVlX2lkPSV1XG4iLA0KPiByeF9xdWV1ZV9pZCk7 DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwlyZXQgPSBydGVfZXRoX2Rl dl9oYWlycGluX2NhcGFiaWxpdHlfZ2V0KHBvcnRfaWQsICZjYXApOw0KPiA+ICsJaWYgKHJldCAh PSAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwlSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgq ZGV2LT5kZXZfb3BzLQ0KPiA+cnhfaGFpcnBpbl9xdWV1ZV9zZXR1cCwNCj4gPiArCQkJCS1FTk9U U1VQKTsNCj4gDQo+IE1vc3QgbGlrZWx5IHVuc3VwcG9ydGVkIGhhaXJwaW4gaXMgY2F1Z2h0IGJ5 IGNhcGFiaWxpdHkgZ2V0IGFib3ZlLg0KPiBTbywgbWF5IGJlIGl0IGlzIGJldHRlciB0byBtb3Zl IHRoZSBjaGVjayBqdXN0IGJlZm9yZSB1c2FnZSBmYXIgYmVsb3cuDQo+IEFsc28sIGlmIGxpbmUg bGVuZ3RoIGlzIHN1ZmZpY2llbnQgSSB0aGluayBpdCB3b3VsZCBiZXR0ZXIgdG8gcHV0IC1FTk9U U1VQDQo+IHRvIHRoZSBwcmV2aW91cyBsaW5lIGp1c3QgdG8gZm9sbG93IHBvcnRfaWQgY2hlY2sg c3R5bGUuDQo+IA0KDQpJIHRoaW5rIHRoYXQgaW4gbW9zdCBmdW5jdGlvbiB3ZSBhcmUgc3RhcnRp bmcgd2l0aCB0aGUgY2hlY2suDQpwZXJzb25hbGx5IEkgbGlrZSB0byBoYXZlIGJhc2ljIGNoZWNr cyBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2RlLg0KQnV0IEkgd2lsbCBkbyB3aGF0IHlvdSB0 aGluayBpcyBiZXN0LiBJZiBJIHJlbWVtYmVyIGNvcnJlY3RseSB0aGUgbGluZQ0KbGVuZ3RoIGlz IHRvIHNob3J0LCBidXQgSSB3aWxsIHRlc3QgYWdhaW4uDQoNCj4gPiArCS8qIFVzZSBkZWZhdWx0 IHNwZWNpZmllZCBieSBkcml2ZXIsIGlmIG5iX3J4X2Rlc2MgaXMgemVybyAqLw0KPiA+ICsJaWYg KG5iX3J4X2Rlc2MgPT0gMCkNCj4gPiArCQluYl9yeF9kZXNjID0gY2FwLm1heF9uYl9kZXNjOw0K PiANCj4gRnVuY3Rpb24gZGVzY3JpcHRpb24gYW5kIGNvbW1lbnQgYWJvdmUgbWVudGlvbnMgUE1E IGRlZmF1bHQsIGJ1dA0KPiB0aGVyZSBpcyBubyBkZWZhdWx0LiBJdCB1c2VzIGp1c3QgbWF4aW11 bS4gSSBoYXZlIG5vIHN0cm9uZyBvcGluaW9uDQo+IGlmIGRlZmF1bHQgaXMgcmVhbGx5IHJlcXVp cmVkIG9yIGl0IGlzIE9LIHRvIHNheSB0aGF0IG1heGltdW0gaXMgdXNlZC4NCj4gVGhlIG9ubHkg Y29uY2VybiBpczogd2h5IG1heGltdW0/DQo+IA0KDQpNb3N0IGxpa2VseSB0aGUgYmVzdCB2YWx1 ZSBpcyB0aGUgbWF4LCBidXQgSSBjYW4gYWRkIGEgbmV3IGZpZWxkIHRvIHRoZSBjYXANCnRoYXQg c2F5IGRlZmF1bHQgdmFsdWUuIFdoYXQgZG8geW91IHRoaW5rPw0KDQo+ID4gKwlpZiAobmJfcnhf ZGVzYyA+IGNhcC5tYXhfbmJfZGVzYykgew0KPiA+ICsJCVJURV9FVEhERVZfTE9HKEVSUiwNCj4g PiArCQkJIkludmFsaWQgdmFsdWUgZm9yIG5iX3J4X2Rlc2MoPSVodSksIHNob3VsZCBiZTogPD0N Cj4gJWh1IiwNCj4gPiArCQkJbmJfcnhfZGVzYywgY2FwLm1heF9uYl9kZXNjKTsNCj4gPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArCWlmIChjb25mLT5wZWVyX2NvdW50ID4gY2Fw Lm1heF9yeF8yX3R4KSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coRVJSLA0KPiA+ICsJCQkiSW52 YWxpZCB2YWx1ZSBmb3IgbnVtYmVyIG9mIHBlZXJzIGZvciBSeCBxdWV1ZSg9JWh1KSwNCj4gc2hv dWxkIGJlOiA8PSAlaHUiLA0KPiA+ICsJCQljb25mLT5wZWVyX2NvdW50LCBjYXAubWF4X3J4XzJf dHgpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKGNvbmYtPnBl ZXJfY291bnQgPT0gMCkgew0KPiA+ICsJCVJURV9FVEhERVZfTE9HKEVSUiwNCj4gPiArCQkJIklu dmFsaWQgdmFsdWUgZm9yIG51bWJlciBvZiBwZWVycyBmb3IgUnggcXVldWUoPSVodSksDQo+IHNo b3VsZCBiZTogPiAwIiwNCj4gPiArCQkJY29uZi0+cGVlcl9jb3VudCk7DQo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwlpZiAoY2FwLm1heF9uYl9xdWV1ZXMgIT0gVUlOVDE2 X01BWCkgew0KPiANCj4gSSdtIG5vdCBzdXJlIHRoYXQgd2UgbmVlZCB0byBoYW5kbGUgaXQgc2Vw YXJhdGVseS4gQ29kZSBiZWxvdw0KPiBzaG91bGQgaGFuZGxlIGl0IGFuZCBpdCBhbmQgdGhlcmUg aXMgbm8gcG9pbnQgdG8gb3B0aW1pemUgaXQuDQo+IA0KDQpUaGlzIGlzIGRvbmUgdG8gc2F2ZSB0 aW1lIGlmIHRoZSB1c2VyIHNldCB1aW50MTZfbWF4IHRoZXJlIGlzIG5vIHBvaW50IHRvIHRoZQ0K bG9vcCwgSSBjYW4gYWRkIHRoZSBjaGVjayBhcyBjb25kaXRpb24gdG8gdGhlIGxvb3AgYnV0IHRo ZW4gaXQgbG9va3MgaW5jb3JyZWN0DQpzaW5jZSB3ZSBhcmUgY2hlY2tpbmcgc29tZSB0aGluayB0 aGF0IGNhbuKAmXQgYmUgY2hhbmdlZC4gDQpXaGF0IGRvIHlvdSB0aGluaz8gDQoNCj4gPiArCQlm b3IgKGkgPSAwOyBpIDwgZGV2LT5kYXRhLT5uYl9yeF9xdWV1ZXM7IGkrKykgew0KPiANCj4gTWF5 IEkgc3VnZ2VzdCB0byBhc3NpZ24gY291bnQgPSAwIHRvIG1ha2UgaXQgYSBiaXQgZWFzaWVyIHRv IHJlYWQgYW5kDQo+IG1vcmUgcm9idXN0IGFnYWluc3QgZnV0dXJlIGNoYW5nZXMuDQo+IA0KDQpZ b3UgbWVhbiBhZGQgY291bnQgPSAwIHRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsb29wPw0KDQo+ ID4gKwkJCWlmIChydGVfZXRoX2Rldl9pc19yeF9oYWlycGluX3F1ZXVlKGRldiwgaSkpDQo+IA0K PiBUaGUgY29uZGl0aW9uIHNob3VsZCBiZSBtb3JlIHRyaWNreSBpZiB3ZSByZXNldHVwIGhhaXJw aW4gcXVldWUuDQo+IEkuZS4gd2Ugc2hvdWxkIGNoZWNrIGlmIGkgaXMgcnhfcXVldWVfaWQgYW5k IGNvdW50IGl0IGFueXdheS4NCj4gDQo+ID4gKwkJCQljb3VudCsrOw0KPiA+ICsJCX0NCj4gPiAr CQlpZiAoY291bnQgPiBjYXAubWF4X25iX3F1ZXVlcykgew0KPiA+ICsJCQlSVEVfRVRIREVWX0xP RyhFUlIsICJUbyBtYW55IFJ4IGhhaXJwaW4gcXVldWVzDQo+ICVkIiwNCj4gDQo+IEkgdGhpbmsg aXQgd291bGQgYmUgdXNlZnVsIHRvIGxvZyBtYXggaGVyZSBhcyB3ZWxsIHRvIGNhdGNoDQo+IHVu c2V0IG1heCBjYXNlcyBlYXNpZXIuDQo+IA0KDQpJJ20gbm90IHN1cmUgSSB1bmRlcnN0YW5kLg0K DQo+ID4gKwkJCWNvdW50KTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ ICsJfQ0KPiA+ICsJaWYgKGRldi0+ZGF0YS0+ZGV2X3N0YXJ0ZWQpDQo+ID4gKwkJcmV0dXJuIC1F QlVTWTsNCj4gPiArCXJ4cSA9IGRldi0+ZGF0YS0+cnhfcXVldWVzOw0KPiA+ICsJaWYgKHJ4cVty eF9xdWV1ZV9pZF0gIT0gTlVMTCkgew0KPiA+ICsJCVJURV9GVU5DX1BUUl9PUl9FUlJfUkVUKCpk ZXYtPmRldl9vcHMtDQo+ID5yeF9xdWV1ZV9yZWxlYXNlLA0KPiA+ICsJCQkJCS1FTk9UU1VQKTsN Cj4gPiArCQkoKmRldi0+ZGV2X29wcy0+cnhfcXVldWVfcmVsZWFzZSkocnhxW3J4X3F1ZXVlX2lk XSk7DQo+ID4gKwkJcnhxW3J4X3F1ZXVlX2lkXSA9IE5VTEw7DQo+ID4gKwl9DQo+ID4gKwlyZXQg PSAoKmRldi0+ZGV2X29wcy0+cnhfaGFpcnBpbl9xdWV1ZV9zZXR1cCkoZGV2LCByeF9xdWV1ZV9p ZCwNCj4gPiArCQkJCQkJICAgICAgbmJfcnhfZGVzYywgY29uZik7DQo+ID4gKwlpZiAocmV0ID09 IDApDQo+ID4gKwkJZGV2LT5kYXRhLT5yeF9xdWV1ZV9zdGF0ZVtyeF9xdWV1ZV9pZF0gPQ0KPiA+ ICsJCQlSVEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU47DQo+ID4gKwlyZXR1cm4gZXRoX2Vycihw b3J0X2lkLCByZXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQNCj4gPiAgIHJ0ZV9ldGhfdHhf cXVldWVfc2V0dXAodWludDE2X3QgcG9ydF9pZCwgdWludDE2X3QgdHhfcXVldWVfaWQsDQo+ID4g ICAJCSAgICAgICB1aW50MTZfdCBuYl90eF9kZXNjLCB1bnNpZ25lZCBpbnQgc29ja2V0X2lkLA0K PiA+ICAgCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfdHhjb25mICp0eF9jb25mKQ0KPiA+ IEBAIC0xODc4LDYgKzE5NzksNzggQEAgc3RydWN0IHJ0ZV9ldGhfZGV2ICoNCj4gPiAgIAkJICAg ICAgIHR4X3F1ZXVlX2lkLCBuYl90eF9kZXNjLCBzb2NrZXRfaWQsICZsb2NhbF9jb25mKSk7DQo+ ID4gICB9DQo+ID4NCj4gPiAraW50DQo+ID4gK3J0ZV9ldGhfdHhfaGFpcnBpbl9xdWV1ZV9zZXR1 cCh1aW50MTZfdCBwb3J0X2lkLCB1aW50MTZfdCB0eF9xdWV1ZV9pZCwNCj4gPiArCQkJICAgICAg IHVpbnQxNl90IG5iX3R4X2Rlc2MsDQo+ID4gKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcnRlX2V0 aF9oYWlycGluX2NvbmYgKmNvbmYpDQo+IA0KPiBTYW1lIG5vdGVzIGFzIGZvciBSeCBxdWV1ZSBh Ym92ZS4NCj4gDQoNCk8uSy4gc2FtZSBjb21tZW50cy4NCg0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg cnRlX2V0aF9kZXYgKmRldjsNCj4gPiArCXN0cnVjdCBydGVfZXRoX2hhaXJwaW5fY2FwIGNhcDsN Cj4gPiArCXZvaWQgKip0eHE7DQo+ID4gKwlpbnQgaTsNCj4gPiArCWludCBjb3VudCA9IDA7DQo+ ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCVJURV9FVEhfVkFMSURfUE9SVElEX09SX0VSUl9S RVQocG9ydF9pZCwgLUVJTlZBTCk7DQo+ID4gKwlkZXYgPSAmcnRlX2V0aF9kZXZpY2VzW3BvcnRf aWRdOw0KPiA+ICsJaWYgKHR4X3F1ZXVlX2lkID49IGRldi0+ZGF0YS0+bmJfdHhfcXVldWVzKSB7 DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coRVJSLCAiSW52YWxpZCBUWCBxdWV1ZV9pZD0ldVxuIiwN Cj4gdHhfcXVldWVfaWQpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsJ cmV0ID0gcnRlX2V0aF9kZXZfaGFpcnBpbl9jYXBhYmlsaXR5X2dldChwb3J0X2lkLCAmY2FwKTsN Cj4gPiArCWlmIChyZXQgIT0gMCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJUlRFX0ZVTkNf UFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0NCj4gPnR4X2hhaXJwaW5fcXVldWVfc2V0dXAs DQo+ID4gKwkJCQktRU5PVFNVUCk7DQo+ID4gKwkvKiBVc2UgZGVmYXVsdCBzcGVjaWZpZWQgYnkg ZHJpdmVyLCBpZiBuYl90eF9kZXNjIGlzIHplcm8gKi8NCj4gPiArCWlmIChuYl90eF9kZXNjID09 IDApDQo+ID4gKwkJbmJfdHhfZGVzYyA9IGNhcC5tYXhfbmJfZGVzYzsNCj4gPiArCWlmIChuYl90 eF9kZXNjID4gY2FwLm1heF9uYl9kZXNjKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coRVJSLA0K PiA+ICsJCQkiSW52YWxpZCB2YWx1ZSBmb3IgbmJfdHhfZGVzYyg9JWh1KSwgc2hvdWxkIGJlOiA8 PQ0KPiAlaHUiLA0KPiA+ICsJCQluYl90eF9kZXNjLCBjYXAubWF4X25iX2Rlc2MpOw0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKGNvbmYtPnBlZXJfY291bnQgPiBj YXAubWF4X3R4XzJfcngpIHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4gKwkJCSJJ bnZhbGlkIHZhbHVlIGZvciBudW1iZXIgb2YgcGVlcnMgZm9yIFR4IHF1ZXVlKD0laHUpLA0KPiBz aG91bGQgYmU6IDw9ICVodSIsDQo+ID4gKwkJCWNvbmYtPnBlZXJfY291bnQsIGNhcC5tYXhfdHhf Ml9yeCk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwlpZiAoY29uZi0+ cGVlcl9jb3VudCA9PSAwKSB7DQo+ID4gKwkJUlRFX0VUSERFVl9MT0coRVJSLA0KPiA+ICsJCQki SW52YWxpZCB2YWx1ZSBmb3IgbnVtYmVyIG9mIHBlZXJzIGZvciBUeCBxdWV1ZSg9JWh1KSwNCj4g c2hvdWxkIGJlOiA+IDAiLA0KPiA+ICsJCQljb25mLT5wZWVyX2NvdW50KTsNCj4gPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArCWlmIChjYXAubWF4X25iX3F1ZXVlcyAhPSBVSU5U MTZfTUFYKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGRldi0+ZGF0YS0+bmJfdHhfcXVldWVz OyBpKyspIHsNCj4gPiArCQkJaWYgKHJ0ZV9ldGhfZGV2X2lzX3R4X2hhaXJwaW5fcXVldWUoZGV2 LCBpKSkNCj4gPiArCQkJCWNvdW50Kys7DQo+ID4gKwkJfQ0KPiA+ICsJCWlmIChjb3VudCA+IGNh cC5tYXhfbmJfcXVldWVzKSB7DQo+ID4gKwkJCVJURV9FVEhERVZfTE9HKEVSUiwNCj4gPiArCQkJ CSAgICAgICAiVG8gbWFueSBUeCBoYWlycGluIHF1ZXVlcyAlZCIsIGNvdW50KTsNCj4gPiArCQkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJaWYgKGRldi0+ZGF0YS0+ ZGV2X3N0YXJ0ZWQpDQo+ID4gKwkJcmV0dXJuIC1FQlVTWTsNCj4gPiArCXR4cSA9IGRldi0+ZGF0 YS0+dHhfcXVldWVzOw0KPiA+ICsJaWYgKHR4cVt0eF9xdWV1ZV9pZF0gIT0gTlVMTCkgew0KPiA+ ICsJCVJURV9GVU5DX1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRldl9vcHMtDQo+ID50eF9xdWV1ZV9y ZWxlYXNlLA0KPiA+ICsJCQkJCS1FTk9UU1VQKTsNCj4gPiArCQkoKmRldi0+ZGV2X29wcy0+dHhf cXVldWVfcmVsZWFzZSkodHhxW3R4X3F1ZXVlX2lkXSk7DQo+ID4gKwkJdHhxW3R4X3F1ZXVlX2lk XSA9IE5VTEw7DQo+ID4gKwl9DQo+ID4gKwlyZXQgPSAoKmRldi0+ZGV2X29wcy0+dHhfaGFpcnBp bl9xdWV1ZV9zZXR1cCkNCj4gPiArCQkoZGV2LCB0eF9xdWV1ZV9pZCwgbmJfdHhfZGVzYywgY29u Zik7DQo+ID4gKwlpZiAocmV0ID09IDApDQo+ID4gKwkJZGV2LT5kYXRhLT50eF9xdWV1ZV9zdGF0 ZVt0eF9xdWV1ZV9pZF0gPQ0KPiA+ICsJCQlSVEVfRVRIX1FVRVVFX1NUQVRFX0hBSVJQSU47DQo+ ID4gKwlyZXR1cm4gZXRoX2Vycihwb3J0X2lkLCByZXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAg dm9pZA0KPiA+ICAgcnRlX2V0aF90eF9idWZmZXJfZHJvcF9jYWxsYmFjayhzdHJ1Y3QgcnRlX21i dWYgKipwa3RzLCB1aW50MTZfdCB1bnNlbnQsDQo+ID4gICAJCXZvaWQgKnVzZXJkYXRhIF9fcnRl X3VudXNlZCkNCj4gPiBAQCAtNDAwNywxMiArNDE4MCwxOSBAQCBpbnQgcnRlX2V0aF9zZXRfcXVl dWVfcmF0ZV9saW1pdCh1aW50MTZfdA0KPiBwb3J0X2lkLCB1aW50MTZfdCBxdWV1ZV9pZHgsDQo+ ID4gICAJcnRlX2Vycm5vID0gRU5PVFNVUDsNCj4gPiAgIAlyZXR1cm4gTlVMTDsNCj4gPiAgICNl bmRpZg0KPiA+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXY7DQo+ID4gKw0KPiA+ICAgCS8qIGNo ZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8NCj4gPiAgIAlpZiAoIXJ0ZV9ldGhfZGV2X2lzX3ZhbGlk X3BvcnQocG9ydF9pZCkgfHwgZm4gPT0gTlVMTCB8fA0KPiA+ICAgCQkgICAgcXVldWVfaWQgPj0g cnRlX2V0aF9kZXZpY2VzW3BvcnRfaWRdLmRhdGEtPm5iX3J4X3F1ZXVlcykgew0KPiA+ICAgCQly dGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gICAJCXJldHVybiBOVUxMOw0KPiA+ICAgCX0NCj4gPiAr CWRldiA9ICZydGVfZXRoX2RldmljZXNbcG9ydF9pZF07DQo+ID4gKwlpZiAocnRlX2V0aF9kZXZf aXNfcnhfaGFpcnBpbl9xdWV1ZShkZXYsIHF1ZXVlX2lkKSkgew0KPiA+ICsJCXJ0ZV9lcnJubyA9 IEVJTlZBTDsNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArCX0NCj4gPiAgIAlzdHJ1Y3QgcnRl X2V0aF9yeHR4X2NhbGxiYWNrICpjYiA9IHJ0ZV96bWFsbG9jKE5VTEwsIHNpemVvZigqY2IpLCAw KTsNCj4gPg0KPiA+ICAgCWlmIChjYiA9PSBOVUxMKSB7DQo+ID4gQEAgLTQwODQsNiArNDI2NCw4 IEBAIGludCBydGVfZXRoX3NldF9xdWV1ZV9yYXRlX2xpbWl0KHVpbnQxNl90IHBvcnRfaWQsDQo+ IHVpbnQxNl90IHF1ZXVlX2lkeCwNCj4gPiAgIAlydGVfZXJybm8gPSBFTk9UU1VQOw0KPiA+ICAg CXJldHVybiBOVUxMOw0KPiA+ICAgI2VuZGlmDQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl djsNCj4gPiArDQo+ID4gICAJLyogY2hlY2sgaW5wdXQgcGFyYW1ldGVycyAqLw0KPiA+ICAgCWlm ICghcnRlX2V0aF9kZXZfaXNfdmFsaWRfcG9ydChwb3J0X2lkKSB8fCBmbiA9PSBOVUxMIHx8DQo+ ID4gICAJCSAgICBxdWV1ZV9pZCA+PSBydGVfZXRoX2RldmljZXNbcG9ydF9pZF0uZGF0YS0+bmJf dHhfcXVldWVzKSB7DQo+ID4gQEAgLTQwOTEsNiArNDI3MywxMiBAQCBpbnQgcnRlX2V0aF9zZXRf cXVldWVfcmF0ZV9saW1pdCh1aW50MTZfdA0KPiBwb3J0X2lkLCB1aW50MTZfdCBxdWV1ZV9pZHgs DQo+ID4gICAJCXJldHVybiBOVUxMOw0KPiA+ICAgCX0NCj4gPg0KPiA+ICsJZGV2ID0gJnJ0ZV9l dGhfZGV2aWNlc1twb3J0X2lkXTsNCj4gPiArCWlmIChydGVfZXRoX2Rldl9pc190eF9oYWlycGlu X3F1ZXVlKGRldiwgcXVldWVfaWQpKSB7DQo+ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ ICsJCXJldHVybiBOVUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAgIAlzdHJ1Y3QgcnRlX2V0aF9y eHR4X2NhbGxiYWNrICpjYiA9IHJ0ZV96bWFsbG9jKE5VTEwsIHNpemVvZigqY2IpLCAwKTsNCj4g Pg0KPiA+ICAgCWlmIChjYiA9PSBOVUxMKSB7DQo+ID4gQEAgLTQyMDQsNiArNDM5MiwxMyBAQCBp bnQgcnRlX2V0aF9zZXRfcXVldWVfcmF0ZV9saW1pdCh1aW50MTZfdA0KPiBwb3J0X2lkLCB1aW50 MTZfdCBxdWV1ZV9pZHgsDQo+ID4gICAJCXJldHVybiAtRUlOVkFMOw0KPiA+ICAgCX0NCj4gPg0K PiA+ICsJaWYgKHJ0ZV9ldGhfZGV2X2lzX3J4X2hhaXJwaW5fcXVldWUoZGV2LCBxdWV1ZV9pZCkp IHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhJTkZPLA0KPiA+ICsJCQkiQ2FuJ3QgZ2V0IHF1ZXVl IGluZm8gZm9yIFJ4IHF1ZXVlICUiUFJJdTE2IiBvZiBkZXZpY2UNCj4gd2l0aCBwb3J0X2lkPSUi UFJJdTE2IiBpcyBoYWlycGluIHF1ZXVlXG4iLA0KPiANCj4gInF1ZXVlIiBpcyByZXBlYXRlZCAz IHRpbWVzIGFib3ZlIDspIEknbSBhZnJhaWQgaXQgaXMgdG9vIG11Y2gsIG1heSBiZToNCj4gIkNh bid0IGdldCBoYWlycGluIFJ4IHF1ZXVlICUiIFBSSXUxNiAiIHBvcnQgJSIgUFJJdTE2ICIgaW5m b1xuIg0KPiBvcg0KPiAiQ2FuJ3QgZ2V0IGhhaXJwaW4gUnggcXVldWUgJSIgUFJJdTE2ICIgaW5m byBvZiBkZXZpY2Ugd2l0aCBwb3J0X2lkPSUiDQo+IFBSSXUxNiAiXG4iDQo+IEFueXdheSB1cCB0 byB5b3UuDQo+IA0KDQpPLksuICBJIHdpbGwgdXBkYXRlLg0KDQo+ID4gKwkJCXF1ZXVlX2lkLCBw b3J0X2lkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gICAJ UlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0+cnhxX2luZm9fZ2V0LCAtDQo+ IEVOT1RTVVApOw0KPiA+DQo+ID4gICAJbWVtc2V0KHFpbmZvLCAwLCBzaXplb2YoKnFpbmZvKSk7 DQo+ID4gQEAgLTQyMjgsNiArNDQyMywxMyBAQCBpbnQgcnRlX2V0aF9zZXRfcXVldWVfcmF0ZV9s aW1pdCh1aW50MTZfdA0KPiBwb3J0X2lkLCB1aW50MTZfdCBxdWV1ZV9pZHgsDQo+ID4gICAJCXJl dHVybiAtRUlOVkFMOw0KPiA+ICAgCX0NCj4gPg0KPiA+ICsJaWYgKHJ0ZV9ldGhfZGV2X2lzX3R4 X2hhaXJwaW5fcXVldWUoZGV2LCBxdWV1ZV9pZCkpIHsNCj4gPiArCQlSVEVfRVRIREVWX0xPRyhJ TkZPLA0KPiA+ICsJCQkiQ2FuJ3QgZ2V0IHF1ZXVlIGluZm8gZm9yIFR4IHF1ZXVlICUiUFJJdTE2 IiBvZiBkZXZpY2UNCj4gd2l0aCBwb3J0X2lkPSUiUFJJdTE2IiBpcyBoYWlycGluIHF1ZXVlXG4i LA0KPiANCj4gU2FtZQ0KPg0KDQpTYW1lLg0KIA0KPiA+ICsJCQlxdWV1ZV9pZCwgcG9ydF9pZCk7 DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICAgCVJURV9GVU5D X1BUUl9PUl9FUlJfUkVUKCpkZXYtPmRldl9vcHMtPnR4cV9pbmZvX2dldCwgLQ0KPiBFTk9UU1VQ KTsNCj4gPg0KPiA+ICAgCW1lbXNldChxaW5mbywgMCwgc2l6ZW9mKCpxaW5mbykpOw0KPiA+IEBA IC00NjAwLDYgKzQ4MDIsMjEgQEAgaW50IHJ0ZV9ldGhfc2V0X3F1ZXVlX3JhdGVfbGltaXQodWlu dDE2X3QNCj4gcG9ydF9pZCwgdWludDE2X3QgcXVldWVfaWR4LA0KPiA+ICAgfQ0KPiA+DQo+ID4g ICBpbnQNCj4gPiArcnRlX2V0aF9kZXZfaGFpcnBpbl9jYXBhYmlsaXR5X2dldCh1aW50MTZfdCBw b3J0X2lkLA0KPiA+ICsJCQkJICAgc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jYXAgKmNhcCkNCj4g PiArew0KPiA+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXY7DQo+ID4gKw0KPiA+ICsJUlRFX0VU SF9WQUxJRF9QT1JUSURfT1JfRVJSX1JFVChwb3J0X2lkLCAtRUlOVkFMKTsNCj4gPiArDQo+ID4g KwlkZXYgPSAmcnRlX2V0aF9kZXZpY2VzW3BvcnRfaWRdOw0KPiA+ICsJUlRFX0ZVTkNfUFRSX09S X0VSUl9SRVQoKmRldi0+ZGV2X29wcy0+aGFpcnBpbl9jYXBfZ2V0LA0KPiA+ICsJCQkJLUVOT1RT VVApOw0KPiANCj4gUGxlYXNlLCBtb3ZlIC1FTk9UU1VQIHRvIHRoZSBwcmV2aW91cyBsaW5lIHNp bmNlIGxpbmUgbGVuZ3RoIGlzIHN1ZmZpY2llbnQNCj4gYW5kIG1ha2UgaXQgc2ltaWxhciB0byBw b3J0X2lkIGNoZWNrIGFib3ZlLg0KPiANCg0KTGFzdCB0aW1lIEkgY2hlY2sgaXQgZGlkbid0IGhh dmUgcm9vbSwgSSB3aWxsIGNoZWNrIGFnYWluLg0KDQo+ID4gKwltZW1zZXQoY2FwLCAwLCBzaXpl b2YoKmNhcCkpOw0KPiA+ICsJcmV0dXJuIGV0aF9lcnIocG9ydF9pZCwgKCpkZXYtPmRldl9vcHMt PmhhaXJwaW5fY2FwX2dldCkoZGV2LCBjYXApKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50DQo+ ID4gICBydGVfZXRoX2Rldl9wb29sX29wc19zdXBwb3J0ZWQodWludDE2X3QgcG9ydF9pZCwgY29u c3QgY2hhciAqcG9vbCkNCj4gPiAgIHsNCj4gPiAgIAlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldjsN Cj4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oIGIvbGliL2xp YnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oDQo+ID4gaW5kZXggOWUxZjlhZS4uOWI2OTI1NSAxMDA2 NDQNCj4gPiAtLS0gYS9saWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2LmgNCj4gPiArKysgYi9s aWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2LmgNCj4gPiBAQCAtODM5LDYgKzgzOSw0NiBAQCBz dHJ1Y3QgcnRlX2V0aF90eGNvbmYgew0KPiA+ICAgfTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4gKyAq IEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwg b3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlvcg0KPiBub3RpY2UNCj4gPiArICoNCj4gPiArICog QSBzdHJ1Y3R1cmUgdXNlZCB0byByZXR1cm4gdGhlIGhhaXJwaW4gY2FwYWJpbGl0aWVzIHRoYXQg YXJlIHN1cHBvcnRlZC4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfZXRoX2hhaXJwaW5fY2Fw IHsNCj4gPiArCS8qKiBUaGUgbWF4IG51bWJlciBvZiBoYWlycGluIHF1ZXVlcyAoZGlmZmVyZW50 IGJpbmRpbmdzKS4gKi8NCj4gPiArCXVpbnQxNl90IG1heF9uYl9xdWV1ZXM7DQo+ID4gKwkvKio8 IE1heCBudW1iZXIgb2YgUnggcXVldWVzIHRvIGJlIGNvbm5lY3RlZCB0byBvbmUgVHggcXVldWUu ICovDQo+IA0KPiBTaG91bGQgYmUgLyoqDQo+IA0KDQpXaWxsIGZpeC4NCg0KPiA+ICsJdWludDE2 X3QgbWF4X3J4XzJfdHg7DQo+ID4gKwkvKio8IE1heCBudW1iZXIgb2YgVHggcXVldWVzIHRvIGJl IGNvbm5lY3RlZCB0byBvbmUgUnggcXVldWUuICovDQo+IA0KPiBTaG91bGQgYmUgLyoqDQo+IA0K DQpXaWxsIGZpeC4NCg0KPiBbc25pcF0NCg0KDQpUaGFua3MsDQpPcmkNCg==