From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wang, Xiao W" Subject: Re: [PATCH v7 2/5] vfio: add multi container support Date: Mon, 16 Apr 2018 12:44:13 +0000 Message-ID: References: <20180412071956.66178-2-xiao.w.wang@intel.com> <20180415153349.62105-1-xiao.w.wang@intel.com> <20180415153349.62105-3-xiao.w.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "dev@dpdk.org" , "maxime.coquelin@redhat.com" , "Wang, Zhihong" , "Bie, Tiwei" , "Tan, Jianfeng" , "Liang, Cunming" , "Daly, Dan" , "thomas@monjalon.net" , "Chen, Junjie J" , "Yigit, Ferruh" To: "Burakov, Anatoly" Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id CA4FD8D94 for ; Mon, 16 Apr 2018 14:44:17 +0200 (CEST) In-Reply-To: Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgQW5hdG9seSwNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBCdXJh a292LCBBbmF0b2x5DQo+IFNlbnQ6IE1vbmRheSwgQXByaWwgMTYsIDIwMTggNjowMyBQTQ0KPiBU bzogV2FuZywgWGlhbyBXIDx4aWFvLncud2FuZ0BpbnRlbC5jb20+OyBZaWdpdCwgRmVycnVoDQo+ IDxmZXJydWgueWlnaXRAaW50ZWwuY29tPg0KPiBDYzogZGV2QGRwZGsub3JnOyBtYXhpbWUuY29x dWVsaW5AcmVkaGF0LmNvbTsgV2FuZywgWmhpaG9uZw0KPiA8emhpaG9uZy53YW5nQGludGVsLmNv bT47IEJpZSwgVGl3ZWkgPHRpd2VpLmJpZUBpbnRlbC5jb20+OyBUYW4sIEppYW5mZW5nDQo+IDxq aWFuZmVuZy50YW5AaW50ZWwuY29tPjsgTGlhbmcsIEN1bm1pbmcgPGN1bm1pbmcubGlhbmdAaW50 ZWwuY29tPjsgRGFseSwNCj4gRGFuIDxkYW4uZGFseUBpbnRlbC5jb20+OyB0aG9tYXNAbW9uamFs b24ubmV0OyBDaGVuLCBKdW5qaWUgSg0KPiA8anVuamllLmouY2hlbkBpbnRlbC5jb20+DQo+IFN1 YmplY3Q6IFJlOiBbUEFUQ0ggdjcgMi81XSB2ZmlvOiBhZGQgbXVsdGkgY29udGFpbmVyIHN1cHBv cnQNCj4gDQo+IE9uIDE1LUFwci0xOCA0OjMzIFBNLCBYaWFvIFdhbmcgd3JvdGU6DQo+ID4gVGhp cyBwYXRjaCBhZGRzIEFQSXMgdG8gc3VwcG9ydCBjb250YWluZXIgY3JlYXRlL2Rlc3Ryb3kgYW5k IGRldmljZQ0KPiA+IGJpbmQvdW5iaW5kIHdpdGggYSBjb250YWluZXIuIEl0IGFsc28gcHJvdmlk ZXMgQVBJIGZvciBJT01NVSBwcm9ncmFtaW5nDQo+ID4gb24gYSBzcGVjaWZpZWQgY29udGFpbmVy Lg0KPiA+DQo+ID4gQSBkcml2ZXIgY291bGQgdXNlICJydGVfdmZpb19jcmVhdGVfY29udGFpbmVy IiBoZWxwZXIgdG8gY3JlYXRlIGENCj4gDQo+IF5eIHdyb25nIEFQSSBuYW1lIGluIGNvbW1pdCBt ZXNzYWdlIDopDQoNClRoYW5rcyBmb3IgdGhlIGNhdGNoLiBXaWxsIGZpeCBpdC4NCg0KPiANCj4g PiBuZXcgY29udGFpbmVyIGZyb20gZWFsLCB1c2UgInJ0ZV92ZmlvX2JpbmRfZ3JvdXAiIHRvIGJp bmQgYSBkZXZpY2UNCj4gPiB0byB0aGUgbmV3bHkgY3JlYXRlZCBjb250YWluZXIuIER1cmluZyBy dGVfdmZpb19zZXR1cF9kZXZpY2UgdGhlDQo+ID4gY29udGFpbmVyIGJvdW5kIHdpdGggdGhlIGRl dmljZSB3aWxsIGJlIHVzZWQgZm9yIElPTU1VIHNldHVwLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1i eTogSnVuamllIENoZW4gPGp1bmppZS5qLmNoZW5AaW50ZWwuY29tPg0KPiA+IFNpZ25lZC1vZmYt Ynk6IFhpYW8gV2FuZyA8eGlhby53LndhbmdAaW50ZWwuY29tPg0KPiA+IFJldmlld2VkLWJ5OiBN YXhpbWUgQ29xdWVsaW4gPG1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tPg0KPiA+IFJldmlld2Vk LWJ5OiBGZXJydWggWWlnaXQgPGZlcnJ1aC55aWdpdEBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4g ICBsaWIvbGlicnRlX2VhbC9ic2RhcHAvZWFsL2VhbC5jICAgICAgICAgIHwgIDUyICsrKysrDQo+ ID4gICBsaWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfdmZpby5oIHwgMTE5ICsrKysr KysrKysrKw0KPiA+ICAgbGliL2xpYnJ0ZV9lYWwvbGludXhhcHAvZWFsL2VhbF92ZmlvLmMgICB8 IDMxNg0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gICBsaWIvbGlicnRl X2VhbC9ydGVfZWFsX3ZlcnNpb24ubWFwICAgICAgIHwgICA2ICsNCj4gPiAgIDQgZmlsZXMgY2hh bmdlZCwgNDkzIGluc2VydGlvbnMoKykNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRl X2VhbC9ic2RhcHAvZWFsL2VhbC5jIGIvbGliL2xpYnJ0ZV9lYWwvYnNkYXBwL2VhbC9lYWwuYw0K PiA+IGluZGV4IDcyN2FkYzVkMi4uYzUxMDZkMGQ2IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJy dGVfZWFsL2JzZGFwcC9lYWwvZWFsLmMNCj4gPiArKysgYi9saWIvbGlicnRlX2VhbC9ic2RhcHAv ZWFsL2VhbC5jDQo+ID4gQEAgLTc2OSw2ICs3NjksMTQgQEAgaW50IHJ0ZV92ZmlvX25vaW9tbXVf aXNfZW5hYmxlZCh2b2lkKTsNCj4gPiAgIGludCBydGVfdmZpb19jbGVhcl9ncm91cChpbnQgdmZp b19ncm91cF9mZCk7DQo+ID4gICBpbnQgcnRlX3ZmaW9fZG1hX21hcCh1aW50NjRfdCB2YWRkciwg dWludDY0X3QgaW92YSwgdWludDY0X3QgbGVuKTsNCj4gPiAgIGludCBydGVfdmZpb19kbWFfdW5t YXAodWludDY0X3QgdmFkZHIsIHVpbnQ2NF90IGlvdmEsIHVpbnQ2NF90IGxlbik7DQo+ID4gK2lu dCBydGVfdmZpb19jb250YWluZXJfY3JlYXRlKHZvaWQpOw0KPiA+ICtpbnQgcnRlX3ZmaW9fY29u dGFpbmVyX2Rlc3Ryb3koaW50IGNvbnRhaW5lcl9mZCk7DQo+ID4gK2ludCBydGVfdmZpb19iaW5k X2dyb3VwKGludCBjb250YWluZXJfZmQsIGludCBpb21tdV9ncm91cF9ubyk7DQo+ID4gK2ludCBy dGVfdmZpb191bmJpbmRfZ3JvdXAoaW50IGNvbnRhaW5lcl9mZCwgaW50IGlvbW11X2dyb3VwX25v KTsNCj4gDQo+IE1heWJlIGhhdmUgdGhlc2UgdW5kZXIgImNvbnRhaW5lciIgdG9vPyBlLmcuDQo+ IHJ0ZV92ZmlvX2NvbnRhaW5lcl9ncm91cF9iaW5kL3VuYmluZD8gU2VlbXMgbGlrZSBpdCB3b3Vs ZCBiZSBtb3JlDQo+IGNvbnNpc3RlbnQgdGhhdCB3YXkgLSBhbnl0aGluZyB0byBkbyB3aXRoIGN1 c3RvbSBjb250YWluZXJzIHdvdWxkIGJlDQo+IHVuZGVyIHJ0ZV92ZmlvX2NvbnRhaW5lcl8qIG5h bWVzcGFjZS4NCg0KQWdyZWUuDQoNCj4gDQo+ID4gK2ludCBydGVfdmZpb19jb250YWluZXJfZG1h X21hcChpbnQgY29udGFpbmVyX2ZkLCB1aW50NjRfdCB2YWRkciwNCj4gPiArCQl1aW50NjRfdCBp b3ZhLCB1aW50NjRfdCBsZW4pOw0KPiA+ICtpbnQgcnRlX3ZmaW9fY29udGFpbmVyX2RtYV91bm1h cChpbnQgY29udGFpbmVyX2ZkLCB1aW50NjRfdCB2YWRkciwNCj4gPiArCQl1aW50NjRfdCBpb3Zh LCB1aW50NjRfdCBsZW4pOw0KPiA+DQo+ID4gICBpbnQgcnRlX3ZmaW9fc2V0dXBfZGV2aWNlKF9f cnRlX3VudXNlZCBjb25zdCBjaGFyICpzeXNmc19iYXNlLA0KPiA+ICAgCQkgICAgICBfX3J0ZV91 bnVzZWQgY29uc3QgY2hhciAqZGV2X2FkZHIsDQo+ID4gQEAgLTgxOCwzICs4MjYsNDcgQEAgcnRl X3ZmaW9fZG1hX3VubWFwKHVpbnQ2NF90IF9fcnRlX3VudXNlZCB2YWRkciwNCj4gdWludDY0X3Qg X19ydGVfdW51c2VkIGlvdmEsDQo+ID4gICB7DQo+ID4gICAJcmV0dXJuIC0xOw0KPiA+ICAgfQ0K PiA+ICsNCj4gDQo+IDwuLi4+DQo+IA0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2VhbC9j b21tb24vaW5jbHVkZS9ydGVfdmZpby5oDQo+IGIvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1 ZGUvcnRlX3ZmaW8uaA0KPiA+IGluZGV4IGQyNmFiMDFjYi4uMGMxNTA5YjI5IDEwMDY0NA0KPiA+ IC0tLSBhL2xpYi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRlL3J0ZV92ZmlvLmgNCj4gPiArKysg Yi9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfdmZpby5oDQo+ID4gQEAgLTE2OCw2 ICsxNjgsMTI1IEBAIHJ0ZV92ZmlvX2RtYV9tYXAodWludDY0X3QgdmFkZHIsIHVpbnQ2NF90IGlv dmEsDQo+IHVpbnQ2NF90IGxlbik7DQo+ID4gICBpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4g ICBydGVfdmZpb19kbWFfdW5tYXAodWludDY0X3QgdmFkZHIsIHVpbnQ2NF90IGlvdmEsIHVpbnQ2 NF90IGxlbik7DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVY UEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBw cmlvcg0KPiBub3RpY2UNCj4gPiArICoNCj4gPiArICogQ3JlYXRlIGEgbmV3IGNvbnRhaW5lciBm b3IgZGV2aWNlIGJpbmRpbmcuDQo+IA0KPiBJIHdvdWxkIGFkZCBhIG5vdGUgdGhhdCBhbnkgbmV3 bHkgYWxsb2NhdGVkIERQREsgbWVtb3J5IHdpbGwgbm90IGJlDQo+IG1hcHBlZCBpbnRvIHRoZXNl IGNvbnRhaW5lcnMgYnkgZGVmYXVsdC4NCg0KV2lsbCBhZGQgaXQuDQoNCj4gDQo+ID4gKyAqDQo+ ID4gKyAqIEByZXR1cm4NCj4gPiArICogICB0aGUgY29udGFpbmVyIGZkIGlmIHN1Y2Nlc3NmdWwN Cj4gPiArICogICA8MCBpZiBmYWlsZWQNCj4gPiArICovDQo+ID4gK2ludCBfX3J0ZV9leHBlcmlt ZW50YWwNCj4gPiArcnRlX3ZmaW9fY29udGFpbmVyX2NyZWF0ZSh2b2lkKTsNCj4gPiArDQo+IA0K PiA8Li4uPg0KPiANCj4gPiArICogICAgMCBpZiBzdWNjZXNzZnVsDQo+ID4gKyAqICAgPDAgaWYg ZmFpbGVkDQo+ID4gKyAqLw0KPiA+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3J0ZV92 ZmlvX3VuYmluZF9ncm91cChpbnQgY29udGFpbmVyX2ZkLCBpbnQgaW9tbXVfZ3JvdXBfbm8pOw0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRB TDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlvcg0KPiBu b3RpY2UNCj4gPiArICoNCj4gPiArICogUGVyZm9ybSBkbWEgbWFwcGluZyBmb3IgZGV2aWNlcyBp biBhIGNvbmFpbmVyLg0KPiANCj4gSGVyZSBhbmQgaW4gb3RoZXIgcGxhY2VzOiAiZG1hIiBzaG91 bGQgYmUgRE1BLCBhbmQgdHlwbzogImNvbmFpbmVyIiA6KQ0KPiANCj4gSSB0aGluayB5b3Ugc2hv dWxkIGFsc28gYWRkIGEgbm90ZSB0byB0aGUgb3JpZ2luYWwgQVBJIChub3QgdGhpcyBvbmUsDQo+ IGJ1dCB0aGUgb2xkIG9uZSkgdGhhdCBETUEgbWFwcyBkb25lIHZpYSB0aGF0IEFQSSB3aWxsIG9u bHkgYXBwbHkgdG8NCj4gZGVmYXVsdCBjb250YWluZXIgYW5kIHdpbGwgbm90IGFwcGx5IHRvIGFu eSBvZiB0aGUgY29udGFpbmVycyBjcmVhdGVkDQo+IHZpYSBjb250YWluZXJfY3JlYXRlKCkuIElP VywgZG9jdW1lbnRhdGlvbiBzaG91bGQgbWFrZSBpdCBjbGVhciB0aGF0IGlmDQo+IHlvdSB1c2Ug dGhpcyBmdW5jdGlvbmFsaXR5LCB5b3UncmUgb24geW91ciBvd24gYW5kIHlvdSBoYXZlIHRvIG1h bmFnZQ0KPiB5b3VyIG93biBETUEgbWFwcGluZ3MgZm9yIGFueSBjb250YWluZXJzIHlvdSBjcmVh dGUuDQoNCk9LLCB3aWxsIGFkZCBub3RlIHRvIGNsZWFybHkgZGVzY3JpYmUgaXQuDQoNCj4gDQo+ ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBjb250YWluZXJfZmQNCj4gPiArICogICB0aGUgc3BlY2lm aWVkIGNvbnRhaW5lciBmZA0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gdmFkZHINCj4gPiArICog ICBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3Mgb2YgbWVtb3J5IHRvIGJlIG1hcHBlZC4NCj4gPiAr ICoNCj4gDQo+IDwuLi4+DQo+IA0KPiA+ICsNCj4gPiAraW50IF9fcnRlX2V4cGVyaW1lbnRhbA0K PiA+ICtydGVfdmZpb19jb250YWluZXJfZG1hX21hcChpbnQgY29udGFpbmVyX2ZkLCB1aW50NjRf dCB2YWRkciwgdWludDY0X3QNCj4gaW92YSwNCj4gPiArCQl1aW50NjRfdCBsZW4pDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCB1c2VyX21lbV9tYXAgKm5ld19tYXA7DQo+ID4gKwlzdHJ1Y3QgdmZpb19j b25maWcgKnZmaW9fY2ZnOw0KPiA+ICsJc3RydWN0IHVzZXJfbWVtX21hcHMgKnVzZXJfbWVtX21h cHM7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwlpZiAobGVuID09IDApIHsNCj4g PiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXZmaW9fY2ZnID0gZ2V0X3ZmaW9fY2ZnX2J5X2NvbnRhaW5lcl9mZChjb250YWlu ZXJfZmQpOw0KPiA+ICsJaWYgKHZmaW9fY2ZnID09IE5VTEwpIHsNCj4gPiArCQlSVEVfTE9HKEVS UiwgRUFMLCAiSW52YWxpZCBjb250YWluZXIgZmRcbiIpOw0KPiA+ICsJCXJldHVybiAtMTsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwl1c2VyX21lbV9tYXBzID0gJnZmaW9fY2ZnLT5tZW1fbWFwczsN Cj4gPiArCXJ0ZV9zcGlubG9ja19yZWN1cnNpdmVfbG9jaygmdXNlcl9tZW1fbWFwcy0+bG9jayk7 DQo+ID4gKwlpZiAodXNlcl9tZW1fbWFwcy0+bl9tYXBzID09IFZGSU9fTUFYX1VTRVJfTUVNX01B UFMpIHsNCj4gPiArCQlSVEVfTE9HKEVSUiwgRUFMLCAiTm8gbW9yZSBzcGFjZSBmb3IgdXNlciBt ZW0gbWFwc1xuIik7DQo+ID4gKwkJcnRlX2Vycm5vID0gRU5PTUVNOw0KPiA+ICsJCXJldCA9IC0x Ow0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsJLyogbWFwIHRoZSBlbnRyeSAqLw0K PiA+ICsJaWYgKHZmaW9fZG1hX21lbV9tYXAodmZpb19jZmcsIHZhZGRyLCBpb3ZhLCBsZW4sIDEp KSB7DQo+ID4gKwkJLyogdGVjaG5pY2FsbHksIHRoaXMgd2lsbCBmYWlsIGlmIHRoZXJlIGFyZSBj dXJyZW50bHkgbm8gZGV2aWNlcw0KPiA+ICsJCSAqIHBsdWdnZWQgaW4sIGV2ZW4gaWYgYSBkZXZp Y2Ugd2VyZSBhZGRlZCBsYXRlciwgdGhpcyBtYXBwaW5nDQo+ID4gKwkJICogbWlnaHQgaGF2ZSBz dWNjZWVkZWQuIGhvd2V2ZXIsIHNpbmNlIHdlIGNhbm5vdCB2ZXJpZnkgaWYNCj4gdGhpcw0KPiA+ ICsJCSAqIGlzIGEgdmFsaWQgbWFwcGluZyB3aXRob3V0IGhhdmluZyBhIGRldmljZSBhdHRhY2hl ZCwNCj4gY29uc2lkZXINCj4gPiArCQkgKiB0aGlzIHRvIGJlIHVuc3VwcG9ydGVkLCBiZWNhdXNl IHdlIGNhbid0IGp1c3Qgc3RvcmUgYW55IG9sZA0KPiA+ICsJCSAqIG1hcHBpbmcgYW5kIHBvbGx1 dGUgbGlzdCBvZiBhY3RpdmUgbWFwcGluZ3Mgd2lsbHktbmlsbHkuDQo+ID4gKwkJICovDQo+ID4g KwkJUlRFX0xPRyhFUlIsIEVBTCwgIkNvdWxkbid0IG1hcCBuZXcgcmVnaW9uIGZvciBETUFcbiIp Ow0KPiA+ICsJCXJldCA9IC0xOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsJLyog Y3JlYXRlIG5ldyB1c2VyIG1lbSBtYXAgZW50cnkgKi8NCj4gPiArCW5ld19tYXAgPSAmdXNlcl9t ZW1fbWFwcy0+bWFwc1t1c2VyX21lbV9tYXBzLT5uX21hcHMrK107DQo+ID4gKwluZXdfbWFwLT5h ZGRyID0gdmFkZHI7DQo+ID4gKwluZXdfbWFwLT5pb3ZhID0gaW92YTsNCj4gPiArCW5ld19tYXAt PmxlbiA9IGxlbjsNCj4gPiArDQo+ID4gKwljb21wYWN0X3VzZXJfbWFwcyh1c2VyX21lbV9tYXBz KTsNCj4gPiArb3V0Og0KPiA+ICsJcnRlX3NwaW5sb2NrX3JlY3Vyc2l2ZV91bmxvY2soJnVzZXJf bWVtX21hcHMtPmxvY2spOw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gDQo+IFBsZWFzZSBjb3JyZWN0 IG1lIGlmIGknbSB3cm9uZywgYnV0IGl0IGxvb2tzIGxpa2UgeW91J3ZlIGp1c3QgZHVwbGljYXRl ZA0KPiB0aGUgY29kZSBmb3IgcnRlX3ZmaW9fZG1hX21hcCgpIGhlcmUgYW5kIG1hZGUgYSBmZXcg c21hbGwgY2hhbmdlcy4gSXQNCj4gd291bGQgYmUgYmV0dGVyIGlmIHlvdSBtb3ZlZCBtb3N0IG9m IHRoaXMgaW50byBhIHN0YXRpYyBmdW5jdGlvbiAoZS5nLg0KPiBzdGF0aWMgaW50IGNvbnRhaW5l cl9kbWFfbWFwKHZmaW9fY2ZnLCB2YWRkciwgaW92YSwgbGVuKSkgYW5kIGNhbGxlZCBpdA0KPiB3 aXRoIGVpdGhlciBkZWZhdWx0IHZmaW9fY2ZnIGZyb20gcnRlX3ZmaW9fZG1hX21hcCwgb3IgZm91 bmQgdmZpb19jZmcNCj4gZnJvbSBydGVfdmZpb19jb250YWluZXJfZG1hX21hcC4gU2FtZSBhcHBs aWVzIHRvIGZ1bmN0aW9uIGJlbG93Lg0KDQpBZ3JlZSwgd2lsbCBkbyBpdCBpbiB2OC4NCg0KQlJz LA0KWGlhbw0KDQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFs DQo+ID4gK3J0ZV92ZmlvX2NvbnRhaW5lcl9kbWFfdW5tYXAoaW50IGNvbnRhaW5lcl9mZCwgdWlu dDY0X3QgdmFkZHIsIHVpbnQ2NF90DQo+IGlvdmEsDQo+ID4gKwkJdWludDY0X3QgbGVuKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgdXNlcl9tZW1fbWFwICptYXAsICpuZXdfbWFwID0gTlVMTDsNCj4g PiArCXN0cnVjdCB2ZmlvX2NvbmZpZyAqdmZpb19jZmc7DQo+ID4gKwlzdHJ1Y3QgdXNlcl9tZW1f bWFwcyAqdXNlcl9tZW1fbWFwczsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCWlm IChsZW4gPT0gMCkgew0KPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiArCQlyZXR1cm4g LTE7DQo+ID4gKwl9DQo+ID4gKw0KPiANCj4gPC4uLj4NCj4gDQo+IC0tDQo+IFRoYW5rcywNCj4g QW5hdG9seQ0K