From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v5 10/21] x86/cpu: Rework Intel masking/faulting setup Date: Thu, 7 Apr 2016 12:57:15 +0100 Message-ID: <1460030246-30153-11-git-send-email-andrew.cooper3@citrix.com> References: <1460030246-30153-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: <1460030246-30153-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+Ci0tLQp2MjoK ICogU3R5bGUgZml4ZXMuCiAqIFByb3ZpZGUgZXh0cmEgaW5mb3JtYXRpb24gaWYgb3B0X2NwdV9p bmZvLgogKiBFeHRyYSBjb21tZW50IGluZGljYXRpbmcgdGhlIGV4cGVjdGVkIHVzZSBvZiBpbnRl bF9jdHh0X3N3aXRjaF9sZXZlbGxpbmcoKS4KdjM6CiAqIFN0eWxlIGZpeGVzLgogKiBBdm9pZCBw cmludGluZyB0aGUgY3B1bWFzayBkZWZhdWx0cyBpZiBmYXVsdGluZyBpcyBhdmFpbGFibGUuCnY1 OgogKiBUd2VhayBjb21tZW50cy4KLS0tCiB4ZW4vYXJjaC94ODYvY3B1L2ludGVsLmMgfCAyMzQg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBj aGFuZ2VkLCAxNDkgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv eGVuL2FyY2gveDg2L2NwdS9pbnRlbC5jIGIveGVuL2FyY2gveDg2L2NwdS9pbnRlbC5jCmluZGV4 IGFkMjIzNzUuLjZlMWZiYmIgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9jcHUvaW50ZWwuYwor KysgYi94ZW4vYXJjaC94ODYvY3B1L2ludGVsLmMKQEAgLTE4LDExICsxOCwxOCBAQAogCiAjZGVm aW5lIHNlbGVjdF9pZGxlX3JvdXRpbmUoeCkgKCh2b2lkKTApCiAKLXN0YXRpYyB1bnNpZ25lZCBp bnQgcHJvYmVfaW50ZWxfY3B1aWRfZmF1bHRpbmcodm9pZCkKK3N0YXRpYyBib29sX3QgX19pbml0 IHByb2JlX2ludGVsX2NwdWlkX2ZhdWx0aW5nKHZvaWQpCiB7CiAJdWludDY0X3QgeDsKLQlyZXR1 cm4gIXJkbXNyX3NhZmUoTVNSX0lOVEVMX1BMQVRGT1JNX0lORk8sIHgpICYmCi0JCSh4ICYgTVNS X1BMQVRGT1JNX0lORk9fQ1BVSURfRkFVTFRJTkcpOworCisJaWYgKHJkbXNyX3NhZmUoTVNSX0lO VEVMX1BMQVRGT1JNX0lORk8sIHgpIHx8CisJICAgICEoeCAmIE1TUl9QTEFURk9STV9JTkZPX0NQ VUlEX0ZBVUxUSU5HKSkKKwkJcmV0dXJuIDA7CisKKwlleHBlY3RlZF9sZXZlbGxpbmdfY2FwIHw9 IExDQVBfZmF1bHRpbmc7CisJbGV2ZWxsaW5nX2NhcHMgfD0gIExDQVBfZmF1bHRpbmc7CisJX19z ZXRfYml0KFg4Nl9GRUFUVVJFX0NQVUlEX0ZBVUxUSU5HLCBib290X2NwdV9kYXRhLng4Nl9jYXBh YmlsaXR5KTsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2xfdCwg Y3B1aWRfZmF1bHRpbmdfZW5hYmxlZCk7CkBAIC00NCwzNiArNTEsNDAgQEAgdm9pZCBzZXRfY3B1 aWRfZmF1bHRpbmcoYm9vbF90IGVuYWJsZSkKIH0KIAogLyoKLSAqIG9wdF9jcHVpZF9tYXNrX2Vj eC9lZHg6IGNwdWlkLjFbZWN4LCBlZHhdIGZlYXR1cmUgbWFzay4KLSAqIEZvciBleGFtcGxlLCBF ODQwMFtJbnRlbCBDb3JlIDIgRHVvIFByb2Nlc3NvciBzZXJpZXNdIGVjeCA9IDB4MDAwOEUzRkQs Ci0gKiBlZHggPSAweEJGRUJGQkZGIHdoZW4gZXhlY3V0aW5nIENQVUlELkVBWCA9IDEgbm9ybWFs bHkuIElmIHlvdSB3YW50IHRvCi0gKiAncmV2IGRvd24nIHRvIEU4NDAwLCB5b3UgY2FuIHNldCB0 aGVzZSB2YWx1ZXMgaW4gdGhlc2UgWGVuIGJvb3QgcGFyYW1ldGVycy4KKyAqIFNldCBjYXBzIGlu IGV4cGVjdGVkX2xldmVsbGluZ19jYXAsIHByb2JlIGEgc3BlY2lmaWMgbWFza2luZyBNU1IsIGFu ZCBzZXQKKyAqIGNhcHMgaW4gbGV2ZWxsaW5nX2NhcHMgaWYgaXQgaXMgZm91bmQsIG9yIGNsb2Ji ZXIgdGhlIE1TUiBpbmRleCBpZiBtaXNzaW5nLgorICogSWYgcHJlc2V0LCByZWFkcyB0aGUgZGVm YXVsdCB2YWx1ZSBpbnRvIG1zcl92YWwuCiAgKi8KLXN0YXRpYyB2b2lkIHNldF9jcHVpZG1hc2so Y29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIHVpbnQ2NF90IF9faW5pdCBfcHJv YmVfbWFza19tc3IodW5zaWduZWQgaW50ICptc3IsIHVpbnQ2NF90IGNhcHMpCiB7Ci0Jc3RhdGlj IHVuc2lnbmVkIGludCBtc3JfYmFzaWMsIG1zcl9leHQsIG1zcl94c2F2ZTsKLQlzdGF0aWMgZW51 bSB7IG5vdF9wYXJzZWQsIG5vX21hc2ssIHNldF9tYXNrIH0gc3RhdHVzOwotCXU2NCBtc3JfdmFs OworCXVpbnQ2NF90IHZhbCA9IDA7CiAKLQlpZiAoc3RhdHVzID09IG5vX21hc2spCi0JCXJldHVy bjsKKwlleHBlY3RlZF9sZXZlbGxpbmdfY2FwIHw9IGNhcHM7CiAKLQlpZiAoc3RhdHVzID09IHNl dF9tYXNrKQotCQlnb3RvIHNldG1hc2s7CisJaWYgKHJkbXNyX3NhZmUoKm1zciwgdmFsKSB8fCB3 cm1zcl9zYWZlKCptc3IsIHZhbCkpCisJCSptc3IgPSAwOworCWVsc2UKKwkJbGV2ZWxsaW5nX2Nh cHMgfD0gY2FwczsKIAotCUFTU0VSVCgoc3RhdHVzID09IG5vdF9wYXJzZWQpICYmIChjID09ICZi b290X2NwdV9kYXRhKSk7Ci0Jc3RhdHVzID0gbm9fbWFzazsKKwlyZXR1cm4gdmFsOworfQogCi0J aWYgKCF+KG9wdF9jcHVpZF9tYXNrX2VjeCAmIG9wdF9jcHVpZF9tYXNrX2VkeCAmCi0JICAgICAg IG9wdF9jcHVpZF9tYXNrX2V4dF9lY3ggJiBvcHRfY3B1aWRfbWFza19leHRfZWR4ICYKLQkgICAg ICAgb3B0X2NwdWlkX21hc2tfeHNhdmVfZWF4KSkKLQkJcmV0dXJuOworLyogSW5kaWNlcyBvZiB0 aGUgbWFza2luZyBNU1JzLCBvciAwIGlmIHVuYXZhaWxhYmxlLiAqLworc3RhdGljIHVuc2lnbmVk IGludCBfX3JlYWRfbW9zdGx5IG1zcl9iYXNpYywgX19yZWFkX21vc3RseSBtc3JfZXh0LAorCV9f cmVhZF9tb3N0bHkgbXNyX3hzYXZlOworCisvKgorICogUHJvYmUgZm9yIHRoZSBleGlzdGFuY2Ug b2YgdGhlIGV4cGVjdGVkIG1hc2tpbmcgTVNScy4gIFRoZXkgbWlnaHQgZWFzaWx5CisgKiBub3Qg YmUgYXZhaWxhYmxlIGlmIFhlbiBpcyBydW5uaW5nIHZpcnR1YWxpc2VkLgorICovCitzdGF0aWMg dm9pZCBfX2luaXQgcHJvYmVfbWFza2luZ19tc3JzKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IGNw dWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CisJdW5zaWduZWQgaW50IGV4cF9tc3JfYmFz aWMsIGV4cF9tc3JfZXh0LCBleHBfbXNyX3hzYXZlOwogCiAJLyogT25seSBmYW1pbHkgNiBzdXBw b3J0cyB0aGlzIGZlYXR1cmUuICovCi0JaWYgKGMtPng4NiAhPSA2KSB7Ci0JCXByaW50aygiTm8g Q1BVSUQgZmVhdHVyZSBtYXNraW5nIHN1cHBvcnQgYXZhaWxhYmxlXG4iKTsKKwlpZiAoYy0+eDg2 ICE9IDYpCiAJCXJldHVybjsKLQl9CiAKIAlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgewogCWNhc2Ug MHgxNzogLyogWW9ya2ZpZWxkLCBXb2xmZGFsZSwgUGVucnluLCBIYXJwZXJ0b3duKERQKSAqLwpA QCAtMTAwLDU5ICsxMTEsMTIxIEBAIHN0YXRpYyB2b2lkIHNldF9jcHVpZG1hc2soY29uc3Qgc3Ry dWN0IGNwdWluZm9feDg2ICpjKQogCQlicmVhazsKIAl9CiAKLQlzdGF0dXMgPSBzZXRfbWFzazsK KwlleHBfbXNyX2Jhc2ljID0gbXNyX2Jhc2ljOworCWV4cF9tc3JfZXh0ICAgPSBtc3JfZXh0Owor CWV4cF9tc3JfeHNhdmUgPSBtc3JfeHNhdmU7CiAKLQlpZiAofihvcHRfY3B1aWRfbWFza19lY3gg JiBvcHRfY3B1aWRfbWFza19lZHgpKSB7Ci0JCWlmIChtc3JfYmFzaWMpCi0JCQlwcmludGsoIldy aXRpbmcgQ1BVSUQgZmVhdHVyZSBtYXNrIGVjeDplZHggLT4gJTA4eDolMDh4XG4iLAotCQkJICAg ICAgIG9wdF9jcHVpZF9tYXNrX2VjeCwgb3B0X2NwdWlkX21hc2tfZWR4KTsKLQkJZWxzZQotCQkJ cHJpbnRrKCJObyBDUFVJRCBmZWF0dXJlIG1hc2sgYXZhaWxhYmxlXG4iKTsKLQl9Ci0JZWxzZQot CQltc3JfYmFzaWMgPSAwOwotCi0JaWYgKH4ob3B0X2NwdWlkX21hc2tfZXh0X2VjeCAmIG9wdF9j cHVpZF9tYXNrX2V4dF9lZHgpKSB7Ci0JCWlmIChtc3JfZXh0KQotCQkJcHJpbnRrKCJXcml0aW5n IENQVUlEIGV4dGVuZGVkIGZlYXR1cmUgbWFzayBlY3g6ZWR4IC0+ICUwOHg6JTA4eFxuIiwKLQkJ CSAgICAgICBvcHRfY3B1aWRfbWFza19leHRfZWN4LCBvcHRfY3B1aWRfbWFza19leHRfZWR4KTsK LQkJZWxzZQotCQkJcHJpbnRrKCJObyBDUFVJRCBleHRlbmRlZCBmZWF0dXJlIG1hc2sgYXZhaWxh YmxlXG4iKTsKLQl9Ci0JZWxzZQotCQltc3JfZXh0ID0gMDsKLQotCWlmICh+b3B0X2NwdWlkX21h c2tfeHNhdmVfZWF4KSB7Ci0JCWlmIChtc3JfeHNhdmUpCi0JCQlwcmludGsoIldyaXRpbmcgQ1BV SUQgeHNhdmUgZmVhdHVyZSBtYXNrIGVheCAtPiAlMDh4XG4iLAotCQkJICAgICAgIG9wdF9jcHVp ZF9tYXNrX3hzYXZlX2VheCk7Ci0JCWVsc2UKLQkJCXByaW50aygiTm8gQ1BVSUQgeHNhdmUgZmVh dHVyZSBtYXNrIGF2YWlsYWJsZVxuIik7CisJaWYgKG1zcl9iYXNpYykKKwkJY3B1aWRtYXNrX2Rl ZmF1bHRzLl8xY2QgPSBfcHJvYmVfbWFza19tc3IoJm1zcl9iYXNpYywgTENBUF8xY2QpOworCisJ aWYgKG1zcl9leHQpCisJCWNwdWlkbWFza19kZWZhdWx0cy5lMWNkID0gX3Byb2JlX21hc2tfbXNy KCZtc3JfZXh0LCBMQ0FQX2UxY2QpOworCisJaWYgKG1zcl94c2F2ZSkKKwkJY3B1aWRtYXNrX2Rl ZmF1bHRzLkRhMSA9IF9wcm9iZV9tYXNrX21zcigmbXNyX3hzYXZlLCBMQ0FQX0RhMSk7CisKKwkv KgorCSAqIERvbid0IGJvdGhlciB3YXJuaW5nIGFib3V0IGEgbWlzbWF0Y2ggaWYgdmlydHVhbGlz ZWQuICBUaGVzZSBNU1JzCisJICogYXJlIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBhbG1vc3QgbmV2 ZXIgdmlydHVhbGlzZWQuCisJICovCisJaWYgKChleHBlY3RlZF9sZXZlbGxpbmdfY2FwID09IGxl dmVsbGluZ19jYXBzKSB8fAorCSAgICBjcHVfaGFzX2h5cGVydmlzb3IpCisJCXJldHVybjsKKwor CXByaW50ayhYRU5MT0dfV0FSTklORyAiTWlzbWF0Y2ggYmV0d2VlbiBleHBlY3RlZCAoJSN4KSAi CisJICAgICAgICJhbmQgcmVhbCAoJSN4KSBsZXZlbGxpbmcgY2FwczogbWlzc2luZyAlI3hcbiIs CisJICAgICAgIGV4cGVjdGVkX2xldmVsbGluZ19jYXAsIGxldmVsbGluZ19jYXBzLAorCSAgICAg ICAoZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCBeIGxldmVsbGluZ19jYXBzKSAmIGxldmVsbGluZ19j YXBzKTsKKwlwcmludGsoWEVOTE9HX1dBUk5JTkcgIkZhbSAlI3gsIG1vZGVsICUjeCBleHBlY3Rl ZCAoJSN4LyUjeC8lI3gpLCAiCisJICAgICAgICJnb3QgKCUjeC8lI3gvJSN4KVxuIiwgYy0+eDg2 LCBjLT54ODZfbW9kZWwsCisJICAgICAgIGV4cF9tc3JfYmFzaWMsIGV4cF9tc3JfZXh0LCBleHBf bXNyX3hzYXZlLAorCSAgICAgICBtc3JfYmFzaWMsIG1zcl9leHQsIG1zcl94c2F2ZSk7CisJcHJp bnRrKFhFTkxPR19XQVJOSU5HCisJICAgICAgICJJZiBub3QgcnVubmluZyB2aXJ0dWFsaXNlZCwg cGxlYXNlIHJlcG9ydCBhIGJ1Z1xuIik7Cit9CisKKy8qCisgKiBDb250ZXh0IHN3aXRjaCBsZXZl bGxpbmcgc3RhdGUgdG8gdGhlIG5leHQgZG9tYWluLiAgQSBwYXJhbWV0ZXIgb2YgTlVMTCBpcwor ICogdXNlZCB0byBjb250ZXh0IHN3aXRjaCB0byB0aGUgZGVmYXVsdCBob3N0IHN0YXRlIChieSB0 aGUgY3B1IGJyaW5ndXAtY29kZSwKKyAqIGNyYXNoIHBhdGgsIGV0YykuCisgKi8KK3N0YXRpYyB2 b2lkIGludGVsX2N0eHRfc3dpdGNoX2xldmVsbGluZyhjb25zdCBzdHJ1Y3QgZG9tYWluICpuZXh0 ZCkKK3sKKwlzdHJ1Y3QgY3B1aWRtYXNrcyAqdGhlc2VfbWFza3MgPSAmdGhpc19jcHUoY3B1aWRt YXNrcyk7CisJY29uc3Qgc3RydWN0IGNwdWlkbWFza3MgKm1hc2tzID0gJmNwdWlkbWFza19kZWZh dWx0czsKKworI2RlZmluZSBMQVpZKG1zciwgZmllbGQpCQkJCQkJXAorCSh7CQkJCQkJCQlcCisJ CWlmICh1bmxpa2VseSh0aGVzZV9tYXNrcy0+ZmllbGQgIT0gbWFza3MtPmZpZWxkKSAmJglcCisJ CSAgICAobXNyKSkJCQkJCQlcCisJCXsJCQkJCQkJXAorCQkJd3Jtc3JsKChtc3IpLCBtYXNrcy0+ ZmllbGQpOwkJCVwKKwkJCXRoZXNlX21hc2tzLT5maWVsZCA9IG1hc2tzLT5maWVsZDsJCVwKKwkJ fQkJCQkJCQlcCisJfSkKKworCUxBWlkobXNyX2Jhc2ljLCBfMWNkKTsKKwlMQVpZKG1zcl9leHQs ICAgZTFjZCk7CisJTEFaWShtc3JfeHNhdmUsIERhMSk7CisKKyN1bmRlZiBMQVpZCit9CisKKy8q CisgKiBvcHRfY3B1aWRfbWFza19lY3gvZWR4OiBjcHVpZC4xW2VjeCwgZWR4XSBmZWF0dXJlIG1h c2suCisgKiBGb3IgZXhhbXBsZSwgRTg0MDBbSW50ZWwgQ29yZSAyIER1byBQcm9jZXNzb3Igc2Vy aWVzXSBlY3ggPSAweDAwMDhFM0ZELAorICogZWR4ID0gMHhCRkVCRkJGRiB3aGVuIGV4ZWN1dGlu ZyBDUFVJRC5FQVggPSAxIG5vcm1hbGx5LiBJZiB5b3Ugd2FudCB0bworICogJ3JldiBkb3duJyB0 byBFODQwMCwgeW91IGNhbiBzZXQgdGhlc2UgdmFsdWVzIGluIHRoZXNlIFhlbiBib290IHBhcmFt ZXRlcnMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBub2lubGluZSBpbnRlbF9pbml0X2xldmVs bGluZyh2b2lkKQoreworCWlmICghcHJvYmVfaW50ZWxfY3B1aWRfZmF1bHRpbmcoKSkKKwkJcHJv YmVfbWFza2luZ19tc3JzKCk7CisKKwlpZiAobXNyX2Jhc2ljKSB7CisJCXVpbnQzMl90IGVjeCwg ZWR4LCB0bXA7CisKKwkJY3B1aWQoMHgwMDAwMDAwMSwgJnRtcCwgJnRtcCwgJmVjeCwgJmVkeCk7 CisKKwkJZWN4ICY9IG9wdF9jcHVpZF9tYXNrX2VjeDsKKwkJZWR4ICY9IG9wdF9jcHVpZF9tYXNr X2VkeDsKKworCQljcHVpZG1hc2tfZGVmYXVsdHMuXzFjZCAmPSAoKHU2NCllZHggPDwgMzIpIHwg ZWN4OwogCX0KLQllbHNlCi0JCW1zcl94c2F2ZSA9IDA7Ci0KLSBzZXRtYXNrOgotCWlmIChtc3Jf YmFzaWMgJiYKLQkgICAgd3Jtc3Jfc2FmZShtc3JfYmFzaWMsCi0JCSAgICAgICAoKHU2NClvcHRf Y3B1aWRfbWFza19lZHggPDwgMzIpIHwgb3B0X2NwdWlkX21hc2tfZWN4KSl7Ci0JCW1zcl9iYXNp YyA9IDA7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCBmZWF0dXJlIG1hc2tcbiIpOwor CisJaWYgKG1zcl9leHQpIHsKKwkJdWludDMyX3QgZWN4LCBlZHgsIHRtcDsKKworCQljcHVpZCgw eDgwMDAwMDAxLCAmdG1wLCAmdG1wLCAmZWN4LCAmZWR4KTsKKworCQllY3ggJj0gb3B0X2NwdWlk X21hc2tfZXh0X2VjeDsKKwkJZWR4ICY9IG9wdF9jcHVpZF9tYXNrX2V4dF9lZHg7CisKKwkJY3B1 aWRtYXNrX2RlZmF1bHRzLmUxY2QgJj0gKCh1NjQpZWR4IDw8IDMyKSB8IGVjeDsKIAl9CiAKLQlp ZiAobXNyX2V4dCAmJgotCSAgICB3cm1zcl9zYWZlKG1zcl9leHQsCi0JCSAgICAgICAoKHU2NClv cHRfY3B1aWRfbWFza19leHRfZWR4IDw8IDMyKSB8IG9wdF9jcHVpZF9tYXNrX2V4dF9lY3gpKXsK LQkJbXNyX2V4dCA9IDA7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCBleHRlbmRlZCBm ZWF0dXJlIG1hc2tcbiIpOworCWlmIChtc3JfeHNhdmUpIHsKKwkJdWludDMyX3QgZWF4LCB0bXA7 CisKKwkJY3B1aWRfY291bnQoMHgwMDAwMDAwZCwgMSwgJmVheCwgJnRtcCwgJnRtcCwgJnRtcCk7 CisKKwkJZWF4ICY9IG9wdF9jcHVpZF9tYXNrX3hzYXZlX2VheDsKKworCQljcHVpZG1hc2tfZGVm YXVsdHMuRGExICY9ICh+MFVMTCA8PCAzMikgfCBlYXg7CiAJfQogCi0JaWYgKG1zcl94c2F2ZSAm JgotCSAgICAocmRtc3Jfc2FmZShtc3JfeHNhdmUsIG1zcl92YWwpIHx8Ci0JICAgICB3cm1zcl9z YWZlKG1zcl94c2F2ZSwKLQkJCShtc3JfdmFsICYgKH4wVUxMIDw8IDMyKSkgfCBvcHRfY3B1aWRf bWFza194c2F2ZV9lYXgpKSl7Ci0JCW1zcl94c2F2ZSA9IDA7Ci0JCXByaW50aygiRmFpbGVkIHRv IHNldCBDUFVJRCB4c2F2ZSBmZWF0dXJlIG1hc2tcbiIpOworCWlmIChvcHRfY3B1X2luZm8pIHsK KwkJcHJpbnRrKFhFTkxPR19JTkZPICJMZXZlbGxpbmcgY2FwczogJSN4XG4iLCBsZXZlbGxpbmdf Y2Fwcyk7CisKKwkJaWYgKCFjcHVfaGFzX2NwdWlkX2ZhdWx0aW5nKQorCQkJcHJpbnRrKFhFTkxP R19JTkZPCisJCQkgICAgICAgIk1TUiBkZWZhdWx0czogMWQgMHglMDh4LCAxYyAweCUwOHgsIGUx ZCAweCUwOHgsICIKKwkJCSAgICAgICAiZTFjIDB4JTA4eCwgRGExIDB4JTA4eFxuIiwKKwkJCSAg ICAgICAodWludDMyX3QpKGNwdWlkbWFza19kZWZhdWx0cy5fMWNkID4+IDMyKSwKKwkJCSAgICAg ICAodWludDMyX3QpY3B1aWRtYXNrX2RlZmF1bHRzLl8xY2QsCisJCQkgICAgICAgKHVpbnQzMl90 KShjcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCA+PiAzMiksCisJCQkgICAgICAgKHVpbnQzMl90KWNw dWlkbWFza19kZWZhdWx0cy5lMWNkLAorCQkJICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tfZGVm YXVsdHMuRGExKTsKIAl9CiB9CiAKQEAgLTE5MCwyMiArMjYzLDEzIEBAIHN0YXRpYyB2b2lkIGVh cmx5X2luaXRfaW50ZWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQogCSAgICAoYm9vdF9jcHVfZGF0 YS54ODZfbWFzayA9PSAzIHx8IGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPT0gNCkpCiAJCXBhZGRy X2JpdHMgPSAzNjsKIAotCWlmIChjID09ICZib290X2NwdV9kYXRhICYmIGMtPng4NiA9PSA2KSB7 Ci0JCWlmIChwcm9iZV9pbnRlbF9jcHVpZF9mYXVsdGluZygpKQotCQkJX19zZXRfYml0KFg4Nl9G RUFUVVJFX0NQVUlEX0ZBVUxUSU5HLAotCQkJCSAgYy0+eDg2X2NhcGFiaWxpdHkpOwotCX0gZWxz ZSBpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NQVUlEX0ZBVUxUSU5HKSkgewotCQlCVUdf T04oIXByb2JlX2ludGVsX2NwdWlkX2ZhdWx0aW5nKCkpOworCWlmIChjID09ICZib290X2NwdV9k YXRhKQorCQlpbnRlbF9pbml0X2xldmVsbGluZygpOworCisJaWYgKHRlc3RfYml0KFg4Nl9GRUFU VVJFX0NQVUlEX0ZBVUxUSU5HLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KSkKIAkJX19z ZXRfYml0KFg4Nl9GRUFUVVJFX0NQVUlEX0ZBVUxUSU5HLCBjLT54ODZfY2FwYWJpbGl0eSk7Ci0J fQogCi0JaWYgKCFjcHVfaGFzX2NwdWlkX2ZhdWx0aW5nKQotCQlzZXRfY3B1aWRtYXNrKGMpOwot CWVsc2UgaWYgKChjID09ICZib290X2NwdV9kYXRhKSAmJgotCQkgKH4ob3B0X2NwdWlkX21hc2tf ZWN4ICYgb3B0X2NwdWlkX21hc2tfZWR4ICYKLQkJICAgIG9wdF9jcHVpZF9tYXNrX2V4dF9lY3gg JiBvcHRfY3B1aWRfbWFza19leHRfZWR4ICYKLQkJICAgIG9wdF9jcHVpZF9tYXNrX3hzYXZlX2Vh eCkpKQotCQlwcmludGsoIk5vIENQVUlEIGZlYXR1cmUgbWFza2luZyBzdXBwb3J0IGF2YWlsYWJs ZVxuIik7CisJaW50ZWxfY3R4dF9zd2l0Y2hfbGV2ZWxsaW5nKE5VTEwpOwogfQogCiAvKgotLSAK Mi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0 cy54ZW4ub3JnL3hlbi1kZXZlbAo=