From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v6 09/21] x86/cpu: Rework AMD masking MSR setup Date: Fri, 8 Apr 2016 21:31:45 +0100 Message-ID: <1460147517-11706-10-git-send-email-andrew.cooper3@citrix.com> References: <1460147517-11706-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: <1460147517-11706-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 PEpCZXVsaWNoQHN1c2UuY29tPgpSZXZpZXdlZC1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxr b25yYWQud2lsa0BvcmFjbGUuY29tPgotLS0KdjI6CiAqIFByb3ZpZGUgZXh0cmEgaW5mb3JtYXRp b24gaWYgb3B0X2NwdV9pbmZvCiAqIEV4dHJhIGNvbW1lbnQgaW5kaWNhdGluZyB0aGUgZXhwZWN0 ZWQgdXNlIG9mIGFtZF9jdHh0X3N3aXRjaF9sZXZlbGxpbmcoKQp2MzoKICogRml4IHRoZSBpbnRl cmFjdGlvbiBvZiB0aGUgZmFzdC1mb3J3YXJkIGJpdHMgd2l0aCB0aGUgb3ZlcnJpZGUgTVNScy4K ICogU3R5bGUgZml4dXBzLgp2NToKICogVHdlYWsgY29tbWVudHMgYW5kIHN0eWxlLgotLS0KIHhl bi9hcmNoL3g4Ni9jcHUvYW1kLmMgfCAyODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE4NCBpbnNlcnRpb25zKCspLCA5 NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvY3B1L2FtZC5jIGIveGVu L2FyY2gveDg2L2NwdS9hbWQuYwppbmRleCA1NTE2Nzc3Li45M2E4YTVlIDEwMDY0NAotLS0gYS94 ZW4vYXJjaC94ODYvY3B1L2FtZC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9jcHUvYW1kLmMKQEAgLTgw LDYgKzgwLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHdybXNyX2FtZF9zYWZlKHVuc2lnbmVkIGlu dCBtc3IsIHVuc2lnbmVkIGludCBsbywKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCB3 cm1zcl9hbWQodW5zaWduZWQgaW50IG1zciwgdWludDY0X3QgdmFsKQoreworCWFzbSB2b2xhdGls ZSgid3Jtc3IiIDo6CisJCSAgICAgImMiIChtc3IpLCAiYSIgKCh1aW50MzJfdCl2YWwpLAorCQkg ICAgICJkIiAodmFsID4+IDMyKSwgIkQiICgweDljNWEyMDNhKSk7Cit9CisKIHN0YXRpYyBjb25z dCBzdHJ1Y3QgY3B1aWRtYXNrIHsKIAl1aW50MTZfdCBmYW07CiAJY2hhciByZXZbMl07CkBAIC0x MjYsMTI2ICsxMzMsMjAzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRtYXNrICpfX2luaXQg bm9pbmxpbmUgZ2V0X2NwdWlkbWFzayhjb25zdCBjaGFyICpvcHQpCiB9CiAKIC8qCisgKiBTZXRz IGNhcHMgaW4gZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCwgcHJvYmVzIGZvciB0aGUgc3BlY2lmaWVk IG1hc2sgTVNSLCBhbmQKKyAqIHNldCBjYXBzIGluIGxldmVsbGluZ19jYXBzIGlmIGl0IGlzIGZv dW5kLiAgUHJvY2Vzc29ycyBwcmlvciB0byBGYW0gMTBoCisgKiByZXF1aXJlZCBhIDMyLWJpdCBw YXNzd29yZCBmb3IgbWFza2luZyBNU1JzLiAgUmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAq Lworc3RhdGljIHVpbnQ2NF90IF9faW5pdCBfcHJvYmVfbWFza19tc3IodW5zaWduZWQgaW50IG1z ciwgdWludDY0X3QgY2FwcykKK3sKKwl1bnNpZ25lZCBpbnQgaGksIGxvOworCisJZXhwZWN0ZWRf bGV2ZWxsaW5nX2NhcCB8PSBjYXBzOworCisJaWYgKChyZG1zcl9hbWRfc2FmZShtc3IsICZsbywg JmhpKSA9PSAwKSAmJgorCSAgICAod3Jtc3JfYW1kX3NhZmUobXNyLCBsbywgaGkpID09IDApKQor CQlsZXZlbGxpbmdfY2FwcyB8PSBjYXBzOworCisJcmV0dXJuICgodWludDY0X3QpaGkgPDwgMzIp IHwgbG87Cit9CisKKy8qCisgKiBQcm9iZSBmb3IgdGhlIGV4aXN0YW5jZSBvZiB0aGUgZXhwZWN0 ZWQgbWFza2luZyBNU1JzLiAgVGhleSBtaWdodCBlYXNpbHkKKyAqIG5vdCBiZSBhdmFpbGFibGUg aWYgWGVuIGlzIHJ1bm5pbmcgdmlydHVhbGlzZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBu b2lubGluZSBwcm9iZV9tYXNraW5nX21zcnModm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgY3B1aW5m b194ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKKworCS8qCisJICogRmlyc3QsIHdvcmsgb3V0IHdo aWNoIG1hc2tpbmcgTVNScyB3ZSBzaG91bGQgaGF2ZSwgYmFzZWQgb24KKwkgKiByZXZpc2lvbiBh bmQgY3B1aWQuCisJICovCisKKwkvKiBGYW0xMSBkb2Vzbid0IHN1cHBvcnQgbWFza2luZyBhdCBh bGwuICovCisJaWYgKGMtPng4NiA9PSAweDExKQorCQlyZXR1cm47CisKKwljcHVpZG1hc2tfZGVm YXVsdHMuXzFjZCA9CisJCV9wcm9iZV9tYXNrX21zcihNU1JfSzhfRkVBVFVSRV9NQVNLLCBMQ0FQ XzFjZCk7CisJY3B1aWRtYXNrX2RlZmF1bHRzLmUxY2QgPQorCQlfcHJvYmVfbWFza19tc3IoTVNS X0s4X0VYVF9GRUFUVVJFX01BU0ssIExDQVBfZTFjZCk7CisKKwlpZiAoYy0+Y3B1aWRfbGV2ZWwg Pj0gNykKKwkJY3B1aWRtYXNrX2RlZmF1bHRzLl83YWIwID0KKwkJCV9wcm9iZV9tYXNrX21zcihN U1JfQU1EX0w3UzBfRkVBVFVSRV9NQVNLLCBMQ0FQXzdhYjApOworCisJaWYgKGMtPng4NiA9PSAw eDE1ICYmIGMtPmNwdWlkX2xldmVsID49IDYgJiYgY3B1aWRfZWN4KDYpKQorCQljcHVpZG1hc2tf ZGVmYXVsdHMuXzZjID0KKwkJCV9wcm9iZV9tYXNrX21zcihNU1JfQU1EX1RIUk1fRkVBVFVSRV9N QVNLLCBMQ0FQXzZjKTsKKworCS8qCisJICogRG9uJ3QgYm90aGVyIHdhcm5pbmcgYWJvdXQgYSBt aXNtYXRjaCBpZiB2aXJ0dWFsaXNlZC4gIFRoZXNlIE1TUnMKKwkgKiBhcmUgbm90IGFyY2hpdGVj dHVyYWwgYW5kIGFsbW9zdCBuZXZlciB2aXJ0dWFsaXNlZC4KKwkgKi8KKwlpZiAoKGV4cGVjdGVk X2xldmVsbGluZ19jYXAgPT0gbGV2ZWxsaW5nX2NhcHMpIHx8CisJICAgIGNwdV9oYXNfaHlwZXJ2 aXNvcikKKwkJcmV0dXJuOworCisJcHJpbnRrKFhFTkxPR19XQVJOSU5HICJNaXNtYXRjaCBiZXR3 ZWVuIGV4cGVjdGVkICglI3gpICIKKwkgICAgICAgImFuZCByZWFsICglI3gpIGxldmVsbGluZyBj YXBzOiBtaXNzaW5nICUjeFxuIiwKKwkgICAgICAgZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCwgbGV2 ZWxsaW5nX2NhcHMsCisJICAgICAgIChleHBlY3RlZF9sZXZlbGxpbmdfY2FwIF4gbGV2ZWxsaW5n X2NhcHMpICYgbGV2ZWxsaW5nX2NhcHMpOworCXByaW50ayhYRU5MT0dfV0FSTklORyAiRmFtICUj eCwgbW9kZWwgJSN4IGxldmVsICUjeFxuIiwKKwkgICAgICAgYy0+eDg2LCBjLT54ODZfbW9kZWws IGMtPmNwdWlkX2xldmVsKTsKKwlwcmludGsoWEVOTE9HX1dBUk5JTkcKKwkgICAgICAgIklmIG5v dCBydW5uaW5nIHZpcnR1YWxpc2VkLCBwbGVhc2UgcmVwb3J0IGEgYnVnXG4iKTsKK30KKworLyoK KyAqIENvbnRleHQgc3dpdGNoIGxldmVsbGluZyBzdGF0ZSB0byB0aGUgbmV4dCBkb21haW4uICBB IHBhcmFtZXRlciBvZiBOVUxMIGlzCisgKiB1c2VkIHRvIGNvbnRleHQgc3dpdGNoIHRvIHRoZSBk ZWZhdWx0IGhvc3Qgc3RhdGUgKGJ5IHRoZSBjcHUgYnJpbmd1cC1jb2RlLAorICogY3Jhc2ggcGF0 aCwgZXRjKS4KKyAqLworc3RhdGljIHZvaWQgYW1kX2N0eHRfc3dpdGNoX2xldmVsbGluZyhjb25z dCBzdHJ1Y3QgZG9tYWluICpuZXh0ZCkKK3sKKwlzdHJ1Y3QgY3B1aWRtYXNrcyAqdGhlc2VfbWFz a3MgPSAmdGhpc19jcHUoY3B1aWRtYXNrcyk7CisJY29uc3Qgc3RydWN0IGNwdWlkbWFza3MgKm1h c2tzID0gJmNwdWlkbWFza19kZWZhdWx0czsKKworI2RlZmluZSBMQVpZKGNhcCwgbXNyLCBmaWVs ZCkJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJaWYgKHVubGlrZWx5KHRoZXNlX21hc2tzLT5maWVs ZCAhPSBtYXNrcy0+ZmllbGQpICYmCVwKKwkJICAgICgobGV2ZWxsaW5nX2NhcHMgJiBjYXApID09 IGNhcCkpCQkJXAorCQl7CQkJCQkJCVwKKwkJCXdybXNyX2FtZChtc3IsIG1hc2tzLT5maWVsZCk7 CQkJXAorCQkJdGhlc2VfbWFza3MtPmZpZWxkID0gbWFza3MtPmZpZWxkOwkJXAorCQl9CQkJCQkJ CVwKKwl9KQorCisJTEFaWShMQ0FQXzFjZCwgIE1TUl9LOF9GRUFUVVJFX01BU0ssICAgICAgIF8x Y2QpOworCUxBWlkoTENBUF9lMWNkLCBNU1JfSzhfRVhUX0ZFQVRVUkVfTUFTSywgICBlMWNkKTsK KwlMQVpZKExDQVBfN2FiMCwgTVNSX0FNRF9MN1MwX0ZFQVRVUkVfTUFTSywgXzdhYjApOworCUxB WlkoTENBUF82YywgICBNU1JfQU1EX1RIUk1fRkVBVFVSRV9NQVNLLCBfNmMpOworCisjdW5kZWYg TEFaWQorfQorCisvKgogICogTWFzayB0aGUgZmVhdHVyZXMgYW5kIGV4dGVuZGVkIGZlYXR1cmVz IHJldHVybmVkIGJ5IENQVUlELiAgUGFyYW1ldGVycyBhcmUKICAqIHNldCBmcm9tIHRoZSBib290 IGxpbmUgdmlhIHR3byBtZXRob2RzOgogICoKICAqICAgMSkgU3BlY2lmaWMgcHJvY2Vzc29yIHJl dmlzaW9uIHN0cmluZwogICogICAyKSBVc2VyLWRlZmluZWQgbWFza3MKICAqCi0gKiBUaGUgcHJv Y2Vzc29yIHJldmlzaW9uIHN0cmluZyBwYXJhbWV0ZXIgaGFzIHByZWNlZGVuZS4KKyAqIFRoZSB1 c2VyLWRlZmluZWQgbWFza3MgdGFrZSBwcmVjZWRlbmNlLgorICoKKyAqIEFNRCAibWFza2luZyBt c3JzIiBhcmUgYWN0dWFsbHkgb3ZlcnJpZGVzLCBtYWtpbmcgaXQgcG9zc2libGUgdG8gYWR2ZXJ0 aXNlCisgKiBmZWF0dXJlcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUu ICBDYXJlIG11c3QgYmUgdGFrZW4gdG8KKyAqIGF2b2lkIHRoaXMsIGFzIHRoZSBhY2NpZGVudGFs bHktYWR2ZXJ0aXNlZCBmZWF0dXJlcyB3aWxsIG5vdCBhY3R1YWxseQorICogZnVuY3Rpb24uCiAg Ki8KLXN0YXRpYyB2b2lkIHNldF9jcHVpZG1hc2soY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpj KQorc3RhdGljIHZvaWQgX19pbml0IG5vaW5saW5lIGFtZF9pbml0X2xldmVsbGluZyh2b2lkKQog ewotCXN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdF9lY3gsIGZlYXRfZWR4OwotCXN0YXRpYyB1bnNp Z25lZCBpbnQgZXh0ZmVhdF9lY3gsIGV4dGZlYXRfZWR4OwotCXN0YXRpYyB1bnNpZ25lZCBpbnQg bDdzMF9lYXgsIGw3czBfZWJ4OwotCXN0YXRpYyB1bnNpZ25lZCBpbnQgdGhlcm1hbF9lY3g7Ci0J c3RhdGljIGJvb2xfdCBza2lwX2ZlYXQsIHNraXBfZXh0ZmVhdDsKLQlzdGF0aWMgYm9vbF90IHNr aXBfbDdzMF9lYXhfZWJ4LCBza2lwX3RoZXJtYWxfZWN4OwotCXN0YXRpYyBlbnVtIHsgbm90X3Bh cnNlZCwgbm9fbWFzaywgc2V0X21hc2sgfSBzdGF0dXM7Ci0JdW5zaWduZWQgaW50IGVheCwgZWJ4 LCBlY3gsIGVkeDsKLQotCWlmIChzdGF0dXMgPT0gbm9fbWFzaykKLQkJcmV0dXJuOworCWNvbnN0 IHN0cnVjdCBjcHVpZG1hc2sgKm0gPSBOVUxMOwogCi0JaWYgKHN0YXR1cyA9PSBzZXRfbWFzaykK LQkJZ290byBzZXRtYXNrOworCXByb2JlX21hc2tpbmdfbXNycygpOwogCi0JQVNTRVJUKChzdGF0 dXMgPT0gbm90X3BhcnNlZCkgJiYgKGMgPT0gJmJvb3RfY3B1X2RhdGEpKTsKLQlzdGF0dXMgPSBu b19tYXNrOworCWlmICgqb3B0X2ZhbXJldiAhPSAnXDAnKSB7CisJCW0gPSBnZXRfY3B1aWRtYXNr KG9wdF9mYW1yZXYpOwogCi0JLyogRmFtMTEgZG9lc24ndCBzdXBwb3J0IG1hc2tpbmcgYXQgYWxs LiAqLwotCWlmIChjLT54ODYgPT0gMHgxMSkKLQkJcmV0dXJuOworCQlpZiAoIW0pCisJCQlwcmlu dGsoIkludmFsaWQgcHJvY2Vzc29yIHN0cmluZzogJXNcbiIsIG9wdF9mYW1yZXYpOworCX0KIAot CWlmICh+KG9wdF9jcHVpZF9tYXNrX2VjeCAmIG9wdF9jcHVpZF9tYXNrX2VkeCAmCi0JICAgICAg b3B0X2NwdWlkX21hc2tfZXh0X2VjeCAmIG9wdF9jcHVpZF9tYXNrX2V4dF9lZHggJgotCSAgICAg IG9wdF9jcHVpZF9tYXNrX2w3czBfZWF4ICYgb3B0X2NwdWlkX21hc2tfbDdzMF9lYnggJgotCSAg ICAgIG9wdF9jcHVpZF9tYXNrX3RoZXJtYWxfZWN4KSkgewotCQlmZWF0X2VjeCA9IG9wdF9jcHVp ZF9tYXNrX2VjeDsKLQkJZmVhdF9lZHggPSBvcHRfY3B1aWRfbWFza19lZHg7Ci0JCWV4dGZlYXRf ZWN4ID0gb3B0X2NwdWlkX21hc2tfZXh0X2VjeDsKLQkJZXh0ZmVhdF9lZHggPSBvcHRfY3B1aWRf bWFza19leHRfZWR4OwotCQlsN3MwX2VheCA9IG9wdF9jcHVpZF9tYXNrX2w3czBfZWF4OwotCQls N3MwX2VieCA9IG9wdF9jcHVpZF9tYXNrX2w3czBfZWJ4OwotCQl0aGVybWFsX2VjeCA9IG9wdF9j cHVpZF9tYXNrX3RoZXJtYWxfZWN4OwotCX0gZWxzZSBpZiAoKm9wdF9mYW1yZXYgPT0gJ1wwJykg ewotCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJY29uc3Qgc3RydWN0IGNwdWlkbWFzayAqbSA9IGdl dF9jcHVpZG1hc2sob3B0X2ZhbXJldik7CisJaWYgKChsZXZlbGxpbmdfY2FwcyAmIExDQVBfMWNk KSA9PSBMQ0FQXzFjZCkgeworCQl1aW50MzJfdCBlY3gsIGVkeCwgdG1wOwogCi0JCWlmICghbSkg ewotCQkJcHJpbnRrKCJJbnZhbGlkIHByb2Nlc3NvciBzdHJpbmc6ICVzXG4iLCBvcHRfZmFtcmV2 KTsKLQkJCXByaW50aygiQ1BVSUQgd2lsbCBub3QgYmUgbWFza2VkXG4iKTsKLQkJCXJldHVybjsK KwkJY3B1aWQoMHgwMDAwMDAwMSwgJnRtcCwgJnRtcCwgJmVjeCwgJmVkeCk7CisKKwkJaWYgKH4o b3B0X2NwdWlkX21hc2tfZWN4ICYgb3B0X2NwdWlkX21hc2tfZWR4KSkgeworCQkJZWN4ICY9IG9w dF9jcHVpZF9tYXNrX2VjeDsKKwkJCWVkeCAmPSBvcHRfY3B1aWRfbWFza19lZHg7CisJCX0gZWxz ZSBpZiAobSkgeworCQkJZWN4ICY9IG0tPmVjeDsKKwkJCWVkeCAmPSBtLT5lZHg7CiAJCX0KLQkJ ZmVhdF9lY3ggPSBtLT5lY3g7Ci0JCWZlYXRfZWR4ID0gbS0+ZWR4OwotCQlleHRmZWF0X2VjeCA9 IG0tPmV4dF9lY3g7Ci0JCWV4dGZlYXRfZWR4ID0gbS0+ZXh0X2VkeDsKKworCQkvKiBGYXN0LWZv cndhcmQgYml0cyAtIE11c3QgYmUgc2V0LiAqLworCQlpZiAoZWN4ICYgY3B1ZmVhdF9tYXNrKFg4 Nl9GRUFUVVJFX1hTQVZFKSkKKwkJCWVjeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NY U0FWRSk7CisJCWVkeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQVBJQyk7CisKKwkJLyog QWxsb3cgdGhlIEhZUEVSVklTT1IgYml0IHRvIGJlIHNldCB2aWEgZ3Vlc3QgcG9saWN5LiAqLwor CQllY3ggfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpOworCisJCWNwdWlk bWFza19kZWZhdWx0cy5fMWNkID0gKCh1aW50NjRfdCllY3ggPDwgMzIpIHwgZWR4OwogCX0KIAot ICAgICAgICAvKiBTZXR0aW5nIGJpdHMgaW4gdGhlIENQVUlEIG1hc2sgTVNSIHRoYXQgYXJlIG5v dCBzZXQgaW4gdGhlCi0gICAgICAgICAqIHVubWFza2VkIENQVUlEIHJlc3BvbnNlIGNhbiBjYXVz ZSB0aG9zZSBiaXRzIHRvIGJlIHNldCBpbiB0aGUKLSAgICAgICAgICogbWFza2VkIHJlc3BvbnNl LiAgQXZvaWQgdGhhdCBieSBleHBsaWNpdGx5IG1hc2tpbmcgaW4gc29mdHdhcmUuICovCi0gICAg ICAgIGZlYXRfZWN4ICY9IGNwdWlkX2VjeCgweDAwMDAwMDAxKTsKLSAgICAgICAgZmVhdF9lZHgg Jj0gY3B1aWRfZWR4KDB4MDAwMDAwMDEpOwotICAgICAgICBleHRmZWF0X2VjeCAmPSBjcHVpZF9l Y3goMHg4MDAwMDAwMSk7Ci0gICAgICAgIGV4dGZlYXRfZWR4ICY9IGNwdWlkX2VkeCgweDgwMDAw MDAxKTsKKwlpZiAoKGxldmVsbGluZ19jYXBzICYgTENBUF9lMWNkKSA9PSBMQ0FQX2UxY2QpIHsK KwkJdWludDMyX3QgZWN4LCBlZHgsIHRtcDsKIAotCXN0YXR1cyA9IHNldF9tYXNrOwotCXByaW50 aygiV3JpdGluZyBDUFVJRCBmZWF0dXJlIG1hc2sgRUNYOkVEWCAtPiAlMDhYaDolMDhYaFxuIiwg Ci0JICAgICAgIGZlYXRfZWN4LCBmZWF0X2VkeCk7Ci0JcHJpbnRrKCJXcml0aW5nIENQVUlEIGV4 dGVuZGVkIGZlYXR1cmUgbWFzayBFQ1g6RURYIC0+ICUwOFhoOiUwOFhoXG4iLCAKLQkgICAgICAg ZXh0ZmVhdF9lY3gsIGV4dGZlYXRfZWR4KTsKKwkJY3B1aWQoMHg4MDAwMDAwMSwgJnRtcCwgJnRt cCwgJmVjeCwgJmVkeCk7CiAKLQlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gNykKLQkJY3B1aWRfY291 bnQoNywgMCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0JZWxzZQotCQllYnggPSBlYXggPSAw OwotCWlmICgoZWF4IHwgZWJ4KSAmJiB+KGw3czBfZWF4ICYgbDdzMF9lYngpKSB7Ci0JCWlmIChs N3MwX2VheCA+IGVheCkKLQkJCWw3czBfZWF4ID0gZWF4OwotCQlsN3MwX2VieCAmPSBlYng7Ci0J CXByaW50aygiV3JpdGluZyBDUFVJRCBsZWFmIDcgc3VibGVhZiAwIGZlYXR1cmUgbWFzayBFQVg6 RUJYIC0+ICUwOFhoOiUwOFhoXG4iLAotCQkgICAgICAgbDdzMF9lYXgsIGw3czBfZWJ4KTsKLQl9 IGVsc2UKLQkJc2tpcF9sN3MwX2VheF9lYnggPSAxOwotCi0JLyogT25seSBGYW0xNSBoYXMgdGhl IHJlc3BlY3RpdmUgTVNSLiAqLwotCWVjeCA9IGMtPng4NiA9PSAweDE1ICYmIGMtPmNwdWlkX2xl dmVsID49IDYgPyBjcHVpZF9lY3goNikgOiAwOwotCWlmIChlY3ggJiYgfnRoZXJtYWxfZWN4KSB7 Ci0JCXRoZXJtYWxfZWN4ICY9IGVjeDsKLQkJcHJpbnRrKCJXcml0aW5nIENQVUlEIHRoZXJtYWwv cG93ZXIgZmVhdHVyZSBtYXNrIEVDWCAtPiAlMDhYaFxuIiwKLQkJICAgICAgIHRoZXJtYWxfZWN4 KTsKLQl9IGVsc2UKLQkJc2tpcF90aGVybWFsX2VjeCA9IDE7Ci0KLSBzZXRtYXNrOgotCS8qIEFN RCBwcm9jZXNzb3JzIHByaW9yIHRvIGZhbWlseSAxMGggcmVxdWlyZWQgYSAzMi1iaXQgcGFzc3dv cmQgKi8KLQlpZiAoIXNraXBfZmVhdCAmJgotCSAgICB3cm1zcl9hbWRfc2FmZShNU1JfSzhfRkVB VFVSRV9NQVNLLCBmZWF0X2VkeCwgZmVhdF9lY3gpKSB7Ci0JCXNraXBfZmVhdCA9IDE7Ci0JCXBy aW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCBmZWF0dXJlIG1hc2tcbiIpOworCQlpZiAofihvcHRf Y3B1aWRfbWFza19leHRfZWN4ICYgb3B0X2NwdWlkX21hc2tfZXh0X2VkeCkpIHsKKwkJCWVjeCAm PSBvcHRfY3B1aWRfbWFza19leHRfZWN4OworCQkJZWR4ICY9IG9wdF9jcHVpZF9tYXNrX2V4dF9l ZHg7CisJCX0gZWxzZSBpZiAobSkgeworCQkJZWN4ICY9IG0tPmV4dF9lY3g7CisJCQllZHggJj0g bS0+ZXh0X2VkeDsKKwkJfQorCisJCS8qIEZhc3QtZm9yd2FyZCBiaXRzIC0gTXVzdCBiZSBzZXQu ICovCisJCWVkeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQVBJQyk7CisKKwkJY3B1aWRt YXNrX2RlZmF1bHRzLmUxY2QgPSAoKHVpbnQ2NF90KWVjeCA8PCAzMikgfCBlZHg7CiAJfQogCi0J aWYgKCFza2lwX2V4dGZlYXQgJiYKLQkgICAgd3Jtc3JfYW1kX3NhZmUoTVNSX0s4X0VYVF9GRUFU VVJFX01BU0ssIGV4dGZlYXRfZWR4LCBleHRmZWF0X2VjeCkpIHsKLQkJc2tpcF9leHRmZWF0ID0g MTsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0IENQVUlEIGV4dGVuZGVkIGZlYXR1cmUgbWFza1xu Iik7CisJaWYgKChsZXZlbGxpbmdfY2FwcyAmIExDQVBfN2FiMCkgPT0gTENBUF83YWIwKSB7CisJ CXVpbnQzMl90IGVheCwgZWJ4LCB0bXA7CisKKwkJY3B1aWQoMHgwMDAwMDAwNywgJmVheCwgJmVi eCwgJnRtcCwgJnRtcCk7CisKKwkJaWYgKH4ob3B0X2NwdWlkX21hc2tfbDdzMF9lYXggJiBvcHRf Y3B1aWRfbWFza19sN3MwX2VieCkpIHsKKwkJCWVheCAmPSBvcHRfY3B1aWRfbWFza19sN3MwX2Vh eDsKKwkJCWVieCAmPSBvcHRfY3B1aWRfbWFza19sN3MwX2VieDsKKwkJfQorCisJCWNwdWlkbWFz a19kZWZhdWx0cy5fN2FiMCAmPSAoKHVpbnQ2NF90KWVheCA8PCAzMikgfCBlYng7CiAJfQogCi0J aWYgKCFza2lwX2w3czBfZWF4X2VieCAmJgotCSAgICB3cm1zcl9hbWRfc2FmZShNU1JfQU1EX0w3 UzBfRkVBVFVSRV9NQVNLLCBsN3MwX2VieCwgbDdzMF9lYXgpKSB7Ci0JCXNraXBfbDdzMF9lYXhf ZWJ4ID0gMTsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0IENQVUlEIGxlYWYgNyBzdWJsZWFmIDAg ZmVhdHVyZSBtYXNrXG4iKTsKKwlpZiAoKGxldmVsbGluZ19jYXBzICYgTENBUF82YykgPT0gTENB UF82YykgeworCQl1aW50MzJfdCBlY3ggPSBjcHVpZF9lY3goNik7CisKKwkJaWYgKH5vcHRfY3B1 aWRfbWFza190aGVybWFsX2VjeCkKKwkJCWVjeCAmPSBvcHRfY3B1aWRfbWFza190aGVybWFsX2Vj eDsKKworCQljcHVpZG1hc2tfZGVmYXVsdHMuXzZjICY9ICh+MFVMTCA8PCAzMikgfCBlY3g7CiAJ fQogCi0JaWYgKCFza2lwX3RoZXJtYWxfZWN4ICYmCi0JICAgIChyZG1zcl9hbWRfc2FmZShNU1Jf QU1EX1RIUk1fRkVBVFVSRV9NQVNLLCAmZWF4LCAmZWR4KSB8fAotCSAgICAgd3Jtc3JfYW1kX3Nh ZmUoTVNSX0FNRF9USFJNX0ZFQVRVUkVfTUFTSywgdGhlcm1hbF9lY3gsIGVkeCkpKXsKLQkJc2tp cF90aGVybWFsX2VjeCA9IDE7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCB0aGVybWFs L3Bvd2VyIGZlYXR1cmUgbWFza1xuIik7CisJaWYgKG9wdF9jcHVfaW5mbykgeworCQlwcmludGso WEVOTE9HX0lORk8gIkxldmVsbGluZyBjYXBzOiAlI3hcbiIsIGxldmVsbGluZ19jYXBzKTsKKwkJ cHJpbnRrKFhFTkxPR19JTkZPCisJCSAgICAgICAiTVNSIGRlZmF1bHRzOiAxZCAweCUwOHgsIDFj IDB4JTA4eCwgZTFkIDB4JTA4eCwgIgorCQkgICAgICAgImUxYyAweCUwOHgsIDdhMCAweCUwOHgs IDdiMCAweCUwOHgsIDZjIDB4JTA4eFxuIiwKKwkJICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tf ZGVmYXVsdHMuXzFjZCwKKwkJICAgICAgICh1aW50MzJfdCkoY3B1aWRtYXNrX2RlZmF1bHRzLl8x Y2QgPj4gMzIpLAorCQkgICAgICAgKHVpbnQzMl90KWNwdWlkbWFza19kZWZhdWx0cy5lMWNkLAor CQkgICAgICAgKHVpbnQzMl90KShjcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCA+PiAzMiksCisJCSAg ICAgICAodWludDMyX3QpKGNwdWlkbWFza19kZWZhdWx0cy5fN2FiMCA+PiAzMiksCisJCSAgICAg ICAodWludDMyX3QpY3B1aWRtYXNrX2RlZmF1bHRzLl83YWIwLAorCQkgICAgICAgKHVpbnQzMl90 KWNwdWlkbWFza19kZWZhdWx0cy5fNmMpOwogCX0KIH0KIApAQCAtNDA5LDcgKzQ5MywxMCBAQCBz dGF0aWMgdm9pZCBhbWRfZ2V0X3RvcG9sb2d5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAogc3Rh dGljIHZvaWQgZWFybHlfaW5pdF9hbWQoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCXNldF9j cHVpZG1hc2soYyk7CisJaWYgKGMgPT0gJmJvb3RfY3B1X2RhdGEpCisJCWFtZF9pbml0X2xldmVs bGluZygpOworCisJYW1kX2N0eHRfc3dpdGNoX2xldmVsbGluZyhOVUxMKTsKIH0KIAogc3RhdGlj IHZvaWQgaW5pdF9hbWQoc3RydWN0IGNwdWluZm9feDg2ICpjKQotLSAKMi4xLjQKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1k ZXZlbAo=