From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v4 14/26] x86/cpu: Rework AMD masking MSR setup Date: Wed, 23 Mar 2016 16:36:17 +0000 Message-ID: <1458750989-28967-15-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 IGhhcmR3YXJlIGRlZmF1bHRzLgoKVGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFyZSB0aGVu IGNvbWJpbmVkIHdpdGggdGhlIGhhcmR3YXJlIGRlZmF1bHRzIHRvCmZ1cnRoZXIgcmVzdHJpY3Qg dGhlIFhlbiBkZWZhdWx0IG1hc2tpbmcgbGV2ZWwuICBFYWNoIGNwdSBpcyB0aGVuIGNvbnRleHQK c3dpdGNoZWQgaW50byB0aGUgZGVmYXVsdCBsZXZlbGxpbmcgc3RhdGUuCgpTaWduZWQtb2ZmLWJ5 OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpSZXZpZXdlZC1ieTog SmFuIEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29tPgotLS0KdjI6CiAqIFByb3ZpZGUgZXh0cmEg aW5mb3JtYXRpb24gaWYgb3B0X2NwdV9pbmZvCiAqIEV4dHJhIGNvbW1lbnQgaW5kaWNhdGluZyB0 aGUgZXhwZWN0ZWQgdXNlIG9mIGFtZF9jdHh0X3N3aXRjaF9sZXZlbGxpbmcoKQp2MzoKICogRml4 IHRoZSBpbnRlcmFjdGlvbiBvZiB0aGUgZmFzdC1mb3J3YXJkIGJpdHMgd2l0aCB0aGUgb3ZlcnJp ZGUgTVNScy4KICogU3R5bGUgZml4dXBzLgotLS0KIHhlbi9hcmNoL3g4Ni9jcHUvYW1kLmMgfCAy NzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDE3OSBpbnNlcnRpb25zKCspLCA5NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvY3B1L2FtZC5jIGIveGVuL2FyY2gveDg2L2NwdS9hbWQuYwppbmRl eCA1NTE2Nzc3Li4wZTFjOGI5IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvY3B1L2FtZC5jCisr KyBiL3hlbi9hcmNoL3g4Ni9jcHUvYW1kLmMKQEAgLTgwLDYgKzgwLDEzIEBAIHN0YXRpYyBpbmxp bmUgaW50IHdybXNyX2FtZF9zYWZlKHVuc2lnbmVkIGludCBtc3IsIHVuc2lnbmVkIGludCBsbywK IAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCB3cm1zcl9hbWQodW5zaWduZWQgaW50IG1z ciwgdWludDY0X3QgdmFsKQoreworCWFzbSB2b2xhdGlsZSgid3Jtc3IiIDo6CisJCSAgICAgImMi IChtc3IpLCAiYSIgKCh1aW50MzJfdCl2YWwpLAorCQkgICAgICJkIiAodmFsID4+IDMyKSwgIkQi ICgweDljNWEyMDNhKSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRtYXNrIHsKIAl1 aW50MTZfdCBmYW07CiAJY2hhciByZXZbMl07CkBAIC0xMjYsMTI2ICsxMzMsMTk4IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgY3B1aWRtYXNrICpfX2luaXQgbm9pbmxpbmUgZ2V0X2NwdWlkbWFzayhj b25zdCBjaGFyICpvcHQpCiB9CiAKIC8qCisgKiBTZXRzIGNhcHMgaW4gZXhwZWN0ZWRfbGV2ZWxs aW5nX2NhcCwgcHJvYmVzIGZvciB0aGUgc3BlY2lmaWVkIG1hc2sgTVNSLCBhbmQKKyAqIHNldCBj YXBzIGluIGxldmVsbGluZ19jYXBzIGlmIGl0IGlzIGZvdW5kLiAgUHJvY2Vzc29ycyBwcmlvciB0 byBGYW0gMTBoCisgKiByZXF1aXJlZCBhIDMyLWJpdCBwYXNzd29yZCBmb3IgbWFza2luZyBNU1Jz LiAgUmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqLworc3RhdGljIHVpbnQ2NF90IF9faW5p dCBfcHJvYmVfbWFza19tc3IodW5zaWduZWQgaW50IG1zciwgdWludDY0X3QgY2FwcykKK3sKKwl1 bnNpZ25lZCBpbnQgaGksIGxvOworCisJZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCB8PSBjYXBzOwor CisJaWYgKChyZG1zcl9hbWRfc2FmZShtc3IsICZsbywgJmhpKSA9PSAwKSAmJgorCSAgICAod3Jt c3JfYW1kX3NhZmUobXNyLCBsbywgaGkpID09IDApKQorCQlsZXZlbGxpbmdfY2FwcyB8PSBjYXBz OworCisJcmV0dXJuICgodWludDY0X3QpaGkgPDwgMzIpIHwgbG87Cit9CisKKy8qCisgKiBQcm9i ZSBmb3IgdGhlIGV4aXN0YW5jZSBvZiB0aGUgZXhwZWN0ZWQgbWFza2luZyBNU1JzLiAgVGhleSBt aWdodCBlYXNpbHkKKyAqIG5vdCBiZSBhdmFpbGFibGUgaWYgWGVuIGlzIHJ1bm5pbmcgdmlydHVh bGlzZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBub2lubGluZSBwcm9iZV9tYXNraW5nX21z cnModm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmYm9vdF9jcHVfZGF0 YTsKKworCS8qCisJICogRmlyc3QsIHdvcmsgb3V0IHdoaWNoIG1hc2tpbmcgTVNScyB3ZSBzaG91 bGQgaGF2ZSwgYmFzZWQgb24KKwkgKiByZXZpc2lvbiBhbmQgY3B1aWQuCisJICovCisKKwkvKiBG YW0xMSBkb2Vzbid0IHN1cHBvcnQgbWFza2luZyBhdCBhbGwuICovCisJaWYgKGMtPng4NiA9PSAw eDExKQorCQlyZXR1cm47CisKKwljcHVpZG1hc2tfZGVmYXVsdHMuXzFjZCA9CisJCV9wcm9iZV9t YXNrX21zcihNU1JfSzhfRkVBVFVSRV9NQVNLLCBMQ0FQXzFjZCk7CisJY3B1aWRtYXNrX2RlZmF1 bHRzLmUxY2QgPQorCQlfcHJvYmVfbWFza19tc3IoTVNSX0s4X0VYVF9GRUFUVVJFX01BU0ssIExD QVBfZTFjZCk7CisKKwlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gNykKKwkJY3B1aWRtYXNrX2RlZmF1 bHRzLl83YWIwID0KKwkJCV9wcm9iZV9tYXNrX21zcihNU1JfQU1EX0w3UzBfRkVBVFVSRV9NQVNL LCBMQ0FQXzdhYjApOworCisJaWYgKGMtPng4NiA9PSAweDE1ICYmIGMtPmNwdWlkX2xldmVsID49 IDYgJiYgY3B1aWRfZWN4KDYpKQorCQljcHVpZG1hc2tfZGVmYXVsdHMuXzZjID0KKwkJCV9wcm9i ZV9tYXNrX21zcihNU1JfQU1EX1RIUk1fRkVBVFVSRV9NQVNLLCBMQ0FQXzZjKTsKKworCS8qCisJ ICogRG9uJ3QgYm90aGVyIHdhcm5pbmcgYWJvdXQgYSBtaXNtYXRjaCBpZiB2aXJ0dWFsaXNlZC4g IFRoZXNlIE1TUnMKKwkgKiBhcmUgbm90IGFyY2hpdGVjdHVyYWwgYW5kIGFsbW9zdCBuZXZlciB2 aXJ0dWFsaXNlZC4KKwkgKi8KKwlpZiAoKGV4cGVjdGVkX2xldmVsbGluZ19jYXAgPT0gbGV2ZWxs aW5nX2NhcHMpIHx8CisJICAgIGNwdV9oYXNfaHlwZXJ2aXNvcikKKwkJcmV0dXJuOworCisJcHJp bnRrKFhFTkxPR19XQVJOSU5HICJNaXNtYXRjaCBiZXR3ZWVuIGV4cGVjdGVkICglI3gpICIKKwkg ICAgICAgImFuZCByZWFsICglI3gpIGxldmVsbGluZyBjYXBzOiBtaXNzaW5nICUjeFxuIiwKKwkg ICAgICAgZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCwgbGV2ZWxsaW5nX2NhcHMsCisJICAgICAgIChl eHBlY3RlZF9sZXZlbGxpbmdfY2FwIF4gbGV2ZWxsaW5nX2NhcHMpICYgbGV2ZWxsaW5nX2NhcHMp OworCXByaW50ayhYRU5MT0dfV0FSTklORyAiRmFtICUjeCwgbW9kZWwgJSN4IGxldmVsICUjeFxu IiwKKwkgICAgICAgYy0+eDg2LCBjLT54ODZfbW9kZWwsIGMtPmNwdWlkX2xldmVsKTsKKwlwcmlu dGsoWEVOTE9HX1dBUk5JTkcKKwkgICAgICAgIklmIG5vdCBydW5uaW5nIHZpcnR1YWxpc2VkLCBw bGVhc2UgcmVwb3J0IGEgYnVnXG4iKTsKK30KKworLyoKKyAqIENvbnRleHQgc3dpdGNoIGxldmVs bGluZyBzdGF0ZSB0byB0aGUgbmV4dCBkb21haW4uICBBIHBhcmFtZXRlciBvZiBOVUxMIGlzCisg KiB1c2VkIHRvIGNvbnRleHQgc3dpdGNoIHRvIHRoZSBkZWZhdWx0IGhvc3Qgc3RhdGUsIGFuZCBp cyB1c2VkIGJ5IHRoZSBCU1AvQVAKKyAqIHN0YXJ0dXAgY29kZS4KKyAqLworc3RhdGljIHZvaWQg YW1kX2N0eHRfc3dpdGNoX2xldmVsbGluZyhjb25zdCBzdHJ1Y3QgZG9tYWluICpuZXh0ZCkKK3sK KwlzdHJ1Y3QgY3B1aWRtYXNrcyAqdGhlc2VfbWFza3MgPSAmdGhpc19jcHUoY3B1aWRtYXNrcyk7 CisJY29uc3Qgc3RydWN0IGNwdWlkbWFza3MgKm1hc2tzID0gJmNwdWlkbWFza19kZWZhdWx0czsK KworI2RlZmluZSBMQVpZKGNhcCwgbXNyLCBmaWVsZCkJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJ aWYgKHVubGlrZWx5KHRoZXNlX21hc2tzLT5maWVsZCAhPSBtYXNrcy0+ZmllbGQpICYmCVwKKwkJ ICAgICgobGV2ZWxsaW5nX2NhcHMgJiBjYXApID09IGNhcCkpCQkJXAorCQl7CQkJCQkJCVwKKwkJ CXdybXNyX2FtZChtc3IsIG1hc2tzLT5maWVsZCk7CQkJXAorCQkJdGhlc2VfbWFza3MtPmZpZWxk ID0gbWFza3MtPmZpZWxkOwkJXAorCQl9CQkJCQkJCVwKKwl9KQorCisJTEFaWShMQ0FQXzFjZCwg IE1TUl9LOF9GRUFUVVJFX01BU0ssICAgICAgIF8xY2QpOworCUxBWlkoTENBUF9lMWNkLCBNU1Jf SzhfRVhUX0ZFQVRVUkVfTUFTSywgICBlMWNkKTsKKwlMQVpZKExDQVBfN2FiMCwgTVNSX0FNRF9M N1MwX0ZFQVRVUkVfTUFTSywgXzdhYjApOworCUxBWlkoTENBUF82YywgICBNU1JfQU1EX1RIUk1f RkVBVFVSRV9NQVNLLCBfNmMpOworCisjdW5kZWYgTEFaWQorfQorCisvKgogICogTWFzayB0aGUg ZmVhdHVyZXMgYW5kIGV4dGVuZGVkIGZlYXR1cmVzIHJldHVybmVkIGJ5IENQVUlELiAgUGFyYW1l dGVycyBhcmUKICAqIHNldCBmcm9tIHRoZSBib290IGxpbmUgdmlhIHR3byBtZXRob2RzOgogICoK ICAqICAgMSkgU3BlY2lmaWMgcHJvY2Vzc29yIHJldmlzaW9uIHN0cmluZwogICogICAyKSBVc2Vy LWRlZmluZWQgbWFza3MKICAqCi0gKiBUaGUgcHJvY2Vzc29yIHJldmlzaW9uIHN0cmluZyBwYXJh bWV0ZXIgaGFzIHByZWNlZGVuZS4KKyAqIFRoZSB1c2VyLWRlZmluZWQgbWFza3MgdGFrZSBwcmVj ZWRlbmNlLgogICovCi1zdGF0aWMgdm9pZCBzZXRfY3B1aWRtYXNrKGNvbnN0IHN0cnVjdCBjcHVp bmZvX3g4NiAqYykKK3N0YXRpYyB2b2lkIF9faW5pdCBub2lubGluZSBhbWRfaW5pdF9sZXZlbGxp bmcodm9pZCkKIHsKLQlzdGF0aWMgdW5zaWduZWQgaW50IGZlYXRfZWN4LCBmZWF0X2VkeDsKLQlz dGF0aWMgdW5zaWduZWQgaW50IGV4dGZlYXRfZWN4LCBleHRmZWF0X2VkeDsKLQlzdGF0aWMgdW5z aWduZWQgaW50IGw3czBfZWF4LCBsN3MwX2VieDsKLQlzdGF0aWMgdW5zaWduZWQgaW50IHRoZXJt YWxfZWN4OwotCXN0YXRpYyBib29sX3Qgc2tpcF9mZWF0LCBza2lwX2V4dGZlYXQ7Ci0Jc3RhdGlj IGJvb2xfdCBza2lwX2w3czBfZWF4X2VieCwgc2tpcF90aGVybWFsX2VjeDsKLQlzdGF0aWMgZW51 bSB7IG5vdF9wYXJzZWQsIG5vX21hc2ssIHNldF9tYXNrIH0gc3RhdHVzOwotCXVuc2lnbmVkIGlu dCBlYXgsIGVieCwgZWN4LCBlZHg7Ci0KLQlpZiAoc3RhdHVzID09IG5vX21hc2spCi0JCXJldHVy bjsKKwljb25zdCBzdHJ1Y3QgY3B1aWRtYXNrICptID0gTlVMTDsKIAotCWlmIChzdGF0dXMgPT0g c2V0X21hc2spCi0JCWdvdG8gc2V0bWFzazsKKwlwcm9iZV9tYXNraW5nX21zcnMoKTsKIAotCUFT U0VSVCgoc3RhdHVzID09IG5vdF9wYXJzZWQpICYmIChjID09ICZib290X2NwdV9kYXRhKSk7Ci0J c3RhdHVzID0gbm9fbWFzazsKKwlpZiAoKm9wdF9mYW1yZXYgIT0gJ1wwJykgeworCQltID0gZ2V0 X2NwdWlkbWFzayhvcHRfZmFtcmV2KTsKIAotCS8qIEZhbTExIGRvZXNuJ3Qgc3VwcG9ydCBtYXNr aW5nIGF0IGFsbC4gKi8KLQlpZiAoYy0+eDg2ID09IDB4MTEpCi0JCXJldHVybjsKKwkJaWYgKCFt KQorCQkJcHJpbnRrKCJJbnZhbGlkIHByb2Nlc3NvciBzdHJpbmc6ICVzXG4iLCBvcHRfZmFtcmV2 KTsKKwl9CiAKLQlpZiAofihvcHRfY3B1aWRfbWFza19lY3ggJiBvcHRfY3B1aWRfbWFza19lZHgg JgotCSAgICAgIG9wdF9jcHVpZF9tYXNrX2V4dF9lY3ggJiBvcHRfY3B1aWRfbWFza19leHRfZWR4 ICYKLQkgICAgICBvcHRfY3B1aWRfbWFza19sN3MwX2VheCAmIG9wdF9jcHVpZF9tYXNrX2w3czBf ZWJ4ICYKLQkgICAgICBvcHRfY3B1aWRfbWFza190aGVybWFsX2VjeCkpIHsKLQkJZmVhdF9lY3gg PSBvcHRfY3B1aWRfbWFza19lY3g7Ci0JCWZlYXRfZWR4ID0gb3B0X2NwdWlkX21hc2tfZWR4Owot CQlleHRmZWF0X2VjeCA9IG9wdF9jcHVpZF9tYXNrX2V4dF9lY3g7Ci0JCWV4dGZlYXRfZWR4ID0g b3B0X2NwdWlkX21hc2tfZXh0X2VkeDsKLQkJbDdzMF9lYXggPSBvcHRfY3B1aWRfbWFza19sN3Mw X2VheDsKLQkJbDdzMF9lYnggPSBvcHRfY3B1aWRfbWFza19sN3MwX2VieDsKLQkJdGhlcm1hbF9l Y3ggPSBvcHRfY3B1aWRfbWFza190aGVybWFsX2VjeDsKLQl9IGVsc2UgaWYgKCpvcHRfZmFtcmV2 ID09ICdcMCcpIHsKLQkJcmV0dXJuOwotCX0gZWxzZSB7Ci0JCWNvbnN0IHN0cnVjdCBjcHVpZG1h c2sgKm0gPSBnZXRfY3B1aWRtYXNrKG9wdF9mYW1yZXYpOworCWlmICgobGV2ZWxsaW5nX2NhcHMg JiBMQ0FQXzFjZCkgPT0gTENBUF8xY2QpIHsKKwkJdWludDMyX3QgZWN4LCBlZHgsIHRtcDsKIAot CQlpZiAoIW0pIHsKLQkJCXByaW50aygiSW52YWxpZCBwcm9jZXNzb3Igc3RyaW5nOiAlc1xuIiwg b3B0X2ZhbXJldik7Ci0JCQlwcmludGsoIkNQVUlEIHdpbGwgbm90IGJlIG1hc2tlZFxuIik7Ci0J CQlyZXR1cm47CisJCWNwdWlkKDB4MDAwMDAwMDEsICZ0bXAsICZ0bXAsICZlY3gsICZlZHgpOwor CisJCWlmKH4ob3B0X2NwdWlkX21hc2tfZWN4ICYgb3B0X2NwdWlkX21hc2tfZWR4KSkgeworCQkJ ZWN4ICY9IG9wdF9jcHVpZF9tYXNrX2VjeDsKKwkJCWVkeCAmPSBvcHRfY3B1aWRfbWFza19lZHg7 CisJCX0gZWxzZSBpZiAobSkgeworCQkJZWN4ICY9IG0tPmVjeDsKKwkJCWVkeCAmPSBtLT5lZHg7 CiAJCX0KLQkJZmVhdF9lY3ggPSBtLT5lY3g7Ci0JCWZlYXRfZWR4ID0gbS0+ZWR4OwotCQlleHRm ZWF0X2VjeCA9IG0tPmV4dF9lY3g7Ci0JCWV4dGZlYXRfZWR4ID0gbS0+ZXh0X2VkeDsKKworCQkv KiBGYXN0LWZvcndhcmQgYml0cyAtIE11c3QgYmUgc2V0LiAqLworCQlpZiAoZWN4ICYgY3B1ZmVh dF9tYXNrKFg4Nl9GRUFUVVJFX1hTQVZFKSkKKwkJCWVjeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZF QVRVUkVfT1NYU0FWRSk7CisJCWVkeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQVBJQyk7 CisKKwkJLyogQWxsb3cgdGhlIEhZUEVSVklTT1IgYml0IHRvIGJlIHNldCB2aWEgZ3Vlc3QgcG9s aWN5LiAqLworCQllY3ggfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpOwor CisJCWNwdWlkbWFza19kZWZhdWx0cy5fMWNkID0gKCh1aW50NjRfdCllY3ggPDwgMzIpIHwgZWR4 OwogCX0KIAotICAgICAgICAvKiBTZXR0aW5nIGJpdHMgaW4gdGhlIENQVUlEIG1hc2sgTVNSIHRo YXQgYXJlIG5vdCBzZXQgaW4gdGhlCi0gICAgICAgICAqIHVubWFza2VkIENQVUlEIHJlc3BvbnNl IGNhbiBjYXVzZSB0aG9zZSBiaXRzIHRvIGJlIHNldCBpbiB0aGUKLSAgICAgICAgICogbWFza2Vk IHJlc3BvbnNlLiAgQXZvaWQgdGhhdCBieSBleHBsaWNpdGx5IG1hc2tpbmcgaW4gc29mdHdhcmUu ICovCi0gICAgICAgIGZlYXRfZWN4ICY9IGNwdWlkX2VjeCgweDAwMDAwMDAxKTsKLSAgICAgICAg ZmVhdF9lZHggJj0gY3B1aWRfZWR4KDB4MDAwMDAwMDEpOwotICAgICAgICBleHRmZWF0X2VjeCAm PSBjcHVpZF9lY3goMHg4MDAwMDAwMSk7Ci0gICAgICAgIGV4dGZlYXRfZWR4ICY9IGNwdWlkX2Vk eCgweDgwMDAwMDAxKTsKKwlpZiAoKGxldmVsbGluZ19jYXBzICYgTENBUF9lMWNkKSA9PSBMQ0FQ X2UxY2QpIHsKKwkJdWludDMyX3QgZWN4LCBlZHgsIHRtcDsKIAotCXN0YXR1cyA9IHNldF9tYXNr OwotCXByaW50aygiV3JpdGluZyBDUFVJRCBmZWF0dXJlIG1hc2sgRUNYOkVEWCAtPiAlMDhYaDol MDhYaFxuIiwgCi0JICAgICAgIGZlYXRfZWN4LCBmZWF0X2VkeCk7Ci0JcHJpbnRrKCJXcml0aW5n IENQVUlEIGV4dGVuZGVkIGZlYXR1cmUgbWFzayBFQ1g6RURYIC0+ICUwOFhoOiUwOFhoXG4iLCAK LQkgICAgICAgZXh0ZmVhdF9lY3gsIGV4dGZlYXRfZWR4KTsKKwkJY3B1aWQoMHg4MDAwMDAwMSwg JnRtcCwgJnRtcCwgJmVjeCwgJmVkeCk7CiAKLQlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gNykKLQkJ Y3B1aWRfY291bnQoNywgMCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0JZWxzZQotCQllYngg PSBlYXggPSAwOwotCWlmICgoZWF4IHwgZWJ4KSAmJiB+KGw3czBfZWF4ICYgbDdzMF9lYngpKSB7 Ci0JCWlmIChsN3MwX2VheCA+IGVheCkKLQkJCWw3czBfZWF4ID0gZWF4OwotCQlsN3MwX2VieCAm PSBlYng7Ci0JCXByaW50aygiV3JpdGluZyBDUFVJRCBsZWFmIDcgc3VibGVhZiAwIGZlYXR1cmUg bWFzayBFQVg6RUJYIC0+ICUwOFhoOiUwOFhoXG4iLAotCQkgICAgICAgbDdzMF9lYXgsIGw3czBf ZWJ4KTsKLQl9IGVsc2UKLQkJc2tpcF9sN3MwX2VheF9lYnggPSAxOwotCi0JLyogT25seSBGYW0x NSBoYXMgdGhlIHJlc3BlY3RpdmUgTVNSLiAqLwotCWVjeCA9IGMtPng4NiA9PSAweDE1ICYmIGMt PmNwdWlkX2xldmVsID49IDYgPyBjcHVpZF9lY3goNikgOiAwOwotCWlmIChlY3ggJiYgfnRoZXJt YWxfZWN4KSB7Ci0JCXRoZXJtYWxfZWN4ICY9IGVjeDsKLQkJcHJpbnRrKCJXcml0aW5nIENQVUlE IHRoZXJtYWwvcG93ZXIgZmVhdHVyZSBtYXNrIEVDWCAtPiAlMDhYaFxuIiwKLQkJICAgICAgIHRo ZXJtYWxfZWN4KTsKLQl9IGVsc2UKLQkJc2tpcF90aGVybWFsX2VjeCA9IDE7Ci0KLSBzZXRtYXNr OgotCS8qIEFNRCBwcm9jZXNzb3JzIHByaW9yIHRvIGZhbWlseSAxMGggcmVxdWlyZWQgYSAzMi1i aXQgcGFzc3dvcmQgKi8KLQlpZiAoIXNraXBfZmVhdCAmJgotCSAgICB3cm1zcl9hbWRfc2FmZShN U1JfSzhfRkVBVFVSRV9NQVNLLCBmZWF0X2VkeCwgZmVhdF9lY3gpKSB7Ci0JCXNraXBfZmVhdCA9 IDE7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCBmZWF0dXJlIG1hc2tcbiIpOworCQlp Zih+KG9wdF9jcHVpZF9tYXNrX2V4dF9lY3ggJiBvcHRfY3B1aWRfbWFza19leHRfZWR4KSkgewor CQkJZWN4ICY9IG9wdF9jcHVpZF9tYXNrX2V4dF9lY3g7CisJCQllZHggJj0gb3B0X2NwdWlkX21h c2tfZXh0X2VkeDsKKwkJfSBlbHNlIGlmIChtKSB7CisJCQllY3ggJj0gbS0+ZXh0X2VjeDsKKwkJ CWVkeCAmPSBtLT5leHRfZWR4OworCQl9CisKKwkJLyogRmFzdC1mb3J3YXJkIGJpdHMgLSBNdXN0 IGJlIHNldC4gKi8KKwkJZWR4IHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9BUElDKTsKKwor CQljcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCA9ICgodWludDY0X3QpZWN4IDw8IDMyKSB8IGVkeDsK IAl9CiAKLQlpZiAoIXNraXBfZXh0ZmVhdCAmJgotCSAgICB3cm1zcl9hbWRfc2FmZShNU1JfSzhf RVhUX0ZFQVRVUkVfTUFTSywgZXh0ZmVhdF9lZHgsIGV4dGZlYXRfZWN4KSkgewotCQlza2lwX2V4 dGZlYXQgPSAxOwotCQlwcmludGsoIkZhaWxlZCB0byBzZXQgQ1BVSUQgZXh0ZW5kZWQgZmVhdHVy ZSBtYXNrXG4iKTsKKwlpZiAoKGxldmVsbGluZ19jYXBzICYgTENBUF83YWIwKSA9PSBMQ0FQXzdh YjApIHsKKwkJdWludDMyX3QgZWF4LCBlYngsIHRtcDsKKworCQljcHVpZCgweDAwMDAwMDA3LCAm ZWF4LCAmZWJ4LCAmdG1wLCAmdG1wKTsKKworCQlpZih+KG9wdF9jcHVpZF9tYXNrX2w3czBfZWF4 ICYgb3B0X2NwdWlkX21hc2tfbDdzMF9lYngpKSB7CisJCQllYXggJj0gb3B0X2NwdWlkX21hc2tf bDdzMF9lYXg7CisJCQllYnggJj0gb3B0X2NwdWlkX21hc2tfbDdzMF9lYng7CisJCX0KKworCQlj cHVpZG1hc2tfZGVmYXVsdHMuXzdhYjAgJj0gKCh1aW50NjRfdCllYXggPDwgMzIpIHwgZWJ4Owog CX0KIAotCWlmICghc2tpcF9sN3MwX2VheF9lYnggJiYKLQkgICAgd3Jtc3JfYW1kX3NhZmUoTVNS X0FNRF9MN1MwX0ZFQVRVUkVfTUFTSywgbDdzMF9lYngsIGw3czBfZWF4KSkgewotCQlza2lwX2w3 czBfZWF4X2VieCA9IDE7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCBsZWFmIDcgc3Vi bGVhZiAwIGZlYXR1cmUgbWFza1xuIik7CisJaWYgKChsZXZlbGxpbmdfY2FwcyAmIExDQVBfNmMp ID09IExDQVBfNmMpIHsKKwkJdWludDMyX3QgZWN4ID0gY3B1aWRfZWN4KDYpOworCisJCWlmICh+ b3B0X2NwdWlkX21hc2tfdGhlcm1hbF9lY3gpCisJCQllY3ggJj0gb3B0X2NwdWlkX21hc2tfdGhl cm1hbF9lY3g7CisKKwkJY3B1aWRtYXNrX2RlZmF1bHRzLl82YyAmPSAofjBVTEwgPDwgMzIpIHwg ZWN4OwogCX0KIAotCWlmICghc2tpcF90aGVybWFsX2VjeCAmJgotCSAgICAocmRtc3JfYW1kX3Nh ZmUoTVNSX0FNRF9USFJNX0ZFQVRVUkVfTUFTSywgJmVheCwgJmVkeCkgfHwKLQkgICAgIHdybXNy X2FtZF9zYWZlKE1TUl9BTURfVEhSTV9GRUFUVVJFX01BU0ssIHRoZXJtYWxfZWN4LCBlZHgpKSl7 Ci0JCXNraXBfdGhlcm1hbF9lY3ggPSAxOwotCQlwcmludGsoIkZhaWxlZCB0byBzZXQgQ1BVSUQg dGhlcm1hbC9wb3dlciBmZWF0dXJlIG1hc2tcbiIpOworCWlmIChvcHRfY3B1X2luZm8pIHsKKwkJ cHJpbnRrKFhFTkxPR19JTkZPICJMZXZlbGxpbmcgY2FwczogJSN4XG4iLCBsZXZlbGxpbmdfY2Fw cyk7CisJCXByaW50ayhYRU5MT0dfSU5GTworCQkgICAgICAgIk1TUiBkZWZhdWx0czogMWQgMHgl MDh4LCAxYyAweCUwOHgsIGUxZCAweCUwOHgsICIKKwkJICAgICAgICJlMWMgMHglMDh4LCA3YTAg MHglMDh4LCA3YjAgMHglMDh4LCA2YyAweCUwOHhcbiIsCisJCSAgICAgICAodWludDMyX3QpY3B1 aWRtYXNrX2RlZmF1bHRzLl8xY2QsCisJCSAgICAgICAodWludDMyX3QpKGNwdWlkbWFza19kZWZh dWx0cy5fMWNkID4+IDMyKSwKKwkJICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tfZGVmYXVsdHMu ZTFjZCwKKwkJICAgICAgICh1aW50MzJfdCkoY3B1aWRtYXNrX2RlZmF1bHRzLmUxY2QgPj4gMzIp LAorCQkgICAgICAgKHVpbnQzMl90KShjcHVpZG1hc2tfZGVmYXVsdHMuXzdhYjAgPj4gMzIpLAor CQkgICAgICAgKHVpbnQzMl90KWNwdWlkbWFza19kZWZhdWx0cy5fN2FiMCwKKwkJICAgICAgICh1 aW50MzJfdCljcHVpZG1hc2tfZGVmYXVsdHMuXzZjKTsKIAl9CiB9CiAKQEAgLTQwOSw3ICs0ODgs MTAgQEAgc3RhdGljIHZvaWQgYW1kX2dldF90b3BvbG9neShzdHJ1Y3QgY3B1aW5mb194ODYgKmMp CiAKIHN0YXRpYyB2b2lkIGVhcmx5X2luaXRfYW1kKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsK LQlzZXRfY3B1aWRtYXNrKGMpOworCWlmIChjID09ICZib290X2NwdV9kYXRhKQorCQlhbWRfaW5p dF9sZXZlbGxpbmcoKTsKKworCWFtZF9jdHh0X3N3aXRjaF9sZXZlbGxpbmcoTlVMTCk7CiB9CiAK IHN0YXRpYyB2b2lkIGluaXRfYW1kKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKLS0gCjIuMS40CgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK