From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id DF08A41DE5; Mon, 6 Mar 2023 11:32:59 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 921FD40E50; Mon, 6 Mar 2023 11:32:59 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 695C540A8A for ; Mon, 6 Mar 2023 11:32:57 +0100 (CET) Received: from dggpeml100022.china.huawei.com (unknown [172.30.72.56]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4PVZf96BZjz1gwk1; Mon, 6 Mar 2023 18:32:49 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by dggpeml100022.china.huawei.com (7.185.36.176) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Mon, 6 Mar 2023 18:32:53 +0800 Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.021; Mon, 6 Mar 2023 11:32:52 +0100 From: Konstantin Ananyev To: Ruifeng Wang , Ferruh Yigit , Konstantin Ananyev , "dev@dpdk.org" , Fengchengwen , Honnappa Nagarahalli , Stephen Hemminger , "Ajit Khaparde (ajit.khaparde@broadcom.com)" CC: nd Subject: RE: [PATCH 2/2] ethdev: fix race condition in fast-path ops setup Thread-Topic: [PATCH 2/2] ethdev: fix race condition in fast-path ops setup Thread-Index: AQHZRPHnBL1vPilgIEWuG59yHT+R767XVo0AgAGZ0YCAAKEXgIAAh9OAgACoesCAASVfAIAAPmKAgABYF4CAAlnQAIACm6eAgAfazgCAA/0DgIAAV9OQ Date: Mon, 6 Mar 2023 10:32:52 +0000 Message-ID: <5cbf53cb272d42b994eb12b337466986@huawei.com> References: <20230220060839.1267349-1-ashok.k.kaladi@intel.com> <20230220060839.1267349-2-ashok.k.kaladi@intel.com> <4786db4b-63dc-5329-522d-77eb58d4cff4@huawei.com> <20230221090053.14d653bf@hermes.local> <3cd97a71-b32f-b33b-dce1-46fabad182f6@huawei.com> <54fbf4e55cd44477b1e956f98a7a3c50@huawei.com> <3dc3b3d3-c80f-a361-8780-b1b3e48d843e@yandex.ru> <52296fe2-d9f6-1a24-e577-e5271a69a053@amd.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.195.247.106] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DQoNCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IEZlcnJ1aCBZaWdp dCA8ZmVycnVoLnlpZ2l0QGFtZC5jb20+DQo+ID4gU2VudDogU2F0dXJkYXksIE1hcmNoIDQsIDIw MjMgMToxOSBBTQ0KPiA+IFRvOiBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0YW50aW4udi5hbmFu eWV2QHlhbmRleC5ydT47IGRldkBkcGRrLm9yZzsgZmVuZ2NoZW5nd2VuDQo+ID4gPGZlbmdjaGVu Z3dlbkBodWF3ZWkuY29tPjsgS29uc3RhbnRpbiBBbmFueWV2IDxrb25zdGFudGluLmFuYW55ZXZA aHVhd2VpLmNvbT47IEhvbm5hcHBhDQo+ID4gTmFnYXJhaGFsbGkgPEhvbm5hcHBhLk5hZ2FyYWhh bGxpQGFybS5jb20+OyBTdGVwaGVuIEhlbW1pbmdlciA8c3RlcGhlbkBuZXR3b3JrcGx1bWJlci5v cmc+Ow0KPiA+IFJ1aWZlbmcgV2FuZyA8UnVpZmVuZy5XYW5nQGFybS5jb20+OyBBaml0IEtoYXBh cmRlIChhaml0LmtoYXBhcmRlQGJyb2FkY29tLmNvbSkNCj4gPiA8YWppdC5raGFwYXJkZUBicm9h ZGNvbS5jb20+DQo+ID4gU3ViamVjdDogUmU6IFtQQVRDSCAyLzJdIGV0aGRldjogZml4IHJhY2Ug Y29uZGl0aW9uIGluIGZhc3QtcGF0aCBvcHMgc2V0dXANCj4gPg0KPiA+IE9uIDIvMjYvMjAyMyA1 OjIyIFBNLCBLb25zdGFudGluIEFuYW55ZXYgd3JvdGU6DQo+ID4gPg0KPiA+ID4+Pj4+Pj4+Pj4+ IElmIGV0aGRldiBlbnF1ZXVlIG9yIGRlcXVldWUgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZw0K PiA+ID4+Pj4+Pj4+Pj4+IGV0aF9kZXZfZnBfb3BzX3NldHVwKCksIGl0IG1heSBnZXQgcHJlLWVt cHRlZCBhZnRlciBzZXR0aW5nDQo+ID4gPj4+Pj4+Pj4+Pj4gdGhlIGZ1bmN0aW9uIHBvaW50ZXJz LCBidXQgYmVmb3JlIHNldHRpbmcgdGhlIHBvaW50ZXIgdG8gcG9ydCBkYXRhLg0KPiA+ID4+Pj4+ Pj4+Pj4+IEluIHRoaXMgY2FzZSB0aGUgbmV3bHkgcmVnaXN0ZXJlZCBlbnF1ZXVlL2RlcXVldWUg ZnVuY3Rpb24NCj4gPiA+Pj4+Pj4+Pj4+PiB3aWxsIHVzZSBkdW1teSBwb3J0IGRhdGEgYW5kIGVu ZCB1cCBpbiBzZWcgZmF1bHQuDQo+ID4gPj4+Pj4+Pj4+Pj4NCj4gPiA+Pj4+Pj4+Pj4+PiBUaGlz IHBhdGNoIG1vdmVzIHRoZSB1cGRhdGlvbiBvZiBlYWNoIGRhdGEgcG9pbnRlcnMgYmVmb3JlDQo+ ID4gPj4+Pj4+Pj4+Pj4gdXBkYXRpbmcgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBwb2ludGVycy4N Cj4gPiA+Pj4+Pj4+Pj4+Pg0KPiA+ID4+Pj4+Pj4+Pj4+IEZpeGVzOiBjODdkNDM1YTRkNzkgKCJl dGhkZXY6IGNvcHkgZmFzdC1wYXRoIEFQSSBpbnRvDQo+ID4gPj4+Pj4+Pj4+Pj4gc2VwYXJhdGUN Cj4gPiA+Pj4+Pj4+Pj4+PiBzdHJ1Y3R1cmUiKQ0KPiA+ID4+Pj4+Pj4+Pj4+IENjOiBzdGFibGVA ZHBkay5vcmcNCj4gPiA+Pj4+Pj4+Pg0KPiA+ID4+Pj4+Pj4+IFdoeSBpcyBzb21ldGhpbmcgY2Fs bGluZyBlbnF1ZXVlL2RlcXVldWUgd2hlbiBkZXZpY2UgaXMgbm90DQo+ID4gPj4+Pj4+Pj4gZnVs bHkNCj4gPiA+Pj4+Pj4gc3RhcnRlZC4NCj4gPiA+Pj4+Pj4+PiBBIGNvcnJlY3RseSB3cml0dGVu IGFwcGxpY2F0aW9uIHdvdWxkIG5vdCBjYWxsIHJ4L3R4IGJ1cnN0DQo+ID4gPj4+Pj4+Pj4gdW50 aWwgYWZ0ZXIgZXRoZGV2IHN0YXJ0IGhhZCBmaW5pc2hlZC4NCj4gPiA+Pj4+Pj4+DQo+ID4gPj4+ Pj4+PiBQbGVhc2UgcmVmZXIgdGhlIGViMGQ0NzFhODk0IChldGhkZXY6IGFkZCBwcm9hY3RpdmUg ZXJyb3INCj4gPiA+Pj4+Pj4+IGhhbmRsaW5nIG1vZGUpLCB3aGVuIGRyaXZlciByZWNvdmVyIGl0 c2VsZiwgdGhlIGFwcGxpY2F0aW9uIG1heQ0KPiA+ID4+Pj4+Pj4gc3RpbGwgaW52b2tlDQo+ID4g Pj4+Pj4+IGVucXVldWUvZGVxdWV1ZSBBUEkuDQo+ID4gPj4+Pj4+DQo+ID4gPj4+Pj4+IFJpZ2h0 IG5vdyBEUERLIGV0aGRldiBsYXllciAqZG9lcyBub3QqIHByb3ZpZGUgc3luY2hyb25pemF0aW9u DQo+ID4gPj4+Pj4+IG1lY2hhbmlzbXMgYmV0d2VlbiBkYXRhLXBhdGggYW5kIGNvbnRyb2wtcGF0 aCBmdW5jdGlvbnMuDQo+ID4gPj4+Pj4+IFRoYXQgd2FzIGEgZGVsaWJlcmF0ZSBkZWlzZ24gY2hv aWNlLiBJZiB3ZSB3YW50IHRvIGNoYW5nZSB0aGF0DQo+ID4gPj4+Pj4+IHJ1bGUsIHRoZW4gSSBz dXBwb3NlIHdlIG5lZWQgYSBjb21tdW5pdHkgY29uc2Vuc3VzIGZvciBpdC4NCj4gPiA+Pj4+Pj4g SSB0aGluayB0aGF0IGlmIHRoZSBkcml2ZXIgd2FudHMgdG8gcHJvdmlkZSBzb21lIHNvcnQgb2Yg ZXJyb3INCj4gPiA+Pj4+Pj4gcmVjb3ZlcnkgcHJvY2VkdXJlLCB0aGVuIGl0IGhhcyB0byBwcm92 aWRlIHNvbWUgc3luY2hyb25pemF0aW9uDQo+ID4gPj4+Pj4+IG1lY2hhbmlzbSBpbnNpZGUgaXQg YmV0d2VlbiBkYXRhLXBhdGggYW5kIGNvbnRyb2wtcGF0aCBmdW5jdGlvbnMuDQo+ID4gPj4+Pj4+ IEFjdHVhbGx5IGxvb2tpbmcgYXQgZWIwZDQ3MWE4OTQgKGV0aGRldjogYWRkIHByb2FjdGl2ZSBl cnJvcg0KPiA+ID4+Pj4+PiBoYW5kbGluZyBtb2RlKSwgYW5kIGZvbGxvd2luZyBwYXRjaGVzIEkg d29uZGVyIGhvdyBpdCBjcmVlcGVkIGluPw0KPiA+ID4+Pj4+PiBJdCBzZWVtcyB3ZSBqdXN0IGlu dHJvZHVjZWQgYSBsb29waG9sZSBmb3IgcmFjZSBjb25kaXRpb24gd2l0aA0KPiA+ID4+Pj4+PiB0 aGlzIGFwcHJvYWNoLi4uDQo+ID4gPj4+Pg0KPiA+ID4+Pj4gQ291bGQgeW91IHRyeSB0byBkZXNj cmliZSB0aGUgc3BlY2lmaWMgc2NlbmFyaW8gb2YgbG9vcGhvbGUgPw0KPiA+ID4+Pg0KPiA+ID4+ PiBPaywgYXMgSSB1bmRlcnN0YW5kIHRoZSBleGlzdGluZyBtZWNoYW5pc206DQo+ID4gPj4+DQo+ ID4gPj4+IFdoZW4gUE1EIHdhbnRzIHRvIHN0YXJ0IGEgcmVjb3ZlcnkgaXQgaGFzIHRvOg0KPiA+ ID4+PiDCoCAtIGludm9rZQ0KPiA+ID4+PiBydGVfZXRoX2Rldl9jYWxsYmFja19wcm9jZXNzKFJU RV9FVEhfRVZFTlRfRVJSX1JFQ09WRVJJTkcpOw0KPiA+ID4+PiDCoMKgwqAgVGhhdCBzdXBwb3Nl ZCB0byBjYWxsIHVzZXIgcHJvdmlkZWQgY2FsbGJhY2suIEFmdGVyIGNhbGxiYWNrIGlzDQo+ID4g Pj4+IGZpbmlzaGVkIFBNRCBhc3N1bWVzDQo+ID4gPj4+IMKgwqDCoCB0aGF0IHVzZXIgaXMgYXdh cmUgdGhhdCByZWNvdmVyeSBpcyBhYm91dCB0byBzdGFydCBhbmQgc2hvdWxkDQo+ID4gPj4+IG1h a2Ugc29tZSBwcmVjYXV0aW9ucy4NCj4gPiA+Pj4gLSB3aGVuIHJlY292ZXJ5IGlzIGZpbmlzaGVk IGl0IGludm9rZXMgYW5vdGhlciBjYWxsYmFjazoNCj4gPiA+Pj4gwqDCoCBSVEVfRVRIX0VWRU5U X1JFQ09WRVJZXyhTVUNDRVNTL0ZBSUxFRCkuIEFmdGVyIHRoYXQgdXNlciBlaXRoZXINCj4gPiA+ Pj4gY2FuIGNvbnRpbnVlIHRvDQo+ID4gPj4+IMKgwqAgdXNlIHBvcnQgb3IgaGF2ZSB0byB0cmVh dCBpcyBhcyBmYXVsdHkuDQo+ID4gPj4+DQo+ID4gPj4+IFRoZSBpZGVhIGlzIG9rIGluIHByaW5j aXBsZSwgYnV0IHRoZXJlIGlzIGEgcHJvYmxlbS4NCj4gPiA+Pj4NCj4gPiA+Pj4gbGliL2V0aGRl di9ydGVfZXRoZGV2Lmg6DQo+ID4gPj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCAvKiogUG9ydCBy ZWNvdmVyaW5nIGZyb20gYSBoYXJkd2FyZSBvciBmaXJtd2FyZSBlcnJvci4NCj4gPiA+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgICogSWYgUE1EIHN1cHBvcnRzIHByb2FjdGl2ZSBlcnJvciByZWNvdmVy eSwNCj4gPiA+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICogaXQgc2hvdWxkIHRyaWdnZXIgdGhpcyBl dmVudCB0byBub3RpZnkgYXBwbGljYXRpb24NCj4gPiA+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICog dGhhdCBpdCBkZXRlY3RlZCBhbiBlcnJvciBhbmQgdGhlIHJlY292ZXJ5IGlzIGJlaW5nIHN0YXJ0 ZWQuDQo+ID4gPj4+DQo+ID4gPj4+IDw8PCAhISEhIQ0KPiA+ID4+PiDCoMKgwqDCoMKgwqDCoMKg wqAgKiBVcG9uIHJlY2VpdmluZyB0aGUgZXZlbnQsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90 DQo+ID4gPj4+IGludm9rZSBhbnkgY29udHJvbCBwYXRoIEFQSQ0KPiA+ID4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgKiAoc3VjaCBhcyBydGVfZXRoX2Rldl9jb25maWd1cmUvcnRlX2V0aF9kZXZfc3Rv cC4uLikNCj4gPiA+Pj4gdW50aWwgcmVjZWl2aW5nDQo+ID4gPj4+IMKgwqDCoMKgwqDCoMKgwqDC oCAqIFJURV9FVEhfRVZFTlRfUkVDT1ZFUllfU1VDQ0VTUyBvcg0KPiA+ID4+PiBSVEVfRVRIX0VW RU5UX1JFQ09WRVJZX0ZBSUxFRCBldmVudC4NCj4gPiA+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICog VGhlIFBNRCB3aWxsIHNldCB0aGUgZGF0YSBwYXRoIHBvaW50ZXJzIHRvIGR1bW15DQo+ID4gPj4+ IGZ1bmN0aW9ucywNCj4gPiA+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICogYW5kIHJlLXNldCB0aGUg ZGF0YSBwYXRoIHBvaW50ZXJzIHRvIG5vbi1kdW1teSBmdW5jdGlvbnMNCj4gPiA+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgICogYmVmb3JlIHJlcG9ydGluZyBSVEVfRVRIX0VWRU5UX1JFQ09WRVJZX1NV Q0NFU1MgZXZlbnQuDQo+ID4gPj4+IDw8PCAhISEhIQ0KPiA+ID4+Pg0KPiA+ID4+PiBUaGF0IHBh cnQgaXMganVzdCB3cm9uZyBJIGJlbGlldmUuDQo+ID4gPj4+IEl0IHNob3VsZCBiZToNCj4gPiA+ Pj4gVXBvbiByZWNlaXZpbmcgdGhlIGV2ZW50LCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBp bnZva2UgYW55DQo+ID4gPj4+ICpib3RoIGNvbnRyb2wgYW5kIGRhdGEtcGF0aCogQVBJIHVudGls IHJlY2VpdmluZw0KPiA+ID4+PiBSVEVfRVRIX0VWRU5UX1JFQ09WRVJZX1NVQ0NFU1Mgb3IgUlRF X0VUSF9FVkVOVF9SRUNPVkVSWV9GQUlMRUQNCj4gPiA+Pj4gZXZlbnQuDQo+ID4gPj4+IFJlc2V0 dGluZyBkYXRhIHBhdGggcG9pbnRlcnMgdG8gZHVtbXkgZnVuY3Rpb25zIGJ5IFBNRCAqYmVmb3Jl Kg0KPiA+ID4+PiBpbnZva2luZyBydGVfZXRoX2Rldl9jYWxsYmFja19wcm9jZXNzKFJURV9FVEhf RVZFTlRfRVJSX1JFQ09WRVJJTkcpOw0KPiA+ID4+PiBpbnRyb2R1Y2VzIGEgcmFjZS1jb25kaXRp b24gd2l0aCBkYXRhLXBhdGggdGhyZWFkcywgYXMgc3VjaCB0aHJlYWQNCj4gPiA+Pj4gY291bGQg YWxyZWFkeSBiZSBpbnNpZGUgUlgvVFggZnVuY3Rpb24gb3IgY2FuIGFscmVhZHkgcmVhZCBSWC9U WA0KPiA+ID4+PiBmdW5jdGlvbi9kYXRhIHBvaW50ZXJzIGFuZCBiZSBhYm91dCB0byB1c2UgdGhl bS4NCj4gPiA+Pg0KPiA+ID4+IEN1cnJlbnQgcHJhY3RpY2VzOiB0aGUgUE1EcyBhbHJlYWR5IGFk ZCBzb21lIGRlbGF5IGFmdGVyIHNldCBSeC9UeA0KPiA+ID4+IGNhbGxiYWNrIHRvIGR1bW15LCBh bmQgcGx1cyB0aGUgRFBESyB3b3JrZXIgdGhyZWFkIGlzIGJ1c3lwb2xsaW5nLA0KPiA+ID4+IHRo ZSBwcm9iYWJpbGl0eSBvZiBvY2N1cmVuY2UgaW4gcmVhbGl0eSBpcyB6ZXJvLiBCdXQgaW4gdGhl b3JldGljYWxseQ0KPiA+ID4+IGV4aXN0IHRoZSBhYm92ZSByYWNlLWNvbmRpdGlvbi4NCj4gPiA+ DQo+ID4gPg0KPiA+ID4gQWRkaW5nIGRlbGF5IG1pZ2h0IG1ha2UgYSBwcm9ibGVtIGEgYml0IGxl c3MgcmVwcm9kdWNpYmxlLCBidXQgaXQNCj4gPiA+IGRvZXNuJ3QgZml4IGl0Lg0KPiA+ID4gVGhl IGJ1ZyBpcyBzdGlsbCB0aGVyZS4NCj4gPiA+DQo+ID4gPg0KPiA+ID4+DQo+ID4gPj4+IEFuZCBy aWdodCBub3cgcnRlX2V0aGRldiBsYXllciBkb2Vzbid0IHByb3ZpZGUgYW55IG1lY2hhbmlzbSB0 bw0KPiA+ID4+PiBjaGVjayBpdCBvciB3YWl0IHdoZW4gdGhleSdsbCBmaW5pc2gsIGV0Yy4NCj4g PiA+Pg0KPiA+ID4+IFllcw0KPiA+ID4+DQo+ID4gPj4+DQo+ID4gPj4+IFNvLCBwcm9iYWJseSB0 aGUgc2ltcGxlc3Qgd2F5IHRvIGZpeCBpdCB3aXRoIGV4aXN0aW5nIERQREsgZGVzaWduOg0KPiA+ ID4+PiAtIHVzZXIgbGV2ZWwgY2FsbGJhY2vCoCBSVEVfRVRIX0VWRU5UX0VSUl9SRUNPVkVSSU5H IHNob3VsZCByZXR1cm4NCj4gPiA+Pj4gb25seSBhZnRlciBpdCBlbnN1cmVzIHRoYXQgKmFsbCoN Cj4gPiA+Pj4gwqDCoCBhcHBsaWNhdGlvbiB0aHJlYWRzIChhbmQgcHJvY2Vzc2VzKSBzdG9wcGVk IHVzaW5nIGVpdGhlciBjb250cm9sDQo+ID4gPj4+IG9yIGRhdGEtcGF0aCBmdW5jdGlvbnMgZm9y IHRoYXQgcG9ydA0KPiA+ID4+DQo+ID4gPj4gQWdyZWUNCj4gPiA+Pg0KPiA+ID4+PiDCoMKgICh5 ZXMgaXQgbWVhbnMgdGhhdCBhcHBsaWNhdGlvbiB0aGF0IHdhbnRzIHRvIHVzZSB0aGlzIGZlYXR1 cmUgaGFzDQo+ID4gPj4+IHRvIHByb3ZpZGUgaXRzIG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFu aXNtDQo+ID4gPj4+IMKgwqAgYXJvdW5kIGRhdGEtcGF0aCBmdW5jdGlvbnMgKFJYL1RYKSB0aGF0 IGl0IGlzIGdvaW5nIHRvIHVzZSkuDQo+ID4gPj4+IC0gYWZ0ZXIgdGhhdCBQTUQgaXMgc2FmZSB0 byByZXNldCBydGVfZXRoX2ZwX29wc1tdIHZhbHVlcyB0byBkdW1teSBvbmVzLg0KPiA+ID4+Pg0K PiA+ID4+PiBBbmQgbWVzc2FnZSB0byBhbGwgUE1EIGRldmVsb3BlcnM6DQo+ID4gPj4+ICpwbGVh c2Ugc3RvcCB1cGRhdGluZyBydGVfZXRoX2ZwX29wc1tdIG9uIHlvdXIgb3duKi4NCj4gPiA+Pj4g VGhhdCdzIGEgYmFkIHByYWN0aWNlIGFuZCBpdCBpcyBub3Qgc3VwcG9zZWQgdG8gZG8gdGhpbmdz IHRoYXQgd2F5Lg0KPiA+ID4+PiBUaGVyZSBpcyBhIHNwZWNpYWwgQVBJIHByb3ZpZGVkIGZvciB0 aGVzZSBwdXJwb3NlczoNCj4gPiA+Pj4gZXRoX2Rldl9mcF9vcHNfcmVzZXQoKSwgZXRoX2Rldl9m cF9vcHNfc2V0dXAoKSwgc28gdXNlIGl0Lg0KPiA+ID4+DQo+ID4gPj4gVGhpcyB0d28gZnVuY3Rp b24gaXMgaW4gcHJpdmF0ZS5oLCBzbyBpdCBzaG91bGQgYmUgZXhwb3NlIHRvIHB1YmxpYw0KPiA+ ID4+IGhlYWRlciBmaWxlLg0KPiA+ID4NCj4gPiA+IFlvdSBtZWFuIHdlIG5lZWQgdG8gbW92ZSB0 aGVzZSBmdW5jdGlvbnMgZGVjbGFyYXRpb25zIGludG8gZXRoZGV2X2RyaXZlci5oPw0KPiA+ID4g SWYgc28sIHRoZW4geWVzLCBJIHRoaW5rIHdlIHByb2JhYmx5IGRvLg0KPiA+ID4NCj4gPiA+DQo+ ID4NCj4gPg0KPiA+IFdoYXQgYWJvdXQgbWFraW5nIHNsaWdodGx5IGRpZmZlcmVudCB2ZXJzaW9u IGF2YWlsYWJsZSB0byBkcml2ZXJzLCB3aGljaCBvbmx5IHVwZGF0ZXMNCj4gPiBmdW5jdGlvbiBw b2ludGVycywgYnV0IG5vdCAgJ2Zwby0+cnhxJyAvICdmcG8tPnR4cScuDQo+ID4NCj4gPiBUaGlz IHdheSBkcml2ZXIgY2FuIHN3aXRjaCB0byBiZXR3ZWVuIGR1bW15IGFuZCByZWFsIGJ1cnN0IGZ1 bmN0aW9uIHdpdGhvdXQgd29ycnlpbmcgUngvVHgNCj4gPiBxdWV1ZSB2YWxpZGl0eS4NCj4gPg0K PiA+IEBDaGVuZ3dlbiwgQFJ1aWZlbmcsIGNhbiB0aGlzIHNvbHZlIHRoZSBpc3N1ZSBmb3IgcmVs YXhlZCBtZW1vcnkgb3JkZXJpbmcgc3lzdGVtcz8NCj4gDQo+IFllcywgdXBkYXRpbmcgb25seSBm dW5jdGlvbiBwb2ludGVycyByZW1vdmVzIHRoZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnQg YmV0d2VlbiBmdW5jdGlvbg0KPiBwb2ludGVyIGFuZCBxZGF0YS4NCg0KTGFkcywgdGhhdCB3b3Vs ZG4ndCB3b3JrIGFueXdheS4NClRoZSByYWNlIGJldHdlZW4gcmVjb3ZlcnkgcHJvY2VkdXJlIGFu ZCBkYXRhLXBhdGggcGVyc2lzdHM6DQpSZWNvdmVyeSBzdGlsbCBoYXMgbm8gaWRlYSBpcyBhdCBn aXZlbiBtb21lbnQgYW55IHRocmVhZCBkb2luZyBSWC9UWCBvciBub3QsIGFuZCB0aGVyZSBpcyBu bw0Kd2F5IGZvciBpdCB0byBrbm93IHdoZW4gc3VjaCB0aHJlYWQgd2lsbCBmaW5pc2guDQpXZSBk byBuZWVkIHNvbWUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBiZXR3ZWVuIGNvbnRyb2wocmVj b3ZlcnkpIGFuZCBkYXRhLXBhdGggdGhyZWFkcy4NCkkgYmVsaWV2ZSBpdCBpcyB1bmF2b2lkYWJs ZS4gICANCg0KPiA+DQo+ID4NCj4gPg0KPiA+ID4+Pg0KPiA+ID4+PiBCVFcswqAgSSBkb24ndCBz ZWUgYW55IGltcGxlbWVudGF0aW9uIGZvcg0KPiA+ID4+PiBSVEVfRVRIX0VWRU5UX0VSUl9SRUNP VkVSSU5HIHdpdGhpbiBlaXRoZXIgdGVzdHBtZCBvciBhbnkgb3RoZXINCj4gPiA+Pj4gZXhhbXBs ZSBhcHBzLg0KPiA+ID4+PiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPw0KPiA+ID4+DQo+ID4gPj4g Q3VycmVudGx5IGl0IGp1c3QgcHJvbW90ZSB0aGUgZXZlbnQuDQo+ID4gPg0KPiA+ID4NCj4gPiA+ IE9rLCBjYW4gSSBzdWdnZXN0IHRoZW4gdG8gYWRkIGEgcHJvcGVyIHVzYWdlIGZvciBpbnRvIGlu IHRlc3RwbWQ/DQo+ID4gPiBJdCBsb29rcyByZWFsbHkgc3RyYW5nZSB0aGF0IHdlIGFkZCBuZXcg ZmVhdHVyZSBpbnRvIGV0aGRldiAoYW5kIDINCj4gPiA+IFBNRHMpLCBidXQgZGlkbid0IHByb3Zp ZGUgYW55IHdheSBmb3IgdXNlcnMgdG8gdGVzdCBpdC4NCj4gPiA+DQo+ID4gPj4NCj4gPiA+Pj4g SWYgbm90LCB0aGVuIHByb2JhYmx5IGl0IGNvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCAt IGxldCdzDQo+ID4gPj4+IGluY29ycG9yYXRlIGl0IGluc2lkZSB0ZXN0cG1kIChuZXcgZm9yd2Fy ZGluZyBlbmdpbmUgcHJvYmFibHkpIHNvDQo+ID4gPj4+IGV2ZXJ5b25lIGNhbiB0ZXN0L3RyeSBp dC4NCj4gPiA+Pj4NCj4gPiA+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICogSXQgbWVhbnMgdGhhdCB0 aGUgYXBwbGljYXRpb24gY2Fubm90IHNlbmQgb3IgcmVjZWl2ZSBhbnkNCj4gPiA+Pj4gcGFja2V0 cw0KPiA+ID4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKiBkdXJpbmcgdGhpcyBwZXJpb2QuDQo+ID4g Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBub3RlIEJlZm9yZSB0aGUgUE1EIHJlcG9ydHMgdGhl IHJlY292ZXJ5IHJlc3VsdCwNCj4gPiA+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICogdGhlIFBNRCBt YXkgcmVwb3J0IHRoZSBSVEVfRVRIX0VWRU5UX0VSUl9SRUNPVkVSSU5HDQo+ID4gPj4+IGV2ZW50 IGFnYWluLA0KPiA+ID4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKiBiZWNhdXNlIGEgbGFyZ2VyIGVy cm9yIG1heSBvY2N1ciBkdXJpbmcgdGhlIHJlY292ZXJ5Lg0KPiA+ID4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgKi8NCj4gPiA+Pj4gwqDCoMKgwqDCoMKgwqDCoCBSVEVfRVRIX0VWRU5UX0VSUl9SRUNP VkVSSU5HLA0KPiA+ID4+Pg0KPiA+ID4+Pj4+PiBJdCBwcm9iYWJseSBuZWVkcyB0byBiZSBlaXRo ZXIgZGVwcmVjYXRlZCBvciByZXdvcmtlZC4NCj4gPiA+Pj4+PiBMb29raW5nIGF0IHRoZSBjb21t aXQsIGl0IGRvZXMgbm90IHNheSBhbnl0aGluZyBhYm91dCB0aGUgZGF0YQ0KPiA+ID4+Pj4+IHBs YW5lIGZ1bmN0aW9ucyB3aGljaCBwcm9iYWJseSBtZWFucywgdGhlIGVycm9yIHJlY292ZXJ5IGlz DQo+ID4gPj4+PiBoYXBwZW5pbmcgd2l0aGluIHRoZSBkYXRhIHBsYW5lIHRocmVhZC4gV2hhdCBo YXBwZW5zIHRvIG90aGVyIGRhdGENCj4gPiA+Pj4+IHBsYW5lIHRocmVhZHMgdGhhdCBhcmUgcG9s bGluZyB0aGUgc2FtZSBwb3J0IG9uIHdoaWNoIHRoZSBlcnJvcg0KPiA+ID4+Pj4gcmVjb3Zlcnkg aXMgaGFwcGVuaW5nPw0KPiA+ID4+Pj4NCj4gPiA+Pj4+IFRoZSBjb21taXQgbG9nIHNheXM6ICJ0 aGUgUE1EIHNldHMgdGhlIGRhdGEgcGF0aCBwb2ludGVycyB0byBkdW1teQ0KPiA+ID4+Pj4gZnVu Y3Rpb25zIi4NCj4gPiA+Pj4+DQo+ID4gPj4+PiBTbyB0aGUgZGF0YSBwbGFuZSB0aHJlYWRzIHdp bGwgcmVjZWl2ZSBub24tcGFja2V0IGFuZCBzZW5kIHplcm8NCj4gPiA+Pj4+IHdpdGggcG9ydCB3 aGljaCBpbiBlcnJvciByZWNvdmVyeS4NCj4gPiA+Pj4+DQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiBB bHNvLCB0aGUgY29tbWl0IGxvZyBzYXlzIHRoYXQgd2hpbGUgdGhlIGVycm9yIHJlY292ZXJ5IGlz IHVuZGVyDQo+ID4gPj4+Pj4gcHJvZ3Jlc3MsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGNh bGwgYW55IGNvbnRyb2wgcGxhbmUgQVBJcy4NCj4gPiA+Pj4+PiBEb2VzDQo+ID4gPj4+PiB0aGF0 IG1lYW4sIHRoZSBhcHBsaWNhdGlvbiBoYXMgdG8gY2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbiBl dmVyeQ0KPiA+ID4+Pj4gdGltZSBpdCBjYWxscyBhIGNvbnRyb2wgcGxhbmUgQVBJPw0KPiA+ID4+ Pj4NCj4gPiA+Pj4+IElmIGFwcGxpY2F0aW9uIGhhcyBub3QgcmVnaXN0ZXIgZXZlbnQNCj4gPiA+ Pj4+IChSVEVfRVRIX0VWRU5UX0VSUl9SRUNPVkVSSU5HKSBjYWxsYmFjaywgaXQgY291bGQgY2Fs bHMgY29udHJvbA0KPiA+ID4+Pj4gcGxhbmUgQVBJLCBidXQgaXQgd2lsbCByZXR1cm4gZmFpbGVk Lg0KPiA+ID4+Pj4gSWYgYXBwbGljYXRpb24gaGFzIHJlZ2lzdGVyIGFib3ZlIGNhbGxiYWNrLCBp dCBjYW4gd2FpdCBmb3INCj4gPiA+Pj4+IHJlY292ZXJ5IHJlc3VsdCwgb3IgZGlyZWN0IGNhbGwg d2l0aG91dCB3YWl0IGJ1dCB0aGlzIHdpbGwgcmV0dXJuIGZhaWxlZC4NCj4gPiA+Pj4+DQo+ID4g Pj4+Pj4NCj4gPiA+Pj4+PiBUaGUgY29tbWl0IG1lc3NhZ2UgYWxzbyBzYXlzIHRoYXQgIlBNRCBt YWtlcyBzdXJlIHRoZSBjb250cm9sIHBhdGgNCj4gPiA+Pj4+PiBvcGVyYXRpb25zIGZhaWxlZCB3 aXRoIHJldGNvZGUgLUVCVVNZIi4gSXQgZG9lcyBub3Qgc2F5IGhvdyBpdA0KPiA+ID4+Pj4gZG9l cyB0aGlzLiBCdXQsIGFueSBjb21tdW5pY2F0aW9uIGZyb20gdGhlIFBNRCB0aHJlYWQgdG8gY29u dHJvbA0KPiA+ID4+Pj4gcGxhbmUgdGhyZWFkIG1heSBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25z IGlmIG5vdCBkb25lIGNvcnJlY3RseS4NCj4gPiA+Pj4+DQo+ID4gPj4+PiBGaXJzdCB0aGVyZSBh cmUgbm8gUE1EIHRocmVhZCwgZG8geW91IG1lYW4gZWFsLWludHItdGhyZWFkID8NCj4gPiA+Pj4+ DQo+ID4gPj4+PiBBcyBmb3IgdGhpcyBxdWVzdGlvbiwgeW91IGNhbiBzZWUgUE1EcyB3aGljaCBh bHJlYWR5IGltcGxlbWVudCBpdCwNCj4gPiA+Pj4+IHRoZXkgYm90aCBwcm92aWRlcyBtdXR1YWwg ZXhjbHVzaW9uIHByb3RlY3Rpb24uDQo+ID4gPj4+Pg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4+DQo+ ID4gPj4+Pj4+Pg0KPiA+ID4+Pj4+Pj4+DQo+ID4gPj4+Pj4+Pj4gV291bGQgc29tZXRoaW5nIGxp a2UgdGhpcyB3b3JrIGJldHRlcj8NCj4gPiA+Pj4+Pj4+Pg0KPiA+ID4+Pj4+Pj4+IE5vdGU6IHRo ZXJlIGlzIGFub3RoZXIgYnVnIGluIGN1cnJlbnQgY29kZS4gVGhlIGNoZWNrIGZvciBsaW5rDQo+ ID4gPj4+Pj4+Pj4gc3RhdGUgaW50ZXJydXB0IGFuZCBsaW5rX29wcyBjb3VsZCByZXR1cm4gLUVO T1RTVVAgYW5kIGxlYXZlDQo+ID4gPj4+Pj4+Pj4gZGV2aWNlIGluDQo+ID4gPj4+Pj4+IGluZGV0 ZXJtaW5hdGUgc3RhdGUuDQo+ID4gPj4+Pj4+Pj4gVGhlIGNoZWNrIHNob3VsZCBiZSBkb25lIGJl Zm9yZSBjYWxsaW5nIFBNRC4NCj4gPiA+Pj4+Pj4+Pg0KPiA+ID4+Pj4+Pj4+IGRpZmYgLS1naXQg YS9saWIvZXRoZGV2L3J0ZV9ldGhkZXYuYyBiL2xpYi9ldGhkZXYvcnRlX2V0aGRldi5jDQo+ID4g Pj4+Pj4+Pj4gaW5kZXgNCj4gPiA+Pj4+Pj4+PiAwMjY2Y2M4MmFjYjYuLmQ2YzE2M2VkODVlNyAx MDA2NDQNCj4gPiA+Pj4+Pj4+PiAtLS0gYS9saWIvZXRoZGV2L3J0ZV9ldGhkZXYuYw0KPiA+ID4+ Pj4+Pj4+ICsrKyBiL2xpYi9ldGhkZXYvcnRlX2V0aGRldi5jDQo+ID4gPj4+Pj4+Pj4gQEAgLTE1 ODIsNiArMTU4MiwxNCBAQCBydGVfZXRoX2Rldl9zdGFydCh1aW50MTZfdCBwb3J0X2lkKQ0KPiA+ ID4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4gPiA+Pj4+Pj4+PiDCoMKg wqDCoMKgIH0NCj4gPiA+Pj4+Pj4+Pg0KPiA+ID4+Pj4+Pj4+ICvCoMKgwqAgaWYgKGRldi0+ZGF0 YS0+ZGV2X2NvbmYuaW50cl9jb25mLmxzYyA9PSAwICYmDQo+ID4gPj4+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgIGRldi0+ZGV2X29wcy0+bGlua191cGRhdGUgPT0gTlVMTCkgew0KPiA+ID4+Pj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBSVEVfRVRIREVWX0xPRyhJTkZPLA0KPiA+ID4+Pj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkRldmljZSB3aXRoIHBvcnRfaWQ9JSJQ Ukl1MTYiIGxpbmsgdXBkYXRlDQo+ID4gPj4+Pj4+Pj4gK25vdA0KPiA+ID4+Pj4+PiBzdXBwb3J0 ZWRcbiIsDQo+ID4gPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwb3J0X2lkKTsNCj4gPiA+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVOT1RTVVA7DQo+ID4gPj4+Pj4+Pj4gK8KgwqDCoCB9DQo+ID4gPj4+Pj4+Pj4gKw0KPiA+ID4+ Pj4+Pj4+IMKgwqDCoMKgwqAgcmV0ID0gcnRlX2V0aF9kZXZfaW5mb19nZXQocG9ydF9pZCwgJmRl dl9pbmZvKTsNCj4gPiA+Pj4+Pj4+PiDCoMKgwqDCoMKgIGlmIChyZXQgIT0gMCkNCj4gPiA+Pj4+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4gPiA+Pj4+Pj4+PiBAQCAtMTU5 MSw5ICsxNTk5LDcgQEAgcnRlX2V0aF9kZXZfc3RhcnQodWludDE2X3QgcG9ydF9pZCkNCj4gPiA+ Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXRoX2Rldl9tYWNfcmVzdG9yZShkZXYsICZkZXZf aW5mbyk7DQo+ID4gPj4+Pj4+Pj4NCj4gPiA+Pj4+Pj4+PiDCoMKgwqDCoMKgIGRpYWcgPSAoKmRl di0+ZGV2X29wcy0+ZGV2X3N0YXJ0KShkZXYpOw0KPiA+ID4+Pj4+Pj4+IC3CoMKgwqAgaWYgKGRp YWcgPT0gMCkNCj4gPiA+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgZGV2LT5kYXRhLT5kZXZfc3Rh cnRlZCA9IDE7DQo+ID4gPj4+Pj4+Pj4gLcKgwqDCoCBlbHNlDQo+ID4gPj4+Pj4+Pj4gK8KgwqDC oCBpZiAoZGlhZyAhPSAwKQ0KPiA+ID4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g ZXRoX2Vycihwb3J0X2lkLCBkaWFnKTsNCj4gPiA+Pj4+Pj4+Pg0KPiA+ID4+Pj4+Pj4+IMKgwqDC oMKgwqAgcmV0ID0gZXRoX2Rldl9jb25maWdfcmVzdG9yZShkZXYsICZkZXZfaW5mbywgcG9ydF9p ZCk7IEBADQo+ID4gPj4+Pj4+Pj4gLTE2MTEsMTYNCj4gPiA+Pj4+Pj4+PiArMTYxNywxOCBAQCBy dGVfZXRoX2Rldl9zdGFydCh1aW50MTZfdCBwb3J0X2lkKQ0KPiA+ID4+Pj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPiA+ID4+Pj4+Pj4+IMKgwqDCoMKgwqAgfQ0KPiA+ID4+ Pj4+Pj4+DQo+ID4gPj4+Pj4+Pj4gLcKgwqDCoCBpZiAoZGV2LT5kYXRhLT5kZXZfY29uZi5pbnRy X2NvbmYubHNjID09IDApIHsNCj4gPiA+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKCpkZXYt PmRldl9vcHMtPmxpbmtfdXBkYXRlID09IE5VTEwpDQo+ID4gPj4+Pj4+Pj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9UU1VQOw0KPiA+ID4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDC oCAoKmRldi0+ZGV2X29wcy0+bGlua191cGRhdGUpKGRldiwgMCk7DQo+ID4gPj4+Pj4+Pj4gLcKg wqDCoCB9DQo+ID4gPj4+Pj4+Pj4gLQ0KPiA+ID4+Pj4+Pj4+IMKgwqDCoMKgwqAgLyogZXhwb3Nl IHNlbGVjdGlvbiBvZiBQTUQgZmFzdC1wYXRoIGZ1bmN0aW9ucyAqLw0KPiA+ID4+Pj4+Pj4+IMKg wqDCoMKgwqAgZXRoX2Rldl9mcF9vcHNfc2V0dXAocnRlX2V0aF9mcF9vcHMgKyBwb3J0X2lkLCBk ZXYpOw0KPiA+ID4+Pj4+Pj4+DQo+ID4gPj4+Pj4+Pj4gK8KgwqDCoCAvKiBlbnN1cmUgc3RhdGUg aXMgc2V0IGJlZm9yZSBtYXJraW5nIGRldmljZSByZWFkeSAqLw0KPiA+ID4+Pj4+Pj4+ICvCoMKg wqAgcnRlX3NtcF93bWIoKTsNCj4gPiA+Pj4+Pj4+PiArDQo+ID4gPj4+Pj4+Pj4gwqDCoMKgwqDC oCBydGVfZXRoZGV2X3RyYWNlX3N0YXJ0KHBvcnRfaWQpOw0KPiA+ID4+Pj4+Pj4+ICsNCj4gPiA+ Pj4+Pj4+PiArwqDCoMKgIC8qIFVwZGF0ZSBjdXJyZW50IGxpbmsgc3RhdGUgKi8NCj4gPiA+Pj4+ Pj4+PiArwqDCoMKgIGlmIChkZXYtPmRhdGEtPmRldl9jb25mLmludHJfY29uZi5sc2MgPT0gMCkN Cj4gPiA+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgKCpkZXYtPmRldl9vcHMtPmxpbmtfdXBkYXRl KShkZXYsIDApOw0KPiA+ID4+Pj4+Pj4+ICsNCj4gPiA+Pj4+Pj4+PiDCoMKgwqDCoMKgIHJldHVy biAwOw0KPiA+ID4+Pj4+Pj4+IMKgIH0NCj4gPiA+Pj4+Pj4+Pg0KPiA+ID4+Pj4+Pj4+DQo+ID4g Pj4+Pj4+Pj4gLg0KPiA+ID4+Pj4+Pj4+DQo+ID4gPj4+Pj4NCj4gPiA+DQoNCg==