From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH v4 26/31] xen/x86: allow HVM guests to use hypercalls to bring up vCPUs Date: Fri, 7 Aug 2015 20:03:17 +0100 Message-ID: <55C500F5.1050809@citrix.com> References: <1438942688-7610-1-git-send-email-roger.pau@citrix.com> <1438942688-7610-27-git-send-email-roger.pau@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 1ZNmvf-0007MQ-Cz for xen-devel@lists.xenproject.org; Fri, 07 Aug 2015 19:03:43 +0000 In-Reply-To: <1438942688-7610-27-git-send-email-roger.pau@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: Roger Pau Monne , xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Ian Campbell , Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gMDcvMDgvMTUgMTE6MTgsIFJvZ2VyIFBhdSBNb25uZSB3cm90ZToKPiBBbGxvdyB0aGUgdXNh Z2Ugb2YgdGhlIFZDUFVPUF9pbml0aWFsaXNlLCBWQ1BVT1BfdXAsIFZDUFVPUF9kb3duIGFuZAo+ IFZDUFVPUF9pc191cCBoeXBlcmNhbGxzIGZyb20gSFZNIGd1ZXN0cy4KPgo+IFRoaXMgcGF0Y2gg aW50cm9kdWNlcyBhIG5ldyBzdHJ1Y3R1cmUgKHZjcHVfaHZtX2NvbnRleHQpIHRoYXQgc2hvdWxk IGJlIHVzZWQKPiBpbiBjb25qdWN0aW9uIHdpdGggdGhlIFZDUFVPUF9pbml0aWFsaXNlIGh5cGVy Y2FsbCBpbiBvcmRlciB0byBpbml0aWFsaXplCj4gdkNQVXMgZm9yIEhWTSBndWVzdHMuCj4KPiBT aWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNvbT4KPiBD YzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgo+IENjOiBBbmRyZXcgQ29vcGVyIDxh bmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgo+IENjOiBJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVs bEBjaXRyaXguY29tPgo+IENjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHN0ZWZhbm8uc3RhYmVsbGlu aUBjaXRyaXguY29tPgo+IC0tLQo+ICB4ZW4vYXJjaC9hcm0vZG9tYWluLmMgICAgICAgICAgICAg fCAgMjQgKysrKysrCj4gIHhlbi9hcmNoL3g4Ni9kb21haW4uYyAgICAgICAgICAgICB8IDE1NiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICB4ZW4vYXJjaC94ODYvaHZtL2h2 bS5jICAgICAgICAgICAgfCAgIDggKysKPiAgeGVuL2NvbW1vbi9kb21haW4uYyAgICAgICAgICAg ICAgIHwgIDE2ICstLS0KPiAgeGVuL2luY2x1ZGUvcHVibGljL2h2bS9odm1fdmNwdS5oIHwgMTY4 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIHhlbi9pbmNsdWRlL3hl bi9kb21haW4uaCAgICAgICAgICB8ICAgMiArCj4gIDYgZmlsZXMgY2hhbmdlZCwgMzU5IGluc2Vy dGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1 ZGUvcHVibGljL2h2bS9odm1fdmNwdS5oCj4KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2Rv bWFpbi5jIGIveGVuL2FyY2gvYXJtL2RvbWFpbi5jCj4gaW5kZXggYjJiZmM3ZC4uYjIwMDM1ZCAx MDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vZG9tYWluLmMKPiArKysgYi94ZW4vYXJjaC9hcm0v ZG9tYWluLmMKPiBAQCAtNzUyLDYgKzc1MiwzMCBAQCBpbnQgYXJjaF9zZXRfaW5mb19ndWVzdCgK PiAgICAgIHJldHVybiAwOwo+ICB9Cj4gIAo+ICtpbnQgYXJjaF9pbml0aWFsaXplX3ZjcHUoc3Ry dWN0IHZjcHUgKnYsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnKQo+ICt7Cj4gKyAg ICBzdHJ1Y3QgdmNwdV9ndWVzdF9jb250ZXh0ICpjdHh0Owo+ICsgICAgc3RydWN0IGRvbWFpbiAq ZCA9IGN1cnJlbnQtPmRvbWFpbjsKPiArICAgIGludCByYzsKPiArCj4gKyAgICBpZiAoIChjdHh0 ID0gYWxsb2NfdmNwdV9ndWVzdF9jb250ZXh0KCkpID09IE5VTEwgKQoKSSBoYXZlIGEgcGF0Y2gg dG8gZHJvcCB0aGlzIHthbGxvYyxmcmVlfV92Y3B1X2d1ZXN0X2NvbnRleHQoKQppbmZyYXN0cnVj dHVyZSBpbiA0LjcKCkl0IHdhcyBkb25lIHRvIGF2b2lkIGlzc3Vpbmcgb3JkZXIgMSBkb21oZWFw IGFsbG9jYXRpb25zIGFuZCBzcHVyaW91c2x5CmZhaWxpbmcgYmVjYXVzZSBvZiBtZW1vcnkgZnJh Z21lbnRhdGlvbiwgYnV0IHZtYWxsb2MoKSBpcyBub3cgYSBzdHJpY3RseQpiZXR0ZXIgb3B0aW9u LgoKPiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPiArCj4gKyAgICBpZiAoIGNvcHlfZnJvbV9n dWVzdChjdHh0LCBhcmcsIDEpICkKPiArICAgIHsKPiArICAgICAgICBmcmVlX3ZjcHVfZ3Vlc3Rf Y29udGV4dChjdHh0KTsKPiArICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArICAgIH0KPiArCj4g KyAgICBkb21haW5fbG9jayhkKTsKPiArICAgIHJjID0gdi0+aXNfaW5pdGlhbGlzZWQgPyAtRUVY SVNUIDogYXJjaF9zZXRfaW5mb19ndWVzdCh2LCBjdHh0KTsKPiArICAgIGRvbWFpbl91bmxvY2so ZCk7Cj4gKwo+ICsgICAgZnJlZV92Y3B1X2d1ZXN0X2NvbnRleHQoY3R4dCk7Cj4gKwo+ICsgICAg cmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICBpbnQgYXJjaF92Y3B1X3Jlc2V0KHN0cnVjdCB2Y3B1ICp2 KQo+ICB7Cj4gICAgICB2Y3B1X2VuZF9zaHV0ZG93bl9kZWZlcnJhbCh2KTsKPiBkaWZmIC0tZ2l0 IGEveGVuL2FyY2gveDg2L2RvbWFpbi5jIGIveGVuL2FyY2gveDg2L2RvbWFpbi5jCj4gaW5kZXgg NDMyZmU0My4uNGE3ZjhkOSAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvZG9tYWluLmMKPiAr KysgYi94ZW4vYXJjaC94ODYvZG9tYWluLmMKPiBAQCAtMzcsNiArMzcsNyBAQAo+ICAjaW5jbHVk ZSA8eGVuL3dhaXQuaD4KPiAgI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KPiAgI2luY2x1 ZGUgPHB1YmxpYy9zeXNjdGwuaD4KPiArI2luY2x1ZGUgPHB1YmxpYy9odm0vaHZtX3ZjcHUuaD4K PiAgI2luY2x1ZGUgPGFzbS9yZWdzLmg+Cj4gICNpbmNsdWRlIDxhc20vbWMxNDY4MThydGMuaD4K PiAgI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KPiBAQCAtMTEzNSw2ICsxMTM2LDE2MSBAQCBpbnQg YXJjaF9zZXRfaW5mb19ndWVzdCgKPiAgI3VuZGVmIGMKPiAgfQo+ICAKPiArLyogQ2FsbGVkIGJ5 IFZDUFVPUF9pbml0aWFsaXNlIGZvciBIVk0gZ3Vlc3RzLiAqLwo+ICtzdGF0aWMgaW50IGFyY2hf c2V0X2luZm9faHZtX2d1ZXN0KHN0cnVjdCB2Y3B1ICp2LCB2Y3B1X2h2bV9jb250ZXh0X3QgKmN0 eCkKPiArewo+ICsgICAgc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgc2VnOwo+ICsKPiArI2RlZmlu ZSBnZXRfY29udGV4dF9zZWcoY3R4LCBzZWcsIGYpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiArICAgIChjdHgpLT5tb2RlID09IFZDUFVfSFZNX01PREVfMTZCID8g KGN0eCktPmNwdV9yZWdzLng4Nl8xNi5zZWcjI18jI2YgOiAgIFwKPiArICAgIChjdHgpLT5tb2Rl ID09IFZDUFVfSFZNX01PREVfMzJCID8gKGN0eCktPmNwdV9yZWdzLng4Nl8zMi5zZWcjI18jI2Yg OiAgIFwKPiArICAgIChjdHgpLT5jcHVfcmVncy54ODZfNjQuc2VnIyNfIyNmCgpJIHdvdWxkIGJl IHRlbXB0ZWQgdG8gcmVtb3ZlIF9jb250ZXh0IGZyb20gdGhlIG5hbWUsIGNhcGl0YWxpc2UgdGhl bSB0bwptYWtlIHRoZW0gc3RpY2sgb3V0IGFzIG1hY3JvcywgYW5kIHR1cm4gdGhlbSBpbnRvIGZ1 bmN0aW9uIHN0eWxlIG1hY3JvcwooeyB9KSB0byBhdm9pZCByaXNrIG9mIG11bHRpcGxlIGV4cGFu c2lvbi4KCkFsc28geW91IG5lZWQgYSBzYW5pdHkgY2hlY2sgb24gbW9kZSwgcmF0aGVyIHRoYW4g YXNzdW1pbmcgNjRiaXQuCgo+ICsKPiArI2RlZmluZSBnZXRfY29udGV4dF9ncHIoY3R4LCBncHIp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIChjdHgp LT5tb2RlID09IFZDUFVfSFZNX01PREVfMTZCID8gKGN0eCktPmNwdV9yZWdzLng4Nl8xNi5ncHIg OiAgICAgICAgIFwKPiArICAgIChjdHgpLT5tb2RlID09IFZDUFVfSFZNX01PREVfMzJCID8gKGN0 eCktPmNwdV9yZWdzLng4Nl8zMi5lIyNncHIgOiAgICAgIFwKPiArICAgIChjdHgpLT5jcHVfcmVn cy54ODZfNjQuciMjZ3ByCj4gKwo+ICsjZGVmaW5lIGdldF9jb250ZXh0X2ZpZWxkKGN0eCwgZmll bGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgKGN0eCkt Pm1vZGUgPT0gVkNQVV9IVk1fTU9ERV8xNkIgPyAoY3R4KS0+Y3B1X3JlZ3MueDg2XzE2LmZpZWxk IDogICAgICAgXAo+ICsgICAgKGN0eCktPm1vZGUgPT0gVkNQVV9IVk1fTU9ERV8zMkIgPyAoY3R4 KS0+Y3B1X3JlZ3MueDg2XzMyLmZpZWxkIDogICAgICAgXAo+ICsgICAgKGN0eCktPmNwdV9yZWdz Lng4Nl82NC5maWVsZAo+ICsKPiArICAgIG1lbXNldCgmc2VnLCAwLCBzaXplb2Yoc2VnKSk7Cj4g Kwo+ICsgICAgaWYgKCAhcGFnaW5nX21vZGVfaGFwKHYtPmRvbWFpbikgKQo+ICsgICAgICAgIHYt PmFyY2guZ3Vlc3RfdGFibGUgPSBwYWdldGFibGVfbnVsbCgpOwo+ICsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJheCA9IGdldF9jb250ZXh0X2dwcihjdHgsIGF4KTsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJjeCA9IGdldF9jb250ZXh0X2dwcihjdHgsIGN4KTsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJkeCA9IGdldF9jb250ZXh0X2dwcihjdHgsIGR4KTsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJieCA9IGdldF9jb250ZXh0X2dwcihjdHgsIGJ4KTsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJzcCA9IGdldF9jb250ZXh0X2dwcihjdHgsIHNwKTsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJicCA9IGdldF9jb250ZXh0X2dwcihjdHgsIGJwKTsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJzaSA9IGdldF9jb250ZXh0X2dwcihjdHgsIHNpKTsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJkaSA9IGdldF9jb250ZXh0X2dwcihjdHgsIGRpKTsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJpcCA9IGdldF9jb250ZXh0X2dwcihjdHgsIGlwKTsKPiArICAgIHYtPmFyY2gu dXNlcl9yZWdzLnJmbGFncyA9IGdldF9jb250ZXh0X2dwcihjdHgsIGZsYWdzKTsKPiArCj4gKyAg ICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBdID0gZ2V0X2NvbnRleHRfZmllbGQoY3R4LCBj cjApIHwgWDg2X0NSMF9FVDsKCkkgYW0gbm90IHN1cmUgd2hldGhlciBFVCBpcyB3b3J0aCBkb2lu ZyBoZXJlLiAgSXQgaXMgc3R1Y2sgaGlnaCBhbmQKaWdub3JlcyB3cml0ZXMgb24gYW55IHByb2Nl c3MgWGVuIGN1cnJlbnRseSBmdW5jdGlvbnMgb24uCgo+ICsgICAgaHZtX3VwZGF0ZV9ndWVzdF9j cih2LCAwKTsKPiArICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbNF0gPSBnZXRfY29udGV4 dF9maWVsZChjdHgsIGNyNCk7Cj4gKyAgICBodm1fdXBkYXRlX2d1ZXN0X2NyKHYsIDQpOwo+ICsK PiArICAgIHN3aXRjaCAoIGN0eC0+bW9kZSApCj4gKyAgICB7Cj4gKyAgICBjYXNlIFZDUFVfSFZN X01PREVfMzJCOgo+ICsgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlciA9IGN0eC0+ Y3B1X3JlZ3MueDg2XzMyLmVmZXI7Cj4gKyAgICAgICAgaHZtX3VwZGF0ZV9ndWVzdF9lZmVyKHYp Owo+ICsgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbM10gPSBjdHgtPmNwdV9yZWdz Lng4Nl8zMi5jcjM7Cj4gKyAgICAgICAgaHZtX3VwZGF0ZV9ndWVzdF9jcih2LCAzKTsKPiArICAg ICAgICBicmVhazsKCk5ld2xpbmUgaGVyZSBwbGVhc2UuCgo+ICsgICAgY2FzZSBWQ1BVX0hWTV9N T0RFXzY0QjoKPiArICAgICAgICB2LT5hcmNoLnVzZXJfcmVncy5yOCA9IGN0eC0+Y3B1X3JlZ3Mu eDg2XzY0LnI4Owo+ICsgICAgICAgIHYtPmFyY2gudXNlcl9yZWdzLnI5ID0gY3R4LT5jcHVfcmVn cy54ODZfNjQucjk7Cj4gKyAgICAgICAgdi0+YXJjaC51c2VyX3JlZ3MucjEwID0gY3R4LT5jcHVf cmVncy54ODZfNjQucjEwOwo+ICsgICAgICAgIHYtPmFyY2gudXNlcl9yZWdzLnIxMSA9IGN0eC0+ Y3B1X3JlZ3MueDg2XzY0LnIxMTsKPiArICAgICAgICB2LT5hcmNoLnVzZXJfcmVncy5yMTIgPSBj dHgtPmNwdV9yZWdzLng4Nl82NC5yMTI7Cj4gKyAgICAgICAgdi0+YXJjaC51c2VyX3JlZ3MucjEz ID0gY3R4LT5jcHVfcmVncy54ODZfNjQucjEzOwo+ICsgICAgICAgIHYtPmFyY2gudXNlcl9yZWdz LnIxNCA9IGN0eC0+Y3B1X3JlZ3MueDg2XzY0LnIxNDsKPiArICAgICAgICB2LT5hcmNoLnVzZXJf cmVncy5yMTUgPSBjdHgtPmNwdV9yZWdzLng4Nl82NC5yMTU7Cj4gKyAgICAgICAgdi0+YXJjaC5o dm1fdmNwdS5ndWVzdF9lZmVyID0gY3R4LT5jcHVfcmVncy54ODZfNjQuZWZlcjsKPiArICAgICAg ICBodm1fdXBkYXRlX2d1ZXN0X2VmZXIodik7Cj4gKyAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5n dWVzdF9jclszXSA9IGN0eC0+Y3B1X3JlZ3MueDg2XzY0LmNyMzsKPiArICAgICAgICBodm1fdXBk YXRlX2d1ZXN0X2NyKHYsIDMpOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiAr ICAgICAgICBicmVhazsKCkRyb3AgdGhlIGRlZmF1bHQgY2FzZSBpZiBpdCBpcyBnb2luZyB0byBs b29rIGxpa2UgdGhpcy4KCj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCBodm1fcGFnaW5nX2VuYWJs ZWQodikgJiYgIXBhZ2luZ19tb2RlX2hhcCh2LT5kb21haW4pICkKPiArICAgIHsKPiArICAgICAg ICAvKiBTaGFkb3ctbW9kZSBDUjMgY2hhbmdlLiBDaGVjayBQREJSIGFuZCB1cGRhdGUgcmVmY291 bnRzLiAqLwo+ICsgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBnZXRfcGFnZV9mcm9t X2dmbih2LT5kb21haW4sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPmFy Y2guaHZtX3ZjcHUuZ3Vlc3RfY3JbM10gPj4gUEFHRV9TSElGVCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgUDJNX0FMTE9DKTsKPiArICAgICAgICBpZiAoICFwYWdl ICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJJbnZh bGlkIENSM1xuIik7Cj4gKyAgICAgICAgICAgIGRvbWFpbl9jcmFzaCh2LT5kb21haW4pOwo+ICsg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHYt PmFyY2guZ3Vlc3RfdGFibGUgPSBwYWdldGFibGVfZnJvbV9wYWdlKHBhZ2UpOwo+ICsgICAgfQo+ ICsKPiArICAgIHNlZy5iYXNlID0gZ2V0X2NvbnRleHRfc2VnKGN0eCwgY3MsIGJhc2UpOwo+ICsg ICAgc2VnLmxpbWl0ID0gZ2V0X2NvbnRleHRfc2VnKGN0eCwgY3MsIGxpbWl0KTsKPiArICAgIHNl Zy5hdHRyLmJ5dGVzID0gZ2V0X2NvbnRleHRfc2VnKGN0eCwgY3MsIGFyKTsKPiArICAgIGh2bV9z ZXRfc2VnbWVudF9yZWdpc3Rlcih2LCB4ODZfc2VnX2NzLCAmc2VnKTsKPiArICAgIHNlZy5iYXNl ID0gZ2V0X2NvbnRleHRfc2VnKGN0eCwgZHMsIGJhc2UpOwo+ICsgICAgc2VnLmxpbWl0ID0gZ2V0 X2NvbnRleHRfc2VnKGN0eCwgZHMsIGxpbWl0KTsKPiArICAgIHNlZy5hdHRyLmJ5dGVzID0gZ2V0 X2NvbnRleHRfc2VnKGN0eCwgZHMsIGFyKTsKPiArICAgIGh2bV9zZXRfc2VnbWVudF9yZWdpc3Rl cih2LCB4ODZfc2VnX2RzLCAmc2VnKTsKPiArICAgIHNlZy5iYXNlID0gZ2V0X2NvbnRleHRfc2Vn KGN0eCwgc3MsIGJhc2UpOwo+ICsgICAgc2VnLmxpbWl0ID0gZ2V0X2NvbnRleHRfc2VnKGN0eCwg c3MsIGxpbWl0KTsKPiArICAgIHNlZy5hdHRyLmJ5dGVzID0gZ2V0X2NvbnRleHRfc2VnKGN0eCwg c3MsIGFyKTsKPiArICAgIGh2bV9zZXRfc2VnbWVudF9yZWdpc3Rlcih2LCB4ODZfc2VnX3NzLCAm c2VnKTsKPiArICAgIHNlZy5iYXNlID0gZ2V0X2NvbnRleHRfc2VnKGN0eCwgdHIsIGJhc2UpOwo+ ICsgICAgc2VnLmxpbWl0ID0gZ2V0X2NvbnRleHRfc2VnKGN0eCwgdHIsIGxpbWl0KTsKPiArICAg IHNlZy5hdHRyLmJ5dGVzID0gZ2V0X2NvbnRleHRfc2VnKGN0eCwgdHIsIGFyKTsKPiArICAgIGh2 bV9zZXRfc2VnbWVudF9yZWdpc3Rlcih2LCB4ODZfc2VnX3RyLCAmc2VnKTsKClRoaXMgYmxvY2sg d291bGQgYmUgZWFzaWVyIHRvIHJlYWQgYXMgNCBibG9ja3MsIG9uZSBmb3IgZWFjaCBzZWdtZW50 LAphbmQgaWYgdGhlICIgPSAiIGluIHRoZSBtaWRkbGUgd2VyZSBsaW5lZCB1cC4KCj4gKwo+ICsg ICAgLyogU3luYyBBUCdzIFRTQyB3aXRoIEJTUCdzLiAqLwo+ICsgICAgdi0+YXJjaC5odm1fdmNw dS5jYWNoZV90c2Nfb2Zmc2V0ID0KPiArICAgICAgICB2LT5kb21haW4tPnZjcHVbMF0tPmFyY2gu aHZtX3ZjcHUuY2FjaGVfdHNjX29mZnNldDsKPiArICAgIGh2bV9mdW5jcy5zZXRfdHNjX29mZnNl dCh2LCB2LT5hcmNoLmh2bV92Y3B1LmNhY2hlX3RzY19vZmZzZXQsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdi0+ZG9tYWluLT5hcmNoLmh2bV9kb21haW4uc3luY190c2MpOwo+ICsK PiArICAgIHYtPmFyY2guaHZtX3ZjcHUubXNyX3RzY19hZGp1c3QgPSAwOwo+ICsKPiArICAgIHBh Z2luZ191cGRhdGVfcGFnaW5nX21vZGVzKHYpOwo+ICsKPiArICAgIHYtPmFyY2guZmxhZ3MgfD0g VEZfa2VybmVsX21vZGU7CgpURl9rZXJuZWxfbW9kZSBvbmx5IGFwcGxpZXMgdG8gUFYgZ3Vlc3Rz LiAgSFZNIGd1ZXN0cyBkZXRlcm1pbmUga2VybmVsCnZzIHVzZXIgbW9kZSBiYXNlZCBvbiBjcGwu Cgo+ICsgICAgdi0+aXNfaW5pdGlhbGlzZWQgPSAxOwo+ICsgICAgc2V0X2JpdChfVlBGX2Rvd24s ICZ2LT5wYXVzZV9mbGFncyk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gKyN1bmRlZiBnZXRfY29u dGV4dF9maWVsZAo+ICsjdW5kZWYgZ2V0X2NvbnRleHRfZ3ByCj4gKyN1bmRlZiBnZXRfY29udGV4 dF9zZWcKPiArfQo+ICsKPiAraW50IGFyY2hfaW5pdGlhbGl6ZV92Y3B1KHN0cnVjdCB2Y3B1ICp2 LCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZykKPiArewo+ICsgICAgc3RydWN0IHZj cHVfZ3Vlc3RfY29udGV4dCAqY3R4dDsKPiArICAgIHN0cnVjdCB2Y3B1X2h2bV9jb250ZXh0IGh2 bV9jdHg7Cj4gKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gY3VycmVudC0+ZG9tYWluOwo+ICsgICAg aW50IHJjOwo+ICsKPiArICAgIGlmICggaXNfaHZtX3ZjcHUodikgKQo+ICsgICAgewo+ICsgICAg ICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZodm1fY3R4LCBhcmcsIDEpICkKPiArICAgICAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsgICAgICAgIGRvbWFpbl9sb2NrKGQpOwo+ICsgICAg ICAgIHJjID0gdi0+aXNfaW5pdGlhbGlzZWQgPyAtRUVYSVNUIDogYXJjaF9zZXRfaW5mb19odm1f Z3Vlc3QodiwgJmh2bV9jdHgpOwo+ICsgICAgICAgIGRvbWFpbl91bmxvY2soZCk7Cj4gKyAgICB9 IGVsc2UgewoKU3R5bGUuCgpPdGhlcndpc2UsIHRoaXMgbG9va3MgcmF0aGVyIG5lYXQgYW5kIHN1 cnByaXNpbmdseSBub24taW52YXNpdmUuCgp+QW5kcmV3CgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=