From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v6 10/21] x86/cpu: Rework Intel masking/faulting setup Date: Fri, 8 Apr 2016 21:31:46 +0100 Message-ID: <1460147517-11706-11-git-send-email-andrew.cooper3@citrix.com> References: <1460147517-11706-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: <1460147517-11706-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 List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpcyBiZXN0IHJldmlld2VkIGFzIGl0cyBlbmQgcmVzdWx0IHJhdGhlciB0aGFu IGFzIGEgZGlmZiwgYXMgaXQKcmV3cml0ZXMgYWxtb3N0IGFsbCBvZiB0aGUgc2V0dXAuCgpPbiB0 aGUgQlNQLCBjcHVpZCBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGV2YWx1YXRlIHRoZSBwb3RlbnRp YWwgYXZhaWxhYmxlIHNldApvZiBtYXNraW5nIE1TUnMsIGFuZCB0aGV5IGFyZSB1bmNvbmRpdGlv bmFsbHkgcHJvYmVkLCBmaWxsaW5nIGluIHRoZQphdmFpbGFiaWxpdHkgaW5mb3JtYXRpb24gYW5k IGhhcmR3YXJlIGRlZmF1bHRzLiAgQSBzaWRlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQKcHJvYmVf aW50ZWxfY3B1aWRfZmF1bHRpbmcoKSBjYW4gbW92ZSB0byBiZWluZyBfX2luaXQuCgpUaGUgY29t bWFuZCBsaW5lIHBhcmFtZXRlcnMgYXJlIHRoZW4gY29tYmluZWQgd2l0aCB0aGUgaGFyZHdhcmUg ZGVmYXVsdHMgdG8KZnVydGhlciByZXN0cmljdCB0aGUgWGVuIGRlZmF1bHQgbWFza2luZyBsZXZl bC4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5j b20+ClJldmlld2VkLWJ5OiBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3VzZS5jb20+ClJldmlld2Vk LWJ5OiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+Ci0tLQp2 MjoKICogU3R5bGUgZml4ZXMuCiAqIFByb3ZpZGUgZXh0cmEgaW5mb3JtYXRpb24gaWYgb3B0X2Nw dV9pbmZvLgogKiBFeHRyYSBjb21tZW50IGluZGljYXRpbmcgdGhlIGV4cGVjdGVkIHVzZSBvZiBp bnRlbF9jdHh0X3N3aXRjaF9sZXZlbGxpbmcoKS4KdjM6CiAqIFN0eWxlIGZpeGVzLgogKiBBdm9p ZCBwcmludGluZyB0aGUgY3B1bWFzayBkZWZhdWx0cyBpZiBmYXVsdGluZyBpcyBhdmFpbGFibGUu CnY1OgogKiBUd2VhayBjb21tZW50cy4KLS0tCiB4ZW4vYXJjaC94ODYvY3B1L2ludGVsLmMgfCAy MzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmls ZSBjaGFuZ2VkLCAxNDkgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEveGVuL2FyY2gveDg2L2NwdS9pbnRlbC5jIGIveGVuL2FyY2gveDg2L2NwdS9pbnRlbC5jCmlu ZGV4IGFkMjIzNzUuLjZlMWZiYmIgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9jcHUvaW50ZWwu YworKysgYi94ZW4vYXJjaC94ODYvY3B1L2ludGVsLmMKQEAgLTE4LDExICsxOCwxOCBAQAogCiAj ZGVmaW5lIHNlbGVjdF9pZGxlX3JvdXRpbmUoeCkgKCh2b2lkKTApCiAKLXN0YXRpYyB1bnNpZ25l ZCBpbnQgcHJvYmVfaW50ZWxfY3B1aWRfZmF1bHRpbmcodm9pZCkKK3N0YXRpYyBib29sX3QgX19p bml0IHByb2JlX2ludGVsX2NwdWlkX2ZhdWx0aW5nKHZvaWQpCiB7CiAJdWludDY0X3QgeDsKLQly ZXR1cm4gIXJkbXNyX3NhZmUoTVNSX0lOVEVMX1BMQVRGT1JNX0lORk8sIHgpICYmCi0JCSh4ICYg TVNSX1BMQVRGT1JNX0lORk9fQ1BVSURfRkFVTFRJTkcpOworCisJaWYgKHJkbXNyX3NhZmUoTVNS X0lOVEVMX1BMQVRGT1JNX0lORk8sIHgpIHx8CisJICAgICEoeCAmIE1TUl9QTEFURk9STV9JTkZP X0NQVUlEX0ZBVUxUSU5HKSkKKwkJcmV0dXJuIDA7CisKKwlleHBlY3RlZF9sZXZlbGxpbmdfY2Fw IHw9IExDQVBfZmF1bHRpbmc7CisJbGV2ZWxsaW5nX2NhcHMgfD0gIExDQVBfZmF1bHRpbmc7CisJ X19zZXRfYml0KFg4Nl9GRUFUVVJFX0NQVUlEX0ZBVUxUSU5HLCBib290X2NwdV9kYXRhLng4Nl9j YXBhYmlsaXR5KTsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2xf dCwgY3B1aWRfZmF1bHRpbmdfZW5hYmxlZCk7CkBAIC00NCwzNiArNTEsNDAgQEAgdm9pZCBzZXRf Y3B1aWRfZmF1bHRpbmcoYm9vbF90IGVuYWJsZSkKIH0KIAogLyoKLSAqIG9wdF9jcHVpZF9tYXNr X2VjeC9lZHg6IGNwdWlkLjFbZWN4LCBlZHhdIGZlYXR1cmUgbWFzay4KLSAqIEZvciBleGFtcGxl LCBFODQwMFtJbnRlbCBDb3JlIDIgRHVvIFByb2Nlc3NvciBzZXJpZXNdIGVjeCA9IDB4MDAwOEUz RkQsCi0gKiBlZHggPSAweEJGRUJGQkZGIHdoZW4gZXhlY3V0aW5nIENQVUlELkVBWCA9IDEgbm9y bWFsbHkuIElmIHlvdSB3YW50IHRvCi0gKiAncmV2IGRvd24nIHRvIEU4NDAwLCB5b3UgY2FuIHNl dCB0aGVzZSB2YWx1ZXMgaW4gdGhlc2UgWGVuIGJvb3QgcGFyYW1ldGVycy4KKyAqIFNldCBjYXBz IGluIGV4cGVjdGVkX2xldmVsbGluZ19jYXAsIHByb2JlIGEgc3BlY2lmaWMgbWFza2luZyBNU1Is IGFuZCBzZXQKKyAqIGNhcHMgaW4gbGV2ZWxsaW5nX2NhcHMgaWYgaXQgaXMgZm91bmQsIG9yIGNs b2JiZXIgdGhlIE1TUiBpbmRleCBpZiBtaXNzaW5nLgorICogSWYgcHJlc2V0LCByZWFkcyB0aGUg ZGVmYXVsdCB2YWx1ZSBpbnRvIG1zcl92YWwuCiAgKi8KLXN0YXRpYyB2b2lkIHNldF9jcHVpZG1h c2soY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIHVpbnQ2NF90IF9faW5pdCBf cHJvYmVfbWFza19tc3IodW5zaWduZWQgaW50ICptc3IsIHVpbnQ2NF90IGNhcHMpCiB7Ci0Jc3Rh dGljIHVuc2lnbmVkIGludCBtc3JfYmFzaWMsIG1zcl9leHQsIG1zcl94c2F2ZTsKLQlzdGF0aWMg ZW51bSB7IG5vdF9wYXJzZWQsIG5vX21hc2ssIHNldF9tYXNrIH0gc3RhdHVzOwotCXU2NCBtc3Jf dmFsOworCXVpbnQ2NF90IHZhbCA9IDA7CiAKLQlpZiAoc3RhdHVzID09IG5vX21hc2spCi0JCXJl dHVybjsKKwlleHBlY3RlZF9sZXZlbGxpbmdfY2FwIHw9IGNhcHM7CiAKLQlpZiAoc3RhdHVzID09 IHNldF9tYXNrKQotCQlnb3RvIHNldG1hc2s7CisJaWYgKHJkbXNyX3NhZmUoKm1zciwgdmFsKSB8 fCB3cm1zcl9zYWZlKCptc3IsIHZhbCkpCisJCSptc3IgPSAwOworCWVsc2UKKwkJbGV2ZWxsaW5n X2NhcHMgfD0gY2FwczsKIAotCUFTU0VSVCgoc3RhdHVzID09IG5vdF9wYXJzZWQpICYmIChjID09 ICZib290X2NwdV9kYXRhKSk7Ci0Jc3RhdHVzID0gbm9fbWFzazsKKwlyZXR1cm4gdmFsOworfQog Ci0JaWYgKCF+KG9wdF9jcHVpZF9tYXNrX2VjeCAmIG9wdF9jcHVpZF9tYXNrX2VkeCAmCi0JICAg ICAgIG9wdF9jcHVpZF9tYXNrX2V4dF9lY3ggJiBvcHRfY3B1aWRfbWFza19leHRfZWR4ICYKLQkg ICAgICAgb3B0X2NwdWlkX21hc2tfeHNhdmVfZWF4KSkKLQkJcmV0dXJuOworLyogSW5kaWNlcyBv ZiB0aGUgbWFza2luZyBNU1JzLCBvciAwIGlmIHVuYXZhaWxhYmxlLiAqLworc3RhdGljIHVuc2ln bmVkIGludCBfX3JlYWRfbW9zdGx5IG1zcl9iYXNpYywgX19yZWFkX21vc3RseSBtc3JfZXh0LAor CV9fcmVhZF9tb3N0bHkgbXNyX3hzYXZlOworCisvKgorICogUHJvYmUgZm9yIHRoZSBleGlzdGFu Y2Ugb2YgdGhlIGV4cGVjdGVkIG1hc2tpbmcgTVNScy4gIFRoZXkgbWlnaHQgZWFzaWx5CisgKiBu b3QgYmUgYXZhaWxhYmxlIGlmIFhlbiBpcyBydW5uaW5nIHZpcnR1YWxpc2VkLgorICovCitzdGF0 aWMgdm9pZCBfX2luaXQgcHJvYmVfbWFza2luZ19tc3JzKHZvaWQpCit7CisJY29uc3Qgc3RydWN0 IGNwdWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CisJdW5zaWduZWQgaW50IGV4cF9tc3Jf YmFzaWMsIGV4cF9tc3JfZXh0LCBleHBfbXNyX3hzYXZlOwogCiAJLyogT25seSBmYW1pbHkgNiBz dXBwb3J0cyB0aGlzIGZlYXR1cmUuICovCi0JaWYgKGMtPng4NiAhPSA2KSB7Ci0JCXByaW50aygi Tm8gQ1BVSUQgZmVhdHVyZSBtYXNraW5nIHN1cHBvcnQgYXZhaWxhYmxlXG4iKTsKKwlpZiAoYy0+ eDg2ICE9IDYpCiAJCXJldHVybjsKLQl9CiAKIAlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgewogCWNh c2UgMHgxNzogLyogWW9ya2ZpZWxkLCBXb2xmZGFsZSwgUGVucnluLCBIYXJwZXJ0b3duKERQKSAq LwpAQCAtMTAwLDU5ICsxMTEsMTIxIEBAIHN0YXRpYyB2b2lkIHNldF9jcHVpZG1hc2soY29uc3Qg c3RydWN0IGNwdWluZm9feDg2ICpjKQogCQlicmVhazsKIAl9CiAKLQlzdGF0dXMgPSBzZXRfbWFz azsKKwlleHBfbXNyX2Jhc2ljID0gbXNyX2Jhc2ljOworCWV4cF9tc3JfZXh0ICAgPSBtc3JfZXh0 OworCWV4cF9tc3JfeHNhdmUgPSBtc3JfeHNhdmU7CiAKLQlpZiAofihvcHRfY3B1aWRfbWFza19l Y3ggJiBvcHRfY3B1aWRfbWFza19lZHgpKSB7Ci0JCWlmIChtc3JfYmFzaWMpCi0JCQlwcmludGso IldyaXRpbmcgQ1BVSUQgZmVhdHVyZSBtYXNrIGVjeDplZHggLT4gJTA4eDolMDh4XG4iLAotCQkJ ICAgICAgIG9wdF9jcHVpZF9tYXNrX2VjeCwgb3B0X2NwdWlkX21hc2tfZWR4KTsKLQkJZWxzZQot CQkJcHJpbnRrKCJObyBDUFVJRCBmZWF0dXJlIG1hc2sgYXZhaWxhYmxlXG4iKTsKLQl9Ci0JZWxz ZQotCQltc3JfYmFzaWMgPSAwOwotCi0JaWYgKH4ob3B0X2NwdWlkX21hc2tfZXh0X2VjeCAmIG9w dF9jcHVpZF9tYXNrX2V4dF9lZHgpKSB7Ci0JCWlmIChtc3JfZXh0KQotCQkJcHJpbnRrKCJXcml0 aW5nIENQVUlEIGV4dGVuZGVkIGZlYXR1cmUgbWFzayBlY3g6ZWR4IC0+ICUwOHg6JTA4eFxuIiwK LQkJCSAgICAgICBvcHRfY3B1aWRfbWFza19leHRfZWN4LCBvcHRfY3B1aWRfbWFza19leHRfZWR4 KTsKLQkJZWxzZQotCQkJcHJpbnRrKCJObyBDUFVJRCBleHRlbmRlZCBmZWF0dXJlIG1hc2sgYXZh aWxhYmxlXG4iKTsKLQl9Ci0JZWxzZQotCQltc3JfZXh0ID0gMDsKLQotCWlmICh+b3B0X2NwdWlk X21hc2tfeHNhdmVfZWF4KSB7Ci0JCWlmIChtc3JfeHNhdmUpCi0JCQlwcmludGsoIldyaXRpbmcg Q1BVSUQgeHNhdmUgZmVhdHVyZSBtYXNrIGVheCAtPiAlMDh4XG4iLAotCQkJICAgICAgIG9wdF9j cHVpZF9tYXNrX3hzYXZlX2VheCk7Ci0JCWVsc2UKLQkJCXByaW50aygiTm8gQ1BVSUQgeHNhdmUg ZmVhdHVyZSBtYXNrIGF2YWlsYWJsZVxuIik7CisJaWYgKG1zcl9iYXNpYykKKwkJY3B1aWRtYXNr X2RlZmF1bHRzLl8xY2QgPSBfcHJvYmVfbWFza19tc3IoJm1zcl9iYXNpYywgTENBUF8xY2QpOwor CisJaWYgKG1zcl9leHQpCisJCWNwdWlkbWFza19kZWZhdWx0cy5lMWNkID0gX3Byb2JlX21hc2tf bXNyKCZtc3JfZXh0LCBMQ0FQX2UxY2QpOworCisJaWYgKG1zcl94c2F2ZSkKKwkJY3B1aWRtYXNr X2RlZmF1bHRzLkRhMSA9IF9wcm9iZV9tYXNrX21zcigmbXNyX3hzYXZlLCBMQ0FQX0RhMSk7CisK KwkvKgorCSAqIERvbid0IGJvdGhlciB3YXJuaW5nIGFib3V0IGEgbWlzbWF0Y2ggaWYgdmlydHVh bGlzZWQuICBUaGVzZSBNU1JzCisJICogYXJlIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBhbG1vc3Qg bmV2ZXIgdmlydHVhbGlzZWQuCisJICovCisJaWYgKChleHBlY3RlZF9sZXZlbGxpbmdfY2FwID09 IGxldmVsbGluZ19jYXBzKSB8fAorCSAgICBjcHVfaGFzX2h5cGVydmlzb3IpCisJCXJldHVybjsK KworCXByaW50ayhYRU5MT0dfV0FSTklORyAiTWlzbWF0Y2ggYmV0d2VlbiBleHBlY3RlZCAoJSN4 KSAiCisJICAgICAgICJhbmQgcmVhbCAoJSN4KSBsZXZlbGxpbmcgY2FwczogbWlzc2luZyAlI3hc biIsCisJICAgICAgIGV4cGVjdGVkX2xldmVsbGluZ19jYXAsIGxldmVsbGluZ19jYXBzLAorCSAg ICAgICAoZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCBeIGxldmVsbGluZ19jYXBzKSAmIGxldmVsbGlu Z19jYXBzKTsKKwlwcmludGsoWEVOTE9HX1dBUk5JTkcgIkZhbSAlI3gsIG1vZGVsICUjeCBleHBl Y3RlZCAoJSN4LyUjeC8lI3gpLCAiCisJICAgICAgICJnb3QgKCUjeC8lI3gvJSN4KVxuIiwgYy0+ eDg2LCBjLT54ODZfbW9kZWwsCisJICAgICAgIGV4cF9tc3JfYmFzaWMsIGV4cF9tc3JfZXh0LCBl eHBfbXNyX3hzYXZlLAorCSAgICAgICBtc3JfYmFzaWMsIG1zcl9leHQsIG1zcl94c2F2ZSk7CisJ cHJpbnRrKFhFTkxPR19XQVJOSU5HCisJICAgICAgICJJZiBub3QgcnVubmluZyB2aXJ0dWFsaXNl ZCwgcGxlYXNlIHJlcG9ydCBhIGJ1Z1xuIik7Cit9CisKKy8qCisgKiBDb250ZXh0IHN3aXRjaCBs ZXZlbGxpbmcgc3RhdGUgdG8gdGhlIG5leHQgZG9tYWluLiAgQSBwYXJhbWV0ZXIgb2YgTlVMTCBp cworICogdXNlZCB0byBjb250ZXh0IHN3aXRjaCB0byB0aGUgZGVmYXVsdCBob3N0IHN0YXRlIChi eSB0aGUgY3B1IGJyaW5ndXAtY29kZSwKKyAqIGNyYXNoIHBhdGgsIGV0YykuCisgKi8KK3N0YXRp YyB2b2lkIGludGVsX2N0eHRfc3dpdGNoX2xldmVsbGluZyhjb25zdCBzdHJ1Y3QgZG9tYWluICpu ZXh0ZCkKK3sKKwlzdHJ1Y3QgY3B1aWRtYXNrcyAqdGhlc2VfbWFza3MgPSAmdGhpc19jcHUoY3B1 aWRtYXNrcyk7CisJY29uc3Qgc3RydWN0IGNwdWlkbWFza3MgKm1hc2tzID0gJmNwdWlkbWFza19k ZWZhdWx0czsKKworI2RlZmluZSBMQVpZKG1zciwgZmllbGQpCQkJCQkJXAorCSh7CQkJCQkJCQlc CisJCWlmICh1bmxpa2VseSh0aGVzZV9tYXNrcy0+ZmllbGQgIT0gbWFza3MtPmZpZWxkKSAmJglc CisJCSAgICAobXNyKSkJCQkJCQlcCisJCXsJCQkJCQkJXAorCQkJd3Jtc3JsKChtc3IpLCBtYXNr cy0+ZmllbGQpOwkJCVwKKwkJCXRoZXNlX21hc2tzLT5maWVsZCA9IG1hc2tzLT5maWVsZDsJCVwK KwkJfQkJCQkJCQlcCisJfSkKKworCUxBWlkobXNyX2Jhc2ljLCBfMWNkKTsKKwlMQVpZKG1zcl9l eHQsICAgZTFjZCk7CisJTEFaWShtc3JfeHNhdmUsIERhMSk7CisKKyN1bmRlZiBMQVpZCit9CisK Ky8qCisgKiBvcHRfY3B1aWRfbWFza19lY3gvZWR4OiBjcHVpZC4xW2VjeCwgZWR4XSBmZWF0dXJl IG1hc2suCisgKiBGb3IgZXhhbXBsZSwgRTg0MDBbSW50ZWwgQ29yZSAyIER1byBQcm9jZXNzb3Ig c2VyaWVzXSBlY3ggPSAweDAwMDhFM0ZELAorICogZWR4ID0gMHhCRkVCRkJGRiB3aGVuIGV4ZWN1 dGluZyBDUFVJRC5FQVggPSAxIG5vcm1hbGx5LiBJZiB5b3Ugd2FudCB0bworICogJ3JldiBkb3du JyB0byBFODQwMCwgeW91IGNhbiBzZXQgdGhlc2UgdmFsdWVzIGluIHRoZXNlIFhlbiBib290IHBh cmFtZXRlcnMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBub2lubGluZSBpbnRlbF9pbml0X2xl dmVsbGluZyh2b2lkKQoreworCWlmICghcHJvYmVfaW50ZWxfY3B1aWRfZmF1bHRpbmcoKSkKKwkJ cHJvYmVfbWFza2luZ19tc3JzKCk7CisKKwlpZiAobXNyX2Jhc2ljKSB7CisJCXVpbnQzMl90IGVj eCwgZWR4LCB0bXA7CisKKwkJY3B1aWQoMHgwMDAwMDAwMSwgJnRtcCwgJnRtcCwgJmVjeCwgJmVk eCk7CisKKwkJZWN4ICY9IG9wdF9jcHVpZF9tYXNrX2VjeDsKKwkJZWR4ICY9IG9wdF9jcHVpZF9t YXNrX2VkeDsKKworCQljcHVpZG1hc2tfZGVmYXVsdHMuXzFjZCAmPSAoKHU2NCllZHggPDwgMzIp IHwgZWN4OwogCX0KLQllbHNlCi0JCW1zcl94c2F2ZSA9IDA7Ci0KLSBzZXRtYXNrOgotCWlmICht c3JfYmFzaWMgJiYKLQkgICAgd3Jtc3Jfc2FmZShtc3JfYmFzaWMsCi0JCSAgICAgICAoKHU2NClv cHRfY3B1aWRfbWFza19lZHggPDwgMzIpIHwgb3B0X2NwdWlkX21hc2tfZWN4KSl7Ci0JCW1zcl9i YXNpYyA9IDA7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCBmZWF0dXJlIG1hc2tcbiIp OworCisJaWYgKG1zcl9leHQpIHsKKwkJdWludDMyX3QgZWN4LCBlZHgsIHRtcDsKKworCQljcHVp ZCgweDgwMDAwMDAxLCAmdG1wLCAmdG1wLCAmZWN4LCAmZWR4KTsKKworCQllY3ggJj0gb3B0X2Nw dWlkX21hc2tfZXh0X2VjeDsKKwkJZWR4ICY9IG9wdF9jcHVpZF9tYXNrX2V4dF9lZHg7CisKKwkJ Y3B1aWRtYXNrX2RlZmF1bHRzLmUxY2QgJj0gKCh1NjQpZWR4IDw8IDMyKSB8IGVjeDsKIAl9CiAK LQlpZiAobXNyX2V4dCAmJgotCSAgICB3cm1zcl9zYWZlKG1zcl9leHQsCi0JCSAgICAgICAoKHU2 NClvcHRfY3B1aWRfbWFza19leHRfZWR4IDw8IDMyKSB8IG9wdF9jcHVpZF9tYXNrX2V4dF9lY3gp KXsKLQkJbXNyX2V4dCA9IDA7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCBleHRlbmRl ZCBmZWF0dXJlIG1hc2tcbiIpOworCWlmIChtc3JfeHNhdmUpIHsKKwkJdWludDMyX3QgZWF4LCB0 bXA7CisKKwkJY3B1aWRfY291bnQoMHgwMDAwMDAwZCwgMSwgJmVheCwgJnRtcCwgJnRtcCwgJnRt cCk7CisKKwkJZWF4ICY9IG9wdF9jcHVpZF9tYXNrX3hzYXZlX2VheDsKKworCQljcHVpZG1hc2tf ZGVmYXVsdHMuRGExICY9ICh+MFVMTCA8PCAzMikgfCBlYXg7CiAJfQogCi0JaWYgKG1zcl94c2F2 ZSAmJgotCSAgICAocmRtc3Jfc2FmZShtc3JfeHNhdmUsIG1zcl92YWwpIHx8Ci0JICAgICB3cm1z cl9zYWZlKG1zcl94c2F2ZSwKLQkJCShtc3JfdmFsICYgKH4wVUxMIDw8IDMyKSkgfCBvcHRfY3B1 aWRfbWFza194c2F2ZV9lYXgpKSl7Ci0JCW1zcl94c2F2ZSA9IDA7Ci0JCXByaW50aygiRmFpbGVk IHRvIHNldCBDUFVJRCB4c2F2ZSBmZWF0dXJlIG1hc2tcbiIpOworCWlmIChvcHRfY3B1X2luZm8p IHsKKwkJcHJpbnRrKFhFTkxPR19JTkZPICJMZXZlbGxpbmcgY2FwczogJSN4XG4iLCBsZXZlbGxp bmdfY2Fwcyk7CisKKwkJaWYgKCFjcHVfaGFzX2NwdWlkX2ZhdWx0aW5nKQorCQkJcHJpbnRrKFhF TkxPR19JTkZPCisJCQkgICAgICAgIk1TUiBkZWZhdWx0czogMWQgMHglMDh4LCAxYyAweCUwOHgs IGUxZCAweCUwOHgsICIKKwkJCSAgICAgICAiZTFjIDB4JTA4eCwgRGExIDB4JTA4eFxuIiwKKwkJ CSAgICAgICAodWludDMyX3QpKGNwdWlkbWFza19kZWZhdWx0cy5fMWNkID4+IDMyKSwKKwkJCSAg ICAgICAodWludDMyX3QpY3B1aWRtYXNrX2RlZmF1bHRzLl8xY2QsCisJCQkgICAgICAgKHVpbnQz Ml90KShjcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCA+PiAzMiksCisJCQkgICAgICAgKHVpbnQzMl90 KWNwdWlkbWFza19kZWZhdWx0cy5lMWNkLAorCQkJICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tf ZGVmYXVsdHMuRGExKTsKIAl9CiB9CiAKQEAgLTE5MCwyMiArMjYzLDEzIEBAIHN0YXRpYyB2b2lk IGVhcmx5X2luaXRfaW50ZWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQogCSAgICAoYm9vdF9jcHVf ZGF0YS54ODZfbWFzayA9PSAzIHx8IGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPT0gNCkpCiAJCXBh ZGRyX2JpdHMgPSAzNjsKIAotCWlmIChjID09ICZib290X2NwdV9kYXRhICYmIGMtPng4NiA9PSA2 KSB7Ci0JCWlmIChwcm9iZV9pbnRlbF9jcHVpZF9mYXVsdGluZygpKQotCQkJX19zZXRfYml0KFg4 Nl9GRUFUVVJFX0NQVUlEX0ZBVUxUSU5HLAotCQkJCSAgYy0+eDg2X2NhcGFiaWxpdHkpOwotCX0g ZWxzZSBpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NQVUlEX0ZBVUxUSU5HKSkgewotCQlC VUdfT04oIXByb2JlX2ludGVsX2NwdWlkX2ZhdWx0aW5nKCkpOworCWlmIChjID09ICZib290X2Nw dV9kYXRhKQorCQlpbnRlbF9pbml0X2xldmVsbGluZygpOworCisJaWYgKHRlc3RfYml0KFg4Nl9G RUFUVVJFX0NQVUlEX0ZBVUxUSU5HLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KSkKIAkJ X19zZXRfYml0KFg4Nl9GRUFUVVJFX0NQVUlEX0ZBVUxUSU5HLCBjLT54ODZfY2FwYWJpbGl0eSk7 Ci0JfQogCi0JaWYgKCFjcHVfaGFzX2NwdWlkX2ZhdWx0aW5nKQotCQlzZXRfY3B1aWRtYXNrKGMp OwotCWVsc2UgaWYgKChjID09ICZib290X2NwdV9kYXRhKSAmJgotCQkgKH4ob3B0X2NwdWlkX21h c2tfZWN4ICYgb3B0X2NwdWlkX21hc2tfZWR4ICYKLQkJICAgIG9wdF9jcHVpZF9tYXNrX2V4dF9l Y3ggJiBvcHRfY3B1aWRfbWFza19leHRfZWR4ICYKLQkJICAgIG9wdF9jcHVpZF9tYXNrX3hzYXZl X2VheCkpKQotCQlwcmludGsoIk5vIENQVUlEIGZlYXR1cmUgbWFza2luZyBzdXBwb3J0IGF2YWls YWJsZVxuIik7CisJaW50ZWxfY3R4dF9zd2l0Y2hfbGV2ZWxsaW5nKE5VTEwpOwogfQogCiAvKgot LSAKMi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=