From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH RFC 13/44] x86/pt-shadow: Shadow L4 tables from 64bit PV guests Date: Thu, 4 Jan 2018 20:21:38 +0000 Message-ID: <1515097329-31902-14-git-send-email-andrew.cooper3@citrix.com> References: <1515097329-31902-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1515097329-31902-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org U2VlIHRoZSBjb2RlIGNvbW1lbnRzIGZvciByZWFzb25pbmcgYW5kIHRoZSBhbGdvcml0aG0gZGVz Y3JpcHRpb24uCgpUaGlzIGlzIGEgdmVyeSBzaW1wbGlzdGljIGFsZ29yaXRobSwgd2hpY2ggY29t ZXMgd2l0aCBhIHN1YnN0YW50aWFsCnBlcmZvcm1hbmNlIG92ZXJoZWFkLiAgVGhlIGFsZ29yaXRo bSB3aWxsIGJlIGltcHJvdmVkIGluIGEgbGF0ZXIgcGF0Y2gsIG9uY2UKbW9yZSBpbmZyYXN0cnVj dHVyZSBpcyBpbiBwbGFjZS4KClNvbWUgb2YgdGhlIGNvZGUgKHBhcnRpY3VsYXJseSBpbiBwdF9t YXliZV9zaGFkb3coKSkgaXMgc3RydWN0dXJlZCBvZGRseS4KVGhpcyBpcyBkZWxpYmVyYXRlIHRv IHNpbXBsaWZ5IHRoZSBwYXRjaCBmb3IgdGhlIGxhdGVyIGFsZ29yaXRobSBpbXByb3ZlbWVudCwK dG8gYXZvaWQgdW5uZWNlc3NhcnkgY29kZSBtb3Rpb24gZ2V0dGluZyBpbiB0aGUgd2F5IG9mIHRo ZSBsb2dpY2FsIGNoYW5nZS4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5j b29wZXIzQGNpdHJpeC5jb20+Ci0tLQp2MzoKICogUmViYXNlIG92ZXIgY2hhbmdlIHRvIHVzaW5n IHB0c2gKICogUmV3b3JrLCBpbiB0ZXJtcyBvZiBiZWluZyBhcyBjbG9zZSB0byB0aGUgZXZlbnR1 YWwgYWxnb3JpdGhtIGFzIHBvc3NpYmxlLAogICBiZWZvcmUgd2UgZ2V0IG1hcF9kb21haW5fcGFn ZSgpIHdoaWNoIGlzIHVzYWJsZSBpbiBjb250ZXh0IHN3aXRjaCBjb250ZXh0LgotLS0KIHhlbi9h cmNoL3g4Ni9tbS5jICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHhlbi9hcmNoL3g4Ni9tbS9z aGFkb3cvbXVsdGkuYyAgICAgfCAgIDIgKwogeGVuL2FyY2gveDg2L3B2L21tLmggICAgICAgICAg ICAgICB8ICAxNiArKystCiB4ZW4vYXJjaC94ODYvcHYvcHQtc2hhZG93LmMgICAgICAgIHwgMTY0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS14 ODYvZml4bWFwLmggICAgICAgfCAgIDEgKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9wdC1zaGFk b3cuaCB8ICAyNCArKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMjA5IGluc2VydGlvbnMoKyksIDMg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMgYi94ZW4vYXJjaC94 ODYvbW0uYwppbmRleCBmODVlZjZjLi4zNzU1NjVmIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYv bW0uYworKysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtMTI2LDYgKzEyNiw3IEBACiAjaW5jbHVk ZSA8YXNtL2h2bS9ncmFudF90YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wdi9ncmFudF90YWJsZS5o PgogI2luY2x1ZGUgPGFzbS9wdi9tbS5oPgorI2luY2x1ZGUgPGFzbS9wdi9wdC1zaGFkb3cuaD4K IAogI2luY2x1ZGUgInB2L21tLmgiCiAKQEAgLTUwMSwxMyArNTAyLDE1IEBAIERFRklORV9QRVJf Q1BVKHVuc2lnbmVkIGxvbmcsIGN1cnJfcHRiYXNlKTsKIAogdm9pZCBkb193cml0ZV9wdGJhc2Uo c3RydWN0IHZjcHUgKnYsIGJvb2wgdGxiX21haW50ZW5hbmNlKQogewotICAgIHVuc2lnbmVkIGxv bmcgbmV3X2NyMyA9IHYtPmFyY2guY3IzOworICAgIHVuc2lnbmVkIGxvbmcgbmV3X2NyMzsKICAg ICB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogICAgIHVuc2lnbmVkIGxv bmcgKnRoaXNfY3Vycl9wdGJhc2UgPSAmcGVyX2NwdShjdXJyX3B0YmFzZSwgY3B1KTsKIAogICAg IC8qIENoZWNrIHRoYXQgJWNyMyBpc24ndCBiZWluZyBzaHVmZmxlZCB1bmRlciBvdXIgZmVldC4g Ki8KICAgICBBU1NFUlQoKnRoaXNfY3Vycl9wdGJhc2UgPT0gcmVhZF9jcjMoKSk7CiAKKyAgICBu ZXdfY3IzID0gcHRfbWF5YmVfc2hhZG93KHYpOworCiAgICAgaWYgKCB0bGJfbWFpbnRlbmFuY2Ug KQogICAgICAgICB3cml0ZV9jcjMobmV3X2NyMyk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEveGVu L2FyY2gveDg2L21tL3NoYWRvdy9tdWx0aS5jIGIveGVuL2FyY2gveDg2L21tL3NoYWRvdy9tdWx0 aS5jCmluZGV4IGM0ZTk1NGUuLjljOTI5ZWQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9z aGFkb3cvbXVsdGkuYworKysgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMKQEAgLTM5 LDYgKzM5LDcgQEAgYXNtKCIuZmlsZSBcIiIgX19PQkpFQ1RfRklMRV9fICJcIiIpOwogI2luY2x1 ZGUgPGFzbS9odm0vY2FjaGVhdHRyLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRl IDxhc20vZ3Vlc3RfcHQuaD4KKyNpbmNsdWRlIDxhc20vcHYvcHQtc2hhZG93Lmg+CiAjaW5jbHVk ZSA8cHVibGljL3NjaGVkLmg+CiAjaW5jbHVkZSAicHJpdmF0ZS5oIgogI2luY2x1ZGUgInR5cGVz LmgiCkBAIC05NTIsNiArOTUzLDcgQEAgc3RhdGljIGludCBzaGFkb3dfc2V0X2w0ZShzdHJ1Y3Qg ZG9tYWluICpkLAogCiAgICAgLyogV3JpdGUgdGhlIG5ldyBlbnRyeSAqLwogICAgIHNoYWRvd193 cml0ZV9lbnRyaWVzKHNsNGUsICZuZXdfc2w0ZSwgMSwgc2w0bWZuKTsKKyAgICBwdF9zaGFkb3df bDRfd3JpdGUoZCwgbWZuX3RvX3BhZ2Uoc2w0bWZuKSwgcGdlbnRyeV9wdHJfdG9fc2xvdChzbDRl KSk7CiAgICAgZmxhZ3MgfD0gU0hBRE9XX1NFVF9DSEFOR0VEOwogCiAgICAgaWYgKCBzaGFkb3df bDRlX2dldF9mbGFncyhvbGRfc2w0ZSkgJiBfUEFHRV9QUkVTRU5UICkKZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9wdi9tbS5oIGIveGVuL2FyY2gveDg2L3B2L21tLmgKaW5kZXggYTEwYjA5YS4u N2M2NmNhNyAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3B2L21tLmgKKysrIGIveGVuL2FyY2gv eDg2L3B2L21tLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fUFZfTU1fSF9fCiAjZGVmaW5l IF9fUFZfTU1fSF9fCiAKKyNpbmNsdWRlIDxhc20vcHYvcHQtc2hhZG93Lmg+CisKIGwxX3BnZW50 cnlfdCAqbWFwX2d1ZXN0X2wxZSh1bnNpZ25lZCBsb25nIGxpbmVhciwgbWZuX3QgKmdsMW1mbik7 CiAKIGludCBuZXdfZ3Vlc3RfY3IzKG1mbl90IG1mbik7CkBAIC0zOCw3ICs0MCw3IEBAIHN0YXRp YyBpbmxpbmUgbDFfcGdlbnRyeV90IGd1ZXN0X2dldF9lZmZfbDFlKHVuc2lnbmVkIGxvbmcgbGlu ZWFyKQogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgdXBkYXRlX2ludHB0ZShpbnRwdGVfdCAqcCwg aW50cHRlX3Qgb2xkLCBpbnRwdGVfdCBuZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIG1mbiwgc3RydWN0IHZjcHUgKnYsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIHByZXNlcnZlX2FkKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZV9hZCwgdW5zaWduZWQgaW50IGxldmVsKQogewogICAg IGJvb2wgcnYgPSB0cnVlOwogCkBAIC03Nyw2ICs3OSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg dXBkYXRlX2ludHB0ZShpbnRwdGVfdCAqcCwgaW50cHRlX3Qgb2xkLCBpbnRwdGVfdCBuZXcsCiAg ICAgICAgICAgICBvbGQgPSB0OwogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKCBsZXZlbCA9 PSA0ICkKKyAgICAgICAgcHRfc2hhZG93X2w0X3dyaXRlKHYtPmRvbWFpbiwgbWZuX3RvX3BhZ2Uo bWZuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnZW50cnlfcHRyX3RvX3Nsb3QocCkp OworCiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC04Nyw3ICs5NCwxMiBAQCBzdGF0aWMgaW5saW5l IGJvb2wgdXBkYXRlX2ludHB0ZShpbnRwdGVfdCAqcCwgaW50cHRlX3Qgb2xkLCBpbnRwdGVfdCBu ZXcsCiAjZGVmaW5lIFVQREFURV9FTlRSWShfdCxfcCxfbyxfbixfbSxfdixfYWQpICAgICAgICAg ICAgICAgICAgICAgICAgIFwKICAgICB1cGRhdGVfaW50cHRlKCZfdCAjIyBlX2dldF9pbnRwdGUo KihfcCkpLCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgX3QgIyMg ZV9nZXRfaW50cHRlKF9vKSwgX3QgIyMgZV9nZXRfaW50cHRlKF9uKSwgICBcCi0gICAgICAgICAg ICAgICAgICAoX20pLCAoX3YpLCAoX2FkKSkKKyAgICAgICAgICAgICAgICAgIChfbSksIChfdiks IChfYWQpLCBfdCAjIyBfTEVWRUwpCisKKyNkZWZpbmUgbDFfTEVWRUwgMQorI2RlZmluZSBsMl9M RVZFTCAyCisjZGVmaW5lIGwzX0xFVkVMIDMKKyNkZWZpbmUgbDRfTEVWRUwgNAogCiBzdGF0aWMg aW5saW5lIGwxX3BnZW50cnlfdCBhZGp1c3RfZ3Vlc3RfbDFlKGwxX3BnZW50cnlfdCBsMWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBk b21haW4gKmQpCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvcHQtc2hhZG93LmMgYi94ZW4v YXJjaC94ODYvcHYvcHQtc2hhZG93LmMKaW5kZXggN2RiOGVmYi4uNDZhMDI1MSAxMDA2NDQKLS0t IGEveGVuL2FyY2gveDg2L3B2L3B0LXNoYWRvdy5jCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9wdC1z aGFkb3cuYwpAQCAtMjIsOCArMjIsMzIgQEAKICNpbmNsdWRlIDx4ZW4vbW0uaD4KICNpbmNsdWRl IDx4ZW4vbnVtYS5oPgogCisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9w di9wdC1zaGFkb3cuaD4KIAorLyoKKyAqIFRvIHVzZSBwZXJjcHUgbGluZWFyIHJhbmdlcywgd2Ug cmVxdWlyZSB0aGF0IG5vIHR3byBwY3B1cyBoYXZlICVjcjMKKyAqIHBvaW50aW5nIGF0IHRoZSBz YW1lIEw0IHBhZ2V0YWJsZSBhdCB0aGUgc2FtZSB0aW1lLgorICoKKyAqIEd1ZXN0cyBob3dldmVy IG1pZ2h0IGNob29zZSB0byB1c2UgdGhlIHNhbWUgTDQgcGFnZXRhYmxlIG9uIG11bHRpcGxlIHZj cHVzCisgKiBhdCBvbmNlLCBlLmcuIGNvbmN1cnJlbnRseSBzY2hlZHVsaW5nIHR3byB0aHJlYWRz IGZyb20gdGhlIHNhbWUgcHJvY2Vzcy4KKyAqIEluIHByYWN0aWNlLCBhbGwgSFZNIGd1ZXN0cywg YW5kIDMyYml0IFBWIGd1ZXN0cyBydW4gb24gWGVuLXByb3ZpZGVkCisgKiBwZXItdmNwdSBtb25p dG9yIHRhYmxlcywgc28gaXQgaXMgb25seSA2NGJpdCBQViBndWVzdHMgd2hpY2ggYXJlIGFuIGlz c3VlLgorICoKKyAqIFRvIHJlc29sdmUgdGhlIGlzc3VlLCB3ZSBzaGFkb3cgTDQgcGFnZXRhYmxl cyBmcm9tIDY0Yml0IFBWIGd1ZXN0cyB3aGVuCisgKiB0aGV5IGFyZSBpbiBjb250ZXh0LgorICoK KyAqIFRoZSBhbGdvcml0aG0gaXMgZmFpcmx5IHNpbXBsZS4KKyAqCisgKiAgIC0gV2hlbiBhIHBj cHUgaXMgc3dpdGNoaW5nIHRvIGEgbmV3IHZjcHUgY3IzIGFuZCBzaGFkb3dpbmcgaXMgbmVjZXNz YXJ5LAorICogICAgIHBlcmZvcm0gYSBmdWxsIDRLIGNvcHkgb2YgdGhlIGd1ZXN0cyBmcmFtZSBp bnRvIGEgcGVyY3B1IGZyYW1lLCBhbmQgcnVuCisgKiAgICAgb24gdGhhdC4KKyAqICAgLSBXaGVu IGEgd3JpdGUgdG8gYSBndWVzdHMgTDQgcGFnZXRhYmxlIG9jY3VycywgdGhlIHVwZGF0ZSBtdXN0 IGJlCisgKiAgICAgcHJvcGFnYXRlZCB0byBhbGwgZXhpc3Rpbmcgc2hhZG93cy4gIEFuIElQSSBp cyBzZW50IHRvIHRoZSBkb21haW5zCisgKiAgICAgZGlydHkgbWFzayBpbmRpY2F0aW5nIHdoaWNo IGZyYW1lL3Nsb3Qgd2FzIHVwZGF0ZWQsIGFuZCBlYWNoIHBjcHUKKyAqICAgICBjaGVja3MgdG8g c2VlIHdoZXRoZXIgaXQgbmVlZHMgdG8gc3luYyB0aGUgdXBkYXRlIGludG8gaXRzIHNoYWRvdy4K KyAqLworCiBzdHJ1Y3QgcHRfc2hhZG93IHsKICAgICAvKgogICAgICAqIEEgZnJhbWUgdXNlZCB0 byBzaGFkb3cgYSB2Y3B1cyBpbnRlbmRlZCBwYWdldGFibGUuICBXaGVuIHNoYWRvd2luZywKQEAg LTMxLDYgKzU1LDE3IEBAIHN0cnVjdCBwdF9zaGFkb3cgewogICAgICAqLwogICAgIHBhZGRyX3Qg c2hhZG93X2w0OwogICAgIGw0X3BnZW50cnlfdCAqc2hhZG93X2w0X3ZhOworCisgICAgLyoKKyAg ICAgKiBEb21haW4gdG8gd2hpY2ggdGhlIHNoYWRvd2VkIHN0YXRlIGJlbG9uZ3MsIG9yIE5VTEwg aWYgbm8gc3RhdGUgaXMKKyAgICAgKiBiZWluZyBjYWNoZWQuICBJUElzIGZvciB1cGRhdGVzIHRv IGNhY2hlZCBpbmZvcm1hdGlvbiBhcmUgYmFzZWQgb24gdGhlCisgICAgICogZG9tYWluIGRpcnR5 IG1hc2ssIHdoaWNoIGNhbiByYWNlIHdpdGggdGhlIHRhcmdldCBvZiB0aGUgSVBJIHN3aXRjaGlu ZworICAgICAqIHRvIGEgZGlmZmVyZW50IGNvbnRleHQuCisgICAgICovCisgICAgY29uc3Qgc3Ry dWN0IGRvbWFpbiAqZG9tYWluOworCisgICAgLyogSWYgbm9uemVybywgYSBndWVzdHMgcGFnZXRh YmxlIHdoaWNoIHdlIGFyZSBzaGFkb3dpbmcuICovCisgICAgcGFkZHJfdCBzaGFkb3dpbmc7CiB9 OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHB0X3NoYWRvdywgcHRzaCk7CkBAIC03 Niw2ICsxMTEsMTM1IEBAIHZvaWQgcHRfc2hhZG93X2ZyZWUodW5zaWduZWQgaW50IGNwdSkKIH0K IAogLyoKKyAqIFdlIG9ubHkgbmVlZCB0byBzaGFkb3cgNC1sZXZlbCBQViBndWVzdHMuICBBbGwg b3RoZXIgZ3Vlc3RzIGhhdmUgcGVyLXZjcHUKKyAqIG1vbml0b3IgdGFibGVzIHdoaWNoIGFyZSBu ZXZlciBzY2hlZHVsZWQgb24gY29uY3VycmVudCBwY3B1cy4gIENhcmUgbmVlZHMKKyAqIHRvIGJl IHRha2VuIG5vdCB0byBzaGFkb3cgZDB2MCBkdXJpbmcgY29uc3RydWN0aW9uLCBhcyBpdCB3cml0 ZXMgaXRzIEw0CisgKiBkaXJlY3RseS4KKyAqLworc3RhdGljIGJvb2wgcHRfbmVlZF9zaGFkb3co Y29uc3Qgc3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICByZXR1cm4gKHN5c3RlbV9zdGF0ZSA+PSBT WVNfU1RBVEVfYWN0aXZlICYmIGlzX3B2X2RvbWFpbihkKSAmJgorICAgICAgICAgICAgIWlzX2lk bGVfZG9tYWluKGQpICYmICFpc19wdl8zMmJpdF9kb21haW4oZCkgJiYgZC0+bWF4X3ZjcHVzID4g MSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgcHRfbWF5YmVfc2hhZG93KHN0cnVjdCB2Y3B1ICp2KQor eworICAgIHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisgICAgc3RydWN0 IHB0X3NoYWRvdyAqcHRzaCA9ICZwZXJfY3B1KHB0c2gsIGNwdSk7CisgICAgdW5zaWduZWQgbG9u ZyBmbGFncywgbmV3X2NyMyA9IHYtPmFyY2guY3IzOworCisgICAgLyoKKyAgICAgKiBJUElzIGZv ciB1cGRhdGVzIGFyZSBiYXNlZCBvbiB0aGUgZG9tYWluIGRpcnR5IG1hc2suICBJZiB3ZSBldmVy IHN3aXRjaAorICAgICAqIG91dCBvZiB0aGUgY3VycmVudGx5IHNoYWRvd2VkIGNvbnRleHQgKGV2 ZW4gdG8gaWRsZSksIHRoZSBjYWNoZSB3aWxsCisgICAgICogYmVjb21lIHN0YWxlLgorICAgICAq LworICAgIGlmICggcHRzaC0+ZG9tYWluICYmCisgICAgICAgICBwdHNoLT5kb21haW4gIT0gdi0+ ZG9tYWluICkKKyAgICB7CisgICAgICAgIHB0c2gtPmRvbWFpbiA9IE5VTEw7CisgICAgICAgIHB0 c2gtPnNoYWRvd2luZyA9IDA7CisgICAgfQorCisgICAgLyogTm8gc2hhZG93aW5nIG5lY2Vzc2Fy eT8gUnVuIG9uIHRoZSBpbnRlbmRlZCBwYWdldGFibGUuICovCisgICAgaWYgKCAhcHRfbmVlZF9z aGFkb3codi0+ZG9tYWluKSApCisgICAgICAgIHJldHVybiBuZXdfY3IzOworCisgICAgcHRzaC0+ ZG9tYWluID0gdi0+ZG9tYWluOworCisgICAgLyogRmFzdHBhdGgsIGlmIHdlIGFyZSBhbHJlYWR5 IHNoYWRvd2luZyB0aGUgaW50ZW5kZWQgcGFnZXRhYmxlLiAqLworICAgIGlmICggcHRzaC0+c2hh ZG93aW5nID09IG5ld19jcjMgKQorICAgICAgICByZXR1cm4gcHRzaC0+c2hhZG93X2w0OworCisg ICAgLyoKKyAgICAgKiBXZSBtYXkgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAo ZS5nLiBjb250ZXh0IHN3aXRjaCksIG9yCisgICAgICogaW50ZXJydXB0cyBlbmFibGVkIChlLmcu IG5ld19ndWVzdF9jcjMoKSkuCisgICAgICoKKyAgICAgKiBSZWFkcyBhbmQgbW9kaWZpY2F0aW9u cyBvZiBwdHNoLT4gYXJlIG9ubHkgb24gdGhlIGxvY2FsIGNwdSwgYnV0IG11c3QKKyAgICAgKiBi ZSBleGNsdWRlZCBhZ2FpbnN0IHJlYWRzIGFuZCBtb2RpZmljYXRpb25zIGluIF9wdF9zaGFkb3df aXBpKCkuCisgICAgICovCisgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisgICAgeworICAg ICAgICBsNF9wZ2VudHJ5X3QgKmw0dCwgKnZjcHVfbDR0OworCisgICAgICAgIHNldF9wZXJjcHVf Zml4bWFwKGNwdSwgUEVSQ1BVX0ZJWFNMT1RfU0hBRE9XLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBsMWVfZnJvbV9wYWRkcihuZXdfY3IzLCBfX1BBR0VfSFlQRVJWSVNPUl9STykpOworICAg ICAgICBwdHNoLT5zaGFkb3dpbmcgPSBuZXdfY3IzOworICAgICAgICBsb2NhbF9pcnFfcmVzdG9y ZShmbGFncyk7CisKKyAgICAgICAgbDR0ID0gcHRzaC0+c2hhZG93X2w0X3ZhOworICAgICAgICB2 Y3B1X2w0dCA9IHBlcmNwdV9maXhfdG9fdmlydChjcHUsIFBFUkNQVV9GSVhTTE9UX1NIQURPVyk7 CisKKyAgICAgICAgY29weV9wYWdlKGw0dCwgdmNwdV9sNHQpOworICAgIH0KKworICAgIHJldHVy biBwdHNoLT5zaGFkb3dfbDQ7Cit9CisKK3N0cnVjdCBwdHNoX2lwaV9pbmZvCit7CisgICAgY29u c3Qgc3RydWN0IGRvbWFpbiAqZDsKKyAgICBjb25zdCBzdHJ1Y3QgcGFnZV9pbmZvICpwZzsKKyAg ICBlbnVtIHsKKyAgICAgICAgUFRTSF9JUElfV1JJVEUsCisgICAgfSBvcDsKKyAgICB1bnNpZ25l ZCBpbnQgc2xvdDsKK307CisKK3N0YXRpYyB2b2lkIF9wdF9zaGFkb3dfaXBpKHZvaWQgKmFyZykK K3sKKyAgICB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworICAgIHN0cnVj dCBwdF9zaGFkb3cgKnB0c2ggPSAmcGVyX2NwdShwdHNoLCBjcHUpOworICAgIGNvbnN0IHN0cnVj dCBwdHNoX2lwaV9pbmZvICppbmZvID0gYXJnOworICAgIHVuc2lnbmVkIGxvbmcgbWFkZHIgPSBw YWdlX3RvX21hZGRyKGluZm8tPnBnKTsKKworICAgIC8qIE5vIGxvbmdlciBzaGFkb3dpbmcgc3Rh dGUgZnJvbSB0aGlzIGRvbWFpbj8gIE5vdGhpbmcgdG8gZG8uICovCisgICAgaWYgKCBpbmZvLT5k ICE9IHB0c2gtPmRvbWFpbiApCisgICAgICAgIHJldHVybjsKKworICAgIC8qIE5vdCBzaGFkb3dp bmcgdGhpcyBmcmFtZT8gIE5vdGhpbmcgdG8gZG8uICovCisgICAgaWYgKCBwdHNoLT5zaGFkb3dp bmcgIT0gbWFkZHIgKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKCBpbmZvLT5vcCAp CisgICAgeworICAgICAgICBsNF9wZ2VudHJ5X3QgKmw0dCwgKnZjcHVfbDR0OworCisgICAgY2Fz ZSBQVFNIX0lQSV9XUklURToKKyAgICAgICAgbDR0ID0gcHRzaC0+c2hhZG93X2w0X3ZhOworCisg ICAgICAgIC8qIFJldXNlIHRoZSBtYXBwaW5nIGVzdGFibGlzaGVkIGluIHB0X21heWJlX3NoYWRv dygpLiAqLworICAgICAgICBBU1NFUlQobDFlX2dldF9wYWRkcigqcGVyY3B1X2ZpeG1hcF9sMWUo Y3B1LCBQRVJDUFVfRklYU0xPVF9TSEFET1cpKSA9PQorICAgICAgICAgICAgICAgbWFkZHIpOwor ICAgICAgICB2Y3B1X2w0dCA9IHBlcmNwdV9maXhfdG9fdmlydChjcHUsIFBFUkNQVV9GSVhTTE9U X1NIQURPVyk7CisKKyAgICAgICAgbDR0W2luZm8tPnNsb3RdID0gdmNwdV9sNHRbaW5mby0+c2xv dF07CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1VOUkVB Q0hBQkxFKCk7CisgICAgfQorfQorCit2b2lkIHB0X3NoYWRvd19sNF93cml0ZShjb25zdCBzdHJ1 Y3QgZG9tYWluICpkLCBjb25zdCBzdHJ1Y3QgcGFnZV9pbmZvICpwZywKKyAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBzbG90KQoreworICAgIHN0cnVjdCBwdHNoX2lwaV9pbmZv IGluZm87CisKKyAgICBpZiAoICFwdF9uZWVkX3NoYWRvdyhkKSApCisgICAgICAgIHJldHVybjsK KworICAgIGluZm8gPSAoc3RydWN0IHB0c2hfaXBpX2luZm8peworICAgICAgICAuZCA9IGQsCisg ICAgICAgIC5wZyA9IHBnLAorICAgICAgICAub3AgPSBQVFNIX0lQSV9XUklURSwKKyAgICAgICAg LnNsb3QgPSBzbG90LAorICAgIH07CisKKyAgICBvbl9zZWxlY3RlZF9jcHVzKGQtPmRvbWFpbl9k aXJ0eV9jcHVtYXNrLCBfcHRfc2hhZG93X2lwaSwgJmluZm8sIDEpOworfQorCisvKgogICogTG9j YWwgdmFyaWFibGVzOgogICogbW9kZTogQwogICogYy1maWxlLXN0eWxlOiAiQlNEIgpkaWZmIC0t Z2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9maXhtYXAuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYv Zml4bWFwLmgKaW5kZXggZDQ2OTM5YS4uNzQ4MjE5ZiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUv YXNtLXg4Ni9maXhtYXAuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2ZpeG1hcC5oCkBAIC0y OCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8YWNwaS9hcGVpLmg+CiAKICNkZWZpbmUgTlJfUEVSQ1BV X1NMT1RTIDEKKyNkZWZpbmUgUEVSQ1BVX0ZJWFNMT1RfU0hBRE9XIDAKIAogLyoKICAqIEhlcmUg d2UgZGVmaW5lIGFsbCB0aGUgY29tcGlsZS10aW1lICdzcGVjaWFsJyB2aXJ0dWFsCmRpZmYgLS1n aXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L3B2L3B0LXNoYWRvdy5oIGIveGVuL2luY2x1ZGUvYXNt LXg4Ni9wdi9wdC1zaGFkb3cuaAppbmRleCBmZjk5Yzg1Li42ZTcxZTk5IDEwMDY0NAotLS0gYS94 ZW4vaW5jbHVkZS9hc20teDg2L3B2L3B0LXNoYWRvdy5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14 ODYvcHYvcHQtc2hhZG93LmgKQEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgX19YODZfUFZfUFRf U0hBRE9XX0hfXwogI2RlZmluZSBfX1g4Nl9QVl9QVF9TSEFET1dfSF9fCiAKKyNpbmNsdWRlIDx4 ZW4vc2NoZWQuaD4KKwogI2lmZGVmIENPTkZJR19QVgogCiAvKgpAQCAtMzAsMTEgKzMyLDMzIEBA CiBpbnQgcHRfc2hhZG93X2FsbG9jKHVuc2lnbmVkIGludCBjcHUpOwogdm9pZCBwdF9zaGFkb3df ZnJlZSh1bnNpZ25lZCBpbnQgY3B1KTsKIAorLyoKKyAqIENhbGxlZCBmb3IgY29udGV4dCBzd2l0 Y2hlcywgYW5kIHdoZW4gYSB2Y3B1IGV4cGxpY2l0bHkgY2hhbmdlcyBjcjMuICBUaGUKKyAqIFBU IHNoYWRvdyBsb2dpYyByZXR1cm5zIHRoZSBjcjMgaGFyZHdhcmUgc2hvdWxkIHJ1biBvbiwgd2hp Y2ggaXMgZWl0aGVyCisgKiB2LT5hcmNoLmNyMyAobm8gc2hhZG93aW5nIG5lY2Vzc2FyeSksIG9y IGEgbG9jYWwgZnJhbWUgKHdoaWNoIGlzIGEgc3VpdGFibGUKKyAqIHNoYWRvdyBvZiB2LT5hcmNo LmNyMykuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcHRfbWF5YmVfc2hhZG93KHN0cnVjdCB2Y3B1ICp2 KTsKKworLyoKKyAqIENhbGxlZCB3aGVuIGEgd3JpdGUgb2NjdXJzIHRvIGFuIEw0IHBhZ2V0YWJs ZS4gIFRoZSBQVCBzaGFkb3cgbG9naWMgYnJpbmdzCisgKiBhbnkgc2hhZG93cyBvZiB0aGlzIHBh Z2UgdXAtdG8tZGF0ZS4KKyAqLwordm9pZCBwdF9zaGFkb3dfbDRfd3JpdGUoCisgICAgY29uc3Qg c3RydWN0IGRvbWFpbiAqZCwgY29uc3Qgc3RydWN0IHBhZ2VfaW5mbyAqcGcsIHVuc2lnbmVkIGlu dCBzbG90KTsKKwogI2Vsc2UgLyogIUNPTkZJR19QViAqLwogCiBzdGF0aWMgaW5saW5lIGludCBw dF9zaGFkb3dfYWxsb2ModW5zaWduZWQgaW50IGNwdSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlu bGluZSB2b2lkIHB0X3NoYWRvd19mcmVlKHVuc2lnbmVkIGludCBjcHUpIHsgfQogCitzdGF0aWMg aW5saW5lIHVuc2lnbmVkIGxvbmcgcHRfbWF5YmVfc2hhZG93KHN0cnVjdCB2Y3B1ICp2KQorewor ICAgIHJldHVybiB2LT5hcmNoLmNyMzsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwdF9zaGFkb3df bDRfd3JpdGUoCisgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqZCwgY29uc3Qgc3RydWN0IHBhZ2Vf aW5mbyAqcGcsIHVuc2lnbmVkIGludCBzbG90KSB7IH0KKwogI2VuZGlmIC8qIENPTkZJR19QViAq LwogCiAjZW5kaWYgLyogX19YODZfUFZfUFRfU0hBRE9XX0hfXyAqLwotLSAKMi4xLjQKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs