From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 15/27] x86/hvm: Improve CPUID and MSR handling using named features Date: Wed, 4 Jan 2017 12:39:32 +0000 Message-ID: <1483533584-8015-16-git-send-email-andrew.cooper3@citrix.com> References: <1483533584-8015-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: <1483533584-8015-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 VGhpcyBhdm9pZHMgaHZtX2NwdWlkKCkgcmVjdXJzaW5nIGludG8gaXRzZWxmLCBhbmQgdGhlIE1T UiBwYXRocyB1c2luZwpodm1fY3B1aWQoKSB0byBvYnRhaW4gaW5mb3JtYXRpb24gd2hpY2ggaXMg ZGlyZWN0bHkgYXZhaWxhYmxlLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3 LmNvb3BlcjNAY2l0cml4LmNvbT4KLS0tCkNDOiBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3VzZS5j b20+Ci0tLQogeGVuL2FyY2gveDg2L2h2bS9odm0uYyB8IDk1ICsrKysrKysrKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjkgaW5zZXJ0 aW9ucygrKSwgNjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9o dm0uYyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKaW5kZXggZTIwNjBkMi4uNmEzZmRhYSAxMDA2 NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2bS9odm0uYworKysgYi94ZW4vYXJjaC94ODYvaHZtL2h2 bS5jCkBAIC0zMjkyLDYgKzMyOTIsNyBAQCB2b2lkIGh2bV9jcHVpZCh1bnNpZ25lZCBpbnQgaW5w dXQsIHVuc2lnbmVkIGludCAqZWF4LCB1bnNpZ25lZCBpbnQgKmVieCwKIHsKICAgICBzdHJ1Y3Qg dmNwdSAqdiA9IGN1cnJlbnQ7CiAgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKKyAg ICBjb25zdCBzdHJ1Y3QgY3B1aWRfcG9saWN5ICpwID0gZC0+YXJjaC5jcHVpZDsKICAgICB1bnNp Z25lZCBpbnQgY291bnQsIGR1bW15ID0gMDsKIAogICAgIGlmICggIWVheCApCkBAIC0zMzI5LDgg KzMzMzAsNiBAQCB2b2lkIGh2bV9jcHVpZCh1bnNpZ25lZCBpbnQgaW5wdXQsIHVuc2lnbmVkIGlu dCAqZWF4LCB1bnNpZ25lZCBpbnQgKmVieCwKIAogICAgIHN3aXRjaCAoIGlucHV0ICkKICAgICB7 Ci0gICAgICAgIHVuc2lnbmVkIGludCBfZWJ4LCBfZWN4LCBfZWR4OwotCiAgICAgY2FzZSAweDE6 CiAgICAgICAgIC8qIEZpeCB1cCBWTEFQSUMgZGV0YWlscy4gKi8KICAgICAgICAgKmVieCAmPSAw eDAwRkZGRkZGdTsKQEAgLTM0MTMsOCArMzQxMiw3IEBAIHZvaWQgaHZtX2NwdWlkKHVuc2lnbmVk IGludCBpbnB1dCwgdW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAogICAgICAg ICBicmVhazsKIAogICAgIGNhc2UgWFNUQVRFX0NQVUlEOgotICAgICAgICBodm1fY3B1aWQoMSwg TlVMTCwgTlVMTCwgJl9lY3gsIE5VTEwpOwotICAgICAgICBpZiAoICEoX2VjeCAmIGNwdWZlYXRf bWFzayhYODZfRkVBVFVSRV9YU0FWRSkpIHx8IGNvdW50ID49IDYzICkKKyAgICAgICAgaWYgKCAh cC0+YmFzaWMueHNhdmUgfHwgY291bnQgPj0gNjMgKQogICAgICAgICB7CiAgICAgICAgICAgICAq ZWF4ID0gKmVieCA9ICplY3ggPSAqZWR4ID0gMDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQy Niw3ICszNDI0LDcgQEAgdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25l ZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgICAgICB1aW50NjRfdCB4ZmVh dHVyZV9tYXNrID0gWFNUQVRFX0ZQX1NTRTsKICAgICAgICAgICAgIHVpbnQzMl90IHhzdGF0ZV9z aXplID0gWFNUQVRFX0FSRUFfTUlOX1NJWkU7CiAKLSAgICAgICAgICAgIGlmICggX2VjeCAmIGNw dWZlYXRfbWFzayhYODZfRkVBVFVSRV9BVlgpICkKKyAgICAgICAgICAgIGlmICggcC0+YmFzaWMu YXZ4ICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB4ZmVhdHVyZV9tYXNrIHw9IFhT VEFURV9ZTU07CiAgICAgICAgICAgICAgICAgeHN0YXRlX3NpemUgPSBtYXgoeHN0YXRlX3NpemUs CkBAIC0zNDM0LDEwICszNDMyLDcgQEAgdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0 LCB1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeHN0YXRlX3NpemVzW19YU1RBVEVfWU1NXSk7CiAgICAgICAgICAg ICB9CiAKLSAgICAgICAgICAgIF9lY3ggPSAwOwotICAgICAgICAgICAgaHZtX2NwdWlkKDcsIE5V TEwsICZfZWJ4LCAmX2VjeCwgTlVMTCk7Ci0KLSAgICAgICAgICAgIGlmICggX2VieCAmIGNwdWZl YXRfbWFzayhYODZfRkVBVFVSRV9NUFgpICkKKyAgICAgICAgICAgIGlmICggcC0+ZmVhdC5tcHgg KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHhmZWF0dXJlX21hc2sgfD0gWFNUQVRF X0JORFJFR1MgfCBYU1RBVEVfQk5EQ1NSOwogICAgICAgICAgICAgICAgIHhzdGF0ZV9zaXplID0g bWF4KHhzdGF0ZV9zaXplLApAQCAtMzQ0NSw3ICszNDQwLDcgQEAgdm9pZCBodm1fY3B1aWQodW5z aWduZWQgaW50IGlucHV0LCB1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXRlX3NpemVzW19YU1RBVEVfQk5E Q1NSXSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggX2VieCAmIGNwdWZlYXRf bWFzayhYODZfRkVBVFVSRV9BVlg1MTJGKSApCisgICAgICAgICAgICBpZiAoIHAtPmZlYXQuYXZ4 NTEyZiApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgeGZlYXR1cmVfbWFzayB8PSBY U1RBVEVfT1BNQVNLIHwgWFNUQVRFX1pNTSB8IFhTVEFURV9ISV9aTU07CiAgICAgICAgICAgICAg ICAgeHN0YXRlX3NpemUgPSBtYXgoeHN0YXRlX3NpemUsCkBAIC0zNDU5LDcgKzM0NTQsNyBAQCB2 b2lkIGh2bV9jcHVpZCh1bnNpZ25lZCBpbnQgaW5wdXQsIHVuc2lnbmVkIGludCAqZWF4LCB1bnNp Z25lZCBpbnQgKmVieCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3RhdGVf c2l6ZXNbX1hTVEFURV9ISV9aTU1dKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg KCBfZWN4ICYgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1BLVSkgKQorICAgICAgICAgICAgaWYg KCBwLT5mZWF0LnBrdSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgeGZlYXR1cmVf bWFzayB8PSBYU1RBVEVfUEtSVTsKICAgICAgICAgICAgICAgICB4c3RhdGVfc2l6ZSA9IG1heCh4 c3RhdGVfc2l6ZSwKQEAgLTM0NjcsOSArMzQ2Miw3IEBAIHZvaWQgaHZtX2NwdWlkKHVuc2lnbmVk IGludCBpbnB1dCwgdW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdGF0ZV9zaXplc1tfWFNUQVRFX1BLUlVdKTsK ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaHZtX2NwdWlkKDB4ODAwMDAwMDEsIE5VTEws IE5VTEwsICZfZWN4LCBOVUxMKTsKLQotICAgICAgICAgICAgaWYgKCBfZWN4ICYgY3B1ZmVhdF9t YXNrKFg4Nl9GRUFUVVJFX0xXUCkgKQorICAgICAgICAgICAgaWYgKCBwLT5leHRkLmx3cCApCiAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgeGZlYXR1cmVfbWFzayB8PSBYU1RBVEVfTFdQ OwogICAgICAgICAgICAgICAgIHhzdGF0ZV9zaXplID0gbWF4KHhzdGF0ZV9zaXplLApAQCAtMzQ5 Myw3ICszNDg2LDcgQEAgdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25l ZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgIGNhc2UgMToKICAgICAgICAg ICAgICplYXggJj0gaHZtX2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF9EYTFdOwogCi0gICAgICAgICAg ICBpZiAoICplYXggJiBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfWFNBVkVTKSApCisgICAgICAg ICAgICBpZiAoIHAtPnhzdGF0ZS54c2F2ZXMgKQogICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgIC8qCiAgICAgICAgICAgICAgICAgICogQWx3YXlzIHJlYWQgQ1BVSURbMHhELDFdLkVCWCBm cm9tIGhhcmR3YXJlLCByYXRoZXIgdGhhbgpAQCAtMzU3NCwxNCArMzU2NywxMSBAQCB2b2lkIGh2 bV9jcHVpZCh1bnNpZ25lZCBpbnQgaW5wdXQsIHVuc2lnbmVkIGludCAqZWF4LCB1bnNpZ25lZCBp bnQgKmVieCwKICAgICAgICAgaWYgKCAqZWF4ID4gY291bnQgKQogICAgICAgICAgICAgKmVheCA9 IGNvdW50OwogCi0gICAgICAgIGh2bV9jcHVpZCgxLCBOVUxMLCBOVUxMLCBOVUxMLCAmX2VkeCk7 Ci0gICAgICAgIGNvdW50ID0gX2VkeCAmIChjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUEFFKSB8 Ci0gICAgICAgICAgICAgICAgICAgICAgICBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUFNFMzYp KSA/IDM2IDogMzI7CisgICAgICAgIGNvdW50ID0gKHAtPmJhc2ljLnBhZSB8fCBwLT5iYXNpYy5w c2UzNikgPyAzNiA6IDMyOwogICAgICAgICBpZiAoICplYXggPCBjb3VudCApCiAgICAgICAgICAg ICAqZWF4ID0gY291bnQ7CiAKLSAgICAgICAgaHZtX2NwdWlkKDB4ODAwMDAwMDEsIE5VTEwsIE5V TEwsIE5VTEwsICZfZWR4KTsKLSAgICAgICAgKmVheCB8PSAoX2VkeCAmIGNwdWZlYXRfbWFzayhY ODZfRkVBVFVSRV9MTSkgPyB2YWRkcl9iaXRzIDogMzIpIDw8IDg7CisgICAgICAgICplYXggfD0g KHAtPmV4dGQubG0gPyB2YWRkcl9iaXRzIDogMzIpIDw8IDg7CiAKICAgICAgICAgKmVieCAmPSBo dm1fZmVhdHVyZXNldFtGRUFUVVJFU0VUX2U4Yl07CiAgICAgICAgIGJyZWFrOwpAQCAtMzY0OCwy NiArMzYzOCwxNiBAQCB2b2lkIGh2bV9yZHRzY19pbnRlcmNlcHQoc3RydWN0IGNwdV91c2VyX3Jl Z3MgKnJlZ3MpCiBpbnQgaHZtX21zcl9yZWFkX2ludGVyY2VwdCh1bnNpZ25lZCBpbnQgbXNyLCB1 aW50NjRfdCAqbXNyX2NvbnRlbnQpCiB7CiAgICAgc3RydWN0IHZjcHUgKnYgPSBjdXJyZW50Owor ICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47CiAgICAgdWludDY0X3QgKnZhcl9yYW5n ZV9iYXNlLCAqZml4ZWRfcmFuZ2VfYmFzZTsKLSAgICBib29sIG10cnIgPSBmYWxzZTsKICAgICBp bnQgcmV0ID0gWDg2RU1VTF9PS0FZOwogCiAgICAgdmFyX3JhbmdlX2Jhc2UgPSAodWludDY0X3Qg Kil2LT5hcmNoLmh2bV92Y3B1Lm10cnIudmFyX3JhbmdlczsKICAgICBmaXhlZF9yYW5nZV9iYXNl ID0gKHVpbnQ2NF90ICopdi0+YXJjaC5odm1fdmNwdS5tdHJyLmZpeGVkX3JhbmdlczsKIAotICAg IGlmICggbXNyID09IE1TUl9NVFJSY2FwIHx8Ci0gICAgICAgICAobXNyID49IE1TUl9JQTMyX01U UlJfUEhZU0JBU0UoMCkgJiYgbXNyIDw9IE1TUl9NVFJSZGVmVHlwZSkgKQotICAgIHsKLSAgICAg ICAgdW5zaWduZWQgaW50IGVkeDsKLQotICAgICAgICBodm1fY3B1aWQoMSwgTlVMTCwgTlVMTCwg TlVMTCwgJmVkeCk7Ci0gICAgICAgIGlmICggZWR4ICYgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJF X01UUlIpICkKLSAgICAgICAgICAgIG10cnIgPSB0cnVlOwotICAgIH0KLQogICAgIHN3aXRjaCAo IG1zciApCiAgICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgaW5kZXg7 CisgICAgICAgIHVuc2lnbmVkIGludCBpbmRleDsKIAogICAgIGNhc2UgTVNSX0VGRVI6CiAgICAg ICAgICptc3JfY29udGVudCA9IHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlcjsKQEAgLTM3MDMs NTMgKzM2ODMsNDkgQEAgaW50IGh2bV9tc3JfcmVhZF9pbnRlcmNlcHQodW5zaWduZWQgaW50IG1z ciwgdWludDY0X3QgKm1zcl9jb250ZW50KQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTVNS X01UUlJjYXA6Ci0gICAgICAgIGlmICggIW10cnIgKQorICAgICAgICBpZiAoICFkLT5hcmNoLmNw dWlkLT5iYXNpYy5tdHJyICkKICAgICAgICAgICAgIGdvdG8gZ3BfZmF1bHQ7CiAgICAgICAgICpt c3JfY29udGVudCA9IHYtPmFyY2guaHZtX3ZjcHUubXRyci5tdHJyX2NhcDsKICAgICAgICAgYnJl YWs7CiAgICAgY2FzZSBNU1JfTVRSUmRlZlR5cGU6Ci0gICAgICAgIGlmICggIW10cnIgKQorICAg ICAgICBpZiAoICFkLT5hcmNoLmNwdWlkLT5iYXNpYy5tdHJyICkKICAgICAgICAgICAgIGdvdG8g Z3BfZmF1bHQ7CiAgICAgICAgICptc3JfY29udGVudCA9IHYtPmFyY2guaHZtX3ZjcHUubXRyci5k ZWZfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgfCAodi0+YXJjaC5odm1fdmNwdS5tdHJy LmVuYWJsZWQgPDwgMTApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1TUl9NVFJSZml4NjRL XzAwMDAwOgotICAgICAgICBpZiAoICFtdHJyICkKKyAgICAgICAgaWYgKCAhZC0+YXJjaC5jcHVp ZC0+YmFzaWMubXRyciApCiAgICAgICAgICAgICBnb3RvIGdwX2ZhdWx0OwogICAgICAgICAqbXNy X2NvbnRlbnQgPSBmaXhlZF9yYW5nZV9iYXNlWzBdOwogICAgICAgICBicmVhazsKICAgICBjYXNl IE1TUl9NVFJSZml4MTZLXzgwMDAwOgogICAgIGNhc2UgTVNSX01UUlJmaXgxNktfQTAwMDA6Ci0g ICAgICAgIGlmICggIW10cnIgKQorICAgICAgICBpZiAoICFkLT5hcmNoLmNwdWlkLT5iYXNpYy5t dHJyICkKICAgICAgICAgICAgIGdvdG8gZ3BfZmF1bHQ7CiAgICAgICAgIGluZGV4ID0gbXNyIC0g TVNSX01UUlJmaXgxNktfODAwMDA7CiAgICAgICAgICptc3JfY29udGVudCA9IGZpeGVkX3Jhbmdl X2Jhc2VbaW5kZXggKyAxXTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNU1JfTVRSUmZpeDRL X0MwMDAwLi4uTVNSX01UUlJmaXg0S19GODAwMDoKLSAgICAgICAgaWYgKCAhbXRyciApCisgICAg ICAgIGlmICggIWQtPmFyY2guY3B1aWQtPmJhc2ljLm10cnIgKQogICAgICAgICAgICAgZ290byBn cF9mYXVsdDsKICAgICAgICAgaW5kZXggPSBtc3IgLSBNU1JfTVRSUmZpeDRLX0MwMDAwOwogICAg ICAgICAqbXNyX2NvbnRlbnQgPSBmaXhlZF9yYW5nZV9iYXNlW2luZGV4ICsgM107CiAgICAgICAg IGJyZWFrOwogICAgIGNhc2UgTVNSX0lBMzJfTVRSUl9QSFlTQkFTRSgwKS4uLk1TUl9JQTMyX01U UlJfUEhZU01BU0soTVRSUl9WQ05ULTEpOgotICAgICAgICBpZiAoICFtdHJyICkKKyAgICAgICAg aWYgKCAhZC0+YXJjaC5jcHVpZC0+YmFzaWMubXRyciApCiAgICAgICAgICAgICBnb3RvIGdwX2Zh dWx0OwogICAgICAgICBpbmRleCA9IG1zciAtIE1TUl9JQTMyX01UUlJfUEhZU0JBU0UoMCk7CiAg ICAgICAgICptc3JfY29udGVudCA9IHZhcl9yYW5nZV9iYXNlW2luZGV4XTsKICAgICAgICAgYnJl YWs7CiAKICAgICBjYXNlIE1TUl9JQTMyX1hTUzoKLSAgICAgICAgZWN4ID0gMTsKLSAgICAgICAg aHZtX2NwdWlkKFhTVEFURV9DUFVJRCwgJmVheCwgTlVMTCwgJmVjeCwgTlVMTCk7Ci0gICAgICAg IGlmICggIShlYXggJiBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfWFNBVkVTKSkgKQorICAgICAg ICBpZiAoICFkLT5hcmNoLmNwdWlkLT54c3RhdGUueHNhdmVzICkKICAgICAgICAgICAgIGdvdG8g Z3BfZmF1bHQ7CiAgICAgICAgICptc3JfY29udGVudCA9IHYtPmFyY2guaHZtX3ZjcHUubXNyX3hz czsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1TUl9JQTMyX0JORENGR1M6Ci0gICAgICAg IGVjeCA9IDA7Ci0gICAgICAgIGh2bV9jcHVpZCg3LCBOVUxMLCAmZWJ4LCAmZWN4LCBOVUxMKTsK LSAgICAgICAgaWYgKCAhKGVieCAmIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9NUFgpKSB8fAor ICAgICAgICBpZiAoICFkLT5hcmNoLmNwdWlkLT5mZWF0Lm1weCB8fAogICAgICAgICAgICAgICFo dm1fZ2V0X2d1ZXN0X2JuZGNmZ3ModiwgbXNyX2NvbnRlbnQpICkKICAgICAgICAgICAgIGdvdG8g Z3BfZmF1bHQ7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc5MCwyMSArMzc2NiwxMiBAQCBpbnQgaHZt X21zcl93cml0ZV9pbnRlcmNlcHQodW5zaWduZWQgaW50IG1zciwgdWludDY0X3QgbXNyX2NvbnRl bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbF90IG1heV9kZWZlcikKIHsKICAg ICBzdHJ1Y3QgdmNwdSAqdiA9IGN1cnJlbnQ7Ci0gICAgYm9vbCBtdHJyID0gZmFsc2U7CisgICAg c3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKICAgICBpbnQgcmV0ID0gWDg2RU1VTF9PS0FZ OwogCiAgICAgSFZNVFJBQ0VfM0QoTVNSX1dSSVRFLCBtc3IsCiAgICAgICAgICAgICAgICAodWlu dDMyX3QpbXNyX2NvbnRlbnQsICh1aW50MzJfdCkobXNyX2NvbnRlbnQgPj4gMzIpKTsKIAotICAg IGlmICggbXNyID49IE1TUl9JQTMyX01UUlJfUEhZU0JBU0UoMCkgJiYgbXNyIDw9IE1TUl9NVFJS ZGVmVHlwZSApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZWR4OwotCi0gICAgICAgIGh2 bV9jcHVpZCgxLCBOVUxMLCBOVUxMLCBOVUxMLCAmZWR4KTsKLSAgICAgICAgaWYgKCBlZHggJiBj cHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfTVRSUikgKQotICAgICAgICAgICAgbXRyciA9IHRydWU7 Ci0gICAgfQotCiAgICAgaWYgKCBtYXlfZGVmZXIgJiYgdW5saWtlbHkobW9uaXRvcmVkX21zcih2 LT5kb21haW4sIG1zcikpICkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2LT5hcmNoLnZtX2V2ZW50 KTsKQEAgLTM4MjAsNyArMzc4Nyw3IEBAIGludCBodm1fbXNyX3dyaXRlX2ludGVyY2VwdCh1bnNp Z25lZCBpbnQgbXNyLCB1aW50NjRfdCBtc3JfY29udGVudCwKIAogICAgIHN3aXRjaCAoIG1zciAp CiAgICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgaW5kZXg7CisgICAg ICAgIHVuc2lnbmVkIGludCBpbmRleDsKIAogICAgIGNhc2UgTVNSX0VGRVI6CiAgICAgICAgIGlm ICggaHZtX3NldF9lZmVyKG1zcl9jb250ZW50KSApCkBAIC0zODY2LDE0ICszODMzLDE0IEBAIGlu dCBodm1fbXNyX3dyaXRlX2ludGVyY2VwdCh1bnNpZ25lZCBpbnQgbXNyLCB1aW50NjRfdCBtc3Jf Y29udGVudCwKICAgICAgICAgZ290byBncF9mYXVsdDsKIAogICAgIGNhc2UgTVNSX01UUlJkZWZU eXBlOgotICAgICAgICBpZiAoICFtdHJyICkKKyAgICAgICAgaWYgKCAhZC0+YXJjaC5jcHVpZC0+ YmFzaWMubXRyciApCiAgICAgICAgICAgICBnb3RvIGdwX2ZhdWx0OwogICAgICAgICBpZiAoICFt dHJyX2RlZl90eXBlX21zcl9zZXQodi0+ZG9tYWluLCAmdi0+YXJjaC5odm1fdmNwdS5tdHJyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNyX2NvbnRlbnQpICkKICAgICAg ICAgICAgZ290byBncF9mYXVsdDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNU1JfTVRSUmZp eDY0S18wMDAwMDoKLSAgICAgICAgaWYgKCAhbXRyciApCisgICAgICAgIGlmICggIWQtPmFyY2gu Y3B1aWQtPmJhc2ljLm10cnIgKQogICAgICAgICAgICAgZ290byBncF9mYXVsdDsKICAgICAgICAg aWYgKCAhbXRycl9maXhfcmFuZ2VfbXNyX3NldCh2LT5kb21haW4sICZ2LT5hcmNoLmh2bV92Y3B1 Lm10cnIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNyX2NvbnRl bnQpICkKQEAgLTM4ODEsNyArMzg0OCw3IEBAIGludCBodm1fbXNyX3dyaXRlX2ludGVyY2VwdCh1 bnNpZ25lZCBpbnQgbXNyLCB1aW50NjRfdCBtc3JfY29udGVudCwKICAgICAgICAgYnJlYWs7CiAg ICAgY2FzZSBNU1JfTVRSUmZpeDE2S184MDAwMDoKICAgICBjYXNlIE1TUl9NVFJSZml4MTZLX0Ew MDAwOgotICAgICAgICBpZiAoICFtdHJyICkKKyAgICAgICAgaWYgKCAhZC0+YXJjaC5jcHVpZC0+ YmFzaWMubXRyciApCiAgICAgICAgICAgICBnb3RvIGdwX2ZhdWx0OwogICAgICAgICBpbmRleCA9 IG1zciAtIE1TUl9NVFJSZml4MTZLXzgwMDAwICsgMTsKICAgICAgICAgaWYgKCAhbXRycl9maXhf cmFuZ2VfbXNyX3NldCh2LT5kb21haW4sICZ2LT5hcmNoLmh2bV92Y3B1Lm10cnIsCkBAIC0zODg5 LDcgKzM4NTYsNyBAQCBpbnQgaHZtX21zcl93cml0ZV9pbnRlcmNlcHQodW5zaWduZWQgaW50IG1z ciwgdWludDY0X3QgbXNyX2NvbnRlbnQsCiAgICAgICAgICAgICBnb3RvIGdwX2ZhdWx0OwogICAg ICAgICBicmVhazsKICAgICBjYXNlIE1TUl9NVFJSZml4NEtfQzAwMDAuLi5NU1JfTVRSUmZpeDRL X0Y4MDAwOgotICAgICAgICBpZiAoICFtdHJyICkKKyAgICAgICAgaWYgKCAhZC0+YXJjaC5jcHVp ZC0+YmFzaWMubXRyciApCiAgICAgICAgICAgICBnb3RvIGdwX2ZhdWx0OwogICAgICAgICBpbmRl eCA9IG1zciAtIE1TUl9NVFJSZml4NEtfQzAwMDAgKyAzOwogICAgICAgICBpZiAoICFtdHJyX2Zp eF9yYW5nZV9tc3Jfc2V0KHYtPmRvbWFpbiwgJnYtPmFyY2guaHZtX3ZjcHUubXRyciwKQEAgLTM4 OTcsNyArMzg2NCw3IEBAIGludCBodm1fbXNyX3dyaXRlX2ludGVyY2VwdCh1bnNpZ25lZCBpbnQg bXNyLCB1aW50NjRfdCBtc3JfY29udGVudCwKICAgICAgICAgICAgIGdvdG8gZ3BfZmF1bHQ7CiAg ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTVNSX0lBMzJfTVRSUl9QSFlTQkFTRSgwKS4uLk1TUl9J QTMyX01UUlJfUEhZU01BU0soTVRSUl9WQ05ULTEpOgotICAgICAgICBpZiAoICFtdHJyICkKKyAg ICAgICAgaWYgKCAhZC0+YXJjaC5jcHVpZC0+YmFzaWMubXRyciApCiAgICAgICAgICAgICBnb3Rv IGdwX2ZhdWx0OwogICAgICAgICBpZiAoICFtdHJyX3Zhcl9yYW5nZV9tc3Jfc2V0KHYtPmRvbWFp biwgJnYtPmFyY2guaHZtX3ZjcHUubXRyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtc3IsIG1zcl9jb250ZW50KSApCkBAIC0zOTA1LDE4ICszODcyLDE0IEBAIGludCBo dm1fbXNyX3dyaXRlX2ludGVyY2VwdCh1bnNpZ25lZCBpbnQgbXNyLCB1aW50NjRfdCBtc3JfY29u dGVudCwKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1TUl9JQTMyX1hTUzoKLSAgICAgICAg ZWN4ID0gMTsKLSAgICAgICAgaHZtX2NwdWlkKFhTVEFURV9DUFVJRCwgJmVheCwgTlVMTCwgJmVj eCwgTlVMTCk7CiAgICAgICAgIC8qIE5vIFhTUyBmZWF0dXJlcyBjdXJyZW50bHkgc3VwcG9ydGVk IGZvciBndWVzdHMuICovCi0gICAgICAgIGlmICggIShlYXggJiBjcHVmZWF0X21hc2soWDg2X0ZF QVRVUkVfWFNBVkVTKSkgfHwgbXNyX2NvbnRlbnQgIT0gMCApCisgICAgICAgIGlmICggIWQtPmFy Y2guY3B1aWQtPnhzdGF0ZS54c2F2ZXMgfHwgbXNyX2NvbnRlbnQgIT0gMCApCiAgICAgICAgICAg ICBnb3RvIGdwX2ZhdWx0OwogICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lm1zcl94c3MgPSBtc3Jf Y29udGVudDsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1TUl9JQTMyX0JORENGR1M6Ci0g ICAgICAgIGVjeCA9IDA7Ci0gICAgICAgIGh2bV9jcHVpZCg3LCBOVUxMLCAmZWJ4LCAmZWN4LCBO VUxMKTsKLSAgICAgICAgaWYgKCAhKGVieCAmIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9NUFgp KSB8fAorICAgICAgICBpZiAoICFkLT5hcmNoLmNwdWlkLT5mZWF0Lm1weCB8fAogICAgICAgICAg ICAgICFodm1fc2V0X2d1ZXN0X2JuZGNmZ3ModiwgbXNyX2NvbnRlbnQpICkKICAgICAgICAgICAg IGdvdG8gZ3BfZmF1bHQ7CiAgICAgICAgIGJyZWFrOwotLSAKMi4xLjQKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK