From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v3 17/28] x86/cpu: Rework Intel masking/faulting setup Date: Tue, 15 Mar 2016 15:35:13 +0000 Message-ID: <1458056124-8024-18-git-send-email-andrew.cooper3@citrix.com> References: <1458056124-8024-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: <1458056124-8024-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 VGhpcyBwYXRjaCBpcyBiZXN0IHJldmlld2VkIGFzIGl0cyBlbmQgcmVzdWx0IHJhdGhlciB0aGFu IGFzIGEgZGlmZiwgYXMgaXQKcmV3cml0ZXMgYWxtb3N0IGFsbCBvZiB0aGUgc2V0dXAuCgpPbiB0 aGUgQlNQLCBjcHVpZCBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGV2YWx1YXRlIHRoZSBwb3RlbnRp YWwgYXZhaWxhYmxlIHNldApvZiBtYXNraW5nIE1TUnMsIGFuZCB0aGV5IGFyZSB1bmNvbmRpdGlv bmFsbHkgcHJvYmVkLCBmaWxsaW5nIGluIHRoZQphdmFpbGFiaWxpdHkgaW5mb3JtYXRpb24gYW5k IGhhcmR3YXJlIGRlZmF1bHRzLiAgQSBzaWRlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQKcHJvYmVf aW50ZWxfY3B1aWRfZmF1bHRpbmcoKSBjYW4gbW92ZSB0byBiZWluZyBfX2luaXQuCgpUaGUgY29t bWFuZCBsaW5lIHBhcmFtZXRlcnMgYXJlIHRoZW4gY29tYmluZWQgd2l0aCB0aGUgaGFyZHdhcmUg ZGVmYXVsdHMgdG8KZnVydGhlciByZXN0cmljdCB0aGUgWGVuIGRlZmF1bHQgbWFza2luZyBsZXZl bC4gIEVhY2ggY3B1IGlzIHRoZW4gY29udGV4dApzd2l0Y2hlZCBpbnRvIHRoZSBkZWZhdWx0IGxl dmVsbGluZyBzdGF0ZS4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29w ZXIzQGNpdHJpeC5jb20+Ci0tLQpDQzogSmFuIEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29tPgoK djM6CiAqIFN0eWxlIGZpeGVzLgogKiBBdm9pZCBwcmludGluZyB0aGUgY3B1bWFzayBkZWZhdWx0 cyBpZiBmYXVsdGluZyBpcyBhdmFpbGFibGUuCnYyOgogKiBTdHlsZSBmaXhlcy4KICogUHJvdmlk ZSBleHRyYSBpbmZvcm1hdGlvbiBpZiBvcHRfY3B1X2luZm8uCiAqIEV4dHJhIGNvbW1lbnQgaW5k aWNhdGluZyB0aGUgZXhwZWN0ZWQgdXNlIG9mIGludGVsX2N0eHRfc3dpdGNoX2xldmVsbGluZygp LgotLS0KIHhlbi9hcmNoL3g4Ni9jcHUvaW50ZWwuYyB8IDIzNCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE0OSBpbnNlcnRp b25zKCspLCA4NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvY3B1L2lu dGVsLmMgYi94ZW4vYXJjaC94ODYvY3B1L2ludGVsLmMKaW5kZXggYWQyMjM3NS4uYjI2NjZhOCAx MDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2NwdS9pbnRlbC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9j cHUvaW50ZWwuYwpAQCAtMTgsMTEgKzE4LDE4IEBACiAKICNkZWZpbmUgc2VsZWN0X2lkbGVfcm91 dGluZSh4KSAoKHZvaWQpMCkKIAotc3RhdGljIHVuc2lnbmVkIGludCBwcm9iZV9pbnRlbF9jcHVp ZF9mYXVsdGluZyh2b2lkKQorc3RhdGljIGJvb2xfdCBfX2luaXQgcHJvYmVfaW50ZWxfY3B1aWRf ZmF1bHRpbmcodm9pZCkKIHsKIAl1aW50NjRfdCB4OwotCXJldHVybiAhcmRtc3Jfc2FmZShNU1Jf SU5URUxfUExBVEZPUk1fSU5GTywgeCkgJiYKLQkJKHggJiBNU1JfUExBVEZPUk1fSU5GT19DUFVJ RF9GQVVMVElORyk7CisKKwlpZiAocmRtc3Jfc2FmZShNU1JfSU5URUxfUExBVEZPUk1fSU5GTywg eCkgfHwKKwkgICAgISh4ICYgTVNSX1BMQVRGT1JNX0lORk9fQ1BVSURfRkFVTFRJTkcpKQorCQly ZXR1cm4gMDsKKworCWV4cGVjdGVkX2xldmVsbGluZ19jYXAgfD0gTENBUF9mYXVsdGluZzsKKwls ZXZlbGxpbmdfY2FwcyB8PSAgTENBUF9mYXVsdGluZzsKKwlfX3NldF9iaXQoWDg2X0ZFQVRVUkVf Q1BVSURfRkFVTFRJTkcsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpOworCXJldHVybiAx OwogfQogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbF90LCBjcHVpZF9mYXVsdGluZ19lbmFi bGVkKTsKQEAgLTQ0LDM2ICs1MSw0MCBAQCB2b2lkIHNldF9jcHVpZF9mYXVsdGluZyhib29sX3Qg ZW5hYmxlKQogfQogCiAvKgotICogb3B0X2NwdWlkX21hc2tfZWN4L2VkeDogY3B1aWQuMVtlY3gs IGVkeF0gZmVhdHVyZSBtYXNrLgotICogRm9yIGV4YW1wbGUsIEU4NDAwW0ludGVsIENvcmUgMiBE dW8gUHJvY2Vzc29yIHNlcmllc10gZWN4ID0gMHgwMDA4RTNGRCwKLSAqIGVkeCA9IDB4QkZFQkZC RkYgd2hlbiBleGVjdXRpbmcgQ1BVSUQuRUFYID0gMSBub3JtYWxseS4gSWYgeW91IHdhbnQgdG8K LSAqICdyZXYgZG93bicgdG8gRTg0MDAsIHlvdSBjYW4gc2V0IHRoZXNlIHZhbHVlcyBpbiB0aGVz ZSBYZW4gYm9vdCBwYXJhbWV0ZXJzLgorICogU2V0IGNhcHMgaW4gZXhwZWN0ZWRfbGV2ZWxsaW5n X2NhcCwgcHJvYmUgYSBzcGVjaWZpYyBtYXNraW5nIE1TUiwgYW5kIHNldAorICogY2FwcyBpbiBs ZXZlbGxpbmdfY2FwcyBpZiBpdCBpcyBmb3VuZCwgb3IgY2xvYmJlciB0aGUgTVNSIGluZGV4IGlm IG1pc3NpbmcuCisgKiBJZiBwcmVzZXQsIHJlYWRzIHRoZSBkZWZhdWx0IHZhbHVlIGludG8gbXNy X3ZhbC4KICAqLwotc3RhdGljIHZvaWQgc2V0X2NwdWlkbWFzayhjb25zdCBzdHJ1Y3QgY3B1aW5m b194ODYgKmMpCitzdGF0aWMgdWludDY0X3QgX19pbml0IF9wcm9iZV9tYXNrX21zcih1bnNpZ25l ZCBpbnQgKm1zciwgdWludDY0X3QgY2FwcykKIHsKLQlzdGF0aWMgdW5zaWduZWQgaW50IG1zcl9i YXNpYywgbXNyX2V4dCwgbXNyX3hzYXZlOwotCXN0YXRpYyBlbnVtIHsgbm90X3BhcnNlZCwgbm9f bWFzaywgc2V0X21hc2sgfSBzdGF0dXM7Ci0JdTY0IG1zcl92YWw7CisJdWludDY0X3QgdmFsID0g MDsKIAotCWlmIChzdGF0dXMgPT0gbm9fbWFzaykKLQkJcmV0dXJuOworCWV4cGVjdGVkX2xldmVs bGluZ19jYXAgfD0gY2FwczsKIAotCWlmIChzdGF0dXMgPT0gc2V0X21hc2spCi0JCWdvdG8gc2V0 bWFzazsKKwlpZiAocmRtc3Jfc2FmZSgqbXNyLCB2YWwpIHx8IHdybXNyX3NhZmUoKm1zciwgdmFs KSkKKwkJKm1zciA9IDA7CisJZWxzZQorCQlsZXZlbGxpbmdfY2FwcyB8PSBjYXBzOwogCi0JQVNT RVJUKChzdGF0dXMgPT0gbm90X3BhcnNlZCkgJiYgKGMgPT0gJmJvb3RfY3B1X2RhdGEpKTsKLQlz dGF0dXMgPSBub19tYXNrOworCXJldHVybiB2YWw7Cit9CiAKLQlpZiAoIX4ob3B0X2NwdWlkX21h c2tfZWN4ICYgb3B0X2NwdWlkX21hc2tfZWR4ICYKLQkgICAgICAgb3B0X2NwdWlkX21hc2tfZXh0 X2VjeCAmIG9wdF9jcHVpZF9tYXNrX2V4dF9lZHggJgotCSAgICAgICBvcHRfY3B1aWRfbWFza194 c2F2ZV9lYXgpKQotCQlyZXR1cm47CisvKiBJbmRpY2VzIG9mIHRoZSBtYXNraW5nIE1TUnMsIG9y IDAgaWYgdW5hdmFpbGFibGUuICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkg bXNyX2Jhc2ljLCBfX3JlYWRfbW9zdGx5IG1zcl9leHQsCisJX19yZWFkX21vc3RseSBtc3JfeHNh dmU7CisKKy8qCisgKiBQcm9iZSBmb3IgdGhlIGV4aXN0YW5jZSBvZiB0aGUgZXhwZWN0ZWQgbWFz a2luZyBNU1JzLiAgVGhleSBtaWdodCBlYXNpbHkKKyAqIG5vdCBiZSBhdmFpbGFibGUgaWYgWGVu IGlzIHJ1bm5pbmcgdmlydHVhbGlzZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwcm9iZV9t YXNraW5nX21zcnModm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmYm9v dF9jcHVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgZXhwX21zcl9iYXNpYywgZXhwX21zcl9leHQsIGV4 cF9tc3JfeHNhdmU7CiAKIAkvKiBPbmx5IGZhbWlseSA2IHN1cHBvcnRzIHRoaXMgZmVhdHVyZS4g Ki8KLQlpZiAoYy0+eDg2ICE9IDYpIHsKLQkJcHJpbnRrKCJObyBDUFVJRCBmZWF0dXJlIG1hc2tp bmcgc3VwcG9ydCBhdmFpbGFibGVcbiIpOworCWlmIChjLT54ODYgIT0gNikKIAkJcmV0dXJuOwot CX0KIAogCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CiAJY2FzZSAweDE3OiAvKiBZb3JrZmllbGQs IFdvbGZkYWxlLCBQZW5yeW4sIEhhcnBlcnRvd24oRFApICovCkBAIC0xMDAsNTkgKzExMSwxMjEg QEAgc3RhdGljIHZvaWQgc2V0X2NwdWlkbWFzayhjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMp CiAJCWJyZWFrOwogCX0KIAotCXN0YXR1cyA9IHNldF9tYXNrOworCWV4cF9tc3JfYmFzaWMgPSBt c3JfYmFzaWM7CisJZXhwX21zcl9leHQgICA9IG1zcl9leHQ7CisJZXhwX21zcl94c2F2ZSA9IG1z cl94c2F2ZTsKIAotCWlmICh+KG9wdF9jcHVpZF9tYXNrX2VjeCAmIG9wdF9jcHVpZF9tYXNrX2Vk eCkpIHsKLQkJaWYgKG1zcl9iYXNpYykKLQkJCXByaW50aygiV3JpdGluZyBDUFVJRCBmZWF0dXJl IG1hc2sgZWN4OmVkeCAtPiAlMDh4OiUwOHhcbiIsCi0JCQkgICAgICAgb3B0X2NwdWlkX21hc2tf ZWN4LCBvcHRfY3B1aWRfbWFza19lZHgpOwotCQllbHNlCi0JCQlwcmludGsoIk5vIENQVUlEIGZl YXR1cmUgbWFzayBhdmFpbGFibGVcbiIpOwotCX0KLQllbHNlCi0JCW1zcl9iYXNpYyA9IDA7Ci0K LQlpZiAofihvcHRfY3B1aWRfbWFza19leHRfZWN4ICYgb3B0X2NwdWlkX21hc2tfZXh0X2VkeCkp IHsKLQkJaWYgKG1zcl9leHQpCi0JCQlwcmludGsoIldyaXRpbmcgQ1BVSUQgZXh0ZW5kZWQgZmVh dHVyZSBtYXNrIGVjeDplZHggLT4gJTA4eDolMDh4XG4iLAotCQkJICAgICAgIG9wdF9jcHVpZF9t YXNrX2V4dF9lY3gsIG9wdF9jcHVpZF9tYXNrX2V4dF9lZHgpOwotCQllbHNlCi0JCQlwcmludGso Ik5vIENQVUlEIGV4dGVuZGVkIGZlYXR1cmUgbWFzayBhdmFpbGFibGVcbiIpOwotCX0KLQllbHNl Ci0JCW1zcl9leHQgPSAwOwotCi0JaWYgKH5vcHRfY3B1aWRfbWFza194c2F2ZV9lYXgpIHsKLQkJ aWYgKG1zcl94c2F2ZSkKLQkJCXByaW50aygiV3JpdGluZyBDUFVJRCB4c2F2ZSBmZWF0dXJlIG1h c2sgZWF4IC0+ICUwOHhcbiIsCi0JCQkgICAgICAgb3B0X2NwdWlkX21hc2tfeHNhdmVfZWF4KTsK LQkJZWxzZQotCQkJcHJpbnRrKCJObyBDUFVJRCB4c2F2ZSBmZWF0dXJlIG1hc2sgYXZhaWxhYmxl XG4iKTsKKwlpZiAobXNyX2Jhc2ljKQorCQljcHVpZG1hc2tfZGVmYXVsdHMuXzFjZCA9IF9wcm9i ZV9tYXNrX21zcigmbXNyX2Jhc2ljLCBMQ0FQXzFjZCk7CisKKwlpZiAobXNyX2V4dCkKKwkJY3B1 aWRtYXNrX2RlZmF1bHRzLmUxY2QgPSBfcHJvYmVfbWFza19tc3IoJm1zcl9leHQsIExDQVBfZTFj ZCk7CisKKwlpZiAobXNyX3hzYXZlKQorCQljcHVpZG1hc2tfZGVmYXVsdHMuRGExID0gX3Byb2Jl X21hc2tfbXNyKCZtc3JfeHNhdmUsIExDQVBfRGExKTsKKworCS8qCisJICogRG9uJ3QgYm90aGVy IHdhcm5pbmcgYWJvdXQgYSBtaXNtYXRjaCBpZiB2aXJ0dWFsaXNlZC4gIFRoZXNlIE1TUnMKKwkg KiBhcmUgbm90IGFyY2hpdGVjdHVyYWwgYW5kIGFsbW9zdCBuZXZlciB2aXJ0dWFsaXNlZC4KKwkg Ki8KKwlpZiAoKGV4cGVjdGVkX2xldmVsbGluZ19jYXAgPT0gbGV2ZWxsaW5nX2NhcHMpIHx8CisJ ICAgIGNwdV9oYXNfaHlwZXJ2aXNvcikKKwkJcmV0dXJuOworCisJcHJpbnRrKFhFTkxPR19XQVJO SU5HICJNaXNtYXRjaCBiZXR3ZWVuIGV4cGVjdGVkICglI3gpICIKKwkgICAgICAgImFuZCByZWFs ICglI3gpIGxldmVsbGluZyBjYXBzOiBtaXNzaW5nICUjeFxuIiwKKwkgICAgICAgZXhwZWN0ZWRf bGV2ZWxsaW5nX2NhcCwgbGV2ZWxsaW5nX2NhcHMsCisJICAgICAgIChleHBlY3RlZF9sZXZlbGxp bmdfY2FwIF4gbGV2ZWxsaW5nX2NhcHMpICYgbGV2ZWxsaW5nX2NhcHMpOworCXByaW50ayhYRU5M T0dfV0FSTklORyAiRmFtICUjeCwgbW9kZWwgJSN4IGV4cGVjdGVkICglI3gvJSN4LyUjeCksICIK KwkgICAgICAgImdvdCAoJSN4LyUjeC8lI3gpXG4iLCBjLT54ODYsIGMtPng4Nl9tb2RlbCwKKwkg ICAgICAgZXhwX21zcl9iYXNpYywgZXhwX21zcl9leHQsIGV4cF9tc3JfeHNhdmUsCisJICAgICAg IG1zcl9iYXNpYywgbXNyX2V4dCwgbXNyX3hzYXZlKTsKKwlwcmludGsoWEVOTE9HX1dBUk5JTkcK KwkgICAgICAgIklmIG5vdCBydW5uaW5nIHZpcnR1YWxpc2VkLCBwbGVhc2UgcmVwb3J0IGEgYnVn XG4iKTsKK30KKworLyoKKyAqIENvbnRleHQgc3dpdGNoIGxldmVsbGluZyBzdGF0ZSB0byB0aGUg bmV4dCBkb21haW4uICBBIHBhcmFtZXRlciBvZiBOVUxMIGlzCisgKiB1c2VkIHRvIGNvbnRleHQg c3dpdGNoIHRvIHRoZSBkZWZhdWx0IGhvc3Qgc3RhdGUsIGFuZCBpcyB1c2VkIGJ5IHRoZSBCU1Av QVAKKyAqIHN0YXJ0dXAgY29kZS4KKyAqLworc3RhdGljIHZvaWQgaW50ZWxfY3R4dF9zd2l0Y2hf bGV2ZWxsaW5nKGNvbnN0IHN0cnVjdCBkb21haW4gKm5leHRkKQoreworCXN0cnVjdCBjcHVpZG1h c2tzICp0aGVzZV9tYXNrcyA9ICZ0aGlzX2NwdShjcHVpZG1hc2tzKTsKKwljb25zdCBzdHJ1Y3Qg Y3B1aWRtYXNrcyAqbWFza3MgPSAmY3B1aWRtYXNrX2RlZmF1bHRzOworCisjZGVmaW5lIExBWlko bXNyLCBmaWVsZCkJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJaWYgKHVubGlrZWx5KHRoZXNlX21h c2tzLT5maWVsZCAhPSBtYXNrcy0+ZmllbGQpICYmCVwKKwkJICAgIChtc3IpKQkJCQkJCVwKKwkJ ewkJCQkJCQlcCisJCQl3cm1zcmwoKG1zciksIG1hc2tzLT5maWVsZCk7CQkJXAorCQkJdGhlc2Vf bWFza3MtPmZpZWxkID0gbWFza3MtPmZpZWxkOwkJXAorCQl9CQkJCQkJCVwKKwl9KQorCisJTEFa WShtc3JfYmFzaWMsIF8xY2QpOworCUxBWlkobXNyX2V4dCwgICBlMWNkKTsKKwlMQVpZKG1zcl94 c2F2ZSwgRGExKTsKKworI3VuZGVmIExBWlkKK30KKworLyoKKyAqIG9wdF9jcHVpZF9tYXNrX2Vj eC9lZHg6IGNwdWlkLjFbZWN4LCBlZHhdIGZlYXR1cmUgbWFzay4KKyAqIEZvciBleGFtcGxlLCBF ODQwMFtJbnRlbCBDb3JlIDIgRHVvIFByb2Nlc3NvciBzZXJpZXNdIGVjeCA9IDB4MDAwOEUzRkQs CisgKiBlZHggPSAweEJGRUJGQkZGIHdoZW4gZXhlY3V0aW5nIENQVUlELkVBWCA9IDEgbm9ybWFs bHkuIElmIHlvdSB3YW50IHRvCisgKiAncmV2IGRvd24nIHRvIEU4NDAwLCB5b3UgY2FuIHNldCB0 aGVzZSB2YWx1ZXMgaW4gdGhlc2UgWGVuIGJvb3QgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIHZv aWQgX19pbml0IG5vaW5saW5lIGludGVsX2luaXRfbGV2ZWxsaW5nKHZvaWQpCit7CisJaWYgKCFw cm9iZV9pbnRlbF9jcHVpZF9mYXVsdGluZygpKQorCQlwcm9iZV9tYXNraW5nX21zcnMoKTsKKwor CWlmIChtc3JfYmFzaWMpIHsKKwkJdWludDMyX3QgZWN4LCBlZHgsIHRtcDsKKworCQljcHVpZCgw eDAwMDAwMDAxLCAmdG1wLCAmdG1wLCAmZWN4LCAmZWR4KTsKKworCQllY3ggJj0gb3B0X2NwdWlk X21hc2tfZWN4OworCQllZHggJj0gb3B0X2NwdWlkX21hc2tfZWR4OworCisJCWNwdWlkbWFza19k ZWZhdWx0cy5fMWNkICY9ICgodTY0KWVkeCA8PCAzMikgfCBlY3g7CiAJfQotCWVsc2UKLQkJbXNy X3hzYXZlID0gMDsKLQotIHNldG1hc2s6Ci0JaWYgKG1zcl9iYXNpYyAmJgotCSAgICB3cm1zcl9z YWZlKG1zcl9iYXNpYywKLQkJICAgICAgICgodTY0KW9wdF9jcHVpZF9tYXNrX2VkeCA8PCAzMikg fCBvcHRfY3B1aWRfbWFza19lY3gpKXsKLQkJbXNyX2Jhc2ljID0gMDsKLQkJcHJpbnRrKCJGYWls ZWQgdG8gc2V0IENQVUlEIGZlYXR1cmUgbWFza1xuIik7CisKKwlpZiAobXNyX2V4dCkgeworCQl1 aW50MzJfdCBlY3gsIGVkeCwgdG1wOworCisJCWNwdWlkKDB4ODAwMDAwMDEsICZ0bXAsICZ0bXAs ICZlY3gsICZlZHgpOworCisJCWVjeCAmPSBvcHRfY3B1aWRfbWFza19leHRfZWN4OworCQllZHgg Jj0gb3B0X2NwdWlkX21hc2tfZXh0X2VkeDsKKworCQljcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCAm PSAoKHU2NCllZHggPDwgMzIpIHwgZWN4OwogCX0KIAotCWlmIChtc3JfZXh0ICYmCi0JICAgIHdy bXNyX3NhZmUobXNyX2V4dCwKLQkJICAgICAgICgodTY0KW9wdF9jcHVpZF9tYXNrX2V4dF9lZHgg PDwgMzIpIHwgb3B0X2NwdWlkX21hc2tfZXh0X2VjeCkpewotCQltc3JfZXh0ID0gMDsKLQkJcHJp bnRrKCJGYWlsZWQgdG8gc2V0IENQVUlEIGV4dGVuZGVkIGZlYXR1cmUgbWFza1xuIik7CisJaWYg KG1zcl94c2F2ZSkgeworCQl1aW50MzJfdCBlYXgsIHRtcDsKKworCQljcHVpZF9jb3VudCgweDAw MDAwMDBkLCAxLCAmZWF4LCAmdG1wLCAmdG1wLCAmdG1wKTsKKworCQllYXggJj0gb3B0X2NwdWlk X21hc2tfeHNhdmVfZWF4OworCisJCWNwdWlkbWFza19kZWZhdWx0cy5EYTEgJj0gKH4wVUxMIDw8 IDMyKSB8IGVheDsKIAl9CiAKLQlpZiAobXNyX3hzYXZlICYmCi0JICAgIChyZG1zcl9zYWZlKG1z cl94c2F2ZSwgbXNyX3ZhbCkgfHwKLQkgICAgIHdybXNyX3NhZmUobXNyX3hzYXZlLAotCQkJKG1z cl92YWwgJiAofjBVTEwgPDwgMzIpKSB8IG9wdF9jcHVpZF9tYXNrX3hzYXZlX2VheCkpKXsKLQkJ bXNyX3hzYXZlID0gMDsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0IENQVUlEIHhzYXZlIGZlYXR1 cmUgbWFza1xuIik7CisJaWYgKG9wdF9jcHVfaW5mbykgeworCQlwcmludGsoWEVOTE9HX0lORk8g IkxldmVsbGluZyBjYXBzOiAlI3hcbiIsIGxldmVsbGluZ19jYXBzKTsKKworCQlpZiAoIWNwdV9o YXNfY3B1aWRfZmF1bHRpbmcpCisJCQlwcmludGsoWEVOTE9HX0lORk8KKwkJCSAgICAgICAiTVNS IGRlZmF1bHRzOiAxZCAweCUwOHgsIDFjIDB4JTA4eCwgZTFkIDB4JTA4eCwgIgorCQkJICAgICAg ICJlMWMgMHglMDh4LCBEYTEgMHglMDh4XG4iLAorCQkJICAgICAgICh1aW50MzJfdCkoY3B1aWRt YXNrX2RlZmF1bHRzLl8xY2QgPj4gMzIpLAorCQkJICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tf ZGVmYXVsdHMuXzFjZCwKKwkJCSAgICAgICAodWludDMyX3QpKGNwdWlkbWFza19kZWZhdWx0cy5l MWNkID4+IDMyKSwKKwkJCSAgICAgICAodWludDMyX3QpY3B1aWRtYXNrX2RlZmF1bHRzLmUxY2Qs CisJCQkgICAgICAgKHVpbnQzMl90KWNwdWlkbWFza19kZWZhdWx0cy5EYTEpOwogCX0KIH0KIApA QCAtMTkwLDIyICsyNjMsMTMgQEAgc3RhdGljIHZvaWQgZWFybHlfaW5pdF9pbnRlbChzdHJ1Y3Qg Y3B1aW5mb194ODYgKmMpCiAJICAgIChib290X2NwdV9kYXRhLng4Nl9tYXNrID09IDMgfHwgYm9v dF9jcHVfZGF0YS54ODZfbWFzayA9PSA0KSkKIAkJcGFkZHJfYml0cyA9IDM2OwogCi0JaWYgKGMg PT0gJmJvb3RfY3B1X2RhdGEgJiYgYy0+eDg2ID09IDYpIHsKLQkJaWYgKHByb2JlX2ludGVsX2Nw dWlkX2ZhdWx0aW5nKCkpCi0JCQlfX3NldF9iaXQoWDg2X0ZFQVRVUkVfQ1BVSURfRkFVTFRJTkcs Ci0JCQkJICBjLT54ODZfY2FwYWJpbGl0eSk7Ci0JfSBlbHNlIGlmIChib290X2NwdV9oYXMoWDg2 X0ZFQVRVUkVfQ1BVSURfRkFVTFRJTkcpKSB7Ci0JCUJVR19PTighcHJvYmVfaW50ZWxfY3B1aWRf ZmF1bHRpbmcoKSk7CisJaWYgKGMgPT0gJmJvb3RfY3B1X2RhdGEpCisJCWludGVsX2luaXRfbGV2 ZWxsaW5nKCk7CisKKwlpZiAodGVzdF9iaXQoWDg2X0ZFQVRVUkVfQ1BVSURfRkFVTFRJTkcsIGJv b3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpKQogCQlfX3NldF9iaXQoWDg2X0ZFQVRVUkVfQ1BV SURfRkFVTFRJTkcsIGMtPng4Nl9jYXBhYmlsaXR5KTsKLQl9CiAKLQlpZiAoIWNwdV9oYXNfY3B1 aWRfZmF1bHRpbmcpCi0JCXNldF9jcHVpZG1hc2soYyk7Ci0JZWxzZSBpZiAoKGMgPT0gJmJvb3Rf Y3B1X2RhdGEpICYmCi0JCSAofihvcHRfY3B1aWRfbWFza19lY3ggJiBvcHRfY3B1aWRfbWFza19l ZHggJgotCQkgICAgb3B0X2NwdWlkX21hc2tfZXh0X2VjeCAmIG9wdF9jcHVpZF9tYXNrX2V4dF9l ZHggJgotCQkgICAgb3B0X2NwdWlkX21hc2tfeHNhdmVfZWF4KSkpCi0JCXByaW50aygiTm8gQ1BV SUQgZmVhdHVyZSBtYXNraW5nIHN1cHBvcnQgYXZhaWxhYmxlXG4iKTsKKwlpbnRlbF9jdHh0X3N3 aXRjaF9sZXZlbGxpbmcoTlVMTCk7CiB9CiAKIC8qCi0tIAoyLjEuNAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==