From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v3 06/24] x86/pv: Implement pv_inject_{event, page_fault, hw_exception}() Date: Wed, 30 Nov 2016 13:50:23 +0000 Message-ID: <1480513841-7565-7-git-send-email-andrew.cooper3@citrix.com> References: <1480513841-7565-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: <1480513841-7565-1-git-send-email-andrew.cooper3@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: Andrew Cooper , Jan Beulich List-Id: xen-devel@lists.xenproject.org VG8gaGVscCB3aXRoIGV2ZW50IGluamVjdGlvbiBpbXByb3ZlbWVudHMgZm9yIHRoZSBQViB1c2Vz IG9mIHg4Nl9lbXVsYXRlKCksCmltcGxlbWVudCBhIGV2ZW50IGluamVjdGlvbiBBUEkgd2hpY2gg bWF0Y2hlcyBpdHMgaHZtIGNvdW50ZXJwYXJ0LgoKVGhpcyBpcyBzdGFydGVkIHdpdGggdGFraW5n IGRvX2d1ZXN0X3RyYXAoKSBhbmQgbW9kaWZ5aW5nIGl0cyBjYWxsaW5nIEFQSSB0bwpwdl9pbmpl Y3RfZXZlbnQoKSwgc3Vic2VxdWVudGFsbHkgaW1wbGVtZW50aW5nIHRoZSBmb3JtZXIgaW4gdGVy bXMgb2YgdGhlCmxhdHRlci4KClRoZSBleGlzdGluZyBwcm9wYWdhdGVfcGFnZV9mYXVsdCgpIGlz IGZhaXJseSBzaW1pbGFyIHRvCnB2X2luamVjdF9wYWdlX2ZhdWx0KCksIGFsdGhvdWdoIGl0IGhh cyBhIHJldHVybiB2YWx1ZS4gIE9ubHkgYSBzaW5nbGUgY2FsbGVyCm1ha2VzIHVzZSBvZiB0aGUg cmV0dXJuIHZhbHVlLCBhbmQgbm9uLU5VTEwgaXMgb25seSByZXR1cm5lZCBpZiB0aGUgcGFzc2Vk IGNyMgppcyBub24tY2Fub25pY2FsLiAgT3BlbmNvZGUgdGhpcyBzaW5nbGUgY2FzZSBpbgpoYW5k bGVfZ2R0X2xkdF9tYXBwaW5nX2ZhdWx0KCksIGFsbG93aW5nIHByb3BhZ2F0ZV9wYWdlX2ZhdWx0 KCkgdG8gYmVjb21lCnZvaWQuCgpUaGUgY2FsbCB0byByZXNlcnZlZF9iaXRfcGFnZV9mYXVsdCgp IGluIHByb3BhZ2F0ZV9wYWdlX2ZhdWx0KCkgd2FzCmNvbmNlcHR1YWxseSB3cm9uZyB0byBzdGFy dCB3aXRoLiAgQ29tcGxhaW5pbmcgYWJvdXQgcmVzZXJ2ZWQgYml0cyBzaG91bGQgYmUKcGFydCBv ZiBoYW5kbGluZyB0aGUgcGFnZWZhdWx0IGl0c2VsZiwgbm90IHBhcnQgb2YgaW5qZWN0aW5nIGEg cGFnZWZhdWx0IGludG8KdGhlIGd1ZXN0LiAgSXQgaXMgdGhlcmVmb3JlIG1vdmVkIGFoZWFkIG9m IHRoZSBpbmplY3Rpb24gY2FsbCBpbgpkb19wYWdlX2ZhdWx0KCkgdG8gY29tcGVuc2F0ZS4KClRo ZSByZW1haW5pbmcgI1BGIHNwZWNpZmljIGJpdHMgYXJlIG1vdmVkIGludG8gcHZfaW5qZWN0X2V2 ZW50KCksIGFuZApwdl9pbmplY3RfcGFnZV9mYXVsdCgpIGlzIGltcGxlbWVudGVkIGFzIGEgc3Rh dGljIGlubGluZSB3cmFwcGVyLgoKTm8gcHJhY3RpY2FsIGNoYW5nZSBmcm9tIGEgZ3Vlc3RzIHBv aW50IG9mIHZpZXcuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVy M0BjaXRyaXguY29tPgpBY2tlZC1ieTogVGltIERlZWdhbiA8dGltQHhlbi5vcmc+Ci0tLQpDQzog SmFuIEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29tPgoKdjM6CiAqIFJlcG9zaXRpb24gcmVzZXJ2 ZWRfYml0X3BhZ2VfZmF1bHQoKSBoYW5kbGluZwp2MjoKICogTmV3Ci0tLQogeGVuL2FyY2gveDg2 L21tLmMgICAgICAgICAgICAgICB8ICAgNSArLQogeGVuL2FyY2gveDg2L21tL3NoYWRvdy9jb21t b24uYyB8ICAgNCArLQogeGVuL2FyY2gveDg2L3RyYXBzLmMgICAgICAgICAgICB8IDE0NyArKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4ZW4vaW5jbHVkZS9hc20teDg2 L2RvbWFpbi5oICAgIHwgIDI2ICsrKysrKysKIHhlbi9pbmNsdWRlL2FzbS14ODYvbW0uaCAgICAg ICAgfCAgIDEgLQogNSBmaWxlcyBjaGFuZ2VkLCAxMDQgaW5zZXJ0aW9ucygrKSwgNzkgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMgYi94ZW4vYXJjaC94ODYvbW0u YwppbmRleCBkMzY1ZjU5Li5iN2M3MTIyIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0uYwor KysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNTEzNiw3ICs1MTM2LDcgQEAgc3RhdGljIGludCBw dHdyX2VtdWxhdGVkX3JlYWQoCiAgICAgaWYgKCAhX19hZGRyX29rKGFkZHIpIHx8CiAgICAgICAg ICAocmMgPSBfX2NvcHlfZnJvbV91c2VyKHBfZGF0YSwgKHZvaWQgKilhZGRyLCBieXRlcykpICkK ICAgICB7Ci0gICAgICAgIHByb3BhZ2F0ZV9wYWdlX2ZhdWx0KGFkZHIgKyBieXRlcyAtIHJjLCAw KTsgLyogcmVhZCBmYXVsdCAqLworICAgICAgICBwdl9pbmplY3RfcGFnZV9mYXVsdCgwLCBhZGRy ICsgYnl0ZXMgLSByYyk7IC8qIFJlYWQgZmF1bHQuICovCiAgICAgICAgIHJldHVybiBYODZFTVVM X0VYQ0VQVElPTjsKICAgICB9CiAKQEAgLTUxNzcsNyArNTE3Nyw4IEBAIHN0YXRpYyBpbnQgcHR3 cl9lbXVsYXRlZF91cGRhdGUoCiAgICAgICAgIGFkZHIgJj0gfihzaXplb2YocGFkZHJfdCktMSk7 CiAgICAgICAgIGlmICggKHJjID0gY29weV9mcm9tX3VzZXIoJmZ1bGwsICh2b2lkICopYWRkciwg c2l6ZW9mKHBhZGRyX3QpKSkgIT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHByb3BhZ2F0 ZV9wYWdlX2ZhdWx0KGFkZHIrc2l6ZW9mKHBhZGRyX3QpLXJjLCAwKTsgLyogcmVhZCBmYXVsdCAq LworICAgICAgICAgICAgcHZfaW5qZWN0X3BhZ2VfZmF1bHQoMCwgLyogUmVhZCBmYXVsdC4gKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKyBzaXplb2YocGFkZHJfdCkg LSByYyk7CiAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047CiAgICAgICAgIH0K ICAgICAgICAgLyogTWFzayBvdXQgYml0cyBwcm92aWRlZCBieSBjYWxsZXIuICovCmRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvbW0vc2hhZG93L2NvbW1vbi5jIGIveGVuL2FyY2gveDg2L21tL3No YWRvdy9jb21tb24uYwppbmRleCBhNGEzYzRiLi5mMDc4MDNiIDEwMDY0NAotLS0gYS94ZW4vYXJj aC94ODYvbW0vc2hhZG93L2NvbW1vbi5jCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvY29t bW9uLmMKQEAgLTMyMyw3ICszMjMsNyBAQCBwdl9lbXVsYXRlX3JlYWQoZW51bSB4ODZfc2VnbWVu dCBzZWcsCiAKICAgICBpZiAoIChyYyA9IGNvcHlfZnJvbV91c2VyKHBfZGF0YSwgKHZvaWQgKilv ZmZzZXQsIGJ5dGVzKSkgIT0gMCApCiAgICAgewotICAgICAgICBwcm9wYWdhdGVfcGFnZV9mYXVs dChvZmZzZXQgKyBieXRlcyAtIHJjLCAwKTsgLyogcmVhZCBmYXVsdCAqLworICAgICAgICBwdl9p bmplY3RfcGFnZV9mYXVsdCgwLCBvZmZzZXQgKyBieXRlcyAtIHJjKTsgLyogUmVhZCBmYXVsdC4g Ki8KICAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwogICAgIH0KIApAQCAtMTcyMyw3 ICsxNzIzLDcgQEAgc3RhdGljIG1mbl90IGVtdWxhdGVfZ3ZhX3RvX21mbihzdHJ1Y3QgdmNwdSAq diwgdW5zaWduZWQgbG9uZyB2YWRkciwKICAgICAgICAgaWYgKCBpc19odm1fdmNwdSh2KSApCiAg ICAgICAgICAgICBodm1faW5qZWN0X3BhZ2VfZmF1bHQocGZlYywgdmFkZHIpOwogICAgICAgICBl bHNlCi0gICAgICAgICAgICBwcm9wYWdhdGVfcGFnZV9mYXVsdCh2YWRkciwgcGZlYyk7CisgICAg ICAgICAgICBwdl9pbmplY3RfcGFnZV9mYXVsdChwZmVjLCB2YWRkcik7CiAgICAgICAgIHJldHVy biBfbWZuKEJBRF9HVkFfVE9fR0ZOKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4 Ni90cmFwcy5jIGIveGVuL2FyY2gveDg2L3RyYXBzLmMKaW5kZXggYjQ2NDIxMS4uMTk1ZDU5MCAx MDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3RyYXBzLmMKKysrIGIveGVuL2FyY2gveDg2L3RyYXBz LmMKQEAgLTYyNSwzNyArNjI1LDc1IEBAIHZvaWQgZmF0YWxfdHJhcChjb25zdCBzdHJ1Y3QgY3B1 X3VzZXJfcmVncyAqcmVncywgYm9vbF90IHNob3dfcmVtb3RlKQogICAgICAgICAgIChyZWdzLT5l ZmxhZ3MgJiBYODZfRUZMQUdTX0lGKSA/ICIiIDogIiwgSU4gSU5URVJSVVBUIENPTlRFWFQiKTsK IH0KIAotc3RhdGljIHZvaWQgZG9fZ3Vlc3RfdHJhcCh1bnNpZ25lZCBpbnQgdHJhcG5yLAotICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykK K3ZvaWQgcHZfaW5qZWN0X2V2ZW50KGNvbnN0IHN0cnVjdCB4ODZfZXZlbnQgKmV2ZW50KQogewog ICAgIHN0cnVjdCB2Y3B1ICp2ID0gY3VycmVudDsKKyAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq cmVncyA9IGd1ZXN0X2NwdV91c2VyX3JlZ3MoKTsKICAgICBzdHJ1Y3QgdHJhcF9ib3VuY2UgKnRi OwogICAgIGNvbnN0IHN0cnVjdCB0cmFwX2luZm8gKnRpOworICAgIGNvbnN0IHVpbnQ4X3QgdmVj dG9yID0gZXZlbnQtPnZlY3RvcjsKICAgICBjb25zdCBib29sIHVzZV9lcnJvcl9jb2RlID0KLSAg ICAgICAgKCh0cmFwbnIgPCAzMikgJiYgKFRSQVBfSEFWRV9FQyAmICgxdSA8PCB0cmFwbnIpKSk7 CisgICAgICAgICgodmVjdG9yIDwgMzIpICYmIChUUkFQX0hBVkVfRUMgJiAoMXUgPDwgdmVjdG9y KSkpOworICAgIHVuc2lnbmVkIGludCBlcnJvcl9jb2RlID0gZXZlbnQtPmVycm9yX2NvZGU7CiAK LSAgICB0cmFjZV9wdl90cmFwKHRyYXBuciwgcmVncy0+ZWlwLCB1c2VfZXJyb3JfY29kZSwgcmVn cy0+ZXJyb3JfY29kZSk7CisgICAgQVNTRVJUKHZlY3RvciA9PSBldmVudC0+dmVjdG9yKTsgLyog Q29uZmlybSBubyB0cnVuY2F0aW9uLiAqLworICAgIGlmICggdXNlX2Vycm9yX2NvZGUgKQorICAg ICAgICBBU1NFUlQoZXJyb3JfY29kZSAhPSBYODZfRVZFTlRfTk9fRUMpOworICAgIGVsc2UKKyAg ICAgICAgQVNTRVJUKGVycm9yX2NvZGUgPT0gWDg2X0VWRU5UX05PX0VDKTsKIAogICAgIHRiID0g JnYtPmFyY2gucHZfdmNwdS50cmFwX2JvdW5jZTsKLSAgICB0aSA9ICZ2LT5hcmNoLnB2X3ZjcHUu dHJhcF9jdHh0W3RyYXBucl07CisgICAgdGkgPSAmdi0+YXJjaC5wdl92Y3B1LnRyYXBfY3R4dFt2 ZWN0b3JdOwogCiAgICAgdGItPmZsYWdzID0gVEJGX0VYQ0VQVElPTjsKICAgICB0Yi0+Y3MgICAg PSB0aS0+Y3M7CiAgICAgdGItPmVpcCAgID0gdGktPmFkZHJlc3M7CiAKKyAgICBpZiAoIHZlY3Rv ciA9PSBUUkFQX3BhZ2VfZmF1bHQgKQorICAgIHsKKyAgICAgICAgdi0+YXJjaC5wdl92Y3B1LmN0 cmxyZWdbMl0gPSBldmVudC0+Y3IyOworICAgICAgICBhcmNoX3NldF9jcjIodiwgZXZlbnQtPmNy Mik7CisKKyAgICAgICAgLyogUmUtc2V0IGVycm9yX2NvZGUudXNlciBmbGFnIGFwcHJvcHJpYXRl bHkgZm9yIHRoZSBndWVzdC4gKi8KKyAgICAgICAgZXJyb3JfY29kZSAmPSB+UEZFQ191c2VyX21v ZGU7CisgICAgICAgIGlmICggIWd1ZXN0X2tlcm5lbF9tb2RlKHYsIHJlZ3MpICkKKyAgICAgICAg ICAgIGVycm9yX2NvZGUgfD0gUEZFQ191c2VyX21vZGU7CisKKyAgICAgICAgdHJhY2VfcHZfcGFn ZV9mYXVsdChldmVudC0+Y3IyLCBlcnJvcl9jb2RlKTsKKyAgICB9CisgICAgZWxzZQorICAgICAg ICB0cmFjZV9wdl90cmFwKHZlY3RvciwgcmVncy0+ZWlwLCB1c2VfZXJyb3JfY29kZSwgZXJyb3Jf Y29kZSk7CisKICAgICBpZiAoIHVzZV9lcnJvcl9jb2RlICkKICAgICB7CiAgICAgICAgIHRiLT5m bGFncyB8PSBUQkZfRVhDRVBUSU9OX0VSUkNPREU7Ci0gICAgICAgIHRiLT5lcnJvcl9jb2RlID0g cmVncy0+ZXJyb3JfY29kZTsKKyAgICAgICAgdGItPmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwog ICAgIH0KIAogICAgIGlmICggVElfR0VUX0lGKHRpKSApCiAgICAgICAgIHRiLT5mbGFncyB8PSBU QkZfSU5URVJSVVBUOwogCiAgICAgaWYgKCB1bmxpa2VseShudWxsX3RyYXBfYm91bmNlKHYsIHRi KSkgKQorICAgIHsKICAgICAgICAgZ3ByaW50ayhYRU5MT0dfV0FSTklORywKICAgICAgICAgICAg ICAgICAiVW5oYW5kbGVkICVzIGZhdWx0L3RyYXAgWyMlZCwgZWM9JTA0eF1cbiIsCi0gICAgICAg ICAgICAgICAgdHJhcHN0cih0cmFwbnIpLCB0cmFwbnIsIHJlZ3MtPmVycm9yX2NvZGUpOworICAg ICAgICAgICAgICAgIHRyYXBzdHIodmVjdG9yKSwgdmVjdG9yLCBlcnJvcl9jb2RlKTsKKworICAg ICAgICBpZiAoIHZlY3RvciA9PSBUUkFQX3BhZ2VfZmF1bHQgKQorICAgICAgICAgICAgc2hvd19w YWdlX3dhbGsoZXZlbnQtPmNyMik7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9f Z3Vlc3RfdHJhcCh1bnNpZ25lZCBpbnQgdHJhcG5yLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisgICAgY29uc3Qg c3RydWN0IHg4Nl9ldmVudCBldmVudCA9IHsKKyAgICAgICAgLnZlY3RvciA9IHRyYXBuciwKKyAg ICAgICAgLmVycm9yX2NvZGUgPSAoKCh0cmFwbnIgPCAzMikgJiYgKFRSQVBfSEFWRV9FQyAmICgx dSA8PCB0cmFwbnIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgPyByZWdzLT5lcnJvcl9jb2Rl IDogWDg2X0VWRU5UX05PX0VDKSwKKyAgICB9OworCisgICAgcHZfaW5qZWN0X2V2ZW50KCZldmVu dCk7CiB9CiAKIHN0YXRpYyB2b2lkIGluc3RydWN0aW9uX2RvbmUoCkBAIC0xMjg5LDcgKzEzMjcs NyBAQCBzdGF0aWMgaW50IGVtdWxhdGVfaW52YWxpZF9yZHRzY3Aoc3RydWN0IGNwdV91c2VyX3Jl Z3MgKnJlZ3MpCiAgICAgZWlwID0gcmVncy0+ZWlwOwogICAgIGlmICggKHJjID0gY29weV9mcm9t X3VzZXIob3Bjb2RlLCAoY2hhciAqKWVpcCwgc2l6ZW9mKG9wY29kZSkpKSAhPSAwICkKICAgICB7 Ci0gICAgICAgIHByb3BhZ2F0ZV9wYWdlX2ZhdWx0KGVpcCArIHNpemVvZihvcGNvZGUpIC0gcmMs IDApOworICAgICAgICBwdl9pbmplY3RfcGFnZV9mYXVsdCgwLCBlaXAgKyBzaXplb2Yob3Bjb2Rl KSAtIHJjKTsKICAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKICAgICB9CiAgICAg aWYgKCBtZW1jbXAob3Bjb2RlLCAiXHhmXHgxXHhmOSIsIHNpemVvZihvcGNvZGUpKSApCkBAIC0x MzEwLDcgKzEzNDgsNyBAQCBzdGF0aWMgaW50IGVtdWxhdGVfZm9yY2VkX2ludmFsaWRfb3Aoc3Ry dWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiAgICAgLyogQ2hlY2sgZm9yIGZvcmNlZCBlbXVsYXRp b24gc2lnbmF0dXJlOiB1ZDIgOyAuYXNjaWkgInhlbiIuICovCiAgICAgaWYgKCAocmMgPSBjb3B5 X2Zyb21fdXNlcihzaWcsIChjaGFyICopZWlwLCBzaXplb2Yoc2lnKSkpICE9IDAgKQogICAgIHsK LSAgICAgICAgcHJvcGFnYXRlX3BhZ2VfZmF1bHQoZWlwICsgc2l6ZW9mKHNpZykgLSByYywgMCk7 CisgICAgICAgIHB2X2luamVjdF9wYWdlX2ZhdWx0KDAsIGVpcCArIHNpemVvZihzaWcpIC0gcmMp OwogICAgICAgICByZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVkOwogICAgIH0KICAgICBpZiAoIG1l bWNtcChzaWcsICJceGZceGJ4ZW4iLCBzaXplb2Yoc2lnKSkgKQpAQCAtMTMyMCw3ICsxMzU4LDcg QEAgc3RhdGljIGludCBlbXVsYXRlX2ZvcmNlZF9pbnZhbGlkX29wKHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKQogICAgIC8qIFdlIG9ubHkgZW11bGF0ZSBDUFVJRC4gKi8KICAgICBpZiAoICgg cmMgPSBjb3B5X2Zyb21fdXNlcihpbnN0ciwgKGNoYXIgKillaXAsIHNpemVvZihpbnN0cikpKSAh PSAwICkKICAgICB7Ci0gICAgICAgIHByb3BhZ2F0ZV9wYWdlX2ZhdWx0KGVpcCArIHNpemVvZihp bnN0cikgLSByYywgMCk7CisgICAgICAgIHB2X2luamVjdF9wYWdlX2ZhdWx0KDAsIGVpcCArIHNp emVvZihpbnN0cikgLSByYyk7CiAgICAgICAgIHJldHVybiBFWENSRVRfZmF1bHRfZml4ZWQ7CiAg ICAgfQogICAgIGlmICggbWVtY21wKGluc3RyLCAiXHhmXHhhMiIsIHNpemVvZihpbnN0cikpICkK QEAgLTE0ODcsNTMgKzE1MjUsNiBAQCBzdGF0aWMgdm9pZCByZXNlcnZlZF9iaXRfcGFnZV9mYXVs dCgKICAgICBzaG93X2V4ZWN1dGlvbl9zdGF0ZShyZWdzKTsKIH0KIAotc3RydWN0IHRyYXBfYm91 bmNlICpwcm9wYWdhdGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBlcnJvcl9j b2RlKQotewotICAgIHN0cnVjdCB0cmFwX2luZm8gKnRpOwotICAgIHN0cnVjdCB2Y3B1ICp2ID0g Y3VycmVudDsKLSAgICBzdHJ1Y3QgdHJhcF9ib3VuY2UgKnRiID0gJnYtPmFyY2gucHZfdmNwdS50 cmFwX2JvdW5jZTsKLQotICAgIGlmICggdW5saWtlbHkoIWlzX2Nhbm9uaWNhbF9hZGRyZXNzKGFk ZHIpKSApCi0gICAgewotICAgICAgICB0aSA9ICZ2LT5hcmNoLnB2X3ZjcHUudHJhcF9jdHh0W1RS QVBfZ3BfZmF1bHRdOwotICAgICAgICB0Yi0+ZmxhZ3MgICAgICA9IFRCRl9FWENFUFRJT04gfCBU QkZfRVhDRVBUSU9OX0VSUkNPREU7Ci0gICAgICAgIHRiLT5lcnJvcl9jb2RlID0gMDsKLSAgICAg ICAgdGItPmNzICAgICAgICAgPSB0aS0+Y3M7Ci0gICAgICAgIHRiLT5laXAgICAgICAgID0gdGkt PmFkZHJlc3M7Ci0gICAgICAgIGlmICggVElfR0VUX0lGKHRpKSApCi0gICAgICAgICAgICB0Yi0+ ZmxhZ3MgfD0gVEJGX0lOVEVSUlVQVDsKLSAgICAgICAgcmV0dXJuIHRiOwotICAgIH0KLQotICAg IHYtPmFyY2gucHZfdmNwdS5jdHJscmVnWzJdID0gYWRkcjsKLSAgICBhcmNoX3NldF9jcjIodiwg YWRkcik7Ci0KLSAgICAvKiBSZS1zZXQgZXJyb3JfY29kZS51c2VyIGZsYWcgYXBwcm9wcmlhdGVs eSBmb3IgdGhlIGd1ZXN0LiAqLwotICAgIGVycm9yX2NvZGUgJj0gflBGRUNfdXNlcl9tb2RlOwot ICAgIGlmICggIWd1ZXN0X2tlcm5lbF9tb2RlKHYsIGd1ZXN0X2NwdV91c2VyX3JlZ3MoKSkgKQot ICAgICAgICBlcnJvcl9jb2RlIHw9IFBGRUNfdXNlcl9tb2RlOwotCi0gICAgdHJhY2VfcHZfcGFn ZV9mYXVsdChhZGRyLCBlcnJvcl9jb2RlKTsKLQotICAgIHRpID0gJnYtPmFyY2gucHZfdmNwdS50 cmFwX2N0eHRbVFJBUF9wYWdlX2ZhdWx0XTsKLSAgICB0Yi0+ZmxhZ3MgPSBUQkZfRVhDRVBUSU9O IHwgVEJGX0VYQ0VQVElPTl9FUlJDT0RFOwotICAgIHRiLT5lcnJvcl9jb2RlID0gZXJyb3JfY29k ZTsKLSAgICB0Yi0+Y3MgICAgICAgICA9IHRpLT5jczsKLSAgICB0Yi0+ZWlwICAgICAgICA9IHRp LT5hZGRyZXNzOwotICAgIGlmICggVElfR0VUX0lGKHRpKSApCi0gICAgICAgIHRiLT5mbGFncyB8 PSBUQkZfSU5URVJSVVBUOwotICAgIGlmICggdW5saWtlbHkobnVsbF90cmFwX2JvdW5jZSh2LCB0 YikpICkKLSAgICB7Ci0gICAgICAgIHByaW50aygiJXB2OiB1bmhhbmRsZWQgcGFnZSBmYXVsdCAo ZWM9JTA0WClcbiIsIHYsIGVycm9yX2NvZGUpOwotICAgICAgICBzaG93X3BhZ2Vfd2FsayhhZGRy KTsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KGVycm9yX2NvZGUgJiBQRkVDX3Jlc2VydmVk X2JpdCkgKQotICAgICAgICByZXNlcnZlZF9iaXRfcGFnZV9mYXVsdChhZGRyLCBndWVzdF9jcHVf dXNlcl9yZWdzKCkpOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbnQgaGFuZGxl X2dkdF9sZHRfbWFwcGluZ19mYXVsdCgKICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0 IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiB7CkBAIC0xNTY1LDE3ICsxNTU2LDIyIEBAIHN0YXRpYyBp bnQgaGFuZGxlX2dkdF9sZHRfbWFwcGluZ19mYXVsdCgKICAgICAgICAgfQogICAgICAgICBlbHNl CiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCB0cmFwX2JvdW5jZSAqdGI7Ci0KICAgICAg ICAgICAgIC8qIEluIGh5cGVydmlzb3IgbW9kZT8gTGVhdmUgaXQgdG8gdGhlICNQRiBoYW5kbGVy IHRvIGZpeCB1cC4gKi8KICAgICAgICAgICAgIGlmICggIWd1ZXN0X21vZGUocmVncykgKQogICAg ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgLyogSW4gZ3Vlc3QgbW9kZT8gUHJv cGFnYXRlIGZhdWx0IHRvIGd1ZXN0LCB3aXRoIGFkanVzdGVkICVjcjIuICovCi0gICAgICAgICAg ICB0YiA9IHByb3BhZ2F0ZV9wYWdlX2ZhdWx0KGN1cnItPmFyY2gucHZfdmNwdS5sZHRfYmFzZSAr IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVncy0+ZXJy b3JfY29kZSk7Ci0gICAgICAgICAgICBpZiAoIHRiICkKLSAgICAgICAgICAgICAgICB0Yi0+ZXJy b3JfY29kZSA9IChvZmZzZXQgJiB+KFg4Nl9YRUNfRVhUIHwgWDg2X1hFQ19JRFQpKSB8Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYODZfWEVDX1RJOworCisgICAgICAgICAgICAv KiBBY2Nlc3Mgd291bGQgaGF2ZSBiZWNvbWUgbm9uLWNhbm9uaWNhbD8gUGFzcyAjR1Bbc2VsXSBi YWNrLiAqLworICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghaXNfY2Fub25pY2FsX2FkZHJlc3Mo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2Jh c2UgKyBvZmZzZXQpKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDE2X3Qg ZWMgPSAob2Zmc2V0ICYgfihYODZfWEVDX0VYVCB8IFg4Nl9YRUNfSURUKSkgfCBYODZfWEVDX1RJ OworCisgICAgICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0 LCBlYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg LyogZWxzZSBwYXNzIHRoZSAjUEYgYmFjaywgd2l0aCBhZGp1c3RlZCAlY3IyLiAqLworICAgICAg ICAgICAgICAgIHB2X2luamVjdF9wYWdlX2ZhdWx0KHJlZ3MtPmVycm9yX2NvZGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmxkdF9iYXNl ICsgb2Zmc2V0KTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0xODU4LDcgKzE4NTQs MTAgQEAgdm9pZCBkb19wYWdlX2ZhdWx0KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogICAg ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BhZ2F0ZV9wYWdlX2ZhdWx0KGFkZHIs IHJlZ3MtPmVycm9yX2NvZGUpOworICAgIGlmICggdW5saWtlbHkocmVncy0+ZXJyb3JfY29kZSAm IFBGRUNfcmVzZXJ2ZWRfYml0KSApCisgICAgICAgIHJlc2VydmVkX2JpdF9wYWdlX2ZhdWx0KGFk ZHIsIHJlZ3MpOworCisgICAgcHZfaW5qZWN0X3BhZ2VfZmF1bHQocmVncy0+ZXJyb3JfY29kZSwg YWRkcik7CiB9CiAKIC8qCkBAIC0yNzg4LDcgKzI3ODcsNyBAQCBpbnQgcHZfZW11bF9jcHVpZCh1 bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsIHVuc2lnbmVkIGludCAqZWN4LAog ICAgICAgICBnb3RvIGZhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoIChfcmMgPSBjb3B5X2Zyb21fdXNlcigmX3gs ICh0eXBlICopX3B0ciwgc2l6ZW9mKF94KSkpICE9IDAgKSAgICAgICBcCiAgICAgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgICAgICBwcm9wYWdhdGVfcGFnZV9mYXVsdChfcHRyICsgc2l6ZW9mKF94KSAt IF9yYywgMCk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHZfaW5qZWN0X3BhZ2VfZmF1 bHQoMCwgX3B0ciArIHNpemVvZihfeCkgLSBfcmMpOyAgICAgICAgICAgICAgICAgICBcCiAgICAg ICAgIGdvdG8gc2tpcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAoZWlwKSArPSBzaXpl b2YoX3gpOyBfeDsgfSkKQEAgLTI5NTMsOCArMjk1Miw4IEBAIHN0YXRpYyBpbnQgZW11bGF0ZV9w cml2aWxlZ2VkX29wKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogICAgICAgICAgICAgaWYg KCAocmMgPSBjb3B5X3RvX3VzZXIoKHZvaWQgKilkYXRhX2Jhc2UgKyByZF9hZChlZGkpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEsIG9wX2J5dGVzKSkgIT0gMCAp CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJvcGFnYXRlX3BhZ2VfZmF1bHQoZGF0 YV9iYXNlICsgcmRfYWQoZWRpKSArIG9wX2J5dGVzIC0gcmMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUEZFQ193cml0ZV9hY2Nlc3MpOworICAgICAgICAgICAgICAgIHB2 X2luamVjdF9wYWdlX2ZhdWx0KFBGRUNfd3JpdGVfYWNjZXNzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGFfYmFzZSArIHJkX2FkKGVkaSkgKyBvcF9ieXRlcyAtIHJj KTsKICAgICAgICAgICAgICAgICByZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVkOwogICAgICAgICAg ICAgfQogICAgICAgICAgICAgd3JfYWQoZWRpLCByZWdzLT5lZGkgKyAoaW50KSgocmVncy0+ZWZs YWdzICYgWDg2X0VGTEFHU19ERikKQEAgLTI5NzEsOCArMjk3MCw4IEBAIHN0YXRpYyBpbnQgZW11 bGF0ZV9wcml2aWxlZ2VkX29wKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogICAgICAgICAg ICAgaWYgKCAocmMgPSBjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQgKilkYXRhX2Jhc2UgKyBy ZF9hZChlc2kpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9ieXRl cykpICE9IDAgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByb3BhZ2F0ZV9wYWdl X2ZhdWx0KGRhdGFfYmFzZSArIHJkX2FkKGVzaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArIG9wX2J5dGVzIC0gcmMsIDApOworICAgICAgICAgICAgICAgIHB2X2luamVj dF9wYWdlX2ZhdWx0KDAsIGRhdGFfYmFzZSArIHJkX2FkKGVzaSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArIG9wX2J5dGVzIC0gcmMpOwogICAgICAgICAgICAgICAgIHJl dHVybiBFWENSRVRfZmF1bHRfZml4ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBndWVz dF9pb193cml0ZShwb3J0LCBvcF9ieXRlcywgZGF0YSwgY3VycmQpOwpAQCAtMzUyOSw4ICszNTI4 LDggQEAgc3RhdGljIHZvaWQgZW11bGF0ZV9nYXRlX29wKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpy ZWdzKQogICAgICAgICAgICAgcmMgPSBfX3B1dF91c2VyKGl0ZW0sIHN0a3ApOyBcCiAgICAgICAg ICAgICBpZiAoIHJjICkgXAogICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgcHJvcGFn YXRlX3BhZ2VfZmF1bHQoKHVuc2lnbmVkIGxvbmcpKHN0a3AgKyAxKSAtIHJjLCBcCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZFQ193cml0ZV9hY2Nlc3MpOyBcCisgICAg ICAgICAgICAgICAgcHZfaW5qZWN0X3BhZ2VfZmF1bHQoUEZFQ193cml0ZV9hY2Nlc3MsIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykoc3RrcCAr IDEpIC0gcmMpOyBcCiAgICAgICAgICAgICAgICAgcmV0dXJuOyBcCiAgICAgICAgICAgICB9IFwK ICAgICAgICAgfSB3aGlsZSAoIDAgKQpAQCAtMzU5Nyw3ICszNTk2LDcgQEAgc3RhdGljIHZvaWQg ZW11bGF0ZV9nYXRlX29wKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogICAgICAgICAgICAg ICAgICAgICByYyA9IF9fZ2V0X3VzZXIocGFybSwgdXN0a3ApOwogICAgICAgICAgICAgICAgICAg ICBpZiAoIHJjICkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg ICAgcHJvcGFnYXRlX3BhZ2VfZmF1bHQoKHVuc2lnbmVkIGxvbmcpKHVzdGtwICsgMSkgLSByYywg MCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdl9pbmplY3RfcGFnZV9mYXVsdCgwLCAodW5z aWduZWQgbG9uZykodXN0a3AgKyAxKSAtIHJjKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBwdXNoKHBh cm0pOwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaCBiL3hlbi9pbmNs dWRlL2FzbS14ODYvZG9tYWluLmgKaW5kZXggZjZhNDBlYi4uMzljYzY1OCAxMDA2NDQKLS0tIGEv eGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2Rv bWFpbi5oCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGFzbS9odm0vZG9tYWluLmg+CiAjaW5j bHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CisjaW5jbHVkZSA8YXNtL3g4 Nl9lbXVsYXRlLmg+CiAjaW5jbHVkZSA8cHVibGljL3ZjcHUuaD4KICNpbmNsdWRlIDxwdWJsaWMv aHZtL2h2bV9pbmZvX3RhYmxlLmg+CiAKQEAgLTYzMiw2ICs2MzMsMzEgQEAgc3RhdGljIGlubGlu ZSB2b2lkIGZyZWVfdmNwdV9ndWVzdF9jb250ZXh0KHN0cnVjdCB2Y3B1X2d1ZXN0X2NvbnRleHQg KnZnYykKIHN0cnVjdCB2Y3B1X2h2bV9jb250ZXh0OwogaW50IGFyY2hfc2V0X2luZm9faHZtX2d1 ZXN0KHN0cnVjdCB2Y3B1ICp2LCBjb25zdCBzdHJ1Y3QgdmNwdV9odm1fY29udGV4dCAqY3R4KTsK IAordm9pZCBwdl9pbmplY3RfZXZlbnQoY29uc3Qgc3RydWN0IHg4Nl9ldmVudCAqZXZlbnQpOwor CitzdGF0aWMgaW5saW5lIHZvaWQgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbih1bnNpZ25lZCBpbnQg dmVjdG9yLCBpbnQgZXJyY29kZSkKK3sKKyAgICBjb25zdCBzdHJ1Y3QgeDg2X2V2ZW50IGV2ZW50 ID0geworICAgICAgICAudmVjdG9yID0gdmVjdG9yLAorICAgICAgICAudHlwZSA9IFg4Nl9FVkVO VFRZUEVfSFdfRVhDRVBUSU9OLAorICAgICAgICAuZXJyb3JfY29kZSA9IGVycmNvZGUsCisgICAg fTsKKworICAgIHB2X2luamVjdF9ldmVudCgmZXZlbnQpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgcHZfaW5qZWN0X3BhZ2VfZmF1bHQoaW50IGVycmNvZGUsIHVuc2lnbmVkIGxvbmcgY3IyKQor eworICAgIGNvbnN0IHN0cnVjdCB4ODZfZXZlbnQgZXZlbnQgPSB7CisgICAgICAgIC52ZWN0b3Ig PSBUUkFQX3BhZ2VfZmF1bHQsCisgICAgICAgIC50eXBlID0gWDg2X0VWRU5UVFlQRV9IV19FWENF UFRJT04sCisgICAgICAgIC5lcnJvcl9jb2RlID0gZXJyY29kZSwKKyAgICAgICAgLmNyMiA9IGNy MiwKKyAgICB9OworCisgICAgcHZfaW5qZWN0X2V2ZW50KCZldmVudCk7Cit9CisKICNlbmRpZiAv KiBfX0FTTV9ET01BSU5fSF9fICovCiAKIC8qCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20t eDg2L21tLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L21tLmgKaW5kZXggMWI0ZDFjMy4uYTE1MDI5 YyAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oCisrKyBiL3hlbi9pbmNsdWRl L2FzbS14ODYvbW0uaApAQCAtNTM5LDcgKzUzOSw2IEBAIGludCBuZXdfZ3Vlc3RfY3IzKHVuc2ln bmVkIGxvbmcgcGZuKTsKIHZvaWQgbWFrZV9jcjMoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxv bmcgbWZuKTsKIHZvaWQgdXBkYXRlX2NyMyhzdHJ1Y3QgdmNwdSAqdik7CiBpbnQgdmNwdV9kZXN0 cm95X3BhZ2V0YWJsZXMoc3RydWN0IHZjcHUgKik7Ci1zdHJ1Y3QgdHJhcF9ib3VuY2UgKnByb3Bh Z2F0ZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IGVycm9yX2NvZGUpOwogdm9p ZCAqZG9fcGFnZV93YWxrKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGFkZHIpOwogCiBp bnQgX19zeW5jX2xvY2FsX2V4ZWNzdGF0ZSh2b2lkKTsKLS0gCjIuMS40CgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==