From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v4 15/26] x86/cpu: Rework Intel masking/faulting setup Date: Wed, 23 Mar 2016 16:36:18 +0000 Message-ID: <1458750989-28967-16-git-send-email-andrew.cooper3@citrix.com> References: <1458750989-28967-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: <1458750989-28967-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 bC4gIEVhY2ggY3B1IGlzIHRoZW4gY29udGV4dApzd2l0Y2hlZCBpbnRvIHRoZSBkZWZhdWx0IGxl dmVsbGluZyBzdGF0ZS4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29w ZXIzQGNpdHJpeC5jb20+ClJldmlld2VkLWJ5OiBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3VzZS5j b20+Ci0tLQp2MjoKICogU3R5bGUgZml4ZXMuCiAqIFByb3ZpZGUgZXh0cmEgaW5mb3JtYXRpb24g aWYgb3B0X2NwdV9pbmZvLgogKiBFeHRyYSBjb21tZW50IGluZGljYXRpbmcgdGhlIGV4cGVjdGVk IHVzZSBvZiBpbnRlbF9jdHh0X3N3aXRjaF9sZXZlbGxpbmcoKS4KdjM6CiAqIFN0eWxlIGZpeGVz LgogKiBBdm9pZCBwcmludGluZyB0aGUgY3B1bWFzayBkZWZhdWx0cyBpZiBmYXVsdGluZyBpcyBh dmFpbGFibGUuCi0tLQogeGVuL2FyY2gveDg2L2NwdS9pbnRlbC5jIHwgMjM0ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTQ5 IGluc2VydGlvbnMoKyksIDg1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4 Ni9jcHUvaW50ZWwuYyBiL3hlbi9hcmNoL3g4Ni9jcHUvaW50ZWwuYwppbmRleCBhZDIyMzc1Li5i MjY2NmE4IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvY3B1L2ludGVsLmMKKysrIGIveGVuL2Fy Y2gveDg2L2NwdS9pbnRlbC5jCkBAIC0xOCwxMSArMTgsMTggQEAKIAogI2RlZmluZSBzZWxlY3Rf aWRsZV9yb3V0aW5lKHgpICgodm9pZCkwKQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHByb2JlX2lu dGVsX2NwdWlkX2ZhdWx0aW5nKHZvaWQpCitzdGF0aWMgYm9vbF90IF9faW5pdCBwcm9iZV9pbnRl bF9jcHVpZF9mYXVsdGluZyh2b2lkKQogewogCXVpbnQ2NF90IHg7Ci0JcmV0dXJuICFyZG1zcl9z YWZlKE1TUl9JTlRFTF9QTEFURk9STV9JTkZPLCB4KSAmJgotCQkoeCAmIE1TUl9QTEFURk9STV9J TkZPX0NQVUlEX0ZBVUxUSU5HKTsKKworCWlmIChyZG1zcl9zYWZlKE1TUl9JTlRFTF9QTEFURk9S TV9JTkZPLCB4KSB8fAorCSAgICAhKHggJiBNU1JfUExBVEZPUk1fSU5GT19DUFVJRF9GQVVMVElO RykpCisJCXJldHVybiAwOworCisJZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCB8PSBMQ0FQX2ZhdWx0 aW5nOworCWxldmVsbGluZ19jYXBzIHw9ICBMQ0FQX2ZhdWx0aW5nOworCV9fc2V0X2JpdChYODZf RkVBVFVSRV9DUFVJRF9GQVVMVElORywgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSk7CisJ cmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sX3QsIGNwdWlkX2ZhdWx0 aW5nX2VuYWJsZWQpOwpAQCAtNDQsMzYgKzUxLDQwIEBAIHZvaWQgc2V0X2NwdWlkX2ZhdWx0aW5n KGJvb2xfdCBlbmFibGUpCiB9CiAKIC8qCi0gKiBvcHRfY3B1aWRfbWFza19lY3gvZWR4OiBjcHVp ZC4xW2VjeCwgZWR4XSBmZWF0dXJlIG1hc2suCi0gKiBGb3IgZXhhbXBsZSwgRTg0MDBbSW50ZWwg Q29yZSAyIER1byBQcm9jZXNzb3Igc2VyaWVzXSBlY3ggPSAweDAwMDhFM0ZELAotICogZWR4ID0g MHhCRkVCRkJGRiB3aGVuIGV4ZWN1dGluZyBDUFVJRC5FQVggPSAxIG5vcm1hbGx5LiBJZiB5b3Ug d2FudCB0bwotICogJ3JldiBkb3duJyB0byBFODQwMCwgeW91IGNhbiBzZXQgdGhlc2UgdmFsdWVz IGluIHRoZXNlIFhlbiBib290IHBhcmFtZXRlcnMuCisgKiBTZXQgY2FwcyBpbiBleHBlY3RlZF9s ZXZlbGxpbmdfY2FwLCBwcm9iZSBhIHNwZWNpZmljIG1hc2tpbmcgTVNSLCBhbmQgc2V0CisgKiBj YXBzIGluIGxldmVsbGluZ19jYXBzIGlmIGl0IGlzIGZvdW5kLCBvciBjbG9iYmVyIHRoZSBNU1Ig aW5kZXggaWYgbWlzc2luZy4KKyAqIElmIHByZXNldCwgcmVhZHMgdGhlIGRlZmF1bHQgdmFsdWUg aW50byBtc3JfdmFsLgogICovCi1zdGF0aWMgdm9pZCBzZXRfY3B1aWRtYXNrKGNvbnN0IHN0cnVj dCBjcHVpbmZvX3g4NiAqYykKK3N0YXRpYyB1aW50NjRfdCBfX2luaXQgX3Byb2JlX21hc2tfbXNy KHVuc2lnbmVkIGludCAqbXNyLCB1aW50NjRfdCBjYXBzKQogewotCXN0YXRpYyB1bnNpZ25lZCBp bnQgbXNyX2Jhc2ljLCBtc3JfZXh0LCBtc3JfeHNhdmU7Ci0Jc3RhdGljIGVudW0geyBub3RfcGFy c2VkLCBub19tYXNrLCBzZXRfbWFzayB9IHN0YXR1czsKLQl1NjQgbXNyX3ZhbDsKKwl1aW50NjRf dCB2YWwgPSAwOwogCi0JaWYgKHN0YXR1cyA9PSBub19tYXNrKQotCQlyZXR1cm47CisJZXhwZWN0 ZWRfbGV2ZWxsaW5nX2NhcCB8PSBjYXBzOwogCi0JaWYgKHN0YXR1cyA9PSBzZXRfbWFzaykKLQkJ Z290byBzZXRtYXNrOworCWlmIChyZG1zcl9zYWZlKCptc3IsIHZhbCkgfHwgd3Jtc3Jfc2FmZSgq bXNyLCB2YWwpKQorCQkqbXNyID0gMDsKKwllbHNlCisJCWxldmVsbGluZ19jYXBzIHw9IGNhcHM7 CiAKLQlBU1NFUlQoKHN0YXR1cyA9PSBub3RfcGFyc2VkKSAmJiAoYyA9PSAmYm9vdF9jcHVfZGF0 YSkpOwotCXN0YXR1cyA9IG5vX21hc2s7CisJcmV0dXJuIHZhbDsKK30KIAotCWlmICghfihvcHRf Y3B1aWRfbWFza19lY3ggJiBvcHRfY3B1aWRfbWFza19lZHggJgotCSAgICAgICBvcHRfY3B1aWRf bWFza19leHRfZWN4ICYgb3B0X2NwdWlkX21hc2tfZXh0X2VkeCAmCi0JICAgICAgIG9wdF9jcHVp ZF9tYXNrX3hzYXZlX2VheCkpCi0JCXJldHVybjsKKy8qIEluZGljZXMgb2YgdGhlIG1hc2tpbmcg TVNScywgb3IgMCBpZiB1bmF2YWlsYWJsZS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFk X21vc3RseSBtc3JfYmFzaWMsIF9fcmVhZF9tb3N0bHkgbXNyX2V4dCwKKwlfX3JlYWRfbW9zdGx5 IG1zcl94c2F2ZTsKKworLyoKKyAqIFByb2JlIGZvciB0aGUgZXhpc3RhbmNlIG9mIHRoZSBleHBl Y3RlZCBtYXNraW5nIE1TUnMuICBUaGV5IG1pZ2h0IGVhc2lseQorICogbm90IGJlIGF2YWlsYWJs ZSBpZiBYZW4gaXMgcnVubmluZyB2aXJ0dWFsaXNlZC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0 IHByb2JlX21hc2tpbmdfbXNycyh2b2lkKQoreworCWNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAq YyA9ICZib290X2NwdV9kYXRhOworCXVuc2lnbmVkIGludCBleHBfbXNyX2Jhc2ljLCBleHBfbXNy X2V4dCwgZXhwX21zcl94c2F2ZTsKIAogCS8qIE9ubHkgZmFtaWx5IDYgc3VwcG9ydHMgdGhpcyBm ZWF0dXJlLiAqLwotCWlmIChjLT54ODYgIT0gNikgewotCQlwcmludGsoIk5vIENQVUlEIGZlYXR1 cmUgbWFza2luZyBzdXBwb3J0IGF2YWlsYWJsZVxuIik7CisJaWYgKGMtPng4NiAhPSA2KQogCQly ZXR1cm47Ci0JfQogCiAJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAljYXNlIDB4MTc6IC8qIFlv cmtmaWVsZCwgV29sZmRhbGUsIFBlbnJ5biwgSGFycGVydG93bihEUCkgKi8KQEAgLTEwMCw1OSAr MTExLDEyMSBAQCBzdGF0aWMgdm9pZCBzZXRfY3B1aWRtYXNrKGNvbnN0IHN0cnVjdCBjcHVpbmZv X3g4NiAqYykKIAkJYnJlYWs7CiAJfQogCi0Jc3RhdHVzID0gc2V0X21hc2s7CisJZXhwX21zcl9i YXNpYyA9IG1zcl9iYXNpYzsKKwlleHBfbXNyX2V4dCAgID0gbXNyX2V4dDsKKwlleHBfbXNyX3hz YXZlID0gbXNyX3hzYXZlOwogCi0JaWYgKH4ob3B0X2NwdWlkX21hc2tfZWN4ICYgb3B0X2NwdWlk X21hc2tfZWR4KSkgewotCQlpZiAobXNyX2Jhc2ljKQotCQkJcHJpbnRrKCJXcml0aW5nIENQVUlE IGZlYXR1cmUgbWFzayBlY3g6ZWR4IC0+ICUwOHg6JTA4eFxuIiwKLQkJCSAgICAgICBvcHRfY3B1 aWRfbWFza19lY3gsIG9wdF9jcHVpZF9tYXNrX2VkeCk7Ci0JCWVsc2UKLQkJCXByaW50aygiTm8g Q1BVSUQgZmVhdHVyZSBtYXNrIGF2YWlsYWJsZVxuIik7Ci0JfQotCWVsc2UKLQkJbXNyX2Jhc2lj ID0gMDsKLQotCWlmICh+KG9wdF9jcHVpZF9tYXNrX2V4dF9lY3ggJiBvcHRfY3B1aWRfbWFza19l eHRfZWR4KSkgewotCQlpZiAobXNyX2V4dCkKLQkJCXByaW50aygiV3JpdGluZyBDUFVJRCBleHRl bmRlZCBmZWF0dXJlIG1hc2sgZWN4OmVkeCAtPiAlMDh4OiUwOHhcbiIsCi0JCQkgICAgICAgb3B0 X2NwdWlkX21hc2tfZXh0X2VjeCwgb3B0X2NwdWlkX21hc2tfZXh0X2VkeCk7Ci0JCWVsc2UKLQkJ CXByaW50aygiTm8gQ1BVSUQgZXh0ZW5kZWQgZmVhdHVyZSBtYXNrIGF2YWlsYWJsZVxuIik7Ci0J fQotCWVsc2UKLQkJbXNyX2V4dCA9IDA7Ci0KLQlpZiAofm9wdF9jcHVpZF9tYXNrX3hzYXZlX2Vh eCkgewotCQlpZiAobXNyX3hzYXZlKQotCQkJcHJpbnRrKCJXcml0aW5nIENQVUlEIHhzYXZlIGZl YXR1cmUgbWFzayBlYXggLT4gJTA4eFxuIiwKLQkJCSAgICAgICBvcHRfY3B1aWRfbWFza194c2F2 ZV9lYXgpOwotCQllbHNlCi0JCQlwcmludGsoIk5vIENQVUlEIHhzYXZlIGZlYXR1cmUgbWFzayBh dmFpbGFibGVcbiIpOworCWlmIChtc3JfYmFzaWMpCisJCWNwdWlkbWFza19kZWZhdWx0cy5fMWNk ID0gX3Byb2JlX21hc2tfbXNyKCZtc3JfYmFzaWMsIExDQVBfMWNkKTsKKworCWlmIChtc3JfZXh0 KQorCQljcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCA9IF9wcm9iZV9tYXNrX21zcigmbXNyX2V4dCwg TENBUF9lMWNkKTsKKworCWlmIChtc3JfeHNhdmUpCisJCWNwdWlkbWFza19kZWZhdWx0cy5EYTEg PSBfcHJvYmVfbWFza19tc3IoJm1zcl94c2F2ZSwgTENBUF9EYTEpOworCisJLyoKKwkgKiBEb24n dCBib3RoZXIgd2FybmluZyBhYm91dCBhIG1pc21hdGNoIGlmIHZpcnR1YWxpc2VkLiAgVGhlc2Ug TVNScworCSAqIGFyZSBub3QgYXJjaGl0ZWN0dXJhbCBhbmQgYWxtb3N0IG5ldmVyIHZpcnR1YWxp c2VkLgorCSAqLworCWlmICgoZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCA9PSBsZXZlbGxpbmdfY2Fw cykgfHwKKwkgICAgY3B1X2hhc19oeXBlcnZpc29yKQorCQlyZXR1cm47CisKKwlwcmludGsoWEVO TE9HX1dBUk5JTkcgIk1pc21hdGNoIGJldHdlZW4gZXhwZWN0ZWQgKCUjeCkgIgorCSAgICAgICAi YW5kIHJlYWwgKCUjeCkgbGV2ZWxsaW5nIGNhcHM6IG1pc3NpbmcgJSN4XG4iLAorCSAgICAgICBl eHBlY3RlZF9sZXZlbGxpbmdfY2FwLCBsZXZlbGxpbmdfY2FwcywKKwkgICAgICAgKGV4cGVjdGVk X2xldmVsbGluZ19jYXAgXiBsZXZlbGxpbmdfY2FwcykgJiBsZXZlbGxpbmdfY2Fwcyk7CisJcHJp bnRrKFhFTkxPR19XQVJOSU5HICJGYW0gJSN4LCBtb2RlbCAlI3ggZXhwZWN0ZWQgKCUjeC8lI3gv JSN4KSwgIgorCSAgICAgICAiZ290ICglI3gvJSN4LyUjeClcbiIsIGMtPng4NiwgYy0+eDg2X21v ZGVsLAorCSAgICAgICBleHBfbXNyX2Jhc2ljLCBleHBfbXNyX2V4dCwgZXhwX21zcl94c2F2ZSwK KwkgICAgICAgbXNyX2Jhc2ljLCBtc3JfZXh0LCBtc3JfeHNhdmUpOworCXByaW50ayhYRU5MT0df V0FSTklORworCSAgICAgICAiSWYgbm90IHJ1bm5pbmcgdmlydHVhbGlzZWQsIHBsZWFzZSByZXBv cnQgYSBidWdcbiIpOworfQorCisvKgorICogQ29udGV4dCBzd2l0Y2ggbGV2ZWxsaW5nIHN0YXRl IHRvIHRoZSBuZXh0IGRvbWFpbi4gIEEgcGFyYW1ldGVyIG9mIE5VTEwgaXMKKyAqIHVzZWQgdG8g Y29udGV4dCBzd2l0Y2ggdG8gdGhlIGRlZmF1bHQgaG9zdCBzdGF0ZSwgYW5kIGlzIHVzZWQgYnkg dGhlIEJTUC9BUAorICogc3RhcnR1cCBjb2RlLgorICovCitzdGF0aWMgdm9pZCBpbnRlbF9jdHh0 X3N3aXRjaF9sZXZlbGxpbmcoY29uc3Qgc3RydWN0IGRvbWFpbiAqbmV4dGQpCit7CisJc3RydWN0 IGNwdWlkbWFza3MgKnRoZXNlX21hc2tzID0gJnRoaXNfY3B1KGNwdWlkbWFza3MpOworCWNvbnN0 IHN0cnVjdCBjcHVpZG1hc2tzICptYXNrcyA9ICZjcHVpZG1hc2tfZGVmYXVsdHM7CisKKyNkZWZp bmUgTEFaWShtc3IsIGZpZWxkKQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQlpZiAodW5saWtlbHko dGhlc2VfbWFza3MtPmZpZWxkICE9IG1hc2tzLT5maWVsZCkgJiYJXAorCQkgICAgKG1zcikpCQkJ CQkJXAorCQl7CQkJCQkJCVwKKwkJCXdybXNybCgobXNyKSwgbWFza3MtPmZpZWxkKTsJCQlcCisJ CQl0aGVzZV9tYXNrcy0+ZmllbGQgPSBtYXNrcy0+ZmllbGQ7CQlcCisJCX0JCQkJCQkJXAorCX0p CisKKwlMQVpZKG1zcl9iYXNpYywgXzFjZCk7CisJTEFaWShtc3JfZXh0LCAgIGUxY2QpOworCUxB WlkobXNyX3hzYXZlLCBEYTEpOworCisjdW5kZWYgTEFaWQorfQorCisvKgorICogb3B0X2NwdWlk X21hc2tfZWN4L2VkeDogY3B1aWQuMVtlY3gsIGVkeF0gZmVhdHVyZSBtYXNrLgorICogRm9yIGV4 YW1wbGUsIEU4NDAwW0ludGVsIENvcmUgMiBEdW8gUHJvY2Vzc29yIHNlcmllc10gZWN4ID0gMHgw MDA4RTNGRCwKKyAqIGVkeCA9IDB4QkZFQkZCRkYgd2hlbiBleGVjdXRpbmcgQ1BVSUQuRUFYID0g MSBub3JtYWxseS4gSWYgeW91IHdhbnQgdG8KKyAqICdyZXYgZG93bicgdG8gRTg0MDAsIHlvdSBj YW4gc2V0IHRoZXNlIHZhbHVlcyBpbiB0aGVzZSBYZW4gYm9vdCBwYXJhbWV0ZXJzLgorICovCitz dGF0aWMgdm9pZCBfX2luaXQgbm9pbmxpbmUgaW50ZWxfaW5pdF9sZXZlbGxpbmcodm9pZCkKK3sK KwlpZiAoIXByb2JlX2ludGVsX2NwdWlkX2ZhdWx0aW5nKCkpCisJCXByb2JlX21hc2tpbmdfbXNy cygpOworCisJaWYgKG1zcl9iYXNpYykgeworCQl1aW50MzJfdCBlY3gsIGVkeCwgdG1wOworCisJ CWNwdWlkKDB4MDAwMDAwMDEsICZ0bXAsICZ0bXAsICZlY3gsICZlZHgpOworCisJCWVjeCAmPSBv cHRfY3B1aWRfbWFza19lY3g7CisJCWVkeCAmPSBvcHRfY3B1aWRfbWFza19lZHg7CisKKwkJY3B1 aWRtYXNrX2RlZmF1bHRzLl8xY2QgJj0gKCh1NjQpZWR4IDw8IDMyKSB8IGVjeDsKIAl9Ci0JZWxz ZQotCQltc3JfeHNhdmUgPSAwOwotCi0gc2V0bWFzazoKLQlpZiAobXNyX2Jhc2ljICYmCi0JICAg IHdybXNyX3NhZmUobXNyX2Jhc2ljLAotCQkgICAgICAgKCh1NjQpb3B0X2NwdWlkX21hc2tfZWR4 IDw8IDMyKSB8IG9wdF9jcHVpZF9tYXNrX2VjeCkpewotCQltc3JfYmFzaWMgPSAwOwotCQlwcmlu dGsoIkZhaWxlZCB0byBzZXQgQ1BVSUQgZmVhdHVyZSBtYXNrXG4iKTsKKworCWlmIChtc3JfZXh0 KSB7CisJCXVpbnQzMl90IGVjeCwgZWR4LCB0bXA7CisKKwkJY3B1aWQoMHg4MDAwMDAwMSwgJnRt cCwgJnRtcCwgJmVjeCwgJmVkeCk7CisKKwkJZWN4ICY9IG9wdF9jcHVpZF9tYXNrX2V4dF9lY3g7 CisJCWVkeCAmPSBvcHRfY3B1aWRfbWFza19leHRfZWR4OworCisJCWNwdWlkbWFza19kZWZhdWx0 cy5lMWNkICY9ICgodTY0KWVkeCA8PCAzMikgfCBlY3g7CiAJfQogCi0JaWYgKG1zcl9leHQgJiYK LQkgICAgd3Jtc3Jfc2FmZShtc3JfZXh0LAotCQkgICAgICAgKCh1NjQpb3B0X2NwdWlkX21hc2tf ZXh0X2VkeCA8PCAzMikgfCBvcHRfY3B1aWRfbWFza19leHRfZWN4KSl7Ci0JCW1zcl9leHQgPSAw OwotCQlwcmludGsoIkZhaWxlZCB0byBzZXQgQ1BVSUQgZXh0ZW5kZWQgZmVhdHVyZSBtYXNrXG4i KTsKKwlpZiAobXNyX3hzYXZlKSB7CisJCXVpbnQzMl90IGVheCwgdG1wOworCisJCWNwdWlkX2Nv dW50KDB4MDAwMDAwMGQsIDEsICZlYXgsICZ0bXAsICZ0bXAsICZ0bXApOworCisJCWVheCAmPSBv cHRfY3B1aWRfbWFza194c2F2ZV9lYXg7CisKKwkJY3B1aWRtYXNrX2RlZmF1bHRzLkRhMSAmPSAo fjBVTEwgPDwgMzIpIHwgZWF4OwogCX0KIAotCWlmIChtc3JfeHNhdmUgJiYKLQkgICAgKHJkbXNy X3NhZmUobXNyX3hzYXZlLCBtc3JfdmFsKSB8fAotCSAgICAgd3Jtc3Jfc2FmZShtc3JfeHNhdmUs Ci0JCQkobXNyX3ZhbCAmICh+MFVMTCA8PCAzMikpIHwgb3B0X2NwdWlkX21hc2tfeHNhdmVfZWF4 KSkpewotCQltc3JfeHNhdmUgPSAwOwotCQlwcmludGsoIkZhaWxlZCB0byBzZXQgQ1BVSUQgeHNh dmUgZmVhdHVyZSBtYXNrXG4iKTsKKwlpZiAob3B0X2NwdV9pbmZvKSB7CisJCXByaW50ayhYRU5M T0dfSU5GTyAiTGV2ZWxsaW5nIGNhcHM6ICUjeFxuIiwgbGV2ZWxsaW5nX2NhcHMpOworCisJCWlm ICghY3B1X2hhc19jcHVpZF9mYXVsdGluZykKKwkJCXByaW50ayhYRU5MT0dfSU5GTworCQkJICAg ICAgICJNU1IgZGVmYXVsdHM6IDFkIDB4JTA4eCwgMWMgMHglMDh4LCBlMWQgMHglMDh4LCAiCisJ CQkgICAgICAgImUxYyAweCUwOHgsIERhMSAweCUwOHhcbiIsCisJCQkgICAgICAgKHVpbnQzMl90 KShjcHVpZG1hc2tfZGVmYXVsdHMuXzFjZCA+PiAzMiksCisJCQkgICAgICAgKHVpbnQzMl90KWNw dWlkbWFza19kZWZhdWx0cy5fMWNkLAorCQkJICAgICAgICh1aW50MzJfdCkoY3B1aWRtYXNrX2Rl ZmF1bHRzLmUxY2QgPj4gMzIpLAorCQkJICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tfZGVmYXVs dHMuZTFjZCwKKwkJCSAgICAgICAodWludDMyX3QpY3B1aWRtYXNrX2RlZmF1bHRzLkRhMSk7CiAJ fQogfQogCkBAIC0xOTAsMjIgKzI2MywxMyBAQCBzdGF0aWMgdm9pZCBlYXJseV9pbml0X2ludGVs KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAkgICAgKGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPT0g MyB8fCBib290X2NwdV9kYXRhLng4Nl9tYXNrID09IDQpKQogCQlwYWRkcl9iaXRzID0gMzY7CiAK LQlpZiAoYyA9PSAmYm9vdF9jcHVfZGF0YSAmJiBjLT54ODYgPT0gNikgewotCQlpZiAocHJvYmVf aW50ZWxfY3B1aWRfZmF1bHRpbmcoKSkKLQkJCV9fc2V0X2JpdChYODZfRkVBVFVSRV9DUFVJRF9G QVVMVElORywKLQkJCQkgIGMtPng4Nl9jYXBhYmlsaXR5KTsKLQl9IGVsc2UgaWYgKGJvb3RfY3B1 X2hhcyhYODZfRkVBVFVSRV9DUFVJRF9GQVVMVElORykpIHsKLQkJQlVHX09OKCFwcm9iZV9pbnRl bF9jcHVpZF9mYXVsdGluZygpKTsKKwlpZiAoYyA9PSAmYm9vdF9jcHVfZGF0YSkKKwkJaW50ZWxf aW5pdF9sZXZlbGxpbmcoKTsKKworCWlmICh0ZXN0X2JpdChYODZfRkVBVFVSRV9DUFVJRF9GQVVM VElORywgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSkpCiAJCV9fc2V0X2JpdChYODZfRkVB VFVSRV9DUFVJRF9GQVVMVElORywgYy0+eDg2X2NhcGFiaWxpdHkpOwotCX0KIAotCWlmICghY3B1 X2hhc19jcHVpZF9mYXVsdGluZykKLQkJc2V0X2NwdWlkbWFzayhjKTsKLQllbHNlIGlmICgoYyA9 PSAmYm9vdF9jcHVfZGF0YSkgJiYKLQkJICh+KG9wdF9jcHVpZF9tYXNrX2VjeCAmIG9wdF9jcHVp ZF9tYXNrX2VkeCAmCi0JCSAgICBvcHRfY3B1aWRfbWFza19leHRfZWN4ICYgb3B0X2NwdWlkX21h c2tfZXh0X2VkeCAmCi0JCSAgICBvcHRfY3B1aWRfbWFza194c2F2ZV9lYXgpKSkKLQkJcHJpbnRr KCJObyBDUFVJRCBmZWF0dXJlIG1hc2tpbmcgc3VwcG9ydCBhdmFpbGFibGVcbiIpOworCWludGVs X2N0eHRfc3dpdGNoX2xldmVsbGluZyhOVUxMKTsKIH0KIAogLyoKLS0gCjIuMS40CgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4t ZGV2ZWwK