From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH RESEND v5 04/24] x86: refactor psr: implement CPU init and free flow. Date: Mon, 30 Jan 2017 21:44:00 -0500 Message-ID: <20170131024400.GA9186@char.us.ORACLE.com> References: <1484805686-7249-1-git-send-email-yi.y.sun@linux.intel.com> <1484805686-7249-5-git-send-email-yi.y.sun@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cYOQn-0001tu-99 for xen-devel@lists.xenproject.org; Tue, 31 Jan 2017 02:44:29 +0000 Content-Disposition: inline In-Reply-To: <1484805686-7249-5-git-send-email-yi.y.sun@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Yi Sun Cc: wei.liu2@citrix.com, he.chen@linux.intel.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, mengxu@cis.upenn.edu, jbeulich@suse.com, chao.p.peng@linux.intel.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBKYW4gMTksIDIwMTcgYXQgMDI6MDE6MDZQTSArMDgwMCwgWWkgU3VuIHdyb3RlOgo+ IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgQ1BVIGluaXQgYW5kIGZyZWUgZmxvdyBpbmNsdWRp bmcgTDMgQ0FUCj4gaW5pdGlhbGl6YXRpb24gYW5kIGZlYXR1cmUgbGlzdCBmcmVlLgo+IAo+IFNp Z25lZC1vZmYtYnk6IFlpIFN1biA8eWkueS5zdW5AbGludXguaW50ZWwuY29tPgo+IC0tLQo+IHY1 Ogo+ICAgICAtIG1vZGlmeSBjb21taXQgbWVzc2FnZSBiZWFjdXNlIG9mIGNvZGUgY2hhbmdlcy4K PiAgICAgLSBhZGQgJ3N0cnVjdCBjcHVpZF9sZWFmX3JlZ3MnIHRvIHNhdmUgY3B1IHJlZ2lzdGVy cyB2YWx1ZSB0byByZWR1Y2UKPiAgICAgICBwYXJhbWV0ZXJzIG9mIGluaXRfZmVhdHVyZSBmdW5j dGlvbi4KPiAgICAgLSBtb2RpZnkgY29tbWVudHMgdG8gbWFrZSB0aGVtIGFjY3VyYXRlLgo+ICAg ICAtIG1vZGlmeSB2YXJpYWJsZXMgbmFtZXMgdG8gbWFrZSB0aGVtIGJldHRlciwgZS5nLiAnZmVh dF90bXAnIHRvICdmZWF0Jy4KPiAgICAgLSB1c2UgJ2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZScg d2hlbiBmcmVlIGZlYXR1cmVzLgo+ICAgICAtIGRvIG5vdCBkZWxldGUgJ2ZlYXRfbDNfY2F0JyB0 byBtYWtlIGl0IGNhbiBiZSByZXVzZWQgd2hlbiBjcHUgb25saW5lLgo+ICAgICAtIHVzZSAnY3Vy cmVudF9jcHVfZGF0YScuCj4gICAgIC0gY2xlYXIgJ1g4Nl9GRUFUVVJFX1BRRScgaWYgY3B1aWRf bGV2ZWwgaXMgbm90IHJpZ2h0Lgo+ICAgICAtIFByaW50IHNvY2tldCBpbmZvIHdoZW4gJ29wdF9j cHVfaW5mbycgaXMgdHJ1ZS4KPiAgICAgLSByZW1vdmUgJ2NwdV9wcmVwYXJlX3dvcmsnIGZ1bmN0 aW9uIGFuZCBtb3ZlIGNvbnRlbnRzIG9mIGl0IGludG8KPiAgICAgICAncHNyX2NwdV9wcmVwYXJl Jy4KPiAtLS0KPiAgeGVuL2FyY2gveDg2L3Bzci5jIHwgMTc2ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gIDEgZmlsZSBjaGFuZ2VkLCAxNzQg aW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L3Bzci5jIGIveGVuL2FyY2gveDg2L3Bzci5jCj4gaW5kZXggZjdmZjNmYy4uZTlkYzA3YSAx MDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvcHNyLmMKPiArKysgYi94ZW4vYXJjaC94ODYvcHNy LmMKPiBAQCAtMzUsNiArMzUsOSBAQAo+ICAjZGVmaW5lIFBTUl9DQVQgICAgICAgICgxPDwxKQo+ ICAjZGVmaW5lIFBTUl9DRFAgICAgICAgICgxPDwyKQo+ICAKPiArI2RlZmluZSBDQVRfQ0JNX0xF Tl9NQVNLIDB4MWYKPiArI2RlZmluZSBDQVRfQ09TX01BWF9NQVNLIDB4ZmZmZgo+ICsKPiAgLyoK PiAgICogUGVyIFNETSBjaGFwdGVyICdDYWNoZSBBbGxvY2F0aW9uIFRlY2hub2xvZ3k6IENhY2hl IE1hc2sgQ29uZmlndXJhdGlvbicsCj4gICAqIHRoZSBNU1JzIHJhbmdlIGZyb20gMEM5MEggdGhy b3VnaCAwRDBGSCAoaW5jbHVzaXZlKSwgZW5hYmxlcyBzdXBwb3J0IGZvcgo+IEBAIC0xMjcsNiAr MTMwLDEzIEBAIHN0cnVjdCBmZWF0X25vZGUgewo+ICAgICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0 Owo+ICB9Owo+ICAKPiArc3RydWN0IGNwdWlkX2xlYWZfcmVncyB7Cj4gKyAgICB1bnNpZ25lZCBp bnQgZWF4Owo+ICsgICAgdW5zaWduZWQgaW50IGVieDsKPiArICAgIHVuc2lnbmVkIGludCBlY3g7 Cj4gKyAgICB1bnNpZ25lZCBpbnQgZWR4Owo+ICt9OwoKQ291bGQgeW91IHVzZSAnc3RydWN0IGNw dWlkX2xlYWYnIGluIHg4Nl9lbXVsYXRlLmggPwoKSXQgd291bGQgb25seSByZXF1aXJlICIjaW5j bHVkZSA8YXNtL3g4Nl9lbXVsYXRlLmg+IiBJIGJlbGlldmUuCgo+ICsKPiAgc3RydWN0IHBzcl9h c3NvYyB7Cj4gICAgICB1aW50NjRfdCB2YWw7Cj4gICAgICB1aW50NjRfdCBjb3NfbWFzazsKPiBA QCAtMTM0LDExICsxNDQsNzYgQEAgc3RydWN0IHBzcl9hc3NvYyB7Cj4gIAo+ICBzdHJ1Y3QgcHNy X2NtdCAqX19yZWFkX21vc3RseSBwc3JfY210Owo+ICAKPiArc3RhdGljIHN0cnVjdCBwc3Jfc29j a2V0X2luZm8gKl9fcmVhZF9tb3N0bHkgc29ja2V0X2luZm87Cj4gKwo+ICBzdGF0aWMgdW5zaWdu ZWQgaW50IG9wdF9wc3I7Cj4gIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBvcHRfcm1p ZF9tYXggPSAyNTU7Cj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBvcHRfY29z X21heCA9IE1BWF9DT1NfUkVHX0NOVDsKPiAgc3RhdGljIHVpbnQ2NF90IHJtaWRfbWFzazsKPiAg c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwc3JfYXNzb2MsIHBzcl9hc3NvYyk7Cj4gIAo+ ICsvKgo+ICsgKiBEZWNsYXJlIGdsb2JhbCBmZWF0dXJlIGxpc3QgZW50cnkgZm9yIGV2ZXJ5IGZl YXR1cmUgdG8gZmFjaWxpdGF0ZSB0aGUKPiArICogZmVhdHVyZSBsaXN0IGNyZWF0aW9uLiBJdCB3 aWxsIGJlIGFsbG9jYXRlZCBpbiBwc3JfY3B1X3ByZXBhcmUoKSBhbmQKPiArICogaW5zZXJ0ZWQg aW50byBmZWF0dXJlIGxpc3QgaW4gY3B1X2luaXRfd29yaygpLgoKWW91IG1heSBhbHNvIHdhbnQg dG8gc2F5IGl0IGlzIHByb3RlY3RlZCBieSB0aGUgY3B1X2FkZF9yZW1vdmVfbG9jawpzcGlubG9j ay4KCj4gKyAqLwo+ICtzdGF0aWMgc3RydWN0IGZlYXRfbm9kZSAqZmVhdF9sM19jYXQ7Cj4gKwo+ ICsvKiBDb21tb24gZnVuY3Rpb25zLiAqLwo+ICtzdGF0aWMgdm9pZCBmcmVlX2ZlYXR1cmUoc3Ry dWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbykKPiArewo+ICsgICAgc3RydWN0IGZlYXRfbm9kZSAq ZmVhdCwgKm5leHQ7Cj4gKwo+ICsgICAgaWYgKCAhaW5mbyApCj4gKyAgICAgICAgcmV0dXJuOwo+ ICsKPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmZWF0LCBuZXh0LCAmaW5mby0+ZmVh dF9saXN0LCBsaXN0KQo+ICsgICAgewo+ICsgICAgICAgIGNsZWFyX2JpdChmZWF0LT5mZWF0dXJl LCAmaW5mby0+ZmVhdF9tYXNrKTsKCldvdWxkIGl0IG1ha2Ugc2Vuc2UgdG8gdXNlIF9fY2xlYXJf Yml0PwoKQXMgaW4geW91IGhhdmUgYWxyZWFkeSBhIGxvY2sgKGNwdV9hZGRfcmVtb3ZlX2xvY2sp IHNvIG5vYm9keQpjYW4gY2hhbmdlIHRoZSBmZWF0X21hc2suIEhlbmNlIHRoaW5raW5nIHRoZXJl IGlzIG5vIG5lZWQgZm9yIHRoZQpsb2NrIG9wZXJhdGlvbj8KCj4gKyAgICAgICAgbGlzdF9kZWwo JmZlYXQtPmxpc3QpOwo+ICsgICAgICAgIHhmcmVlKGZlYXQpOwo+ICsgICAgfQo+ICt9Cj4gKwo+ ICsvKiBMMyBDQVQgZnVuY3Rpb25zIGltcGxlbWVudGF0aW9uLiAqLwo+ICtzdGF0aWMgdm9pZCBs M19jYXRfaW5pdF9mZWF0dXJlKHN0cnVjdCBjcHVpZF9sZWFmX3JlZ3MgcmVncywKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmVhdF9ub2RlICpmZWF0LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8p Cj4gK3sKPiArICAgIHN0cnVjdCBwc3JfY2F0X2h3X2luZm8gbDNfY2F0Owo+ICsgICAgdW5zaWdu ZWQgaW50IHNvY2tldDsKPiArCj4gKyAgICAvKiBObyB2YWxpZCB2YWx1ZSBzbyBkbyBub3QgZW5h YmxlIGZlYXR1cmUuICovCj4gKyAgICBpZiAoICFyZWdzLmVheCB8fCAhcmVncy5lZHggKQo+ICsg ICAgICAgIHJldHVybjsKPiArCj4gKyAgICBsM19jYXQuY2JtX2xlbiA9IChyZWdzLmVheCAmIENB VF9DQk1fTEVOX01BU0spICsgMTsKPiArICAgIGwzX2NhdC5jb3NfbWF4ID0gbWluKG9wdF9jb3Nf bWF4LCByZWdzLmVkeCAmIENBVF9DT1NfTUFYX01BU0spOwo+ICsKPiArICAgIC8qIGNvcz0wIGlz IHJlc2VydmVkIGFzIGRlZmF1bHQgY2JtKGFsbCBiaXRzIHdpdGhpbiBjYm1fbGVuIGFyZSAxKS4g Ki8KPiArICAgIGZlYXQtPmNvc19yZWdfdmFsWzBdID0gKDF1bGwgPDwgbDNfY2F0LmNibV9sZW4p IC0gMTsKPiArCj4gKyAgICBmZWF0LT5mZWF0dXJlID0gUFNSX1NPQ0tFVF9MM19DQVQ7Cj4gKyAg ICBfX3NldF9iaXQoUFNSX1NPQ0tFVF9MM19DQVQsICZpbmZvLT5mZWF0X21hc2spOwoKQWhhISBT byB5b3UgZG8gcmV1c2UgdGhlIGVudW0hIEluIHdoaWNoIGNhc2UgeW91IHJlYWxseQp3YW50IHRv IG1ha2Ugc3VyZSB5b3UgbWVudGlvbiB0aGF0IGluICdzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvJwp0 aGUgJ2ZlYXRfbWFzaycgaXMgYWN0dWFsbHkgdGhlIGJpdCB2YWx1ZXMgb2YgZW51bSBwc3JfZmVh dF90eXBlLgoKQWxzbyBkbyB5b3Ugd2FudCB0byBhZGQgYW4gQVNTRVJUIGJlZm9yZSB5b3UgY2Fs bCB0aGUgX19zZXRfYml0OgoKQVNTRVJUICggIXRlc3RfYml0KFBTUl9TT0NLRVRfTDNfQ0FULCAm aW5mby0+ZmVhdF9tYXNrKSApOwoKPwo+ICsKPiArICAgIGZlYXQtPmluZm8ubDNfY2F0X2luZm8g PSBsM19jYXQ7Cj4gKwo+ICsgICAgaW5mby0+bnJfZmVhdCsrOwo+ICsKPiArICAgIC8qIEFkZCB0 aGlzIGZlYXR1cmUgaW50byBsaXN0LiAqLwo+ICsgICAgbGlzdF9hZGRfdGFpbCgmZmVhdC0+bGlz dCwgJmluZm8tPmZlYXRfbGlzdCk7Cj4gKwo+ICsgICAgc29ja2V0ID0gY3B1X3RvX3NvY2tldChz bXBfcHJvY2Vzc29yX2lkKCkpOwo+ICsgICAgaWYgKCBvcHRfY3B1X2luZm8gKQo+ICsgICAgICAg IHByaW50ayhYRU5MT0dfSU5GTwo+ICsgICAgICAgICAgICJMMyBDQVQ6IGVuYWJsZWQgb24gc29j a2V0ICV1LCBjb3NfbWF4OiV1LCBjYm1fbGVuOiV1XG4iLAoKT2RkIHNwYWNpbmcuIEkgd291bGQg dGhpbmsgdGhhdCB0aGUgIkwzIENBVDogLi4gIgp3b3VsZCBiZSBvbiB0aGUgc2FtZSBjb2x1bW4g YXMgWEVOTE9HX0lORk8gPwoKT3IgeW91IGNvdWxkIGZsaXAgdGhpcyBsb2dpYyAoaWYgeW91IGFy ZSB3b3JyaWVkIGFib3V0IHRoZSBzaWxseQo4MCBjaGFyYWN0ZXJzIHJlcXVpcmVtZW50KSBhcm91 bmQgYW5kIGRvOgoKaWYgKCAhb3B0X2NwdV9pbmZvICkKCXJldHVybgoKQW5kIHRoZW4gZG8gdGhl IHByaW50ayBvbiBpdHMgb3duIGxpbmU/Cj4gKyAgICAgICAgICAgc29ja2V0LCBmZWF0LT5pbmZv LmwzX2NhdF9pbmZvLmNvc19tYXgsCj4gKyAgICAgICAgICAgZmVhdC0+aW5mby5sM19jYXRfaW5m by5jYm1fbGVuKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmZWF0X29wcyBsM19j YXRfb3BzID0gewo+ICt9Owo+ICsKPiAgc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX3Bzcl9ib29s KGNoYXIgKnMsIGNoYXIgKnZhbHVlLCBjaGFyICpmZWF0dXJlLAo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2spCj4gIHsKPiBAQCAtMTc4LDYgKzI1 Myw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9wc3JfcGFyYW0oY2hhciAqcykKPiAgICAg ICAgICBpZiAoIHZhbF9zdHIgJiYgIXN0cmNtcChzLCAicm1pZF9tYXgiKSApCj4gICAgICAgICAg ICAgIG9wdF9ybWlkX21heCA9IHNpbXBsZV9zdHJ0b3VsKHZhbF9zdHIsIE5VTEwsIDApOwo+ICAK PiArICAgICAgICBpZiAoIHZhbF9zdHIgJiYgIXN0cmNtcChzLCAiY29zX21heCIpICkKPiArICAg ICAgICAgICAgb3B0X2Nvc19tYXggPSBzaW1wbGVfc3RydG91bCh2YWxfc3RyLCBOVUxMLCAwKTsK PiArCj4gICAgICAgICAgcyA9IHNzICsgMTsKPiAgICAgIH0gd2hpbGUgKCBzcyApOwo+ICB9Cj4g QEAgLTMzMywxOCArNDExLDEwOCBAQCB2b2lkIHBzcl9kb21haW5fZnJlZShzdHJ1Y3QgZG9tYWlu ICpkKQo+ICAgICAgcHNyX2ZyZWVfcm1pZChkKTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgY3B1 X2luaXRfd29yayh2b2lkKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZv Owo+ICsgICAgdW5zaWduZWQgaW50IHNvY2tldDsKPiArICAgIHVuc2lnbmVkIGludCBjcHUgPSBz bXBfcHJvY2Vzc29yX2lkKCk7Cj4gKyAgICBzdHJ1Y3QgZmVhdF9ub2RlICpmZWF0Owo+ICsgICAg c3RydWN0IGNwdWlkX2xlYWZfcmVncyByZWdzOwoKQ291bGQgeW91IHVzZSB0aGUgeDg2X2VtdWxh dGUuaCBvbmU/CgpXb3VsZCBpdCBhbHNvIG1ha2Ugc2Vuc2UgdG8gbWFrZSBzdXJlIHRoYXQgeW91 IGluaXRpYWxpemUKdG8gZGVmYXVsdCB2YWx1ZXM6CgoJc3RydWN0IGNwdWlkX2xlYWYgcmVncyA9 IHsgLmEgPSAwLCAuYiA9IDAsIC5jID0gMCwgLmQgPSAwIH07Cj4gKwo+ICsgICAgaWYgKCAhY3B1 X2hhcygmY3VycmVudF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfUFFFKSApCj4gKyAgICAgICAgcmV0 dXJuOwo+ICsgICAgZWxzZSBpZiAoIGN1cnJlbnRfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgPCBQU1Jf Q1BVSURfTEVWRUxfQ0FUICkKPiArICAgIHsKPiArICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRV UkVfUFFFLCBjdXJyZW50X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKPiArICAgICAgICByZXR1 cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgc29ja2V0ID0gY3B1X3RvX3NvY2tldChjcHUpOwo+ICsg ICAgaW5mbyA9IHNvY2tldF9pbmZvICsgc29ja2V0Owo+ICsgICAgaWYgKCBpbmZvLT5mZWF0X21h c2sgKQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICBJTklUX0xJU1RfSEVBRCgmaW5mby0+ ZmVhdF9saXN0KTsKPiArICAgIHNwaW5fbG9ja19pbml0KCZpbmZvLT5yZWZfbG9jayk7Cj4gKwo+ ICsgICAgY3B1aWRfY291bnQoUFNSX0NQVUlEX0xFVkVMX0NBVCwgMCwKPiArICAgICAgICAgICAg ICAgICZyZWdzLmVheCwgJnJlZ3MuZWJ4LCAmcmVncy5lY3gsICZyZWdzLmVkeCk7Cj4gKyAgICBp ZiAoIHJlZ3MuZWJ4ICYgUFNSX1JFU09VUkNFX1RZUEVfTDMgKQo+ICsgICAgewo+ICsgICAgICAg IGNwdWlkX2NvdW50KFBTUl9DUFVJRF9MRVZFTF9DQVQsIDEsCj4gKyAgICAgICAgICAgICAgICAg ICAgJnJlZ3MuZWF4LCAmcmVncy5lYngsICZyZWdzLmVjeCwgJnJlZ3MuZWR4KTsKPiArCj4gKyAg ICAgICAgZmVhdCA9IGZlYXRfbDNfY2F0Owo+ICsgICAgICAgIGZlYXRfbDNfY2F0ID0gTlVMTDsK Ci4uIHNvIGhvdyBkb2VzIHRoaXMgd29yayB3aGVuIHRoaXMgaXMgaW5pdGlhbGl6ZWQgb24gYSB0 aGlyZApzb2NrZXQ/IFdvbid0IGZlYXRfbDNfY2F0IGF0IHRoYXQgcG9pbnQgYmUgTlVMTCBsZWFk aW5nIHRvIHRoaXMKb25lIGJlbG93IGJlY29taW5nIGEgTlVMTCBwb2ludGVyPwoKQWggd2FpdC4g cHNyX2NwdV9wcmVwYXJlIHdpbGwgYWxsb2NhdGUgaXQuCgpIbSwgY291bGQgeW91IGFkZCBhIGNv bW1lbnQgYWJvdXQgdGhpcz8KCi8qIHBzcl9jcHVfcHJlcGFyZSB3aWxsIGFsbG9jYXRlIGl0IG9u IHN1YnNlcXVlbnQgQ1BVIG9ubGluaW5nLiAqLwoKPiArICAgICAgICBmZWF0LT5vcHMgPSBsM19j YXRfb3BzOwo+ICsKPiArICAgICAgICBsM19jYXRfaW5pdF9mZWF0dXJlKHJlZ3MsIGZlYXQsIGlu Zm8pOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjcHVfZmluaV93b3JrKHVuc2ln bmVkIGludCBjcHUpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBzb2NrZXQgPSBjcHVfdG9fc29j a2V0KGNwdSk7Cj4gKwo+ICsgICAgaWYgKCAhc29ja2V0X2NwdW1hc2tbc29ja2V0XSB8fCBjcHVt YXNrX2VtcHR5KHNvY2tldF9jcHVtYXNrW3NvY2tldF0pICkKPiArICAgIHsKPiArICAgICAgICBm cmVlX2ZlYXR1cmUoc29ja2V0X2luZm8gKyBzb2NrZXQpOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wc3Iodm9pZCkKPiArewo+ICsgICAgaWYgKCBvcHRfY29z X21heCA8IDEgKQo+ICsgICAgewo+ICsgICAgICAgIHByaW50ayhYRU5MT0dfSU5GTyAiQ0FUOiBk aXNhYmxlZCwgY29zX21heCBpcyB0b28gc21hbGxcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiAr ICAgIH0KPiArCj4gKyAgICBzb2NrZXRfaW5mbyA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IHBzcl9z b2NrZXRfaW5mbywgbnJfc29ja2V0cyk7Cj4gKwo+ICsgICAgaWYgKCAhc29ja2V0X2luZm8gKQo+ ICsgICAgewo+ICsgICAgICAgIHByaW50ayhYRU5MT0dfSU5GTyAiRmFpbCB0byBhbGxvYyBzb2Nr ZXRfaW5mbyFcbiIpOwoKRmFpbGVkCj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBfX2luaXQgcHNyX2ZyZWUodm9pZCkKPiArewo+ICsgICAgdW5zaWdu ZWQgaW50IGk7Cj4gKwo+ICsgICAgZm9yICggaSA9IDA7IGkgPCBucl9zb2NrZXRzOyBpKysgKQo+ ICsgICAgICAgIGZyZWVfZmVhdHVyZSgmc29ja2V0X2luZm9baV0pOwo+ICsKPiArICAgIHhmcmVl KHNvY2tldF9pbmZvKTsKPiArICAgIHNvY2tldF9pbmZvID0gTlVMTDsKPiArfQo+ICsKPiAgc3Rh dGljIGludCBwc3JfY3B1X3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSkKPiAgewo+ICsgICAgaWYg KCAhc29ja2V0X2luZm8gKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgIC8qIE1hbGxv YyBtZW1vcnkgZm9yIHRoZSBnbG9iYWwgZmVhdHVyZSBoZWFkIGhlcmUuICovCj4gKyAgICBpZiAo IGZlYXRfbDNfY2F0ID09IE5VTEwgJiYKPiArICAgICAgICAgKGZlYXRfbDNfY2F0ID0geHphbGxv YyhzdHJ1Y3QgZmVhdF9ub2RlKSkgPT0gTlVMTCApCgovbWUgc2NyYXRjaGVzIGhpcyBoZWFkLgoK TGV0cyBzYXkgd2UgaGF2ZSBhIHR3byBzb2NrZXQgbWFjaGluZS4gRWFjaCBzb2NrZXQgaGFzCnR3 byBDUFVzIChzbyB0b3RhbCBvZiA0IENQVXMpLgoKT24gQ1BVMCAgKGluIHBzcl9wcmVzbXBfaW5p dCkgaXQgYWxsb2NhdGVzIGZlYXRfbDNfY2F0LiBUaGVuCmxhdGVyIGluIChpbiBwc3JfcHJlc21w X2luaXQpIHlvdSBjYWxsIHBzcl9jcHVfaW5pdCB3aGljaApzZXRzIGZlYXRfbDNfY2F0IHRvIE5V TEwgKGFuZCAnZmVhdCcgaXMgZmVhdF9sM19jYXQpLgoKV2hlbiBDUFUxIHN0YXJ0cyB1cCB0aGVu LCBwc3JfY3B1X3ByZXBhcmUgaXMgY2FsbGVkCndoaWNoIG1lYW5zIHdlIGFsbG9jYXRlIGEgbmV3 IGZlYXRfbDNfY2F0LiAnY3B1X2luaXRfd29yaycKc2hvcnQtY2lyY3VpdHMgKGFzIGluZm8tPmZl YXRfbWFzayBoYXMgYSB2YWx1ZSkgYW5kIGRvZXMgbm90CmRvIGFueXRoaW5nLgoKV2hlbiBDUFUy IChzb2NrZXQgdHdvKSwgc3RhcnRzIHVwIHRoZW4gZmVhdF9sM19jYXQgKGFzICdmZWF0JykKaXMg dXNlZCAoaW4gcHNyX2NwdV9pbml0IGFuZCBhZ2FpbiBzZXRzIGZlYXRfbDNfY2F0IHRvIE5VTEwp LgoKVGhlIGxhc3QgQ1BVMyAoc29ja2V0ICMyKSBzdGFydHMgdXAsIGFuZCBzaW5jZSBmZWF0X2wz X2NhdCBpcwpOVUxMIC0gaXQgaXMgYWxsb2NhdGVkLiBCdXQgaW4gJ2NwdV9pbml0X3dvcmsnIGl0 IHNob3J0LWNpcmN1aXRzCnNvIHdlIGRvbid0IHVzZSB0aGlyZCBhbGxvY2F0ZWQgJ2ZlYXRfbDNf Y2F0JyAuCgpBbmQgd2UgaGF2ZSBhbiAnZmVhdF9sM19jYXQnIHRoYXQgaXMgbm90IHVzZWQgZm9y IGFueXRoaW5nLi4KCkluIG90aGVyIHdvcmRzIC0gYSBtZW1vcnkgbGVhay4gR3JhbnRlZCBhIHZl cnkgc21hbGwgb25lLgoKCj4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICAgICAgcmV0 dXJuIDA7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIHBzcl9jcHVfaW5pdCh2b2lkKQo+ICB7Cj4g KyAgICBpZiAoIHNvY2tldF9pbmZvICkKPiArICAgICAgICBjcHVfaW5pdF93b3JrKCk7Cj4gKwo+ ICAgICAgcHNyX2Fzc29jX2luaXQoKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgcHNyX2NwdV9m aW5pKHVuc2lnbmVkIGludCBjcHUpCj4gIHsKPiArICAgIGlmICggc29ja2V0X2luZm8gKQo+ICsg ICAgICAgIGNwdV9maW5pX3dvcmsoY3B1KTsKPiAgICAgIHJldHVybjsKPiAgfQo+ICAKPiBAQCAt Mzg2LDEwICs1NTQsMTQgQEAgc3RhdGljIGludCBfX2luaXQgcHNyX3ByZXNtcF9pbml0KHZvaWQp Cj4gICAgICBpZiAoIChvcHRfcHNyICYgUFNSX0NNVCkgJiYgb3B0X3JtaWRfbWF4ICkKPiAgICAg ICAgICBpbml0X3Bzcl9jbXQob3B0X3JtaWRfbWF4KTsKPiAgCj4gLSAgICBwc3JfY3B1X3ByZXBh cmUoMCk7Cj4gKyAgICBpZiAoIG9wdF9wc3IgJiBQU1JfQ0FUICkKPiArICAgICAgICBpbml0X3Bz cigpOwo+ICsKPiArICAgIGlmICggcHNyX2NwdV9wcmVwYXJlKDApICkKPiArICAgICAgICBwc3Jf ZnJlZSgpOwo+ICAKPiAgICAgIHBzcl9jcHVfaW5pdCgpOwo+IC0gICAgaWYgKCBwc3JfY210X2Vu YWJsZWQoKSApCj4gKyAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpIHx8IHNvY2tldF9pbmZvICkK PiAgICAgICAgICByZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9uZmIpOwo+ICAKPiAgICAgIHJl dHVybiAwOwo+IC0tIAo+IDEuOS4xCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK