From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ola Liljedahl Subject: Re: [PATCH v3 2/5] ring: add a non-blocking implementation Date: Mon, 28 Jan 2019 10:35:55 +0000 Message-ID: <1548671766.3076.16.camel@arm.com> References: <20190115235227.14013-1-gage.eads@intel.com> <20190118152326.22686-1-gage.eads@intel.com> <20190118152326.22686-3-gage.eads@intel.com> <1548168583.31150.32.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CA46E@FMSMSX108.amr.corp.intel.com> <1548238575.31150.73.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CB6FE@FMSMSX108.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "olivier.matz@6wind.com" , "stephen@networkplumber.org" , nd , "bruce.richardson@intel.com" , "arybchenko@solarflare.com" , "konstantin.ananyev@intel.com" To: "jerinj@marvell.com" , "mczekaj@marvell.com" , "gage.eads@intel.com" , "dev@dpdk.org" Return-path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140079.outbound.protection.outlook.com [40.107.14.79]) by dpdk.org (Postfix) with ESMTP id 354B72BDB for ; Mon, 28 Jan 2019 11:35:59 +0100 (CET) In-Reply-To: <9184057F7FC11744A2107296B6B8EB1E541CB6FE@FMSMSX108.amr.corp.intel.com> Content-Language: en-US Content-ID: List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" T24gRnJpLCAyMDE5LTAxLTI1IGF0IDE3OjIxICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0KPiAN Cj4gPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IE9sYSBMaWxq ZWRhaGwgW21haWx0bzpPbGEuTGlsamVkYWhsQGFybS5jb21dDQo+ID4gU2VudDogV2VkbmVzZGF5 LCBKYW51YXJ5IDIzLCAyMDE5IDQ6MTYgQU0NCj4gPiBUbzogRWFkcywgR2FnZSA8Z2FnZS5lYWRz QGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiA+IENjOiBvbGl2aWVyLm1hdHpANndpbmQuY29t OyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgbmQNCj4gPiA8bmRAYXJtLmNvbT47IFJpY2hh cmRzb24sIEJydWNlIDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47DQo+ID4gYXJ5YmNoZW5r b0Bzb2xhcmZsYXJlLmNvbTsgQW5hbnlldiwgS29uc3RhbnRpbg0KPiA+IDxrb25zdGFudGluLmFu YW55ZXZAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2MyAy LzVdIHJpbmc6IGFkZCBhIG5vbi1ibG9ja2luZw0KPiA+IGltcGxlbWVudGF0aW9uDQo+ID4gDQo+ ID4gT24gVHVlLCAyMDE5LTAxLTIyIGF0IDIxOjMxICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0K PiA+ID4gDQo+ID4gPiBIaSBPbGEsDQo+ID4gPiANCj4gPiA+IDxzbmlwPg0KPiA+ID4gDQo+ID4g PiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBAQCAtMzMx LDYgKzQzMywzMTkgQEAgdm9pZCBydGVfcmluZ19kdW1wKEZJTEUgKmYsIGNvbnN0IHN0cnVjdA0K PiA+ID4gPiA+IHJ0ZV9yaW5nICpyKTsNCj4gPiA+ID4gPiDCoCNlbmRpZg0KPiA+ID4gPiA+IMKg I2luY2x1ZGUgInJ0ZV9yaW5nX2dlbmVyaWNfNjQuaCINCj4gPiA+ID4gPiANCj4gPiA+ID4gPiAr LyogQGludGVybmFsIDEyOC1iaXQgc3RydWN0dXJlIHVzZWQgYnkgdGhlIG5vbi1ibG9ja2luZyBy aW5nICovDQo+ID4gPiA+ID4gK3N0cnVjdCBuYl9yaW5nX2VudHJ5IHsNCj4gPiA+ID4gPiArCXZv aWQgKnB0cjsgLyoqPCBEYXRhIHBvaW50ZXIgKi8NCj4gPiA+ID4gPiArCXVpbnQ2NF90IGNudDsg LyoqPCBNb2RpZmljYXRpb24gY291bnRlciAqLw0KPiA+ID4gPiBXaHkgbm90IG1ha2UgJ2NudCcg dWludHB0cl90PyBUaGlzIHdheSAzMi1iaXQgYXJjaGl0ZWN0dXJlcyB3aWxsDQo+ID4gPiA+IGFs c28gYmUgc3VwcG9ydGVkLiBJIHRoaW5rIHRoZXJlIGFyZSBzb21lIGNsYWltcyB0aGF0IERQREsg c3RpbGwNCj4gPiA+ID4gc3VwcG9ydHMgZS5nLg0KPiA+ID4gPiBBUk12N2ENCj4gPiA+ID4gYW5k IHBvc3NpYmx5IGFsc28gMzItYml0IHg4Nj8NCj4gPiA+IEkgY2hvc2UgYSA2NC1iaXQgbW9kaWZp Y2F0aW9uIGNvdW50ZXIgYmVjYXVzZSAocHJhY3RpY2FsbHkgc3BlYWtpbmcpDQo+ID4gPiB0aGUg QUJBIHByb2JsZW0gd2lsbCBub3Qgb2NjdXIgd2l0aCBzdWNoIGEgbGFyZ2UgY291bnRlciAtLSBk ZWZpbml0ZWx5DQo+ID4gPiBub3Qgd2l0aGluIG15IGxpZmV0aW1lLiBTZWUgdGhlICJEaXNjdXNz aW9uIiBzZWN0aW9uIG9mIHRoZSBjb21taXQNCj4gPiA+IG1lc3NhZ2UgZm9yIG1vcmUgaW5mb3Jt YXRpb24uDQo+ID4gPiANCj4gPiA+IFdpdGggYSAzMi1iaXQgY291bnRlciwgdGhlcmUgaXMgYSB2 ZXJ5ICh2ZXJ5KSBsb3cgbGlrZWxpaG9vZCBvZiBpdCwNCj4gPiA+IGJ1dCBpdCBpcyBwb3NzaWJs ZS4gUGVyc29uYWxseSwgSSBkb24ndCBmZWVsIGNvbWZvcnRhYmxlIHByb3ZpZGluZw0KPiA+ID4g c3VjaCBjb2RlLCBiZWNhdXNlIGEpIEkgZG91YnQgYWxsIHVzZXJzIHdvdWxkIHVuZGVyc3RhbmQg dGhlDQo+ID4gPiBpbXBsZW1lbnRhdGlvbiB3ZWxsIGVub3VnaCB0byBkbyB0aGUgcmlzay9yZXdh cmQgYW5hbHlzaXMsIGFuZCBiKSBzdWNoDQo+ID4gPiBhIGJ1ZyB3b3VsZCBiZSBuZWFyIGltcG9z c2libGUgdG8gcmVwcm9kdWNlIGFuZCByb290LWNhdXNlIGlmIGl0IGRpZA0KPiA+ID4gb2NjdXIu DQo+ID4gV2l0aCBhIDY0LWJpdCBjb3VudGVyIChhbmQgMzItYml0IHBvaW50ZXIpLCAzMi1iaXQg YXJjaGl0ZWN0dXJlcyAoZS5nLg0KPiA+IEFSTXY3YSBhbmQNCj4gPiBwcm9iYWJseSB4ODYgYXMg d2VsbCkgd29uJ3QgYmUgYWJsZSB0byBzdXBwb3J0IHRoaXMgYXMgdGhleSBhdCBiZXN0IHN1cHBv cnQNCj4gPiA2NC1iaXQNCj4gPiBDQVMgKEFSTXY3YSBoYXMgTERSRVhEL1NUUkVYRCkuIFNvIHlv dSBhcmUgZXNzZW50aWFsbHkgcHV0dGluZyBhIDY0LWJpdCAoYW5kDQo+ID4gMTI4LWJpdCBDQVMp IHJlcXVpcmVtZW50IG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4NCj4gPiANCj4gWWVzLCBJIGFtLiBJ IHRyaWVkIHRvIG1ha2UgdGhhdCBjbGVhciBpbiB0aGUgY292ZXIgbGV0dGVyLg0KPiANCj4gPiAN Cj4gPiA+IA0KPiA+ID4gDQo+ID4gPiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gDQo+ID4gPiA+ID4g DQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gK307DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKiBU aGUgbm9uLWJsb2NraW5nIHJpbmcgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBy dGUNCj4gPiA+ID4gPiArcmluZyAoZGVyaXZlZA0KPiA+ID4gPiA+ICsgKiBmcm9tIEZyZWVCU0Qn cyBidWZyaW5nLmgpIGFuZCBpbnNwaXJlZCBieSBNaWNoYWVsIGFuZCBTY290dCdzDQo+ID4gPiA+ ID4gK25vbi1ibG9ja2luZw0KPiA+ID4gPiA+ICsgKiBjb25jdXJyZW50IHF1ZXVlLg0KPiA+ID4g PiA+ICsgKi8NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ICsgKiBAaW50 ZXJuYWwNCj4gPiA+ID4gPiArICrCoMKgwqBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUg bm9uLWJsb2NraW5nIHJpbmcNCj4gPiA+ID4gPiArKHNpbmdsZS1wcm9kdWNlciBvbmx5KQ0KPiA+ ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gcg0KPiA+ID4gPiA+ICsgKsKgwqDCoEEg cG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBvYmpf dGFibGUNCj4gPiA+ID4gPiArICrCoMKgwqBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiB2b2lkICog cG9pbnRlcnMgKG9iamVjdHMpLg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gbg0KPiA+ID4gPiA+ICsg KsKgwqDCoFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJvbSB0aGUg b2JqX3RhYmxlLg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4gPiArICrC oMKgwqBSVEVfUklOR19RVUVVRV9GSVhFRDrCoMKgwqDCoEVucXVldWUgYSBmaXhlZCBudW1iZXIg b2YgaXRlbXMgdG8NCj4gPiA+ID4gPiArdGhlIHJpbmcNCj4gPiA+ID4gPiArICrCoMKgwqBSVEVf UklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+ ID4gPiA+ID4gK3RvIHRoZSByaW5nDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBmcmVlX3NwYWNlDQo+ ID4gPiA+ID4gKyAqwqDCoMKgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVyIHRoZSBl bnF1ZXVlIG9wZXJhdGlvbiBoYXMNCj4gPiA+ID4gPiArZmluaXNoZWQNCj4gPiA+ID4gPiArICog QHJldHVybg0KPiA+ID4gPiA+ICsgKsKgwqDCoEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBlbnF1 ZXVlZC4NCj4gPiA+ID4gPiArICrCoMKgwqBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9G SVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4g PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiA+ID4gK19f cnRlX3JpbmdfZG9fbmJfZW5xdWV1ZV9zcChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKiBjb25z dA0KPiA+ID4gPiA+ICpvYmpfdGFibGUsDQo+ID4gPiA+ID4gKwkJCcKgwqDCoMKgdW5zaWduZWQg aW50IG4sDQo+ID4gPiA+ID4gKwkJCcKgwqDCoMKgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlv ciBiZWhhdmlvciwNCj4gPiA+ID4gPiArCQkJwqDCoMKgwqB1bnNpZ25lZCBpbnQgKmZyZWVfc3Bh Y2UpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArCXVpbnQzMl90IGZyZWVfZW50cmllczsNCj4g PiA+ID4gPiArCXNpemVfdCBoZWFkLCBuZXh0Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCW4g PSBfX3J0ZV9yaW5nX21vdmVfcHJvZF9oZWFkXzY0KHIsIDEsIG4sIGJlaGF2aW9yLA0KPiA+ID4g PiA+ICsJCQkJCcKgJmhlYWQsICZuZXh0LA0KPiA+ID4gPiA+ICZmcmVlX2VudHJpZXMpOw0KPiA+ ID4gPiA+ICsJaWYgKG4gPT0gMCkNCj4gPiA+ID4gPiArCQlnb3RvIGVuZDsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKwlFTlFVRVVFX1BUUlNfTkIociwgJnJbMV0sIGhlYWQsIG9ial90YWJsZSwg bik7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJci0+cHJvZF82NC50YWlsICs9IG47DQo+ID4g PiA+IERvbid0IHdlIG5lZWQgcmVsZWFzZSBvcmRlciB3aGVuIChvciBzbXBfd21iIGJldHdlZW4p IHdyaXRpbmcgb2YgdGhlDQo+ID4gPiA+IHJpbmcgcG9pbnRlcnMgYW5kIHRoZSB1cGRhdGUgb2Yg dGFpbD8gQnkgdXBkYXRpbmcgdGhlIHRhaWwgcG9pbnRlciwNCj4gPiA+ID4gd2UgYXJlIHN5bmNo cm9uaXNpbmcgd2l0aCBhIGNvbnN1bWVyLg0KPiA+ID4gPiANCj4gPiA+ID4gSSBwcmVmZXIgdXNp bmcgX19hdG9taWMgb3BlcmF0aW9ucyBldmVuIGZvciBsb2FkIGFuZCBzdG9yZS4gWW91IGNhbg0K PiA+ID4gPiBzZWUgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgdGhhdCBzeW5jaHJvbmlzZSB3aXRo IGVhY2ggb3RoZXIsIGUuZy4NCj4gPiA+ID4gc3RvcmUtcmVsZWFzZSB0byBzb21lIGxvY2F0aW9u IHN5bmNocm9uaXNlcyB3aXRoIGxvYWQtYWNxdWlyZSBmcm9tDQo+ID4gPiA+IHRoZSBzYW1lIGxv Y2F0aW9uLiBJZiB5b3UgZG9uJ3Qga25vdyBob3cgZGlmZmVyZW50IHRocmVhZHMNCj4gPiA+ID4g c3luY2hyb25pc2Ugd2l0aCBlYWNoIG90aGVyLCB5b3UgYXJlIHZlcnkgbGlrZWx5IHRvIG1ha2Ug bWlzdGFrZXMuDQo+ID4gPiA+IA0KPiA+ID4gWW91IGNhbiB0ZWxsIHRoaXMgY29kZSB3YXMgd3Jp dHRlbiB3aGVuIEkgdGhvdWdodCB4ODYtNjQgd2FzIHRoZSBvbmx5DQo+ID4gPiB2aWFibGUgdGFy Z2V0IDopLiBZZXMsIHlvdSBhcmUgY29ycmVjdC4NCj4gPiA+IA0KPiA+ID4gV2l0aCByZWdhcmRz IHRvIHVzaW5nIF9fYXRvbWljIGludHJpbnNpY3MsIEknbSBwbGFubmluZyBvbiB0YWtpbmcgYQ0K PiA+ID4gc2ltaWxhciBhcHByb2FjaCB0byB0aGUgZnVuY3Rpb25zIGR1cGxpY2F0ZWQgaW4gcnRl X3JpbmdfZ2VuZXJpYy5oIGFuZA0KPiA+ID4gcnRlX3JpbmdfYzExX21lbS5oOiBvbmUgdmVyc2lv biB0aGF0IHVzZXMgcnRlX2F0b21pYyBmdW5jdGlvbnMgKGFuZA0KPiA+ID4gdGh1cyBzdHJpY3Rl ciBtZW1vcnkgb3JkZXJpbmcpIGFuZCBvbmUgdGhhdCB1c2VzIF9fYXRvbWljIGludHJpbnNpY3MN Cj4gPiA+IChhbmQgdGh1cyBjYW4gYmVuZWZpdCBmcm9tIG1vcmUgcmVsYXhlZCBtZW1vcnkgb3Jk ZXJpbmcpLg0KRnJvbSBhIGNvZGUgcG9pbnQgb2YgdmlldywgSSBzdHJvbmdseSBwcmVmZXIgdGhl IGF0b21pYyBvcGVyYXRpb25zIHRvIGJlIHZpc2libGUNCmluIHRoZSB0b3AgbGV2ZWwgY29kZSwg bm90IGhpZGRlbiBpbiBzdWJyb3V0aW5lcy4gRm9yIGNvcnJlY3RuZXNzLCBpdCBpcyB2aXRhbA0K dGhhdCBtZW1vcnkgYWNjZXNzZXMgYXJlIHBlcmZvcm1lZCB3aXRoIHRoZSByZXF1aXJlZCBvcmRl cmluZyBhbmQgdGhhdCBhY3F1aXJlDQphbmQgcmVsZWFzZSBtYXRjaGVzIHVwLiBIaWRpbmcgZS5n LiBsb2FkLWFjcXVpcmUgYW5kIHN0b3JlLXJlbGVhc2UgaW4NCnN1YnJvdXRpbmVzIChpbiBhIGRp ZmZlcmVudCBmaWxlISkgbWFrZSB0aGlzIGRpZmZpY3VsdC4gVGhlcmUgaGF2ZSBhbHJlYWR5IGJl ZW4NCnN1Y2ggYnVncyBmb3VuZCBpbiBydGVfcmluZy4NCg0KPiA+IFdoYXQncyB0aGUgYWR2YW50 YWdlIG9mIGhhdmluZyB0d28gZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucz8gV2hhdCBpcyB0aGUN Cj4gPiBkaXNhZHZhbnRhZ2U/DQo+ID4gDQo+ID4gVGhlIGV4aXN0aW5nIHJpbmcgYnVmZmVyIGNv ZGUgb3JpZ2luYWxseSBoYWQgb25seSB0aGUgImxlZ2FjeSINCj4gPiBpbXBsZW1lbnRhdGlvbg0K PiA+IHdoaWNoIHdhcyBrZXB0IHdoZW4gdGhlIF9fYXRvbWljIGltcGxlbWVudGF0aW9uIHdhcyBh ZGRlZC4gVGhlIHJlYXNvbg0KPiA+IGNsYWltZWQgd2FzIHRoYXQgc29tZSBvbGRlciBjb21waWxl cnMgZm9yIHg4NiBkbyBub3Qgc3VwcG9ydCBHQ0MgX19hdG9taWMNCj4gPiBidWlsdGlucy4gQnV0 IEkgdGhvdWdodCB0aGVyZSB3YXMgY29uc2Vuc3VzIHRoYXQgbmV3IGZ1bmN0aW9uYWxpdHkgY291 bGQNCj4gPiBoYXZlDQo+ID4gb25seSBfX2F0b21pYyBpbXBsZW1lbnRhdGlvbnMuDQo+ID4gDQo+ IFdoZW4gQ09ORklHX1JURV9SSU5HX1VTRV9DMTFfTUVNX01PREVMIHdhcyBpbnRyb2R1Y2VkLCBp dCB3YXMgbGVmdCBkaXNhYmxlZA0KPiBmb3IgdGh1bmRlcnhbMV0gZm9yIHBlcmZvcm1hbmNlIHJl YXNvbnMuIEFzc3VtaW5nIHRoYXQgaGFzbid0IGNoYW5nZWQsIHRoZQ0KPiBhZHZhbnRhZ2UgdG8g aGF2aW5nIHR3byB2ZXJzaW9ucyBpcyB0byBiZXN0IHN1cHBvcnQgYWxsIG9mIERQREsncyBwbGF0 Zm9ybXMuDQo+IFRoZSBkaXNhZHZhbnRhZ2UgaXMgb2YgY291cnNlIGR1cGxpY2F0ZWQgY29kZSBh bmQgdGhlIGFkZGl0aW9uYWwgbWFpbnRlbmFuY2UNCj4gYnVyZGVuLg0KVGhlIG9ubHkgd2F5IEkg c2VlIHRoYXQgYSBDMTEgbWVtb3J5IG1vZGVsIGltcGxlbWVudGF0aW9uIGNhbiBiZSBzbG93ZXIg dGhhbg0KdXNpbmcgc21wX3dtYi9ybWIgaXMgaWYgeW91IG5lZWQgdG8gb3JkZXIgbG9hZHMgYmVm b3JlIGEgc3luY2hyb25pemluZyBzdG9yZSBhbmQNCnRoZXJlIGFyZSBhbHNvIG91dHN0YW5kaW5n IHN0b3JlcyB3aGljaCBkbyBub3QgcmVxdWlyZSBvcmRlcmluZy4gc21wX3JtYigpDQpoYW5kbGVz IHRoaXMgd2hpbGUgc3RvcmUtcmVsZWFzZSB3aWxsIGFsc28gKHVubmVjZXNzYXJpbHkpIG9yZGVy IHRob3NlDQpvdXRzdGFuZGluZyBzdG9yZXMuIFRoaXMgc2l0dWF0aW9uIG9jY3VycyBlLmcuIGlu IHJpbmcgYnVmZmVyIGRlcXVldWUgb3BlcmF0aW9ucw0Kd2hlcmUgcmluZyBzbG90cyBhcmUgcmVh ZCAoYW5kIHBvc3NpYmx5IHdyaXR0ZW4gdG8gdGhyZWFkLXByaXZhdGUgbWVtb3J5KSBiZWZvcmUN CnRoZSByaW5nIHNsb3RzIGFyZSByZWxlYXNlIChlLmcuIHVzaW5nIENBUy1yZWxlYXNlIG9yIHN0 b3JlLXJlbGVhc2UpLg0KDQpJIGltYWdpbmUgdGhhdCB0aGUgTFNVL2NhY2hlIHN1YnN5c3RlbSBv biBUaHVuZGVyWC9PQ1RFT04tVFggYWxzbyBoYXZlIHNvbWV0aGluZw0KdG8gZG8gd2l0aCB0aGlz IHByb2JsZW0uIElmIHRoZXJlIGFyZSBhIGxhcmdlIGFtb3VudHMgb2Ygc3RvcmVzIHBlbmRpbmcg aW4gdGhlDQpsb2FkL3N0b3JlIHVuaXQsIHN0b3JlLXJlbGVhc2UgbWlnaHQgaGF2ZSB0byB3YWl0 IGZvciBhIGxvbmcgdGltZSBiZWZvcmUgdGhlDQpzeW5jaHJvbml6aW5nIHN0b3JlIGNhbiBjb21w bGV0ZS4NCg0KPiANCj4gVGhhdCBzYWlkLCBpZiB0aGUgdGh1bmRlcnggbWFpbnRhaW5lcnMgYXJl IG9rIHdpdGggaXQsIEknbSBjZXJ0YWlubHkgb3BlbiB0bw0KPiBvbmx5IGRvaW5nIHRoZSBfX2F0 b21pYyB2ZXJzaW9uLiBOb3RlIHRoYXQgZXZlbiBpbiB0aGUgX19hdG9taWMgdmVyc2lvbiwgYmFz ZWQNCj4gb24gSG9ubmFwYSdzIGZpbmRpbmdzWzJdLCB1c2luZyBhIERQREstZGVmaW5lZCBydGVf YXRvbWljMTI4X2NtcHNldCgpICh3aXRoDQo+IGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHN1cHBv cnQgbWFjaGluZXMgd2l0aCB3ZWFrIGNvbnNpc3RlbmN5KSBhcHBlYXJzIHRvIGJlDQo+IGEgYmV0 dGVyIG9wdGlvbiB0aGFuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfMTYuDQpfX2F0b21pY19j b21wYXJlX2V4Y2hhbmdlXzE2KCkgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgbG9jay1mcmVlLiBJ dCBpcyBub3QNCmxvY2stZnJlZSBvbiBBUk0vQUFyY2g2NCBhbmQgdGhlIHN1cHBvcnQgaW4gR0ND IGlzIGZvcm1hbGx5IGJyb2tlbiAoY2FuJ3QgdXNlDQpjbXBleGNoZzE2YiB0byBpbXBsZW1lbnQg X19hdG9taWNfbG9hZF8xNikuDQoNClNvIHllcywgSSB0aGluayBEUERLIHdpbGwgaGF2ZSB0byBk ZWZpbmUgYW5kIGltcGxlbWVudCB0aGUgMTI4LWJpdCBhdG9taWMNCmNvbXBhcmUgYW5kIGV4Y2hh bmdlIG9wZXJhdGlvbiAod2hhdGV2ZXIgaXQgd2lsbCBiZSBjYWxsZWQpLiBGb3IgY29tcGF0aWJp bGl0eQ0Kd2l0aCBBUk12OC4wLCB3ZSBjYW4ndCByZXF1aXJlIHRoZSAib2xkIiB2YWx1ZSByZXR1 cm5lZCBieSBhIGZhaWxlZCBjb21wYXJlLQ0KZXhjaGFuZ2Ugb3BlcmF0aW9uIHRvIGJlIHJlYWQg YXRvbWljYWxseSAoTERYUCBkb2VzIG5vdCBndWFyYW50ZWVkIGF0b21pY2l0eSBieQ0KaXRzZWxm KS4gQnV0IHRoaXMgaXMgc2VsZG9tIGEgcHJvYmxlbSwgbWFueSBkZXNpZ25zIHJlYWQgdGhlIG1l bW9yeSBsb2NhdGlvbg0KdXNpbmcgdHdvIHNlcGFyYXRlIDY0LWJpdCBsb2FkcyAoc28gbm90IGF0 b21pYykgYW55d2F5LCBpdCBpcyBhIHN1Y2Nlc3NmdWwNCmF0b21pYyBjb21wYXJlIGV4Y2hhbmdl IG9wZXJhdGlvbiB3aGljaCBwcm92aWRlcyBhdG9taWNpdHkuDQoNCj4gDQo+IEkgY291bGRuJ3Qg ZmluZCB0aGUgZGlzY3Vzc2lvbiBhYm91dCBuZXcgZnVuY3Rpb25hbGl0eSB1c2luZyBfX2F0b21p YyBnb2luZw0KPiBmb3J3YXJkIC0tIGNhbiB5b3Ugc2VuZCBhIGxpbms/DQo+IA0KPiBbMV0gaHR0 cHM6Ly9tYWlscy5kcGRrLm9yZy9hcmNoaXZlcy9kZXYvMjAxNy1EZWNlbWJlci8wODI4NTMuaHRt bA0KPiBbMl3CoGh0dHA6Ly9tYWlscy5kcGRrLm9yZy9hcmNoaXZlcy9kZXYvMjAxOS1KYW51YXJ5 LzEyNDAwMi5odG1sDQo+IA0KPiA+IA0KPiA+IERvZXMgdGhlIG5vbi1ibG9ja2luZyByaW5nIGJ1 ZmZlciBpbXBsZW1lbnRhdGlvbiBoYXZlIHRvIHN1cHBvcnQgdGhlc2Ugb2xkZXINCj4gPiBjb21w aWxlcnM/IFdpbGwgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgdGhlc2Ugb2xkZXIgY29t cGlsZXIgYmUNCj4gPiB1cGRhdGVkIHRvDQo+ID4gdXRpbGlzZSB0aGUgbm9uLWJsb2NraW5nIHJp bmcgYnVmZmVyPw0KPiA+IA0KPiAoU2VlIGFib3ZlIC0tIGNvbXBpbGVyIHZlcnNpb25zIHdhc24n dCBhIGNvbnNpZGVyYXRpb24gaGVyZS4pDQo+IA0KPiA+IA0KPiA+ID4gDQo+ID4gPiANCj4gPiA+ ID4gDQo+ID4gPiA+IA0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArZW5kOg0KPiA+ID4gPiA+ICsJaWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gPiA+ID4g PiArCQkqZnJlZV9zcGFjZSA9IGZyZWVfZW50cmllcyAtIG47DQo+ID4gPiA+ID4gKwlyZXR1cm4g bjsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4g KyAqIEBpbnRlcm5hbA0KPiA+ID4gPiA+ICsgKsKgwqDCoEVucXVldWUgc2V2ZXJhbCBvYmplY3Rz IG9uIHRoZSBub24tYmxvY2tpbmcgcmluZw0KPiA+ID4gPiA+ICsobXVsdGktcHJvZHVjZXINCj4g PiA+ID4gPiArc2FmZSkNCj4gPiA+ID4gPiArICoNCj4gPiA+ID4gPiArICogQHBhcmFtIHINCj4g PiA+ID4gPiArICrCoMKgwqBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ID4g PiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gPiA+ID4gKyAqwqDCoMKgQSBwb2ludGVyIHRv IGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4gPiA+ID4gPiArICogQHBh cmFtIG4NCj4gPiA+ID4gPiArICrCoMKgwqBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGlu IHRoZSByaW5nIGZyb20gdGhlIG9ial90YWJsZS4NCj4gPiA+ID4gPiArICogQHBhcmFtIGJlaGF2 aW9yDQo+ID4gPiA+ID4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfRklYRUQ6wqDCoMKgwqBFbnF1 ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIHRvDQo+ID4gPiA+ID4gK3RoZSByaW5nDQo+ID4g PiA+ID4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IEVucXVldWUgYXMgbWFueSBp dGVtcyBhcyBwb3NzaWJsZQ0KPiA+ID4gPiA+ICt0byB0aGUgcmluZw0KPiA+ID4gPiA+ICsgKiBA cGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gPiA+ICsgKsKgwqDCoHJldHVybnMgdGhlIGFtb3VudCBv ZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRpb24gaGFzDQo+ID4gPiA+ID4gK2Zpbmlz aGVkDQo+ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gPiArICrCoMKgwqBBY3R1YWwgbnVt YmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiA+ID4gKyAqwqDCoMKgSWYgYmVoYXZpb3Ig PT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiA+ ID4gPiArICovDQo+ID4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVk IGludA0KPiA+ID4gPiA+ICtfX3J0ZV9yaW5nX2RvX25iX2VucXVldWVfbXAoc3RydWN0IHJ0ZV9y aW5nICpyLCB2b2lkICogY29uc3QNCj4gPiAqb2JqX3RhYmxlLA0KPiA+ID4gDQo+ID4gPiA+IA0K PiA+ID4gPiA+IA0KPiA+ID4gPiA+ICsJCQnCoMKgwqDCoHVuc2lnbmVkIGludCBuLA0KPiA+ID4g PiA+ICsJCQnCoMKgwqDCoGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ ID4gPiA+ID4gKwkJCcKgwqDCoMKgdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiA+ID4gPiA+ ICt7DQo+ID4gPiA+ID4gKyNpZiAhZGVmaW5lZChSVEVfQVJDSF9YODZfNjQpIHx8ICFkZWZpbmVk KEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkpDQo+ID4gPiA+ID4gKwlSVEVfU0VUX1VTRUQocik7DQo+ ID4gPiA+ID4gKwlSVEVfU0VUX1VTRUQob2JqX3RhYmxlKTsNCj4gPiA+ID4gPiArCVJURV9TRVRf VVNFRChuKTsNCj4gPiA+ID4gPiArCVJURV9TRVRfVVNFRChiZWhhdmlvcik7DQo+ID4gPiA+ID4g KwlSVEVfU0VUX1VTRUQoZnJlZV9zcGFjZSk7DQo+ID4gPiA+ID4gKyNpZm5kZWYgQUxMT1dfRVhQ RVJJTUVOVEFMX0FQSQ0KPiA+ID4gPiA+ICsJcHJpbnRmKCJbJXMoKV0gUklOR19GX05CIHJlcXVp cmVzIGFuIGV4cGVyaW1lbnRhbCBBUEkuIg0KPiA+ID4gPiA+ICsJwqDCoMKgwqDCoMKgwqAiIFJl Y29tcGlsZSB3aXRoIEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkgdG8gdXNlIGl0LlxuIg0KPiA+ID4g PiA+ICsJwqDCoMKgwqDCoMKgwqAsIF9fZnVuY19fKTsNCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4g PiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4gKyNpZiBkZWZp bmVkKFJURV9BUkNIX1g4Nl82NCkgJiYgZGVmaW5lZChBTExPV19FWFBFUklNRU5UQUxfQVBJKQ0K PiA+ID4gPiA+ICsJc2l6ZV90IGhlYWQsIG5leHQsIHRhaWw7DQo+ID4gPiA+ID4gKwl1aW50MzJf dCBmcmVlX2VudHJpZXM7DQo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKwluID0gX19ydGVfcmluZ19tb3ZlX3Byb2RfaGVhZF82NChyLCAwLCBuLCBi ZWhhdmlvciwNCj4gPiA+ID4gPiArCQkJCQnCoCZoZWFkLCAmbmV4dCwNCj4gPiA+ID4gPiAmZnJl ZV9lbnRyaWVzKTsNCj4gPiA+ID4gPiArCWlmIChuID09IDApDQo+ID4gPiA+ID4gKwkJZ290byBl bmQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG47IC8qIGkgaW5j cmVtZW50ZWQgaWYgZW5xdWV1ZSBzdWNjZWVkcyAqLykgew0KPiA+ID4gPiA+ICsJCXN0cnVjdCBu Yl9yaW5nX2VudHJ5IG9sZF92YWx1ZSwgbmV3X3ZhbHVlOw0KPiA+ID4gPiA+ICsJCXN0cnVjdCBu Yl9yaW5nX2VudHJ5ICpyaW5nX3B0cjsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkJLyogRW5x dWV1ZSB0byB0aGUgdGFpbCBlbnRyeS4gSWYgYW5vdGhlciB0aHJlYWQgd2lucw0KPiA+ID4gPiA+ IHRoZQ0KPiA+ID4gPiA+IHJhY2UsDQo+ID4gPiA+ID4gKwkJwqAqIHJldHJ5IHdpdGggdGhlIG5l dyB0YWlsLg0KPiA+ID4gPiA+ICsJCcKgKi8NCj4gPiA+ID4gPiArCQl0YWlsID0gci0+cHJvZF82 NC50YWlsOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCQlyaW5nX3B0ciA9ICYoKHN0cnVjdCBu Yl9yaW5nX2VudHJ5ICopJnJbMV0pW3RhaWwgJiByLQ0KPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4g PiBtYXNrXTsNCj4gPiA+ID4gVGhpcyBpcyBhbiB1Z2x5IGV4cHJlc3Npb24gYW5kIGNhc3QuIEFs c28gSSB0aGluayBpdCBpcyB1bm5lY2Vzc2FyeS4NCj4gPiA+ID4gV2hhdCdzIHByZXZlbnRpbmcg dGhpcyBmcm9tIGJlaW5nIHdyaXR0ZW4gd2l0aG91dCBhIGNhc3Q/IFBlcmhhcHMNCj4gPiA+ID4g dGhlIHJpbmcgYXJyYXkgbmVlZHMgdG8gYmUgYSB1bmlvbiBvZiAidm9pZCAqIiBhbmQgc3RydWN0 DQo+ID4gPiA+IG5iX3JpbmdfZW50cnk/DQo+ID4gPiBUaGUgY2FzdCBpcyBuZWNlc3NhcnkgZm9y IHRoZSBjb3JyZWN0IHBvaW50ZXIgYXJpdGhtZXRpYyAobGV0DQo+ID4gPiAidWludHB0cl90IGJh c2UgPT0gJnJbMV0iKToNCj4gPiBZZXMgSSBrbm93IHRoZSBDIGxhbmd1YWdlLg0KPiA+IA0KPiA+ ID4gDQo+ID4gPiAtIFdpdGggY2FzdDogcmluZ19wdHIgPSBiYXNlICsgc2l6ZW9mKHN0cnVjdCBu Yl9yaW5nX2VudHJ5KSAqICh0YWlsICYNCj4gPiA+IHItDQo+ID4gPiA+IA0KPiA+ID4gPiBtYXNr KTsNCj4gPiA+IC0gVy9vIGNhc3Q6IHJpbmdfcHRyID0gYmFzZSArIHNpemVvZihzdHJ1Y3QgcnRl X3JpbmcpICogKHRhaWwgJg0KPiA+ID4gci0+bWFzayk7DQo+ID4gPiANCj4gPiA+IEZXSVcsIHRo aXMgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgaXMgZG9uZSB3aXRoIHRoZSBzZWNvbmQgYXJn dW1lbnQNCj4gPiA+ICgmclsxXSkgdG8gRU5RVUVVRV9QVFJTIGFuZCBERVFVRVVFX1BUUlMsIGJ1 dCB0aGVyZSBpdCdzIHNwbGl0IGFjcm9zcw0KPiA+ID4gbXVsdGlwbGUgbGluZXMgb2YgY29kZS4g VGhlIGVxdWl2YWxlbnQgaGVyZSB3b3VsZCBiZToNCj4gPiA+IA0KPiA+ID4gc3RydWN0IG5iX3Jp bmdfZW50cnkgKnJpbmdfYmFzZSA9IChzdHJ1Y3QgbmJfcmluZ19lbnRyeSopJnJbMV07DQo+ID4g PiByaW5nX3B0ciA9IHJpbmdfYmFzZVt0YWlsICYgci0+bWFza107DQo+ID4gPiANCj4gPiA+IFdo aWNoIGlzIG1vcmUgbGVnaWJsZSwgSSB0aGluay4NCj4gPiBUaGUgUlRFIHJpbmcgYnVmZmVyIGNv ZGUgaXMgbm90IHZlcnkgbGVnaWJsZSB0byBzdGFydCB3aXRoLg0KPiA+IA0KPiA+ID4gDQo+ID4g PiANCj4gPiA+IFRoZXJlIGlzIG5vIHJpbmcgYXJyYXkgc3RydWN0dXJlIGluIHdoaWNoIHRvIGFk ZCBhIHVuaW9uOyB0aGUgcmluZw0KPiA+ID4gYXJyYXkgaXMgYSBjb250aWd1b3VzIGNodW5rIG9m IG1lbW9yeSB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgYWZ0ZXINCj4gPiA+IHRoZSBlbmQgb2Yg YSBzdHJ1Y3QgcnRlX3JpbmcuIFdlIGludGVycHJldCB0aGUgbWVtb3J5IHRoZXJlIGFjY29yZGlu Zw0KPiA+ID4gdG8gdGhlIHJpbmcgZW50cnkgZGF0YSB0eXBlICh2b2lkICogZm9yIHJlZ3VsYXIg cmluZ3MgYW5kIHN0cnVjdA0KPiA+ID4gbmJfcmluZ19lbnRyeSBmb3INCj4gPiBub24tYmxvY2tp bmcgcmluZ3MpLg0KPiA+IE15IHdvcnJ5IGlzIHRoYXQgd2UgYXJlIGFidXNpbmcgdGhlIEMgbGFu Z3VhZ2UgYW5kIGNyZWF0aW5nIGEgbW9uc3RlciBvZg0KPiA+IGZyYWdpbGUgQyBjb2RlIHRoYXQg d2lsbCBiZSBtb3JlIGFuZCBtb3JlIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kIGFuZCB0bw0KPiA+ IG1haW50YWluLiBBdCBzb21lIHBvaW50IHlvdSBoYXZlIHRvIHRoaW5rIHRoZSBxdWVzdGlvbiAi QXJlIHdlIGRvaW5nIHRoZQ0KPiA+IHJpZ2h0DQo+ID4gdGhpbmc/Ii4NCj4gPiANCj4gSSdtIG5v dCBhd2FyZSBvZiBhbnkgZnJhZ2lsaXR5L21haW50YWluYWJpbGl0eSBpc3N1ZXMgaW4gdGhlIHJp bmcgY29kZSAodGhvdWdoDQo+IHBlcmhhcHMgdGhlIG1haW50YWluZXJzIGhhdmUgYSBkaWZmZXJl bnQgdmlldyEpLCBhbmQgcGVyc29uYWxseSBJIGZpbmQgdGhlDQo+IGNvZGUgZmFpcmx5IGxlZ2li bGUuIElmIHlvdSBoYXZlIGEgc3BlY2lmaWMgc3VnZ2VzdGlvbiwgSSdsbCBsb29rIGludG8NCj4g aW5jb3Jwb3JhdGluZyBpdC4NCj4gDQo+IFRoYW5rcywNCj4gR2FnZQ0KPiANCj4gPC9zbmlwPg0K LS0gDQpPbGEgTGlsamVkYWhsLCBOZXR3b3JraW5nIFN5c3RlbSBBcmNoaXRlY3QsIEFybQ0KUGhv bmUgKzQ2NzA2ODY2MzczLCBTa3lwZSBvbGEubGlsamVkYWhsDQoNCg==