From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 1/3] xen: move hvm save code under common to x86 Date: Mon, 21 Aug 2017 15:09:11 +0100 Message-ID: <20170821140913.11465-2-wei.liu2@citrix.com> References: <20170821140913.11465-1-wei.liu2@citrix.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 1djnOK-0006ZA-In for xen-devel@lists.xenproject.org; Mon, 21 Aug 2017 14:09:20 +0000 In-Reply-To: <20170821140913.11465-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org VGhlIGNvZGUgaXMgb25seSB1c2VkIGJ5IHg4NiBhdCB0aGlzIHBvaW50LiBNZXJnZSBjb21tb24v aHZtL3NhdmUuYwppbnRvIHg4NiBodm0vc2F2ZS5jLiBNb3ZlIHRoZSBoZWFkZXJzIGFuZCBmaXgg dXAgaW5jbHVzaW9ucy4gUmVtb3ZlCnRoZSBub3cgZW1wdHkgY29tbW9uL2h2bSBkaXJlY3Rvcnku CgpBbHNvIGZpeCBzb21lIGlzc3VlcyB3aGlsZSBtb3Zpbmc6CjEuIHJlbW92aW5nIHRyYWlsaW5n IHNwYWNlczsKMi4gZml4IG11bHRpLWxpbmUgY29tbWVudDsKMy4gbWFrZSAiaSIgaW4gaHZtX3Nh dmUgdW5zaWduZWQgaW50Owo0LiBhZGQgc29tZSBibGFuayBsaW5lcyB0byBzZXBhcmF0ZSBzZWN0 aW9ucyBvZiBjb2RlOwo1LiBjaGFuZ2UgYm9vbF90IHRvIGJvb2wuCgpTaWduZWQtb2ZmLWJ5OiBX ZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJl dy5jb29wZXIzQGNpdHJpeC5jb20+CkNjOiBHZW9yZ2UgRHVubGFwIDxHZW9yZ2UuRHVubGFwQGV1 LmNpdHJpeC5jb20+CkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4K Q2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEtvbnJhZCBSemVzenV0ZWsg V2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0 YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6IFRpbSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgpDYzogV2Vp IExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvY3B1L21jaGVjay92 bWNlLmMgICAgICAgICAgfCAgIDIgKy0KIHhlbi9hcmNoL3g4Ni9jcHUvdnBtdV9hbWQuYyAgICAg ICAgICAgICB8ICAgMiArLQogeGVuL2FyY2gveDg2L2h2bS9zYXZlLmMgICAgICAgICAgICAgICAg IHwgMzA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vY29tbW9uL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICAgfCAgIDIgLQogeGVuL2NvbW1vbi9odm0vTWFrZWZpbGUgICAg ICAgICAgICAgICAgIHwgICAxIC0KIHhlbi9jb21tb24vaHZtL3NhdmUuYyAgICAgICAgICAgICAg ICAgICB8IDMzMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2luY2x1ZGUv e3hlbiA9PiBhc20teDg2fS9odm0vc2F2ZS5oIHwgICAwCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2 bS9zdXBwb3J0LmggICAgICAgfCAgIDIgKy0KIDggZmlsZXMgY2hhbmdlZCwgMzExIGluc2VydGlv bnMoKyksIDMzNiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCB4ZW4vY29tbW9uL2h2 bS9NYWtlZmlsZQogZGVsZXRlIG1vZGUgMTAwNjQ0IHhlbi9jb21tb24vaHZtL3NhdmUuYwogcmVu YW1lIHhlbi9pbmNsdWRlL3t4ZW4gPT4gYXNtLXg4Nn0vaHZtL3NhdmUuaCAoMTAwJSkKCmRpZmYg LS1naXQgYS94ZW4vYXJjaC94ODYvY3B1L21jaGVjay92bWNlLmMgYi94ZW4vYXJjaC94ODYvY3B1 L21jaGVjay92bWNlLmMKaW5kZXggNjJmYWFlNDljNi4uOWM0NjBjN2M2YyAxMDA2NDQKLS0tIGEv eGVuL2FyY2gveDg2L2NwdS9tY2hlY2svdm1jZS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9jcHUvbWNo ZWNrL3ZtY2UuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPHhlbi9kZWxheS5oPgogI2lu Y2x1ZGUgPHhlbi9zbXAuaD4KICNpbmNsdWRlIDx4ZW4vbW0uaD4KLSNpbmNsdWRlIDx4ZW4vaHZt L3NhdmUuaD4KKyNpbmNsdWRlIDxhc20vaHZtL3NhdmUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vz c29yLmg+CiAjaW5jbHVkZSA8cHVibGljL3N5c2N0bC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0u aD4KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9jcHUvdnBtdV9hbWQuYyBiL3hlbi9hcmNoL3g4 Ni9jcHUvdnBtdV9hbWQuYwppbmRleCBiM2MzNjk3YTY4Li41ZWZjMzliNGViIDEwMDY0NAotLS0g YS94ZW4vYXJjaC94ODYvY3B1L3ZwbXVfYW1kLmMKKysrIGIveGVuL2FyY2gveDg2L2NwdS92cG11 X2FtZC5jCkBAIC0yMiwxMSArMjIsMTEgQEAKICAqLwogCiAjaW5jbHVkZSA8eGVuL3hlbm9wcm9m Lmg+Ci0jaW5jbHVkZSA8eGVuL2h2bS9zYXZlLmg+CiAjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CiAj aW5jbHVkZSA8eGVuL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNt L3ZwbXUuaD4KKyNpbmNsdWRlIDxhc20vaHZtL3NhdmUuaD4KICNpbmNsdWRlIDxhc20vaHZtL3Zs YXBpYy5oPgogI2luY2x1ZGUgPHB1YmxpYy9wbXUuaD4KIApkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L2h2bS9zYXZlLmMgYi94ZW4vYXJjaC94ODYvaHZtL3NhdmUuYwppbmRleCBmN2Q0OTk5MDcz Li44OTg0YTIzYTg4IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvaHZtL3NhdmUuYworKysgYi94 ZW4vYXJjaC94ODYvaHZtL3NhdmUuYwpAQCAtMjAsNyArMjAsMTEgQEAKICAqIHRoaXMgcHJvZ3Jh bTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICovCiAKKyNp bmNsdWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CisjaW5jbHVkZSA8eGVuL3ZlcnNpb24uaD4KKwog I2luY2x1ZGUgPGFzbS9odm0vc3VwcG9ydC5oPgorCiAjaW5jbHVkZSA8cHVibGljL2h2bS9zYXZl Lmg+CiAKIHZvaWQgYXJjaF9odm1fc2F2ZShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgaHZtX3Nh dmVfaGVhZGVyICpoZHIpCkBAIC03OCw2ICs4MiwzMTAgQEAgaW50IGFyY2hfaHZtX2xvYWQoc3Ry dWN0IGRvbWFpbiAqZCwgc3RydWN0IGh2bV9zYXZlX2hlYWRlciAqaGRyKQogICAgIHJldHVybiAw OwogfQogCisvKiBMaXN0IG9mIGhhbmRsZXJzIGZvciB2YXJpb3VzIEhWTSBzYXZlIGFuZCByZXN0 b3JlIHR5cGVzICovCitzdGF0aWMgc3RydWN0IHsKKyAgICBodm1fc2F2ZV9oYW5kbGVyIHNhdmU7 CisgICAgaHZtX2xvYWRfaGFuZGxlciBsb2FkOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAg c2l6ZV90IHNpemU7CisgICAgaW50IGtpbmQ7Cit9IGh2bV9zcl9oYW5kbGVyc1tIVk1fU0FWRV9D T0RFX01BWCArIDFdID0geyB7TlVMTCwgTlVMTCwgIjw/PiJ9LCB9OworCisvKiBJbml0LXRpbWUg ZnVuY3Rpb24gdG8gYWRkIGVudHJpZXMgdG8gdGhhdCBsaXN0ICovCit2b2lkIF9faW5pdCBodm1f cmVnaXN0ZXJfc2F2ZXZtKHVpbnQxNl90IHR5cGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBodm1fc2F2ZV9oYW5kbGVyIHNhdmVfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGh2bV9sb2FkX2hhbmRsZXIgbG9hZF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBraW5kKQoreworICAgIEFTU0VSVCh0eXBl Y29kZSA8PSBIVk1fU0FWRV9DT0RFX01BWCk7CisgICAgQVNTRVJUKGh2bV9zcl9oYW5kbGVyc1t0 eXBlY29kZV0uc2F2ZSA9PSBOVUxMKTsKKyAgICBBU1NFUlQoaHZtX3NyX2hhbmRsZXJzW3R5cGVj b2RlXS5sb2FkID09IE5VTEwpOworICAgIGh2bV9zcl9oYW5kbGVyc1t0eXBlY29kZV0uc2F2ZSA9 IHNhdmVfc3RhdGU7CisgICAgaHZtX3NyX2hhbmRsZXJzW3R5cGVjb2RlXS5sb2FkID0gbG9hZF9z dGF0ZTsKKyAgICBodm1fc3JfaGFuZGxlcnNbdHlwZWNvZGVdLm5hbWUgPSBuYW1lOworICAgIGh2 bV9zcl9oYW5kbGVyc1t0eXBlY29kZV0uc2l6ZSA9IHNpemU7CisgICAgaHZtX3NyX2hhbmRsZXJz W3R5cGVjb2RlXS5raW5kID0ga2luZDsKK30KKworc2l6ZV90IGh2bV9zYXZlX3NpemUoc3RydWN0 IGRvbWFpbiAqZCkKK3sKKyAgICBzdHJ1Y3QgdmNwdSAqdjsKKyAgICBzaXplX3Qgc3o7CisgICAg aW50IGk7CisKKyAgICAvKiBCYXNpYyBvdmVyaGVhZCBmb3IgaGVhZGVyIGFuZCBmb290ZXIgKi8K KyAgICBzeiA9ICgyICogc2l6ZW9mIChzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRvcikpICsgSFZN X1NBVkVfTEVOR1RIKEhFQURFUik7CisKKyAgICAvKiBQbHVzIHNwYWNlIGZvciBlYWNoIHRoaW5n IHdlIHdpbGwgYmUgc2F2aW5nICovCisgICAgZm9yICggaSA9IDA7IGkgPD0gSFZNX1NBVkVfQ09E RV9NQVg7IGkrKyApCisgICAgICAgIGlmICggaHZtX3NyX2hhbmRsZXJzW2ldLmtpbmQgPT0gSFZN U1JfUEVSX1ZDUFUgKQorICAgICAgICAgICAgZm9yX2VhY2hfdmNwdShkLCB2KQorICAgICAgICAg ICAgICAgIHN6ICs9IGh2bV9zcl9oYW5kbGVyc1tpXS5zaXplOworICAgICAgICBlbHNlCisgICAg ICAgICAgICBzeiArPSBodm1fc3JfaGFuZGxlcnNbaV0uc2l6ZTsKKworICAgIHJldHVybiBzejsK K30KKworLyoKKyAqIEV4dHJhY3QgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgYSBzYXZlIHJlY29yZCwg YnkgbWFyc2hhbGxpbmcgYWxsIHJlY29yZHMgb2YKKyAqIHRoYXQgdHlwZSBhbmQgY29weWluZyBv dXQgdGhlIG9uZSB3ZSBuZWVkLgorICovCitpbnQgaHZtX3NhdmVfb25lKHN0cnVjdCBkb21haW4g KmQsIHVuc2lnbmVkIGludCB0eXBlY29kZSwgdW5zaWduZWQgaW50IGluc3RhbmNlLAorICAgICAg ICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFXzY0KHVpbnQ4KSBoYW5kbGUsIHVpbnQ2NF90ICpi dWZzeikKK3sKKyAgICBpbnQgcnY7CisgICAgaHZtX2RvbWFpbl9jb250ZXh0X3QgY3R4dCA9IHsg fTsKKyAgICBjb25zdCBzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRvciAqZGVzYzsKKworICAgIGlm ICggZC0+aXNfZHlpbmcgfHwKKyAgICAgICAgIHR5cGVjb2RlID4gSFZNX1NBVkVfQ09ERV9NQVgg fHwKKyAgICAgICAgIGh2bV9zcl9oYW5kbGVyc1t0eXBlY29kZV0uc2l6ZSA8IHNpemVvZigqZGVz YykgfHwKKyAgICAgICAgICFodm1fc3JfaGFuZGxlcnNbdHlwZWNvZGVdLnNhdmUgKQorICAgICAg ICByZXR1cm4gLUVJTlZBTDsKKworICAgIGN0eHQuc2l6ZSA9IGh2bV9zcl9oYW5kbGVyc1t0eXBl Y29kZV0uc2l6ZTsKKyAgICBpZiAoIGh2bV9zcl9oYW5kbGVyc1t0eXBlY29kZV0ua2luZCA9PSBI Vk1TUl9QRVJfVkNQVSApCisgICAgICAgIGN0eHQuc2l6ZSAqPSBkLT5tYXhfdmNwdXM7CisgICAg Y3R4dC5kYXRhID0geG1hbGxvY19ieXRlcyhjdHh0LnNpemUpOworICAgIGlmICggIWN0eHQuZGF0 YSApCisgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgaWYgKCAocnYgPSBodm1fc3JfaGFu ZGxlcnNbdHlwZWNvZGVdLnNhdmUoZCwgJmN0eHQpKSAhPSAwICkKKyAgICAgICAgcHJpbnRrKFhF TkxPR19HX0VSUiAiSFZNJWQgc2F2ZTogZmFpbGVkIHRvIHNhdmUgdHlwZSAlIlBSSXUxNiIgKCVk KVxuIiwKKyAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwgdHlwZWNvZGUsIHJ2KTsKKyAgICBl bHNlIGlmICggcnYgPSAtRU5PRU5ULCBjdHh0LmN1ciA+PSBzaXplb2YoKmRlc2MpICkKKyAgICB7 CisgICAgICAgIHVpbnQzMl90IG9mZjsKKworICAgICAgICBmb3IgKCBvZmYgPSAwOyBvZmYgPD0g KGN0eHQuY3VyIC0gc2l6ZW9mKCpkZXNjKSk7IG9mZiArPSBkZXNjLT5sZW5ndGggKQorICAgICAg ICB7CisgICAgICAgICAgICBkZXNjID0gKHZvaWQgKikoY3R4dC5kYXRhICsgb2ZmKTsKKyAgICAg ICAgICAgIC8qIE1vdmUgcGFzdCBoZWFkZXIgKi8KKyAgICAgICAgICAgIG9mZiArPSBzaXplb2Yo KmRlc2MpOworICAgICAgICAgICAgaWYgKCBjdHh0LmN1ciA8IGRlc2MtPmxlbmd0aCB8fAorICAg ICAgICAgICAgICAgICBvZmYgPiBjdHh0LmN1ciAtIGRlc2MtPmxlbmd0aCApCisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIGluc3RhbmNlID09IGRlc2MtPmluc3RhbmNl ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBydiA9IDA7CisgICAgICAgICAgICAg ICAgaWYgKCBndWVzdF9oYW5kbGVfaXNfbnVsbChoYW5kbGUpICkKKyAgICAgICAgICAgICAgICAg ICAgKmJ1ZnN6ID0gZGVzYy0+bGVuZ3RoOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAqYnVm c3ogPCBkZXNjLT5sZW5ndGggKQorICAgICAgICAgICAgICAgICAgICBydiA9IC1FTk9CVUZTOwor ICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBjb3B5X3RvX2d1ZXN0KGhhbmRsZSwgY3R4dC5kYXRh ICsgb2ZmLCBkZXNjLT5sZW5ndGgpICkKKyAgICAgICAgICAgICAgICAgICAgcnYgPSAtRUZBVUxU OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKmJ1ZnN6ID0gZGVz Yy0+bGVuZ3RoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorCisgICAgeGZyZWUoY3R4dC5kYXRhKTsKKyAgICByZXR1cm4gcnY7Cit9CisK K2ludCBodm1fc2F2ZShzdHJ1Y3QgZG9tYWluICpkLCBodm1fZG9tYWluX2NvbnRleHRfdCAqaCkK K3sKKyAgICBjaGFyICpjOworICAgIHN0cnVjdCBodm1fc2F2ZV9oZWFkZXIgaGRyOworICAgIHN0 cnVjdCBodm1fc2F2ZV9lbmQgZW5kOworICAgIGh2bV9zYXZlX2hhbmRsZXIgaGFuZGxlcjsKKyAg ICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGlmICggZC0+aXNfZHlpbmcgKQorICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKworICAgIGhkci5tYWdpYyA9IEhWTV9GSUxFX01BR0lDOworICAgIGhkci52 ZXJzaW9uID0gSFZNX0ZJTEVfVkVSU0lPTjsKKworICAgIC8qIFNhdmUgeGVuIGNoYW5nZXNldCAq LworICAgIGMgPSBzdHJyY2hyKHhlbl9jaGFuZ2VzZXQoKSwgJzonKTsKKyAgICBpZiAoIGMgKQor ICAgICAgICBoZHIuY2hhbmdlc2V0ID0gc2ltcGxlX3N0cnRvbGwoYywgTlVMTCwgMTYpOworICAg IGVsc2UKKyAgICAgICAgaGRyLmNoYW5nZXNldCA9IC0xVUxMOyAvKiBVbmtub3duICovCisKKyAg ICBhcmNoX2h2bV9zYXZlKGQsICZoZHIpOworCisgICAgaWYgKCBodm1fc2F2ZV9lbnRyeShIRUFE RVIsIDAsIGgsICZoZHIpICE9IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKFhFTkxPR19HX0VS UiAiSFZNJWQgc2F2ZTogZmFpbGVkIHRvIHdyaXRlIGhlYWRlclxuIiwKKyAgICAgICAgICAgICAg IGQtPmRvbWFpbl9pZCk7CisgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgIH0KKworICAgIC8q IFNhdmUgYWxsIGF2YWlsYWJsZSBraW5kcyBvZiBzdGF0ZSAqLworICAgIGZvciAoIGkgPSAwOyBp IDw9IEhWTV9TQVZFX0NPREVfTUFYOyBpKysgKQorICAgIHsKKyAgICAgICAgaGFuZGxlciA9IGh2 bV9zcl9oYW5kbGVyc1tpXS5zYXZlOworICAgICAgICBpZiAoIGhhbmRsZXIgIT0gTlVMTCApCisg ICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ayhYRU5MT0dfR19JTkZPICJIVk0lZCBzYXZlOiAl c1xuIiwKKyAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsIGh2bV9zcl9oYW5kbGVyc1tp XS5uYW1lKTsKKyAgICAgICAgICAgIGlmICggaGFuZGxlcihkLCBoKSAhPSAwICkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoWEVOTE9HX0dfRVJSCisgICAgICAgICAgICAg ICAgICAgICAgICJIVk0lZCBzYXZlOiBmYWlsZWQgdG8gc2F2ZSB0eXBlICUiUFJJdTE2IlxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgZC0+ZG9tYWluX2lkLCBpKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg IC8qIFNhdmUgYW4gZW5kLW9mLWZpbGUgbWFya2VyICovCisgICAgaWYgKCBodm1fc2F2ZV9lbnRy eShFTkQsIDAsIGgsICZlbmQpICE9IDAgKQorICAgIHsKKyAgICAgICAgLyogUnVuIG91dCBvZiBk YXRhICovCisgICAgICAgIHByaW50ayhYRU5MT0dfR19FUlIgIkhWTSVkIHNhdmU6IG5vIHJvb20g Zm9yIGVuZCBtYXJrZXJcbiIsCisgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOworICAgICAg ICByZXR1cm4gLUVGQVVMVDsKKyAgICB9CisKKyAgICAvKiBTYXZlIG1hY3JvcyBzaG91bGQgbm90 IGhhdmUgbGV0IHVzIG92ZXJydW4gKi8KKyAgICBBU1NFUlQoaC0+Y3VyIDw9IGgtPnNpemUpOwor ICAgIHJldHVybiAwOworfQorCitpbnQgaHZtX2xvYWQoc3RydWN0IGRvbWFpbiAqZCwgaHZtX2Rv bWFpbl9jb250ZXh0X3QgKmgpCit7CisgICAgc3RydWN0IGh2bV9zYXZlX2hlYWRlciBoZHI7Cisg ICAgc3RydWN0IGh2bV9zYXZlX2Rlc2NyaXB0b3IgKmRlc2M7CisgICAgaHZtX2xvYWRfaGFuZGxl ciBoYW5kbGVyOworICAgIHN0cnVjdCB2Y3B1ICp2OworCisgICAgaWYgKCBkLT5pc19keWluZyAp CisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgLyogUmVhZCB0aGUgc2F2ZSBoZWFkZXIs IHdoaWNoIG11c3QgYmUgZmlyc3QgKi8KKyAgICBpZiAoIGh2bV9sb2FkX2VudHJ5KEhFQURFUiwg aCwgJmhkcikgIT0gMCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICggYXJjaF9odm1f bG9hZChkLCAmaGRyKSApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIERvd24gYWxsIHRo ZSB2Y3B1czogd2Ugb25seSByZS1lbmFibGUgdGhlIG9uZXMgdGhhdCBoYWQgc3RhdGUgc2F2ZWQu ICovCisgICAgZm9yX2VhY2hfdmNwdShkLCB2KQorICAgICAgICBpZiAoIHRlc3RfYW5kX3NldF9i aXQoX1ZQRl9kb3duLCAmdi0+cGF1c2VfZmxhZ3MpICkKKyAgICAgICAgICAgIHZjcHVfc2xlZXBf bm9zeW5jKHYpOworCisgICAgZm9yICggOyA7ICkKKyAgICB7CisgICAgICAgIGlmICggaC0+c2l6 ZSAtIGgtPmN1ciA8IHNpemVvZihzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRvcikgKQorICAgICAg ICB7CisgICAgICAgICAgICAvKiBSdW4gb3V0IG9mIGRhdGEgKi8KKyAgICAgICAgICAgIHByaW50 ayhYRU5MT0dfR19FUlIKKyAgICAgICAgICAgICAgICAgICAiSFZNJWQgcmVzdG9yZTogc2F2ZSBk aWQgbm90IGVuZCB3aXRoIGEgbnVsbCBlbnRyeVxuIiwKKyAgICAgICAgICAgICAgICAgICBkLT5k b21haW5faWQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAg LyogUmVhZCB0aGUgdHlwZWNvZGUgb2YgdGhlIG5leHQgZW50cnkgIGFuZCBjaGVjayBmb3IgdGhl IGVuZC1tYXJrZXIgKi8KKyAgICAgICAgZGVzYyA9IChzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRv ciAqKSgmaC0+ZGF0YVtoLT5jdXJdKTsKKyAgICAgICAgaWYgKCBkZXNjLT50eXBlY29kZSA9PSAw ICkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIC8qIEZpbmQgdGhlIGhhbmRsZXIg Zm9yIHRoaXMgZW50cnkgKi8KKyAgICAgICAgaWYgKCAoZGVzYy0+dHlwZWNvZGUgPiBIVk1fU0FW RV9DT0RFX01BWCkgfHwKKyAgICAgICAgICAgICAoKGhhbmRsZXIgPSBodm1fc3JfaGFuZGxlcnNb ZGVzYy0+dHlwZWNvZGVdLmxvYWQpID09IE5VTEwpICkKKyAgICAgICAgeworICAgICAgICAgICAg cHJpbnRrKFhFTkxPR19HX0VSUiAiSFZNJWQgcmVzdG9yZTogdW5rbm93biBlbnRyeSB0eXBlY29k ZSAldVxuIiwKKyAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsIGRlc2MtPnR5cGVjb2Rl KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIExvYWQg dGhlIGVudHJ5ICovCisgICAgICAgIHByaW50ayhYRU5MT0dfR19JTkZPICJIVk0lZCByZXN0b3Jl OiAlcyAlIlBSSXUxNiJcbiIsIGQtPmRvbWFpbl9pZCwKKyAgICAgICAgICAgICAgIGh2bV9zcl9o YW5kbGVyc1tkZXNjLT50eXBlY29kZV0ubmFtZSwgZGVzYy0+aW5zdGFuY2UpOworICAgICAgICBp ZiAoIGhhbmRsZXIoZCwgaCkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ayhY RU5MT0dfR19FUlIgIkhWTSVkIHJlc3RvcmU6IGZhaWxlZCB0byBsb2FkIGVudHJ5ICV1LyV1XG4i LAorICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwgZGVzYy0+dHlwZWNvZGUsIGRlc2Mt Pmluc3RhbmNlKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIC8qIE5vdCByZWFjaGVkICovCit9CisKK2ludCBfaHZtX2luaXRfZW50cnkoc3RydWN0IGh2 bV9kb21haW5fY29udGV4dCAqaCwgdWludDE2X3QgdGMsIHVpbnQxNl90IGluc3QsCisgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IGxlbikKK3sKKyAgICBzdHJ1Y3QgaHZtX3NhdmVfZGVzY3Jp cHRvciAqZAorICAgICAgICA9IChzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRvciAqKSZoLT5kYXRh W2gtPmN1cl07CisKKyAgICBpZiAoIGgtPnNpemUgLSBoLT5jdXIgPCBsZW4gKyBzaXplb2YgKCpk KSApCisgICAgeworICAgICAgICBwcmludGsoWEVOTE9HX0dfV0FSTklORyAiSFZNIHNhdmU6IG5v IHJvb20gZm9yIgorICAgICAgICAgICAgICAgIiAlIlBSSXUzMiIgKyAlenUgYnl0ZXMgZm9yIHR5 cGVjb2RlICUiUFJJdTE2IlxuIiwKKyAgICAgICAgICAgICAgIGxlbiwgc2l6ZW9mKCpkKSwgdGMp OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZC0+dHlwZWNvZGUgPSB0YzsKKyAg ICBkLT5pbnN0YW5jZSA9IGluc3Q7CisgICAgZC0+bGVuZ3RoID0gbGVuOworICAgIGgtPmN1ciAr PSBzaXplb2YoKmQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgX2h2bV93cml0ZV9lbnRy eShzdHJ1Y3QgaHZtX2RvbWFpbl9jb250ZXh0ICpoLCB2b2lkICpzcmMsCisgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3Qgc3JjX2xlbikKK3sKKyAgICBtZW1jcHkoJmgtPmRhdGFbaC0+Y3Vy XSwgc3JjLCBzcmNfbGVuKTsKKyAgICBoLT5jdXIgKz0gc3JjX2xlbjsKK30KKworaW50IF9odm1f Y2hlY2tfZW50cnkoc3RydWN0IGh2bV9kb21haW5fY29udGV4dCAqaCwgdWludDE2X3QgdHlwZSwg dWludDMyX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdHJpY3RfbGVuZ3RoKQor eworICAgIHN0cnVjdCBodm1fc2F2ZV9kZXNjcmlwdG9yICpkCisgICAgICAgID0gKHN0cnVjdCBo dm1fc2F2ZV9kZXNjcmlwdG9yICopJmgtPmRhdGFbaC0+Y3VyXTsKKworICAgIGlmICggc2l6ZW9m KCpkKSA+IGgtPnNpemUgLSBoLT5jdXIpCisgICAgeworICAgICAgICBwcmludGsoWEVOTE9HX0df V0FSTklORworICAgICAgICAgICAgICAgIkhWTSByZXN0b3JlOiBub3QgZW5vdWdoIGRhdGEgbGVm dCB0byByZWFkICV6dSBieXRlcyAiCisgICAgICAgICAgICAgICAiZm9yIHR5cGUgJXUgaGVhZGVy XG4iLCBzaXplb2YoKmQpLCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAg IGlmICggKHR5cGUgIT0gZC0+dHlwZWNvZGUpIHx8CisgICAgICAgICAoc3RyaWN0X2xlbmd0aCA/ IChsZW4gIT0gZC0+bGVuZ3RoKSA6IChsZW4gPCBkLT5sZW5ndGgpKSB8fAorICAgICAgICAgKGQt Pmxlbmd0aCA+IChoLT5zaXplIC0gaC0+Y3VyIC0gc2l6ZW9mKCpkKSkpICkKKyAgICB7CisgICAg ICAgIHByaW50ayhYRU5MT0dfR19XQVJOSU5HCisgICAgICAgICAgICAgICAiSFZNIHJlc3RvcmUg bWlzbWF0Y2g6IGV4cGVjdGVkICVzIHR5cGUgJXUgbGVuZ3RoICV1LCAiCisgICAgICAgICAgICAg ICAic2F3IHR5cGUgJXUgbGVuZ3RoICV1LiAgJXp1IGJ5dGVzIHJlbWFpbmluZ1xuIiwKKyAgICAg ICAgICAgICAgIHN0cmljdF9sZW5ndGggPyAic3RyaWN0IiA6ICJ6ZXJvZXh0ZW5kZWQiLCB0eXBl LCBsZW4sCisgICAgICAgICAgICAgICBkLT50eXBlY29kZSwgZC0+bGVuZ3RoLCBoLT5zaXplIC0g aC0+Y3VyIC0gc2l6ZW9mKCpkKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBo LT5jdXIgKz0gc2l6ZW9mKCpkKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIF9odm1fcmVh ZF9lbnRyeShzdHJ1Y3QgaHZtX2RvbWFpbl9jb250ZXh0ICpoLCB2b2lkICpkZXN0LAorICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3QgZGVzdF9sZW4pCit7CisgICAgc3RydWN0IGh2bV9zYXZl X2Rlc2NyaXB0b3IgKmQKKyAgICAgICAgPSAoc3RydWN0IGh2bV9zYXZlX2Rlc2NyaXB0b3IgKikm aC0+ZGF0YVtoLT5jdXIgLSBzaXplb2YoKmQpXTsKKworICAgIEJVR19PTihkLT5sZW5ndGggPiBk ZXN0X2xlbik7CisKKyAgICBtZW1jcHkoZGVzdCwgJmgtPmRhdGFbaC0+Y3VyXSwgZC0+bGVuZ3Ro KTsKKworICAgIGlmICggZC0+bGVuZ3RoIDwgZGVzdF9sZW4gKQorICAgICAgICBtZW1zZXQoKGNo YXIgKilkZXN0ICsgZC0+bGVuZ3RoLCAwLCBkZXN0X2xlbiAtIGQtPmxlbmd0aCk7CisKKyAgICBo LT5jdXIgKz0gZC0+bGVuZ3RoOworfQorCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogbW9k ZTogQwpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9NYWtlZmlsZSBiL3hlbi9jb21tb24vTWFrZWZp bGUKaW5kZXggMjZjNWE2NDMzNy4uMzllMjYxNDU0NiAxMDA2NDQKLS0tIGEveGVuL2NvbW1vbi9N YWtlZmlsZQorKysgYi94ZW4vY29tbW9uL01ha2VmaWxlCkBAIC03NCw4ICs3NCw2IEBAIHRtZW0t eSA6PSB0bWVtLm8gdG1lbV94ZW4ubyB0bWVtX2NvbnRyb2wubwogdG1lbS0kKENPTkZJR19DT01Q QVQpICs9IGNvbXBhdC90bWVtX3hlbi5vCiBvYmotJChDT05GSUdfVE1FTSkgKz0gJCh0bWVtLXkp CiAKLXN1YmRpci0kKENPTkZJR19YODYpICs9IGh2bQotCiBzdWJkaXItJChDT05GSUdfR0NPVikg Kz0gZ2NvdgogCiBzdWJkaXIteSArPSBsaWJlbGYKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vaHZt L01ha2VmaWxlIGIveGVuL2NvbW1vbi9odm0vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGE0NjRhNTdkNTIuLjAwMDAwMDAwMDAKLS0tIGEveGVuL2NvbW1vbi9odm0vTWFr ZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1vYmoteSArPSBzYXZlLm8KZGlmZiAt LWdpdCBhL3hlbi9jb21tb24vaHZtL3NhdmUuYyBiL3hlbi9jb21tb24vaHZtL3NhdmUuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE3MTM1ZWUzMS4uMDAwMDAwMDAwMAotLS0gYS94 ZW4vY29tbW9uL2h2bS9zYXZlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotLyoK LSAqIGh2bS9zYXZlLmM6IFNhdmUgYW5kIHJlc3RvcmUgSFZNIGd1ZXN0J3MgZW11bGF0ZWQgaGFy ZHdhcmUgc3RhdGUuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCBJbnRlbCBDb3Jwb3JhdGlv bi4KLSAqIENvcHlyaWdodCAoYykgMjAwNywgWGVuU291cmNlIEluYy4KLSAqIENvcHlyaWdodCAo YykgMjAwNywgSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+Ci0gKiAg ICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgotICogICAgICAg ICAgICAgICAgICAgICBzcGxpdCBhcmNoIGdlbmVyaWMgcGFydAotICoKLSAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkg b3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0jaW5jbHVkZSA8eGVuL2xpYi5oPgotI2luY2x1ZGUg PHhlbi92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8cHVibGljL3ZlcnNpb24uaD4KLSNpbmNsdWRlIDx4 ZW4vc2NoZWQuaD4KLSNpbmNsdWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+Ci0KLSNpbmNsdWRlIDxh c20vaHZtL3N1cHBvcnQuaD4KLQotLyogTGlzdCBvZiBoYW5kbGVycyBmb3IgdmFyaW91cyBIVk0g c2F2ZSBhbmQgcmVzdG9yZSB0eXBlcyAqLwotc3RhdGljIHN0cnVjdCB7IAotICAgIGh2bV9zYXZl X2hhbmRsZXIgc2F2ZTsKLSAgICBodm1fbG9hZF9oYW5kbGVyIGxvYWQ7IAotICAgIGNvbnN0IGNo YXIgKm5hbWU7Ci0gICAgc2l6ZV90IHNpemU7Ci0gICAgaW50IGtpbmQ7Ci19IGh2bV9zcl9oYW5k bGVycyBbSFZNX1NBVkVfQ09ERV9NQVggKyAxXSA9IHt7TlVMTCwgTlVMTCwgIjw/PiJ9LH07Ci0K LS8qIEluaXQtdGltZSBmdW5jdGlvbiB0byBhZGQgZW50cmllcyB0byB0aGF0IGxpc3QgKi8KLXZv aWQgX19pbml0IGh2bV9yZWdpc3Rlcl9zYXZldm0odWludDE2X3QgdHlwZWNvZGUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGh2bV9zYXZlX2hhbmRsZXIgc2F2ZV9zdGF0ZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaHZtX2xvYWRfaGFuZGxlciBsb2FkX3N0YXRlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGtpbmQpCi17Ci0g ICAgQVNTRVJUKHR5cGVjb2RlIDw9IEhWTV9TQVZFX0NPREVfTUFYKTsKLSAgICBBU1NFUlQoaHZt X3NyX2hhbmRsZXJzW3R5cGVjb2RlXS5zYXZlID09IE5VTEwpOwotICAgIEFTU0VSVChodm1fc3Jf aGFuZGxlcnNbdHlwZWNvZGVdLmxvYWQgPT0gTlVMTCk7Ci0gICAgaHZtX3NyX2hhbmRsZXJzW3R5 cGVjb2RlXS5zYXZlID0gc2F2ZV9zdGF0ZTsKLSAgICBodm1fc3JfaGFuZGxlcnNbdHlwZWNvZGVd LmxvYWQgPSBsb2FkX3N0YXRlOwotICAgIGh2bV9zcl9oYW5kbGVyc1t0eXBlY29kZV0ubmFtZSA9 IG5hbWU7Ci0gICAgaHZtX3NyX2hhbmRsZXJzW3R5cGVjb2RlXS5zaXplID0gc2l6ZTsKLSAgICBo dm1fc3JfaGFuZGxlcnNbdHlwZWNvZGVdLmtpbmQgPSBraW5kOwotfQotCi1zaXplX3QgaHZtX3Nh dmVfc2l6ZShzdHJ1Y3QgZG9tYWluICpkKSAKLXsKLSAgICBzdHJ1Y3QgdmNwdSAqdjsKLSAgICBz aXplX3Qgc3o7Ci0gICAgaW50IGk7Ci0gICAgCi0gICAgLyogQmFzaWMgb3ZlcmhlYWQgZm9yIGhl YWRlciBhbmQgZm9vdGVyICovCi0gICAgc3ogPSAoMiAqIHNpemVvZiAoc3RydWN0IGh2bV9zYXZl X2Rlc2NyaXB0b3IpKSArIEhWTV9TQVZFX0xFTkdUSChIRUFERVIpOwotCi0gICAgLyogUGx1cyBz cGFjZSBmb3IgZWFjaCB0aGluZyB3ZSB3aWxsIGJlIHNhdmluZyAqLwotICAgIGZvciAoIGkgPSAw OyBpIDw9IEhWTV9TQVZFX0NPREVfTUFYOyBpKysgKSAKLSAgICAgICAgaWYgKCBodm1fc3JfaGFu ZGxlcnNbaV0ua2luZCA9PSBIVk1TUl9QRVJfVkNQVSApCi0gICAgICAgICAgICBmb3JfZWFjaF92 Y3B1KGQsIHYpCi0gICAgICAgICAgICAgICAgc3ogKz0gaHZtX3NyX2hhbmRsZXJzW2ldLnNpemU7 Ci0gICAgICAgIGVsc2UgCi0gICAgICAgICAgICBzeiArPSBodm1fc3JfaGFuZGxlcnNbaV0uc2l6 ZTsKLQotICAgIHJldHVybiBzejsKLX0KLQotLyogRXh0cmFjdCBhIHNpbmdsZSBpbnN0YW5jZSBv ZiBhIHNhdmUgcmVjb3JkLCBieSBtYXJzaGFsbGluZyBhbGwKLSAqIHJlY29yZHMgb2YgdGhhdCB0 eXBlIGFuZCBjb3B5aW5nIG91dCB0aGUgb25lIHdlIG5lZWQuICovCi1pbnQgaHZtX3NhdmVfb25l KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCB0eXBlY29kZSwgdW5zaWduZWQgaW50IGlu c3RhbmNlLAotICAgICAgICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFXzY0KHVpbnQ4KSBoYW5k bGUsIHVpbnQ2NF90ICpidWZzeikKLXsKLSAgICBpbnQgcnY7Ci0gICAgaHZtX2RvbWFpbl9jb250 ZXh0X3QgY3R4dCA9IHsgfTsKLSAgICBjb25zdCBzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRvciAq ZGVzYzsKLQotICAgIGlmICggZC0+aXNfZHlpbmcgfHwKLSAgICAgICAgIHR5cGVjb2RlID4gSFZN X1NBVkVfQ09ERV9NQVggfHwKLSAgICAgICAgIGh2bV9zcl9oYW5kbGVyc1t0eXBlY29kZV0uc2l6 ZSA8IHNpemVvZigqZGVzYykgfHwKLSAgICAgICAgICFodm1fc3JfaGFuZGxlcnNbdHlwZWNvZGVd LnNhdmUgKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQotICAgIGN0eHQuc2l6ZSA9IGh2bV9z cl9oYW5kbGVyc1t0eXBlY29kZV0uc2l6ZTsKLSAgICBpZiAoIGh2bV9zcl9oYW5kbGVyc1t0eXBl Y29kZV0ua2luZCA9PSBIVk1TUl9QRVJfVkNQVSApCi0gICAgICAgIGN0eHQuc2l6ZSAqPSBkLT5t YXhfdmNwdXM7Ci0gICAgY3R4dC5kYXRhID0geG1hbGxvY19ieXRlcyhjdHh0LnNpemUpOwotICAg IGlmICggIWN0eHQuZGF0YSApCi0gICAgICAgIHJldHVybiAtRU5PTUVNOwotCi0gICAgaWYgKCAo cnYgPSBodm1fc3JfaGFuZGxlcnNbdHlwZWNvZGVdLnNhdmUoZCwgJmN0eHQpKSAhPSAwICkKLSAg ICAgICAgcHJpbnRrKFhFTkxPR19HX0VSUiAiSFZNJWQgc2F2ZTogZmFpbGVkIHRvIHNhdmUgdHlw ZSAlIlBSSXUxNiIgKCVkKVxuIiwKLSAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwgdHlwZWNv ZGUsIHJ2KTsKLSAgICBlbHNlIGlmICggcnYgPSAtRU5PRU5ULCBjdHh0LmN1ciA+PSBzaXplb2Yo KmRlc2MpICkKLSAgICB7Ci0gICAgICAgIHVpbnQzMl90IG9mZjsKLQotICAgICAgICBmb3IgKCBv ZmYgPSAwOyBvZmYgPD0gKGN0eHQuY3VyIC0gc2l6ZW9mKCpkZXNjKSk7IG9mZiArPSBkZXNjLT5s ZW5ndGggKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXNjID0gKHZvaWQgKikoY3R4dC5kYXRh ICsgb2ZmKTsKLSAgICAgICAgICAgIC8qIE1vdmUgcGFzdCBoZWFkZXIgKi8KLSAgICAgICAgICAg IG9mZiArPSBzaXplb2YoKmRlc2MpOwotICAgICAgICAgICAgaWYgKCBjdHh0LmN1ciA8IGRlc2Mt Pmxlbmd0aCB8fAotICAgICAgICAgICAgICAgICBvZmYgPiBjdHh0LmN1ciAtIGRlc2MtPmxlbmd0 aCApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIGluc3RhbmNlID09 IGRlc2MtPmluc3RhbmNlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBydiA9IDA7 Ci0gICAgICAgICAgICAgICAgaWYgKCBndWVzdF9oYW5kbGVfaXNfbnVsbChoYW5kbGUpICkKLSAg ICAgICAgICAgICAgICAgICAgKmJ1ZnN6ID0gZGVzYy0+bGVuZ3RoOwotICAgICAgICAgICAgICAg IGVsc2UgaWYgKCAqYnVmc3ogPCBkZXNjLT5sZW5ndGggKQotICAgICAgICAgICAgICAgICAgICBy diA9IC1FTk9CVUZTOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBjb3B5X3RvX2d1ZXN0KGhh bmRsZSwgY3R4dC5kYXRhICsgb2ZmLCBkZXNjLT5sZW5ndGgpICkKLSAgICAgICAgICAgICAgICAg ICAgcnYgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg ICAgKmJ1ZnN6ID0gZGVzYy0+bGVuZ3RoOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgeGZyZWUoY3R4dC5kYXRhKTsKLSAgICBy ZXR1cm4gcnY7Ci19Ci0KLWludCBodm1fc2F2ZShzdHJ1Y3QgZG9tYWluICpkLCBodm1fZG9tYWlu X2NvbnRleHRfdCAqaCkKLXsKLSAgICBjaGFyICpjOwotICAgIHN0cnVjdCBodm1fc2F2ZV9oZWFk ZXIgaGRyOwotICAgIHN0cnVjdCBodm1fc2F2ZV9lbmQgZW5kOwotICAgIGh2bV9zYXZlX2hhbmRs ZXIgaGFuZGxlcjsKLSAgICB1aW50MTZfdCBpOwotCi0gICAgaWYgKCBkLT5pc19keWluZyApCi0g ICAgICAgIHJldHVybiAtRUlOVkFMOwotCi0gICAgaGRyLm1hZ2ljID0gSFZNX0ZJTEVfTUFHSUM7 Ci0gICAgaGRyLnZlcnNpb24gPSBIVk1fRklMRV9WRVJTSU9OOwotCi0gICAgLyogU2F2ZSB4ZW4g Y2hhbmdlc2V0ICovCi0gICAgYyA9IHN0cnJjaHIoeGVuX2NoYW5nZXNldCgpLCAnOicpOwotICAg IGlmICggYyApCi0gICAgICAgIGhkci5jaGFuZ2VzZXQgPSBzaW1wbGVfc3RydG9sbChjLCBOVUxM LCAxNik7Ci0gICAgZWxzZSAKLSAgICAgICAgaGRyLmNoYW5nZXNldCA9IC0xVUxMOyAvKiBVbmtu b3duICovCi0KLSAgICBhcmNoX2h2bV9zYXZlKGQsICZoZHIpOwotCi0gICAgaWYgKCBodm1fc2F2 ZV9lbnRyeShIRUFERVIsIDAsIGgsICZoZHIpICE9IDAgKQotICAgIHsKLSAgICAgICAgcHJpbnRr KFhFTkxPR19HX0VSUiAiSFZNJWQgc2F2ZTogZmFpbGVkIHRvIHdyaXRlIGhlYWRlclxuIiwKLSAg ICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAg IH0gCi0KLSAgICAvKiBTYXZlIGFsbCBhdmFpbGFibGUga2luZHMgb2Ygc3RhdGUgKi8KLSAgICBm b3IgKCBpID0gMDsgaSA8PSBIVk1fU0FWRV9DT0RFX01BWDsgaSsrICkgCi0gICAgewotICAgICAg ICBoYW5kbGVyID0gaHZtX3NyX2hhbmRsZXJzW2ldLnNhdmU7Ci0gICAgICAgIGlmICggaGFuZGxl ciAhPSBOVUxMICkgCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ayhYRU5MT0dfR19JTkZP ICJIVk0lZCBzYXZlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsIGh2 bV9zcl9oYW5kbGVyc1tpXS5uYW1lKTsKLSAgICAgICAgICAgIGlmICggaGFuZGxlcihkLCBoKSAh PSAwICkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19HX0VS UgotICAgICAgICAgICAgICAgICAgICAgICAiSFZNJWQgc2F2ZTogZmFpbGVkIHRvIHNhdmUgdHlw ZSAlIlBSSXUxNiJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwgaSk7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IAotICAgICAg ICB9Ci0gICAgfQotCi0gICAgLyogU2F2ZSBhbiBlbmQtb2YtZmlsZSBtYXJrZXIgKi8KLSAgICBp ZiAoIGh2bV9zYXZlX2VudHJ5KEVORCwgMCwgaCwgJmVuZCkgIT0gMCApCi0gICAgewotICAgICAg ICAvKiBSdW4gb3V0IG9mIGRhdGEgKi8KLSAgICAgICAgcHJpbnRrKFhFTkxPR19HX0VSUiAiSFZN JWQgc2F2ZTogbm8gcm9vbSBmb3IgZW5kIG1hcmtlclxuIiwKLSAgICAgICAgICAgICAgIGQtPmRv bWFpbl9pZCk7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIC8qIFNhdmUg bWFjcm9zIHNob3VsZCBub3QgaGF2ZSBsZXQgdXMgb3ZlcnJ1biAqLwotICAgIEFTU0VSVChoLT5j dXIgPD0gaC0+c2l6ZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBodm1fbG9hZChzdHJ1Y3Qg ZG9tYWluICpkLCBodm1fZG9tYWluX2NvbnRleHRfdCAqaCkKLXsKLSAgICBzdHJ1Y3QgaHZtX3Nh dmVfaGVhZGVyIGhkcjsKLSAgICBzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRvciAqZGVzYzsKLSAg ICBodm1fbG9hZF9oYW5kbGVyIGhhbmRsZXI7Ci0gICAgc3RydWN0IHZjcHUgKnY7Ci0gICAgCi0g ICAgaWYgKCBkLT5pc19keWluZyApCi0gICAgICAgIHJldHVybiAtRUlOVkFMOwotCi0gICAgLyog UmVhZCB0aGUgc2F2ZSBoZWFkZXIsIHdoaWNoIG11c3QgYmUgZmlyc3QgKi8KLSAgICBpZiAoIGh2 bV9sb2FkX2VudHJ5KEhFQURFUiwgaCwgJmhkcikgIT0gMCApIAotICAgICAgICByZXR1cm4gLTE7 Ci0KLSAgICBpZiAoIGFyY2hfaHZtX2xvYWQoZCwgJmhkcikgKQotICAgICAgICByZXR1cm4gLTE7 Ci0KLSAgICAvKiBEb3duIGFsbCB0aGUgdmNwdXM6IHdlIG9ubHkgcmUtZW5hYmxlIHRoZSBvbmVz IHRoYXQgaGFkIHN0YXRlIHNhdmVkLiAqLwotICAgIGZvcl9lYWNoX3ZjcHUoZCwgdikgCi0gICAg ICAgIGlmICggdGVzdF9hbmRfc2V0X2JpdChfVlBGX2Rvd24sICZ2LT5wYXVzZV9mbGFncykgKQot ICAgICAgICAgICAgdmNwdV9zbGVlcF9ub3N5bmModik7Ci0KLSAgICBmb3IgKCA7IDsgKQotICAg IHsKLSAgICAgICAgaWYgKCBoLT5zaXplIC0gaC0+Y3VyIDwgc2l6ZW9mKHN0cnVjdCBodm1fc2F2 ZV9kZXNjcmlwdG9yKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIFJ1biBvdXQgb2YgZGF0 YSAqLwotICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19HX0VSUgotICAgICAgICAgICAgICAgICAg ICJIVk0lZCByZXN0b3JlOiBzYXZlIGRpZCBub3QgZW5kIHdpdGggYSBudWxsIGVudHJ5XG4iLAot ICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7 Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8qIFJlYWQgdGhlIHR5cGVjb2RlIG9mIHRo ZSBuZXh0IGVudHJ5ICBhbmQgY2hlY2sgZm9yIHRoZSBlbmQtbWFya2VyICovCi0gICAgICAgIGRl c2MgPSAoc3RydWN0IGh2bV9zYXZlX2Rlc2NyaXB0b3IgKikoJmgtPmRhdGFbaC0+Y3VyXSk7Ci0g ICAgICAgIGlmICggZGVzYy0+dHlwZWNvZGUgPT0gMCApCi0gICAgICAgICAgICByZXR1cm4gMDsg Ci0gICAgICAgIAotICAgICAgICAvKiBGaW5kIHRoZSBoYW5kbGVyIGZvciB0aGlzIGVudHJ5ICov Ci0gICAgICAgIGlmICggKGRlc2MtPnR5cGVjb2RlID4gSFZNX1NBVkVfQ09ERV9NQVgpIHx8Ci0g ICAgICAgICAgICAgKChoYW5kbGVyID0gaHZtX3NyX2hhbmRsZXJzW2Rlc2MtPnR5cGVjb2RlXS5s b2FkKSA9PSBOVUxMKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ayhYRU5MT0dfR19F UlIgIkhWTSVkIHJlc3RvcmU6IHVua25vd24gZW50cnkgdHlwZWNvZGUgJXVcbiIsCi0gICAgICAg ICAgICAgICAgICAgZC0+ZG9tYWluX2lkLCBkZXNjLT50eXBlY29kZSk7Ci0gICAgICAgICAgICBy ZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBMb2FkIHRoZSBlbnRyeSAqLwotICAg ICAgICBwcmludGsoWEVOTE9HX0dfSU5GTyAiSFZNJWQgcmVzdG9yZTogJXMgJSJQUkl1MTYiXG4i LCBkLT5kb21haW5faWQsCi0gICAgICAgICAgICAgICBodm1fc3JfaGFuZGxlcnNbZGVzYy0+dHlw ZWNvZGVdLm5hbWUsIGRlc2MtPmluc3RhbmNlKTsKLSAgICAgICAgaWYgKCBoYW5kbGVyKGQsIGgp ICE9IDAgKSAKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19HX0VSUiAiSFZN JWQgcmVzdG9yZTogZmFpbGVkIHRvIGxvYWQgZW50cnkgJXUvJXVcbiIsCi0gICAgICAgICAgICAg ICAgICAgZC0+ZG9tYWluX2lkLCBkZXNjLT50eXBlY29kZSwgZGVzYy0+aW5zdGFuY2UpOwotICAg ICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogTm90IHJlYWNo ZWQgKi8KLX0KLQotaW50IF9odm1faW5pdF9lbnRyeShzdHJ1Y3QgaHZtX2RvbWFpbl9jb250ZXh0 ICpoLAotICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB0YywgdWludDE2X3QgaW5zdCwgdWlu dDMyX3QgbGVuKQotewotICAgIHN0cnVjdCBodm1fc2F2ZV9kZXNjcmlwdG9yICpkIAotICAgICAg ICA9IChzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRvciAqKSZoLT5kYXRhW2gtPmN1cl07Ci0gICAg aWYgKCBoLT5zaXplIC0gaC0+Y3VyIDwgbGVuICsgc2l6ZW9mICgqZCkgKQotICAgIHsKLSAgICAg ICAgcHJpbnRrKFhFTkxPR19HX1dBUk5JTkcgIkhWTSBzYXZlOiBubyByb29tIGZvciIKLSAgICAg ICAgICAgICAgICIgJSJQUkl1MzIiICsgJXp1IGJ5dGVzIGZvciB0eXBlY29kZSAlIlBSSXUxNiJc biIsCi0gICAgICAgICAgICAgICBsZW4sIHNpemVvZigqZCksIHRjKTsKLSAgICAgICAgcmV0dXJu IC0xOwotICAgIH0KLSAgICBkLT50eXBlY29kZSA9IHRjOwotICAgIGQtPmluc3RhbmNlID0gaW5z dDsKLSAgICBkLT5sZW5ndGggPSBsZW47Ci0gICAgaC0+Y3VyICs9IHNpemVvZigqZCk7Ci0gICAg cmV0dXJuIDA7Ci19Ci0KLXZvaWQgX2h2bV93cml0ZV9lbnRyeShzdHJ1Y3QgaHZtX2RvbWFpbl9j b250ZXh0ICpoLAotICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYywgdWludDMyX3Qgc3Jj X2xlbikKLXsKLSAgICBtZW1jcHkoJmgtPmRhdGFbaC0+Y3VyXSwgc3JjLCBzcmNfbGVuKTsKLSAg ICBoLT5jdXIgKz0gc3JjX2xlbjsKLX0KLQotaW50IF9odm1fY2hlY2tfZW50cnkoc3RydWN0IGh2 bV9kb21haW5fY29udGV4dCAqaCwgCi0gICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB0eXBl LCB1aW50MzJfdCBsZW4sIGJvb2xfdCBzdHJpY3RfbGVuZ3RoKQotewotICAgIHN0cnVjdCBodm1f c2F2ZV9kZXNjcmlwdG9yICpkIAotICAgICAgICA9IChzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRv ciAqKSZoLT5kYXRhW2gtPmN1cl07Ci0gICAgaWYgKCBzaXplb2YoKmQpID4gaC0+c2l6ZSAtIGgt PmN1cikKLSAgICB7Ci0gICAgICAgIHByaW50ayhYRU5MT0dfR19XQVJOSU5HCi0gICAgICAgICAg ICAgICAiSFZNIHJlc3RvcmU6IG5vdCBlbm91Z2ggZGF0YSBsZWZ0IHRvIHJlYWQgJXp1IGJ5dGVz ICIKLSAgICAgICAgICAgICAgICJmb3IgdHlwZSAldSBoZWFkZXJcbiIsIHNpemVvZigqZCksIHR5 cGUpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmICggKHR5cGUgIT0gZC0+dHlw ZWNvZGUpIHx8Ci0gICAgICAgICAoc3RyaWN0X2xlbmd0aCA/IChsZW4gIT0gZC0+bGVuZ3RoKSA6 IChsZW4gPCBkLT5sZW5ndGgpKSB8fAotICAgICAgICAgKGQtPmxlbmd0aCA+IChoLT5zaXplIC0g aC0+Y3VyIC0gc2l6ZW9mKCpkKSkpICkKLSAgICB7Ci0gICAgICAgIHByaW50ayhYRU5MT0dfR19X QVJOSU5HCi0gICAgICAgICAgICAgICAiSFZNIHJlc3RvcmUgbWlzbWF0Y2g6IGV4cGVjdGVkICVz IHR5cGUgJXUgbGVuZ3RoICV1LCAiCi0gICAgICAgICAgICAgICAic2F3IHR5cGUgJXUgbGVuZ3Ro ICV1LiAgJXp1IGJ5dGVzIHJlbWFpbmluZ1xuIiwKLSAgICAgICAgICAgICAgIHN0cmljdF9sZW5n dGggPyAic3RyaWN0IiA6ICJ6ZXJvZXh0ZW5kZWQiLCB0eXBlLCBsZW4sCi0gICAgICAgICAgICAg ICBkLT50eXBlY29kZSwgZC0+bGVuZ3RoLCBoLT5zaXplIC0gaC0+Y3VyIC0gc2l6ZW9mKCpkKSk7 Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaC0+Y3VyICs9IHNpemVvZigqZCk7Ci0g ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX2h2bV9yZWFkX2VudHJ5KHN0cnVjdCBodm1fZG9tYWlu X2NvbnRleHQgKmgsCi0gICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXN0LCB1aW50MzJfdCBk ZXN0X2xlbikKLXsKLSAgICBzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRvciAqZCAKLSAgICAgICAg PSAoc3RydWN0IGh2bV9zYXZlX2Rlc2NyaXB0b3IgKikmaC0+ZGF0YVtoLT5jdXIgLSBzaXplb2Yo KmQpXTsKLSAgICBCVUdfT04oZC0+bGVuZ3RoID4gZGVzdF9sZW4pOwotICAgIG1lbWNweShkZXN0 LCAmaC0+ZGF0YVtoLT5jdXJdLCBkLT5sZW5ndGgpOwotICAgIGlmICggZC0+bGVuZ3RoIDwgZGVz dF9sZW4gKQotICAgICAgICBtZW1zZXQoKGNoYXIgKilkZXN0ICsgZC0+bGVuZ3RoLCAwLCBkZXN0 X2xlbiAtIGQtPmxlbmd0aCk7Ci0gICAgaC0+Y3VyICs9IGQtPmxlbmd0aDsKLX0KLQotLyoKLSAq IExvY2FsIHZhcmlhYmxlczoKLSAqIG1vZGU6IEMKLSAqIGMtZmlsZS1zdHlsZTogIkJTRCIKLSAq IGMtYmFzaWMtb2Zmc2V0OiA0Ci0gKiB0YWItd2lkdGg6IDQKLSAqIGluZGVudC10YWJzLW1vZGU6 IG5pbAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vaHZtL3NhdmUu aCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3NhdmUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUK cmVuYW1lIGZyb20geGVuL2luY2x1ZGUveGVuL2h2bS9zYXZlLmgKcmVuYW1lIHRvIHhlbi9pbmNs dWRlL2FzbS14ODYvaHZtL3NhdmUuaApkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9o dm0vc3VwcG9ydC5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3VwcG9ydC5oCmluZGV4IDhh MTI1MmIyOWUuLmIxOGRiYjZkNDMgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZt L3N1cHBvcnQuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdXBwb3J0LmgKQEAgLTIy LDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgPHhlbi90eXBlcy5oPgogI2luY2x1ZGUgPHhlbi9zY2hl ZC5oPgotI2luY2x1ZGUgPHhlbi9odm0vc2F2ZS5oPgorI2luY2x1ZGUgPGFzbS9odm0vc2F2ZS5o PgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2lmbmRlZiBOREVCVUcKLS0gCjIuMTEu MAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=