From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v3 15/17] x86: fill XPTI shadow pages and keep them in sync with guest L4 Date: Fri, 9 Feb 2018 15:01:49 +0100 Message-ID: <20180209140151.24714-16-jgross@suse.com> References: <20180209140151.24714-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ek9IG-0004Eu-PA for xen-devel@lists.xenproject.org; Fri, 09 Feb 2018 14:04:48 +0000 In-Reply-To: <20180209140151.24714-1-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , andrew.cooper3@citrix.com, dfaggioli@suse.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org Rm9yIGJlaW5nIGFibGUgdG8gdXNlIHRoZSBYUFRJIHNoYWRvdyBMNCBwYWdlIHRhYmxlcyBpbiB0 aGUgaHlwZXJ2aXNvcgpmaWxsIHRoZW0gd2l0aCB0aGUgcmVsYXRlZCBlbnRyaWVzIG9mIHRoZWly IG1hc3RlcnMgYW5kIGtlZXAgdGhlbSBpbgpzeW5jIHdoZW4gdXBkYXRlcyBhcmUgZG9uZSBieSB0 aGUgZ3Vlc3QuCgpTaWduZWQtb2ZmLWJ5OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+ Ci0tLQogeGVuL2FyY2gveDg2L21tLmMgICAgICAgICAgICAgIHwgNDMgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tCiB4ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRp LmMgfCAgMiArKwogeGVuL2FyY2gveDg2L3B2L2RvbTBfYnVpbGQuYyAgIHwgIDMgKysrCiB4ZW4v YXJjaC94ODYvcHYveHB0aS5jICAgICAgICAgfCAzNSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiB4ZW4vaW5jbHVkZS9hc20teDg2L3B2L21tLmggICAgfCAgNCArKysrCiA1IGZp bGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEveGVuL2FyY2gveDg2L21tLmMgYi94ZW4vYXJjaC94ODYvbW0uYwppbmRleCAxNmIwMDRhYmU2 Li4xNGRjNzc2YTUyIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0uYworKysgYi94ZW4vYXJj aC94ODYvbW0uYwpAQCAtMTYwOSw2ICsxNjA5LDE4IEBAIHZvaWQgaW5pdF94ZW5fbDRfc2xvdHMo bDRfcGdlbnRyeV90ICpsNHQsIG1mbl90IGw0bWZuLAogICAgICAgICAgICAgICAgKFJPT1RfUEFH RVRBQkxFX0ZJUlNUX1hFTl9TTE9UICsgc2xvdHMgLQogICAgICAgICAgICAgICAgIGw0X3RhYmxl X29mZnNldChYRU5fVklSVF9TVEFSVCkpICogc2l6ZW9mKCpsNHQpKTsKICAgICB9CisKKyAgICBp ZiAoIGlzX2RvbWFpbl94cHRpX2FjdGl2ZShkKSApCisgICAgeworICAgICAgICB1bnNpZ25lZCBp bnQgc2xvdDsKKworICAgICAgICBmb3IgKCBzbG90ID0gUk9PVF9QQUdFVEFCTEVfRklSU1RfWEVO X1NMT1Q7CisgICAgICAgICAgICAgIHNsb3QgPD0gUk9PVF9QQUdFVEFCTEVfTEFTVF9YRU5fU0xP VDsKKyAgICAgICAgICAgICAgc2xvdCsrICkKKyAgICAgICAgICAgIHhwdGlfdXBkYXRlX2w0KGQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtZm5feChtZm5fZXEoc2w0bWZuLCBJTlZBTElE X01GTikgPyBsNG1mbiA6IHNsNG1mbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90 LCBsNHRbc2xvdF0pOworICAgIH0KIH0KIAogYm9vbCBmaWxsX3JvX21wdChjb25zdCBzdHJ1Y3Qg ZG9tYWluICpkLCBtZm5fdCBtZm4pCkBAIC0xNjIxLDYgKzE2MzMsOSBAQCBib29sIGZpbGxfcm9f bXB0KGNvbnN0IHN0cnVjdCBkb21haW4gKmQsIG1mbl90IG1mbikKICAgICAgICAgbDR0YWJbbDRf dGFibGVfb2Zmc2V0KFJPX01QVF9WSVJUX1NUQVJUKV0gPQogICAgICAgICAgICAgaWRsZV9wZ190 YWJsZVtsNF90YWJsZV9vZmZzZXQoUk9fTVBUX1ZJUlRfU1RBUlQpXTsKICAgICAgICAgcmV0ID0g dHJ1ZTsKKyAgICAgICAgaWYgKCBpc19kb21haW5feHB0aV9hY3RpdmUoZCkgKQorICAgICAgICAg ICAgeHB0aV91cGRhdGVfbDQoZCwgbWZuX3gobWZuKSwgbDRfdGFibGVfb2Zmc2V0KFJPX01QVF9W SVJUX1NUQVJUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkbGVfcGdfdGFibGVbbDRf dGFibGVfb2Zmc2V0KFJPX01QVF9WSVJUX1NUQVJUKV0pOwogICAgIH0KICAgICB1bm1hcF9kb21h aW5fcGFnZShsNHRhYik7CiAKQEAgLTE2MzIsNiArMTY0NywxMSBAQCB2b2lkIHphcF9yb19tcHQo Y29uc3Qgc3RydWN0IGRvbWFpbiAqZCwgbWZuX3QgbWZuKQogICAgIGw0X3BnZW50cnlfdCAqbDR0 YWIgPSBtYXBfZG9tYWluX3BhZ2UobWZuKTsKIAogICAgIGw0dGFiW2w0X3RhYmxlX29mZnNldChS T19NUFRfVklSVF9TVEFSVCldID0gbDRlX2VtcHR5KCk7CisKKyAgICBpZiAoIGlzX2RvbWFpbl94 cHRpX2FjdGl2ZShkKSApCisgICAgICAgIHhwdGlfdXBkYXRlX2w0KGQsIG1mbl94KG1mbiksIGw0 X3RhYmxlX29mZnNldChST19NUFRfVklSVF9TVEFSVCksCisgICAgICAgICAgICAgICAgICAgICAg IGw0ZV9lbXB0eSgpKTsKKwogICAgIHVubWFwX2RvbWFpbl9wYWdlKGw0dGFiKTsKIH0KIApAQCAt MTY4Miw2ICsxNzAyLDggQEAgc3RhdGljIGludCBhbGxvY19sNF90YWJsZShzdHJ1Y3QgcGFnZV9p bmZvICpwYWdlKQogICAgICAgICB9CiAKICAgICAgICAgcGw0ZVtpXSA9IGFkanVzdF9ndWVzdF9s NGUocGw0ZVtpXSwgZCk7CisgICAgICAgIGlmICggaXNfZG9tYWluX3hwdGlfYWN0aXZlKGQpICkK KyAgICAgICAgICAgIHhwdGlfdXBkYXRlX2w0KGQsIHBmbiwgaSwgcGw0ZVtpXSk7CiAgICAgfQog CiAgICAgaWYgKCByYyA+PSAwICkKQEAgLTIxNDEsNiArMjE2MywyMCBAQCBzdGF0aWMgaW50IG1v ZF9sM19lbnRyeShsM19wZ2VudHJ5X3QgKnBsM2UsCiAgICAgcmV0dXJuIHJjOwogfQogCitzdGF0 aWMgYm9vbCB1cGRhdGVfbDRwdGUobDRfcGdlbnRyeV90ICpwbDRlLCBsNF9wZ2VudHJ5X3Qgb2w0 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsNF9wZ2VudHJ5X3Qgbmw0ZSwgdW5zaWduZWQg bG9uZyBwZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnYsIGJvb2wg cHJlc2VydmVfYWQpCit7CisgICAgYm9vbCByYzsKKworICAgIHJjID0gVVBEQVRFX0VOVFJZKGw0 LCBwbDRlLCBvbDRlLCBubDRlLCBwZm4sIHYsIHByZXNlcnZlX2FkKTsKKyAgICBpZiAoIHJjICYm IGlzX3ZjcHVfeHB0aV9hY3RpdmUodikgJiYKKyAgICAgICAgICghcGFnaW5nX21vZGVfc2hhZG93 KHYtPmRvbWFpbikgfHwgIXBhZ2luZ19nZXRfaG9zdG1vZGUodikpICkKKyAgICAgICAgeHB0aV91 cGRhdGVfbDQodi0+ZG9tYWluLCBwZm4sIHBnZW50cnlfcHRyX3RvX3Nsb3QocGw0ZSksIG5sNGUp OworCisgICAgcmV0dXJuIHJjOworfQorCiAvKiBVcGRhdGUgdGhlIEw0IGVudHJ5IGF0IHBsNGUg dG8gbmV3IHZhbHVlIG5sNGUuIHBsNGUgaXMgd2l0aGluIGZyYW1lIHBmbi4gKi8KIHN0YXRpYyBp bnQgbW9kX2w0X2VudHJ5KGw0X3BnZW50cnlfdCAqcGw0ZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIGw0X3BnZW50cnlfdCBubDRlLApAQCAtMjE3NSw3ICsyMjExLDcgQEAgc3RhdGljIGludCBt b2RfbDRfZW50cnkobDRfcGdlbnRyeV90ICpwbDRlLAogICAgICAgICBpZiAoICFsNGVfaGFzX2No YW5nZWQob2w0ZSwgbmw0ZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCiAgICAgICAgIHsK ICAgICAgICAgICAgIG5sNGUgPSBhZGp1c3RfZ3Vlc3RfbDRlKG5sNGUsIGQpOwotICAgICAgICAg ICAgcmMgPSBVUERBVEVfRU5UUlkobDQsIHBsNGUsIG9sNGUsIG5sNGUsIHBmbiwgdmNwdSwgcHJl c2VydmVfYWQpOworICAgICAgICAgICAgcmMgPSB1cGRhdGVfbDRwdGUocGw0ZSwgb2w0ZSwgbmw0 ZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2ZV9hZCk7CiAgICAgICAgICAgICByZXR1cm4gcmMgPyAwIDog LUVGQVVMVDsKICAgICAgICAgfQogCkBAIC0yMTg1LDE0ICsyMjIxLDEzIEBAIHN0YXRpYyBpbnQg bW9kX2w0X2VudHJ5KGw0X3BnZW50cnlfdCAqcGw0ZSwKICAgICAgICAgcmMgPSAwOwogCiAgICAg ICAgIG5sNGUgPSBhZGp1c3RfZ3Vlc3RfbDRlKG5sNGUsIGQpOwotICAgICAgICBpZiAoIHVubGlr ZWx5KCFVUERBVEVfRU5UUlkobDQsIHBsNGUsIG9sNGUsIG5sNGUsIHBmbiwgdmNwdSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQorICAgICAgICBp ZiAoIHVubGlrZWx5KCF1cGRhdGVfbDRwdGUocGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2Y3B1LCBw cmVzZXJ2ZV9hZCkpICkKICAgICAgICAgewogICAgICAgICAgICAgb2w0ZSA9IG5sNGU7CiAgICAg ICAgICAgICByYyA9IC1FRkFVTFQ7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoIHVu bGlrZWx5KCFVUERBVEVfRU5UUlkobDQsIHBsNGUsIG9sNGUsIG5sNGUsIHBmbiwgdmNwdSwKKyAg ICBlbHNlIGlmICggdW5saWtlbHkoIXVwZGF0ZV9sNHB0ZShwbDRlLCBvbDRlLCBubDRlLCBwZm4s IHZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQp KSApCiAgICAgewogICAgICAgICByZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9tbS9zaGFkb3cvbXVsdGkuYyBiL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvbXVsdGkuYwpp bmRleCAxNzAxNjNmYmNmLi4xMTBhNTQ0OWE2IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0v c2hhZG93L211bHRpLmMKKysrIGIveGVuL2FyY2gveDg2L21tL3NoYWRvdy9tdWx0aS5jCkBAIC05 NTQsNiArOTU0LDggQEAgc3RhdGljIGludCBzaGFkb3dfc2V0X2w0ZShzdHJ1Y3QgZG9tYWluICpk LAogICAgIC8qIFdyaXRlIHRoZSBuZXcgZW50cnkgKi8KICAgICBzaGFkb3dfd3JpdGVfZW50cmll cyhzbDRlLCAmbmV3X3NsNGUsIDEsIHNsNG1mbik7CiAgICAgZmxhZ3MgfD0gU0hBRE9XX1NFVF9D SEFOR0VEOworICAgIGlmICggaXNfZG9tYWluX3hwdGlfYWN0aXZlKGQpICkKKyAgICAgICAgeHB0 aV91cGRhdGVfbDQoZCwgbWZuX3goc2w0bWZuKSwgcGdlbnRyeV9wdHJfdG9fc2xvdChzbDRlKSwg bmV3X3NsNGUpOwogCiAgICAgaWYgKCBzaGFkb3dfbDRlX2dldF9mbGFncyhvbGRfc2w0ZSkgJiBf UEFHRV9QUkVTRU5UICkKICAgICB7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZG9tMF9i dWlsZC5jIGIveGVuL2FyY2gveDg2L3B2L2RvbTBfYnVpbGQuYwppbmRleCA2ZTdiYzQzNWFiLi44 ZWY5Yzg3ODQ1IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHYvZG9tMF9idWlsZC5jCisrKyBi L3hlbi9hcmNoL3g4Ni9wdi9kb20wX2J1aWxkLmMKQEAgLTE0Miw2ICsxNDIsOSBAQCBzdGF0aWMg X19pbml0IHZvaWQgc2V0dXBfcHZfcGh5c21hcChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBs b25nIHBndGJsX3BmbiwKICAgICAgICAgICAgIHBsM2UgPSBfX21hcF9kb21haW5fcGFnZShwYWdl KTsKICAgICAgICAgICAgIGNsZWFyX3BhZ2UocGwzZSk7CiAgICAgICAgICAgICAqcGw0ZSA9IGw0 ZV9mcm9tX3BhZ2UocGFnZSwgTDRfUFJPVCk7CisgICAgICAgICAgICBpZiAoIGlzX2RvbWFpbl94 cHRpX2FjdGl2ZShkKSApCisgICAgICAgICAgICAgICAgeHB0aV91cGRhdGVfbDQoZCwgcGd0Ymxf cGZuLCBsNF90YWJsZV9vZmZzZXQodnBoeXNtYXBfc3RhcnQpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpwbDRlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBwbDNlID0g bWFwX2wzdF9mcm9tX2w0ZSgqcGw0ZSk7CiAKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wdi94 cHRpLmMgYi94ZW4vYXJjaC94ODYvcHYveHB0aS5jCmluZGV4IGY2NjNmYWU4MDYuLmRhODMzMzk1 NjMgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi94cHRpLmMKKysrIGIveGVuL2FyY2gveDg2 L3B2L3hwdGkuYwpAQCAtMzU3LDYgKzM1NywxOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHhwdGlf c2hhZG93X2dldGZvcmNlKHN0cnVjdCB4cHRpX2RvbWFpbiAqeGQpCiAgICAgcmV0dXJuIGlkeDsK IH0KIAorc3RhdGljIHZvaWQgeHB0aV9pbml0X3hlbl9sNChzdHJ1Y3QgeHB0aV9kb21haW4gKnhk LCBzdHJ1Y3QgeHB0aV9sNHBnICpsNHBnKQoreworICAgIHVuc2lnbmVkIGludCBpOworICAgIGw0 X3BnZW50cnlfdCAqc3JjLCAqZGVzdDsKKworICAgIHNyYyA9IG1hcF9kb21haW5fcGFnZShfbWZu KGw0cGctPmd1ZXN0X21mbikpOworICAgIGRlc3QgPSBtZm5fdG9fdmlydChsNHBnLT54ZW5fbWZu KTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IEw0X1BBR0VUQUJMRV9FTlRSSUVTOyBpKysgKQorICAg ICAgICBkZXN0W2ldID0gc3JjW2ldOworICAgIHVubWFwX2RvbWFpbl9wYWdlKHNyYyk7Cit9CisK IHN0YXRpYyB1bnNpZ25lZCBpbnQgeHB0aV9zaGFkb3dfZ2V0KHN0cnVjdCB4cHRpX2RvbWFpbiAq eGQsIHVuc2lnbmVkIGxvbmcgbWZuKQogewogICAgIHVuc2lnbmVkIGludCBpZHg7CkBAIC0zODUs NiArMzk3LDkgQEAgc3RhdGljIHVuc2lnbmVkIGludCB4cHRpX3NoYWRvd19nZXQoc3RydWN0IHhw dGlfZG9tYWluICp4ZCwgdW5zaWduZWQgbG9uZyBtZm4pCiAgICAgbDRwZy0+cmVmX25leHQgPSBs NHJlZi0+aWR4OwogICAgIGw0cmVmLT5pZHggPSBpZHg7CiAKKyAgICAvKiBGaWxsIHRoZSBzaGFk b3cgcGFnZSB0YWJsZSBlbnRyaWVzLiAqLworICAgIHhwdGlfaW5pdF94ZW5fbDQoeGQsIGw0cGcp OworCiAgICAgcmV0dXJuIGlkeDsKIH0KIApAQCAtNDAzLDYgKzQxOCwyNiBAQCBzdGF0aWMgdW5z aWduZWQgaW50IHhwdGlfc2hhZG93X2FjdGl2YXRlKHN0cnVjdCB4cHRpX2RvbWFpbiAqeGQsCiAg ICAgcmV0dXJuIGlkeDsKIH0KIAordm9pZCB4cHRpX3VwZGF0ZV9sNChjb25zdCBzdHJ1Y3QgZG9t YWluICpkLCB1bnNpZ25lZCBsb25nIG1mbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IHNsb3QsIGw0X3BnZW50cnlfdCBlKQoreworICAgIHN0cnVjdCB4cHRpX2RvbWFpbiAqeGQg PSBkLT5hcmNoLnB2X2RvbWFpbi54cHRpOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAg dW5zaWduZWQgaW50IGlkeDsKKyAgICBsNF9wZ2VudHJ5X3QgKmw0OworCisgICAgc3Bpbl9sb2Nr X2lycXNhdmUoJnhkLT5sb2NrLCBmbGFncyk7CisKKyAgICBpZHggPSB4cHRpX3NoYWRvd19mcm9t X2hhc2hsaXN0KHhkLCBtZm4pOworICAgIGlmICggaWR4ICE9IEw0X0lOVkFMSUQgKQorICAgIHsK KyAgICAgICAgbDQgPSBtZm5fdG9fdmlydCh4ZC0+bDRwZ1tpZHhdLnhlbl9tZm4pOworICAgICAg ICBsNFtzbG90XSA9IGU7CisgICAgfQorCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGQt PmxvY2ssIGZsYWdzKTsKK30KKwogdm9pZCB4cHRpX21ha2VfY3IzKHN0cnVjdCB2Y3B1ICp2LCB1 bnNpZ25lZCBsb25nIG1mbikKIHsKICAgICBzdHJ1Y3QgeHB0aV9kb21haW4gKnhkID0gdi0+ZG9t YWluLT5hcmNoLnB2X2RvbWFpbi54cHRpOwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4 Ni9wdi9tbS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9tbS5oCmluZGV4IDI1YzAzNTk4OGMu LjhhOTBhZjEwODQgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcHYvbW0uaAorKysg Yi94ZW4vaW5jbHVkZS9hc20teDg2L3B2L21tLmgKQEAgLTM2LDYgKzM2LDggQEAgaW50IHhwdGlf ZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCk7CiB2b2lkIHhwdGlfZG9tYWluX2Rlc3Ryb3ko c3RydWN0IGRvbWFpbiAqZCk7CiB2b2lkIHhwdGlfbWFrZV9jcjMoc3RydWN0IHZjcHUgKnYsIHVu c2lnbmVkIGxvbmcgbWZuKTsKIHZvaWQgeHB0aV9mcmVlX2w0KHN0cnVjdCBkb21haW4gKmQsIHVu c2lnbmVkIGxvbmcgbWZuKTsKK3ZvaWQgeHB0aV91cGRhdGVfbDQoY29uc3Qgc3RydWN0IGRvbWFp biAqZCwgdW5zaWduZWQgbG9uZyBtZm4sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBzbG90LCBsNF9wZ2VudHJ5X3QgZSk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19kb21haW5f eHB0aV9hY3RpdmUoY29uc3Qgc3RydWN0IGRvbWFpbiAqZCkKIHsKQEAgLTczLDYgKzc1LDggQEAg c3RhdGljIGlubGluZSBpbnQgeHB0aV9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkKSB7IHJl dHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgeHB0aV9kb21haW5fZGVzdHJveShzdHJ1Y3Qg ZG9tYWluICpkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB4cHRpX21ha2VfY3IzKHN0cnVjdCB2 Y3B1ICp2LCB1bnNpZ25lZCBsb25nIG1mbikgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgeHB0aV9m cmVlX2w0KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgbWZuKSB7IH0KK3N0YXRpYyBp bmxpbmUgdm9pZCB4cHRpX3VwZGF0ZV9sNChjb25zdCBzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25l ZCBsb25nIG1mbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgc2xvdCwgbDRfcGdlbnRyeV90IGUpIHsgfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZG9t YWluX3hwdGlfYWN0aXZlKGNvbnN0IHN0cnVjdCBkb21haW4gKmQpCiB7IHJldHVybiBmYWxzZTsg fQotLSAKMi4xMy42CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZl bA==