From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mohit Gambhir Subject: [PATCH v5 2/2] xtf/vpmu: MSR read/write tests for VPMU Date: Thu, 4 May 2017 17:33:00 -0400 Message-ID: <20170504213300.5661-3-mohit.gambhir@oracle.com> References: <20170504213300.5661-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: <20170504213300.5661-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 aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NTdhYjgKLS0tIC9kZXYv bnVsbAorKysgYi90ZXN0cy92cG11L01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAoraW5jbHVkZSAk KFJPT1QpL2J1aWxkL2NvbW1vbi5taworCitOQU1FICAgICAgOj0gdnBtdQorQ0FURUdPUlkgIDo9 IGZ1bmN0aW9uYWwKK1RFU1QtRU5WUyA6PSBodm02NAorCitvYmotcGVyZW52ICs9IG1haW4ubwor CitpbmNsdWRlICQoUk9PVCkvYnVpbGQvZ2VuLm1rCmRpZmYgLS1naXQgYS90ZXN0cy92cG11L21h aW4uYyBiL3Rlc3RzL3ZwbXUvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmMyZjZkZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy92cG11L21haW4uYwpAQCAtMCww ICsxLDQ0MiBAQAorLyoqCisgKiBAZmlsZSB0ZXN0cy92cG11L21haW4uYworICogQHJlZiB0ZXN0 LXZwbXUKKyAqCisgKiBAcGFnZSB0ZXN0LXZwbXUgdnBtdQorICoKKyAqIFRlc3QgVmlydHVhbCBQ ZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsbG93cyBn dWVzdHMgCisgKiB0byBwcm9ncmFtIGZpeGVkIGFuZCBnZW5lcmFsIHB1cnBvc2UgcGVyZm9ybWFu Y2UgY291bnRlcnMgdG8gbWVhc3VyZSBoYXJkd2FyZQorICogcGVyZm9ybWFuY2UuIAorICoKKyAq IFRoZSB0ZXN0cyByZWFkIGFuZCB3cml0ZSBNU1JzIHRoYXQgYXJlICBleHBvc2VkIGJ5IFZQTVUg Zm9yIHZhcmlvdXMgdmVyc2lvbnMKKyAqIG9mIEFyY2hpdGVjdHVyYWwgUGVyZm9ybWFuY2UgTW9u aXRvcmluZworICoKKyAqIEBzZWUgdGVzdHMvdnBtdS9tYWluLmMKKyAqLworCisjaW5jbHVkZSA8 eHRmLmg+CisjaW5jbHVkZSA8YXJjaC9tc3ItaW5kZXguaD4KKyNpbmNsdWRlIDxhcmNoL21tLmg+ CisKKyNkZWZpbmUgRVZFTlRfVU9QU19SRVRJUkVEICAgICAgICAgICAgICAgICAgIDB4MDA0MTAx YzIKKyNkZWZpbmUgRVZFTlRfVU9QU19SRVRJUkVEX0FOWVRIUkVBRCAgICAgICAgIDB4MDA2MTAx YzIKKyNkZWZpbmUgRklYRURfQ1RSX0NUTF9CSVRTICAgICAgICAgICAgICAgICAgIDQKKyNkZWZp bmUgRklYRURfQ1RSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZp bmUgRklYRURfQ1RSX0VOQUJMRV9BTllUSFJFQUQgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZp bmUgUEVSRkVWRU5UU0VMeF9FTkFCTEVfQU5ZVEhSRUFEICAgICAgICgxdWxsIDw8IDIxKQorI2Rl ZmluZSBQRVJGRVZFTlRTRUx4X0VOQUJMRV9QQ0IgICAgICAgICAgICAgKDF1bGwgPDwgMTkpCisj ZGVmaW5lIERFQlVHQ1RMX0ZyZWV6ZV9MQlJfT05fUE1JICAgICAgICAgICAoMXVsbCA8PCAxMSkK KyNkZWZpbmUgREVCVUdDVExfRnJlZXplX1BlcmZNb25fT25fUE1JICAgICAgICgxdWxsIDw8IDEy KQorI2RlZmluZSBQRVJGX0NBUEFCSUxJVElFU19GdWxsX1dpZHRoICAgICAgICAgKDF1bGwgPDwg MTMpCisKK2NvbnN0IGNoYXIgdGVzdF90aXRsZVtdID0gIlRlc3QgdnBtdSI7CisKK3N0YXRpYyB2 b2lkIHRlc3RfdmFsaWRfbXNyX3dyaXRlKHVpbnQzMl90IGlkeCwgdWludDY0X3Qgd3ZhbCwgdWlu dDY0X3QgZXJ2YWwpCit7CisgICAgdWludDY0X3QgcnZhbCA9IDA7CisKKyAgICBpZiggd3Jtc3Jf c2FmZShpZHgsIHd2YWwpICkKKyAgICAgICAgeHRmX2ZhaWx1cmUoIkZhaWw6IHdybXNyKDB4JTA4 eCwgMHglMDE2IlBSSXg2NCIpIGdvdCB1bmV4cGVjdGVkIGZhdWx0IgorICAgICAgICAgICAgICAg ICAgICAiXG4iLCBpZHgsIHd2YWwpOworCisgICAgLyogY2hlY2sgdG8gc2VlIGlmIHRoZSB2YWx1 ZXMgd2VyZSB3cml0dGVuIGNvcnJlY3RseSAqLworICAgIGlmICggcmRtc3Jfc2FmZShpZHgsICZy dmFsKSApCisgICAgICAgIHh0Zl9mYWlsdXJlKCJGYWlsOiByZG1zcigweCUwOHgsIDB4MDE2JSJQ Ukl4UFRSIikgZ290IHVuZXhwZWN0ZWQgZmF1bHQiCisgICAgICAgICAgICAgICAgICAgICJcbiIs IGlkeCwgKHVpbnRwdHJfdCkgJnJ2YWwpOworICAgIAorICAgIC8qIGNoZWNrIGlmIHJlYWQgdmFs dWUgaXMgZXF1YWwgdG8gZXhwZWN0ZWQgdmFsdWUgKi8KKyAgICBpZiAoIHJ2YWwgIT0gZXJ2YWwg KQorICAgICAgICB4dGZfZmFpbHVyZSgiRmFpbDogcmRtc3IgbWlzbWF0Y2ggaWR4IDB4JTA4eCwg d3ZhbCAweCUwMTYiUFJJeDY0CisgICAgICAgICAgICAgICAgIiwgcnZhbCAweCUwMTYiUFJJeDY0 IlxuIiwgaWR4LCB3dmFsLCBydmFsKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX21z cl93cml0ZSh1aW50MzJfdCBpZHgsIHVpbnQ2NF90IHd2YWwpCit7CisgICAgLyogd3Jtc3Jfc2Fm ZSBtdXN0IHJldHVybiBmYWxzZSBhZnRlciBmYXVsdGluZyAqLworICAgIGlmKCAhd3Jtc3Jfc2Fm ZShpZHgsIHd2YWwpICkKKyAgICAgICAgeHRmX2ZhaWx1cmUoIkZhaWw6IHdybXNyKDB4JTA4eCwg MHglMDE2IlBSSXg2NCIpIGRpZCBub3QgZmF1bHQuXG4iLCAKKyAgICAgICAgICAgICAgICBpZHgs IHd2YWwpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3RyYW5zcGFyZW50X21zcl93cml0ZSh1aW50 MzJfdCBpZHgsIHVpbnQ2NF90IHd2YWwpCit7CisgICAgdWludDY0X3QgcnZhbDEgPSAwLCBydmFs MiA9IDA7CisKKyAgICAvKiByZWFkIGN1cnJlbnQgdmFsdWUgKi8KKyAgICBpZiAoIHJkbXNyX3Nh ZmUoaWR4LCAmcnZhbDEpICkKKyAgICAgICAgeHRmX2ZhaWx1cmUoIkZhaWw6IHJkbXNyKDB4JTA4 eCwgMHgwMTYlIlBSSXhQVFIiKSBnb3QgdW5leHBlY3RlZCBmYXVsdCIKKyAgICAgICAgICAgICAg ICAgICAgIlxuIiwgaWR4LCAodWludHB0cl90KSZydmFsMSk7CisKKyAgICAvKiB3cm1zciBzaG91 bGQgbm90IGZhdWx0IGJ1dCBzaG91bGQgbm90IHdyaXRlIGFueXRoaW5nIGVpdGhlciAqLworICAg IGlmICAoIHdybXNyX3NhZmUoaWR4LCB3dmFsKSApCisgICAgICAgIHh0Zl9mYWlsdXJlKCJGYWls OiB3cm1zcigweCUwOHgsIDB4JTAxNiJQUkl4NjQiKSBnb3QgdW5leHBlY3RlZCBmYXVsdCIKKyAg ICAgICAgICAgICAgICAgICAgIlxuIiwgaWR4LCB3dmFsKTsKKworICAgIC8qIHJlYWQgbmV3IHZh bHVlICovCisgICAgaWYgKCByZG1zcl9zYWZlKGlkeCwgJnJ2YWwyKSApCisgICAgICAgIHh0Zl9m YWlsdXJlKCJGYWlsOiByZG1zcigweCUwOHgsIDB4MDE2JSJQUkl4UFRSIikgZ290IHVuZXhwZWN0 ZWQgZmF1bHQiCisgICAgICAgICAgICAgICAgICAgICJcbiIsIGlkeCwgKHVpbnRwdHJfdCkgJnJ2 YWwyKTsKKworICAgIC8qIENoZWNrIGlmIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhl IG9uZSBiZWZvcmUgd3Jtc3IgKi8KKyAgICBpZiAoIHJ2YWwxICE9IHJ2YWwyICkKKyAgICAgICAg eHRmX2ZhaWx1cmUoIkZhaWw6IHJkbXNyIG1pc21hdGNoIGlkeCAweCUwOHgsIHd2YWwgMHglMDE2 IlBSSXg2NAorICAgICAgICAgICAgICAgICIsIHJ2YWwgMHglMDE2IlBSSXg2NCJcbiIsIGlkeCwg cnZhbDEsIHJ2YWwyKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9wbXVfdmVyMSh1aW50 OF90IG5nLCB1aW50OF90IG5nYikKK3sKKyAgICAvKiAKKyAgICAgKiBJbnRlbCBTb2Z3dGFyZSBE ZXZlbG9wbWVudCBNYW51YWwgVm9sLiAzQiwKKyAgICAgKiBTZWN0aW9uIDE4LjIuMSAtIEFyY2hp dGVjdHVyYWwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBWZXJzaW9uIDEKKyAgICAgKgorICAgICAq IE1TUnMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIFZQTVUKKyAgICAgKgorICAgICAqIFBNQ3ggKHN0 YXJ0IGF0IGFkZHJlc3MgMHhjMSkKKyAgICAgKiBQRVJGRVZFTlRTRUx4IChzdGFydCBhdCBhZGRy ZXNzIDB4MTg2KQorICAgICAqLworCisgICAgdWludDMyX3QgaWR4OworICAgIHVpbnQ2NF90IHd2 YWwgPSAwOworICAgIHVpbnQ2NF90IGVydmFsID0gMDsKKyAgICB1bnNpZ25lZCBpOworCisgICAg cHJpbnRrKCJUZXN0aW5nIHZlcnNpb24gMVxuIik7CisKKyAgICAvKiBmb3IgYWxsIGdlbmVyYWwg cHVycG9zZSBjb3VudGVycyAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgbmc7IGkrKyApCisgICAg eworICAgICAgICAvKiB0ZXN0IHdyaXRpbmcgdG8gUE1DeCAqLworICAgICAgICBpZHggPSBNU1Jf UE1DKGkpOworCisgICAgICAgIC8qIHRlc3Qgd2UgY2FuIHdyaXRlIHRvIGFsbCB2YWxpZCBiaXRz IGluIHRoZSBjb3VudGVycyAqLworICAgICAgICB3dmFsID0gKCgxdWxsIDw8IDMyKSAtIDEpOwor CisgICAgICAgIC8qIEJpdCAzMiBpcyBzaWduIGV4dGVuZGVkIHRvIHRoZSB0aGUgaGlnaCBvcmRl ciBiaXRzICovCisgICAgICAgIGVydmFsID0gKCgxdWxsIDw8IG5nYikgLSAxKTsKKworICAgICAg ICB0ZXN0X3ZhbGlkX21zcl93cml0ZShpZHgsIHd2YWwsIGVydmFsKTsKKworICAgICAgICAvKiBz ZXQgYWxsIHZhbGlkIGJpdHMgaW4gTVNSX0VWRU5UU0VMeCAqLworICAgICAgICBpZHggPSBNU1Jf UEVSRkVWVFNFTChpKTsKKyAgICAgICAgd3ZhbCA9ICgoMXVsbCA8PCAzMikgLSAxKSBeIChQRVJG RVZFTlRTRUx4X0VOQUJMRV9BTllUSFJFQUQgfAorICAgICAgICAgICAgICAgIFBFUkZFVkVOVFNF THhfRU5BQkxFX1BDQik7CisKKyAgICAgICAgdGVzdF92YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFs LCB3dmFsKTsKKworICAgICAgICAvKiB0ZXN0IHdyaXRpbmcgYW4gaW52YWxpZCB2YWx1ZSBhbmQg YXNzZXJ0IHRoYXQgaXQgZmF1bHRzICovCisgICAgICAgIHd2YWwgPSB+KCgxdWxsIDw8IDMyKSAt IDEpOworCisgICAgICAgIHRlc3RfaW52YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFsKTsKKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfaW50ZWxfcG11X3ZlcjIodWludDhfdCBuZywgdWludDhf dCBuZikKK3sKKyAgICAvKiAKKyAgICAgKiBJbnRlbCBTb2Z3dGFyZSBEZXZlbG9wbWVudCBNYW51 YWwgVm9sLiAzQiwKKyAgICAgKiBTZWN0aW9uIDE4LjIuMiAtIEFyY2hpdGVjdHVyYWwgUGVyZm9y bWFuY2UgTW9uaXRvcmluZyBWZXJzaW9uIDIKKyAgICAgKgorICAgICAqIE1TUnMgbWFkZSBhdmFp bGFibGUgYnkgdGhlIFZQTVUgLQorICAgICAqCisgICAgICogRklYRURfQ1RSeCAoc3RhcnQgYXQg YWRkcmVzcyAweDMwOSkKKyAgICAgKiBGSVhFRF9DVFJfQ1RSTAorICAgICAqIFBFUkZfR0xPQkFM X0NUUkwKKyAgICAgKiBQRVJGX0dMT0JBTF9TVEFUVVMgKHJlYWQtb25seSkKKyAgICAgKiBQRVJG X0dMT0JBTF9PVkZfQ1RSTAorICAgICAqIERFQlVHQ1RMX0ZyZWV6ZV9MQlJfT05fUE1JCisgICAg ICogREVCVUdDVExfRnJlZXplX1BlcmZNb25fT25fUE1JCisgICAgICovCisKKyAgICB1aW50MzJf dCBpZHg7CisgICAgdWludDY0X3Qgd3ZhbDsKKyAgICB1aW50NjRfdCBydmFsOworICAgIHVuc2ln bmVkIGk7CisKKyAgICBwcmludGsoIlRlc3RpbmcgdmVyc2lvbiAyXG4iKTsKKworICAgIGZvciAo IGkgPSAwOyBpIDwgbmY7IGkrKyApCisgICAgeworICAgICAgICAvKiB0ZXN0IHdyaXRpbmcgdG8g RklYRURfQ1RSeCAqLworICAgICAgICBpZHggPSBNU1JfRklYRURfQ1RSKGkpOworCisgICAgICAg IHd2YWwgPSAoMXVsbCA8PCAzMikgLSAxOworCisgICAgICAgIHRlc3RfdmFsaWRfbXNyX3dyaXRl KGlkeCwgd3ZhbCwgd3ZhbCk7CisKKyAgICAgICAgLyogdGVzdCBpbnZhbGlkIHdyaXRlIHRvIEZJ WEVEX0NUUnggKi8KKyAgICAgICAgd3ZhbCA9IH53dmFsOworCisgICAgICAgIHRlc3RfaW52YWxp ZF9tc3Jfd3JpdGUoaWR4LCB3dmFsKTsKKyAgICB9CisKKyAgICAvKiB0ZXN0IEZJWEVEX0NUUl9D VFJMICovCisgICAgaWR4ID0gTVNSX0ZJWEVEX0NUUl9DVFJMOworCisgICAgLyogZW5hYmxlIGFs bCBmaXhlZCBjb3VudGVycyAqLworICAgIHd2YWwgPSAwOworCisgICAgZm9yICggaSA9IDA7IGkg PCBuZjsgaSsrICkKKyAgICAgICAgd3ZhbCB8PSAoRklYRURfQ1RSX0VOQUJMRSA8PCAoRklYRURf Q1RSX0NUTF9CSVRTICogaSkpOworCisgICAgdGVzdF92YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFs LCB3dmFsKTsKKyAgICAKKyAgICAvKiBpbnZlcnQgd3ZhbCB0byB0ZXN0IHdyaXRpbmcgYW4gaW52 YWxpZCB2YWx1ZSAqLworICAgIHd2YWwgPSB+d3ZhbDsKKworICAgIHRlc3RfaW52YWxpZF9tc3Jf d3JpdGUoaWR4LCB3dmFsKTsKKworICAgIC8qIHRlc3QgUEVSRl9HTE9CQUxfQ1RSTCAqLworICAg IGlkeCA9IE1TUl9QRVJGX0dMT0JBTF9DVFJMOworCisgICAgd3ZhbCA9IDA7CisKKyAgICAvKiBz ZXQgYWxsIGZpeGVkIGZ1bmN0aW9uIGNvdW50ZXJzIGVuYWJsZSBiaXRzICovCisgICAgZm9yICgg aT0wOyBpIDwgbmY7IGkgKysgKQorICAgICAgICB3dmFsIHw9ICgodWludDY0X3QpMSA8PCAoMzIg KyBpKSk7CisKKyAgICAvKiBzZXQgYWxsIGdlbmVyYWwgcHVycG9zZSBjb3VudGVycyBlbmFibGUg Yml0cyovCisgICAgZm9yICggaSA9IDA7IGkgPCBuZzsgaSsrICkKKyAgICAgICAgd3ZhbCB8PSAo MSA8PCBpKTsKKworICAgIHRlc3RfdmFsaWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCwgd3ZhbCk7CisK KyAgICAvKiBpbnZlcnQgd3ZhbCB0byB0ZXN0IGludmFsaWQgd3JpdGUgdG8gTVNSX1BFUkZfR0xP QkFMX0NUUkwqLworICAgIHd2YWwgPSB+d3ZhbDsKKworICAgIHRlc3RfaW52YWxpZF9tc3Jfd3Jp dGUoaWR4LCB3dmFsKTsKKworICAgIC8qIHRlc3QgUEVSRl9HTE9CQUxfT1ZGX0NUUkwgKi8KKyAg ICBpZHggPSBNU1JfUEVSRl9HTE9CQUxfT1ZGX0NUUkw7CisKKyAgICAvKiBzZXQgYWxsIHZhbGlk IGJpdHMgaW4gTVNSX1BFUkZfR0xPQkFMX09WRl9DVFJMICovCisgICAgd3ZhbCA9IDB4QzAwMDAw MDAwMDAwMDAwMCB8ICgoKDFVTEwgPDwgbmYpIC0gMSkgPDwgMzIpIHwgKCgxVUxMIDw8IG5nKSAt IDEpOworCisgICAgLyogCisgICAgICogV3JpdGluZyB0byBNU1JfUEVSRl9HTE9CQUxfT1ZGX0NU UkwgY2xlYXJzCisgICAgICogTVNSX1BFUkZfR0xPQkFMX1NUQVRVUyBidXQgYnV0IGFsd2F5cyBy ZXR1cm5zIDAgd2hlbiByZWFkIHNvCisgICAgICogaXQgaXMgdGVzdGVkIGFzIGEgdHJhbnNwYXJl bnQgd3JpdGUgCisgICAgICovCisKKyAgICB0ZXN0X3RyYW5zcGFyZW50X21zcl93cml0ZShpZHgs IHd2YWwpOworCisgICAgLyogaW52ZXJ0IHd2YWwgdG8gdGVzdCBpbnZhbGlkIHdyaXRlIHRvIE1T Ul9QRVJGX0dMT0JBTF9PVkZfQ1RSTCovCisgICAgd3ZhbCA9IH53dmFsOworCisgICAgdGVzdF9p bnZhbGlkX21zcl93cml0ZShpZHgsIHd2YWwpOworCisgICAgLyogdGVzdCBQRVJGX0dMT0JBTF9T VEFUVVMgKHJlYWQtb25seSkgKi8KKyAgICBpZHggPSBNU1JfUEVSRl9HTE9CQUxfU1RBVFVTOwor CisgICAgaWYgKCByZG1zcl9zYWZlKGlkeCwgJnJ2YWwpICkKKyAgICB7CisgICAgICAgIHh0Zl9m YWlsdXJlKCJFcnJvcjogdGVzdF9pbnRlbF9wbXVfdmVyMjogIgorICAgICAgICAgICAgICAgICAg InJkbXNyX3NhZmUgZm9yIE1TUiAweCV4IHJlc3VsdGVkIGluIGEgZmF1bHQhXG4iLCBpZHgpOwor ICAgIH0KKworICAgIC8qIHRyeSB0byB3cml0ZSB0aGUgUEVSRl9HTE9CQUxfU1RBVFVTIHJlZ2lz dGVyIGFuZCBleHBlY3QgaXQgdG8gZmFpbCovCisgICAgdGVzdF9pbnZhbGlkX21zcl93cml0ZShp ZHgsIHd2YWwpOworCisgICAgLyogdGVzdCBERUJVR0NUTCAqLworICAgIGlkeCA9IE1TUl9ERUJV R0NUTDsKKworICAgIC8qIFRlc3QgREVCVUdDVEwgZmFjaWxpdGllcyBlbmFibGVkIGJ5IHYyICov CisgICAgd3ZhbCA9IERFQlVHQ1RMX0ZyZWV6ZV9MQlJfT05fUE1JIHwgREVCVUdDVExfRnJlZXpl X1BlcmZNb25fT25fUE1JOworCisgICAgdGVzdF92YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFsLCB3 dmFsKTsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX3BtdV92ZXIzKHVpbnQ4X3Qgbmcs IHVpbnQ4X3QgbmYpCit7CisgICAgLyogCisgICAgICogSW50ZWwgU29md3RhcmUgRGV2ZWxvcG1l bnQgTWFudWFsIFZvbC4gM0IKKyAgICAgKiBTZWN0aW9uIDE4LjIuMyBBcmNoaXRlY3R1cmFsIFBl cmZvcm1hbmNlIE1vbml0b3JpbmcgVmVyc2lvbiAzCisgICAgICoKKyAgICAgKiBNU1JzIG1hZGUg YXZhaWxhYmxlIGJ5IHRoZSBWUE1VCisgICAgICoKKyAgICAgKiBQRVJGRVZFTlRTRUx4LkFOWVRI UkVBRCAoQml0IDIxKQorICAgICAqIEZJWEVEX0NUUl9DVFJMLkFOWVRIUkVBRHggKEJpdCAyLCA2 LCAxMSkKKyAgICAgKgorICAgICAqIFZlcnNpb24gMyBpbnRyb2R1Y2VzIEFOWVRIUkVBRCBiaXQg YnV0IFZQTVUgZG9lcyBub3Qgc3VwcG9ydCBpdCB0bworICAgICAqIGVuc3VyZSB0aGF0IGEgVkNQ VSBpc24ndCBhYmxlIHRvIHJlYWQgdmFsdWVzIGZyb20gcGh5c2ljYWwgcmVzb3VyY2VzIHRoYXQK KyAgICAgKiBhcmUgbm90IGFsbG9jYXRlZCB0byBpdC4gVGhpcyB0ZXN0IGNhc2UgdmFsaWRhdGVz IHRoYXQgd2UgYXJlIHVuYWJsZSB0bworICAgICAqIHdyaXRlIHRvIC5BTllUSFJFQUQgYml0IGlu IFBFUkZFVkVOVFNFTHggYW5kIEZJWEVEX0NUUl9DVFJMCisgICAgICovCisKKyAgICB1aW50NjRf dCB3dmFsOworICAgIHVpbnQzMl90IGlkeDsKKyAgICB1bnNpZ25lZCBpOworCisgICAgcHJpbnRr KCJUZXN0aW5nIHZlcnNpb24gM1xuIik7CisKKyAgICAvKiB0ZXN0IFBFUkZFVkVOVFNFTHguQU5Z VEhSRUFEIGlzIGRpc2FibGVkICovCisgICAgZm9yICggaSA9IDA7IGkgPCBuZzsgaSsrICkKKyAg ICB7CisgICAgICAgIGlkeCA9IE1TUl9QRVJGRVZUU0VMKGkpOworCisgICAgICAgIHd2YWwgPSBF VkVOVF9VT1BTX1JFVElSRURfQU5ZVEhSRUFEOworCisgICAgICAgIHRlc3RfaW52YWxpZF9tc3Jf d3JpdGUoaWR4LCB3dmFsKTsKKyAgICB9CisKKyAgICAvKiB0ZXN0IEZJWEVEX0NUUl9DVEwuQU5Z VEhSRUFEIGlzIGRpc2FibGVkICovCisgICAgaWR4ID0gTVNSX0ZJWEVEX0NUUl9DVFJMOworCisg ICAgd3ZhbCA9IDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5mOyBpKysgKQorICAgICAgICB3 dmFsIHw9IChGSVhFRF9DVFJfRU5BQkxFX0FOWVRIUkVBRCA8PCAoNCAqIGkpKSA7CisKKyAgICB0 ZXN0X2ludmFsaWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf ZnVsbF93aWR0aF9jbnRzKHVpbnQ4X3QgbmcsIHVpbnQ4X3QgbmdiLCB1aW50OF90IHBkY20pCit7 CisgICAgdWludDY0X3QgY2Fwcywgd3ZhbDsKKyAgICB1aW50MzJfdCBpZHg7CisgICAgdW5zaWdu ZWQgaTsKKworICAgIGlmICggcmRtc3Jfc2FmZShNU1JfUEVSRl9DQVBBQklMSVRJRVMsICZjYXBz KSApCisgICAgeworICAgICAgICBpZiAocGRjbSkgeworICAgICAgICAgICAgeHRmX2ZhaWx1cmUo IkZhaWw6IEZhdWx0IHdoaWxlIHJlYWRpbmcgTVNSX1BFUkZfQ0FQQUJJTElUSUVTXG4iKTsKKyAg ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKCAhcGRjbSApIAor ICAgIHsKKyAgICAgICAgLyogCisgICAgICAgICAqIE1TUl9QRVJGX0NBUEFCSUxJVElFUyBzaG91 bGQgbnRvIGJlIHJlYWRhYmxlIHdpdGhvdXQgUERDTSAKKyAgICAgICAgICogYml0IHNldCBpbiBD UFVJRC4gCisgICAgICAgICAqIFhFTkJVRzogSG93ZXZlciwgYXQgdGhlIHRpbWUgb2Ygd3JpdGlu ZyB0aGlzIHRlc3QsIFhlbiAKKyAgICAgICAgICogbGVha3MgUEVSRl9DQVBBQklMSVRJRVMgaW50 byBndWVzdCB2aWV3IHdoaWNoIG1ha2VzIGl0IGEga25vd24gCisgICAgICAgICAqIGVycm9yLiBE byBub3QgZmFpbCBidXQgcmVwb3J0IHRoZSBlcnJvci4gIAorICAgICAgICAgKi8KKyAgICAgICAg eHRmX2Vycm9yKCJFcnJvcjogTVNSX1BFUkZfQ0FQQUJJTElUSUVTIHJlYWRhYmxlIHdoaWxlIFBE Q00gaXMgMFxuIik7CisgICAgfQorCisKKyAgICBpZiAoICEoY2FwcyAmIFBFUkZfQ0FQQUJJTElU SUVTX0Z1bGxfV2lkdGgpICkKKyAgICB7CisgICAgICAgIHByaW50aygiSW5mbzogRnVsbCB3aWR0 aCBjb3VudGVycyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIC8qIHRlc3Qgd3JpdGVzIHRvIGZ1bGwgd2lkdGggY291bnRlcnMgKi8KKyAgICBmb3IgKCBp ID0gMDsgaSA8IG5nOyBpKyspCisgICAgeworICAgICAgICBpZHggPSBNU1JfQV9QTUMoaSk7CisK KyAgICAgICAgd3ZhbCA9ICgoMXVsbCA8PCBuZ2IpIC0gMSkgOworCisgICAgICAgIHRlc3RfdmFs aWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCwgd3ZhbCk7CisKKyAgICAgICAgLyogaW52ZXJ0IHd2YWwg dG8gdGVzdCBpbnZhbGlkIHdyaXRlIHRvIE1TUl9QRVJGX0dMT0JBTF9PVkZfQ1RSTCAqLworICAg ICAgICB3dmFsID0gfnd2YWw7CisKKyAgICAgICAgdGVzdF9pbnZhbGlkX21zcl93cml0ZShpZHgs IHd2YWwpOworICAgIH0KK30KKwordm9pZCB0ZXN0X21haW4odm9pZCkKK3sKKyAgICAvKiBBcmNo aXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVmVyc2lvbiAqLworICAgIHVpbnQ4X3Qg dmVyOworICAgIC8qIE51bWJlciBvZiBnZW5lcmFsIHB1cnBvc2UgY291bnRlciByZWdpc3RlcnMg Ki8KKyAgICB1aW50OF90IG5ncmVnczsKKyAgICAvKiBOdW1iZXIgb2YgZml4ZWQgZnVuY3Rpb24g Y291bnRlciByZWdpc3RlcnMgKi8KKyAgICB1aW50OF90IG5mcmVnczsKKyAgICAvKiBCaXQgd2lk dGggb2YgZ2VuZXJhbC1wdXJwb3NlLCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGNvdW50ZXIgKi8K KyAgICB1aW50OF90IG5nYml0czsKKyAgICAvKiBQZXJmb3JtYW5jZSBhbmQgZGVidWcgY2FwYWJp bHRpZXMgTVNSKi8KKyAgICB1aW50OF90IHBkY207CisKKyAgICAvKiBjcHVpZCB2YXJpYWJsZXMg Ki8KKyAgICB1aW50MzJfdCBsZWFmID0gMHgwYSwgc3VibGVhZiA9IDA7CisgICAgdWludDMyX3Qg ZWF4LCBlYngsIGVjeCwgZWR4OworCisgICAgaWYgKCB2ZW5kb3JfaXNfYW1kICkKKyAgICAgICAg cmV0dXJuIHh0Zl9za2lwKCJTa2lwOiBWUE1VIHRlc3RpbmcgZm9yIEFNRCBjdXJyZW50bHkgdW5z dXBwb3J0ZWRcbiIpOworCisgICAgaWYgKG1heF9sZWFmIDwgbGVhZikgCisgICAgICAgIHJldHVy biB4dGZfc2tpcCgiU2tpcDogVW5hYmxlIHRvIHJldHJpZXZlIFBNVSBpbmZvcm1hdGlvbiBmcm9t IGNwdWlkXG4iKTsKKworICAgIC8qIAorICAgICAqIEludGVyIFNvZnR3YXJlIERldmVsb3BtZW50 IE1hbnVhbCBWb2wgMkEKKyAgICAgKiBUYWJsZSAzLTggIEluZm9ybWF0aW9uIFJldHVybmVkIGJ5 IENQVUlEIEluc3RydWN0aW9uIAorICAgICAqLworCisgICAgY3B1aWRfY291bnQobGVhZiwgc3Vi bGVhZiwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKKyAgICAvKiBFeHRyYWN0IHRoZSB2ZXJz aW9uIElEIC0gRUFYIDc6MCAqLworICAgIHZlciA9ICAoZWF4ICYgMHhmZik7CisKKyAgICAvKiBF eHRyYWN0IG51bWJlciBvZiBnZW5lcmFsIHB1cnBvc2UgY291bnRlciByZWdzIC0gRUFYIDE1Ojgg Ki8KKyAgICBuZ3JlZ3MgPSAoZWF4ID4+IDgpICYgMHhmZjsKKworICAgIC8qIEV4dHJhY3QgbnVt YmVyIG9mIGZpeGVkIGZ1bmN0aW9uIGNvdW50ZXIgcmVncyAtIEVEWCA0OjAgKi8KKyAgICBuZnJl Z3MgPSBlZHggJiAweDFmOworCisgICAgLyogRXh0cmFjdCBudW1iZXIgb2YgYml0cyBpbiBnZW5l cmFsIHB1cnBvc2UgY291bnRlciByZWdpc3RlcnMgYml0cyAqLworICAgIG5nYml0cyA9IChlYXgg Pj4gMTYpICAmIDB4ZmY7CisKKyAgICAvKiBSZXRyaWV2ZSBQZXJmICYgRGVidWcgQ2FwYWJpbHRp ZXMgTVNSIGF2YWlsYWJpbGl0eSovCisgICAgbGVhZiA9IDB4MDE7CisgICAgCisgICAgcHJpbnRr KCJJbmZvOiBQTVUgVmVyc2lvbiAldSwgR2VuZXJlYWwgcHVycG9zZSBjb3VudGVycyAldSwgRml4 ZWQgZnVuY3Rpb24gIgorICAgICAgICAgICAgImNvdW50ZXJzICV1LCBDb3VudGVyIHdpZHRoICV1 XG4iLCB2ZXIsIG5ncmVncywgbmZyZWdzLCBuZ2JpdHMpOworCisgICAgY3B1aWRfY291bnQobGVh Ziwgc3VibGVhZiwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKKyAgICAvKiBFeHRyYWN0IFBl cmZvcm1hbmNlICYgRGVidWcgQ2FwYWJpbHRpZXMgTVNSIGZyb20gRUNYIGJpdCAxNSAqLworICAg IHBkY20gPSAoZWN4ID4+IDE1KSAmIDB4MDE7CisKKyAgICBwcmludGsoIkluZm86IFBlcmYgJiBE ZWJ1ZyBDYXBhYmlsaXR5IE1TUiAldVxuIiwgcGRjbSk7CisgICAgCisgICAgc3dpdGNoICh2ZXIp CisgICAgeworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyogCisgICAgICAg ICAgICAgICAgICogVmVyc2lvbiA0IGZhY2lsaXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgWGVu LiAKKyAgICAgICAgICAgICAgICAgKiBWUE1VICBlbXVsYXRlcyB2ZXJzaW9uIDMuIEZhbGwgdGhy b3VnaCAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgeHRmX3dhcm5pbmco IlRlc3QgZG9lc24ndCBzdXBwb3J0IHZlcnNpb24gJXVcbiIsIHZlcik7CisKKyAgICAgICAgY2Fz ZSAzOgorICAgICAgICAgICAgICAgIC8qIHRlc3QgdmVyc2lvbiAzIGZhY2lsaXRpZXMgKi8KKyAg ICAgICAgICAgICAgICB0ZXN0X2ludGVsX3BtdV92ZXIzKCBuZ3JlZ3MsIG5mcmVncyk7CisgICAg ICAgICAgIAorICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgIGNh c2UgMjoKKyAgICAgICAgICAgICAgICAvKiB0ZXN0IHZlcnNpb24gMiBmYWNpbGl0aWVzICovCisg ICAgICAgICAgICAgICAgdGVzdF9pbnRlbF9wbXVfdmVyMihuZ3JlZ3MsIG5mcmVncyk7CisKKyAg ICAgICAgICAgICAgICAvKiB0ZXN0IHZlcnNpb24gMSBmYWNpbGl0aWVzICovCisgICAgICAgICAg ICAgICAgdGVzdF9pbnRlbF9wbXVfdmVyMShuZ3JlZ3MsIG5nYml0cyk7CisKKyAgICAgICAgICAg ICAgICAvKiB0ZXN0IGZ1bGwgd2lkdGggY291bnRlcnMgKi8KKyAgICAgICAgICAgICAgICB0ZXN0 X2Z1bGxfd2lkdGhfY250cyhuZ3JlZ3MsIG5nYml0cywgcGRjbSk7CisKKyAgICAgICAgICAgICAg ICBicmVhazsKKworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIHh0Zl9z a2lwKCJTa2lwOiBWUE1VIHZlcnNpb24gMSB1bnN1cHBvcnRlZCBpbiBYZW5cbiIpOworCisgICAg ICAgIGNhc2UgMDogCisgICAgICAgICAgICAgICAgcmV0dXJuIHh0Zl9za2lwKCJTa2lwOiBWUE1V IG5vdCBlbmFibGVkIGluIFhlblxuIik7CisgICAgfQorCisgICAgcmV0dXJuIHh0Zl9zdWNjZXNz KE5VTEwpOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1m aWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAor ICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuOS4zCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==