From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v7 04/24] x86: refactor psr: implement CPU init and free flow. Date: Tue, 14 Feb 2017 11:01:42 -0500 Message-ID: <20170214160142.GC14147@char.us.ORACLE.com> References: <1486967556-3702-1-git-send-email-yi.y.sun@linux.intel.com> <1486967556-3702-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.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cdfYw-0003iQ-37 for xen-devel@lists.xenproject.org; Tue, 14 Feb 2017 16:02:42 +0000 Content-Disposition: inline In-Reply-To: <1486967556-3702-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: kevin.tian@intel.com, 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 T24gTW9uLCBGZWIgMTMsIDIwMTcgYXQgMDI6MzI6MTZQTSArMDgwMCwgWWkgU3VuIHdyb3RlOgo+ IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgQ1BVIGluaXQgYW5kIGZyZWUgZmxvdyBpbmNsdWRp bmcgTDMgQ0FUCj4gaW5pdGlhbGl6YXRpb24gYW5kIGZlYXR1cmUgbGlzdCBmcmVlLgo+IAo+IFNp Z25lZC1vZmYtYnk6IFlpIFN1biA8eWkueS5zdW5AbGludXguaW50ZWwuY29tPgo+IC0tLQo+IHY3 Ogo+ICAgICAtIGluaXRpYWxpemUgJ2wzX2NhdCcuCj4gICAgIC0gZml4IHR5cG8uCj4gICAgIC0g Y29ycmVjdCBjcml0ZXJpYSB0byBjYWxsICdmcmVlX2ZlYXR1cmUnIGluIGNwdV9maW5pX3dvcmsu IE9ubHkgd2hlbgo+ICAgICAgIENQVV9TVEFSVElORyBoYXMgYmVlbiBkb25lIGFuZCBhbGwgQ1BV cyBhcmUgb2ZmbGluZSwgJ2ZyZWVfZmVhdHVyZScKPiAgICAgICBjYW4gYmUgY2FsbGVkLgo+ICAg ICAtIHJlbW92ZSAnZnJlZV9mZWF0dXJlIGluICdwc3JfZnJlZScgYmVjYXVzZSAncHNyX2ZyZWUn IHNob3VsZCBvbmx5IGZyZWUKPiAgICAgICByZXNvdXJjZXMgYWxsb2NhdGVkIGluICdwc3JfY3B1 X3ByZXBhcmUnLiBCdXQgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbgo+ICAgICAgICdwc3JfY3B1X3By ZXBhcmUnIHdpbGwgbm90IGJlIGZyZWVkIHRvIHNpbXBsaWZ5IHRoaW5ncy4KPiAtLS0KPiAgeGVu L2FyY2gveDg2L2NwdWlkLmMgICAgICAgICAgICB8ICAgNiAtLQo+ICB4ZW4vYXJjaC94ODYvcHNy LmMgICAgICAgICAgICAgIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0KPiAgeGVuL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaCB8ICAgNyArKwo+ICAzIGZp bGVzIGNoYW5nZWQsIDE3NSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYg LS1naXQgYS94ZW4vYXJjaC94ODYvY3B1aWQuYyBiL3hlbi9hcmNoL3g4Ni9jcHVpZC5jCj4gaW5k ZXggZTBhMzg3ZS4uZTNlOTJkZCAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvY3B1aWQuYwo+ ICsrKyBiL3hlbi9hcmNoL3g4Ni9jcHVpZC5jCj4gQEAgLTM0LDEyICszNCw2IEBAIHN0YXRpYyB2 b2lkIGNwdWlkX2xlYWYodWludDMyX3QgbGVhZiwgc3RydWN0IGNwdWlkX2xlYWYgKmRhdGEpCj4g ICAgICBjcHVpZChsZWFmLCAmZGF0YS0+YSwgJmRhdGEtPmIsICZkYXRhLT5jLCAmZGF0YS0+ZCk7 Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGNwdWlkX2NvdW50X2xlYWYodWludDMyX3QgbGVhZiwg dWludDMyX3Qgc3VibGVhZiwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg Y3B1aWRfbGVhZiAqZGF0YSkKPiAtewo+IC0gICAgY3B1aWRfY291bnQobGVhZiwgc3VibGVhZiwg JmRhdGEtPmEsICZkYXRhLT5iLCAmZGF0YS0+YywgJmRhdGEtPmQpOwo+IC19Cj4gLQo+ICBzdGF0 aWMgdm9pZCBzYW5pdGlzZV9mZWF0dXJlc2V0KHVpbnQzMl90ICpmcykKPiAgewo+ICAgICAgLyog Zm9yX2VhY2hfc2V0X2JpdCgpIHVzZXMgdW5zaWduZWQgbG9uZ3MuICBFeHRlbmQgd2l0aCB6ZXJv ZXMuICovCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wc3IuYyBiL3hlbi9hcmNoL3g4Ni9w c3IuYwo+IGluZGV4IDVhY2Q5Y2EuLjlhMmI3MTcgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2 L3Bzci5jCj4gKysrIGIveGVuL2FyY2gveDg2L3Bzci5jCj4gQEAgLTE5LDYgKzE5LDcgQEAKPiAg I2luY2x1ZGUgPHhlbi9saXN0Lmg+Cj4gICNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KPiAgI2luY2x1 ZGUgPGFzbS9wc3IuaD4KPiArI2luY2x1ZGUgPGFzbS94ODZfZW11bGF0ZS5oPgo+ICAKPiAgLyoK PiAgICogVGVybWlub2xvZ3k6Cj4gQEAgLTM1LDYgKzM2LDkgQEAKPiAgI2RlZmluZSBQU1JfQ0FU ICAgICAgICAoMTw8MSkKPiAgI2RlZmluZSBQU1JfQ0RQICAgICAgICAoMTw8MikKPiAgCj4gKyNk ZWZpbmUgQ0FUX0NCTV9MRU5fTUFTSyAweDFmCj4gKyNkZWZpbmUgQ0FUX0NPU19NQVhfTUFTSyAw eGZmZmYKPiArCj4gIC8qCj4gICAqIFBlciBTRE0gY2hhcHRlciAnQ2FjaGUgQWxsb2NhdGlvbiBU ZWNobm9sb2d5OiBDYWNoZSBNYXNrIENvbmZpZ3VyYXRpb24nLAo+ICAgKiB0aGUgTVNScyByYW5n aW5nIGZyb20gMEM5MEggdGhyb3VnaCAwRDBGSCAoaW5jbHVzaXZlKSwgZW5hYmxlcyBzdXBwb3J0 IGZvcgo+IEBAIC0xMzYsMTEgKzE0MCw4NCBAQCBzdHJ1Y3QgcHNyX2Fzc29jIHsKPiAgCj4gIHN0 cnVjdCBwc3JfY210ICpfX3JlYWRfbW9zdGx5IHBzcl9jbXQ7Cj4gIAo+ICtzdGF0aWMgc3RydWN0 IHBzcl9zb2NrZXRfaW5mbyAqX19yZWFkX21vc3RseSBzb2NrZXRfaW5mbzsKPiArCj4gIHN0YXRp YyB1bnNpZ25lZCBpbnQgb3B0X3BzcjsKPiAgc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRh IG9wdF9ybWlkX21heCA9IDI1NTsKPiArc3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5 IG9wdF9jb3NfbWF4ID0gTUFYX0NPU19SRUdfQ05UOwo+ICBzdGF0aWMgdWludDY0X3Qgcm1pZF9t YXNrOwo+ICBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBzcl9hc3NvYywgcHNyX2Fzc29j KTsKPiAgCj4gKy8qCj4gKyAqIERlY2xhcmUgZ2xvYmFsIGZlYXR1cmUgbGlzdCBlbnRyeSBmb3Ig ZXZlcnkgZmVhdHVyZSB0byBmYWNpbGl0YXRlIHRoZQo+ICsgKiBmZWF0dXJlIGxpc3QgY3JlYXRp b24uIEl0IHdpbGwgYmUgYWxsb2NhdGVkIGluIHBzcl9jcHVfcHJlcGFyZSgpIGFuZAo+ICsgKiBp bnNlcnRlZCBpbnRvIGZlYXR1cmUgbGlzdCBpbiBjcHVfaW5pdF93b3JrKCkuIEl0IGlzIHByb3Rl Y3RlZCBieQo+ICsgKiBjcHVfYWRkX3JlbW92ZV9sb2NrIHNwaW5sb2NrLgo+ICsgKi8KPiArc3Rh dGljIHN0cnVjdCBmZWF0X25vZGUgKmZlYXRfbDNfY2F0Owo+ICsKPiArLyogQ29tbW9uIGZ1bmN0 aW9ucy4gKi8KPiArc3RhdGljIHZvaWQgZnJlZV9mZWF0dXJlKHN0cnVjdCBwc3Jfc29ja2V0X2lu Zm8gKmluZm8pCj4gK3sKPiArICAgIHN0cnVjdCBmZWF0X25vZGUgKmZlYXQsICpuZXh0Owo+ICsK PiArICAgIGlmICggIWluZm8gKQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICAvKgo+ICsg ICAgICogRnJlZSByZXNvdXJjZXMgb2YgZmVhdHVyZXMuIEJ1dCB3ZSBkbyBub3QgZnJlZSBnbG9i YWwgZmVhdHVyZSBsaXN0Cj4gKyAgICAgKiBlbnRyeSwgbGlrZSBmZWF0X2wzX2NhdC4gQWx0aG91 Z2ggaXQgbWF5IGNhdXNlIGEgZmV3IG1lbW9yeSBsZWFrLAo+ICsgICAgICogaXQgaXMgT0sgc2lt cGxpZnkgdGhpbmdzLgo+ICsgICAgICovCj4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo ZmVhdCwgbmV4dCwgJmluZm8tPmZlYXRfbGlzdCwgbGlzdCkKPiArICAgIHsKPiArICAgICAgICBf X2NsZWFyX2JpdChmZWF0LT5mZWF0dXJlLCAmaW5mby0+ZmVhdF9tYXNrKTsKPiArICAgICAgICBs aXN0X2RlbCgmZmVhdC0+bGlzdCk7Cj4gKyAgICAgICAgeGZyZWUoZmVhdCk7Cj4gKyAgICB9Cj4g K30KPiArCj4gKy8qIEwzIENBVCBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24uICovCj4gK3N0YXRp YyB2b2lkIGwzX2NhdF9pbml0X2ZlYXR1cmUoc3RydWN0IGNwdWlkX2xlYWYgcmVncywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmVhdF9ub2RlICpmZWF0LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmlu Zm8pCj4gK3sKPiArICAgIHN0cnVjdCBwc3JfY2F0X2h3X2luZm8gbDNfY2F0ID0geyB9Owo+ICsg ICAgdW5zaWduZWQgaW50IHNvY2tldDsKPiArCj4gKyAgICAvKiBObyB2YWxpZCB2YWx1ZSBzbyBk byBub3QgZW5hYmxlIGZlYXR1cmUuICovCj4gKyAgICBpZiAoICFyZWdzLmEgfHwgIXJlZ3MuZCAp Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGwzX2NhdC5jYm1fbGVuID0gKHJlZ3MuYSAm IENBVF9DQk1fTEVOX01BU0spICsgMTsKPiArICAgIGwzX2NhdC5jb3NfbWF4ID0gbWluKG9wdF9j b3NfbWF4LCByZWdzLmQgJiBDQVRfQ09TX01BWF9NQVNLKTsKPiArCj4gKyAgICAvKiBjb3M9MCBp cyByZXNlcnZlZCBhcyBkZWZhdWx0IGNibShhbGwgYml0cyB3aXRoaW4gY2JtX2xlbiBhcmUgMSku ICovCj4gKyAgICBmZWF0LT5jb3NfcmVnX3ZhbFswXSA9ICgxdWxsIDw8IGwzX2NhdC5jYm1fbGVu KSAtIDE7Cj4gKwo+ICsgICAgZmVhdC0+ZmVhdHVyZSA9IFBTUl9TT0NLRVRfTDNfQ0FUOwo+ICsg ICAgQVNTRVJUKCF0ZXN0X2JpdChQU1JfU09DS0VUX0wzX0NBVCwgJmluZm8tPmZlYXRfbWFzaykp Owo+ICsgICAgX19zZXRfYml0KFBTUl9TT0NLRVRfTDNfQ0FULCAmaW5mby0+ZmVhdF9tYXNrKTsK PiArCj4gKyAgICBmZWF0LT5pbmZvLmwzX2NhdF9pbmZvID0gbDNfY2F0Owo+ICsKPiArICAgIGlu Zm8tPm5yX2ZlYXQrKzsKPiArCj4gKyAgICAvKiBBZGQgdGhpcyBmZWF0dXJlIGludG8gbGlzdC4g Ki8KPiArICAgIGxpc3RfYWRkX3RhaWwoJmZlYXQtPmxpc3QsICZpbmZvLT5mZWF0X2xpc3QpOwo+ ICsKPiArICAgIHNvY2tldCA9IGNwdV90b19zb2NrZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKPiAr ICAgIGlmICggIW9wdF9jcHVfaW5mbyApCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIHBy aW50ayhYRU5MT0dfSU5GTyAiTDMgQ0FUOiBlbmFibGVkIG9uIHNvY2tldCAldSwgY29zX21heDol dSwgY2JtX2xlbjoldVxuIiwKPiArICAgICAgICAgICBzb2NrZXQsIGZlYXQtPmluZm8ubDNfY2F0 X2luZm8uY29zX21heCwKPiArICAgICAgICAgICBmZWF0LT5pbmZvLmwzX2NhdF9pbmZvLmNibV9s ZW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZlYXRfb3BzIGwzX2NhdF9vcHMg PSB7Cj4gK307Cj4gKwo+ICBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfcHNyX2Jvb2woY2hhciAq cywgY2hhciAqdmFsdWUsIGNoYXIgKmZlYXR1cmUsCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFzaykKPiAgewo+IEBAIC0xODAsNiArMjU3LDkgQEAg c3RhdGljIHZvaWQgX19pbml0IHBhcnNlX3Bzcl9wYXJhbShjaGFyICpzKQo+ICAgICAgICAgIGlm ICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJybWlkX21heCIpICkKPiAgICAgICAgICAgICAgb3B0 X3JtaWRfbWF4ID0gc2ltcGxlX3N0cnRvdWwodmFsX3N0ciwgTlVMTCwgMCk7Cj4gIAo+ICsgICAg ICAgIGlmICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJjb3NfbWF4IikgKQo+ICsgICAgICAgICAg ICBvcHRfY29zX21heCA9IHNpbXBsZV9zdHJ0b3VsKHZhbF9zdHIsIE5VTEwsIDApOwo+ICsKPiAg ICAgICAgICBzID0gc3MgKyAxOwo+ICAgICAgfSB3aGlsZSAoIHNzICk7Cj4gIH0KPiBAQCAtMzM1 LDE4ICs0MTUsMTAwIEBAIHZvaWQgcHNyX2RvbWFpbl9mcmVlKHN0cnVjdCBkb21haW4gKmQpCj4g ICAgICBwc3JfZnJlZV9ybWlkKGQpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBjcHVfaW5pdF93 b3JrKHZvaWQpCj4gK3sKPiArICAgIHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm87Cj4gKyAg ICB1bnNpZ25lZCBpbnQgc29ja2V0Owo+ICsgICAgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9j ZXNzb3JfaWQoKTsKPiArICAgIHN0cnVjdCBmZWF0X25vZGUgKmZlYXQ7Cj4gKyAgICBzdHJ1Y3Qg Y3B1aWRfbGVhZiByZWdzID0gey5hID0gMCwgLmIgPSAwLCAuYyA9IDAsIC5kID0gMH07CgpTcGFj ZSBiZWZvcmUgLmEgYW5kIGFmdGVyIHRoZSAuZCA9IDAgcGxlYXNlCgo+ICsKPiArICAgIGlmICgg IWNwdV9oYXMoJmN1cnJlbnRfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX1BRRSkgKQo+ICsgICAgICAg IHJldHVybjsKPiArICAgIGVsc2UgaWYgKCBjdXJyZW50X2NwdV9kYXRhLmNwdWlkX2xldmVsIDwg UFNSX0NQVUlEX0xFVkVMX0NBVCApCj4gKyAgICB7Cj4gKyAgICAgICAgX19jbGVhcl9iaXQoWDg2 X0ZFQVRVUkVfUFFFLCBjdXJyZW50X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKPiArICAgICAg ICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgc29ja2V0ID0gY3B1X3RvX3NvY2tldChjcHUp Owo+ICsgICAgaW5mbyA9IHNvY2tldF9pbmZvICsgc29ja2V0Owo+ICsgICAgaWYgKCBpbmZvLT5m ZWF0X21hc2sgKQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICBJTklUX0xJU1RfSEVBRCgm aW5mby0+ZmVhdF9saXN0KTsKPiArICAgIHNwaW5fbG9ja19pbml0KCZpbmZvLT5yZWZfbG9jayk7 Cj4gKwo+ICsgICAgY3B1aWRfY291bnRfbGVhZihQU1JfQ1BVSURfTEVWRUxfQ0FULCAwLCAmcmVn cyk7Cj4gKyAgICBpZiAoIHJlZ3MuYiAmIFBTUl9SRVNPVVJDRV9UWVBFX0wzICkKPiArICAgIHsK PiArICAgICAgICBjcHVpZF9jb3VudF9sZWFmKFBTUl9DUFVJRF9MRVZFTF9DQVQsIDEsICZyZWdz KTsKPiArCj4gKyAgICAgICAgZmVhdCA9IGZlYXRfbDNfY2F0Owo+ICsgICAgICAgIC8qIHBzcl9j cHVfcHJlcGFyZSB3aWxsIGFsbG9jYXRlIGl0IG9uIHN1YnNlcXVlbnQgQ1BVIG9ubGluaW5nLiAq Lwo+ICsgICAgICAgIGZlYXRfbDNfY2F0ID0gTlVMTDsKPiArICAgICAgICBmZWF0LT5vcHMgPSBs M19jYXRfb3BzOwo+ICsKPiArICAgICAgICBsM19jYXRfaW5pdF9mZWF0dXJlKHJlZ3MsIGZlYXQs IGluZm8pOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjcHVfZmluaV93b3JrKHVu c2lnbmVkIGludCBjcHUpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBzb2NrZXQgPSBjcHVfdG9f c29ja2V0KGNwdSk7Cj4gKwoKSXQgbWF5IGJlIGdvb2QgdG8gaW5jbHVkZSBhIGxpdHRsZSBjb21t ZW50IHNheWluZyB3aHkKd2UgY2FyZSBhYm91dCBjcHVtYXNrX2VtcHR5IC0gYXMgdGhhdCBpcyBu b3Qgb2J2aW91cwphdCBmaXJzdCBnbGFuY2UuCgpQZXJoYXBzOgovKgogKiBXZSBvbmx5IGZyZWUg d2hlbiB3ZSBhcmUgdGhlIGxhc3QgQ1BVIGluIHRoZSBzb2NrZXQuIFRoZSBzb2NrZXRfY3B1bWFz awogKiBpcyBjbGVhcmVkIHByaW9yIHRvIHRoaXMgbm90aWZpY2F0aW9uIGNvZGUgYnkgWFlaIGZ1 bmN0aW9uLgogKi8KPwo+ICsgICAgaWYgKCBzb2NrZXRfY3B1bWFza1tzb2NrZXRdICYmIGNwdW1h c2tfZW1wdHkoc29ja2V0X2NwdW1hc2tbc29ja2V0XSkgKQo+ICsgICAgICAgIGZyZWVfZmVhdHVy ZShzb2NrZXRfaW5mbyArIHNvY2tldCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9faW5pdCBp bml0X3Bzcih2b2lkKQo+ICt7Cj4gKyAgICBpZiAoIG9wdF9jb3NfbWF4IDwgMSApCj4gKyAgICB7 Cj4gKyAgICAgICAgcHJpbnRrKFhFTkxPR19JTkZPICJDQVQ6IGRpc2FibGVkLCBjb3NfbWF4IGlz IHRvbyBzbWFsbFxuIik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIHNv Y2tldF9pbmZvID0geHphbGxvY19hcnJheShzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvLCBucl9zb2Nr ZXRzKTsKPiArCj4gKyAgICBpZiAoICFzb2NrZXRfaW5mbyApCj4gKyAgICB7Cj4gKyAgICAgICAg cHJpbnRrKFhFTkxPR19JTkZPICJGYWlsZWQgdG8gYWxsb2Mgc29ja2V0X2luZm8hXG4iKTsKPiAr ICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9faW5pdCBw c3JfZnJlZSh2b2lkKQo+ICt7Cj4gKyAgICB4ZnJlZShzb2NrZXRfaW5mbyk7Cj4gKyAgICBzb2Nr ZXRfaW5mbyA9IE5VTEw7Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQgcHNyX2NwdV9wcmVwYXJlKHVu c2lnbmVkIGludCBjcHUpCj4gIHsKPiArICAgIGlmICggIXNvY2tldF9pbmZvICkKPiArICAgICAg ICByZXR1cm4gMDsKPiArCj4gKyAgICAvKiBNYWxsb2MgbWVtb3J5IGZvciB0aGUgZ2xvYmFsIGZl YXR1cmUgaGVhZCBoZXJlLiAqLwo+ICsgICAgaWYgKCBmZWF0X2wzX2NhdCA9PSBOVUxMICYmCj4g KyAgICAgICAgIChmZWF0X2wzX2NhdCA9IHh6YWxsb2Moc3RydWN0IGZlYXRfbm9kZSkpID09IE5V TEwgKQo+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ICsKPiAgICAgIHJldHVybiAwOwo+ICB9 Cj4gIAo+ICBzdGF0aWMgdm9pZCBwc3JfY3B1X2luaXQodm9pZCkKPiAgewo+ICsgICAgaWYgKCBz b2NrZXRfaW5mbyApCj4gKyAgICAgICAgY3B1X2luaXRfd29yaygpOwo+ICsKPiAgICAgIHBzcl9h c3NvY19pbml0KCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIHBzcl9jcHVfZmluaSh1bnNpZ25l ZCBpbnQgY3B1KQo+ICB7Cj4gKyAgICBpZiAoIHNvY2tldF9pbmZvICkKPiArICAgICAgICBjcHVf ZmluaV93b3JrKGNwdSk7Cj4gICAgICByZXR1cm47Cj4gIH0KPiAgCj4gQEAgLTM4OCwxMCArNTUw LDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBzcl9wcmVzbXBfaW5pdCh2b2lkKQo+ICAgICAgaWYg KCAob3B0X3BzciAmIFBTUl9DTVQpICYmIG9wdF9ybWlkX21heCApCj4gICAgICAgICAgaW5pdF9w c3JfY210KG9wdF9ybWlkX21heCk7Cj4gIAo+IC0gICAgcHNyX2NwdV9wcmVwYXJlKDApOwo+ICsg ICAgaWYgKCBvcHRfcHNyICYgUFNSX0NBVCApCj4gKyAgICAgICAgaW5pdF9wc3IoKTsKPiArCj4g KyAgICBpZiAoIHBzcl9jcHVfcHJlcGFyZSgwKSApCj4gKyAgICAgICAgcHNyX2ZyZWUoKTsKPiAg Cj4gICAgICBwc3JfY3B1X2luaXQoKTsKPiAtICAgIGlmICggcHNyX2NtdF9lbmFibGVkKCkgKQo+ ICsgICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSB8fCBzb2NrZXRfaW5mbyApCj4gICAgICAgICAg cmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfbmZiKTsKPiAgCj4gICAgICByZXR1cm4gMDsKPiBk aWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaCBiL3hlbi9pbmNsdWRl L2FzbS14ODYvcHJvY2Vzc29yLmgKPiBpbmRleCA3NzM1YmMyLi5lYjBhMWU5IDEwMDY0NAo+IC0t LSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmgKPiArKysgYi94ZW4vaW5jbHVkZS9h c20teDg2L3Byb2Nlc3Nvci5oCj4gQEAgLTE0LDYgKzE0LDcgQEAKPiAgI2luY2x1ZGUgPGFzbS90 eXBlcy5oPgo+ICAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KPiAgI2luY2x1ZGUgPGFzbS9k ZXNjLmg+Cj4gKyNpbmNsdWRlIDxhc20veDg2X2VtdWxhdGUuaD4KPiAgI2VuZGlmCj4gIAo+ICAj aW5jbHVkZSA8YXNtL3g4Ni1kZWZucy5oPgo+IEBAIC0yNTksNiArMjYwLDEyIEBAIHN0YXRpYyBh bHdheXNfaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9jb3VudF9lYngoCj4gICAgICByZXR1cm4g ZWJ4Owo+ICB9Cj4gIAo+ICtzdGF0aWMgYWx3YXlzX2lubGluZSB2b2lkIGNwdWlkX2NvdW50X2xl YWYodWludDMyX3QgbGVhZiwgdWludDMyX3Qgc3VibGVhZiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVpZF9sZWFmICpkYXRhKQo+ICt7Cj4g KyAgICBjcHVpZF9jb3VudChsZWFmLCBzdWJsZWFmLCAmZGF0YS0+YSwgJmRhdGEtPmIsICZkYXRh LT5jLCAmZGF0YS0+ZCk7Cj4gK30KPiArCj4gIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBy ZWFkX2NyMCh2b2lkKQo+ICB7Cj4gICAgICB1bnNpZ25lZCBsb25nIGNyMDsKPiAtLSAKPiAxLjku MQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==