From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 36/92] KVM: VMX: Implement functions for SPPT paging setup Date: Fri, 9 Aug 2019 18:59:51 +0300 Message-ID: <20190809160047.8319-37-alazar@bitdefender.com> References: <20190809160047.8319-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809160047.8319-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: kvm@vger.kernel.org Cc: Tamas K Lengyel , Weijiang Yang , Zhang Yi , Yu C , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , He Chen , Jan Kiszka , =?UTF-8?q?Samuel=20Laur=C3=A9n?= , Konrad Rzeszutek Wilk , virtualization@lists.linux-foundation.org, =?UTF-8?q?Adalbert=20Laz=C4=83r?= , linux-mm@kvack.org, Patrick Colp , Mathieu Tarral , Stefan Hajnoczi , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org RnJvbTogWWFuZyBXZWlqaWFuZyA8d2VpamlhbmcueWFuZ0BpbnRlbC5jb20+CgpTUFBUIGlzIGEg NC1sZXZlbCBwYWdpbmcgc3RydWN0dXJlIHNpbWlsYXIgdG8gRVBULCB3aGVuIFNQUCBpcwpraWNr ZWQgZm9yIHRhcmdldCBwaHlzaWNhbCBwYWdlLCBiaXQgNjEgb2YgdGhlIGNvcnJlc3BvbmRpbmcK RVBUIGVudHkgd2lsbCBiZSBmbGFnZWQsIHRoZW4gU1BQVCBpcyB0cmF2ZXJzZWQgd2l0aCB0aGUg Z2ZuIHRvCmJ1aWxkIHVwIGVudHJpZXMsIHRoZSBsZWFmIGVudHJ5IG9mIFNQUFQgY29udGFpbnMg dGhlIGFjY2VzcwpiaXRtYXAgZm9yIHN1YnBhZ2VzIGluc2lkZSB0aGUgdGFyZ2V0IDRLQiBwaHlz aWNhbCBwYWdlLCBvbmUgYml0CnBlciAxMjgtYnl0ZSBzdWJwYWdlLgoKU1BQVCBlbnRyaWVzIGFy ZSBzZXQgdXAgaW4gYmVsb3cgY2FzZXM6CjEuIHRoZSBFUFQgZmF1bHRlZCBwYWdlIGlzIFNQUCBw cm90ZWN0ZWQuCjIuIFNQUCBtaXMtY29uZmlnIGluZHVjZWQgdm1leGl0IGlzIGhhbmRsZWQuCjMu IFVzZXIgY29uZmlndXJlcyBTUFAgcHJvdGVjdGVkIHBhZ2VzIHZpYSBTUFAgSU9DVExzLgoKQ28t ZGV2ZWxvcGVkLWJ5OiBIZSBDaGVuIDxoZS5jaGVuQGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9m Zi1ieTogSGUgQ2hlbiA8aGUuY2hlbkBsaW51eC5pbnRlbC5jb20+CkNvLWRldmVsb3BlZC1ieTog WmhhbmcgWWkgPHlpLnouemhhbmdAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBaaGFu ZyBZaSA8eWkuei56aGFuZ0BsaW51eC5pbnRlbC5jb20+CkNvLWRldmVsb3BlZC1ieTogWWFuZyBX ZWlqaWFuZyA8d2VpamlhbmcueWFuZ0BpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFlhbmcgV2Vp amlhbmcgPHdlaWppYW5nLnlhbmdAaW50ZWwuY29tPgpNZXNzYWdlLUlkOiA8MjAxOTA3MTcxMzM3 NTEuMTI5MTAtNC13ZWlqaWFuZy55YW5nQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogQWRhbGJl cnQgTGF6xINyIDxhbGF6YXJAYml0ZGVmZW5kZXIuY29tPgotLS0KIGFyY2gveDg2L2luY2x1ZGUv YXNtL2t2bV9ob3N0LmggfCAgIDcgKy0KIGFyY2gveDg2L2t2bS9tbXUuYyAgICAgICAgICAgICAg fCAyMDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGFyY2gveDg2L2t2bS9tbXUu aCAgICAgICAgICAgICAgfCAgIDEgKwogaW5jbHVkZS9saW51eC9rdm1faG9zdC5oICAgICAgICB8 ICAgMyArCiA0IGZpbGVzIGNoYW5nZWQsIDIxNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2 L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggZjFiM2Q4OWEwNDMwLi5jMDU5ODRmMzk5MjMg MTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC94 ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjcxLDcgKzI3MSw4IEBAIHVuaW9uIGt2bV9t bXVfcGFnZV9yb2xlIHsKIAkJdW5zaWduZWQgc21hcF9hbmRub3Rfd3A6MTsKIAkJdW5zaWduZWQg YWRfZGlzYWJsZWQ6MTsKIAkJdW5zaWduZWQgZ3Vlc3RfbW9kZToxOwotCQl1bnNpZ25lZCA6NjsK KwkJdW5zaWduZWQgc3BwOjE7CisJCXVuc2lnbmVkIHJlc2VydmVkOjU7CiAKIAkJLyoKIAkJICog VGhpcyBpcyBsZWZ0IGF0IHRoZSB0b3Agb2YgdGhlIHdvcmQgc28gdGhhdApAQCAtMTQxMCw2ICsx NDExLDEwIEBAIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 KTsKIAogaW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90 IGd2YSwgdTY0IGVycm9yX2NvZGUsCiAJCSAgICAgICB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4p OworCitpbnQga3ZtX21tdV9zZXR1cF9zcHBfc3RydWN0dXJlKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSwKKwkJCQl1MzIgYWNjZXNzX21hcCwgZ2ZuX3QgZ2ZuKTsKKwogdm9pZCBrdm1fbW11X2ludmxw ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7CiB2b2lkIGt2bV9tbXVfaW52cGNp ZF9ndmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGxvbmcgcGNp ZCk7CiB2b2lkIGt2bV9tbXVfbmV3X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IG5l d19jcjMsIGJvb2wgc2tpcF90bGJfZmx1c2gpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21t dS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IDgxMGUzZTViZDU3NS4uOGE2Mjg3Y2QyYmU0 IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5j CkBAIC0yMDYsNiArMjA2LDExIEBAIHN0YXRpYyBjb25zdCB1bmlvbiBrdm1fbW11X3BhZ2Vfcm9s ZSBtbXVfYmFzZV9yb2xlX21hc2sgPSB7CiAJCSh7IHNwdGUgPSBtbXVfc3B0ZV9nZXRfbG9ja2xl c3MoX3dhbGtlci5zcHRlcCk7IDE7IH0pOwlcCiAJICAgICBfX3NoYWRvd193YWxrX25leHQoJihf d2Fsa2VyKSwgc3B0ZSkpCiAKKyNkZWZpbmUgZm9yX2VhY2hfc2hhZG93X3NwcF9lbnRyeShfdmNw dSwgX2FkZHIsIF93YWxrZXIpICAgIFwKKwlmb3IgKHNoYWRvd19zcHBfd2Fsa19pbml0KCYoX3dh bGtlciksIF92Y3B1LCBfYWRkcik7CVwKKwkgICAgIHNoYWRvd193YWxrX29rYXkoJihfd2Fsa2Vy KSk7CQkJXAorCSAgICAgc2hhZG93X3dhbGtfbmV4dCgmKF93YWxrZXIpKSkKKwogc3RhdGljIHN0 cnVjdCBrbWVtX2NhY2hlICpwdGVfbGlzdF9kZXNjX2NhY2hlOwogc3RhdGljIHN0cnVjdCBrbWVt X2NhY2hlICptbXVfcGFnZV9oZWFkZXJfY2FjaGU7CiBzdGF0aWMgc3RydWN0IHBlcmNwdV9jb3Vu dGVyIGt2bV90b3RhbF91c2VkX21tdV9wYWdlczsKQEAgLTUwNSw2ICs1MTAsMTEgQEAgc3RhdGlj IGludCBpc19zaGFkb3dfcHJlc2VudF9wdGUodTY0IHB0ZSkKIAlyZXR1cm4gKHB0ZSAhPSAwKSAm JiAhaXNfbW1pb19zcHRlKHB0ZSk7CiB9CiAKK3N0YXRpYyBpbnQgaXNfc3BwX3NoYWRvd19wcmVz ZW50KHU2NCBwdGUpCit7CisJcmV0dXJuIHB0ZSAmIFBUX1BSRVNFTlRfTUFTSzsKK30KKwogc3Rh dGljIGludCBpc19sYXJnZV9wdGUodTY0IHB0ZSkKIHsKIAlyZXR1cm4gcHRlICYgUFRfUEFHRV9T SVpFX01BU0s7CkBAIC01MjQsNiArNTM0LDExIEBAIHN0YXRpYyBib29sIGlzX2V4ZWN1dGFibGVf cHRlKHU2NCBzcHRlKQogCXJldHVybiAoc3B0ZSAmIChzaGFkb3dfeF9tYXNrIHwgc2hhZG93X254 X21hc2spKSA9PSBzaGFkb3dfeF9tYXNrOwogfQogCitzdGF0aWMgYm9vbCBpc19zcHBfc3B0ZShz dHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlyZXR1cm4gc3AtPnJvbGUuc3BwOworfQorCiBz dGF0aWMga3ZtX3Bmbl90IHNwdGVfdG9fcGZuKHU2NCBwdGUpCiB7CiAJcmV0dXJuIChwdGUgJiBQ VDY0X0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOwpAQCAtMTc1MSw2ICsxNzY2LDg3IEBA IGludCBrdm1fYXJjaF93cml0ZV9sb2dfZGlydHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJl dHVybiAwOwogfQogCitzdGF0aWMgYm9vbCBfX3JtYXBfb3Blbl9zdWJwYWdlX2JpdChzdHJ1Y3Qg a3ZtICprdm0sCisJCQkJICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpCit7CisJ c3RydWN0IHJtYXBfaXRlcmF0b3IgaXRlcjsKKwlib29sIGZsdXNoID0gZmFsc2U7CisJdTY0ICpz cHRlcDsKKwl1NjQgc3B0ZTsKKworCWZvcl9lYWNoX3JtYXBfc3B0ZShybWFwX2hlYWQsICZpdGVy LCBzcHRlcCkgeworCQkvKgorCQkgKiBTUFAgd29ya3Mgb25seSB3aGVuIHRoZSBwYWdlIGlzIHdy aXRlLXByb3RlY3RlZAorCQkgKiBhbmQgU1BQIGJpdCBpcyBzZXQgaW4gRVBUIGxlYWYgZW50cnku CisJCSAqLworCQlmbHVzaCB8PSBzcHRlX3dyaXRlX3Byb3RlY3Qoc3B0ZXAsIGZhbHNlKTsKKwkJ c3B0ZSA9ICpzcHRlcCB8IFBUX1NQUF9NQVNLOworCQlmbHVzaCB8PSBtbXVfc3B0ZV91cGRhdGUo c3B0ZXAsIHNwdGUpOworCX0KKworCXJldHVybiBmbHVzaDsKK30KKworc3RhdGljIGludCBrdm1f bW11X29wZW5fc3VicGFnZV93cml0ZV9wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkJICAg ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKKwkJCQkJICAgICAgZ2ZuX3QgZ2ZuKQor eworCXN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQ7CisJYm9vbCBmbHVzaCA9IGZhbHNl OworCisJLyoKKwkgKiBTUFAgaXMgb25seSBzdXBwb3J0ZWQgd2l0aCA0S0IgbGV2ZWwxIG1lbW9y eSBwYWdlLCBjaGVjaworCSAqIGlmIHRoZSBwYWdlIGlzIG1hcHBlZCBpbiBFUFQgbGVhZiBlbnRy eS4KKwkgKi8KKwlybWFwX2hlYWQgPSBfX2dmbl90b19ybWFwKGdmbiwgUFRfUEFHRV9UQUJMRV9M RVZFTCwgc2xvdCk7CisKKwlpZiAoIXJtYXBfaGVhZC0+dmFsKQorCQlyZXR1cm4gLUVGQVVMVDsK KworCWZsdXNoIHw9IF9fcm1hcF9vcGVuX3N1YnBhZ2VfYml0KGt2bSwgcm1hcF9oZWFkKTsKKwor CWlmIChmbHVzaCkKKwkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGJvb2wgX19ybWFwX2NsZWFyX3N1YnBhZ2VfYml0KHN0cnVjdCBrdm0gKmt2 bSwKKwkJCQkgICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpCit7CisJc3RydWN0 IHJtYXBfaXRlcmF0b3IgaXRlcjsKKwlib29sIGZsdXNoID0gZmFsc2U7CisJdTY0ICpzcHRlcDsK Kwl1NjQgc3B0ZTsKKworCWZvcl9lYWNoX3JtYXBfc3B0ZShybWFwX2hlYWQsICZpdGVyLCBzcHRl cCkgeworCQlzcHRlID0gKCpzcHRlcCAmIH5QVF9TUFBfTUFTSykgfCBQVF9XUklUQUJMRV9NQVNL OworCQlmbHVzaCB8PSBtbXVfc3B0ZV91cGRhdGUoc3B0ZXAsIHNwdGUpOworCX0KKworCXJldHVy biBmbHVzaDsKK30KKworc3RhdGljIGludCBrdm1fbW11X2NsZWFyX3N1YnBhZ2Vfd3JpdGVfcHJv dGVjdChzdHJ1Y3Qga3ZtICprdm0sCisJCQkJCSAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90 ICpzbG90LAorCQkJCQkgICAgICAgZ2ZuX3QgZ2ZuKQoreworCXN0cnVjdCBrdm1fcm1hcF9oZWFk ICpybWFwX2hlYWQ7CisJYm9vbCBmbHVzaCA9IGZhbHNlOworCisJcm1hcF9oZWFkID0gX19nZm5f dG9fcm1hcChnZm4sIFBUX1BBR0VfVEFCTEVfTEVWRUwsIHNsb3QpOworCisJaWYgKCFybWFwX2hl YWQtPnZhbCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlmbHVzaCB8PSBfX3JtYXBfY2xlYXJfc3Vi cGFnZV9iaXQoa3ZtLCBybWFwX2hlYWQpOworCisJaWYgKGZsdXNoKQorCQlrdm1fZmx1c2hfcmVt b3RlX3RsYnMoa3ZtKTsKKworCXJldHVybiAwOworfQorCiBib29sIGt2bV9tbXVfc2xvdF9nZm5f d3JpdGVfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgIHN0cnVjdCBrdm1fbWVtb3J5 X3Nsb3QgKnNsb3QsIHU2NCBnZm4pCiB7CkBAIC0yNTA1LDYgKzI2MDEsMzAgQEAgc3RhdGljIHVu c2lnbmVkIGludCBrdm1fbW11X3BhZ2VfdHJhY2tfYWNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwg Z2ZuX3QgZ2ZuLAogCXJldHVybiBhY2M7CiB9CiAKK3N0cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9t bXVfZ2V0X3NwcF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJCSBnZm5fdCBnZm4s CisJCQkJCQkgdW5zaWduZWQgaW50IGxldmVsKQorCit7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAq c3A7CisJdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9sZTsKKworCXJvbGUgPSB2Y3B1LT5hcmNo Lm1tdS0+bW11X3JvbGUuYmFzZTsKKwlyb2xlLmxldmVsID0gbGV2ZWw7CisJcm9sZS5kaXJlY3Qg PSB0cnVlOworCXJvbGUuc3BwID0gdHJ1ZTsKKworCXNwID0ga3ZtX21tdV9hbGxvY19wYWdlKHZj cHUsIHRydWUpOworCXNwLT5nZm4gPSBnZm47CisJc3AtPnJvbGUgPSByb2xlOworCWhsaXN0X2Fk ZF9oZWFkKCZzcC0+aGFzaF9saW5rLAorCQkgICAgICAgJnZjcHUtPmt2bS0+YXJjaC5tbXVfcGFn ZV9oYXNoCisJCSAgICAgICBba3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbildKTsKKwljbGVhcl9w YWdlKHNwLT5zcHQpOworCXJldHVybiBzcDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9tbXVf Z2V0X3NwcF9wYWdlKTsKKwogc3RhdGljIHN0cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9tbXVfZ2V0 X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkgICAgIGdmbl90IGdmbiwKIAkJCQkJ ICAgICBndmFfdCBnYWRkciwKQEAgLTI2MzIsNiArMjc1MiwxNiBAQCBzdGF0aWMgdm9pZCBzaGFk b3dfd2Fsa19pbml0KHN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgKml0ZXJhdG9yLAog CQkJCSAgICBhZGRyKTsKIH0KIAorc3RhdGljIHZvaWQgc2hhZG93X3NwcF93YWxrX2luaXQoc3Ry dWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciAqaXRlcmF0b3IsCisJCQkJIHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgdTY0IGFkZHIpCit7CisJaXRlcmF0b3ItPmFkZHIgPSBhZGRyOworCWl0ZXJh dG9yLT5zaGFkb3dfYWRkciA9IHZjcHUtPmFyY2gubW11LT5zcHB0X3Jvb3Q7CisKKwkvKiBTUFAg VGFibGUgaXMgYSA0LWxldmVsIHBhZ2luZyBzdHJ1Y3R1cmUgKi8KKwlpdGVyYXRvci0+bGV2ZWwg PSA0OworfQorCiBzdGF0aWMgYm9vbCBzaGFkb3dfd2Fsa19va2F5KHN0cnVjdCBrdm1fc2hhZG93 X3dhbGtfaXRlcmF0b3IgKml0ZXJhdG9yKQogewogCWlmIChpdGVyYXRvci0+bGV2ZWwgPCBQVF9Q QUdFX1RBQkxFX0xFVkVMKQpAQCAtMjY4Miw2ICsyODEyLDE4IEBAIHN0YXRpYyB2b2lkIGxpbmtf c2hhZG93X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNwdGVwLAogCQltYXJrX3Vu c3luYyhzcHRlcCk7CiB9CiAKK3N0YXRpYyB2b2lkIGxpbmtfc3BwX3NoYWRvd19wYWdlKHN0cnVj dCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpzcHRlcCwKKwkJCQkgc3RydWN0IGt2bV9tbXVfcGFnZSAq c3ApCit7CisJdTY0IHNwdGU7CisKKwlzcHRlID0gX19wYShzcC0+c3B0KSB8IFBUX1BSRVNFTlRf TUFTSzsKKworCW1tdV9zcHRlX3NldChzcHRlcCwgc3B0ZSk7CisKKwltbXVfcGFnZV9hZGRfcGFy ZW50X3B0ZSh2Y3B1LCBzcCwgc3B0ZXApOworfQorCiBzdGF0aWMgdm9pZCB2YWxpZGF0ZV9kaXJl Y3Rfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZXAsCiAJCQkJICAgdW5zaWdu ZWQgZGlyZWN0X2FjY2VzcykKIHsKQEAgLTQyNTMsNiArNDM5NSw3MSBAQCBzdGF0aWMgaW50IHRk cF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3BhLCB1MzIgZXJyb3Jf Y29kZSwKIAlyZXR1cm4gUkVUX1BGX1JFVFJZOwogfQogCitzdGF0aWMgdTY0IGZvcm1hdF9zcHBf c3B0ZSh1MzIgc3BwX3dwX2JpdG1hcCkKK3sKKwl1NjQgbmV3X3NwdGUgPSAwOworCWludCBpID0g MDsKKworCS8qCisJICogT25lIDRLIHBhZ2UgY29udGFpbnMgMzIgc3ViLXBhZ2VzLCBpbiBTUFAg dGFibGUgTDRFLCBvbGQgYml0cworCSAqIGFyZSByZXNlcnZlZCwgc28gd2UgbmVlZCB0byB0cmFu c2ZlciB1MzIgc3VicGFnZSB3cml0ZQorCSAqIHByb3RlY3QgYml0bWFwIHRvIHU2NCBTUFAgTDRF IGZvcm1hdC4KKwkgKi8KKwl3aGlsZSAoaSA8IDMyKSB7CisJCWlmIChzcHBfd3BfYml0bWFwICYg KDFVTEwgPDwgaSkpCisJCQluZXdfc3B0ZSB8PSAxVUxMIDw8IChpICogMik7CisKKwkJaSsrOwor CX0KKworCXJldHVybiBuZXdfc3B0ZTsKK30KKworc3RhdGljIHZvaWQgbW11X3NwcF9zcHRlX3Nl dCh1NjQgKnNwdGVwLCB1NjQgbmV3X3NwdGUpCit7CisJX19zZXRfc3B0ZShzcHRlcCwgbmV3X3Nw dGUpOworfQorCitpbnQga3ZtX21tdV9zZXR1cF9zcHBfc3RydWN0dXJlKHN0cnVjdCBrdm1fdmNw dSAqdmNwdSwKKwkJCQl1MzIgYWNjZXNzX21hcCwgZ2ZuX3QgZ2ZuKQoreworCXN0cnVjdCBrdm1f c2hhZG93X3dhbGtfaXRlcmF0b3IgaXRlcjsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKKwln Zm5fdCBwc2V1ZG9fZ2ZuOworCXU2NCBvbGRfc3B0ZSwgc3BwX3NwdGU7CisJaW50IHJldCA9IC1F RkFVTFQ7CisKKwkvKiBkaXJlY3RfbWFwIHNwcCBzdGFydCAqLworCWlmICghVkFMSURfUEFHRSh2 Y3B1LT5hcmNoLm1tdS0+c3BwdF9yb290KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlmb3JfZWFj aF9zaGFkb3dfc3BwX2VudHJ5KHZjcHUsICh1NjQpZ2ZuIDw8IFBBR0VfU0hJRlQsIGl0ZXIpIHsK KwkJaWYgKGl0ZXIubGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgeworCQkJc3BwX3NwdGUg PSBmb3JtYXRfc3BwX3NwdGUoYWNjZXNzX21hcCk7CisJCQlvbGRfc3B0ZSA9IG1tdV9zcHRlX2dl dF9sb2NrbGVzcyhpdGVyLnNwdGVwKTsKKwkJCWlmIChvbGRfc3B0ZSAhPSBzcHBfc3B0ZSkgewor CQkJCW1tdV9zcHBfc3B0ZV9zZXQoaXRlci5zcHRlcCwgc3BwX3NwdGUpOworCQkJCWt2bV9tYWtl X3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOworCQkJfQorCisJCQlyZXQgPSAwOwor CQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWlzX3NwcF9zaGFkb3dfcHJlc2VudCgqaXRlci5zcHRl cCkpIHsKKwkJCXU2NCBiYXNlX2FkZHIgPSBpdGVyLmFkZHI7CisKKwkJCWJhc2VfYWRkciAmPSBQ VDY0X0xWTF9BRERSX01BU0soaXRlci5sZXZlbCk7CisJCQlwc2V1ZG9fZ2ZuID0gYmFzZV9hZGRy ID4+IFBBR0VfU0hJRlQ7CisJCQlzcCA9IGt2bV9tbXVfZ2V0X3NwcF9wYWdlKHZjcHUsIHBzZXVk b19nZm4sCisJCQkJCQkgIGl0ZXIubGV2ZWwgLSAxKTsKKwkJCWxpbmtfc3BwX3NoYWRvd19wYWdl KHZjcHUsIGl0ZXIuc3B0ZXAsIHNwKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBP UlRfU1lNQk9MX0dQTChrdm1fbW11X3NldHVwX3NwcF9zdHJ1Y3R1cmUpOwogc3RhdGljIHZvaWQg bm9ucGFnaW5nX2luaXRfY29udGV4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgc3Ry dWN0IGt2bV9tbXUgKmNvbnRleHQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11Lmgg Yi9hcmNoL3g4Ni9rdm0vbW11LmgKaW5kZXggNDU5NDhkYWJlMGI2Li44YzM0ZGVjZDY0MjIgMTAw NjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaAorKysgYi9hcmNoL3g4Ni9rdm0vbW11LmgKQEAg LTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgUFRfUEFHRV9TSVpFX01BU0sgKDFVTEwgPDwgUFRfUEFH RV9TSVpFX1NISUZUKQogI2RlZmluZSBQVF9QQVRfTUFTSyAoMVVMTCA8PCA3KQogI2RlZmluZSBQ VF9HTE9CQUxfTUFTSyAoMVVMTCA8PCA4KQorI2RlZmluZSBQVF9TUFBfTUFTSyAoMVVMTCA8PCA2 MSkKICNkZWZpbmUgUFQ2NF9OWF9TSElGVCA2MwogI2RlZmluZSBQVDY0X05YX01BU0sgKDFVTEwg PDwgUFQ2NF9OWF9TSElGVCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5o IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IGU4NzY5MjE5MzhiNi4uY2E3NTk3ZTQy OWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9s aW51eC9rdm1faG9zdC5oCkBAIC04MzIsNiArODMyLDkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcnVu bmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wga3ZtX2FyY2hfdmNwdV9pbl9rZXJu ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fYXJjaF92Y3B1X3Nob3VsZF9raWNr KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKK3N0cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9tbXVf Z2V0X3NwcF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCWdmbl90IGdmbiwgdW5zaWdu ZWQgaW50IGxldmVsKTsKKwogI2lmbmRlZiBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0MKIC8qCiAg KiBBbGwgYXJjaGl0ZWN0dXJlcyB0aGF0IHdhbnQgdG8gdXNlIHZ6YWxsb2MgY3VycmVudGx5IGFs c28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVh bGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRp b24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZv L3ZpcnR1YWxpemF0aW9u