From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mohit Gambhir Subject: [PATCH v2 2/2][XTF] xtf/vpmu: MSR read/write tests for VPMU Date: Mon, 24 Apr 2017 13:46:08 -0400 Message-ID: <20170424174608.32026-3-mohit.gambhir@oracle.com> References: <20170424174608.32026-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: <20170424174608.32026-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, Mohit Gambhir List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCB0ZXN0cyBWUE1VIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGh5cGVydmlzb3Igb24g SW50ZWwgbWFjaGluZXMuClRoZSB0ZXN0cyB3cml0ZSB0byBhbGwgdmFsaWQgYml0cyBpbiB0aGUg TVNScyB0aGF0IGdldCBleHBvc2VkIHRvIHRoZSBndWVzdHMKd2hlbiBWUE1VIGlzIGVuYWJsZWQu IFRoZSB0ZXN0cyBhbHNvIHdyaXRlIGludmFsaWQgdmFsdWVzIHRvIHRoZSBiaXRzCnRoYXQgc2hv dWxkIGJlIG1hc2tlZCBhbmQgZXhwZWN0IHRoZSB3cm1zciBjYWxsIHRvIGZhdWx0LgoKVGhlIHRl c3RzIGFyZSBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgZm9yIEFNRCBtYWNoaW5lcyBhbmQgUFYgZ3Vl c3RzLgoKU2lnbmVkLW9mZi1ieTogTW9oaXQgR2FtYmhpciA8bW9oaXQuZ2FtYmhpckBvcmFjbGUu Y29tPgotLS0KIHRlc3RzL3ZwbXUvTWFrZWZpbGUgfCAgIDkgKwogdGVzdHMvdnBtdS9tYWluLmMg ICB8IDUwNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiAyIGZpbGVzIGNoYW5nZWQsIDUxMyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgdGVzdHMvdnBtdS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3ZwbXUvbWFp bi5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvdnBtdS9NYWtlZmlsZSBiL3Rlc3RzL3ZwbXUvTWFrZWZp bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhZjQzNgotLS0gL2Rldi9u dWxsCisrKyBiL3Rlc3RzL3ZwbXUvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACitpbmNsdWRlICQo Uk9PVCkvYnVpbGQvY29tbW9uLm1rCisKK05BTUUgICAgICA6PSB2cG11CitDQVRFR09SWSAgOj0g dXRpbGl0eQorVEVTVC1FTlZTIDo9ICQoQUxMX0VOVklST05NRU5UUykKKworb2JqLXBlcmVudiAr PSBtYWluLm8KKworaW5jbHVkZSAkKFJPT1QpL2J1aWxkL2dlbi5tawpkaWZmIC0tZ2l0IGEvdGVz dHMvdnBtdS9tYWluLmMgYi90ZXN0cy92cG11L21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5lZDAwOTUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdnBtdS9tYWlu LmMKQEAgLTAsMCArMSw1MDQgQEAKKy8qKgorICogQGZpbGUgdGVzdHMvdnBtdS9tYWluLmMKKyAq IEByZWYgdGVzdC12cG11CisgKgorICogQHBhZ2UgdGVzdC12cG11IHZwbXUKKyAqCisgKiBUZXN0 IE1TUnMgZXhwb3NlZCBieSBWUE1VIGZvciB2YXJpb3VzIHZlcnNpb25zIG9mIEFyY2hpdGVjdHVy YWwgUGVyZm9ybWFuY2UKKyAqIE1vbml0b3JpbmcgVW5pdAorICoKKyAqIEBzZWUgdGVzdHMvdnBt dS9tYWluLmMKKyAqLworCisjaW5jbHVkZSA8eHRmLmg+CisjaW5jbHVkZSA8YXJjaC9tc3ItaW5k ZXguaD4KKyNpbmNsdWRlIDxhcmNoL21tLmg+CisKKyNkZWZpbmUgRVZFTlRfVU9QU19SRVRJUkVE ICAgICAgICAgICAgICAgICAgIDB4MDA0MTAxYzIKKyNkZWZpbmUgRVZFTlRfVU9QU19SRVRJUkVE X0FOWVRIUkVBRCAgICAgICAgIDB4MDA2MTAxYzIKKyNkZWZpbmUgRklYRURfQ1RSX0NUTF9CSVRT ICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRklYRURfQ1RSX0VOQUJMRSAgICAgICAgICAg ICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgRklYRURfQ1RSX0VOQUJMRV9BTllUSFJFQUQg ICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSUEzMl9QRVJGRVZFTlRTRUx4X0VOQUJMRV9B TllUSFJFQUQgICgxdWxsIDw8IDIxKQorI2RlZmluZSBJQTMyX1BFUkZFVkVOVFNFTHhfRU5BQkxF X1BDQiAgICAgICAgKDF1bGwgPDwgMTkpCisjZGVmaW5lIElBMzJfREVCVUdDVExfRnJlZXplX0xC Ul9PTl9QTUkgICAgICAoMXVsbCA8PCAxMSkKKyNkZWZpbmUgSUEzMl9ERUJVR0NUTF9GcmVlemVf UGVyZk1vbl9Pbl9QTUkgICgxdWxsIDw8IDEyKQorCitjb25zdCBjaGFyIHRlc3RfdGl0bGVbXSA9 ICJUZXN0IHZwbXUiOworCitzdGF0aWMgdm9pZCBnZXRfaW50ZWxfcG11X3ZlcnNpb24odWludDhf dCAqdiwgdWludDhfdCAqbmcsIHVpbnQ4X3QgKm5mLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QgKm5nYikKK3sKKyAgICAvKiBJbnRlciBTb2Z0d2FyZSBEZXZlbG9w bWVudCBNYW51YWwgVm9sIDJBCisgICAgICogVGFibGUgMy04ICBJbmZvcm1hdGlvbiBSZXR1cm5l ZCBieSBDUFVJRCBJbnN0cnVjdGlvbiAqLworCisgICAgdWludDMyX3QgbGVhZiA9IDB4MGEsIHN1 YmxlYWYgPSAwOworCisgICAgdWludDMyX3QgZWF4LCBlYngsIGVjeCwgZWR4OworCisgICAgY3B1 aWRfY291bnQobGVhZiwgc3VibGVhZiwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKKyAgICAv KiBFeHRyYWN0IHRoZSB2ZXJzaW9uIElEIC0gRUFYIDc6MCAqLworICAgICp2ID0gIChlYXggJiAw eGZmKTsKKworICAgIC8qIEV4dHJhY3QgbnVtYmVyIG9mIGdlbmVyYWwgcHVycG9zZSBjb3VudGVy IHJlZ3MgLSBFQVggMTU6OCAqLworICAgICpuZyA9IChlYXggPj4gOCkgJiAweGZmOworCisgICAg LyogRXh0cmFjdCBudW1iZXIgb2YgZml4ZWQgZnVuY3Rpb24gY291bnRlciByZWdzIC0gRURYIDQ6 MCAqLworICAgICpuZiA9IGVkeCAmIDB4MWY7CisKKyAgICAvKiBFeHRyYWN0IG51bWJlciBvZiBi aXRzIGluIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyIHJlZ2lzdGVycyBiaXRzICovCisgICAgKm5n YiA9IChlYXggPj4gMTYpICAmIDB4ZmY7Cit9CisKK3N0YXRpYyBib29sIHRlc3RfdmFsaWRfbXNy X3dyaXRlKHVpbnQzMl90IGlkeCwgdWludDY0X3Qgd3ZhbCkKK3sKKyAgICBjb25zdCBjaGFyICpw ZnggPSAiRXJyb3I6IHRlc3RfdmFsaWRfbXNyX3dyaXRlOiI7CisKKyAgICB1aW50NjRfdCBydmFs ID0gMDsKKworICAgIHByaW50aygiV3JpdGluZyAweCUiIFBSSXg2NCAiIHRvIE1TUiAweCV4XG4i LCB3dmFsLCBpZHgpOworCisgICAgaWYoIHdybXNyX3NhZmUoaWR4LCB3dmFsKSApCisgICAgewor ICAgICAgICB4dGZfZXJyb3IoIiVzIHdybXNyIGZvciBNU1IgMHgleCByZXN1bHRlZCBpbiBhIGZh dWx0IVxuIiwgcGZ4LCBpZHgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg LyogY2hlY2sgdG8gc2VlIGlmIHRoZSB2YWx1ZXMgd2VyZSB3cml0dGVuIGNvcnJlY3RseSAqLwor ICAgIGlmICggcmRtc3Jfc2FmZShpZHgsICZydmFsKSApCisgICAgeworICAgICAgICB4dGZfZXJy b3IoIiVzIHJkbXNyIGZvciBNU1IgMHgleCByZXN1bHRlZCBpbiBhIGZhdWx0IVxuIiwgcGZ4LCBp ZHgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICggcnZhbCAhPSB3dmFs ICkKKyAgICB7CisgICAgICAgIHh0Zl9lcnJvcigiJXMgcmRtc3IgdmFsdWUgbWlzbWF0Y2ggZm9y IE1TUiAweCV4IEV4cGVjdGVkOiAlIlBSSXg2NAorICAgICAgICAgICAgICAgICIsIEZvdW5kICUi UFJJeDY0IlxuIiwgcGZ4LCBpZHgsIHd2YWwsIHJ2YWwpOworICAgICAgICByZXR1cm4gZmFsc2U7 CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHRlc3RfaW52YWxp ZF9tc3Jfd3JpdGUodWludDMyX3QgaWR4LCB1aW50NjRfdCB3dmFsKQoreworICAgIHByaW50aygi V3JpdGUgaW52YWxpZCB2YWx1ZSAlIlBSSXg2NCIgdG8gTVNSIDB4JXhcbiIsIHd2YWwsIGlkeCk7 CisKKyAgICAvKiB3cm1zcl9zYWZlIG11c3QgcmV0dXJuIGZhbHNlIGFmdGVyIGZhdWx0aW5nICov CisgICAgaWYoICF3cm1zcl9zYWZlKGlkeCwgd3ZhbCkgKQorICAgIHsKKyAgICAgICAgeHRmX2Vy cm9yKCJFcnJvcjogdGVzdF9pbnZhbGlkX21zcl93cml0ZSB3cm1zciBmb3IgTVNSIDB4JXggZGlk IG5vdCAiCisgICAgICAgICAgICAgICAgICAiZmF1bHQhXG4iLCBpZHgpOworICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgfQorCisgICAgcHJpbnRrKCJ3cm1zciB0byBNU1IgMHgleCBmYXVsdGVk IGFzIGV4cGVjdGVkLlxuIiwgaWR4KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg Ym9vbCB0ZXN0X3RyYW5zcGFyZW50X21zcl93cml0ZSh1aW50MzJfdCBpZHgsIHVpbnQ2NF90IHd2 YWwpCit7CisgICAgY29uc3QgY2hhciAqcGZ4ID0gIkVycm9yOiB0ZXN0X3RyYW5zcGFyZW50X21z cl93cml0ZToiOworCisgICAgdWludDY0X3QgcnZhbDEgPSAwOworCisgICAgdWludDY0X3QgcnZh bDIgPSAwOworCisgICAgcHJpbnRrKCJBdHRlbXB0aW5nIHRvIHdyaXRlIGEgdmFsdWUgd2l0aCBu byBlZmZlY3QgdG8gTVNSIDB4JXhcbiIsIGlkeCk7CisKKyAgICAvKiByZWFkIGN1cnJlbnQgdmFs dWUgKi8KKyAgICBpZiAoIHJkbXNyX3NhZmUoaWR4LCAmcnZhbDEpICkKKyAgICB7CisgICAgICAg IHh0Zl9lcnJvcigiJXMgcmRtc3IgZm9yIE1TUiAweCV4IHJlc3VsdGVkIGluIGEgZmF1bHRcbiIs IHBmeCwgaWR4KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qIHdybXNy IHNob3VsZCBub3QgZmF1bHQgYnV0IHNob3VsZCBub3Qgd3JpdGUgYW55dGhpbmcgZWl0aGVyICov CisgICAgaWYgICggd3Jtc3Jfc2FmZShpZHgsIHd2YWwpICkKKyAgICB7CisgICAgICAgIHh0Zl9l cnJvcigiJXMgd3Jtc3IgZm9yIE1TUiAweCV4IHJlc3VsdGVkIGluIGEgZmF1bHRcbiIsIHBmeCwg aWR4KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qIHJlYWQgbmV3IHZh bHVlICovCisgICAgaWYgKCByZG1zcl9zYWZlKGlkeCwgJnJ2YWwyKSApCisgICAgeworICAgICAg ICB4dGZfZXJyb3IoIiVzIHJkbXNyIGZvciBNU1IgMHgleCByZXN1bHRlZCBpbiBhIGZhdWx0XG4i LCBwZngsIGlkeCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKiBDaGVj ayBpZiB0aGUgbmV3IHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgYmVmb3JlIHdybXNyICov CisKKyAgICBpZiAoIHJ2YWwxICE9IHJ2YWwyICkKKyAgICB7CisgICAgICAgIHh0Zl9lcnJvcigi JXMgcmRtc3IgdmFsdWUgbWlzbWF0Y2ggZm9yIE1TUiAweCV4IEV4cGVjdGVkICUiUFJJeDY0Cisg ICAgICAgICAgICAgICAgIi4gRm91bmQgJSJQUkl4NjQiXG4iLCBwZngsIGlkeCwgcnZhbDEsIHJ2 YWwyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor fQorCitzdGF0aWMgYm9vbCB0ZXN0X2ludGVsX3BtdV92ZXIxKHVpbnQ4X3QgbmcpCit7CisgICAg LyogSW50ZWwgU29md3RhcmUgRGV2ZWxvcG1lbnQgTWFudWFsIFZvbC4gM0IsCisgICAgICogU2Vj dGlvbiAxOC4yLjEgLSBBcmNoaXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVmVyc2lv biAxCisgICAgICoKKyAgICAgKiBNU1JzIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBWUE1VIC0KKyAg ICAgKgorICAgICAqIElBMzJfUE1DeCAoc3RhcnQgYXQgYWRkcmVzcyAweGMxKQorICAgICAqIElB MzJfUEVSRkVWRU5UU0VMeCAoc3RhcnQgYXQgYWRkcmVzcyAweDE4NikKKyAgICAgKi8KKworICAg IHVpbnQzMl90IGlkeDsKKworICAgIHVpbnQ2NF90IHd2YWwgPSAwOworCisgICAgdWludDhfdCBp OworCisgICAgcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgICAgcHJpbnRrKCJUZXN0 aW5nIHZlcnNpb24gMVxuIik7CisgICAgcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLVxuIik7CisK KyAgICAvKiBmb3IgYWxsIGdlbmVyYWwgcHVycG9zZSBjb3VudGVycyAqLworICAgIGZvciAoIGkg PSAwOyBpIDwgbmc7IGkrKyApCisgICAgeworICAgICAgICAvKiB0ZXN0IHdyaXRpbmcgdG8gSUEz Ml9QTUN4ICovCisgICAgICAgIGlkeCA9IE1TUl9JQTMyX1BNQyhpKTsKKworICAgICAgICAvKiB0 ZXN0IHdlIGNhbiB3cml0ZSB0byBhbGwgdmFsaWQgYml0cyBpbiB0aGUgY291bnRlcnMgKi8KKyAg ICAgICAgLyogZG9uJ3Qgc2V0IGJpdCAzMSBzaW5jZSB0aGF0IGdldHMgc2lnbi1leHRlbmRlZCAq LworICAgICAgICB3dmFsID0gKCgxdWxsIDw8IDMxKSAtIDEpIDsKKworICAgICAgICBpZiAoICF0 ZXN0X3ZhbGlkX21zcl93cml0ZShpZHgsIHd2YWwpICkKKyAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKKworICAgICAgICAvKiBzZXQgYWxsIHZhbGlkIGJpdHMgaW4gTVNSX0lBMzJfRVZFTlRTRUx4 ICovCisgICAgICAgIGlkeCA9IE1TUl9JQTMyX1BFUkZFVlRTRUwoaSk7CisgICAgICAgIHd2YWwg PSAoKDF1bGwgPDwgMzIpIC0gMSkgXiAoSUEzMl9QRVJGRVZFTlRTRUx4X0VOQUJMRV9BTllUSFJF QUQgfAorICAgICAgICAgICAgICAgIElBMzJfUEVSRkVWRU5UU0VMeF9FTkFCTEVfUENCKTsKKwor ICAgICAgICBpZiAoICF0ZXN0X3ZhbGlkX21zcl93cml0ZShpZHgsIHd2YWwpICkKKyAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvKiB0ZXN0IHdyaXRpbmcgYW4gaW52YWxpZCB2 YWx1ZSBhbmQgYXNzZXJ0IHRoYXQgaXQgZmF1bHRzICovCisgICAgICAgIHd2YWwgPSB+KCgxdWxs IDw8IDMyKSAtIDEpOworCisgICAgICAgIGlmICggIXRlc3RfaW52YWxpZF9tc3Jfd3JpdGUoaWR4 LCB3dmFsKSApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu IHRydWU7Cit9CisKK3N0YXRpYyBib29sIHRlc3RfaW50ZWxfcG11X3ZlcjIodWludDhfdCBuZywg dWludDhfdCBuZikKK3sKKyAgICAvKiBJbnRlbCBTb2Z3dGFyZSBEZXZlbG9wbWVudCBNYW51YWwg Vm9sLiAzQiwKKyAgICAgKiBTZWN0aW9uIDE4LjIuMiAtIEFyY2hpdGVjdHVyYWwgUGVyZm9ybWFu Y2UgTW9uaXRvcmluZyBWZXJzaW9uIDIKKyAgICAgKgorICAgICAqIE1TUnMgbWFkZSBhdmFpbGFi bGUgYnkgdGhlIFZQTVUgLQorICAgICAqCisgICAgICogSUEzMl9GSVhFRF9DVFJ4IChzdGFydCBh dCBhZGRyZXNzIDB4MzA5KQorICAgICAqIElBMzJfRklYRURfQ1RSX0NUUkwKKyAgICAgKiBJQTMy X1BFUkZfR0xPQkFMX0NUUkwKKyAgICAgKiBJQTMyX1BFUkZfR0xPQkFMX1NUQVRVUyAocmVhZC1v bmx5KQorICAgICAqIElBMzJfUEVSRl9HTE9CQUxfT1ZGX0NUUkwKKyAgICAgKiBJQTMyX0RFQlVH Q1RMX0ZyZWV6ZV9MQlJfT05fUE1JCisgICAgICogSUEzMl9ERUJVR0NUTF9GcmVlemVfUGVyZk1v bl9Pbl9QTUkKKyAgICAgKi8KKworICAgIHVpbnQzMl90IGlkeDsKKworICAgIHVpbnQ2NF90IHd2 YWwsIHJ2YWw7CisKKyAgICB1aW50OF90IGk7CisKKyAgICBwcmludGsoIi0tLS0tLS0tLS0tLS0t LS0tXG4iKTsKKyAgICBwcmludGsoIlRlc3RpbmcgdmVyc2lvbiAyXG4iKTsKKyAgICBwcmludGso Ii0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbmY7IGkrKyAp CisgICAgeworICAgICAgICAvKiB0ZXN0IHdyaXRpbmcgdG8gSUEzMl9GSVhFRF9DVFJ4ICovCisg ICAgICAgIGlkeCA9IE1TUl9JQTMyX0ZJWEVEX0NUUihpKTsKKworICAgICAgICB3dmFsID0gKDF1 bGwgPDwgMzIpIC0gMTsKKworICAgICAgICBpZiAoICF0ZXN0X3ZhbGlkX21zcl93cml0ZShpZHgs IHd2YWwpICkKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLyogdGVzdCBp bnZhbGlkIHdyaXRlIHRvIElBMzJfRklYRURfQ1RSeCAqLworICAgICAgICB3dmFsID0gfnd2YWw7 CisKKyAgICAgICAgaWYgKCAhdGVzdF9pbnZhbGlkX21zcl93cml0ZShpZHgsIHd2YWwpICkKKyAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyogdGVzdCBJQTMyX0ZJWEVE X0NUUl9DVFJMICovCisgICAgaWR4ID0gTVNSX0lBMzJfRklYRURfQ1RSX0NUUkw7CisKKyAgICAv KiBlbmFibGUgYWxsIGZpeGVkIGNvdW50ZXJzICovCisgICAgd3ZhbCA9IDA7CisKKyAgICBmb3Ig KCBpID0gMDsgaSA8IG5mOyBpKysgKQorICAgICAgICB3dmFsIHw9IChGSVhFRF9DVFJfRU5BQkxF IDw8IChGSVhFRF9DVFJfQ1RMX0JJVFMgKiBpKSk7CisKKyAgICBpZiAoICF0ZXN0X3ZhbGlkX21z cl93cml0ZShpZHgsIHd2YWwpICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLyogaW52 ZXJ0IHd2YWwgdG8gdGVzdCB3cml0aW5nIGFuIGludmFsaWQgdmFsdWUgKi8KKyAgICB3dmFsID0g fnd2YWw7CisKKyAgICBpZiAoICF0ZXN0X2ludmFsaWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCkgKQor ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLyogdGVzdCBJQTMyX1BFUkZfR0xPQkFMX0NUUkwg Ki8KKyAgICBpZHggPSBNU1JfSUEzMl9QRVJGX0dMT0JBTF9DVFJMOworCisgICAgd3ZhbCA9IDA7 CisKKyAgICAvKiBzZXQgYWxsIGZpeGVkIGZ1bmN0aW9uIGNvdW50ZXJzIGVuYWJsZSBiaXRzICov CisgICAgZm9yICggaT0wOyBpIDwgbmY7IGkgKysgKQorICAgICAgICB3dmFsIHw9ICgodWludDY0 X3QpMSA8PCAoMzIgKyBpKSk7CisKKyAgICAvKiBzZXQgYWxsIGdlbmVyYWwgcHVycG9zZSBjb3Vu dGVycyBlbmFibGUgYml0cyovCisgICAgZm9yICggaSA9IDA7IGkgPCBuZzsgaSsrICkKKyAgICAg ICAgd3ZhbCB8PSAoMSA8PCBpKTsKKworICAgIGlmICggIXRlc3RfdmFsaWRfbXNyX3dyaXRlKGlk eCwgd3ZhbCkgKQorICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLyogaW52ZXJ0IHd2YWwg dG8gdGVzdCBpbnZhbGlkIHdyaXRlIHRvIE1TUl9JQTMyX1BFUkZfR0xPQkFMX0NUUkwqLworICAg IHd2YWwgPSB+d3ZhbDsKKworICAgIGlmICggIXRlc3RfaW52YWxpZF9tc3Jfd3JpdGUoaWR4LCB3 dmFsKSApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8qIHRlc3QgSUEzMl9QRVJGX0dM T0JBTF9PVkZfQ1RSTCAqLworICAgIGlkeCA9IE1TUl9JQTMyX1BFUkZfR0xPQkFMX09WRl9DVFJM OworCisgICAgLyogc2V0IGFsbCB2YWxpZCBiaXRzIGluIE1TUl9JQTMyX1BFUkZfR0xPQkFMX09W Rl9DVFJMICovCisgICAgd3ZhbCA9IDB4QzAwMDAwMDAwMDAwMDAwMCB8ICgoKDFVTEwgPDwgbmYp IC0gMSkgPDwgMzIpIHwgKCgxVUxMIDw8IG5nKSAtIDEpOworCisgICAgLyogV3JpdGluZyB0byBN U1JfSUEzMl9QRVJGX0dMT0JBTF9PVkZfQ1RSTCBjbGVhcnMKKyAgICAgKiBNU1JfSUEzMl9QRVJG X0dMT0JBTF9TVEFUVVMgYnV0IGJ1dCBhbHdheXMgcmV0dXJucyAwIHdoZW4gcmVhZCBzbworICAg ICAqIGl0IGlzIHRlc3RlZCBhcyBhIHRyYW5zcGFyZW50IHdyaXRlICovCisKKyAgICBpZiAoICF0 ZXN0X3RyYW5zcGFyZW50X21zcl93cml0ZShpZHgsIHd2YWwpICkKKyAgICAgICAgcmV0dXJuIGZh bHNlOworCisgICAgLyogaW52ZXJ0IHd2YWwgdG8gdGVzdCBpbnZhbGlkIHdyaXRlIHRvIE1TUl9J QTMyX1BFUkZfR0xPQkFMX09WRl9DVFJMKi8KKyAgICB3dmFsID0gfnd2YWw7CisKKyAgICBpZiAo ICF0ZXN0X2ludmFsaWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCkgKQorICAgICAgICByZXR1cm4gZmFs c2U7CisKKyAgICAvKiB0ZXN0IElBMzJfUEVSRl9HTE9CQUxfU1RBVFVTIChyZWFkLW9ubHkpICov CisgICAgaWR4ID0gTVNSX0lBMzJfUEVSRl9HTE9CQUxfU1RBVFVTOworCisgICAgaWYgKCByZG1z cl9zYWZlKGlkeCwgJnJ2YWwpICkKKyAgICB7CisgICAgICAgIHh0Zl9lcnJvcigiRXJyb3I6IHRl c3RfaW50ZWxfcG11X3ZlcjI6ICIKKyAgICAgICAgICAgICAgICAgICJyZG1zcl9zYWZlIGZvciBN U1IgMHgleCByZXN1bHRlZCBpbiBhIGZhdWx0IVxuIiwgaWR4KTsKKyAgICAgICAgcmV0dXJuIGZh bHNlOworICAgIH0KKworICAgIC8qIHRyeSB0byB3cml0ZSB0aGUgSUEzMl9QRVJGX0dMT0JBTF9T VEFUVVMgcmVnaXN0ZXIgYW5kIGV4cGVjdCBpdCB0byBmYWlsKi8KKyAgICBpZiAoICF0ZXN0X2lu dmFsaWRfbXNyX3dyaXRlKGlkeCwgcnZhbCkgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKwor ICAgIC8qIHRlc3QgSUEzMl9ERUJVR0NUTCAqLworICAgIGlkeCA9IE1TUl9JQTMyX0RFQlVHQ1RM OworCisgICAgLyogVGVzdCBJQTMyX0RFQlVHQ1RMIGZhY2lsaXRpZXMgZW5hYmxlZCBieSB2MiAq LworICAgIHd2YWwgPSBJQTMyX0RFQlVHQ1RMX0ZyZWV6ZV9MQlJfT05fUE1JIHwgSUEzMl9ERUJV R0NUTF9GcmVlemVfUGVyZk1vbl9Pbl9QTUk7CisKKyAgICAvKiBGSVhNRTogVGhpcyBzaG91bGQg cmVhbGx5IGJlIGEgdmFsaWQgd3JpdGUgYnV0IGl0IGlzbnQgc3VwcG9ydGVkIGJ5IHRoZQorICAg ICAqIFZQTVUgeWV0ICovCisgICAgaWYgKCAhdGVzdF90cmFuc3BhcmVudF9tc3Jfd3JpdGUoaWR4 LCB3dmFsKSApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor CitzdGF0aWMgYm9vbCB0ZXN0X2ludGVsX3BtdV92ZXIzKHVpbnQ4X3QgbmcsIHVpbnQ4X3QgbmYp Cit7CisgICAgLyogSW50ZWwgU29md3RhcmUgRGV2ZWxvcG1lbnQgTWFudWFsIFZvbC4gM0IKKyAg ICAgKiBTZWN0aW9uIDE4LjIuMyBBcmNoaXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3Jpbmcg VmVyc2lvbiAzCisgICAgICoKKyAgICAgKiBNU1JzIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBWUE1V CisgICAgICoKKyAgICAgKiBJQTMyX1BFUkZFVkVOVFNFTHguQU5ZVEhSRUFEIChCaXQgMjEpCisg ICAgICogSUEzMl9GSVhFRF9DVFJfQ1RSTC5BTllUSFJFQUR4IChCaXQgMiwgNiwgMTEpCisgICAg ICoKKyAgICAgKiBWZXJzaW9uIDMgaW50cm9kdWNlcyBBTllUSFJFQUQgYml0IGJ1dCBWUE1VIGRv ZXMgbm90IHN1cHBvcnQgaXQgdG8KKyAgICAgKiBlbnN1cmUgdGhhdCBhIFZDUFUgaXNuJ3QgYWJs ZSB0byByZWFkIHZhbHVlcyBmcm9tIHBoeXNpY2FsIHJlc291cmNlcyB0aGF0CisgICAgICogYXJl IG5vdCBhbGxvY2F0ZWQgdG8gaXQuIFRoaXMgdGVzdCBjYXNlIHZhbGlkYXRlcyB0aGF0IHdlIGFy ZSB1bmFibGUgdG8KKyAgICAgKiB3cml0ZSB0byAuQU5ZVEhSRUFEIGJpdCBpbiBJQTMyX1BFUkZF VkVOVFNFTHggYW5kIElBMzJfRklYRURfQ1RSX0NUUkwKKyAgICAgKi8KKworICAgIHVpbnQ2NF90 IHd2YWw7CisKKyAgICB1aW50MzJfdCBpZHg7CisKKyAgICB1aW50OF90IGk7CisKKyAgICBwcmlu dGsoIi0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICBwcmludGsoIlRlc3RpbmcgdmVyc2lvbiAz XG4iKTsKKyAgICBwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworICAgIC8qIHRlc3Qg SUEzMl9QRVJGRVZFTlRTRUx4LkFOWVRIUkVBRCBpcyBkaXNhYmxlZCAqLworICAgIGZvciAoIGkg PSAwOyBpIDwgbmc7IGkrKyApCisgICAgeworICAgICAgICBpZHggPSBNU1JfSUEzMl9QRVJGRVZU U0VMKGkpOworCisgICAgICAgIHd2YWwgPSBFVkVOVF9VT1BTX1JFVElSRURfQU5ZVEhSRUFEOwor CisgICAgICAgIGlmICggIXRlc3RfaW52YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFsKSApCisgICAg ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisKKyAgICAvKiB0ZXN0IElBMzJfRklYRURf Q1RSX0NUTC5BTllUSFJFQUQgaXMgZGlzYWJsZWQgKi8KKyAgICBpZHggPSBNU1JfSUEzMl9GSVhF RF9DVFJfQ1RSTDsKKworICAgIHd2YWwgPSAwOworCisgICAgZm9yICggaSA9IDA7IGkgPCBuZjsg aSsrICkKKyAgICAgICAgd3ZhbCB8PSAoRklYRURfQ1RSX0VOQUJMRV9BTllUSFJFQUQgPDwgKDQg KiBpKSkgOworCisgICAgaWYgKCAhdGVzdF9pbnZhbGlkX21zcl93cml0ZShpZHgsIHd2YWwpICkK KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi b29sIHRlc3RfZnVsbF93aWR0aF9jbnRzKHVpbnQ4X3QgbmcsIHVpbnQ4X3QgbmdiKQoreworICAg IHVpbnQ2NF90IGNhcHM7CisKKyAgICB1aW50MzJfdCBpZHg7CisKKyAgICB1aW50NjRfdCB3dmFs OworCisgICAgdWludDhfdCBpOworCisgICAgLyogR2V0IHBlcmYgY2FwYWJpbHRpZXMgKi8KKyAg ICBpZiAoIHJkbXNyX3NhZmUoTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsICZjYXBzKSApCisg ICAgeworICAgICAgICBwcmludGsoIkZhdWx0IHdoaWxlIHJlYWRpbmcgTVNSX0lBMzJfUEVSRl9D QVBBQklMSVRJRVNcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg KCAhKGNhcHMgPj4gMTMpICYgMSApCisgICAgeworICAgICAgICBwcmludGsoIkZ1bGwgd2lkdGgg Y291bnRlcnMgbm90IHN1cHBvcnRlZFxuIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K KworICAgIC8qIHRlc3Qgd3JpdGVzIHRvIGZ1bGwgd2lkdGggY291bnRlcnMgKi8KKyAgICBmb3Ig KCBpID0gMDsgaSA8IG5nOyBpKyspCisgICAgeworICAgICAgICBpZHggPSBNU1JfSUEzMl9BX1BN QyhpKTsKKworICAgICAgICB3dmFsID0gKCgxdWxsIDw8IG5nYikgLSAxKSA7CisKKyAgICAgICAg aWYgKCAhdGVzdF92YWxpZF9tc3Jfd3JpdGUoaWR4LCB3dmFsKSApCisgICAgICAgICAgICAgICAg cmV0dXJuIGZhbHNlOworCisgICAgICAgIC8qIGludmVydCB3dmFsIHRvIHRlc3QgaW52YWxpZCB3 cml0ZSB0byBNU1JfSUEzMl9QRVJGX0dMT0JBTF9PVkZfQ1RSTCovCisgICAgICAgIHd2YWwgPSB+ d3ZhbDsKKworICAgICAgICBpZiAoICF0ZXN0X2ludmFsaWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCkg KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor Cit9CisKK3ZvaWQgdGVzdF9tYWluKHZvaWQpCit7CisgICAgLyogQXJjaGl0ZWN0dXJhbCBQZXJm b3JtYW5jZSBNb25pdG9yaW5nIFZlcnNpb24gKi8KKyAgICB1aW50OF90IHZlcjsKKworICAgIC8q IE51bWJlciBvZiBnZW5lcmFsIHB1cnBvc2UgY291bnRlciByZWdpc3RlcnMgKi8KKyAgICB1aW50 OF90IG5ncmVnczsKKworICAgIC8qIE51bWJlciBvZiBmaXhlZCBmdW5jdGlvbiBjb3VudGVyIHJl Z2lzdGVycyAqLworICAgIHVpbnQ4X3QgbmZyZWdzOworCisgICAgLyogQml0IHdpZHRoIG9mIGdl bmVyYWwtcHVycG9zZSwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBjb3VudGVyICovCisgICAgdWlu dDhfdCBuZ2JpdHM7CisKKyAgICBpZiAoIElTX0RFRklORUQoQ09ORklHX1BWKSApCisgICAgewor ICAgICAgICBwcmludGsoIlZQTVUgdGVzdGluZyBmb3IgUFYgZ3Vlc3RzIGN1cnJlbnRseSB1bnN1 cHBvcnRlZFxuIik7CisgICAgICAgIGdvdG8gc2tpcDsKKyAgICB9CisKKyAgICBpZiAoIHZlbmRv cl9pc19hbWQgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJWUE1VIHRlc3RpbmcgZm9yIEFNRCBj dXJyZW50bHkgdW5zdXBwb3J0ZWRcbiIpOworICAgICAgICBnb3RvIHNraXA7CisgICAgfQorCisg ICAgZ2V0X2ludGVsX3BtdV92ZXJzaW9uKCZ2ZXIsICZuZ3JlZ3MsICZuZnJlZ3MsICZuZ2JpdHMp OworCisgICAgcHJpbnRrKCJWZXI9JXU6IEdQUj0ldTogRkZSPSV4IEdQQj0ldVxuIiwgdmVyLCBu Z3JlZ3MsIG5mcmVncywgbmdiaXRzKTsKKworICAgIHN3aXRjaCAodmVyKQorICAgIHsKKworICAg ICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgLyogdmVyc2lvbiA0IGZhY2lsaXRpZXMgYXJl IG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgKiBWUE1VICBlbXVsYXRlcyB2ZXJzaW9u IDMgKi8KKyAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKworICAgICAgICBjYXNl IDM6CisgICAgICAgICAgICAgICAgLyogdGVzdCB2ZXJzaW9uIDMgZmFjaWxpdGllcyAqLworICAg ICAgICAgICAgICAgIGlmICggIXRlc3RfaW50ZWxfcG11X3ZlcjMoIG5ncmVncywgbmZyZWdzKSAp CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4dGZfZmFpbHVyZSgiRmFpbDogRmFpbGVkIFZQ TVUgdmVyc2lvbiAzXG4iKTsKKyAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKwor ICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgLyogdGVzdCB2ZXJzaW9uIDIgZmFjaWxp dGllcyAqLworICAgICAgICAgICAgICAgIGlmICggIXRlc3RfaW50ZWxfcG11X3ZlcjIobmdyZWdz LCBuZnJlZ3MpICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHh0Zl9mYWlsdXJlKCJGYWls OiBGYWlsZWQgVlBNVSB2ZXJzaW9uIDJcbiIpOworCisgICAgICAgICAgICAgICAgLyogdGVzdCB2 ZXJzaW9uIDEgZmFjaWxpdGllcyAqLworICAgICAgICAgICAgICAgIGlmICggIXRlc3RfaW50ZWxf cG11X3ZlcjEobmdyZWdzKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4dGZfZmFpbHVy ZSgiRmFpbDogRmFpbGVkIFZQTVUgdmVyc2lvbiAxXG4iKTsKKworICAgICAgICAgICAgICAgIC8q IHRlc3QgZnVsbCB3aWR0aCBjb3VudGVycyAqLworICAgICAgICAgICAgICAgIGlmICggIXRlc3Rf ZnVsbF93aWR0aF9jbnRzKG5ncmVncywgbmdiaXRzKSApCisgICAgICAgICAgICAgICAgICAgIHJl dHVybiB4dGZfZmFpbHVyZSgiRmFpbDogRmFpbGVkIGZ1bGwgd2lkdGggdGVzdFxuIik7CisKKyAg ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAg LyogdmVyc2lvbiAxIHVuc3VwcG9ydGVkICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgICAgICBwcmludGsoIlZNUFUgbm90IHN1cHBvcnRlZCFcbiIpOworICAgICAgICAgICAgICAg IGdvdG8gc2tpcDsKKyAgICB9CisKKyAgICByZXR1cm4geHRmX3N1Y2Nlc3MoTlVMTCk7CisKK3Nr aXA6CisgICAgcmV0dXJuIHh0Zl9za2lwKE5VTEwpOworfQorCisvKgorICogTG9jYWwgdmFyaWFi bGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZz ZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6 CisgKi8KLS0gCjIuOS4zCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpo dHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==