From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= Subject: Re: [PATCH v7 27/32] xen/x86: allow HVM guests to use hypercalls to bring up vCPUs Date: Thu, 8 Oct 2015 15:35:03 +0200 Message-ID: <56167107.5030008@citrix.com> References: <1443800943-17668-1-git-send-email-roger.pau@citrix.com> <1443800943-17668-28-git-send-email-roger.pau@citrix.com> <561250B0.8050600@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZkBLh-0005Xi-R2 for xen-devel@lists.xenproject.org; Thu, 08 Oct 2015 13:35:10 +0000 In-Reply-To: <561250B0.8050600@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Andrew Cooper , xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Ian Campbell , Jan Beulich List-Id: xen-devel@lists.xenproject.org RWwgMDUvMTAvMTUgYSBsZXMgMTIuMjgsIEFuZHJldyBDb29wZXIgaGEgZXNjcml0Ogo+IE9uIDAy LzEwLzE1IDE2OjQ4LCBSb2dlciBQYXUgTW9ubmUgd3JvdGU6Cj4+IEFsbG93IHRoZSB1c2FnZSBv ZiB0aGUgVkNQVU9QX2luaXRpYWxpc2UsIFZDUFVPUF91cCwgVkNQVU9QX2Rvd24gYW5kCj4+IFZD UFVPUF9pc191cCBoeXBlcmNhbGxzIGZyb20gSFZNIGd1ZXN0cy4KPj4KPj4gVGhpcyBwYXRjaCBp bnRyb2R1Y2VzIGEgbmV3IHN0cnVjdHVyZSAodmNwdV9odm1fY29udGV4dCkgdGhhdCBzaG91bGQg YmUgdXNlZAo+PiBpbiBjb25qdWN0aW9uIHdpdGggdGhlIFZDUFVPUF9pbml0aWFsaXNlIGh5cGVy Y2FsbCBpbiBvcmRlciB0byBpbml0aWFsaXplCj4+IHZDUFVzIGZvciBIVk0gZ3Vlc3RzLgo+Pgo+ PiBTaWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNvbT4K Pj4gU2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNv bT4KPj4gQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KPj4gQ2M6IEFuZHJldyBD b29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Cj4+IENjOiBJYW4gQ2FtcGJlbGwgPGlh bi5jYW1wYmVsbEBjaXRyaXguY29tPgo+PiBDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5v LnN0YWJlbGxpbmlAY2l0cml4LmNvbT4KPj4gLS0tCj4+IENoYW5nZXMgc2luY2UgdjY6Cj4+ICAt IEFkZCBjb21tZW50cyB0byBjbGFyaWZ5IHNvbWUgaW5pdGlhbGl6YXRpb25zLgo+PiAgLSBJbnRy b2R1Y2UgYSBnZW5lcmljIGRlZmF1bHRfaW5pdGlhbGl6ZV92Y3B1IHRoYXQncyB1c2VkIHRvIGlu aXRpYWxpemUgYQo+PiAgICBBUk0gdkNQVSBvciBhIHg4NiBQViB2Q1BVLgo+PiAgLSBNb3ZlIHRo ZSB1bmRlZiBvZiB0aGUgU0VHIG1hY3JvLgo+PiAgLSBGaXggdGhlIHNpemUgb2YgdGhlIGVmbGFn cyByZWdpc3RlciwgaXQgc2hvdWxkIGJlIDMyYml0cy4KPj4gIC0gQWRkIGEgY29tbWVudCByZWdh cmRpbmcgdGhlIHZhbHVlIG9mIHRoZSAxMi0xNSBiaXRzIG9mIHRoZSBfYXIgZmllbGRzLgo+PiAg LSBSZW1vdmUgdGhlIDE2Yml0IHN0cnVjdXRyZSwgdGhlIDMyYml0IG9uZSBjYW4gYmUgdXNlZCB0 byBzdGFydCB0aGUgY3B1IGluCj4+ICAgIHJlYWwgbW9kZS4KPj4gIC0gQWRkIHNvbWUgc2FuaXR5 IGNoZWNrcyB0byB0aGUgdmFsdWVzIHBhc3NlZCBpbi4KPj4gIC0gQWRkIHBhZGRpbmdzIHRvIHZj cHVfaHZtX2NvbnRleHQgc28gdGhlIGxheW91dCBvbiAzMi82NGJpdHMgaXMgdGhlIHNhbWUuCj4+ ICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgY29tcGF0IHZlcnNpb24gb2YgVkNQVU9QX2luaXRpYWxp c2UuCj4+Cj4+IENoYW5nZXMgc2luY2UgdjU6Cj4+ICAtIEZpeCBhIGNvZGluZyBzdHlsZSBpc3N1 ZS4KPj4gIC0gTWVyZ2UgdGhlIGNvZGUgZnJvbSB3aXAtZG1saXRlLXY1LXJlZmFjdG9yIGJ5IEFu ZHJldyBpbiBvcmRlciB0byByZWR1Y2UKPj4gICAgYmxvYXQuCj4+ICAtIFByaW50IHRoZSBvZmZl bmRpbmcgJWNyMyBpbiBjYXNlIG9mIGVycm9yIHdoZW4gdXNpbmcgc2hhZG93Lgo+PiAgLSBSZWR1 Y2UgdGhlIHNjb3BlIG9mIGxvY2FsIHZhcmlhYmxlcyBpbiBhcmNoX2luaXRpYWxpemVfdmNwdS4K Pj4gIC0gcy9jdXJyZW50LT5kb21haW4vdi0+ZG9tYWluL2cgaW4gYXJjaF9pbml0aWFsaXplX3Zj cHUuCj4+ICAtIEV4cGFuZCB0aGUgY29tbWVudCBpbiBwdWJsaWMvdmNwdS5oIHRvIGRvY3VtZW50 IHRoZSB1c2FnZSBvZgo+PiAgICB2Y3B1X2h2bV9jb250ZXh0IGZvciBIVk0gZ3Vlc3RzLgo+PiAg LSBBZGQgbXlzZWxmIGFzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGZvciB0aGUgcHVibGljIGh2bV92 Y3B1LmggaGVhZGVyLgo+Pgo+PiBDaGFuZ2VzIHNpbmNlIHY0Ogo+PiAgLSBEb24ndCBhc3N1bWUg bW9kZSBpcyA2NEIsIGFkZCBhbiBleHBsaWNpdCBjaGVjay4KPj4gIC0gRG9uJ3Qgc2V0IFRGX2tl cm5lbF9tb2RlLCBpdCBpcyBvbmx5IG5lZWRlZCBmb3IgUFYgZ3Vlc3RzLgo+PiAgLSBEb24ndCBz ZXQgQ1IwX0VUIHVuY29uZGl0aW9uYWxseS4KPj4gLS0tCj4+ICB4ZW4vYXJjaC94ODYvZG9tYWlu LmMgICAgICAgICAgICAgfCAxODUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPj4gIHhlbi9hcmNoL3g4Ni9odm0vaHZtLmMgICAgICAgICAgICB8ICAgOCArKwo+PiAgeGVu L2NvbW1vbi9jb21wYXQvZG9tYWluLmMgICAgICAgIHwgIDcxICsrKysrKysrKysrLS0tLQo+PiAg eGVuL2NvbW1vbi9kb21haW4uYyAgICAgICAgICAgICAgIHwgIDU2ICsrKysrKysrKy0tLQo+PiAg eGVuL2luY2x1ZGUvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKPj4gIHhlbi9pbmNsdWRl L2FzbS14ODYvZG9tYWluLmggICAgICB8ICAgMyArCj4+ICB4ZW4vaW5jbHVkZS9wdWJsaWMvaHZt L2h2bV92Y3B1LmggfCAxNDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIHhlbi9p bmNsdWRlL3B1YmxpYy92Y3B1LmggICAgICAgICB8ICAgNiArLQo+PiAgeGVuL2luY2x1ZGUveGxh dC5sc3QgICAgICAgICAgICAgIHwgICAzICsKPj4gIDkgZmlsZXMgY2hhbmdlZCwgNDQ4IGluc2Vy dGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNs dWRlL3B1YmxpYy9odm0vaHZtX3ZjcHUuaAo+Pgo+PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2 L2RvbWFpbi5jIGIveGVuL2FyY2gveDg2L2RvbWFpbi5jCj4+IGluZGV4IGEzYjFjOWIuLmFmNWZl ZWEgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9hcmNoL3g4Ni9kb21haW4uYwo+PiArKysgYi94ZW4vYXJj aC94ODYvZG9tYWluLmMKPj4gQEAgLTM3LDYgKzM3LDcgQEAKPj4gICNpbmNsdWRlIDx4ZW4vd2Fp dC5oPgo+PiAgI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KPj4gICNpbmNsdWRlIDxwdWJs aWMvc3lzY3RsLmg+Cj4+ICsjaW5jbHVkZSA8cHVibGljL2h2bS9odm1fdmNwdS5oPgo+PiAgI2lu Y2x1ZGUgPGFzbS9yZWdzLmg+Cj4+ICAjaW5jbHVkZSA8YXNtL21jMTQ2ODE4cnRjLmg+Cj4+ICAj aW5jbHVkZSA8YXNtL3N5c3RlbS5oPgo+PiBAQCAtMTE3Niw2ICsxMTc3LDE5MCBAQCBpbnQgYXJj aF9zZXRfaW5mb19ndWVzdCgKPj4gICN1bmRlZiBjCj4+ICB9Cj4+ICAKPj4gKy8qIENhbGxlZCBi eSBWQ1BVT1BfaW5pdGlhbGlzZSBmb3IgSFZNIGd1ZXN0cy4gKi8KPj4gK2ludCBhcmNoX3NldF9p bmZvX2h2bV9ndWVzdChzdHJ1Y3QgdmNwdSAqdiwgdmNwdV9odm1fY29udGV4dF90ICpjdHgpCj4+ ICt7Cj4+ICsgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnVyZWdzID0gJnYtPmFyY2gudXNlcl9y ZWdzOwo+PiArICAgIHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVyIGNzLCBkcywgc3MsIGVzLCB0cjsK Pj4gKwo+PiArICAgIHN3aXRjaCAoIGN0eC0+bW9kZSApCj4+ICsgICAgewo+PiArICAgIGRlZmF1 bHQ6Cj4+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsgICAgY2FzZSBWQ1BVX0hW TV9NT0RFXzMyQjoKPj4gKyAgICB7Cj4+ICsgICAgICAgIGNvbnN0IHN0cnVjdCB2Y3B1X2h2bV94 ODZfMzIgKnJlZ3MgPSAmY3R4LT5jcHVfcmVncy54ODZfMzI7Cj4+ICsgICAgICAgIHVpbnQzMl90 IGxpbWl0Owo+PiArCj4+ICsjZGVmaW5lIFNFRyhzLCByKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICsgICAgKHN0cnVjdCBzZWdtZW50 X3JlZ2lzdGVyKXsgLnNlbCA9IDAsIC5iYXNlID0gKHIpLT5zICMjIF9iYXNlLCAgICAgICBcCj4+ ICsgICAgICAgICAgICAubGltaXQgPSAociktPnMgIyMgX2xpbWl0LCAuYXR0ci5ieXRlcyA9IChy KS0+cyAjIyBfYXIgfQo+PiArICAgICAgICBjcyA9IFNFRyhjcywgcmVncyk7Cj4+ICsgICAgICAg IGRzID0gU0VHKGRzLCByZWdzKTsKPj4gKyAgICAgICAgc3MgPSBTRUcoc3MsIHJlZ3MpOwo+PiAr ICAgICAgICBlcyA9IFNFRyhlcywgcmVncyk7Cj4+ICsgICAgICAgIHRyID0gU0VHKHRyLCByZWdz KTsKPj4gKyN1bmRlZiBTRUcKPj4gKwo+PiArICAgICAgICAvKiBCYXNpYyBzYW5pdHkgY2hlY2tz LiAqLwo+PiArICAgICAgICBpZiAoIGNzLmF0dHIuZmllbGRzLnBhZCAhPSAwIHx8IGRzLmF0dHIu ZmllbGRzLnBhZCAhPSAwIHx8Cj4+ICsgICAgICAgICAgICAgc3MuYXR0ci5maWVsZHMucGFkICE9 IDAgfHwgZXMuYXR0ci5maWVsZHMucGFkICE9IDAgfHwKPj4gKyAgICAgICAgICAgICB0ci5hdHRy LmZpZWxkcy5wYWQgIT0gMCApCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICAgIGdwcmludGso WEVOTE9HX0VSUiwgIkF0dHJpYnV0ZSBiaXRzIDEyLTE1IG9mIHRoZSBzZWdtZW50cyBhcmUgbm90 IG51bGxcbiIpOwo+IAo+IEkgd291bGQgdXNlICd6ZXJvJyBhcyBvcHBvc2VkIHRvICdudWxsJyBo ZXJlLiAgVGhlcmUgaXMgbm90aGluZyB0byBkbwo+IHdpdGggcG9pbnRlcnMgaGVyZS4KCkRvbmUu Cgo+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiAr ICAgICAgICBsaW1pdCA9IGNzLmxpbWl0ICogKGNzLmF0dHIuZmllbGRzLmcgPyBQQUdFX1NJWkUg OiAxKTsKPiAKPiBUaGlzIHdpbGwgb3ZlcmZsb3cgaW4gdGhlIGNvbW1vbiBjYXNlLiAgQ2FsY3Vs YXRpb24gb2YgdGhlIGxpbWl0IGlzIGEKPiBsaXR0bGUgYXdrd2FyZC4gIEkgYmVsaWV2ZSB0aGlz IHNob3VsZCBkbzoKPiAKPiBsaW1pdCA9IGNzLmxpbWl0Cj4gaWYgKCBjcy5hdHRyLmZpZWxkcy5n ICkKPiAgICAgbGltaXQgPSAobGltaXQgPDwgMTIpIHwgMHhmZmY7Cj4gCj4gSW4gdGhlIGNhc2Ug dGhhdCBnIGlzIHNldCBhbmQgY3MgaXMgYSBmbGF0IHNlZ21lbnQsIGxpbWl0IHNob3VsZCBoYXZl Cj4gdGhlIHZhbHVlIH4wVSwgcmF0aGVyIHRoYW4gMCB3aGljaCBpcyB3aGF0IHlvdXIgY2FsY3Vs YXRpb24gd2lsbCBhY2hpZXZlLgoKRml4ZWQuCgo+PiArICAgICAgICBpZiAoIHJlZ3MtPmVpcCA+ IGxpbWl0ICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJS LCAiRUlQIGFkZHJlc3MgaXMgb3V0c2lkZSBvZiB0aGUgQ1MgbGltaXRcbiIpOwo+IAo+IEluIGFs bCBjYXNlcywgcGxlYXNlIHByaW50IG91dCB0aGUgdmFsdWVzLCB0byBtYWtlIHRoZSBlcnJvciBt ZXNzYWdlCj4gbW9yZSBoZWxwZnVsLgo+IAo+IGUuZy4gIkVJUCAoJTA4eCkgb3V0c2lkZSBDUyBs aW1pdCAoJTA4eCkiCj4gCj4+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAg ICAgfQo+PiArCj4+ICsgICAgICAgIGlmICggZHMuYXR0ci5maWVsZHMuZHBsID4gY3MuYXR0ci5m aWVsZHMuZHBsICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLCAiRFBMIG9mIERTIGlzIGdyZWF0ZXIgdGhhbiBEUEwgb2YgQ1NcbiIpOwo+PiArICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICBpZiAo IHNzLmF0dHIuZmllbGRzLmRwbCAhPSBjcy5hdHRyLmZpZWxkcy5kcGwgKQo+PiArICAgICAgICB7 Cj4+ICsgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJEUEwgb2YgU1MgaXMgZGlmZmVy ZW50IHRoYW4gRFBMIG9mIENTXG4iKTsKPj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgaWYgKCBlcy5hdHRyLmZpZWxkcy5kcGwgPiBj cy5hdHRyLmZpZWxkcy5kcGwgKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgICBncHJpbnRr KFhFTkxPR19FUlIsICJEUEwgb2YgRVMgaXMgZ3JlYXRlciB0aGFuIERQTCBvZiBDU1xuIik7Cj4+ ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAg ICAgIGlmICggKChyZWdzLT5lZmVyICYgRUZFUl9MTUEpICYmICEocmVncy0+ZWZlciAmIEVGRVJf TE1FKSkgfHwKPj4gKyAgICAgICAgICAgICAoKHJlZ3MtPmVmZXIgJiBFRkVSX0xNRSkgJiYgIShy ZWdzLT5lZmVyICYgRUZFUl9MTUEpKSApCj4gCj4gVGhpcyBzaW1wbGlmaWVzIHRvICggKCEhKHJl Z3MtPmVmZXIgJiBFRkVSX0xNQSkpIF4gKCEhKHJlZ3MtPmVmZXIgJgo+IEVGRVJfTE1FKSkgKQo+ IAo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJFRkVS LkxNQSBhbmQgRUZFUi5MTUUgbXVzdCBiZSBib3RoIHNldFxuIik7Cj4gCj4gQW5kIHRoaXMgc2hv dWxkIHNheSAiYm90aCB0aGUgc2FtZSIsIHJhdGhlciB0aGFuIGJvdGggc2V0LgoKSSd2ZSBmaXhl ZCBhbGwgdGhlIGVycm9yIG1lc3NhZ2VzIHRvIGJlIG1vcmUgZGVzY3JpcHRpdmUuCgo+IEhhdmlu ZyBzYWlkIHRoaXMsIEkgc3RpbGwgZG9uJ3QgdGhpbmsgaXQgaXMgc2Vuc2libGUgdG8gcmVxdWly ZSB0aGF0IExNQQo+IGlzIHNldCwgc2VlaW5nIGFzIGl0IGlzIHN0cmljdGx5IGEgcmVhZC1vbmx5 IGJpdCBpbiBFRkVSLiAgSSB3b3VsZAo+IHN1Z2dlc3Qga2V5aW5nIG9uIExNRSBhbG9uZSwgYW5k IGF1dG9tYXRpY2FsbHkgT1JpbmcgaW4gTE1BLCB3aGljaAo+IG1hdGNoZXMgdGhlIGJlaGF2aW91 ciBvZiBoYXJkd2FyZSBtb3JlIGNsb3NlbHkuCgpJJ3ZlIGRvbmUgYXMgc3VnZ2VzdGVkIGFuZCBt YWRlIExNQSBvcHRpb25hbCwgWGVuIHdpbGwgc2V0IGl0IGJ5IGRlZmF1bHQKd2hlbiBMTUUgaXMg c2V0IGJ5IHRoZSB1c2VyLgoKPj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArICAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICAgdXJlZ3MtPnJheCAgICA9IHJlZ3MtPmVheDsKPj4gKyAg ICAgICAgdXJlZ3MtPnJjeCAgICA9IHJlZ3MtPmVjeDsKPj4gKyAgICAgICAgdXJlZ3MtPnJkeCAg ICA9IHJlZ3MtPmVkeDsKPj4gKyAgICAgICAgdXJlZ3MtPnJieCAgICA9IHJlZ3MtPmVieDsKPj4g KyAgICAgICAgdXJlZ3MtPnJzcCAgICA9IHJlZ3MtPmVzcDsKPj4gKyAgICAgICAgdXJlZ3MtPnJi cCAgICA9IHJlZ3MtPmVicDsKPj4gKyAgICAgICAgdXJlZ3MtPnJzaSAgICA9IHJlZ3MtPmVzaTsK Pj4gKyAgICAgICAgdXJlZ3MtPnJkaSAgICA9IHJlZ3MtPmVkaTsKPj4gKyAgICAgICAgdXJlZ3Mt PnJpcCAgICA9IHJlZ3MtPmVpcDsKPj4gKyAgICAgICAgdXJlZ3MtPnJmbGFncyA9IHJlZ3MtPmVm bGFnczsKPj4gKwo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBdID0gcmVn cy0+Y3IwOwo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzNdID0gcmVncy0+ Y3IzOwo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdID0gcmVncy0+Y3I0 Owo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2VmZXIgID0gcmVncy0+ZWZlcjsK Pj4gKyAgICB9Cj4+ICsgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICBjYXNlIFZDUFVfSFZNX01PREVf NjRCOgo+PiArICAgIHsKPj4gKyAgICAgICAgY29uc3Qgc3RydWN0IHZjcHVfaHZtX3g4Nl82NCAq cmVncyA9ICZjdHgtPmNwdV9yZWdzLng4Nl82NDsKPj4gKwo+PiArICAgICAgICAvKiBCYXNpYyBz YW5pdHkgY2hlY2tzLiAqLwo+PiArICAgICAgICBpZiAoICFpc19jYW5vbmljYWxfYWRkcmVzcyhy ZWdzLT5yaXApICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLCAiUklQIGNvbnRhaW5zIGEgbm9uLWNhbm9uaWNhbCBhZGRyZXNzXG4iKTsKPj4gKyAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgaWYg KCAhKHJlZ3MtPmNyMCAmIFg4Nl9DUjBfUEcpICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAg ICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiQ1IwIGRvZXNuJ3QgaGF2ZSBwYWdpbmcgZW5hYmxlZFxu Iik7Cj4+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICAgfQo+PiArCj4+ ICsgICAgICAgIGlmICggIShyZWdzLT5jcjQgJiBYODZfQ1I0X1BBRSkgKQo+PiArICAgICAgICB7 Cj4+ICsgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJDUjQgZG9lc24ndCBoYXZlIFBB RSBlbmFibGVkXG4iKTsKPj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArICAgICAg ICB9Cj4+ICsKPj4gKyAgICAgICAgaWYgKCAocmVncy0+ZWZlciAmIChFRkVSX0xNRSB8IEVGRVJf TE1BKSkgIT0gKEVGRVJfTE1FIHwgRUZFUl9MTUEpICkKPj4gKyAgICAgICAgewo+PiArICAgICAg ICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiRUZFUiBkb2Vzbid0IGhhdmUgTE1FIG9yIExNQSBl bmFibGVkXG4iKTsKPj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArICAgICAgICB9 Cj4+ICsKPj4gKyAgICAgICAgdXJlZ3MtPnJheCAgICA9IHJlZ3MtPnJheDsKPj4gKyAgICAgICAg dXJlZ3MtPnJjeCAgICA9IHJlZ3MtPnJjeDsKPj4gKyAgICAgICAgdXJlZ3MtPnJkeCAgICA9IHJl Z3MtPnJkeDsKPj4gKyAgICAgICAgdXJlZ3MtPnJieCAgICA9IHJlZ3MtPnJieDsKPj4gKyAgICAg ICAgdXJlZ3MtPnJzcCAgICA9IHJlZ3MtPnJzcDsKPj4gKyAgICAgICAgdXJlZ3MtPnJicCAgICA9 IHJlZ3MtPnJicDsKPj4gKyAgICAgICAgdXJlZ3MtPnJzaSAgICA9IHJlZ3MtPnJzaTsKPj4gKyAg ICAgICAgdXJlZ3MtPnJkaSAgICA9IHJlZ3MtPnJkaTsKPj4gKyAgICAgICAgdXJlZ3MtPnJpcCAg ICA9IHJlZ3MtPnJpcDsKPj4gKyAgICAgICAgdXJlZ3MtPnJmbGFncyA9IHJlZ3MtPnJmbGFnczsK Pj4gKwo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBdID0gcmVncy0+Y3Iw Owo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzNdID0gcmVncy0+Y3IzOwo+ PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdID0gcmVncy0+Y3I0Owo+PiAr ICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2VmZXIgID0gcmVncy0+ZWZlcjsKPj4gKwo+ PiArI2RlZmluZSBTRUcoYiwgbCwgYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+PiArICAgIChzdHJ1Y3Qgc2VnbWVudF9yZWdpc3Rlcil7IC5z ZWwgPSAwLCAuYmFzZSA9IChiKSwgLmxpbWl0ID0gKGwpLCAgICAgXAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC5hdHRyLmJ5dGVzID0gKGEpIH0KPj4gKyAgICAgICAgY3MgPSBT RUcoMCwgfjB1LCAweGE5Yik7IC8qIDY0Yml0IGNvZGUgc2VnbWVudC4gKi8KPj4gKyAgICAgICAg ZHMgPSBzcyA9IGVzID0gU0VHKDAsIH4wdSwgMHhjOTMpOwo+PiArICAgICAgICB0ciA9IFNFRygw LCAweDY3LCAweDhiKTsgLyogNjRiaXQgVFNTIChidXN5KS4gKi8KPj4gKyN1bmRlZiBTRUcKPiAK PiBJIHdvdWxkIGJlIHRlbXB0ZWQgdG8gZ2V0IHJpZCBvZiB0aGlzIG1hY3JvIGVudGlyZWx5LiAg VGhlIG90aGVyIG1hY3JvCj4gd2FzIHRvIGhpZGUgYWxsIHRoZSByZWdzLT4gcmVmZXJlbmNlcywg YnV0IHRoaXMgaXMgZW50aXJlbHkgZnJvbSBjb25zdGFudHMuCgpJTUhPIEkgdGhpbmsgaXQgbWFr ZXMgdGhlIGNvZGUgZWFzaWVyIHRvIHVuZGVyc3RhbmQsIGJ1dCBJJ20gbm90IGdvaW5nCnRvIGFy Z3VlIGFib3V0IGl0LiBEb2VzIGFueW9uZSBlbHNlIGhhcyBhIHByZWZlcmVuY2Ugd2hldGhlciB0 byByZW1vdmUKdGhlIG1hY3JvIG9yIG5vdD8KClJvZ2VyLgoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRl dmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==