From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mohit Gambhir Subject: [PATCH v2 2/2] xtf/vpmu: MSR read/write tests for VPMU Date: Fri, 28 Apr 2017 14:26:01 -0400 Message-ID: <20170428182601.5649-3-mohit.gambhir@oracle.com> References: <20170428182601.5649-1-mohit.gambhir@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170428182601.5649-1-mohit.gambhir@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: andrew.cooper3@citrix.com, xen-devel@lists.xen.org Cc: boris.ostrovsky@oracle.com, mgambhir@outlook.com, Mohit Gambhir List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCB0ZXN0cyBWUE1VIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGh5cGVydmlzb3Igb24g SW50ZWwgbWFjaGluZXMuClRoZSB0ZXN0cyB3cml0ZSB0byBhbGwgdmFsaWQgYml0cyBpbiB0aGUg TVNScyB0aGF0IGdldCBleHBvc2VkIHRvIHRoZSBndWVzdHMKd2hlbiBWUE1VIGlzIGVuYWJsZWQu IFRoZSB0ZXN0cyBhbHNvIHdyaXRlIGludmFsaWQgdmFsdWVzIHRvIHRoZSBiaXRzCnRoYXQgc2hv dWxkIGJlIG1hc2tlZCBhbmQgZXhwZWN0IHRoZSB3cm1zciBjYWxsIHRvIGZhdWx0LgoKVGhlIHRl c3RzIGFyZSBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgZm9yIEFNRCBtYWNoaW5lcyBhbmQgUFYgZ3Vl c3RzLgoKU2lnbmVkLW9mZi1ieTogTW9oaXQgR2FtYmhpciA8bW9oaXQuZ2FtYmhpckBvcmFjbGUu Y29tPgotLS0KIHRlc3RzL3ZwbXUvTWFrZWZpbGUgfCAgIDkgKysKIHRlc3RzL3ZwbXUvbWFpbi5j ICAgfCA0NDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0NTEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHRlc3RzL3ZwbXUvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy92cG11L21h aW4uYwoKZGlmZiAtLWdpdCBhL3Rlc3RzL3ZwbXUvTWFrZWZpbGUgYi90ZXN0cy92cG11L01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWIyOWQKLS0tIC9kZXYv bnVsbAorKysgYi90ZXN0cy92cG11L01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAoraW5jbHVkZSAk KFJPT1QpL2J1aWxkL2NvbW1vbi5taworCitOQU1FICAgICAgOj0gdnBtdQorQ0FURUdPUlkgIDo9 IGZ1bmN0aW9uYWwKK1RFU1QtRU5WUyA6PSBodm02NCBodm0zMgorCitvYmotcGVyZW52ICs9IG1h aW4ubworCitpbmNsdWRlICQoUk9PVCkvYnVpbGQvZ2VuLm1rCmRpZmYgLS1naXQgYS90ZXN0cy92 cG11L21haW4uYyBiL3Rlc3RzL3ZwbXUvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmI3ZjkzOTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy92cG11L21haW4uYwpA QCAtMCwwICsxLDQ0MiBAQAorLyoqCisgKiBAZmlsZSB0ZXN0cy92cG11L21haW4uYworICogQHJl ZiB0ZXN0LXZwbXUKKyAqCisgKiBAcGFnZSB0ZXN0LXZwbXUgdnBtdQorICoKKyAqIFRlc3QgVmly dHVhbCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGFs bG93cyBndWVzdHMgCisgKiB0byBwcm9ncmFtIGZpeGVkIGFuZCBnZW5lcmFsIHB1cnBvc2UgcGVy Zm9ybWFuY2UgY291bnRlcnMgdG8gbWVhc3VyZSBoYXJkd2FyZQorICogcGVyZm9ybWFuY2UuIAor ICoKKyAqIFRoZSB0ZXN0cyByZWFkIGFuZCB3cml0ZSBNU1JzIHRoYXQgYXJlICBleHBvc2VkIGJ5 IFZQTVUgZm9yIHZhcmlvdXMgdmVyc2lvbnMKKyAqIG9mIEFyY2hpdGVjdHVyYWwgUGVyZm9ybWFu Y2UgTW9uaXRvcmluZworICoKKyAqIEBzZWUgdGVzdHMvdnBtdS9tYWluLmMKKyAqLworCisjaW5j bHVkZSA8eHRmLmg+CisjaW5jbHVkZSA8YXJjaC9tc3ItaW5kZXguaD4KKyNpbmNsdWRlIDxhcmNo L21tLmg+CisKKyNkZWZpbmUgRVZFTlRfVU9QU19SRVRJUkVEICAgICAgICAgICAgICAgICAgIDB4 MDA0MTAxYzIKKyNkZWZpbmUgRVZFTlRfVU9QU19SRVRJUkVEX0FOWVRIUkVBRCAgICAgICAgIDB4 MDA2MTAxYzIKKyNkZWZpbmUgRklYRURfQ1RSX0NUTF9CSVRTICAgICAgICAgICAgICAgICAgIDQK KyNkZWZpbmUgRklYRURfQ1RSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEK KyNkZWZpbmUgRklYRURfQ1RSX0VOQUJMRV9BTllUSFJFQUQgICAgICAgICAgIDB4MDAwMDAwMEUK KyNkZWZpbmUgUEVSRkVWRU5UU0VMeF9FTkFCTEVfQU5ZVEhSRUFEICAgICAgICgxdWxsIDw8IDIx KQorI2RlZmluZSBQRVJGRVZFTlRTRUx4X0VOQUJMRV9QQ0IgICAgICAgICAgICAgKDF1bGwgPDwg MTkpCisjZGVmaW5lIERFQlVHQ1RMX0ZyZWV6ZV9MQlJfT05fUE1JICAgICAgICAgICAoMXVsbCA8 PCAxMSkKKyNkZWZpbmUgREVCVUdDVExfRnJlZXplX1BlcmZNb25fT25fUE1JICAgICAgICgxdWxs IDw8IDEyKQorI2RlZmluZSBQRVJGX0NBUEFCSUxJVElFU19GdWxsX1dpZHRoICAgICAgICAgKDF1 bGwgPDwgMTMpCisKK2NvbnN0IGNoYXIgdGVzdF90aXRsZVtdID0gIlRlc3QgdnBtdSI7CisKK3N0 YXRpYyB2b2lkIHRlc3RfdmFsaWRfbXNyX3dyaXRlKHVpbnQzMl90IGlkeCwgdWludDY0X3Qgd3Zh bCkKK3sKKyAgICB1aW50NjRfdCBydmFsID0gMDsKKworICAgIGlmKCB3cm1zcl9zYWZlKGlkeCwg d3ZhbCkgKQorICAgICAgICB4dGZfZmFpbHVyZSgiRmFpbDogd3Jtc3IoMHglMDh4LCAweCUwMTYi UFJJeDY0IikgZ290IHVuZXhwZWN0ZWQgZmF1bHQiCisgICAgICAgICAgICAgICAgICAgICJcbiIs IGlkeCwgd3ZhbCk7CisKKyAgICAvKiBjaGVjayB0byBzZWUgaWYgdGhlIHZhbHVlcyB3ZXJlIHdy aXR0ZW4gY29ycmVjdGx5ICovCisgICAgaWYgKCByZG1zcl9zYWZlKGlkeCwgJnJ2YWwpICkKKyAg ICAgICAgeHRmX2ZhaWx1cmUoIkZhaWw6IHJkbXNyKDB4JTA4eCwgMHgwMTYlIlBSSXhQVFIiKSBn b3QgdW5leHBlY3RlZCBmYXVsdCIKKyAgICAgICAgICAgICAgICAgICAgIlxuIiwgaWR4LCAodWlu dHB0cl90KSAmcnZhbCk7CisKKyAgICBpZiAoIHJ2YWwgIT0gd3ZhbCApCisgICAgICAgIHh0Zl9m YWlsdXJlKCJGYWlsOiByZG1zciBtaXNtYXRjaCBpZHggMHglMDh4LCB3dmFsIDB4JTAxNiJQUkl4 NjQKKyAgICAgICAgICAgICAgICAiLCBydmFsIDB4JTAxNiJQUkl4NjQiXG4iLCBpZHgsIHd2YWws IHJ2YWwpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbXNyX3dyaXRlKHVpbnQzMl90 IGlkeCwgdWludDY0X3Qgd3ZhbCkKK3sKKyAgICAvKiB3cm1zcl9zYWZlIG11c3QgcmV0dXJuIGZh bHNlIGFmdGVyIGZhdWx0aW5nICovCisgICAgaWYoICF3cm1zcl9zYWZlKGlkeCwgd3ZhbCkgKQor ICAgICAgICB4dGZfZmFpbHVyZSgiRmFpbDogd3Jtc3IoMHglMDh4LCAweCUwMTYiUFJJeDY0Iikg ZGlkIG5vdCBmYXVsdC5cbiIsIAorICAgICAgICAgICAgICAgIGlkeCwgd3ZhbCk7Cit9CisKK3N0 YXRpYyB2b2lkIHRlc3RfdHJhbnNwYXJlbnRfbXNyX3dyaXRlKHVpbnQzMl90IGlkeCwgdWludDY0 X3Qgd3ZhbCkKK3sKKyAgICB1aW50NjRfdCBydmFsMSA9IDAsIHJ2YWwyID0gMDsKKworICAgIC8q IHJlYWQgY3VycmVudCB2YWx1ZSAqLworICAgIGlmICggcmRtc3Jfc2FmZShpZHgsICZydmFsMSkg KQorICAgICAgICB4dGZfZmFpbHVyZSgiRmFpbDogcmRtc3IoMHglMDh4LCAweDAxNiUiUFJJeFBU UiIpIGdvdCB1bmV4cGVjdGVkIGZhdWx0IgorICAgICAgICAgICAgICAgICAgICAiXG4iLCBpZHgs ICh1aW50cHRyX3QpJnJ2YWwxKTsKKworICAgIC8qIHdybXNyIHNob3VsZCBub3QgZmF1bHQgYnV0 IHNob3VsZCBub3Qgd3JpdGUgYW55dGhpbmcgZWl0aGVyICovCisgICAgaWYgICggd3Jtc3Jfc2Fm ZShpZHgsIHd2YWwpICkKKyAgICAgICAgeHRmX2ZhaWx1cmUoIkZhaWw6IHdybXNyKDB4JTA4eCwg MHglMDE2IlBSSXg2NCIpIGdvdCB1bmV4cGVjdGVkIGZhdWx0IgorICAgICAgICAgICAgICAgICAg ICAiXG4iLCBpZHgsIHd2YWwpOworCisgICAgLyogcmVhZCBuZXcgdmFsdWUgKi8KKyAgICBpZiAo IHJkbXNyX3NhZmUoaWR4LCAmcnZhbDIpICkKKyAgICAgICAgeHRmX2ZhaWx1cmUoIkZhaWw6IHJk bXNyKDB4JTA4eCwgMHgwMTYlIlBSSXhQVFIiKSBnb3QgdW5leHBlY3RlZCBmYXVsdCIKKyAgICAg ICAgICAgICAgICAgICAgIlxuIiwgaWR4LCAodWludHB0cl90KSAmcnZhbDIpOworCisgICAgLyog Q2hlY2sgaWYgdGhlIG5ldyB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIGJlZm9yZSB3cm1z ciAqLworICAgIGlmICggcnZhbDEgIT0gcnZhbDIgKQorICAgICAgICB4dGZfZmFpbHVyZSgiRmFp bDogcmRtc3IgbWlzbWF0Y2ggaWR4IDB4JTA4eCwgd3ZhbCAweCUwMTYiUFJJeDY0CisgICAgICAg ICAgICAgICAgIiwgcnZhbCAweCUwMTYiUFJJeDY0IlxuIiwgaWR4LCBydmFsMSwgcnZhbDIpOwor fQorCitzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX3BtdV92ZXIxKHVpbnQ4X3QgbmcpCit7CisgICAg LyogCisgICAgICogSW50ZWwgU29md3RhcmUgRGV2ZWxvcG1lbnQgTWFudWFsIFZvbC4gM0IsCisg ICAgICogU2VjdGlvbiAxOC4yLjEgLSBBcmNoaXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3Jp bmcgVmVyc2lvbiAxCisgICAgICoKKyAgICAgKiBNU1JzIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBW UE1VCisgICAgICoKKyAgICAgKiBQTUN4IChzdGFydCBhdCBhZGRyZXNzIDB4YzEpCisgICAgICog UEVSRkVWRU5UU0VMeCAoc3RhcnQgYXQgYWRkcmVzcyAweDE4NikKKyAgICAgKi8KKworICAgIHVp bnQzMl90IGlkeDsKKyAgICB1aW50NjRfdCB3dmFsID0gMDsKKyAgICB1bnNpZ25lZCBpOworCisg ICAgcHJpbnRrKCJUZXN0aW5nIHZlcnNpb24gMVxuIik7CisKKyAgICAvKiBmb3IgYWxsIGdlbmVy YWwgcHVycG9zZSBjb3VudGVycyAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgbmc7IGkrKyApCisg ICAgeworICAgICAgICAvKiB0ZXN0IHdyaXRpbmcgdG8gUE1DeCAqLworICAgICAgICBpZHggPSBN U1JfUE1DKGkpOworCisgICAgICAgIC8qIAorICAgICAgICAgKiB0ZXN0IHdlIGNhbiB3cml0ZSB0 byBhbGwgdmFsaWQgYml0cyBpbiB0aGUgY291bnRlcnMKKyAgICAgICAgICogZG9uJ3Qgc2V0IGJp dCAzMSBzaW5jZSB0aGF0IGdldHMgc2lnbi1leHRlbmRlZAorICAgICAgICAgKi8KKyAgICAgICAg d3ZhbCA9ICgoMXVsbCA8PCAzMSkgLSAxKSA7CisKKyAgICAgICAgdGVzdF92YWxpZF9tc3Jfd3Jp dGUoaWR4LCB3dmFsKTsKKworICAgICAgICAvKiBzZXQgYWxsIHZhbGlkIGJpdHMgaW4gTVNSX0VW RU5UU0VMeCAqLworICAgICAgICBpZHggPSBNU1JfUEVSRkVWVFNFTChpKTsKKyAgICAgICAgd3Zh bCA9ICgoMXVsbCA8PCAzMikgLSAxKSBeIChQRVJGRVZFTlRTRUx4X0VOQUJMRV9BTllUSFJFQUQg fAorICAgICAgICAgICAgICAgIFBFUkZFVkVOVFNFTHhfRU5BQkxFX1BDQik7CisKKyAgICAgICAg dGVzdF92YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFsKTsKKworICAgICAgICAvKiB0ZXN0IHdyaXRp bmcgYW4gaW52YWxpZCB2YWx1ZSBhbmQgYXNzZXJ0IHRoYXQgaXQgZmF1bHRzICovCisgICAgICAg IHd2YWwgPSB+KCgxdWxsIDw8IDMyKSAtIDEpOworCisgICAgICAgIHRlc3RfaW52YWxpZF9tc3Jf d3JpdGUoaWR4LCB3dmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfaW50ZWxfcG11 X3ZlcjIodWludDhfdCBuZywgdWludDhfdCBuZikKK3sKKyAgICAvKiAKKyAgICAgKiBJbnRlbCBT b2Z3dGFyZSBEZXZlbG9wbWVudCBNYW51YWwgVm9sLiAzQiwKKyAgICAgKiBTZWN0aW9uIDE4LjIu MiAtIEFyY2hpdGVjdHVyYWwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBWZXJzaW9uIDIKKyAgICAg KgorICAgICAqIE1TUnMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIFZQTVUgLQorICAgICAqCisgICAg ICogRklYRURfQ1RSeCAoc3RhcnQgYXQgYWRkcmVzcyAweDMwOSkKKyAgICAgKiBGSVhFRF9DVFJf Q1RSTAorICAgICAqIFBFUkZfR0xPQkFMX0NUUkwKKyAgICAgKiBQRVJGX0dMT0JBTF9TVEFUVVMg KHJlYWQtb25seSkKKyAgICAgKiBQRVJGX0dMT0JBTF9PVkZfQ1RSTAorICAgICAqIERFQlVHQ1RM X0ZyZWV6ZV9MQlJfT05fUE1JCisgICAgICogREVCVUdDVExfRnJlZXplX1BlcmZNb25fT25fUE1J CisgICAgICovCisKKyAgICB1aW50MzJfdCBpZHg7CisgICAgdWludDY0X3Qgd3ZhbDsKKyAgICB1 aW50NjRfdCBydmFsOworICAgIHVuc2lnbmVkIGk7CisKKyAgICBwcmludGsoIlRlc3RpbmcgdmVy c2lvbiAyXG4iKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbmY7IGkrKyApCisgICAgeworICAg ICAgICAvKiB0ZXN0IHdyaXRpbmcgdG8gRklYRURfQ1RSeCAqLworICAgICAgICBpZHggPSBNU1Jf RklYRURfQ1RSKGkpOworCisgICAgICAgIHd2YWwgPSAoMXVsbCA8PCAzMikgLSAxOworCisgICAg ICAgIHRlc3RfdmFsaWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCk7CisKKyAgICAgICAgLyogdGVzdCBp bnZhbGlkIHdyaXRlIHRvIEZJWEVEX0NUUnggKi8KKyAgICAgICAgd3ZhbCA9IH53dmFsOworCisg ICAgICAgIHRlc3RfaW52YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFsKTsKKyAgICB9CisKKyAgICAv KiB0ZXN0IEZJWEVEX0NUUl9DVFJMICovCisgICAgaWR4ID0gTVNSX0ZJWEVEX0NUUl9DVFJMOwor CisgICAgLyogZW5hYmxlIGFsbCBmaXhlZCBjb3VudGVycyAqLworICAgIHd2YWwgPSAwOworCisg ICAgZm9yICggaSA9IDA7IGkgPCBuZjsgaSsrICkKKyAgICAgICAgd3ZhbCB8PSAoRklYRURfQ1RS X0VOQUJMRSA8PCAoRklYRURfQ1RSX0NUTF9CSVRTICogaSkpOworCisgICAgdGVzdF92YWxpZF9t c3Jfd3JpdGUoaWR4LCB3dmFsKTsKKyAgICAKKyAgICAvKiBpbnZlcnQgd3ZhbCB0byB0ZXN0IHdy aXRpbmcgYW4gaW52YWxpZCB2YWx1ZSAqLworICAgIHd2YWwgPSB+d3ZhbDsKKworICAgIHRlc3Rf aW52YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFsKTsKKworICAgIC8qIHRlc3QgUEVSRl9HTE9CQUxf Q1RSTCAqLworICAgIGlkeCA9IE1TUl9QRVJGX0dMT0JBTF9DVFJMOworCisgICAgd3ZhbCA9IDA7 CisKKyAgICAvKiBzZXQgYWxsIGZpeGVkIGZ1bmN0aW9uIGNvdW50ZXJzIGVuYWJsZSBiaXRzICov CisgICAgZm9yICggaT0wOyBpIDwgbmY7IGkgKysgKQorICAgICAgICB3dmFsIHw9ICgodWludDY0 X3QpMSA8PCAoMzIgKyBpKSk7CisKKyAgICAvKiBzZXQgYWxsIGdlbmVyYWwgcHVycG9zZSBjb3Vu dGVycyBlbmFibGUgYml0cyovCisgICAgZm9yICggaSA9IDA7IGkgPCBuZzsgaSsrICkKKyAgICAg ICAgd3ZhbCB8PSAoMSA8PCBpKTsKKworICAgIHRlc3RfdmFsaWRfbXNyX3dyaXRlKGlkeCwgd3Zh bCk7CisKKyAgICAvKiBpbnZlcnQgd3ZhbCB0byB0ZXN0IGludmFsaWQgd3JpdGUgdG8gTVNSX1BF UkZfR0xPQkFMX0NUUkwqLworICAgIHd2YWwgPSB+d3ZhbDsKKworICAgIHRlc3RfaW52YWxpZF9t c3Jfd3JpdGUoaWR4LCB3dmFsKTsKKworICAgIC8qIHRlc3QgUEVSRl9HTE9CQUxfT1ZGX0NUUkwg Ki8KKyAgICBpZHggPSBNU1JfUEVSRl9HTE9CQUxfT1ZGX0NUUkw7CisKKyAgICAvKiBzZXQgYWxs IHZhbGlkIGJpdHMgaW4gTVNSX1BFUkZfR0xPQkFMX09WRl9DVFJMICovCisgICAgd3ZhbCA9IDB4 QzAwMDAwMDAwMDAwMDAwMCB8ICgoKDFVTEwgPDwgbmYpIC0gMSkgPDwgMzIpIHwgKCgxVUxMIDw8 IG5nKSAtIDEpOworCisgICAgLyogCisgICAgICogV3JpdGluZyB0byBNU1JfUEVSRl9HTE9CQUxf T1ZGX0NUUkwgY2xlYXJzCisgICAgICogTVNSX1BFUkZfR0xPQkFMX1NUQVRVUyBidXQgYnV0IGFs d2F5cyByZXR1cm5zIDAgd2hlbiByZWFkIHNvCisgICAgICogaXQgaXMgdGVzdGVkIGFzIGEgdHJh bnNwYXJlbnQgd3JpdGUgCisgICAgICovCisKKyAgICB0ZXN0X3RyYW5zcGFyZW50X21zcl93cml0 ZShpZHgsIHd2YWwpOworCisgICAgLyogaW52ZXJ0IHd2YWwgdG8gdGVzdCBpbnZhbGlkIHdyaXRl IHRvIE1TUl9QRVJGX0dMT0JBTF9PVkZfQ1RSTCovCisgICAgd3ZhbCA9IH53dmFsOworCisgICAg dGVzdF9pbnZhbGlkX21zcl93cml0ZShpZHgsIHd2YWwpOworCisgICAgLyogdGVzdCBQRVJGX0dM T0JBTF9TVEFUVVMgKHJlYWQtb25seSkgKi8KKyAgICBpZHggPSBNU1JfUEVSRl9HTE9CQUxfU1RB VFVTOworCisgICAgaWYgKCByZG1zcl9zYWZlKGlkeCwgJnJ2YWwpICkKKyAgICB7CisgICAgICAg IHh0Zl9mYWlsdXJlKCJFcnJvcjogdGVzdF9pbnRlbF9wbXVfdmVyMjogIgorICAgICAgICAgICAg ICAgICAgInJkbXNyX3NhZmUgZm9yIE1TUiAweCV4IHJlc3VsdGVkIGluIGEgZmF1bHQhXG4iLCBp ZHgpOworICAgIH0KKworICAgIC8qIHRyeSB0byB3cml0ZSB0aGUgUEVSRl9HTE9CQUxfU1RBVFVT IHJlZ2lzdGVyIGFuZCBleHBlY3QgaXQgdG8gZmFpbCovCisgICAgdGVzdF9pbnZhbGlkX21zcl93 cml0ZShpZHgsIHd2YWwpOworCisgICAgLyogdGVzdCBERUJVR0NUTCAqLworICAgIGlkeCA9IE1T Ul9ERUJVR0NUTDsKKworICAgIC8qIFRlc3QgREVCVUdDVEwgZmFjaWxpdGllcyBlbmFibGVkIGJ5 IHYyICovCisgICAgd3ZhbCA9IERFQlVHQ1RMX0ZyZWV6ZV9MQlJfT05fUE1JIHwgREVCVUdDVExf RnJlZXplX1BlcmZNb25fT25fUE1JOworCisgICAgLyogCisgICAgICogWEVOQlVHOiBUaGlzIHRl c3QgY3VycmVudGx5IGZhaWxzIGFuZCBuZWVkcyB0byBiZSBmaXhlZCBpbiBYZW4uIE9uY2UgCisg ICAgICogZml4ZWQsIGNhbGwgdGVzdF92YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFsKSB0byBmdWxs eSB0ZXN0IE1TUiB3cml0ZQorICAgICAqLworICAgIGlmKCB3cm1zcl9zYWZlKGlkeCwgd3ZhbCkg KQorICAgICAgICB4dGZfZXJyb3IoIkZhaWw6IHdybXNyKDB4JTA4eCwgMHglMDE2IlBSSXg2NCIp IGdvdCB1bmV4cGVjdGVkIGZhdWx0IgorICAgICAgICAgICAgICAgICAgICAiXG4iLCBpZHgsIHd2 YWwpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX3BtdV92ZXIzKHVpbnQ4X3QgbmcsIHVp bnQ4X3QgbmYpCit7CisgICAgLyogCisgICAgICogSW50ZWwgU29md3RhcmUgRGV2ZWxvcG1lbnQg TWFudWFsIFZvbC4gM0IKKyAgICAgKiBTZWN0aW9uIDE4LjIuMyBBcmNoaXRlY3R1cmFsIFBlcmZv cm1hbmNlIE1vbml0b3JpbmcgVmVyc2lvbiAzCisgICAgICoKKyAgICAgKiBNU1JzIG1hZGUgYXZh aWxhYmxlIGJ5IHRoZSBWUE1VCisgICAgICoKKyAgICAgKiBQRVJGRVZFTlRTRUx4LkFOWVRIUkVB RCAoQml0IDIxKQorICAgICAqIEZJWEVEX0NUUl9DVFJMLkFOWVRIUkVBRHggKEJpdCAyLCA2LCAx MSkKKyAgICAgKgorICAgICAqIFZlcnNpb24gMyBpbnRyb2R1Y2VzIEFOWVRIUkVBRCBiaXQgYnV0 IFZQTVUgZG9lcyBub3Qgc3VwcG9ydCBpdCB0bworICAgICAqIGVuc3VyZSB0aGF0IGEgVkNQVSBp c24ndCBhYmxlIHRvIHJlYWQgdmFsdWVzIGZyb20gcGh5c2ljYWwgcmVzb3VyY2VzIHRoYXQKKyAg ICAgKiBhcmUgbm90IGFsbG9jYXRlZCB0byBpdC4gVGhpcyB0ZXN0IGNhc2UgdmFsaWRhdGVzIHRo YXQgd2UgYXJlIHVuYWJsZSB0bworICAgICAqIHdyaXRlIHRvIC5BTllUSFJFQUQgYml0IGluIFBF UkZFVkVOVFNFTHggYW5kIEZJWEVEX0NUUl9DVFJMCisgICAgICovCisKKyAgICB1aW50NjRfdCB3 dmFsOworICAgIHVpbnQzMl90IGlkeDsKKyAgICB1bnNpZ25lZCBpOworCisgICAgcHJpbnRrKCJU ZXN0aW5nIHZlcnNpb24gM1xuIik7CisKKyAgICAvKiB0ZXN0IFBFUkZFVkVOVFNFTHguQU5ZVEhS RUFEIGlzIGRpc2FibGVkICovCisgICAgZm9yICggaSA9IDA7IGkgPCBuZzsgaSsrICkKKyAgICB7 CisgICAgICAgIGlkeCA9IE1TUl9QRVJGRVZUU0VMKGkpOworCisgICAgICAgIHd2YWwgPSBFVkVO VF9VT1BTX1JFVElSRURfQU5ZVEhSRUFEOworCisgICAgICAgIHRlc3RfaW52YWxpZF9tc3Jfd3Jp dGUoaWR4LCB3dmFsKTsKKyAgICB9CisKKyAgICAvKiB0ZXN0IEZJWEVEX0NUUl9DVEwuQU5ZVEhS RUFEIGlzIGRpc2FibGVkICovCisgICAgaWR4ID0gTVNSX0ZJWEVEX0NUUl9DVFJMOworCisgICAg d3ZhbCA9IDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5mOyBpKysgKQorICAgICAgICB3dmFs IHw9IChGSVhFRF9DVFJfRU5BQkxFX0FOWVRIUkVBRCA8PCAoNCAqIGkpKSA7CisKKyAgICB0ZXN0 X2ludmFsaWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZnVs bF93aWR0aF9jbnRzKHVpbnQ4X3QgbmcsIHVpbnQ4X3QgbmdiLCB1aW50OF90IHBkY20pCit7Cisg ICAgdWludDY0X3QgY2Fwcywgd3ZhbDsKKyAgICB1aW50MzJfdCBpZHg7CisgICAgdW5zaWduZWQg aTsKKworICAgIGlmICggcmRtc3Jfc2FmZShNU1JfUEVSRl9DQVBBQklMSVRJRVMsICZjYXBzKSAp CisgICAgeworICAgICAgICBpZiAocGRjbSkgeworICAgICAgICAgICAgeHRmX2ZhaWx1cmUoIkZh aWw6IEZhdWx0IHdoaWxlIHJlYWRpbmcgTVNSX1BFUkZfQ0FQQUJJTElUSUVTXG4iKTsKKyAgICAg ICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKCAhcGRjbSApIAorICAg IHsKKyAgICAgICAgLyogCisgICAgICAgICAqIFhFTkJVRzogTVNSX1BFUkZfQ0FQQUJJTElUSUVT IHNob3VsZCBudG8gYmUgcmVhZGFibGUgd2l0aG91dCBQRENNIAorICAgICAgICAgKiBiaXQgc2V0 IGluIENQVUlELgorICAgICAgICAgKi8KKyAgICAgICAgeHRmX2Vycm9yKCJFcnJvcjogTVNSX1BF UkZfQ0FQQUJJTElUSUVTIHJlYWRhYmxlIHdoaWxlIFBEQ00gaXMgMFxuIik7CisgICAgfQorCisK KyAgICBpZiAoICEoY2FwcyAmIFBFUkZfQ0FQQUJJTElUSUVTX0Z1bGxfV2lkdGgpICkKKyAgICB7 CisgICAgICAgIHByaW50aygiSW5mbzogRnVsbCB3aWR0aCBjb3VudGVycyBub3Qgc3VwcG9ydGVk XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIHRlc3Qgd3JpdGVzIHRvIGZ1 bGwgd2lkdGggY291bnRlcnMgKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IG5nOyBpKyspCisgICAg eworICAgICAgICBpZHggPSBNU1JfQV9QTUMoaSk7CisKKyAgICAgICAgd3ZhbCA9ICgoMXVsbCA8 PCBuZ2IpIC0gMSkgOworCisgICAgICAgIHRlc3RfdmFsaWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCk7 CisKKyAgICAgICAgLyogaW52ZXJ0IHd2YWwgdG8gdGVzdCBpbnZhbGlkIHdyaXRlIHRvIE1TUl9Q RVJGX0dMT0JBTF9PVkZfQ1RSTCAqLworICAgICAgICB3dmFsID0gfnd2YWw7CisKKyAgICAgICAg dGVzdF9pbnZhbGlkX21zcl93cml0ZShpZHgsIHd2YWwpOworICAgIH0KK30KKwordm9pZCB0ZXN0 X21haW4odm9pZCkKK3sKKyAgICAvKiBBcmNoaXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3Jp bmcgVmVyc2lvbiAqLworICAgIHVpbnQ4X3QgdmVyOworICAgIC8qIE51bWJlciBvZiBnZW5lcmFs IHB1cnBvc2UgY291bnRlciByZWdpc3RlcnMgKi8KKyAgICB1aW50OF90IG5ncmVnczsKKyAgICAv KiBOdW1iZXIgb2YgZml4ZWQgZnVuY3Rpb24gY291bnRlciByZWdpc3RlcnMgKi8KKyAgICB1aW50 OF90IG5mcmVnczsKKyAgICAvKiBCaXQgd2lkdGggb2YgZ2VuZXJhbC1wdXJwb3NlLCBwZXJmb3Jt YW5jZSBtb25pdG9yaW5nIGNvdW50ZXIgKi8KKyAgICB1aW50OF90IG5nYml0czsKKyAgICAvKiBQ ZXJmb3JtYW5jZSBhbmQgZGVidWcgY2FwYWJpbHRpZXMgTVNSKi8KKyAgICB1aW50OF90IHBkY207 CisKKyAgICAvKiBjcHVpZCB2YXJpYWJsZXMgKi8KKyAgICB1aW50MzJfdCBsZWFmID0gMHgwYSwg c3VibGVhZiA9IDA7CisgICAgdWludDMyX3QgZWF4LCBlYngsIGVjeCwgZWR4OworCisgICAgaWYg KCB2ZW5kb3JfaXNfYW1kICkKKyAgICAgICAgcmV0dXJuIHh0Zl9za2lwKCJTa2lwOiBWUE1VIHRl c3RpbmcgZm9yIEFNRCBjdXJyZW50bHkgdW5zdXBwb3J0ZWRcbiIpOworCisgICAgaWYgKG1heF9s ZWFmIDwgbGVhZikgCisgICAgICAgIHJldHVybiB4dGZfc2tpcCgiU2tpcDogVW5hYmxlIHRvIHJl dHJpZXZlIFBNVSBpbmZvcm1hdGlvbiBmcm9tIGNwdWlkXG4iKTsKKworICAgIC8qIAorICAgICAq IEludGVyIFNvZnR3YXJlIERldmVsb3BtZW50IE1hbnVhbCBWb2wgMkEKKyAgICAgKiBUYWJsZSAz LTggIEluZm9ybWF0aW9uIFJldHVybmVkIGJ5IENQVUlEIEluc3RydWN0aW9uIAorICAgICAqLwor CisgICAgY3B1aWRfY291bnQobGVhZiwgc3VibGVhZiwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7 CisKKyAgICAvKiBFeHRyYWN0IHRoZSB2ZXJzaW9uIElEIC0gRUFYIDc6MCAqLworICAgIHZlciA9 ICAoZWF4ICYgMHhmZik7CisKKyAgICAvKiBFeHRyYWN0IG51bWJlciBvZiBnZW5lcmFsIHB1cnBv c2UgY291bnRlciByZWdzIC0gRUFYIDE1OjggKi8KKyAgICBuZ3JlZ3MgPSAoZWF4ID4+IDgpICYg MHhmZjsKKworICAgIC8qIEV4dHJhY3QgbnVtYmVyIG9mIGZpeGVkIGZ1bmN0aW9uIGNvdW50ZXIg cmVncyAtIEVEWCA0OjAgKi8KKyAgICBuZnJlZ3MgPSBlZHggJiAweDFmOworCisgICAgLyogRXh0 cmFjdCBudW1iZXIgb2YgYml0cyBpbiBnZW5lcmFsIHB1cnBvc2UgY291bnRlciByZWdpc3RlcnMg Yml0cyAqLworICAgIG5nYml0cyA9IChlYXggPj4gMTYpICAmIDB4ZmY7CisKKyAgICAvKiBSZXRy aWV2ZSBQZXJmICYgRGVidWcgQ2FwYWJpbHRpZXMgTVNSIGF2YWlsYWJpbGl0eSovCisgICAgbGVh ZiA9IDB4MDE7CisgICAgCisgICAgcHJpbnRrKCJJbmZvOiBQTVUgVmVyc2lvbiAldSwgR2VuZXJl YWwgcHVycG9zZSBjb3VudGVycyAldSwgRml4ZWQgZnVuY3Rpb24gIgorICAgICAgICAgICAgImNv dW50ZXJzICV1LCBDb3VudGVyIHdpZHRoICV1XG4iLCB2ZXIsIG5ncmVncywgbmZyZWdzLCBuZ2Jp dHMpOworCisgICAgY3B1aWRfY291bnQobGVhZiwgc3VibGVhZiwgJmVheCwgJmVieCwgJmVjeCwg JmVkeCk7CisKKyAgICAvKiBFeHRyYWN0IFBlcmZvcm1hbmNlICYgRGVidWcgQ2FwYWJpbHRpZXMg TVNSIGZyb20gRUNYIGJpdCAxNSAqLworICAgIHBkY20gPSAoZWN4ID4+IDE1KSAmIDB4MDE7CisK KyAgICBwcmludGsoIkluZm86IFBlcmYgJiBEZWJ1ZyBDYXBhYmlsaXR5IE1TUiAldVxuIiwgcGRj bSk7CisgICAgCisgICAgc3dpdGNoICh2ZXIpCisgICAgeworCisgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICAgICAgLyogCisgICAgICAgICAgICAgICAgICogVmVyc2lvbiA0IGZhY2lsaXRp ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgWGVuLiAKKyAgICAgICAgICAgICAgICAgKiBWUE1VICBl bXVsYXRlcyB2ZXJzaW9uIDMuIEZhbGwgdGhyb3VnaCAKKyAgICAgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgICAgICAgeHRmX3dhcm5pbmcoIlRlc3QgZG9lc24ndCBzdXBwb3J0IHZlcnNpb24g JXVcbiIsIHZlcik7CisKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIC8qIHRlc3Qg dmVyc2lvbiAzIGZhY2lsaXRpZXMgKi8KKyAgICAgICAgICAgICAgICB0ZXN0X2ludGVsX3BtdV92 ZXIzKCBuZ3JlZ3MsIG5mcmVncyk7CisgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIGZh bGwgdGhyb3VnaCAqLworCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAvKiB0ZXN0 IHZlcnNpb24gMiBmYWNpbGl0aWVzICovCisgICAgICAgICAgICAgICAgdGVzdF9pbnRlbF9wbXVf dmVyMihuZ3JlZ3MsIG5mcmVncyk7CisKKyAgICAgICAgICAgICAgICAvKiB0ZXN0IHZlcnNpb24g MSBmYWNpbGl0aWVzICovCisgICAgICAgICAgICAgICAgdGVzdF9pbnRlbF9wbXVfdmVyMShuZ3Jl Z3MpOworCisgICAgICAgICAgICAgICAgLyogdGVzdCBmdWxsIHdpZHRoIGNvdW50ZXJzICovCisg ICAgICAgICAgICAgICAgdGVzdF9mdWxsX3dpZHRoX2NudHMobmdyZWdzLCBuZ2JpdHMsIHBkY20p OworCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAg ICAgICAgIHJldHVybiB4dGZfc2tpcCgiU2tpcDogVlBNVSB2ZXJzaW9uIDEgdW5zdXBwb3J0ZWQg aW4gWGVuXG4iKTsKKworICAgICAgICBjYXNlIDA6IAorICAgICAgICAgICAgICAgIHJldHVybiB4 dGZfc2tpcCgiU2tpcDogVlBNVSBub3QgZW5hYmxlZCBpbiBYZW5cbiIpOworICAgIH0KKworICAg IHJldHVybiB4dGZfc3VjY2VzcyhOVUxMKTsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoK KyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0 CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICov Ci0tIAoyLjkuMwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6 Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=