From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wang, Xiao W" Subject: Re: [PATCH v6 1/4] eal/vfio: add multiple container support Date: Thu, 12 Apr 2018 16:07:41 +0000 Message-ID: References: <20180405180701.16853-4-xiao.w.wang@intel.com> <20180412071956.66178-1-xiao.w.wang@intel.com> <20180412071956.66178-2-xiao.w.wang@intel.com> <974c9cd0-87c4-6ab1-0787-9278a7379fda@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" , "gaetan.rivet@6wind.com" , "hemant.agrawal@nxp.com" , "Chen, Junjie J" To: "Burakov, Anatoly" , "Yigit, Ferruh" Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 9D5B81C0A8 for ; Thu, 12 Apr 2018 18:07:47 +0200 (CEST) In-Reply-To: <974c9cd0-87c4-6ab1-0787-9278a7379fda@intel.com> 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+IFNlbnQ6IFRodXJzZGF5LCBBcHJpbCAxMiwgMjAxOCAxMDowNCBQTQ0K PiBUbzogV2FuZywgWGlhbyBXIDx4aWFvLncud2FuZ0BpbnRlbC5jb20+OyBZaWdpdCwgRmVycnVo DQo+IDxmZXJydWgueWlnaXRAaW50ZWwuY29tPg0KPiBDYzogZGV2QGRwZGsub3JnOyBtYXhpbWUu Y29xdWVsaW5AcmVkaGF0LmNvbTsgV2FuZywgWmhpaG9uZw0KPiA8emhpaG9uZy53YW5nQGludGVs LmNvbT47IEJpZSwgVGl3ZWkgPHRpd2VpLmJpZUBpbnRlbC5jb20+OyBUYW4sIEppYW5mZW5nDQo+ IDxqaWFuZmVuZy50YW5AaW50ZWwuY29tPjsgTGlhbmcsIEN1bm1pbmcgPGN1bm1pbmcubGlhbmdA aW50ZWwuY29tPjsgRGFseSwNCj4gRGFuIDxkYW4uZGFseUBpbnRlbC5jb20+OyB0aG9tYXNAbW9u amFsb24ubmV0OyBnYWV0YW4ucml2ZXRANndpbmQuY29tOw0KPiBoZW1hbnQuYWdyYXdhbEBueHAu Y29tOyBDaGVuLCBKdW5qaWUgSiA8anVuamllLmouY2hlbkBpbnRlbC5jb20+DQo+IFN1YmplY3Q6 IFJlOiBbUEFUQ0ggdjYgMS80XSBlYWwvdmZpbzogYWRkIG11bHRpcGxlIGNvbnRhaW5lciBzdXBw b3J0DQo+IA0KPiBPbiAxMi1BcHItMTggODoxOSBBTSwgWGlhbyBXYW5nIHdyb3RlOg0KPiA+IEN1 cnJlbnRseSBlYWwgdmZpbyBmcmFtZXdvcmsgYmluZHMgdmZpbyBncm91cCBmZCB0byB0aGUgZGVm YXVsdA0KPiA+IGNvbnRhaW5lciBmZCBkdXJpbmcgcnRlX3ZmaW9fc2V0dXBfZGV2aWNlLCB3aGls ZSBpbiBzb21lIGNhc2VzLA0KPiA+IGUuZy4gdkRQQSAodmhvc3QgZGF0YSBwYXRoIGFjY2VsZXJh dGlvbiksIHdlIHdhbnQgdG8gcHV0IHZmaW8gZ3JvdXANCj4gPiB0byBhIHNlcGFyYXRlIGNvbnRh aW5lciBhbmQgcHJvZ3JhbSBJT01NVSB2aWEgdGhpcyBjb250YWluZXIuDQo+ID4NCj4gPiBUaGlz IHBhdGNoIGFkZHMgc29tZSBBUElzIHRvIHN1cHBvcnQgY29udGFpbmVyIGNyZWF0aW5nIGFuZCBk ZXZpY2UNCj4gPiBiaW5kaW5nIHdpdGggYSBjb250YWluZXIuDQo+ID4NCj4gPiBBIGRyaXZlciBj b3VsZCB1c2UgInJ0ZV92ZmlvX2NyZWF0ZV9jb250YWluZXIiIGhlbHBlciB0byBjcmVhdGUgYQ0K PiA+IG5ldyBjb250YWluZXIgZnJvbSBlYWwsIHVzZSAicnRlX3ZmaW9fYmluZF9ncm91cCIgdG8g YmluZCBhIGRldmljZQ0KPiA+IHRvIHRoZSBuZXdseSBjcmVhdGVkIGNvbnRhaW5lci4NCj4gPg0K PiA+IER1cmluZyBydGVfdmZpb19zZXR1cF9kZXZpY2UsIHRoZSBjb250YWluZXIgYm91bmQgd2l0 aCB0aGUgZGV2aWNlDQo+ID4gd2lsbCBiZSB1c2VkIGZvciBJT01NVSBzZXR1cC4NCj4gPg0KPiA+ IFNpZ25lZC1vZmYtYnk6IEp1bmppZSBDaGVuIDxqdW5qaWUuai5jaGVuQGludGVsLmNvbT4NCj4g PiBTaWduZWQtb2ZmLWJ5OiBYaWFvIFdhbmcgPHhpYW8udy53YW5nQGludGVsLmNvbT4NCj4gPiBS ZXZpZXdlZC1ieTogTWF4aW1lIENvcXVlbGluIDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4N Cj4gPiBSZXZpZXdlZC1ieTogRmVycnVoIFlpZ2l0IDxmZXJydWgueWlnaXRAaW50ZWwuY29tPg0K PiA+IC0tLQ0KPiANCj4gQXBvbG9naWVzIGZvciBsYXRlIHJldmlldy4gU29tZSBjb21tZW50cyBi ZWxvdy4NCj4gDQo+IDwuLi4+DQo+IA0KPiA+DQo+ID4gK3N0cnVjdCBydGVfbWVtc2VnOw0KPiA+ ICsNCj4gPiAgIC8qKg0KPiA+ICAgICogU2V0dXAgdmZpb19jZmcgZm9yIHRoZSBkZXZpY2UgaWRl bnRpZmllZCBieSBpdHMgYWRkcmVzcy4NCj4gPiAgICAqIEl0IGRpc2NvdmVycyB0aGUgY29uZmln dXJlZCBJL08gTU1VIGdyb3VwcyBvciBzZXRzIGEgbmV3IG9uZSBmb3IgdGhlDQo+IGRldmljZS4N Cj4gPiBAQCAtMTMxLDYgKzEzMywxMTcgQEAgcnRlX3ZmaW9fY2xlYXJfZ3JvdXAoaW50IHZmaW9f Z3JvdXBfZmQpOw0KPiA+ICAgfQ0KPiA+ICAgI2VuZGlmDQo+ID4NCj4gDQo+IDwuLi4+DQo+IA0K PiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlz IEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9yDQo+IG5vdGljZQ0K PiA+ICsgKg0KPiA+ICsgKiBQZXJmb3JtIGRtYSBtYXBwaW5nIGZvciBkZXZpY2VzIGluIGEgY29u YWluZXIuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBjb250YWluZXJfZmQNCj4gPiArICogICB0 aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBmZA0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gZG1hX3R5 cGUNCj4gPiArICogICB0aGUgZG1hIG1hcCB0eXBlDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBt cw0KPiA+ICsgKiAgIHRoZSBkbWEgYWRkcmVzcyByZWdpb24gdG8gbWFwDQo+ID4gKyAqDQo+ID4g KyAqIEByZXR1cm4NCj4gPiArICogICAgMCBpZiBzdWNjZXNzZnVsDQo+ID4gKyAqICAgPDAgaWYg ZmFpbGVkDQo+ID4gKyAqLw0KPiA+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3J0ZV92 ZmlvX2RtYV9tYXAoaW50IGNvbnRhaW5lcl9mZCwgaW50IGRtYV90eXBlLCBjb25zdCBzdHJ1Y3QN Cj4gcnRlX21lbXNlZyAqbXMpOw0KPiA+ICsNCj4gDQo+IEZpcnN0IG9mIGFsbCwgd2h5IG1lbXNl ZywgaW5zdGVhZCBvZiB2YS9pb3ZhL2xlbj8gVGhpcyBzZWVtcyBsaWtlDQo+IHVubmVjZXNzYXJ5 IGF0dGFjaG1lbnQgdG8gaW50ZXJuYWxzIG9mIERQREsgbWVtb3J5IHJlcHJlc2VudGF0aW9uLiBO b3QNCj4gYWxsIG1lbW9yeSBjb21lcyBpbiBtZW1zZWdzLCB0aGlzIG1ha2VzIHRoZSBBUEkgdW5u ZWNlc3NhcmlseSBzcGVjaWZpYw0KPiB0byBEUERLIG1lbW9yeS4NCg0KQWdyZWUsIHdpbGwgdXNl IHZhL2lvdmEvbGVuLg0KDQo+IA0KPiBBbHNvLCB3aHkgcHJvdmlkaW5nIERNQSB0eXBlPyBUaGVy ZSdzIGFscmVhZHkgYSBWRklPIHR5cGUgcG9pbnRlciBpbg0KPiB2ZmlvX2NvbmZpZyAtIHlvdSBj YW4gc2V0IHRoaXMgcG9pbnRlciBmb3IgZXZlcnkgbmV3IGNyZWF0ZWQgY29udGFpbmVyLA0KPiBz byB0aGUgdXNlciB3b3VsZG4ndCBoYXZlIHRvIGNhcmUgYWJvdXQgSU9NTVUgdHlwZS4gSXMgaXQg bm90IHBvc3NpYmxlDQo+IHRvIGZpZ3VyZSBvdXQgRE1BIHR5cGUgZnJvbSB3aXRoaW4gRUFMIFZG SU8/IElmIG5vdCwgbWF5YmUgcHJvdmlkZSBhbg0KPiBBUEkgdG8gZG8gc28sIGUuZy4gcnRlX3Zm aW9fY29udGFpbmVyX3NldF9kbWFfdHlwZSgpPw0KDQpJdCdzIHBvc3NpYmxlLCBFQUwgVkZJTyBz aG91bGQgYmUgYWJsZSB0byBmaWd1cmUgb3V0IGEgY29udGFpbmVyJ3MgRE1BIHR5cGUuDQoNCj4g DQo+IFRoaXMgd2lsbCBhbHNvIG5lZWQgdG8gYmUgcmViYXNlZCBvbiB0b3Agb2YgbGF0ZXN0IEhF QUQgYmVjYXVzZSB0aGVyZQ0KPiBhbHJlYWR5IGlzIGEgc2ltaWxhciBETUEgbWFwL3VubWFwIEFQ SSBhZGRlZCwgb25seSB3aXRob3V0IHRoZSBjb250YWluZXINCj4gcGFyYW1ldGVyLiBQZXJoYXBz IHJlbmFtZSB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvDQo+IHJ0ZV92ZmlvX2NvbnRhaW5lcl8oY3Jl YXRlfGRlc3Ryb3l8ZG1hX21hcHxkbWFfdW5tYXApPw0KDQpPSywgd2lsbCBjaGVjayB0aGUgbGF0 ZXN0IEhFQUQgYW5kIHJlYmFzZSBvbiB0aGF0Lg0KDQo+IA0KPiA+ICsvKioNCj4gPiArICogQHdh cm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBi ZSByZW1vdmVkLCB3aXRob3V0IHByaW9yDQo+IG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBQZXJm b3JtIGRtYSB1bm1hcHBpbmcgZm9yIGRldmljZXMgaW4gYSBjb25haW5lci4NCj4gPiArICoNCj4g PiArICogQHBhcmFtIGNvbnRhaW5lcl9mZA0KPiA+ICsgKiAgIHRoZSBzcGVjaWZpZWQgY29udGFp bmVyIGZkDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBkbWFfdHlwZQ0KPiA+ICsgKiAgICB0aGUg ZG1hIG1hcCB0eXBlDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBtcw0KPiA+ICsgKiAgIHRoZSBk bWEgYWRkcmVzcyByZWdpb24gdG8gdW5tYXANCj4gPiArICoNCj4gPiArICogQHJldHVybg0KPiA+ ICsgKiAgICAwIGlmIHN1Y2Nlc3NmdWwNCj4gPiArICogICA8MCBpZiBmYWlsZWQNCj4gPiArICov DQo+ID4gK2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3ZmaW9fZG1hX3VubWFwKGlu dCBjb250YWluZXJfZmQsIGludCBkbWFfdHlwZSwgY29uc3Qgc3RydWN0DQo+IHJ0ZV9tZW1zZWcg Km1zKTsNCj4gPiArDQo+ID4gICAjZW5kaWYgLyogVkZJT19QUkVTRU5UICovDQo+ID4NCj4gDQo+ IDwuLi4+DQo+IA0KPiA+IEBAIC03NSw4ICs1Myw4IEBAIHZmaW9fZ2V0X2dyb3VwX2ZkKGludCBp b21tdV9ncm91cF9ubykNCj4gPiAgIAkJaWYgKHZmaW9fZ3JvdXBfZmQgPCAwKSB7DQo+ID4gICAJ CQkvKiBpZiBmaWxlIG5vdCBmb3VuZCwgaXQncyBub3QgYW4gZXJyb3IgKi8NCj4gPiAgIAkJCWlm IChlcnJubyAhPSBFTk9FTlQpIHsNCj4gPiAtCQkJCVJURV9MT0coRVJSLCBFQUwsICJDYW5ub3Qg b3BlbiAlczogJXNcbiIsDQo+IGZpbGVuYW1lLA0KPiA+IC0JCQkJCQlzdHJlcnJvcihlcnJubykp Ow0KPiA+ICsJCQkJUlRFX0xPRyhFUlIsIEVBTCwgIkNhbm5vdCBvcGVuICVzOiAlc1xuIiwNCj4g PiArCQkJCQlmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsNCj4gDQo+IFRoaXMgbG9va3MgbGlr ZSB1bmludGVuZGVkIGNoYW5nZS4NCj4gDQo+ID4gICAJCQkJcmV0dXJuIC0xOw0KPiA+ICAgCQkJ fQ0KPiA+DQo+ID4gQEAgLTg2LDggKzY0LDEwIEBAIHZmaW9fZ2V0X2dyb3VwX2ZkKGludCBpb21t dV9ncm91cF9ubykNCj4gPiAgIAkJCXZmaW9fZ3JvdXBfZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JE V1IpOw0KPiA+ICAgCQkJaWYgKHZmaW9fZ3JvdXBfZmQgPCAwKSB7DQo+ID4gICAJCQkJaWYgKGVy cm5vICE9IEVOT0VOVCkgew0KPiA+IC0JCQkJCVJURV9MT0coRVJSLCBFQUwsICJDYW5ub3QNCj4g b3BlbiAlczogJXNcbiIsIGZpbGVuYW1lLA0KPiA+IC0JCQkJCQkJc3RyZXJyb3IoZXJybm8pKTsN Cj4gPiArCQkJCQlSVEVfTE9HKEVSUiwgRUFMLA0KPiA+ICsJCQkJCQkiQ2Fubm90IG9wZW4gJXM6 ICVzXG4iLA0KPiA+ICsJCQkJCQlmaWxlbmFtZSwNCj4gPiArCQkJCQkJc3RyZXJyb3IoZXJybm8p KTsNCj4gDQo+IFRoaXMgbG9va3MgbGlrZSB1bmludGVuZGVkIGNoYW5nZS4NCj4gDQo+ID4gICAJ CQkJCXJldHVybiAtMTsNCj4gPiAgIAkJCQl9DQo+ID4gICAJCQkJcmV0dXJuIDA7DQo+ID4gQEAg LTk1LDIxICs3NSwxOSBAQCB2ZmlvX2dldF9ncm91cF9mZChpbnQgaW9tbXVfZ3JvdXBfbm8pDQo+ ID4gICAJCQkvKiBub2lvbW11IGdyb3VwIGZvdW5kICovDQo+ID4gICAJCX0NCj4gPg0KPiA+IC0J CWN1cl9ncnAtPmdyb3VwX25vID0gaW9tbXVfZ3JvdXBfbm87DQo+ID4gLQkJY3VyX2dycC0+ZmQg PSB2ZmlvX2dyb3VwX2ZkOw0KPiA+IC0JCXZmaW9fY2ZnLnZmaW9fYWN0aXZlX2dyb3VwcysrOw0K PiA+ICAgCQlyZXR1cm4gdmZpb19ncm91cF9mZDsNCj4gPiAgIAl9DQo+ID4gLQkvKiBpZiB3ZSdy ZSBpbiBhIHNlY29uZGFyeSBwcm9jZXNzLCByZXF1ZXN0IGdyb3VwIGZkIGZyb20gdGhlIHByaW1h cnkNCj4gPiArCS8qDQo+ID4gKwkgKiBpZiB3ZSdyZSBpbiBhIHNlY29uZGFyeSBwcm9jZXNzLCBy ZXF1ZXN0IGdyb3VwIGZkIGZyb20gdGhlIHByaW1hcnkNCj4gPiAgIAkgKiBwcm9jZXNzIHZpYSBv dXIgc29ja2V0DQo+ID4gICAJICovDQo+IA0KPiBUaGlzIGxvb2tzIGxpa2UgdW5pbnRlbmRlZCBj aGFuZ2UuDQo+IA0KPiA+ICAgCWVsc2Ugew0KPiA+IC0JCWludCBzb2NrZXRfZmQsIHJldDsNCj4g PiAtDQo+ID4gLQkJc29ja2V0X2ZkID0gdmZpb19tcF9zeW5jX2Nvbm5lY3RfdG9fcHJpbWFyeSgp Ow0KPiA+ICsJCWludCByZXQ7DQo+ID4gKwkJaW50IHNvY2tldF9mZCA9IHZmaW9fbXBfc3luY19j b25uZWN0X3RvX3ByaW1hcnkoKTsNCj4gPg0KPiA+ICAgCQlpZiAoc29ja2V0X2ZkIDwgMCkgew0K PiA+IC0JCQlSVEVfTE9HKEVSUiwgRUFMLCAiICBjYW5ub3QgY29ubmVjdCB0byBwcmltYXJ5DQo+ IHByb2Nlc3MhXG4iKTsNCj4gPiArCQkJUlRFX0xPRyhFUlIsIEVBTCwNCj4gPiArCQkJCSIgIGNh bm5vdCBjb25uZWN0IHRvIHByaW1hcnkgcHJvY2VzcyFcbiIpOw0KPiANCj4gVGhpcyBsb29rcyBs aWtlIHVuaW50ZW5kZWQgY2hhbmdlLg0KPiANCj4gPiAgIAkJCXJldHVybiAtMTsNCj4gPiAgIAkJ fQ0KPiA+ICAgCQlpZiAodmZpb19tcF9zeW5jX3NlbmRfcmVxdWVzdChzb2NrZXRfZmQsDQo+IFNP Q0tFVF9SRVFfR1JPVVApIDwgMCkgew0KPiA+IEBAIC0xMjIsNiArMTAwLDcgQEAgdmZpb19nZXRf Z3JvdXBfZmQoaW50IGlvbW11X2dyb3VwX25vKQ0KPiA+ICAgCQkJY2xvc2Uoc29ja2V0X2ZkKTsN Cj4gPiAgIAkJCXJldHVybiAtMTsNCj4gPiAgIAkJfQ0KPiA+ICsNCj4gPiAgIAkJcmV0ID0gdmZp b19tcF9zeW5jX3JlY2VpdmVfcmVxdWVzdChzb2NrZXRfZmQpOw0KPiANCj4gVGhpcyBsb29rcyBs aWtlIHVuaW50ZW5kZWQgY2hhbmdlLg0KPiANCj4gKGhpbnQ6ICJnaXQgcmV2ZXJ0IC1uIEhFQUQg JiYgZ2l0IGFkZCAtcCIgaXMgeW91ciBmcmllbmQgOikgKQ0KDQpUaGFua3MsIHdpbGwgcmVtb3Zl IHRoZXNlIGRpZmYuDQoNCj4gDQo+ID4gICAJCXN3aXRjaCAocmV0KSB7DQo+ID4gICAJCWNhc2Ug U09DS0VUX05PX0ZEOg0KPiA+IEBAIC0xMzIsOSArMTExLDYgQEAgdmZpb19nZXRfZ3JvdXBfZmQo aW50IGlvbW11X2dyb3VwX25vKQ0KPiA+ICAgCQkJLyogaWYgd2UgZ290IHRoZSBmZCwgc3RvcmUg aXQgYW5kIHJldHVybiBpdCAqLw0KPiA+ICAgCQkJaWYgKHZmaW9fZ3JvdXBfZmQgPiAwKSB7DQo+ ID4gICAJCQkJY2xvc2Uoc29ja2V0X2ZkKTsNCj4gPiAtCQkJCWN1cl9ncnAtPmdyb3VwX25vID0g aW9tbXVfZ3JvdXBfbm87DQo+ID4gLQkJCQljdXJfZ3JwLT5mZCA9IHZmaW9fZ3JvdXBfZmQ7DQo+ ID4gLQkJCQl2ZmlvX2NmZy52ZmlvX2FjdGl2ZV9ncm91cHMrKzsNCj4gPiAgIAkJCQlyZXR1cm4g dmZpb19ncm91cF9mZDsNCj4gPiAgIAkJCX0NCj4gPiAgIAkJCS8qIGZhbGwtdGhyb3VnaCBvbiBl cnJvciAqLw0KPiA+IEBAIC0xNDcsNzAgKzEyMywzNDkgQEAgdmZpb19nZXRfZ3JvdXBfZmQoaW50 IGlvbW11X2dyb3VwX25vKQ0KPiA+ICAgCXJldHVybiAtMTsNCj4gDQo+IDwuLi4+DQo+IA0KPiA+ ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3J0ZV92ZmlvX2NyZWF0ZV9jb250YWluZXIo dm9pZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHZmaW9fY29uZmlnICp2ZmlvX2NmZzsNCj4gPiAr CWludCBpOw0KPiA+ICsNCj4gPiArCS8qIEZpbmQgYW4gZW1wdHkgc2xvdCB0byBzdG9yZSBuZXcg dmZpbyBjb25maWcgKi8NCj4gPiArCWZvciAoaSA9IDE7IGkgPCBWRklPX01BWF9DT05UQUlORVJT OyBpKyspIHsNCj4gPiArCQlpZiAodmZpb19jZmdzW2ldID09IE5VTEwpDQo+ID4gKwkJCWJyZWFr Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChpID09IFZGSU9fTUFYX0NPTlRBSU5FUlMpIHsN Cj4gPiArCQlSVEVfTE9HKEVSUiwgRUFMLCAiZXhjZWVkIG1heCB2ZmlvIGNvbnRhaW5lciBsaW1p dFxuIik7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXZmaW9fY2Zn c1tpXSA9IHJ0ZV96bWFsbG9jKCJ2ZmlvX2NvbnRhaW5lciIsIHNpemVvZihzdHJ1Y3QgdmZpb19j b25maWcpLA0KPiA+ICsJCVJURV9DQUNIRV9MSU5FX1NJWkUpOw0KPiA+ICsJaWYgKHZmaW9fY2Zn c1tpXSA9PSBOVUxMKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiANCj4gSXMgdGhlcmUgYSBz cGVjaWZpYyByZWFzb24gd2h5IDEpIGR5bmFtaWMgYWxsb2NhdGlvbiBpcyB1c2VkIChhcyBvcHBv c2VkDQo+IHRvIGp1c3Qgc3RvcmluZyBhIHN0YXRpYyBhcnJheSksIGFuZCAyKSBEUERLIG1lbW9y eSBhbGxvY2F0aW9uIGlzIHVzZWQ/DQo+IFRoaXMgc2VlbXMgbGlrZSB1bm5lY2Vzc2FyeSBjb21w bGljYXRpb24uDQo+IA0KPiBFdmVuIGlmIHlvdSB3ZXJlIHRvIGRlY2lkZSB0byBhbGxvY2F0ZSBt ZW1vcnkgaW5zdGVhZCBvZiBoYXZpbmcgYSBzdGF0aWMNCj4gYXJyYXksIHlvdSdsbCBoYXZlIHRv IHJlZ2lzdGVyIGZvciBydGVfZWFsX2NsZWFudXAoKSB0byBkZWxldGUgYW55DQo+IGFsbG9jYXRl ZCBjb250YWluZXJzIG9uIERQREsgZXhpdC4gQnV0LCBhcyBpIHNhaWQsIGkgdGhpbmsgaXQgd291 bGQgYmUNCj4gYmV0dGVyIHRvIGtlZXAgaXQgYXMgc3RhdGljIGFycmF5Lg0KPg0KDQpUaGFua3Mg Zm9yIHRoZSBzdWdnZXN0aW9uLCBzdGF0aWMgYXJyYXkgbG9va3Mgc2ltcGxlciBhbmQgY2xlYW5l ci4NCiANCj4gPiArDQo+ID4gKwlSVEVfTE9HKElORk8sIEVBTCwgImFsbG9jIGNvbnRhaW5lciBh dCBzbG90ICVkXG4iLCBpKTsNCj4gPiArCXZmaW9fY2ZnID0gdmZpb19jZmdzW2ldOw0KPiA+ICsJ dmZpb19jZmctPnZmaW9fYWN0aXZlX2dyb3VwcyA9IDA7DQo+ID4gKwl2ZmlvX2NmZy0+dmZpb19j b250YWluZXJfZmQgPSB2ZmlvX2dldF9jb250YWluZXJfZmQoKTsNCj4gPiArDQo+ID4gKwlpZiAo dmZpb19jZmctPnZmaW9fY29udGFpbmVyX2ZkIDwgMCkgew0KPiA+ICsJCXJ0ZV9mcmVlKHZmaW9f Y2Znc1tpXSk7DQo+ID4gKwkJdmZpb19jZmdzW2ldID0gTlVMTDsNCj4gPiArCQlyZXR1cm4gLTE7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IFZGSU9fTUFYX0dST1VQUzsg aSsrKSB7DQo+ID4gKwkJdmZpb19jZmctPnZmaW9fZ3JvdXBzW2ldLmdyb3VwX25vID0gLTE7DQo+ ID4gKwkJdmZpb19jZmctPnZmaW9fZ3JvdXBzW2ldLmZkID0gLTE7DQo+ID4gKwkJdmZpb19jZmct PnZmaW9fZ3JvdXBzW2ldLmRldmljZXMgPSAwOw0KPiA+ICsJfQ0KPiANCj4gPC4uLj4NCj4gDQo+ ID4gQEAgLTY2NSw0MSArOTMxLDgwIEBAIHZmaW9fZ2V0X2dyb3VwX25vKGNvbnN0IGNoYXIgKnN5 c2ZzX2Jhc2UsDQo+ID4gICB9DQo+ID4NCj4gPiAgIHN0YXRpYyBpbnQNCj4gPiAtdmZpb190eXBl MV9kbWFfbWFwKGludCB2ZmlvX2NvbnRhaW5lcl9mZCkNCj4gPiArZG9fdmZpb190eXBlMV9kbWFf bWFwKGludCB2ZmlvX2NvbnRhaW5lcl9mZCwgY29uc3Qgc3RydWN0IHJ0ZV9tZW1zZWcNCj4gKm1z KQ0KPiANCj4gPC4uLj4NCj4gDQo+IA0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2RvX3ZmaW9fdHlw ZTFfZG1hX3VubWFwKGludCB2ZmlvX2NvbnRhaW5lcl9mZCwgY29uc3Qgc3RydWN0DQo+IHJ0ZV9t ZW1zZWcgKm1zKQ0KPiANCj4gQVBJJ3Mgc3VjaCBhcyB0aGVzZSB0d28gd2VyZSByZWNlbnRseSBh ZGRlZCB0byBEUERLLg0KDQpXaWxsIGNoZWNrIGFuZCByZWJhc2UuDQoNCkJScywNClhpYW8NCg0K PiANCj4gLS0NCj4gVGhhbmtzLA0KPiBBbmF0b2x5DQo=