From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH 6/6] x86/hvm: Implement hvmemul_write() using real mappings Date: Wed, 21 Jun 2017 16:19:00 +0000 Message-ID: <29dda16cf3474229b0f12ad0e93f9fec@AMSPEX02CL03.citrite.net> References: <1498057952-13556-1-git-send-email-andrew.cooper3@citrix.com> <1498057952-13556-7-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1498057952-13556-7-git-send-email-andrew.cooper3@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , =?utf-8?B?TWloYWkgRG9uyJt1?= , Razvan Cojocaru , Jan Beulich List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBbmRyZXcgQ29vcGVyIFttYWls dG86YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbV0NCj4gU2VudDogMjEgSnVuZSAyMDE3IDE2OjEz DQo+IFRvOiBYZW4tZGV2ZWwgPHhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnPg0KPiBDYzogQW5kcmV3 IENvb3BlciA8QW5kcmV3LkNvb3BlcjNAY2l0cml4LmNvbT47IEphbiBCZXVsaWNoDQo+IDxKQmV1 bGljaEBzdXNlLmNvbT47IFBhdWwgRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJpeC5jb20+OyBS YXp2YW4NCj4gQ29qb2NhcnUgPHJjb2pvY2FydUBiaXRkZWZlbmRlci5jb20+OyBNaWhhaSBEb27I m3UNCj4gPG1kb250dUBiaXRkZWZlbmRlci5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCA2LzZdIHg4 Ni9odm06IEltcGxlbWVudCBodm1lbXVsX3dyaXRlKCkgdXNpbmcgcmVhbA0KPiBtYXBwaW5ncw0K PiANCj4gQW4gYWNjZXNzIHdoaWNoIGNyb3NzZXMgYSBwYWdlIGJvdW5kYXJ5IGlzIHBlcmZvcm1l ZCBhdG9taWNhbGx5IGJ5IHg4Ng0KPiBoYXJkd2FyZSwgYWxiZWl0IHdpdGggYSBzZXZlcmUgcGVy Zm9ybWFuY2UgcGVuYWx0eS4gIEFuIGltcG9ydGFudCBjb3JuZXINCj4gY2FzZQ0KPiBpcyB3aGVu IGEgc3RyYWRkbGVkIGFjY2VzcyBoaXRzIHR3byBwYWdlcyB3aGljaCBkaWZmZXIgaW4gd2hldGhl ciBhDQo+IHRyYW5zbGF0aW9uIGV4aXN0cywgb3IgaW4gbmV0IGFjY2VzcyByaWdodHMuDQo+IA0K PiBUaGUgdXNlIG9mIGh2bV9jb3B5KigpIGluIGh2bWVtdWxfd3JpdGUoKSBpcyBwcm9ibGVtYXRp YywgYmVjYXVzZSBpdA0KPiBwZXJmb3Jtcw0KPiBhIHRyYW5zbGF0aW9uIHRoZW4gY29tcGxldGVz IHRoZSBwYXJ0aWFsIHdyaXRlLCBiZWZvcmUgbW92aW5nIG9udG8gdGhlIG5leHQNCj4gdHJhbnNs YXRpb24uDQo+IA0KPiBJZiBhbiBpbmRpdmlkdWFsIGVtdWxhdGVkIHdyaXRlIHN0cmFkZGxlcyB0 d28gcGFnZXMsIHRoZSBmaXJzdCBvZiB3aGljaCBpcw0KPiB3cml0YWJsZSwgYW5kIHRoZSBzZWNv bmQgb2Ygd2hpY2ggaXMgbm90LCB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgd3JpdGUgd2lsbA0KPiBj b21wbGV0ZSBiZWZvcmUgI1BGIGlzIHJhaXNlZCBmcm9tIHRoZSBzZWNvbmQgaGFsZi4NCj4gDQo+ IFRoaXMgcmVzdWx0cyBpbiBndWVzdCBzdGF0ZSBjb3JydXB0aW9uIGFzIGEgc2lkZSBlZmZlY3Qg b2YgZW11bGF0aW9uLCB3aGljaA0KPiBoYXMgYmVlbiBvYnNlcnZlZCB0byBjYXVzZSB3aW5kb3dz IHRvIGNyYXNoIHdoaWxlIHVuZGVyIGludHJvc3BlY3Rpb24uDQo+IA0KPiBJbnRyb2R1Y2UgdGhl IGh2bWVtdWxfeyx1bn1tYXBfbGluZWFyX2FkZHIoKSBoZWxwZXJzLCB3aGljaCB0cmFuc2xhdGUg YW4NCj4gZW50aXJlIGNvbnRlbnRzIG9mIGEgbGluZWFyIGFjY2VzcywgYW5kIHZtYXAoKSB0aGUg dW5kZXJseWluZyBmcmFtZXMgdG8NCj4gcHJvdmlkZSBhIGNvbnRpZ3VvdXMgdmlydHVhbCBtYXBw aW5nIGZvciB0aGUgZW11bGF0b3IgdG8gdXNlLiAgVGhpcyBpcyB0aGUNCj4gc2FtZSBtZWNoYW5p c20gYXMgdXNlZCBieSB0aGUgc2hhZG93IGVtdWxhdGlvbiBjb2RlLg0KPiANCj4gVGhpcyB3aWxs IGNhdGNoIGFueSB0cmFuc2xhdGlvbiBpc3N1ZXMgYW5kIGFib3J0IHRoZSBlbXVsYXRpb24gYmVm b3JlIGFueQ0KPiBtb2RpZmljYXRpb25zIG9jY3VyLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQW5k cmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4NCj4gLS0tDQo+IENDOiBKYW4g QmV1bGljaCA8SkJldWxpY2hAc3VzZS5jb20+DQo+IENDOiBQYXVsIER1cnJhbnQgPHBhdWwuZHVy cmFudEBjaXRyaXguY29tPg0KPiBDQzogUmF6dmFuIENvam9jYXJ1IDxyY29qb2NhcnVAYml0ZGVm ZW5kZXIuY29tPg0KPiBDQzogTWloYWkgRG9uyJt1IDxtZG9udHVAYml0ZGVmZW5kZXIuY29tPg0K PiANCj4gV2hpbGUgdGhlIG1heGltdW0gc2l6ZSBvZiBsaW5lYXIgbWFwcGluZyBpcyBjYXBwZWQg YXQgMSBwYWdlLCB0aGUgbG9naWMgaW4NCj4gdGhlDQo+IGhlbHBlcnMgaXMgd3JpdHRlbiB0byB3 b3JrIHByb3Blcmx5IGFzIGh2bWVtdWxfY3R4dC0+bWZuW10gZ2V0cyBsb25nZXIsDQo+IHNwZWNp ZmljYWxseSB3aXRoIFhTQVZFIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBtaW5kLg0KPiANCj4g VGhpcyBoYXMgb25seSBoYWQgbGlnaHQgdGVzdGluZyBzbyBmYXIuDQo+IC0tLQ0KPiAgeGVuL2Fy Y2gveDg2L2h2bS9lbXVsYXRlLmMgICAgICAgIHwgMTc5DQo+ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tDQo+ICB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9lbXVsYXRlLmgg fCAgIDcgKysNCj4gIDIgZmlsZXMgY2hhbmdlZCwgMTY5IGluc2VydGlvbnMoKyksIDE3IGRlbGV0 aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vZW11bGF0ZS5jIGIv eGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMNCj4gaW5kZXggMzg0YWQwYi4uODA0YmVhNSAxMDA2 NDQNCj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMNCj4gKysrIGIveGVuL2FyY2gv eDg2L2h2bS9lbXVsYXRlLmMNCj4gQEAgLTQ5OCw2ICs0OTgsMTU5IEBAIHN0YXRpYyBpbnQgaHZt ZW11bF9kb19tbWlvX2FkZHIocGFkZHJfdA0KPiBtbWlvX2dwYSwNCj4gIH0NCj4gDQo+ICAvKg0K PiArICogTWFwIHRoZSBmcmFtZShzKSBjb3ZlcmluZyBhbiBpbmRpdmlkdWFsIGxpbmVhciBhY2Nl c3MsIGZvciB3cml0ZWFibGUNCj4gKyAqIGFjY2Vzcy4gIE1heSByZXR1cm4gTlVMTCBmb3IgTU1J Tywgb3IgRVJSX1BUUih+WDg2RU1VTF8qKSBmb3Igb3RoZXINCj4gZXJyb3JzDQo+ICsgKiBpbmNs dWRpbmcgRVJSX1BUUih+WDg2RU1VTF9PS0FZKSBmb3Igd3JpdGUtZGlzY2FyZCBtYXBwaW5ncy4N Cj4gKyAqDQo+ICsgKiBJbiBkZWJ1ZyBidWlsZHMsIG1hcCgpIGNoZWNrcyB0aGF0IGVhY2ggc2xv dCBpbiBodm1lbXVsX2N0eHQtPm1mbltdIGlzDQo+ICsgKiBjbGVhbiBiZWZvcmUgdXNlLCBhbmQg cG9pc2lvbnMgdW51c2VkIHNsb3RzIHdpdGggSU5WQUxJRF9NRk4uDQo+ICsgKi8NCj4gK3N0YXRp YyB2b2lkICpodm1lbXVsX21hcF9saW5lYXJfYWRkcigNCj4gKyAgICB1bnNpZ25lZCBsb25nIGxp bmVhciwgdW5zaWduZWQgaW50IGJ5dGVzLCB1aW50MzJfdCBwZmVjLA0KPiArICAgIHN0cnVjdCBo dm1fZW11bGF0ZV9jdHh0ICpodm1lbXVsX2N0eHQpDQo+ICt7DQo+ICsgICAgc3RydWN0IHZjcHUg KmN1cnIgPSBjdXJyZW50Ow0KPiArICAgIHZvaWQgKmVyciwgKm1hcHBpbmc7DQo+ICsNCj4gKyAg ICAvKiBGaXJzdCBhbmQgZmluYWwgZ2ZucyB3aGljaCBuZWVkIG1hcHBpbmcuICovDQo+ICsgICAg dW5zaWduZWQgbG9uZyBmcmFtZSA9IGxpbmVhciA+PiBQQUdFX1NISUZULCBmaXJzdCA9IGZyYW1l Ow0KPiArICAgIHVuc2lnbmVkIGxvbmcgZmluYWwgPSAobGluZWFyICsgYnl0ZXMgLSAhIWJ5dGVz KSA+PiBQQUdFX1NISUZUOw0KDQpEbyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGxpbmVhciArIGJ5 dGVzIG92ZXJmbG93aW5nIGhlcmU/DQoNCkFsc28sIGlzIHRoaXMgZXZlciBsZWdpdGltYXRlbHkg Y2FsbGVkIHdpdGggYnl0ZXMgPT0gMD8NCg0KPiArDQo+ICsgICAgLyoNCj4gKyAgICAgKiBtZm4g cG9pbnRzIHRvIHRoZSBuZXh0IGZyZWUgc2xvdC4gIEFsbCB1c2VkIHNsb3RzIGhhdmUgYSBwYWdl IHJlZmVyZW5jZQ0KPiArICAgICAqIGhlbGQgb24gdGhlbS4NCj4gKyAgICAgKi8NCj4gKyAgICBt Zm5fdCAqbWZuID0gJmh2bWVtdWxfY3R4dC0+bWZuWzBdOw0KPiArDQo+ICsgICAgLyoNCj4gKyAg ICAgKiBUaGUgY2FsbGVyIGhhcyBubyBsZWdpdGltYXRlIHJlYXNvbiBmb3IgdHJ5aW5nIGEgemVy by1ieXRlIHdyaXRlLCBidXQNCj4gKyAgICAgKiBmaW5hbCBpcyBjYWxjdWxhdGUgdG8gZmFpbCBz YWZlIGluIHJlbGVhc2UgYnVpbGRzLg0KPiArICAgICAqDQo+ICsgICAgICogVGhlIG1heGltdW0g d3JpdGUgc2l6ZSBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgYWRqYWNlbnQgbWZuc1tdDQo+IHdo aWNoDQo+ICsgICAgICogY2FuIGJlIHZtYXAoKSdkLCBhY2NvdXRpbmcgZm9yIHBvc3NpYmxlIG1p c2FsaWdubWVudCB3aXRoaW4gdGhlIHJlZ2lvbi4NCj4gKyAgICAgKiBUaGUgaGlnaGVyIGxldmVs IGVtdWxhdGlvbiBjYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdA0KPiAr ICAgICAqIG1mbnNbXSBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSByZXF1ZXN0ZWQgd3JpdGUgc2l6 ZS4NCj4gKyAgICAgKi8NCj4gKyAgICBpZiAoIGJ5dGVzID09IDAgfHwNCj4gKyAgICAgICAgIGZp bmFsIC0gZmlyc3QgPiBBUlJBWV9TSVpFKGh2bWVtdWxfY3R4dC0+bWZuKSAtIDEgKQ0KPiArICAg IHsNCg0KSSBndWVzcyBub3QsIHNvIHdoeSB0aGUgd2VpcmQgbG9va2luZyBjYWxjdWxhdGlvbiBm b3IgZmluYWw/IEl0J3MgdmFsdWUgd2lsbCBub3QgYmUgdXNlZCB3aGVuIGJ5dGVzID09IDAuDQoN Cj4gKyAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7DQo+ICsgICAgICAgIGdvdG8gdW5oYW5k bGVhYmxlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGRvIHsNCj4gKyAgICAgICAgZW51bSBodm1f dHJhbnNsYXRpb25fcmVzdWx0IHJlczsNCj4gKyAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZTsNCj4gKyAgICAgICAgcGFnZWZhdWx0X2luZm9fdCBwZmluZm87DQo+ICsgICAgICAgIHAybV90 eXBlX3QgcDJtdDsNCj4gKw0KPiArICAgICAgICByZXMgPSBodm1fdHJhbnNsYXRlX2dldF9wYWdl KGN1cnIsIGZyYW1lIDw8IFBBR0VfU0hJRlQsIHRydWUsIHBmZWMsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnBmaW5mbywgJnBhZ2UsIE5VTEwsICZwMm10KTsNCj4g Kw0KPiArICAgICAgICBzd2l0Y2ggKCByZXMgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgIGNh c2UgSFZNVFJBTlNfb2theToNCj4gKyAgICAgICAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgICAg IGNhc2UgSFZNVFJBTlNfYmFkX2xpbmVhcl90b19nZm46DQo+ICsgICAgICAgICAgICB4ODZfZW11 bF9wYWdlZmF1bHQocGZpbmZvLmVjLCBwZmluZm8ubGluZWFyLCAmaHZtZW11bF9jdHh0LT5jdHh0 KTsNCj4gKyAgICAgICAgICAgIGVyciA9IEVSUl9QVFIofihsb25nKVg4NkVNVUxfRVhDRVBUSU9O KTsNCj4gKyAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiArDQo+ICsgICAgICAgIGNhc2UgSFZNVFJB TlNfYmFkX2dmbl90b19tZm46DQo+ICsgICAgICAgICAgICBlcnIgPSBOVUxMOw0KPiArICAgICAg ICAgICAgZ290byBvdXQ7DQo+ICsNCj4gKyAgICAgICAgY2FzZSBIVk1UUkFOU19nZm5fcGFnZWRf b3V0Og0KPiArICAgICAgICBjYXNlIEhWTVRSQU5TX2dmbl9zaGFyZWQ6DQo+ICsgICAgICAgICAg ICBlcnIgPSBFUlJfUFRSKH4obG9uZylYODZFTVVMX1JFVFJZKTsNCj4gKyAgICAgICAgICAgIGdv dG8gb3V0Ow0KPiArDQo+ICsgICAgICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgICAgICBnb3RvIHVu aGFuZGxlYWJsZTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIC8qIEVycm9yIGNoZWNr aW5nLiAgQ29uZmlybSB0aGF0IHRoZSBjdXJyZW50IHNsb3QgaXMgY2xlYW4uICovDQo+ICsgICAg ICAgIEFTU0VSVChtZm5feCgqbWZuKSA9PSAwKTsNCj4gKw0KPiArICAgICAgICAqbWZuKysgPSBf bWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKTsNCj4gKyAgICAgICAgZnJhbWUrKzsNCj4gKw0KPiArICAg ICAgICBpZiAoIHAybV9pc19kaXNjYXJkX3dyaXRlKHAybXQpICkNCj4gKyAgICAgICAgew0KPiAr ICAgICAgICAgICAgZXJyID0gRVJSX1BUUih+KGxvbmcpWDg2RU1VTF9PS0FZKTsNCj4gKyAgICAg ICAgICAgIGdvdG8gb3V0Ow0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICB9IHdoaWxlICggZnJh bWUgPCBmaW5hbCApOw0KPiArDQo+ICsgICAgLyogRW50aXJlIGFjY2VzcyB3aXRoaW4gYSBzaW5n bGUgZnJhbWU/ICovDQo+ICsgICAgaWYgKCBmaXJzdCA9PSBmaW5hbCApDQo+ICsgICAgICAgIG1h cHBpbmcgPSBtYXBfZG9tYWluX3BhZ2UoaHZtZW11bF9jdHh0LT5tZm5bMF0pICsgKGxpbmVhciAm DQo+IH5QQUdFX01BU0spOw0KPiArICAgIC8qIE11bHRpcGxlIGZyYW1lcz8gTmVlZCB0byB2bWFw KCkuICovDQo+ICsgICAgZWxzZSBpZiAoIChtYXBwaW5nID0gdm1hcChodm1lbXVsX2N0eHQtPm1m biwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbiAtIGh2bWVtdWxfY3R4dC0+ bWZuKSkgPT0gTlVMTCApDQo+ICsgICAgICAgIGdvdG8gdW5oYW5kbGVhYmxlOw0KPiArDQo+ICsj aWZuZGVmIE5ERUJVRyAvKiBQb2lzaW9uIHVudXNlZCBtZm5bXXMgd2l0aCBJTlZBTElEX01GTi4g Ki8NCj4gKyAgICB3aGlsZSAoIG1mbiA8IGh2bWVtdWxfY3R4dC0+bWZuICsgQVJSQVlfU0laRSho dm1lbXVsX2N0eHQtPm1mbikgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgQVNTRVJUKG1mbl94KCpt Zm4pID09IDApOw0KPiArICAgICAgICAqbWZuKysgPSBJTlZBTElEX01GTjsNCj4gKyAgICB9DQo+ ICsjZW5kaWYNCj4gKw0KPiArICAgIHJldHVybiBtYXBwaW5nOw0KPiArDQo+ICsgdW5oYW5kbGVh YmxlOg0KPiArICAgIGVyciA9IEVSUl9QVFIofihsb25nKVg4NkVNVUxfVU5IQU5ETEVBQkxFKTsN Cj4gKw0KPiArIG91dDoNCj4gKyAgICAvKiBEcm9wIGFsbCBoZWxkIHJlZmVyZW5jZXMuICovDQo+ ICsgICAgd2hpbGUgKCBtZm4gPiBodm1lbXVsX2N0eHQtPm1mbiApDQo+ICsgICAgICAgIHB1dF9w YWdlKG1mbl90b19wYWdlKG1mbl94KCptZm4tLSkpKTsNCj4gKw0KPiArICAgIHJldHVybiBlcnI7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGh2bWVtdWxfdW5tYXBfbGluZWFyX2FkZHIoDQo+ ICsgICAgdm9pZCAqbWFwcGluZywgdW5zaWduZWQgbG9uZyBsaW5lYXIsIHVuc2lnbmVkIGludCBi eXRlcywNCj4gKyAgICBzdHJ1Y3QgaHZtX2VtdWxhdGVfY3R4dCAqaHZtZW11bF9jdHh0KQ0KPiAr ew0KPiArICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOw0KPiArICAg IHVuc2lnbmVkIGxvbmcgZnJhbWUgPSBsaW5lYXIgPj4gUEFHRV9TSElGVDsNCj4gKyAgICB1bnNp Z25lZCBsb25nIGZpbmFsID0gKGxpbmVhciArIGJ5dGVzIC0gISFieXRlcykgPj4gUEFHRV9TSElG VDsNCj4gKyAgICBtZm5fdCAqbWZuID0gJmh2bWVtdWxfY3R4dC0+bWZuWzBdOw0KPiArDQo+ICsg ICAgQVNTRVJUKGJ5dGVzID4gMCk7DQoNCldoeSBub3QgcmV0dXJuIGlmIGJ5dGVzID09IDA/IEkg a25vdyBpdCdzIG5vdCBhIGxlZ2l0aW1hdGUgY2FsbCBidXQgaW4gYSBub24tZGVidWcgYnVpbGQg aXQgd291bGQgcmVzdWx0IGluIHVubWFwX2RvbWFpbl9wYWdlKCkgYmVpbmcgY2FsbGVkIGJlbG93 Lg0KDQogIFBhdWwNCg0KPiArDQo+ICsgICAgaWYgKCBmcmFtZSA9PSBmaW5hbCApDQo+ICsgICAg ICAgIHVubWFwX2RvbWFpbl9wYWdlKG1hcHBpbmcpOw0KPiArICAgIGVsc2UNCj4gKyAgICAgICAg dnVubWFwKG1hcHBpbmcpOw0KPiArDQo+ICsgICAgZG8NCj4gKyAgICB7DQo+ICsgICAgICAgIEFT U0VSVChtZm5fdmFsaWQoKm1mbikpOw0KPiArICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShjdXJy ZCwgKm1mbik7DQo+ICsgICAgICAgIHB1dF9wYWdlKG1mbl90b19wYWdlKG1mbl94KCptZm4pKSk7 DQo+ICsNCj4gKyAgICAgICAgZnJhbWUrKzsNCj4gKyAgICAgICAgKm1mbisrID0gX21mbigwKTsg LyogQ2xlYW4gc2xvdCBmb3IgbWFwKCkncyBlcnJvciBjaGVja2luZy4gKi8NCj4gKw0KPiArICAg IH0gd2hpbGUgKCBmcmFtZSA8IGZpbmFsICk7DQo+ICsNCj4gKw0KPiArI2lmbmRlZiBOREVCVUcg LyogQ2hlY2sgKGFuZCBjbGVhbikgYWxsIHVudXNlZCBtZm5zLiAqLw0KPiArICAgIHdoaWxlICgg bWZuIDwgaHZtZW11bF9jdHh0LT5tZm4gKyBBUlJBWV9TSVpFKGh2bWVtdWxfY3R4dC0+bWZuKSAp DQo+ICsgICAgew0KPiArICAgICAgICBBU1NFUlQobWZuX2VxKCptZm4sIElOVkFMSURfTUZOKSk7 DQo+ICsgICAgICAgICptZm4rKyA9IF9tZm4oMCk7DQo+ICsgICAgfQ0KPiArI2VuZGlmDQo+ICt9 DQo+ICsNCj4gKy8qDQo+ICAgKiBDb252ZXJ0IGFkZHIgZnJvbSBsaW5lYXIgdG8gcGh5c2ljYWwg Zm9ybSwgdmFsaWQgb3ZlciB0aGUgcmFuZ2UNCj4gICAqIFthZGRyLCBhZGRyICsgKnJlcHMgKiBi eXRlc19wZXJfcmVwXS4gKnJlcHMgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nIHRvDQo+ICAgKiB0aGUg dmFsaWQgY29tcHV0ZWQgcmFuZ2UuIEl0IGlzIGFsd2F5cyA+MCB3aGVuIFg4NkVNVUxfT0tBWSBp cw0KPiByZXR1cm5lZC4NCj4gQEAgLTk4NywxMSArMTE0MCwxMSBAQCBzdGF0aWMgaW50IGh2bWVt dWxfd3JpdGUoDQo+ICAgICAgc3RydWN0IGh2bV9lbXVsYXRlX2N0eHQgKmh2bWVtdWxfY3R4dCA9 DQo+ICAgICAgICAgIGNvbnRhaW5lcl9vZihjdHh0LCBzdHJ1Y3QgaHZtX2VtdWxhdGVfY3R4dCwg Y3R4dCk7DQo+ICAgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50Ow0KPiAtICAgIHBhZ2Vm YXVsdF9pbmZvX3QgcGZpbmZvOw0KPiAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcmVwcyA9IDE7 DQo+ICAgICAgdWludDMyX3QgcGZlYyA9IFBGRUNfcGFnZV9wcmVzZW50IHwgUEZFQ193cml0ZV9h Y2Nlc3M7DQo+ICAgICAgc3RydWN0IGh2bV92Y3B1X2lvICp2aW8gPSAmY3Vyci0+YXJjaC5odm1f dmNwdS5odm1faW87DQo+ICAgICAgaW50IHJjOw0KPiArICAgIHZvaWQgKm1hcHBpbmc7DQo+IA0K PiAgICAgIGlmICggaXNfeDg2X3N5c3RlbV9zZWdtZW50KHNlZykgKQ0KPiAgICAgICAgICBwZmVj IHw9IFBGRUNfaW1wbGljaXQ7DQo+IEBAIC0xMDA3LDIzICsxMTYwLDE1IEBAIHN0YXRpYyBpbnQg aHZtZW11bF93cml0ZSgNCj4gICAgICAgICAgICh2aW8tPm1taW9fZ2xhID09IChhZGRyICYgUEFH RV9NQVNLKSkgKQ0KPiAgICAgICAgICByZXR1cm4gaHZtZW11bF9saW5lYXJfbW1pb193cml0ZShh ZGRyLCBieXRlcywgcF9kYXRhLCBwZmVjLA0KPiBodm1lbXVsX2N0eHQsIDEpOw0KPiANCj4gLSAg ICByYyA9IGh2bV9jb3B5X3RvX2d1ZXN0X2xpbmVhcihhZGRyLCBwX2RhdGEsIGJ5dGVzLCBwZmVj LCAmcGZpbmZvKTsNCj4gLQ0KPiAtICAgIHN3aXRjaCAoIHJjICkNCj4gLSAgICB7DQo+IC0gICAg Y2FzZSBIVk1UUkFOU19va2F5Og0KPiAtICAgICAgICBicmVhazsNCj4gLSAgICBjYXNlIEhWTVRS QU5TX2JhZF9saW5lYXJfdG9fZ2ZuOg0KPiAtICAgICAgICB4ODZfZW11bF9wYWdlZmF1bHQocGZp bmZvLmVjLCBwZmluZm8ubGluZWFyLCAmaHZtZW11bF9jdHh0LT5jdHh0KTsNCj4gLSAgICAgICAg cmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOw0KPiAtICAgIGNhc2UgSFZNVFJBTlNfYmFkX2dmbl90 b19tZm46DQo+ICsgICAgbWFwcGluZyA9IGh2bWVtdWxfbWFwX2xpbmVhcl9hZGRyKGFkZHIsIGJ5 dGVzLCBwZmVjLA0KPiBodm1lbXVsX2N0eHQpOw0KPiArICAgIGlmICggSVNfRVJSKG1hcHBpbmcp ICkNCj4gKyAgICAgICAgcmV0dXJuIH5QVFJfRVJSKG1hcHBpbmcpOw0KPiArICAgIGVsc2UgaWYg KCAhbWFwcGluZyApDQo+ICAgICAgICAgIHJldHVybiBodm1lbXVsX2xpbmVhcl9tbWlvX3dyaXRl KGFkZHIsIGJ5dGVzLCBwX2RhdGEsIHBmZWMsDQo+IGh2bWVtdWxfY3R4dCwgMCk7DQo+IC0gICAg Y2FzZSBIVk1UUkFOU19nZm5fcGFnZWRfb3V0Og0KPiAtICAgIGNhc2UgSFZNVFJBTlNfZ2ZuX3No YXJlZDoNCj4gLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfUkVUUlk7DQo+IC0gICAgZGVmYXVsdDoN Cj4gLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOw0KPiAtICAgIH0NCj4gKw0K PiArICAgIG1lbWNweShtYXBwaW5nLCBwX2RhdGEsIGJ5dGVzKTsNCj4gKw0KPiArICAgIGh2bWVt dWxfdW5tYXBfbGluZWFyX2FkZHIobWFwcGluZywgYWRkciwgYnl0ZXMsIGh2bWVtdWxfY3R4dCk7 DQo+IA0KPiAgICAgIHJldHVybiBYODZFTVVMX09LQVk7DQo+ICB9DQo+IGRpZmYgLS1naXQgYS94 ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9lbXVsYXRlLmggYi94ZW4vaW5jbHVkZS9hc20tDQo+IHg4 Ni9odm0vZW11bGF0ZS5oDQo+IGluZGV4IDg4NjQ3NzUuLjY1ZWZkNGUgMTAwNjQ0DQo+IC0tLSBh L3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2VtdWxhdGUuaA0KPiArKysgYi94ZW4vaW5jbHVkZS9h c20teDg2L2h2bS9lbXVsYXRlLmgNCj4gQEAgLTM3LDYgKzM3LDEzIEBAIHN0cnVjdCBodm1fZW11 bGF0ZV9jdHh0IHsNCj4gICAgICB1bnNpZ25lZCBsb25nIHNlZ19yZWdfYWNjZXNzZWQ7DQo+ICAg ICAgdW5zaWduZWQgbG9uZyBzZWdfcmVnX2RpcnR5Ow0KPiANCj4gKyAgICAvKg0KPiArICAgICAq IE1GTnMgYmVoaW5kIHRlbXBvcmFyeSBtYXBwaW5ncyBpbiB0aGUgd3JpdGUgY2FsbGJhY2suICBU aGUgbGVuZ3RoIGlzDQo+ICsgICAgICogYXJiaXRyYXJ5LCBhbmQgY2FuIGJlIGluY3JlYXNlZCBp ZiB3cml0ZXMgbG9uZ2VyIHRoYW4gUEFHRV9TSVpFIGFyZQ0KPiArICAgICAqIG5lZWRlZC4NCj4g KyAgICAgKi8NCj4gKyAgICBtZm5fdCBtZm5bMl07DQo+ICsNCj4gICAgICB1aW50MzJfdCBpbnRy X3NoYWRvdzsNCj4gDQo+ICAgICAgYm9vbF90IHNldF9jb250ZXh0Ow0KPiAtLQ0KPiAyLjEuNA0K DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVu Lm9yZy94ZW4tZGV2ZWwK