From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v5 09/21] x86/cpu: Rework AMD masking MSR setup Date: Thu, 7 Apr 2016 12:57:14 +0100 Message-ID: <1460030246-30153-10-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 IGhhcmR3YXJlIGRlZmF1bHRzLgoKVGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFyZSB0aGVu IGNvbWJpbmVkIHdpdGggdGhlIGhhcmR3YXJlIGRlZmF1bHRzIHRvCmZ1cnRoZXIgcmVzdHJpY3Qg dGhlIFhlbiBkZWZhdWx0IG1hc2tpbmcgbGV2ZWwuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29v cGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpSZXZpZXdlZC1ieTogSmFuIEJldWxpY2gg PEpCZXVsaWNoQHN1c2UuY29tPgotLS0KdjI6CiAqIFByb3ZpZGUgZXh0cmEgaW5mb3JtYXRpb24g aWYgb3B0X2NwdV9pbmZvCiAqIEV4dHJhIGNvbW1lbnQgaW5kaWNhdGluZyB0aGUgZXhwZWN0ZWQg dXNlIG9mIGFtZF9jdHh0X3N3aXRjaF9sZXZlbGxpbmcoKQp2MzoKICogRml4IHRoZSBpbnRlcmFj dGlvbiBvZiB0aGUgZmFzdC1mb3J3YXJkIGJpdHMgd2l0aCB0aGUgb3ZlcnJpZGUgTVNScy4KICog U3R5bGUgZml4dXBzLgp2NToKICogVHdlYWsgY29tbWVudHMgYW5kIHN0eWxlLgotLS0KIHhlbi9h cmNoL3g4Ni9jcHUvYW1kLmMgfCAyODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE4NCBpbnNlcnRpb25zKCspLCA5NyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvY3B1L2FtZC5jIGIveGVuL2Fy Y2gveDg2L2NwdS9hbWQuYwppbmRleCA1NTE2Nzc3Li45M2E4YTVlIDEwMDY0NAotLS0gYS94ZW4v YXJjaC94ODYvY3B1L2FtZC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9jcHUvYW1kLmMKQEAgLTgwLDYg KzgwLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHdybXNyX2FtZF9zYWZlKHVuc2lnbmVkIGludCBt c3IsIHVuc2lnbmVkIGludCBsbywKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCB3cm1z cl9hbWQodW5zaWduZWQgaW50IG1zciwgdWludDY0X3QgdmFsKQoreworCWFzbSB2b2xhdGlsZSgi d3Jtc3IiIDo6CisJCSAgICAgImMiIChtc3IpLCAiYSIgKCh1aW50MzJfdCl2YWwpLAorCQkgICAg ICJkIiAodmFsID4+IDMyKSwgIkQiICgweDljNWEyMDNhKSk7Cit9CisKIHN0YXRpYyBjb25zdCBz dHJ1Y3QgY3B1aWRtYXNrIHsKIAl1aW50MTZfdCBmYW07CiAJY2hhciByZXZbMl07CkBAIC0xMjYs MTI2ICsxMzMsMjAzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRtYXNrICpfX2luaXQgbm9p bmxpbmUgZ2V0X2NwdWlkbWFzayhjb25zdCBjaGFyICpvcHQpCiB9CiAKIC8qCisgKiBTZXRzIGNh cHMgaW4gZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCwgcHJvYmVzIGZvciB0aGUgc3BlY2lmaWVkIG1h c2sgTVNSLCBhbmQKKyAqIHNldCBjYXBzIGluIGxldmVsbGluZ19jYXBzIGlmIGl0IGlzIGZvdW5k LiAgUHJvY2Vzc29ycyBwcmlvciB0byBGYW0gMTBoCisgKiByZXF1aXJlZCBhIDMyLWJpdCBwYXNz d29yZCBmb3IgbWFza2luZyBNU1JzLiAgUmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqLwor c3RhdGljIHVpbnQ2NF90IF9faW5pdCBfcHJvYmVfbWFza19tc3IodW5zaWduZWQgaW50IG1zciwg dWludDY0X3QgY2FwcykKK3sKKwl1bnNpZ25lZCBpbnQgaGksIGxvOworCisJZXhwZWN0ZWRfbGV2 ZWxsaW5nX2NhcCB8PSBjYXBzOworCisJaWYgKChyZG1zcl9hbWRfc2FmZShtc3IsICZsbywgJmhp KSA9PSAwKSAmJgorCSAgICAod3Jtc3JfYW1kX3NhZmUobXNyLCBsbywgaGkpID09IDApKQorCQls ZXZlbGxpbmdfY2FwcyB8PSBjYXBzOworCisJcmV0dXJuICgodWludDY0X3QpaGkgPDwgMzIpIHwg bG87Cit9CisKKy8qCisgKiBQcm9iZSBmb3IgdGhlIGV4aXN0YW5jZSBvZiB0aGUgZXhwZWN0ZWQg bWFza2luZyBNU1JzLiAgVGhleSBtaWdodCBlYXNpbHkKKyAqIG5vdCBiZSBhdmFpbGFibGUgaWYg WGVuIGlzIHJ1bm5pbmcgdmlydHVhbGlzZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBub2lu bGluZSBwcm9iZV9tYXNraW5nX21zcnModm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgY3B1aW5mb194 ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKKworCS8qCisJICogRmlyc3QsIHdvcmsgb3V0IHdoaWNo IG1hc2tpbmcgTVNScyB3ZSBzaG91bGQgaGF2ZSwgYmFzZWQgb24KKwkgKiByZXZpc2lvbiBhbmQg Y3B1aWQuCisJICovCisKKwkvKiBGYW0xMSBkb2Vzbid0IHN1cHBvcnQgbWFza2luZyBhdCBhbGwu ICovCisJaWYgKGMtPng4NiA9PSAweDExKQorCQlyZXR1cm47CisKKwljcHVpZG1hc2tfZGVmYXVs dHMuXzFjZCA9CisJCV9wcm9iZV9tYXNrX21zcihNU1JfSzhfRkVBVFVSRV9NQVNLLCBMQ0FQXzFj ZCk7CisJY3B1aWRtYXNrX2RlZmF1bHRzLmUxY2QgPQorCQlfcHJvYmVfbWFza19tc3IoTVNSX0s4 X0VYVF9GRUFUVVJFX01BU0ssIExDQVBfZTFjZCk7CisKKwlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0g NykKKwkJY3B1aWRtYXNrX2RlZmF1bHRzLl83YWIwID0KKwkJCV9wcm9iZV9tYXNrX21zcihNU1Jf QU1EX0w3UzBfRkVBVFVSRV9NQVNLLCBMQ0FQXzdhYjApOworCisJaWYgKGMtPng4NiA9PSAweDE1 ICYmIGMtPmNwdWlkX2xldmVsID49IDYgJiYgY3B1aWRfZWN4KDYpKQorCQljcHVpZG1hc2tfZGVm YXVsdHMuXzZjID0KKwkJCV9wcm9iZV9tYXNrX21zcihNU1JfQU1EX1RIUk1fRkVBVFVSRV9NQVNL LCBMQ0FQXzZjKTsKKworCS8qCisJICogRG9uJ3QgYm90aGVyIHdhcm5pbmcgYWJvdXQgYSBtaXNt YXRjaCBpZiB2aXJ0dWFsaXNlZC4gIFRoZXNlIE1TUnMKKwkgKiBhcmUgbm90IGFyY2hpdGVjdHVy YWwgYW5kIGFsbW9zdCBuZXZlciB2aXJ0dWFsaXNlZC4KKwkgKi8KKwlpZiAoKGV4cGVjdGVkX2xl dmVsbGluZ19jYXAgPT0gbGV2ZWxsaW5nX2NhcHMpIHx8CisJICAgIGNwdV9oYXNfaHlwZXJ2aXNv cikKKwkJcmV0dXJuOworCisJcHJpbnRrKFhFTkxPR19XQVJOSU5HICJNaXNtYXRjaCBiZXR3ZWVu IGV4cGVjdGVkICglI3gpICIKKwkgICAgICAgImFuZCByZWFsICglI3gpIGxldmVsbGluZyBjYXBz OiBtaXNzaW5nICUjeFxuIiwKKwkgICAgICAgZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCwgbGV2ZWxs aW5nX2NhcHMsCisJICAgICAgIChleHBlY3RlZF9sZXZlbGxpbmdfY2FwIF4gbGV2ZWxsaW5nX2Nh cHMpICYgbGV2ZWxsaW5nX2NhcHMpOworCXByaW50ayhYRU5MT0dfV0FSTklORyAiRmFtICUjeCwg bW9kZWwgJSN4IGxldmVsICUjeFxuIiwKKwkgICAgICAgYy0+eDg2LCBjLT54ODZfbW9kZWwsIGMt PmNwdWlkX2xldmVsKTsKKwlwcmludGsoWEVOTE9HX1dBUk5JTkcKKwkgICAgICAgIklmIG5vdCBy dW5uaW5nIHZpcnR1YWxpc2VkLCBwbGVhc2UgcmVwb3J0IGEgYnVnXG4iKTsKK30KKworLyoKKyAq IENvbnRleHQgc3dpdGNoIGxldmVsbGluZyBzdGF0ZSB0byB0aGUgbmV4dCBkb21haW4uICBBIHBh cmFtZXRlciBvZiBOVUxMIGlzCisgKiB1c2VkIHRvIGNvbnRleHQgc3dpdGNoIHRvIHRoZSBkZWZh dWx0IGhvc3Qgc3RhdGUgKGJ5IHRoZSBjcHUgYnJpbmd1cC1jb2RlLAorICogY3Jhc2ggcGF0aCwg ZXRjKS4KKyAqLworc3RhdGljIHZvaWQgYW1kX2N0eHRfc3dpdGNoX2xldmVsbGluZyhjb25zdCBz dHJ1Y3QgZG9tYWluICpuZXh0ZCkKK3sKKwlzdHJ1Y3QgY3B1aWRtYXNrcyAqdGhlc2VfbWFza3Mg PSAmdGhpc19jcHUoY3B1aWRtYXNrcyk7CisJY29uc3Qgc3RydWN0IGNwdWlkbWFza3MgKm1hc2tz ID0gJmNwdWlkbWFza19kZWZhdWx0czsKKworI2RlZmluZSBMQVpZKGNhcCwgbXNyLCBmaWVsZCkJ CQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJaWYgKHVubGlrZWx5KHRoZXNlX21hc2tzLT5maWVsZCAh PSBtYXNrcy0+ZmllbGQpICYmCVwKKwkJICAgICgobGV2ZWxsaW5nX2NhcHMgJiBjYXApID09IGNh cCkpCQkJXAorCQl7CQkJCQkJCVwKKwkJCXdybXNyX2FtZChtc3IsIG1hc2tzLT5maWVsZCk7CQkJ XAorCQkJdGhlc2VfbWFza3MtPmZpZWxkID0gbWFza3MtPmZpZWxkOwkJXAorCQl9CQkJCQkJCVwK Kwl9KQorCisJTEFaWShMQ0FQXzFjZCwgIE1TUl9LOF9GRUFUVVJFX01BU0ssICAgICAgIF8xY2Qp OworCUxBWlkoTENBUF9lMWNkLCBNU1JfSzhfRVhUX0ZFQVRVUkVfTUFTSywgICBlMWNkKTsKKwlM QVpZKExDQVBfN2FiMCwgTVNSX0FNRF9MN1MwX0ZFQVRVUkVfTUFTSywgXzdhYjApOworCUxBWlko TENBUF82YywgICBNU1JfQU1EX1RIUk1fRkVBVFVSRV9NQVNLLCBfNmMpOworCisjdW5kZWYgTEFa WQorfQorCisvKgogICogTWFzayB0aGUgZmVhdHVyZXMgYW5kIGV4dGVuZGVkIGZlYXR1cmVzIHJl dHVybmVkIGJ5IENQVUlELiAgUGFyYW1ldGVycyBhcmUKICAqIHNldCBmcm9tIHRoZSBib290IGxp bmUgdmlhIHR3byBtZXRob2RzOgogICoKICAqICAgMSkgU3BlY2lmaWMgcHJvY2Vzc29yIHJldmlz aW9uIHN0cmluZwogICogICAyKSBVc2VyLWRlZmluZWQgbWFza3MKICAqCi0gKiBUaGUgcHJvY2Vz c29yIHJldmlzaW9uIHN0cmluZyBwYXJhbWV0ZXIgaGFzIHByZWNlZGVuZS4KKyAqIFRoZSB1c2Vy LWRlZmluZWQgbWFza3MgdGFrZSBwcmVjZWRlbmNlLgorICoKKyAqIEFNRCAibWFza2luZyBtc3Jz IiBhcmUgYWN0dWFsbHkgb3ZlcnJpZGVzLCBtYWtpbmcgaXQgcG9zc2libGUgdG8gYWR2ZXJ0aXNl CisgKiBmZWF0dXJlcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICBD YXJlIG11c3QgYmUgdGFrZW4gdG8KKyAqIGF2b2lkIHRoaXMsIGFzIHRoZSBhY2NpZGVudGFsbHkt YWR2ZXJ0aXNlZCBmZWF0dXJlcyB3aWxsIG5vdCBhY3R1YWxseQorICogZnVuY3Rpb24uCiAgKi8K LXN0YXRpYyB2b2lkIHNldF9jcHVpZG1hc2soY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQor c3RhdGljIHZvaWQgX19pbml0IG5vaW5saW5lIGFtZF9pbml0X2xldmVsbGluZyh2b2lkKQogewot CXN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdF9lY3gsIGZlYXRfZWR4OwotCXN0YXRpYyB1bnNpZ25l ZCBpbnQgZXh0ZmVhdF9lY3gsIGV4dGZlYXRfZWR4OwotCXN0YXRpYyB1bnNpZ25lZCBpbnQgbDdz MF9lYXgsIGw3czBfZWJ4OwotCXN0YXRpYyB1bnNpZ25lZCBpbnQgdGhlcm1hbF9lY3g7Ci0Jc3Rh dGljIGJvb2xfdCBza2lwX2ZlYXQsIHNraXBfZXh0ZmVhdDsKLQlzdGF0aWMgYm9vbF90IHNraXBf bDdzMF9lYXhfZWJ4LCBza2lwX3RoZXJtYWxfZWN4OwotCXN0YXRpYyBlbnVtIHsgbm90X3BhcnNl ZCwgbm9fbWFzaywgc2V0X21hc2sgfSBzdGF0dXM7Ci0JdW5zaWduZWQgaW50IGVheCwgZWJ4LCBl Y3gsIGVkeDsKLQotCWlmIChzdGF0dXMgPT0gbm9fbWFzaykKLQkJcmV0dXJuOworCWNvbnN0IHN0 cnVjdCBjcHVpZG1hc2sgKm0gPSBOVUxMOwogCi0JaWYgKHN0YXR1cyA9PSBzZXRfbWFzaykKLQkJ Z290byBzZXRtYXNrOworCXByb2JlX21hc2tpbmdfbXNycygpOwogCi0JQVNTRVJUKChzdGF0dXMg PT0gbm90X3BhcnNlZCkgJiYgKGMgPT0gJmJvb3RfY3B1X2RhdGEpKTsKLQlzdGF0dXMgPSBub19t YXNrOworCWlmICgqb3B0X2ZhbXJldiAhPSAnXDAnKSB7CisJCW0gPSBnZXRfY3B1aWRtYXNrKG9w dF9mYW1yZXYpOwogCi0JLyogRmFtMTEgZG9lc24ndCBzdXBwb3J0IG1hc2tpbmcgYXQgYWxsLiAq LwotCWlmIChjLT54ODYgPT0gMHgxMSkKLQkJcmV0dXJuOworCQlpZiAoIW0pCisJCQlwcmludGso IkludmFsaWQgcHJvY2Vzc29yIHN0cmluZzogJXNcbiIsIG9wdF9mYW1yZXYpOworCX0KIAotCWlm ICh+KG9wdF9jcHVpZF9tYXNrX2VjeCAmIG9wdF9jcHVpZF9tYXNrX2VkeCAmCi0JICAgICAgb3B0 X2NwdWlkX21hc2tfZXh0X2VjeCAmIG9wdF9jcHVpZF9tYXNrX2V4dF9lZHggJgotCSAgICAgIG9w dF9jcHVpZF9tYXNrX2w3czBfZWF4ICYgb3B0X2NwdWlkX21hc2tfbDdzMF9lYnggJgotCSAgICAg IG9wdF9jcHVpZF9tYXNrX3RoZXJtYWxfZWN4KSkgewotCQlmZWF0X2VjeCA9IG9wdF9jcHVpZF9t YXNrX2VjeDsKLQkJZmVhdF9lZHggPSBvcHRfY3B1aWRfbWFza19lZHg7Ci0JCWV4dGZlYXRfZWN4 ID0gb3B0X2NwdWlkX21hc2tfZXh0X2VjeDsKLQkJZXh0ZmVhdF9lZHggPSBvcHRfY3B1aWRfbWFz a19leHRfZWR4OwotCQlsN3MwX2VheCA9IG9wdF9jcHVpZF9tYXNrX2w3czBfZWF4OwotCQlsN3Mw X2VieCA9IG9wdF9jcHVpZF9tYXNrX2w3czBfZWJ4OwotCQl0aGVybWFsX2VjeCA9IG9wdF9jcHVp ZF9tYXNrX3RoZXJtYWxfZWN4OwotCX0gZWxzZSBpZiAoKm9wdF9mYW1yZXYgPT0gJ1wwJykgewot CQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJY29uc3Qgc3RydWN0IGNwdWlkbWFzayAqbSA9IGdldF9j cHVpZG1hc2sob3B0X2ZhbXJldik7CisJaWYgKChsZXZlbGxpbmdfY2FwcyAmIExDQVBfMWNkKSA9 PSBMQ0FQXzFjZCkgeworCQl1aW50MzJfdCBlY3gsIGVkeCwgdG1wOwogCi0JCWlmICghbSkgewot CQkJcHJpbnRrKCJJbnZhbGlkIHByb2Nlc3NvciBzdHJpbmc6ICVzXG4iLCBvcHRfZmFtcmV2KTsK LQkJCXByaW50aygiQ1BVSUQgd2lsbCBub3QgYmUgbWFza2VkXG4iKTsKLQkJCXJldHVybjsKKwkJ Y3B1aWQoMHgwMDAwMDAwMSwgJnRtcCwgJnRtcCwgJmVjeCwgJmVkeCk7CisKKwkJaWYgKH4ob3B0 X2NwdWlkX21hc2tfZWN4ICYgb3B0X2NwdWlkX21hc2tfZWR4KSkgeworCQkJZWN4ICY9IG9wdF9j cHVpZF9tYXNrX2VjeDsKKwkJCWVkeCAmPSBvcHRfY3B1aWRfbWFza19lZHg7CisJCX0gZWxzZSBp ZiAobSkgeworCQkJZWN4ICY9IG0tPmVjeDsKKwkJCWVkeCAmPSBtLT5lZHg7CiAJCX0KLQkJZmVh dF9lY3ggPSBtLT5lY3g7Ci0JCWZlYXRfZWR4ID0gbS0+ZWR4OwotCQlleHRmZWF0X2VjeCA9IG0t PmV4dF9lY3g7Ci0JCWV4dGZlYXRfZWR4ID0gbS0+ZXh0X2VkeDsKKworCQkvKiBGYXN0LWZvcndh cmQgYml0cyAtIE11c3QgYmUgc2V0LiAqLworCQlpZiAoZWN4ICYgY3B1ZmVhdF9tYXNrKFg4Nl9G RUFUVVJFX1hTQVZFKSkKKwkJCWVjeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NYU0FW RSk7CisJCWVkeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQVBJQyk7CisKKwkJLyogQWxs b3cgdGhlIEhZUEVSVklTT1IgYml0IHRvIGJlIHNldCB2aWEgZ3Vlc3QgcG9saWN5LiAqLworCQll Y3ggfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpOworCisJCWNwdWlkbWFz a19kZWZhdWx0cy5fMWNkID0gKCh1aW50NjRfdCllY3ggPDwgMzIpIHwgZWR4OwogCX0KIAotICAg ICAgICAvKiBTZXR0aW5nIGJpdHMgaW4gdGhlIENQVUlEIG1hc2sgTVNSIHRoYXQgYXJlIG5vdCBz ZXQgaW4gdGhlCi0gICAgICAgICAqIHVubWFza2VkIENQVUlEIHJlc3BvbnNlIGNhbiBjYXVzZSB0 aG9zZSBiaXRzIHRvIGJlIHNldCBpbiB0aGUKLSAgICAgICAgICogbWFza2VkIHJlc3BvbnNlLiAg QXZvaWQgdGhhdCBieSBleHBsaWNpdGx5IG1hc2tpbmcgaW4gc29mdHdhcmUuICovCi0gICAgICAg IGZlYXRfZWN4ICY9IGNwdWlkX2VjeCgweDAwMDAwMDAxKTsKLSAgICAgICAgZmVhdF9lZHggJj0g Y3B1aWRfZWR4KDB4MDAwMDAwMDEpOwotICAgICAgICBleHRmZWF0X2VjeCAmPSBjcHVpZF9lY3go MHg4MDAwMDAwMSk7Ci0gICAgICAgIGV4dGZlYXRfZWR4ICY9IGNwdWlkX2VkeCgweDgwMDAwMDAx KTsKKwlpZiAoKGxldmVsbGluZ19jYXBzICYgTENBUF9lMWNkKSA9PSBMQ0FQX2UxY2QpIHsKKwkJ dWludDMyX3QgZWN4LCBlZHgsIHRtcDsKIAotCXN0YXR1cyA9IHNldF9tYXNrOwotCXByaW50aygi V3JpdGluZyBDUFVJRCBmZWF0dXJlIG1hc2sgRUNYOkVEWCAtPiAlMDhYaDolMDhYaFxuIiwgCi0J ICAgICAgIGZlYXRfZWN4LCBmZWF0X2VkeCk7Ci0JcHJpbnRrKCJXcml0aW5nIENQVUlEIGV4dGVu ZGVkIGZlYXR1cmUgbWFzayBFQ1g6RURYIC0+ICUwOFhoOiUwOFhoXG4iLCAKLQkgICAgICAgZXh0 ZmVhdF9lY3gsIGV4dGZlYXRfZWR4KTsKKwkJY3B1aWQoMHg4MDAwMDAwMSwgJnRtcCwgJnRtcCwg JmVjeCwgJmVkeCk7CiAKLQlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gNykKLQkJY3B1aWRfY291bnQo NywgMCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0JZWxzZQotCQllYnggPSBlYXggPSAwOwot CWlmICgoZWF4IHwgZWJ4KSAmJiB+KGw3czBfZWF4ICYgbDdzMF9lYngpKSB7Ci0JCWlmIChsN3Mw X2VheCA+IGVheCkKLQkJCWw3czBfZWF4ID0gZWF4OwotCQlsN3MwX2VieCAmPSBlYng7Ci0JCXBy aW50aygiV3JpdGluZyBDUFVJRCBsZWFmIDcgc3VibGVhZiAwIGZlYXR1cmUgbWFzayBFQVg6RUJY IC0+ICUwOFhoOiUwOFhoXG4iLAotCQkgICAgICAgbDdzMF9lYXgsIGw3czBfZWJ4KTsKLQl9IGVs c2UKLQkJc2tpcF9sN3MwX2VheF9lYnggPSAxOwotCi0JLyogT25seSBGYW0xNSBoYXMgdGhlIHJl c3BlY3RpdmUgTVNSLiAqLwotCWVjeCA9IGMtPng4NiA9PSAweDE1ICYmIGMtPmNwdWlkX2xldmVs ID49IDYgPyBjcHVpZF9lY3goNikgOiAwOwotCWlmIChlY3ggJiYgfnRoZXJtYWxfZWN4KSB7Ci0J CXRoZXJtYWxfZWN4ICY9IGVjeDsKLQkJcHJpbnRrKCJXcml0aW5nIENQVUlEIHRoZXJtYWwvcG93 ZXIgZmVhdHVyZSBtYXNrIEVDWCAtPiAlMDhYaFxuIiwKLQkJICAgICAgIHRoZXJtYWxfZWN4KTsK LQl9IGVsc2UKLQkJc2tpcF90aGVybWFsX2VjeCA9IDE7Ci0KLSBzZXRtYXNrOgotCS8qIEFNRCBw cm9jZXNzb3JzIHByaW9yIHRvIGZhbWlseSAxMGggcmVxdWlyZWQgYSAzMi1iaXQgcGFzc3dvcmQg Ki8KLQlpZiAoIXNraXBfZmVhdCAmJgotCSAgICB3cm1zcl9hbWRfc2FmZShNU1JfSzhfRkVBVFVS RV9NQVNLLCBmZWF0X2VkeCwgZmVhdF9lY3gpKSB7Ci0JCXNraXBfZmVhdCA9IDE7Ci0JCXByaW50 aygiRmFpbGVkIHRvIHNldCBDUFVJRCBmZWF0dXJlIG1hc2tcbiIpOworCQlpZiAofihvcHRfY3B1 aWRfbWFza19leHRfZWN4ICYgb3B0X2NwdWlkX21hc2tfZXh0X2VkeCkpIHsKKwkJCWVjeCAmPSBv cHRfY3B1aWRfbWFza19leHRfZWN4OworCQkJZWR4ICY9IG9wdF9jcHVpZF9tYXNrX2V4dF9lZHg7 CisJCX0gZWxzZSBpZiAobSkgeworCQkJZWN4ICY9IG0tPmV4dF9lY3g7CisJCQllZHggJj0gbS0+ ZXh0X2VkeDsKKwkJfQorCisJCS8qIEZhc3QtZm9yd2FyZCBiaXRzIC0gTXVzdCBiZSBzZXQuICov CisJCWVkeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQVBJQyk7CisKKwkJY3B1aWRtYXNr X2RlZmF1bHRzLmUxY2QgPSAoKHVpbnQ2NF90KWVjeCA8PCAzMikgfCBlZHg7CiAJfQogCi0JaWYg KCFza2lwX2V4dGZlYXQgJiYKLQkgICAgd3Jtc3JfYW1kX3NhZmUoTVNSX0s4X0VYVF9GRUFUVVJF X01BU0ssIGV4dGZlYXRfZWR4LCBleHRmZWF0X2VjeCkpIHsKLQkJc2tpcF9leHRmZWF0ID0gMTsK LQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0IENQVUlEIGV4dGVuZGVkIGZlYXR1cmUgbWFza1xuIik7 CisJaWYgKChsZXZlbGxpbmdfY2FwcyAmIExDQVBfN2FiMCkgPT0gTENBUF83YWIwKSB7CisJCXVp bnQzMl90IGVheCwgZWJ4LCB0bXA7CisKKwkJY3B1aWQoMHgwMDAwMDAwNywgJmVheCwgJmVieCwg JnRtcCwgJnRtcCk7CisKKwkJaWYgKH4ob3B0X2NwdWlkX21hc2tfbDdzMF9lYXggJiBvcHRfY3B1 aWRfbWFza19sN3MwX2VieCkpIHsKKwkJCWVheCAmPSBvcHRfY3B1aWRfbWFza19sN3MwX2VheDsK KwkJCWVieCAmPSBvcHRfY3B1aWRfbWFza19sN3MwX2VieDsKKwkJfQorCisJCWNwdWlkbWFza19k ZWZhdWx0cy5fN2FiMCAmPSAoKHVpbnQ2NF90KWVheCA8PCAzMikgfCBlYng7CiAJfQogCi0JaWYg KCFza2lwX2w3czBfZWF4X2VieCAmJgotCSAgICB3cm1zcl9hbWRfc2FmZShNU1JfQU1EX0w3UzBf RkVBVFVSRV9NQVNLLCBsN3MwX2VieCwgbDdzMF9lYXgpKSB7Ci0JCXNraXBfbDdzMF9lYXhfZWJ4 ID0gMTsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0IENQVUlEIGxlYWYgNyBzdWJsZWFmIDAgZmVh dHVyZSBtYXNrXG4iKTsKKwlpZiAoKGxldmVsbGluZ19jYXBzICYgTENBUF82YykgPT0gTENBUF82 YykgeworCQl1aW50MzJfdCBlY3ggPSBjcHVpZF9lY3goNik7CisKKwkJaWYgKH5vcHRfY3B1aWRf bWFza190aGVybWFsX2VjeCkKKwkJCWVjeCAmPSBvcHRfY3B1aWRfbWFza190aGVybWFsX2VjeDsK KworCQljcHVpZG1hc2tfZGVmYXVsdHMuXzZjICY9ICh+MFVMTCA8PCAzMikgfCBlY3g7CiAJfQog Ci0JaWYgKCFza2lwX3RoZXJtYWxfZWN4ICYmCi0JICAgIChyZG1zcl9hbWRfc2FmZShNU1JfQU1E X1RIUk1fRkVBVFVSRV9NQVNLLCAmZWF4LCAmZWR4KSB8fAotCSAgICAgd3Jtc3JfYW1kX3NhZmUo TVNSX0FNRF9USFJNX0ZFQVRVUkVfTUFTSywgdGhlcm1hbF9lY3gsIGVkeCkpKXsKLQkJc2tpcF90 aGVybWFsX2VjeCA9IDE7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCB0aGVybWFsL3Bv d2VyIGZlYXR1cmUgbWFza1xuIik7CisJaWYgKG9wdF9jcHVfaW5mbykgeworCQlwcmludGsoWEVO TE9HX0lORk8gIkxldmVsbGluZyBjYXBzOiAlI3hcbiIsIGxldmVsbGluZ19jYXBzKTsKKwkJcHJp bnRrKFhFTkxPR19JTkZPCisJCSAgICAgICAiTVNSIGRlZmF1bHRzOiAxZCAweCUwOHgsIDFjIDB4 JTA4eCwgZTFkIDB4JTA4eCwgIgorCQkgICAgICAgImUxYyAweCUwOHgsIDdhMCAweCUwOHgsIDdi MCAweCUwOHgsIDZjIDB4JTA4eFxuIiwKKwkJICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tfZGVm YXVsdHMuXzFjZCwKKwkJICAgICAgICh1aW50MzJfdCkoY3B1aWRtYXNrX2RlZmF1bHRzLl8xY2Qg Pj4gMzIpLAorCQkgICAgICAgKHVpbnQzMl90KWNwdWlkbWFza19kZWZhdWx0cy5lMWNkLAorCQkg ICAgICAgKHVpbnQzMl90KShjcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCA+PiAzMiksCisJCSAgICAg ICAodWludDMyX3QpKGNwdWlkbWFza19kZWZhdWx0cy5fN2FiMCA+PiAzMiksCisJCSAgICAgICAo dWludDMyX3QpY3B1aWRtYXNrX2RlZmF1bHRzLl83YWIwLAorCQkgICAgICAgKHVpbnQzMl90KWNw dWlkbWFza19kZWZhdWx0cy5fNmMpOwogCX0KIH0KIApAQCAtNDA5LDcgKzQ5MywxMCBAQCBzdGF0 aWMgdm9pZCBhbWRfZ2V0X3RvcG9sb2d5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAogc3RhdGlj IHZvaWQgZWFybHlfaW5pdF9hbWQoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCXNldF9jcHVp ZG1hc2soYyk7CisJaWYgKGMgPT0gJmJvb3RfY3B1X2RhdGEpCisJCWFtZF9pbml0X2xldmVsbGlu ZygpOworCisJYW1kX2N0eHRfc3dpdGNoX2xldmVsbGluZyhOVUxMKTsKIH0KIAogc3RhdGljIHZv aWQgaW5pdF9hbWQoc3RydWN0IGNwdWluZm9feDg2ICpjKQotLSAKMi4xLjQKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZl bAo=