From mboxrd@z Thu Jan 1 00:00:00 1970 From: Suravee Suthikulpanit Subject: [PATCH v2 06/10] x86/SVM: Add AVIC vmexit handlers Date: Fri, 30 Dec 2016 23:45:57 -0600 Message-ID: <1483163161-2402-7-git-send-email-suravee.suthikulpanit@amd.com> References: <1483163161-2402-1-git-send-email-suravee.suthikulpanit@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1483163161-2402-1-git-send-email-suravee.suthikulpanit@amd.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Jan Beulich , andrew.cooper3@citrix.com, Suravee Suthikulpanit , sherry.hurwitz@amd.com, boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org QVZJQyBpbnRyb2R1Y2VzIHR3byBuZXcgI3ZtZXhpdCBoYW5kbGVyczoKClZNRVhJVF9JTkNPTVBf SVBJOgpUaGlzIG9jY3VycyB3aGVuIGFuIElQSSBjb3VsZCBub3QgYmUgZGVsaXZlcmVkIHRvIGFs bCB0YXJnZXRlZCBndWVzdAp2aXJ0dWFsIHByb2Nlc3NvcnMgYmVjYXVzZSBhdCBsZWFzdCBvbmUg Z3Vlc3QgdmlydHVhbCBwcm9jZXNzb3IKd2FzIG5vdCBhbGxvY2F0ZWQgdG8gYSBwaHlzaWNhbCBj b3JlIGF0IHRoZSB0aW1lLiBJbiB0aGlzIGNhc2UsClhlbiB3b3VsZCB0cnkgdG8gZW11bGF0ZSBJ UEkuCgpWTUVYSVRfRE9fTk9BQ0NFTDoKVGhpcyBvb2N1cnMgd2hlbiBhIGd1ZXN0IGFjY2VzcyB0 byBhbiBBUElDIHJlZ2lzdGVyIHRoYXQgY2Fubm90IGJlCmFjY2VsZXJhdGVkIGJ5IEFWSUMuIElu IHRoaXMgY2FzZSwgWGVuIHRyaWVzIHRvIGVtdWxhdGUgcmVnaXN0ZXIgYWNjZXNzZXMuCgpUaGlz IGZhdWx0IGlzIGFsc28gZ2VuZXJhdGVkIGlmIGFuIEVPSSBpc2F0dGVtcHRlZCB3aGVuIHRoZSBo aWdoZXN0IHByaW9yaXR5CmluLXNlcnZpY2UgaW50ZXJydXB0IGlzIHNldCBmb3IgbGV2ZWwtdHJp Z2dlcmVkIG1vZGUuCgpTaWduZWQtb2ZmLWJ5OiBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2 ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgpDYzogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25y YWQud2lsa0BvcmFjbGUuY29tPgpDYzogSmFuIEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29tPgpD YzogQm9yaXMgT3N0cm92c2t5IDxib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNvbT4KLS0tCiB4ZW4v YXJjaC94ODYvaHZtL3N2bS9hdmljLmMgICAgICAgIHwgMzM3ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHhlbi9hcmNoL3g4Ni9odm0vc3ZtL3N2bS5jICAgICAgICAgfCAg IDggKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmggICAgICAgICB8ICAgMiArCiB4ZW4vaW5j bHVkZS9hc20teDg2L2h2bS9zdm0vYXZpYy5oIHwgICAzICsKIHhlbi9pbmNsdWRlL2FzbS14ODYv aHZtL3N2bS92bWNiLmggfCAgIDIgKwogNSBmaWxlcyBjaGFuZ2VkLCAzNTIgaW5zZXJ0aW9ucygr KQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL2F2aWMuYyBiL3hlbi9hcmNoL3g4 Ni9odm0vc3ZtL2F2aWMuYwppbmRleCBiNjJmOTgyLi5jMGI3MTUxIDEwMDY0NAotLS0gYS94ZW4v YXJjaC94ODYvaHZtL3N2bS9hdmljLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS9zdm0vYXZpYy5j CkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CiAjaW5jbHVkZSA8eGVu L3N0ZGJvb2wuaD4KICNpbmNsdWRlIDxhc20vYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+ CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vZXZlbnQuaD4KICNpbmNs dWRlIDxhc20vaHZtL2VtdWxhdGUuaD4KQEAgLTQwLDYgKzQxLDggQEAKICNkZWZpbmUgQVZJQ19I UEFfTUFTSyAgICAgICAgICAgKCgoMVVMTCA8PCA0MCkgLSAxKSA8PCBBVklDX0hQQV9TSElGVCkK ICNkZWZpbmUgQVZJQ19WQVBJQ19CQVJfTUFTSyAgICAgQVZJQ19IUEFfTUFTSwogCisjZGVmaW5l IEFWSUNfVU5BQ0NFTF9BQ0NFU1NfT0ZGU0VUX01BU0sgICAgMHhGRjAKKwogLyoKICAqIE5vdGU6 CiAgKiBDdXJyZW50bHksIHN2bS1hdmljIG1vZGUgaXMgbm90IHN1cHBvcnRlZCB3aXRoIG5lc3Rl ZCB2aXJ0dWFsaXphdGlvbi4KQEAgLTEyMiw2ICsxMjUsOCBAQCBpbnQgc3ZtX2F2aWNfZG9tX2lu aXQoc3RydWN0IGRvbWFpbiAqZCkKICAgICBjbGVhcl9kb21haW5fcGFnZShfbWZuKG1mbikpOwog ICAgIGQtPmFyY2guaHZtX2RvbWFpbi5zdm0uYXZpY19waHlfYXBpY19pZF90YWJsZV9tZm4gPSBt Zm47CiAKKyAgICBzcGluX2xvY2tfaW5pdCgmZC0+YXJjaC5odm1fZG9tYWluLnN2bS5hdmljX2xk cl9tb2RlX2xvY2spOworCiAgICAgcmV0dXJuIHJldDsKICBlcnJfb3V0OgogICAgIHN2bV9hdmlj X2RvbV9kZXN0cm95KGQpOwpAQCAtMjIyLDYgKzIyNywzMzggQEAgaW50IHN2bV9hdmljX2luaXRf dm1jYihzdHJ1Y3QgdmNwdSAqdikKIH0KIAogLyoKKyAqIE5vdGU6CisgKiBUaGlzIGZ1bmN0aW9u IGhhbmRsZXMgdGhlIEFWSUNfSU5DT01QX0lQSSAjdm1leGl0IHdoZW4gQVZJQyBpcyBlbmFibGVk LgorICogVGhlIGhhcmR3YXJlIGdlbmVyYXRlcyB0aGlzIGZhdWx0IHdoZW4gYW4gSVBJIGNvdWxk IG5vdCBiZSBkZWxpdmVyZWQKKyAqIHRvIGFsbCB0YXJnZXRlZCBndWVzdCB2aXJ0dWFsIHByb2Nl c3NvcnMgYmVjYXVzZSBhdCBsZWFzdCBvbmUgZ3Vlc3QKKyAqIHZpcnR1YWwgcHJvY2Vzc29yIHdh cyBub3QgYWxsb2NhdGVkIHRvIGEgcGh5c2ljYWwgY29yZSBhdCB0aGUgdGltZS4KKyAqLwordm9p ZCBzdm1fYXZpY192bWV4aXRfZG9faW5jb21wX2lwaShzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVn cykKK3sKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgc3RydWN0IHZtY2Jf c3RydWN0ICp2bWNiID0gY3Vyci0+YXJjaC5odm1fc3ZtLnZtY2I7CisgICAgdTMyIGljcmggPSB2 bWNiLT5leGl0aW5mbzEgPj4gMzI7CisgICAgdTMyIGljcmwgPSB2bWNiLT5leGl0aW5mbzE7Cisg ICAgdTMyIGlkID0gdm1jYi0+ZXhpdGluZm8yID4+IDMyOworICAgIHUzMiBpbmRleCA9IHZtY2It PmV4aXRpbmZvMiAmJiAweEZGOworCisgICAgc3dpdGNoICggaWQgKQorICAgIHsKKyAgICBjYXNl IEFWSUNfSU5DTVBfSVBJX0VSUl9JTlZBTElEX0lOVF9UWVBFOgorICAgICAgICAvKgorICAgICAg ICAgKiBBVklDIGhhcmR3YXJlIGhhbmRsZXMgdGhlIGRlbGl2ZXJ5IG9mCisgICAgICAgICAqIElQ SXMgd2hlbiB0aGUgc3BlY2lmaWVkIE1lc3NhZ2UgVHlwZSBpcyBGaXhlZAorICAgICAgICAgKiAo YWxzbyBrbm93biBhcyBmaXhlZCBkZWxpdmVyeSBtb2RlKSBhbmQKKyAgICAgICAgICogdGhlIFRy aWdnZXIgTW9kZSBpcyBlZGdlLXRyaWdnZXJlZC4gVGhlIGhhcmR3YXJlCisgICAgICAgICAqIGFs c28gc3VwcG9ydHMgc2VsZiBhbmQgYnJvYWRjYXN0IGRlbGl2ZXJ5IG1vZGVzCisgICAgICAgICAq IHNwZWNpZmllZCB2aWEgdGhlIERlc3RpbmF0aW9uIFNob3J0aGFuZChEU0gpCisgICAgICAgICAq IGZpZWxkIG9mIHRoZSBJQ1JMLiBMb2dpY2FsIGFuZCBwaHlzaWNhbCBBUElDIElECisgICAgICAg ICAqIGZvcm1hdHMgYXJlIHN1cHBvcnRlZC4gQWxsIG90aGVyIElQSSB0eXBlcyBjYXVzZQorICAg ICAgICAgKiBhICNWTUVYSVQsIHdoaWNoIG5lZWRzIHRvIGVtdWxhdGVkLgorICAgICAgICAgKi8K KyAgICAgICAgdmxhcGljX3JlZ193cml0ZShjdXJyLCBBUElDX0lDUjIsIGljcmgpOworICAgICAg ICB2bGFwaWNfcmVnX3dyaXRlKGN1cnIsIEFQSUNfSUNSLCBpY3JsKTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSBBVklDX0lOQ01QX0lQSV9FUlJfVEFSR0VUX05PVF9SVU46CisgICAgeworICAg ICAgICAvKgorICAgICAgICAgKiBBdCB0aGlzIHBvaW50LCB3ZSBleHBlY3QgdGhhdCB0aGUgQVZJ QyBIVyBoYXMgYWxyZWFkeQorICAgICAgICAgKiBzZXQgdGhlIGFwcHJvcHJpYXRlIElSUiBiaXRz IG9uIHRoZSB2YWxpZCB0YXJnZXQKKyAgICAgICAgICogdmNwdXMuIFNvLCB3ZSBqdXN0IG5lZWQg dG8ga2ljayB0aGUgYXBwcm9wcmlhdGUgdmNwdS4KKyAgICAgICAgICovCisgICAgICAgIHN0cnVj dCB2Y3B1ICpjdXJjOworICAgICAgICBzdHJ1Y3QgZG9tYWluICpjdXJkID0gY3Vyci0+ZG9tYWlu OworICAgICAgICB1aW50MzJfdCBkZXN0ID0gR0VUX3hBUElDX0RFU1RfRklFTEQoaWNyaCk7Cisg ICAgICAgIHVpbnQzMl90IHNob3J0X2hhbmQgPSBpY3JsICYgQVBJQ19TSE9SVF9NQVNLOworICAg ICAgICBib29sIGRlc3RfbW9kZSA9ICEhKGljcmwgJiBBUElDX0RFU1RfTUFTSyk7CisKKyAgICAg ICAgZm9yX2VhY2hfdmNwdSAoIGN1cmQsIGN1cmMgKQorICAgICAgICB7CisgICAgICAgICAgICBp ZiAoIGN1cmMgIT0gY3VyciAmJgorICAgICAgICAgICAgICAgICB2bGFwaWNfbWF0Y2hfZGVzdCh2 Y3B1X3ZsYXBpYyhjdXJjKSwgdmNwdV92bGFwaWMoY3VyciksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNob3J0X2hhbmQsIGRlc3QsIGRlc3RfbW9kZSkgKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIHZjcHVfa2ljayhjdXJjKTsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg ICAgY2FzZSBBVklDX0lOQ01QX0lQSV9FUlJfSU5WX1RBUkdFVDoKKyAgICAgICAgZHByaW50ayhY RU5MT0dfRVJSLAorICAgICAgICAgICAgICAgICJTVk06ICVzOiBJbnZhbGlkIElQSSB0YXJnZXQg KGljcj0lIzA4eDolMDh4LCBpZHg9JXUpXG4iLAorICAgICAgICAgICAgICAgIF9fZnVuY19fLCBp Y3JoLCBpY3JsLCBpbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVZJQ19JTkNNUF9J UElfRVJSX0lOVl9CS19QQUdFOgorICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsCisgICAgICAg ICAgICAgICAgIlNWTTogJXM6IEludmFsaWQgYmsgcGFnZSAoaWNyPSUjMDh4OiUwOHgsIGlkeD0l dSlcbiIsCisgICAgICAgICAgICAgICAgX19mdW5jX18sIGljcmgsIGljcmwsIGluZGV4KTsKKyAg ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCAi U1ZNOiAlczogVW5rbm93biBJUEkgaW50ZXJjZXB0aW9uICglI3gpXG4iLAorICAgICAgICAgICAg ICAgIF9fZnVuY19fLCBpZCk7CisgICAgfQorfQorCitzdGF0aWMgc3RydWN0IGF2aWNfbG9nX2Fw aWNfaWRfZW50ICoKK2F2aWNfZ2V0X2xvZ2ljYWxfaWRfZW50cnkoY29uc3Qgc3RydWN0IHZjcHUg KnYsIHUzMiBsZHIsIGJvb2wgZmxhdCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgICAg c3RydWN0IGF2aWNfbG9nX2FwaWNfaWRfZW50ICphdmljX2xvZ19hcGlkX2lkX3RhYmxlOworICAg IGNvbnN0IHN0cnVjdCBzdm1fZG9tYWluICpkID0gJnYtPmRvbWFpbi0+YXJjaC5odm1fZG9tYWlu LnN2bTsKKyAgICB1bnNpZ25lZCBpbnQgZGVzdF9pZCA9IEdFVF9BUElDX0xPR0lDQUxfSUQobGRy KTsKKworICAgIGlmICggIWRlc3RfaWQgKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlm ICggZmxhdCApCisgICAgeworICAgICAgICBpbmRleCA9IGZmcyhkZXN0X2lkKSAtIDE7CisgICAg ICAgIGlmICggaW5kZXggPiA3ICkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAg ICBlbHNlCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgY2x1c3RlciA9IChkZXN0X2lkICYg MHhmMCkgPj4gNDsKKyAgICAgICAgaW50IGFwaWMgPSBmZnMoZGVzdF9pZCAmIDB4MGYpIC0gMTsK KworICAgICAgICBpZiAoIChhcGljIDwgMCkgfHwgKGFwaWMgPiA3KSB8fCAoY2x1c3RlciA+PSAw eGYpICkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpbmRleCA9IChjbHVzdGVy IDw8IDIpICsgYXBpYzsKKyAgICB9CisKKyAgICBBU1NFUlQoaW5kZXggPD0gMjU1KTsKKworICAg IGF2aWNfbG9nX2FwaWRfaWRfdGFibGUgPSBtZm5fdG9fdmlydChkLT5hdmljX2xvZ19hcGljX2lk X3RhYmxlX21mbik7CisKKyAgICByZXR1cm4gJmF2aWNfbG9nX2FwaWRfaWRfdGFibGVbaW5kZXhd OworfQorCitzdGF0aWMgaW50IGF2aWNfbGRyX3dyaXRlKHN0cnVjdCB2Y3B1ICp2LCB1OCBnX3Bo eV9pZCwgdTMyIGxkciwgYm9vbCB2YWxpZCkKK3sKKyAgICBzdHJ1Y3QgYXZpY19sb2dfYXBpY19p ZF9lbnQgKmVudHJ5LCBuZXdfZW50cnk7CisgICAgdTMyICpicCA9IGF2aWNfZ2V0X2JrX3BhZ2Vf ZW50cnkodiwgQVBJQ19ERlIpOworCisgICAgaWYgKCAhYnAgKQorICAgICAgICByZXR1cm4gLUVJ TlZBTDsKKworICAgIGVudHJ5ID0gYXZpY19nZXRfbG9naWNhbF9pZF9lbnRyeSh2LCBsZHIsICgq YnAgPT0gQVBJQ19ERlJfRkxBVCkpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiAt RUlOVkFMOworCisgICAgbmV3X2VudHJ5ID0gKmVudHJ5OworICAgIHNtcF9ybWIoKTsKKyAgICBu ZXdfZW50cnkuZ3Vlc3RfcGh5X2FwaWNfaWQgPSBnX3BoeV9pZDsKKyAgICBuZXdfZW50cnkudmFs aWQgPSB2YWxpZDsKKyAgICAqZW50cnkgPSBuZXdfZW50cnk7CisgICAgc21wX3dtYigpOworCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXZpY19oYW5kbGVfbGRyX3VwZGF0ZShzdHJ1 Y3QgdmNwdSAqdikKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICB1MzIgKmxkciA9IGF2aWNfZ2V0 X2JrX3BhZ2VfZW50cnkodiwgQVBJQ19MRFIpOworICAgIHUzMiAqYXBpY19pZF9yZWcgPSBhdmlj X2dldF9ia19wYWdlX2VudHJ5KHYsIEFQSUNfSUQpOworCisgICAgaWYgKCAhbGRyIHx8ICEqbGRy IHx8ICFhcGljX2lkX3JlZyApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgcmV0ID0g YXZpY19sZHJfd3JpdGUodiwgR0VUX0FQSUNfUEhZU0lDQUxfSUQoKmFwaWNfaWRfcmVnKSwgKmxk ciwgdHJ1ZSk7CisgICAgaWYgKCByZXQgJiYgdi0+YXJjaC5odm1fc3ZtLmF2aWNfbGFzdF9sZHIg KQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogTm90ZToKKyAgICAgICAgICogSW4gY2Fz ZSBvZiBmYWlsdXJlIHRvIHVwZGF0ZSBMRFIgcmVnaXN0ZXIsCisgICAgICAgICAqIHdlIHNldCB0 aGUgZ3Vlc3QgcGh5c2ljYWwgQVBJQyBJRCB0byAwLAorICAgICAgICAgKiBhbmQgc2V0IHRoZSBl bnRyeSBsb2dpY2FsIEFQSUQgSUQgZW50cnkKKyAgICAgICAgICogdG8gaW52YWxpZCAoZmFsc2Up LgorICAgICAgICAgKi8KKyAgICAgICAgYXZpY19sZHJfd3JpdGUodiwgMCwgdi0+YXJjaC5odm1f c3ZtLmF2aWNfbGFzdF9sZHIsIGZhbHNlKTsKKyAgICAgICAgdi0+YXJjaC5odm1fc3ZtLmF2aWNf bGFzdF9sZHIgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKgorICAgICAg ICAgKiBOb3RlOgorICAgICAgICAgKiBUaGlzIHNhdmVzIHRoZSBsYXN0IHZhbGlkIExEUiBzbyB0 aGF0IHdlCisgICAgICAgICAqIGtub3cgd2hpY2ggZW50cnkgaW4gdGhlIGxvY2FsIEFQSUMgSUQK KyAgICAgICAgICogdG8gY2xlYW4gdXAgd2hlbiB0aGUgTERSIGlzIHVwZGF0ZWQuCisgICAgICAg ICAqLworICAgICAgICB2LT5hcmNoLmh2bV9zdm0uYXZpY19sYXN0X2xkciA9ICpsZHI7CisgICAg fQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdmljX2hhbmRsZV9hcGljX2lk X3VwZGF0ZShzdHJ1Y3QgdmNwdSAqdiwgYm9vbCBpbml0KQoreworICAgIHN0cnVjdCBhdmljX3Bo eV9hcGljX2lkX2VudCAqb2xkLCAqbmV3OworICAgIHN0cnVjdCBhcmNoX3N2bV9zdHJ1Y3QgKnMg PSAmdi0+YXJjaC5odm1fc3ZtOworICAgIHUzMiAqYXBpY19pZF9yZWcgPSBhdmljX2dldF9ia19w YWdlX2VudHJ5KHYsIEFQSUNfSUQpOworCisgICAgaWYgKCAhYXBpY19pZF9yZWcgKQorICAgICAg ICByZXR1cm4gLUVJTlZBTDsKKworICAgIG9sZCA9IHMtPmF2aWNfbGFzdF9waHlfaWQ7CisgICAg QVNTRVJUKG9sZCk7CisKKyAgICBuZXcgPSBhdmljX2dldF9waHlfYXBpY19pZF9lbnQodiwgR0VU X0FQSUNfUEhZU0lDQUxfSUQoKmFwaWNfaWRfcmVnKSk7CisgICAgaWYgKCAhbmV3ICkKKyAgICAg ICAgcmV0dXJuIDA7CisKKyAgICAvKiBXZSBuZWVkIHRvIG1vdmUgcGh5c2ljYWxfaWRfZW50cnkg dG8gbmV3IG9mZnNldCAqLworICAgICpuZXcgPSAqb2xkOworICAgICooKHU2NCAqKW9sZCkgPSAw VUxMOworICAgIHMtPmF2aWNfbGFzdF9waHlfaWQgPSBuZXc7CisKKyAgICAvKgorICAgICAqIFVw ZGF0ZSB0aGUgZ3Vlc3QgcGh5c2ljYWwgQVBJQyBJRCBpbiB0aGUgbG9naWNhbAorICAgICAqIEFQ SUMgSUQgdGFibGUgZW50cnkgaWYgTERSIGlzIGFscmVhZHkgc2V0dXAuCisgICAgICovCisgICAg aWYgKCB2LT5hcmNoLmh2bV9zdm0uYXZpY19sYXN0X2xkciApCisgICAgICAgIGF2aWNfaGFuZGxl X2xkcl91cGRhdGUodik7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdmljX2hh bmRsZV9kZnJfdXBkYXRlKHN0cnVjdCB2Y3B1ICp2KQoreworICAgIHUzMiBtb2Q7CisgICAgc3Ry dWN0IHN2bV9kb21haW4gKmQgPSAmdi0+ZG9tYWluLT5hcmNoLmh2bV9kb21haW4uc3ZtOworICAg IHUzMiAqZGZyID0gYXZpY19nZXRfYmtfcGFnZV9lbnRyeSh2LCBBUElDX0RGUik7CisKKyAgICBp ZiAoICFkZnIgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIG1vZCA9ICgqZGZyID4+ IDI4KSAmIDB4RnU7CisKKyAgICBzcGluX2xvY2soJmQtPmF2aWNfbGRyX21vZGVfbG9jayk7Cisg ICAgaWYgKCBkLT5hdmljX2xkcl9tb2RlICE9IG1vZCApCisgICAgeworICAgICAgICAvKgorICAg ICAgICAgKiBXZSBhc3N1bWUgdGhhdCBhbGwgbG9jYWwgQVBJQ3MgYXJlIHVzaW5nIHRoZSBzYW1l IHR5cGUuCisgICAgICAgICAqIElmIExEUiBtb2RlIGNoYW5nZXMsIHdlIG5lZWQgdG8gZmx1c2gg dGhlIGRvbWFpbiBBVklDIGxvZ2ljYWwKKyAgICAgICAgICogQVBJQyBpZCB0YWJsZS4KKyAgICAg ICAgICovCisgICAgICAgIGNsZWFyX2RvbWFpbl9wYWdlKF9tZm4oZC0+YXZpY19sb2dfYXBpY19p ZF90YWJsZV9tZm4pKTsKKyAgICAgICAgc21wX3dtYigpOworICAgICAgICBkLT5hdmljX2xkcl9t b2RlID0gbW9kOworICAgIH0KKyAgICBzcGluX3VubG9jaygmZC0+YXZpY19sZHJfbW9kZV9sb2Nr KTsKKworICAgIGlmICggdi0+YXJjaC5odm1fc3ZtLmF2aWNfbGFzdF9sZHIgKQorICAgICAgICBh dmljX2hhbmRsZV9sZHJfdXBkYXRlKHYpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgYXZpY191bmFjY2VsX3RyYXBfd3JpdGUoc3RydWN0IHZjcHUgKnYpCit7CisgICAgc3RydWN0 IHZtY2Jfc3RydWN0ICp2bWNiID0gdi0+YXJjaC5odm1fc3ZtLnZtY2I7CisgICAgdTMyIG9mZnNl dCA9IHZtY2ItPmV4aXRpbmZvMSAmIEFWSUNfVU5BQ0NFTF9BQ0NFU1NfT0ZGU0VUX01BU0s7Cisg ICAgdTMyICpyZWcgPSBhdmljX2dldF9ia19wYWdlX2VudHJ5KHYsIG9mZnNldCk7CisKKyAgICBp ZiAoICFyZWcgKQorICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisKKyAgICBz d2l0Y2ggKCBvZmZzZXQgKQorICAgIHsKKyAgICBjYXNlIEFQSUNfSUQ6CisgICAgICAgIGlmICgg YXZpY19oYW5kbGVfYXBpY19pZF91cGRhdGUodiwgZmFsc2UpICkKKyAgICAgICAgICAgIHJldHVy biBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBUElDX0xE UjoKKyAgICAgICAgaWYgKCBhdmljX2hhbmRsZV9sZHJfdXBkYXRlKHYpICkKKyAgICAgICAgICAg IHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB UElDX0RGUjoKKyAgICAgICAgaWYgKCBhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHYpICkKKyAgICAg ICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAg ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdmxhcGljX3JlZ193cml0ZSh2 LCBvZmZzZXQsICpyZWcpOworCisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworLyoKKyAq IE5vdGU6CisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIEFWSUNfTk9BQ0NFTCAjdm1leGl0 IHdoZW4gQVZJQyBpcyBlbmFibGVkLgorICogVGhlIGhhcmR3YXJlIGdlbmVyYXRlcyB0aGlzIGZh dWx0IHdoZW4gOgorICogLSAgQSBndWVzdCBhY2Nlc3MgdG8gYW4gQVBJQyByZWdpc3RlciB0aGF0 IGlzIG5vdCBhY2NlbGVyYXRlZAorICogICAgYnkgQVZJQyBoYXJkd2FyZS4KKyAqIC0gRU9JIGlz IGF0dGVtcHRlZCB3aGVuIHRoZSBoaWdoZXN0IHByaW9yaXR5IGluLXNlcnZpY2UgaW50ZXJydXB0 CisgKiAgIGlzIGxldmVsLXRyaWdnZXJlZC4KKyAqLwordm9pZCBzdm1fYXZpY192bWV4aXRfZG9f bm9hY2NlbChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKK3sKKyAgICBzdHJ1Y3QgdmNwdSAq Y3VyciA9IGN1cnJlbnQ7CisgICAgc3RydWN0IHZtY2Jfc3RydWN0ICp2bWNiID0gY3Vyci0+YXJj aC5odm1fc3ZtLnZtY2I7CisgICAgdTMyIG9mZnNldCA9IHZtY2ItPmV4aXRpbmZvMSAmIDB4RkYw OworICAgIHUzMiBydyA9ICh2bWNiLT5leGl0aW5mbzEgPj4gMzIpICYgMHgxOworCisgICAgc3dp dGNoICggb2Zmc2V0ICkKKyAgICB7CisgICAgY2FzZSBBUElDX0lEOgorICAgIGNhc2UgQVBJQ19F T0k6CisgICAgY2FzZSBBUElDX1JSUjoKKyAgICBjYXNlIEFQSUNfTERSOgorICAgIGNhc2UgQVBJ Q19ERlI6CisgICAgY2FzZSBBUElDX1NQSVY6CisgICAgY2FzZSBBUElDX0VTUjoKKyAgICBjYXNl IEFQSUNfSUNSOgorICAgIGNhc2UgQVBJQ19MVlRUOgorICAgIGNhc2UgQVBJQ19MVlRUSE1SOgor ICAgIGNhc2UgQVBJQ19MVlRQQzoKKyAgICBjYXNlIEFQSUNfTFZUMDoKKyAgICBjYXNlIEFQSUNf TFZUMToKKyAgICBjYXNlIEFQSUNfTFZURVJSOgorICAgIGNhc2UgQVBJQ19UTUlDVDoKKyAgICBj YXNlIEFQSUNfVERDUjoKKyAgICAgICAgLyoKKyAgICAgICAgICogSGFuZGxpbmcgQVZJQyBUcmFw IChpbnRlcmNlcHQgcmlnaHQgYWZ0ZXIgdGhlIGFjY2VzcykuCisgICAgICAgICAqLworICAgICAg ICBpZiAoICFydyApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJ ZiBhIHJlYWQgdHJhcCBoYXBwZW5zLCB0aGUgQ1BVIG1pY3JvY29kZSBkb2VzIG5vdAorICAgICAg ICAgICAgICogaW1wbGVtZW50IHRoZSBzcGVjLgorICAgICAgICAgICAgICovCisgICAgICAgICAg ICBCVUcoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGF2aWNfdW5hY2NlbF90cmFwX3dyaXRl KGN1cnIpICE9IFg4NkVNVUxfT0tBWSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGso WEVOTE9HX0VSUiwgIiVzOiBGYWlsZWQgdG8gaGFuZGxlIHRyYXAgd3JpdGUgKCUjeClcbiIsCisg ICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJu OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qCisg ICAgICAgICAqIEhhbmRsaW5nIEFWSUMgRmF1bHQgKGludGVyY2VwdCBiZWZvcmUgdGhlIGFjY2Vz cykuCisgICAgICAgICAqLworICAgICAgICBpZiAoICFydyApCisgICAgICAgIHsKKyAgICAgICAg ICAgIHUzMiAqZW50cnkgPSBhdmljX2dldF9ia19wYWdlX2VudHJ5KGN1cnIsIG9mZnNldCk7CisK KyAgICAgICAgICAgIGlmICggIWVudHJ5ICkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg ICAgICAgICAgICplbnRyeSA9IHZsYXBpY19yZWFkX2FsaWduZWQodmNwdV92bGFwaWMoY3Vyciks IG9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgaHZtX2VtdWxhdGVfb25lX3ZtX2V2ZW50KEVN VUxfS0lORF9OT1JNQUwsIFRSQVBfaW52YWxpZF9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEhWTV9ERUxJVkVSX05PX0VSUk9SX0NPREUpOworICAgIH0KKworICAgIHJldHVy bjsKK30KKworLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKICAqIGMtZmlsZS1z dHlsZTogIkJTRCIKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL3N2bS5jIGIveGVu L2FyY2gveDg2L2h2bS9zdm0vc3ZtLmMKaW5kZXggY2VmMjliMi4uY2I1MjgxYyAxMDA2NDQKLS0t IGEveGVuL2FyY2gveDg2L2h2bS9zdm0vc3ZtLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS9zdm0v c3ZtLmMKQEAgLTI2ODIsNiArMjY4MiwxNCBAQCB2b2lkIHN2bV92bWV4aXRfaGFuZGxlcihzdHJ1 Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKICAgICAgICAgc3ZtX3ZtZXhpdF9kb19wYXVzZShyZWdz KTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZNRVhJVF9BVklDX0lOQ09NUF9JUEk6Cisg ICAgICAgIHN2bV9hdmljX3ZtZXhpdF9kb19pbmNvbXBfaXBpKHJlZ3MpOworICAgICAgICBicmVh azsKKworICAgIGNhc2UgVk1FWElUX0FWSUNfTk9BQ0NFTDoKKyAgICAgICAgc3ZtX2F2aWNfdm1l eGl0X2RvX25vYWNjZWwocmVncyk7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAg ICB1bmV4cGVjdGVkX2V4aXRfdHlwZToKICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgInVu ZXhwZWN0ZWQgVk1FWElUOiBleGl0IHJlYXNvbiA9ICUjIlBSSXg2NCIsICIKZGlmZiAtLWdpdCBh L3hlbi9pbmNsdWRlL2FzbS14ODYvYXBpYy5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmgK aW5kZXggYmU5YTUzNS4uYWE1ZTdlYyAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9h cGljLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmgKQEAgLTE2LDYgKzE2LDggQEAK ICNkZWZpbmUgQVBJQ19ERUJVRyAgIDIKIAogI2RlZmluZQlTRVRfQVBJQ19MT0dJQ0FMX0lEKHgp CSgoKHgpPDwyNCkpCisjZGVmaW5lCUdFVF9BUElDX0xPR0lDQUxfSUQoeCkJKCgoeCk+PjI0KSAm IDB4RkZ1KQorI2RlZmluZQlHRVRfQVBJQ19QSFlTSUNBTF9JRCh4KQkoKCh4KT4+MjQpICYgMHhG RnUpCiAKICNkZWZpbmUgSU9fQVBJQ19SRURJUl9WRUNUT1JfTUFTSwkweDAwMEZGCiAjZGVmaW5l IElPX0FQSUNfUkVESVJfREVTVF9MT0dJQ0FMCTB4MDA4MDAKZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS14ODYvaHZtL3N2bS9hdmljLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdm0v YXZpYy5oCmluZGV4IDE2YjQzM2MuLjdlMGFiY2IgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2Fz bS14ODYvaHZtL3N2bS9hdmljLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL2F2 aWMuaApAQCAtMzcsNCArMzcsNyBAQCBib29sX3Qgc3ZtX2F2aWNfdmNwdV9lbmFibGVkKGNvbnN0 IHN0cnVjdCB2Y3B1ICp2KTsKIHZvaWQgc3ZtX2F2aWNfdXBkYXRlX3ZhcGljX2Jhcihjb25zdCBz dHJ1Y3QgdmNwdSAqdix1aW50NjRfdCBkYXRhKTsKIGludCBzdm1fYXZpY19pbml0X3ZtY2Ioc3Ry dWN0IHZjcHUgKnYpOwogCit2b2lkIHN2bV9hdmljX3ZtZXhpdF9kb19pbmNvbXBfaXBpKHN0cnVj dCBjcHVfdXNlcl9yZWdzICpyZWdzKTsKK3ZvaWQgc3ZtX2F2aWNfdm1leGl0X2RvX25vYWNjZWwo c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpOworCiAjZW5kaWYgLyogX1NWTV9BVklDX0hfICov CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdm0vdm1jYi5oIGIveGVuL2lu Y2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL3ZtY2IuaAppbmRleCBkM2QwNDVmLi45YWJmMDc3IDEwMDY0 NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdm0vdm1jYi5oCisrKyBiL3hlbi9pbmNs dWRlL2FzbS14ODYvaHZtL3N2bS92bWNiLmgKQEAgLTMwMiw2ICszMDIsOCBAQCBlbnVtIFZNRVhJ VF9FWElUQ09ERQogICAgIFZNRVhJVF9NV0FJVF9DT05ESVRJT05BTD0gMTQwLCAvKiAweDhjICov CiAgICAgVk1FWElUX1hTRVRCViAgICAgICAgICAgPSAxNDEsIC8qIDB4OGQgKi8KICAgICBWTUVY SVRfTlBGICAgICAgICAgICAgICA9IDEwMjQsIC8qIDB4NDAwLCBuZXN0ZWQgcGFnaW5nIGZhdWx0 ICovCisgICAgVk1FWElUX0FWSUNfSU5DT01QX0lQSSAgPSAxMDI1LCAvKiAweDQwMSAqLworICAg IFZNRVhJVF9BVklDX05PQUNDRUwgICAgID0gMTAyNiwgLyogMHg0MDIgKi8KICAgICBWTUVYSVRf SU5WQUxJRCAgICAgICAgICA9ICAtMQogfTsKIAotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhl bi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK