From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v3 16/28] x86/cpu: Rework AMD masking MSR setup Date: Tue, 15 Mar 2016 15:35:12 +0000 Message-ID: <1458056124-8024-17-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 IGhhcmR3YXJlIGRlZmF1bHRzLgoKVGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFyZSB0aGVu IGNvbWJpbmVkIHdpdGggdGhlIGhhcmR3YXJlIGRlZmF1bHRzIHRvCmZ1cnRoZXIgcmVzdHJpY3Qg dGhlIFhlbiBkZWZhdWx0IG1hc2tpbmcgbGV2ZWwuICBFYWNoIGNwdSBpcyB0aGVuIGNvbnRleHQK c3dpdGNoZWQgaW50byB0aGUgZGVmYXVsdCBsZXZlbGxpbmcgc3RhdGUuCgpTaWduZWQtb2ZmLWJ5 OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgotLS0KQ0M6IEphbiBC ZXVsaWNoIDxKQmV1bGljaEBzdXNlLmNvbT4KCnYzOgogKiBGaXggdGhlIGludGVyYWN0aW9uIG9m IHRoZSBmYXN0LWZvcndhcmQgYml0cyB3aXRoIHRoZSBvdmVycmlkZSBNU1JzLgogKiBTdHlsZSBm aXh1cHMuCnYyOgogKiBQcm92aWRlIGV4dHJhIGluZm9ybWF0aW9uIGlmIG9wdF9jcHVfaW5mbwog KiBFeHRyYSBjb21tZW50IGluZGljYXRpbmcgdGhlIGV4cGVjdGVkIHVzZSBvZiBhbWRfY3R4dF9z d2l0Y2hfbGV2ZWxsaW5nKCkKLS0tCiB4ZW4vYXJjaC94ODYvY3B1L2FtZC5jIHwgMjc2ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCAxNzkgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVu L2FyY2gveDg2L2NwdS9hbWQuYyBiL3hlbi9hcmNoL3g4Ni9jcHUvYW1kLmMKaW5kZXggNTUxNjc3 Ny4uMGUxYzhiOSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2NwdS9hbWQuYworKysgYi94ZW4v YXJjaC94ODYvY3B1L2FtZC5jCkBAIC04MCw2ICs4MCwxMyBAQCBzdGF0aWMgaW5saW5lIGludCB3 cm1zcl9hbWRfc2FmZSh1bnNpZ25lZCBpbnQgbXNyLCB1bnNpZ25lZCBpbnQgbG8sCiAJcmV0dXJu IGVycjsKIH0KIAorc3RhdGljIHZvaWQgd3Jtc3JfYW1kKHVuc2lnbmVkIGludCBtc3IsIHVpbnQ2 NF90IHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIndybXNyIiA6OgorCQkgICAgICJjIiAobXNyKSwg ImEiICgodWludDMyX3QpdmFsKSwKKwkJICAgICAiZCIgKHZhbCA+PiAzMiksICJEIiAoMHg5YzVh MjAzYSkpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkbWFzayB7CiAJdWludDE2X3Qg ZmFtOwogCWNoYXIgcmV2WzJdOwpAQCAtMTI2LDEyNiArMTMzLDE5OCBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGNwdWlkbWFzayAqX19pbml0IG5vaW5saW5lIGdldF9jcHVpZG1hc2soY29uc3QgY2hh ciAqb3B0KQogfQogCiAvKgorICogU2V0cyBjYXBzIGluIGV4cGVjdGVkX2xldmVsbGluZ19jYXAs IHByb2JlcyBmb3IgdGhlIHNwZWNpZmllZCBtYXNrIE1TUiwgYW5kCisgKiBzZXQgY2FwcyBpbiBs ZXZlbGxpbmdfY2FwcyBpZiBpdCBpcyBmb3VuZC4gIFByb2Nlc3NvcnMgcHJpb3IgdG8gRmFtIDEw aAorICogcmVxdWlyZWQgYSAzMi1iaXQgcGFzc3dvcmQgZm9yIG1hc2tpbmcgTVNScy4gIFJldHVy bnMgdGhlIGRlZmF1bHQgdmFsdWUuCisgKi8KK3N0YXRpYyB1aW50NjRfdCBfX2luaXQgX3Byb2Jl X21hc2tfbXNyKHVuc2lnbmVkIGludCBtc3IsIHVpbnQ2NF90IGNhcHMpCit7CisJdW5zaWduZWQg aW50IGhpLCBsbzsKKworCWV4cGVjdGVkX2xldmVsbGluZ19jYXAgfD0gY2FwczsKKworCWlmICgo cmRtc3JfYW1kX3NhZmUobXNyLCAmbG8sICZoaSkgPT0gMCkgJiYKKwkgICAgKHdybXNyX2FtZF9z YWZlKG1zciwgbG8sIGhpKSA9PSAwKSkKKwkJbGV2ZWxsaW5nX2NhcHMgfD0gY2FwczsKKworCXJl dHVybiAoKHVpbnQ2NF90KWhpIDw8IDMyKSB8IGxvOworfQorCisvKgorICogUHJvYmUgZm9yIHRo ZSBleGlzdGFuY2Ugb2YgdGhlIGV4cGVjdGVkIG1hc2tpbmcgTVNScy4gIFRoZXkgbWlnaHQgZWFz aWx5CisgKiBub3QgYmUgYXZhaWxhYmxlIGlmIFhlbiBpcyBydW5uaW5nIHZpcnR1YWxpc2VkLgor ICovCitzdGF0aWMgdm9pZCBfX2luaXQgbm9pbmxpbmUgcHJvYmVfbWFza2luZ19tc3JzKHZvaWQp Cit7CisJY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CisKKwkv KgorCSAqIEZpcnN0LCB3b3JrIG91dCB3aGljaCBtYXNraW5nIE1TUnMgd2Ugc2hvdWxkIGhhdmUs IGJhc2VkIG9uCisJICogcmV2aXNpb24gYW5kIGNwdWlkLgorCSAqLworCisJLyogRmFtMTEgZG9l c24ndCBzdXBwb3J0IG1hc2tpbmcgYXQgYWxsLiAqLworCWlmIChjLT54ODYgPT0gMHgxMSkKKwkJ cmV0dXJuOworCisJY3B1aWRtYXNrX2RlZmF1bHRzLl8xY2QgPQorCQlfcHJvYmVfbWFza19tc3Io TVNSX0s4X0ZFQVRVUkVfTUFTSywgTENBUF8xY2QpOworCWNwdWlkbWFza19kZWZhdWx0cy5lMWNk ID0KKwkJX3Byb2JlX21hc2tfbXNyKE1TUl9LOF9FWFRfRkVBVFVSRV9NQVNLLCBMQ0FQX2UxY2Qp OworCisJaWYgKGMtPmNwdWlkX2xldmVsID49IDcpCisJCWNwdWlkbWFza19kZWZhdWx0cy5fN2Fi MCA9CisJCQlfcHJvYmVfbWFza19tc3IoTVNSX0FNRF9MN1MwX0ZFQVRVUkVfTUFTSywgTENBUF83 YWIwKTsKKworCWlmIChjLT54ODYgPT0gMHgxNSAmJiBjLT5jcHVpZF9sZXZlbCA+PSA2ICYmIGNw dWlkX2VjeCg2KSkKKwkJY3B1aWRtYXNrX2RlZmF1bHRzLl82YyA9CisJCQlfcHJvYmVfbWFza19t c3IoTVNSX0FNRF9USFJNX0ZFQVRVUkVfTUFTSywgTENBUF82Yyk7CisKKwkvKgorCSAqIERvbid0 IGJvdGhlciB3YXJuaW5nIGFib3V0IGEgbWlzbWF0Y2ggaWYgdmlydHVhbGlzZWQuICBUaGVzZSBN U1JzCisJICogYXJlIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBhbG1vc3QgbmV2ZXIgdmlydHVhbGlz ZWQuCisJICovCisJaWYgKChleHBlY3RlZF9sZXZlbGxpbmdfY2FwID09IGxldmVsbGluZ19jYXBz KSB8fAorCSAgICBjcHVfaGFzX2h5cGVydmlzb3IpCisJCXJldHVybjsKKworCXByaW50ayhYRU5M T0dfV0FSTklORyAiTWlzbWF0Y2ggYmV0d2VlbiBleHBlY3RlZCAoJSN4KSAiCisJICAgICAgICJh bmQgcmVhbCAoJSN4KSBsZXZlbGxpbmcgY2FwczogbWlzc2luZyAlI3hcbiIsCisJICAgICAgIGV4 cGVjdGVkX2xldmVsbGluZ19jYXAsIGxldmVsbGluZ19jYXBzLAorCSAgICAgICAoZXhwZWN0ZWRf bGV2ZWxsaW5nX2NhcCBeIGxldmVsbGluZ19jYXBzKSAmIGxldmVsbGluZ19jYXBzKTsKKwlwcmlu dGsoWEVOTE9HX1dBUk5JTkcgIkZhbSAlI3gsIG1vZGVsICUjeCBsZXZlbCAlI3hcbiIsCisJICAg ICAgIGMtPng4NiwgYy0+eDg2X21vZGVsLCBjLT5jcHVpZF9sZXZlbCk7CisJcHJpbnRrKFhFTkxP R19XQVJOSU5HCisJICAgICAgICJJZiBub3QgcnVubmluZyB2aXJ0dWFsaXNlZCwgcGxlYXNlIHJl cG9ydCBhIGJ1Z1xuIik7Cit9CisKKy8qCisgKiBDb250ZXh0IHN3aXRjaCBsZXZlbGxpbmcgc3Rh dGUgdG8gdGhlIG5leHQgZG9tYWluLiAgQSBwYXJhbWV0ZXIgb2YgTlVMTCBpcworICogdXNlZCB0 byBjb250ZXh0IHN3aXRjaCB0byB0aGUgZGVmYXVsdCBob3N0IHN0YXRlLCBhbmQgaXMgdXNlZCBi eSB0aGUgQlNQL0FQCisgKiBzdGFydHVwIGNvZGUuCisgKi8KK3N0YXRpYyB2b2lkIGFtZF9jdHh0 X3N3aXRjaF9sZXZlbGxpbmcoY29uc3Qgc3RydWN0IGRvbWFpbiAqbmV4dGQpCit7CisJc3RydWN0 IGNwdWlkbWFza3MgKnRoZXNlX21hc2tzID0gJnRoaXNfY3B1KGNwdWlkbWFza3MpOworCWNvbnN0 IHN0cnVjdCBjcHVpZG1hc2tzICptYXNrcyA9ICZjcHVpZG1hc2tfZGVmYXVsdHM7CisKKyNkZWZp bmUgTEFaWShjYXAsIG1zciwgZmllbGQpCQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCWlmICh1bmxp a2VseSh0aGVzZV9tYXNrcy0+ZmllbGQgIT0gbWFza3MtPmZpZWxkKSAmJglcCisJCSAgICAoKGxl dmVsbGluZ19jYXBzICYgY2FwKSA9PSBjYXApKQkJCVwKKwkJewkJCQkJCQlcCisJCQl3cm1zcl9h bWQobXNyLCBtYXNrcy0+ZmllbGQpOwkJCVwKKwkJCXRoZXNlX21hc2tzLT5maWVsZCA9IG1hc2tz LT5maWVsZDsJCVwKKwkJfQkJCQkJCQlcCisJfSkKKworCUxBWlkoTENBUF8xY2QsICBNU1JfSzhf RkVBVFVSRV9NQVNLLCAgICAgICBfMWNkKTsKKwlMQVpZKExDQVBfZTFjZCwgTVNSX0s4X0VYVF9G RUFUVVJFX01BU0ssICAgZTFjZCk7CisJTEFaWShMQ0FQXzdhYjAsIE1TUl9BTURfTDdTMF9GRUFU VVJFX01BU0ssIF83YWIwKTsKKwlMQVpZKExDQVBfNmMsICAgTVNSX0FNRF9USFJNX0ZFQVRVUkVf TUFTSywgXzZjKTsKKworI3VuZGVmIExBWlkKK30KKworLyoKICAqIE1hc2sgdGhlIGZlYXR1cmVz IGFuZCBleHRlbmRlZCBmZWF0dXJlcyByZXR1cm5lZCBieSBDUFVJRC4gIFBhcmFtZXRlcnMgYXJl CiAgKiBzZXQgZnJvbSB0aGUgYm9vdCBsaW5lIHZpYSB0d28gbWV0aG9kczoKICAqCiAgKiAgIDEp IFNwZWNpZmljIHByb2Nlc3NvciByZXZpc2lvbiBzdHJpbmcKICAqICAgMikgVXNlci1kZWZpbmVk IG1hc2tzCiAgKgotICogVGhlIHByb2Nlc3NvciByZXZpc2lvbiBzdHJpbmcgcGFyYW1ldGVyIGhh cyBwcmVjZWRlbmUuCisgKiBUaGUgdXNlci1kZWZpbmVkIG1hc2tzIHRha2UgcHJlY2VkZW5jZS4K ICAqLwotc3RhdGljIHZvaWQgc2V0X2NwdWlkbWFzayhjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYg KmMpCitzdGF0aWMgdm9pZCBfX2luaXQgbm9pbmxpbmUgYW1kX2luaXRfbGV2ZWxsaW5nKHZvaWQp CiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBmZWF0X2VjeCwgZmVhdF9lZHg7Ci0Jc3RhdGljIHVu c2lnbmVkIGludCBleHRmZWF0X2VjeCwgZXh0ZmVhdF9lZHg7Ci0Jc3RhdGljIHVuc2lnbmVkIGlu dCBsN3MwX2VheCwgbDdzMF9lYng7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCB0aGVybWFsX2VjeDsK LQlzdGF0aWMgYm9vbF90IHNraXBfZmVhdCwgc2tpcF9leHRmZWF0OwotCXN0YXRpYyBib29sX3Qg c2tpcF9sN3MwX2VheF9lYngsIHNraXBfdGhlcm1hbF9lY3g7Ci0Jc3RhdGljIGVudW0geyBub3Rf cGFyc2VkLCBub19tYXNrLCBzZXRfbWFzayB9IHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgZWF4LCBl YngsIGVjeCwgZWR4OwotCi0JaWYgKHN0YXR1cyA9PSBub19tYXNrKQotCQlyZXR1cm47CisJY29u c3Qgc3RydWN0IGNwdWlkbWFzayAqbSA9IE5VTEw7CiAKLQlpZiAoc3RhdHVzID09IHNldF9tYXNr KQotCQlnb3RvIHNldG1hc2s7CisJcHJvYmVfbWFza2luZ19tc3JzKCk7CiAKLQlBU1NFUlQoKHN0 YXR1cyA9PSBub3RfcGFyc2VkKSAmJiAoYyA9PSAmYm9vdF9jcHVfZGF0YSkpOwotCXN0YXR1cyA9 IG5vX21hc2s7CisJaWYgKCpvcHRfZmFtcmV2ICE9ICdcMCcpIHsKKwkJbSA9IGdldF9jcHVpZG1h c2sob3B0X2ZhbXJldik7CiAKLQkvKiBGYW0xMSBkb2Vzbid0IHN1cHBvcnQgbWFza2luZyBhdCBh bGwuICovCi0JaWYgKGMtPng4NiA9PSAweDExKQotCQlyZXR1cm47CisJCWlmICghbSkKKwkJCXBy aW50aygiSW52YWxpZCBwcm9jZXNzb3Igc3RyaW5nOiAlc1xuIiwgb3B0X2ZhbXJldik7CisJfQog Ci0JaWYgKH4ob3B0X2NwdWlkX21hc2tfZWN4ICYgb3B0X2NwdWlkX21hc2tfZWR4ICYKLQkgICAg ICBvcHRfY3B1aWRfbWFza19leHRfZWN4ICYgb3B0X2NwdWlkX21hc2tfZXh0X2VkeCAmCi0JICAg ICAgb3B0X2NwdWlkX21hc2tfbDdzMF9lYXggJiBvcHRfY3B1aWRfbWFza19sN3MwX2VieCAmCi0J ICAgICAgb3B0X2NwdWlkX21hc2tfdGhlcm1hbF9lY3gpKSB7Ci0JCWZlYXRfZWN4ID0gb3B0X2Nw dWlkX21hc2tfZWN4OwotCQlmZWF0X2VkeCA9IG9wdF9jcHVpZF9tYXNrX2VkeDsKLQkJZXh0ZmVh dF9lY3ggPSBvcHRfY3B1aWRfbWFza19leHRfZWN4OwotCQlleHRmZWF0X2VkeCA9IG9wdF9jcHVp ZF9tYXNrX2V4dF9lZHg7Ci0JCWw3czBfZWF4ID0gb3B0X2NwdWlkX21hc2tfbDdzMF9lYXg7Ci0J CWw3czBfZWJ4ID0gb3B0X2NwdWlkX21hc2tfbDdzMF9lYng7Ci0JCXRoZXJtYWxfZWN4ID0gb3B0 X2NwdWlkX21hc2tfdGhlcm1hbF9lY3g7Ci0JfSBlbHNlIGlmICgqb3B0X2ZhbXJldiA9PSAnXDAn KSB7Ci0JCXJldHVybjsKLQl9IGVsc2UgewotCQljb25zdCBzdHJ1Y3QgY3B1aWRtYXNrICptID0g Z2V0X2NwdWlkbWFzayhvcHRfZmFtcmV2KTsKKwlpZiAoKGxldmVsbGluZ19jYXBzICYgTENBUF8x Y2QpID09IExDQVBfMWNkKSB7CisJCXVpbnQzMl90IGVjeCwgZWR4LCB0bXA7CiAKLQkJaWYgKCFt KSB7Ci0JCQlwcmludGsoIkludmFsaWQgcHJvY2Vzc29yIHN0cmluZzogJXNcbiIsIG9wdF9mYW1y ZXYpOwotCQkJcHJpbnRrKCJDUFVJRCB3aWxsIG5vdCBiZSBtYXNrZWRcbiIpOwotCQkJcmV0dXJu OworCQljcHVpZCgweDAwMDAwMDAxLCAmdG1wLCAmdG1wLCAmZWN4LCAmZWR4KTsKKworCQlpZih+ KG9wdF9jcHVpZF9tYXNrX2VjeCAmIG9wdF9jcHVpZF9tYXNrX2VkeCkpIHsKKwkJCWVjeCAmPSBv cHRfY3B1aWRfbWFza19lY3g7CisJCQllZHggJj0gb3B0X2NwdWlkX21hc2tfZWR4OworCQl9IGVs c2UgaWYgKG0pIHsKKwkJCWVjeCAmPSBtLT5lY3g7CisJCQllZHggJj0gbS0+ZWR4OwogCQl9Ci0J CWZlYXRfZWN4ID0gbS0+ZWN4OwotCQlmZWF0X2VkeCA9IG0tPmVkeDsKLQkJZXh0ZmVhdF9lY3gg PSBtLT5leHRfZWN4OwotCQlleHRmZWF0X2VkeCA9IG0tPmV4dF9lZHg7CisKKwkJLyogRmFzdC1m b3J3YXJkIGJpdHMgLSBNdXN0IGJlIHNldC4gKi8KKwkJaWYgKGVjeCAmIGNwdWZlYXRfbWFzayhY ODZfRkVBVFVSRV9YU0FWRSkpCisJCQllY3ggfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX09T WFNBVkUpOworCQllZHggfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0FQSUMpOworCisJCS8q IEFsbG93IHRoZSBIWVBFUlZJU09SIGJpdCB0byBiZSBzZXQgdmlhIGd1ZXN0IHBvbGljeS4gKi8K KwkJZWN4IHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9IWVBFUlZJU09SKTsKKworCQljcHVp ZG1hc2tfZGVmYXVsdHMuXzFjZCA9ICgodWludDY0X3QpZWN4IDw8IDMyKSB8IGVkeDsKIAl9CiAK LSAgICAgICAgLyogU2V0dGluZyBiaXRzIGluIHRoZSBDUFVJRCBtYXNrIE1TUiB0aGF0IGFyZSBu b3Qgc2V0IGluIHRoZQotICAgICAgICAgKiB1bm1hc2tlZCBDUFVJRCByZXNwb25zZSBjYW4gY2F1 c2UgdGhvc2UgYml0cyB0byBiZSBzZXQgaW4gdGhlCi0gICAgICAgICAqIG1hc2tlZCByZXNwb25z ZS4gIEF2b2lkIHRoYXQgYnkgZXhwbGljaXRseSBtYXNraW5nIGluIHNvZnR3YXJlLiAqLwotICAg ICAgICBmZWF0X2VjeCAmPSBjcHVpZF9lY3goMHgwMDAwMDAwMSk7Ci0gICAgICAgIGZlYXRfZWR4 ICY9IGNwdWlkX2VkeCgweDAwMDAwMDAxKTsKLSAgICAgICAgZXh0ZmVhdF9lY3ggJj0gY3B1aWRf ZWN4KDB4ODAwMDAwMDEpOwotICAgICAgICBleHRmZWF0X2VkeCAmPSBjcHVpZF9lZHgoMHg4MDAw MDAwMSk7CisJaWYgKChsZXZlbGxpbmdfY2FwcyAmIExDQVBfZTFjZCkgPT0gTENBUF9lMWNkKSB7 CisJCXVpbnQzMl90IGVjeCwgZWR4LCB0bXA7CiAKLQlzdGF0dXMgPSBzZXRfbWFzazsKLQlwcmlu dGsoIldyaXRpbmcgQ1BVSUQgZmVhdHVyZSBtYXNrIEVDWDpFRFggLT4gJTA4WGg6JTA4WGhcbiIs IAotCSAgICAgICBmZWF0X2VjeCwgZmVhdF9lZHgpOwotCXByaW50aygiV3JpdGluZyBDUFVJRCBl eHRlbmRlZCBmZWF0dXJlIG1hc2sgRUNYOkVEWCAtPiAlMDhYaDolMDhYaFxuIiwgCi0JICAgICAg IGV4dGZlYXRfZWN4LCBleHRmZWF0X2VkeCk7CisJCWNwdWlkKDB4ODAwMDAwMDEsICZ0bXAsICZ0 bXAsICZlY3gsICZlZHgpOwogCi0JaWYgKGMtPmNwdWlkX2xldmVsID49IDcpCi0JCWNwdWlkX2Nv dW50KDcsIDAsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCWVsc2UKLQkJZWJ4ID0gZWF4ID0g MDsKLQlpZiAoKGVheCB8IGVieCkgJiYgfihsN3MwX2VheCAmIGw3czBfZWJ4KSkgewotCQlpZiAo bDdzMF9lYXggPiBlYXgpCi0JCQlsN3MwX2VheCA9IGVheDsKLQkJbDdzMF9lYnggJj0gZWJ4Owot CQlwcmludGsoIldyaXRpbmcgQ1BVSUQgbGVhZiA3IHN1YmxlYWYgMCBmZWF0dXJlIG1hc2sgRUFY OkVCWCAtPiAlMDhYaDolMDhYaFxuIiwKLQkJICAgICAgIGw3czBfZWF4LCBsN3MwX2VieCk7Ci0J fSBlbHNlCi0JCXNraXBfbDdzMF9lYXhfZWJ4ID0gMTsKLQotCS8qIE9ubHkgRmFtMTUgaGFzIHRo ZSByZXNwZWN0aXZlIE1TUi4gKi8KLQllY3ggPSBjLT54ODYgPT0gMHgxNSAmJiBjLT5jcHVpZF9s ZXZlbCA+PSA2ID8gY3B1aWRfZWN4KDYpIDogMDsKLQlpZiAoZWN4ICYmIH50aGVybWFsX2VjeCkg ewotCQl0aGVybWFsX2VjeCAmPSBlY3g7Ci0JCXByaW50aygiV3JpdGluZyBDUFVJRCB0aGVybWFs L3Bvd2VyIGZlYXR1cmUgbWFzayBFQ1ggLT4gJTA4WGhcbiIsCi0JCSAgICAgICB0aGVybWFsX2Vj eCk7Ci0JfSBlbHNlCi0JCXNraXBfdGhlcm1hbF9lY3ggPSAxOwotCi0gc2V0bWFzazoKLQkvKiBB TUQgcHJvY2Vzc29ycyBwcmlvciB0byBmYW1pbHkgMTBoIHJlcXVpcmVkIGEgMzItYml0IHBhc3N3 b3JkICovCi0JaWYgKCFza2lwX2ZlYXQgJiYKLQkgICAgd3Jtc3JfYW1kX3NhZmUoTVNSX0s4X0ZF QVRVUkVfTUFTSywgZmVhdF9lZHgsIGZlYXRfZWN4KSkgewotCQlza2lwX2ZlYXQgPSAxOwotCQlw cmludGsoIkZhaWxlZCB0byBzZXQgQ1BVSUQgZmVhdHVyZSBtYXNrXG4iKTsKKwkJaWYofihvcHRf Y3B1aWRfbWFza19leHRfZWN4ICYgb3B0X2NwdWlkX21hc2tfZXh0X2VkeCkpIHsKKwkJCWVjeCAm PSBvcHRfY3B1aWRfbWFza19leHRfZWN4OworCQkJZWR4ICY9IG9wdF9jcHVpZF9tYXNrX2V4dF9l ZHg7CisJCX0gZWxzZSBpZiAobSkgeworCQkJZWN4ICY9IG0tPmV4dF9lY3g7CisJCQllZHggJj0g bS0+ZXh0X2VkeDsKKwkJfQorCisJCS8qIEZhc3QtZm9yd2FyZCBiaXRzIC0gTXVzdCBiZSBzZXQu ICovCisJCWVkeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQVBJQyk7CisKKwkJY3B1aWRt YXNrX2RlZmF1bHRzLmUxY2QgPSAoKHVpbnQ2NF90KWVjeCA8PCAzMikgfCBlZHg7CiAJfQogCi0J aWYgKCFza2lwX2V4dGZlYXQgJiYKLQkgICAgd3Jtc3JfYW1kX3NhZmUoTVNSX0s4X0VYVF9GRUFU VVJFX01BU0ssIGV4dGZlYXRfZWR4LCBleHRmZWF0X2VjeCkpIHsKLQkJc2tpcF9leHRmZWF0ID0g MTsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0IENQVUlEIGV4dGVuZGVkIGZlYXR1cmUgbWFza1xu Iik7CisJaWYgKChsZXZlbGxpbmdfY2FwcyAmIExDQVBfN2FiMCkgPT0gTENBUF83YWIwKSB7CisJ CXVpbnQzMl90IGVheCwgZWJ4LCB0bXA7CisKKwkJY3B1aWQoMHgwMDAwMDAwNywgJmVheCwgJmVi eCwgJnRtcCwgJnRtcCk7CisKKwkJaWYofihvcHRfY3B1aWRfbWFza19sN3MwX2VheCAmIG9wdF9j cHVpZF9tYXNrX2w3czBfZWJ4KSkgeworCQkJZWF4ICY9IG9wdF9jcHVpZF9tYXNrX2w3czBfZWF4 OworCQkJZWJ4ICY9IG9wdF9jcHVpZF9tYXNrX2w3czBfZWJ4OworCQl9CisKKwkJY3B1aWRtYXNr X2RlZmF1bHRzLl83YWIwICY9ICgodWludDY0X3QpZWF4IDw8IDMyKSB8IGVieDsKIAl9CiAKLQlp ZiAoIXNraXBfbDdzMF9lYXhfZWJ4ICYmCi0JICAgIHdybXNyX2FtZF9zYWZlKE1TUl9BTURfTDdT MF9GRUFUVVJFX01BU0ssIGw3czBfZWJ4LCBsN3MwX2VheCkpIHsKLQkJc2tpcF9sN3MwX2VheF9l YnggPSAxOwotCQlwcmludGsoIkZhaWxlZCB0byBzZXQgQ1BVSUQgbGVhZiA3IHN1YmxlYWYgMCBm ZWF0dXJlIG1hc2tcbiIpOworCWlmICgobGV2ZWxsaW5nX2NhcHMgJiBMQ0FQXzZjKSA9PSBMQ0FQ XzZjKSB7CisJCXVpbnQzMl90IGVjeCA9IGNwdWlkX2VjeCg2KTsKKworCQlpZiAofm9wdF9jcHVp ZF9tYXNrX3RoZXJtYWxfZWN4KQorCQkJZWN4ICY9IG9wdF9jcHVpZF9tYXNrX3RoZXJtYWxfZWN4 OworCisJCWNwdWlkbWFza19kZWZhdWx0cy5fNmMgJj0gKH4wVUxMIDw8IDMyKSB8IGVjeDsKIAl9 CiAKLQlpZiAoIXNraXBfdGhlcm1hbF9lY3ggJiYKLQkgICAgKHJkbXNyX2FtZF9zYWZlKE1TUl9B TURfVEhSTV9GRUFUVVJFX01BU0ssICZlYXgsICZlZHgpIHx8Ci0JICAgICB3cm1zcl9hbWRfc2Fm ZShNU1JfQU1EX1RIUk1fRkVBVFVSRV9NQVNLLCB0aGVybWFsX2VjeCwgZWR4KSkpewotCQlza2lw X3RoZXJtYWxfZWN4ID0gMTsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0IENQVUlEIHRoZXJtYWwv cG93ZXIgZmVhdHVyZSBtYXNrXG4iKTsKKwlpZiAob3B0X2NwdV9pbmZvKSB7CisJCXByaW50ayhY RU5MT0dfSU5GTyAiTGV2ZWxsaW5nIGNhcHM6ICUjeFxuIiwgbGV2ZWxsaW5nX2NhcHMpOworCQlw cmludGsoWEVOTE9HX0lORk8KKwkJICAgICAgICJNU1IgZGVmYXVsdHM6IDFkIDB4JTA4eCwgMWMg MHglMDh4LCBlMWQgMHglMDh4LCAiCisJCSAgICAgICAiZTFjIDB4JTA4eCwgN2EwIDB4JTA4eCwg N2IwIDB4JTA4eCwgNmMgMHglMDh4XG4iLAorCQkgICAgICAgKHVpbnQzMl90KWNwdWlkbWFza19k ZWZhdWx0cy5fMWNkLAorCQkgICAgICAgKHVpbnQzMl90KShjcHVpZG1hc2tfZGVmYXVsdHMuXzFj ZCA+PiAzMiksCisJCSAgICAgICAodWludDMyX3QpY3B1aWRtYXNrX2RlZmF1bHRzLmUxY2QsCisJ CSAgICAgICAodWludDMyX3QpKGNwdWlkbWFza19kZWZhdWx0cy5lMWNkID4+IDMyKSwKKwkJICAg ICAgICh1aW50MzJfdCkoY3B1aWRtYXNrX2RlZmF1bHRzLl83YWIwID4+IDMyKSwKKwkJICAgICAg ICh1aW50MzJfdCljcHVpZG1hc2tfZGVmYXVsdHMuXzdhYjAsCisJCSAgICAgICAodWludDMyX3Qp Y3B1aWRtYXNrX2RlZmF1bHRzLl82Yyk7CiAJfQogfQogCkBAIC00MDksNyArNDg4LDEwIEBAIHN0 YXRpYyB2b2lkIGFtZF9nZXRfdG9wb2xvZ3koc3RydWN0IGNwdWluZm9feDg2ICpjKQogCiBzdGF0 aWMgdm9pZCBlYXJseV9pbml0X2FtZChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0Jc2V0X2Nw dWlkbWFzayhjKTsKKwlpZiAoYyA9PSAmYm9vdF9jcHVfZGF0YSkKKwkJYW1kX2luaXRfbGV2ZWxs aW5nKCk7CisKKwlhbWRfY3R4dF9zd2l0Y2hfbGV2ZWxsaW5nKE5VTEwpOwogfQogCiBzdGF0aWMg dm9pZCBpbml0X2FtZChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi0tIAoyLjEuNAoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRl dmVsCg==