From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boqun Feng Subject: [PATCH v2 02/17] xen: x86: add early stage SGX feature detection Date: Mon, 4 Dec 2017 08:15:13 +0800 Message-ID: <20171204001528.1342-3-boqun.feng@intel.com> References: <20171204001528.1342-1-boqun.feng@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171204001528.1342-1-boqun.feng@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Kevin Tian , Stefano Stabellini , Wei Liu , Jun Nakajima , George Dunlap , Andrew Cooper , Ian Jackson , =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= , Tim Deegan , kai.huang@linux.intel.com, Julien Grall , Jan Beulich , David Scott , Boqun Feng List-Id: xen-devel@lists.xenproject.org RnJvbTogS2FpIEh1YW5nIDxrYWkuaHVhbmdAbGludXguaW50ZWwuY29tPgoKVGhpcyBwYXRjaCBh ZGRzIGVhcmx5IHN0YWdlIFNHWCBmZWF0dXJlIGRldGVjdGlvbiB2aWEgU0dYIENQVUlEIDB4MTIu CkZ1bmN0aW9uIGRldGVjdF9zZ3ggaXMgYWRkZWQgdG8gZGV0ZWN0IFNHWCBpbmZvIG9uIGVhY2gg Q1BVIChjYWxsZWQgZnJvbQppZGVudGlmeV9jcHUpLiBTRE0gc2F5cyBTR1ggaW5mbyByZXR1cm5l ZCBieSBDUFVJRCBpcyBwZXItdGhyZWFkLCBhbmQKd2UgY2Fubm90IGFzc3VtZSBhbGwgdGhyZWFk cyB3aWxsIHJldHVybiB0aGUgc2FtZSBTR1ggaW5mbywgc28gd2UgaGF2ZQp0byBkZXRlY3QgU0dY IGZvciBlYWNoIENQVS4gIEZvciBzaW1wbGljaXR5LCBjdXJyZW50bHkgU0dYIGlzIG9ubHkKc3Vw cG9ydGVkIHdoZW4gYWxsIENQVXMgcmVwb3J0cyB0aGUgc2FtZSBTR1ggaW5mby4KCkJlc2lkZXMg YSBib290IHBhcmFtZXRlciAnc2d4JyBpcyBhZGRlZCB0byBhbGxvdyB0aGUgc3lzYWRtaW4gY29u dHJvbAp3aGV0aGVyIFNHWCBpcyBzdXBwb3J0ZWQgdG8gZ3Vlc3RzLgoKU0RNIGFsc28gc2F5cyBp dCdzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgRVBDIHNlY3Rpb25zIGJ1dCB0aGlzIGlzCm9u bHkgZm9yIG11bHRpcGxlLXNvY2tldCBzZXJ2ZXIsIHdoaWNoIHdlIGRvbid0IHN1cHBvcnQgbm93 ICh0aGVyZSBhcmUKb3RoZXIgdGhpbmdzIG5lZWQgdG8gYmUgZG9uZSwgZXgsIE5VTUEgRVBDLCBz Y2hlZHVsaW5nLCBldGMsIGFzIHdlbGwpLApzbyBjdXJyZW50bHkgb25seSBvbmUgRVBDIGlzIHN1 cHBvcnRlZC4KClRoZSBkZXRlY3Rpb24gcmVzdWx0IGlzIGluIHRoZSBYODZfRkVBVFVSRV9TR1gg Yml0IG9mICdib290X2NwdV9kYXRhJywKYW5kICdjcHVfaGFzX3NneCcgc2hvdWxkIGJlIHRoZSBv bmx5IHdheSB0byBxdWVyeSBmb3IgdGhlIFNHWCBzdXBwb3J0CmVuYWJsZWQgb3Igbm90IGluIHRo ZSB3aG9sZSBzeXN0ZW0uCgpEZWRpY2F0ZWQgZmlsZXMgc2d4LmMgYW5kIHNneC5oIGFyZSBhZGRl ZCBmb3IgYnVsayBvZiBhYm92ZSBTR1gKZGV0ZWN0aW9uIGNvZGUgZGV0ZWN0aW9uIGNvZGUsIGFu ZCBmb3IgZnVydGhlciBTR1ggY29kZSBhcyB3ZWxsLgoKU2lnbmVkLW9mZi1ieTogS2FpIEh1YW5n IDxrYWkuaHVhbmdAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBCb3F1biBGZW5nIDxi b3F1bi5mZW5nQGludGVsLmNvbT4KLS0tCiBkb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJr ZG93biB8ICAgOCArKwogeGVuL2FyY2gveDg2L01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDEg KwogeGVuL2FyY2gveDg2L2NwdS9jb21tb24uYyAgICAgICAgICAgfCAgMTUgKysrCiB4ZW4vYXJj aC94ODYvc2d4LmMgICAgICAgICAgICAgICAgICB8IDE5MSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS14ODYvY3B1ZmVhdHVyZS5oICAgIHwgICAx ICsKIHhlbi9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmggICAgIHwgICAxICsKIHhlbi9pbmNs dWRlL2FzbS14ODYvc2d4LmggICAgICAgICAgIHwgIDYxICsrKysrKysrKysrKwogNyBmaWxlcyBj aGFuZ2VkLCAyNzggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL3g4 Ni9zZ3guYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS14ODYvc2d4LmgKCmRp ZmYgLS1naXQgYS9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJrZG93biBiL2RvY3MvbWlz Yy94ZW4tY29tbWFuZC1saW5lLm1hcmtkb3duCmluZGV4IDc4MTExMGQ0YjJhNS4uODFmOTkzNmZh Y2UyIDEwMDY0NAotLS0gYS9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJrZG93bgorKysg Yi9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJrZG93bgpAQCAtMTYwMSw2ICsxNjAxLDE0 IEBAIGh5cGVydmlzb3JzIGhhbmRsZSBTRXJyb3JzOgogICBBbGwgU0Vycm9ycyB3aWxsIGNyYXNo IHRoZSB3aG9sZSBzeXN0ZW0uIFRoaXMgb3B0aW9uIHdpbGwgYXZvaWQgYWxsIG92ZXJoZWFkCiAg IG9mIHRoZSBkc2IvaXNiIHBhaXJzLgogCisjIyMgc2d4IChJbnRlbCkKKz4gPSA8Ym9vbGVhbj4K KworPiBEZWZhdWx0OiBmYWxzZQorCitGbGFnIHRvIGVuYWJsZSBTb2Z0d2FyZSBHdWFyZCBFeHRl bnNpb25zIHN1cHBvcnQKK2ZvciBndWVzdC4KKwogIyMjIHNtYXAKID4gYD0gPGJvb2xlYW4+IHwg aHZtYAogCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvTWFrZWZpbGUgYi94ZW4vYXJjaC94ODYv TWFrZWZpbGUKaW5kZXggZDVkNThhMjA1ZWM4Li5jOGE4NDNmZWY1NDAgMTAwNjQ0Ci0tLSBhL3hl bi9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC94ODYvTWFrZWZpbGUKQEAgLTU0LDYg KzU0LDcgQEAgb2JqLXkgKz0gcGxhdGZvcm1faHlwZXJjYWxsLm8geDg2XzY0L3BsYXRmb3JtX2h5 cGVyY2FsbC5vCiBvYmoteSArPSBwc3Iubwogb2JqLXkgKz0gc2V0dXAubwogb2JqLXkgKz0gc2h1 dGRvd24ubworb2JqLXkgKz0gc2d4Lm8KIG9iai15ICs9IHNtcC5vCiBvYmoteSArPSBzbXBib290 Lm8KIG9iai15ICs9IHNyYXQubwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2NwdS9jb21tb24u YyBiL3hlbi9hcmNoL3g4Ni9jcHUvY29tbW9uLmMKaW5kZXggNmNmMzYyODQ5ZTg1Li4wYTkzZDU3 NTlhNzYgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9jcHUvY29tbW9uLmMKKysrIGIveGVuL2Fy Y2gveDg2L2NwdS9jb21tb24uYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGFzbS9hcGlj Lmg+CiAjaW5jbHVkZSA8bWFjaF9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5j bHVkZSA8YXNtL3NneC5oPgogI2luY2x1ZGUgPHB1YmxpYy9zeXNjdGwuaD4gLyogZm9yIFhFTl9J TlZBTElEX3tTT0NLRVQsQ09SRX1fSUQgKi8KIAogI2luY2x1ZGUgImNwdS5oIgpAQCAtNDMwLDE0 ICs0MzEsMjggQEAgdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKQogCSAq IGV4ZWN1dGVkLCBjID09ICZib290X2NwdV9kYXRhLgogCSAqLwogCWlmICggYyAhPSAmYm9vdF9j cHVfZGF0YSApIHsKKwkJc3RydWN0IHNneF9jcHVpbmZvIHRtcDsKIAkJLyogQU5EIHRoZSBhbHJl YWR5IGFjY3VtdWxhdGVkIGZsYWdzIHdpdGggdGhlc2UgKi8KIAkJZm9yICggaSA9IDAgOyBpIDwg TkNBUElOVFMgOyBpKysgKQogCQkJYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eVtpXSAmPSBj LT54ODZfY2FwYWJpbGl0eVtpXTsKIAogCQltY2hlY2tfaW5pdChjLCBmYWxzZSk7CisJCS8qCisJ CSAqIENoZWNrIFNHWCBDUFVJRCBpbmZvIGFsbCBmb3IgYWxsIENQVXMsIGFuZCBvbmx5IHN1cHBv cnQgU0dYIHdoZW4gYWxsCisJCSAqIENQVXMgcmVwb3J0IHRoZSBzYW1lIFNHWCBpbmZvLiBTRE0g KDM3LjcuMiBJbnRlbCBTR1ggUmVzb3VyY2UKKwkJICogRW51bWVyYXRpb24gTGVhdmVzKSBzYXlz ICJzb2Z0d2FyZSBzaG91bGQgbm90IGFzc3VtZSB0aGF0IGlmIEludGVsCisJCSAqIFNHWCBpbnN0 cnVjdGlvbnMgYXJlIHN1cHBvcnRlZCBvbiBvbmUgaGFyZHdhcmUgdGhyZWFkLCB0aGV5IGFyZSBh bHNvCisJCSAqIHN1cHBvcnRlZCBlbHNld2hlcmUuIi4gIEZvciBzaW1wbGljaXR5LCB3ZSBvbmx5 IHN1cHBvcnQgU0dYIHdoZW4gYWxsCisJCSAqIENQVXMgcmVwb3J0cyBjb25zaXN0ZW50IFNHWCBp bmZvLgorCQkgKi8KKwkJZGV0ZWN0X3NneCgmdG1wKTsKKwkJaWYgKCBtZW1jbXAoJnRtcCwgJmJv b3Rfc2d4X2NwdWRhdGEsIHNpemVvZih0bXApKSApCisJCQlkaXNhYmxlX3NneCgpOwogCX0gZWxz ZSB7CiAJCW1jaGVja19pbml0KGMsIHRydWUpOwogCisJCWRldGVjdF9zZ3goJmJvb3Rfc2d4X2Nw dWRhdGEpOworCiAJCW10cnJfYnBfaW5pdCgpOwogCX0KIH0KZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9zZ3guYyBiL3hlbi9hcmNoL3g4Ni9zZ3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmVhZDkxNzU0M2YzZQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNo L3g4Ni9zZ3guYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIEludGVsIFNvZnR3YXJlIEd1YXJk IEV4dGVuc2lvbnMgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgIEludGVsIENv cnBvcmF0aW9uCisgKgorICogQXV0aG9yOiBLYWkgSHVhbmcgPGthaS5odWFuZ0BsaW51eC5pbnRl bC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgor I2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL21zci1pbmRleC5oPgor I2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vc2d4Lmg+CisKK3N0cnVjdCBzZ3hf Y3B1aW5mbyBfX3JlYWRfbW9zdGx5IGJvb3Rfc2d4X2NwdWRhdGE7CisKK3N0YXRpYyBib29sIF9f cmVhZF9tb3N0bHkgb3B0X3NneF9lbmFibGVkID0gZmFsc2U7Citib29sZWFuX3BhcmFtKCJzZ3gi LCBvcHRfc2d4X2VuYWJsZWQpOworCitzdGF0aWMgdm9pZCBfX2RldGVjdF9zZ3goc3RydWN0IHNn eF9jcHVpbmZvICpzZ3hpbmZvKQoreworICAgIHUzMiBlYXgsIGVieCwgZWN4LCBlZHg7CisgICAg dWludDY0X3QgdmFsOworICAgIHVpbnQ2NF90IHNneF9lbmFibGVkID0gSUEzMl9GRUFUVVJFX0NP TlRST0xfU0dYX0VOQUJMRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBJQTMyX0ZFQVRV UkVfQ09OVFJPTF9MT0NLOworICAgIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKyAg ICBtZW1zZXQoc2d4aW5mbywgMCwgc2l6ZW9mKCpzZ3hpbmZvKSk7CisKKyAgICAvKgorICAgICAq IEluIHJlYWxpdHkgaWYgU0dYIGlzIG5vdCBlbmFibGVkIGluIEJJT1MsIFNHWCBDUFVJRCBzaG91 bGQgcmVwb3J0CisgICAgICogaW52YWxpZCBTR1ggaW5mbywgYnV0IHdlIGRvIHRoZSBjaGVjayBh bnl3YXkgdG8gbWFrZSBzdXJlLgorICAgICAqLworICAgIHJkbXNybChNU1JfSUEzMl9GRUFUVVJF X0NPTlRST0wsIHZhbCk7CisKKyAgICBpZiAoICh2YWwgJiBzZ3hfZW5hYmxlZCkgIT0gc2d4X2Vu YWJsZWQgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJDUFUlZDogU0dYIGRpc2FibGVkIGluIEJJ T1MuXG4iLCBjcHUpOworICAgICAgICBnb3RvIG5vdF9zdXBwb3J0ZWQ7CisgICAgfQorCisgICAg c2d4aW5mby0+bGV3ciA9ICEhKHZhbCAmIElBMzJfRkVBVFVSRV9DT05UUk9MX1NHWF9MRV9XUik7 CisKKyAgICAvKgorICAgICAqIENQVUlELjB4MTIuMHgwOgorICAgICAqCisgICAgICogIEVBWCBb MF06ICAgIHdoZXRoZXIgU0dYMSBpcyBzdXBwb3J0ZWQuCisgICAgICogICAgICBbMV06ICAgIHdo ZXRoZXIgU0dYMiBpcyBzdXBwb3J0ZWQuCisgICAgICogIEVCWCBbMzE6MF06IG1pc2NzZWxlY3QK KyAgICAgKiAgRUNYIFszMTowXTogcmVzZXJ2ZWQKKyAgICAgKiAgRURYIFs3OjBdOiAgTWF4RW5j bGF2ZVNpemVfTm90NjQKKyAgICAgKiAgICAgIFsxNTo4XTogTWF4RW5jbGF2ZVNpemVfNjQKKyAg ICAgKi8KKyAgICBjcHVpZF9jb3VudChTR1hfQ1BVSUQsIDB4MCwgJmVheCwgJmVieCwgJmVjeCwg JmVkeCk7CisgICAgc2d4aW5mby0+Y2FwID0gZWF4ICYgKFNHWF9DQVBfU0dYMSB8IFNHWF9DQVBf U0dYMik7CisgICAgc2d4aW5mby0+bWlzY3NlbGVjdCA9IGVieDsKKyAgICBzZ3hpbmZvLT5tYXhf ZW5jbGF2ZV9zaXplMzIgPSBlZHggJiAweGZmOworICAgIHNneGluZm8tPm1heF9lbmNsYXZlX3Np emU2NCA9IChlZHggJiAweGZmMDApID4+IDg7CisKKyAgICBpZiAoICEoZWF4ICYgU0dYX0NBUF9T R1gxKSApCisgICAgeworICAgICAgICAvKiBXZSBtYXkgcmVhY2ggaGVyZSBpZiBCSU9TIGRvZXNu J3QgZW5hYmxlIFNHWCAqLworICAgICAgICBwcmludGsoIkNQVSVkOiBDUFVJRC4weDEyLjB4MCBy ZXBvcnRzIG5vdCBTR1ggc3VwcG9ydC5cbiIsIGNwdSk7CisgICAgICAgIGdvdG8gbm90X3N1cHBv cnRlZDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENQVUlELjB4MTIuMHgxOgorICAgICAqCisg ICAgICogIEVBWCBbMzE6MF06IGJpdG1hc2sgb2YgMS1zZXR0aW5nIG9mIFNFQ1MuQVRUUklCVVRF U1szMTowXQorICAgICAqICBFQlggWzMxOjBdOiBiaXRtYXNrIG9mIDEtc2V0dGluZyBvZiBTRUNT LkFUVFJJQlVURVNbNjM6MzJdCisgICAgICogIEVDWCBbMzE6MF06IGJpdG1hc2sgb2YgMS1zZXR0 aW5nIG9mIFNFQ1MuQVRUUklCVVRFU1s5NTo2NF0KKyAgICAgKiAgRURYIFszMTowXTogYml0bWFz ayBvZiAxLXNldHRpbmcgb2YgU0VDUy5BVFRSSUJVVEVTWzEyNzo5Nl0KKyAgICAgKi8KKyAgICBj cHVpZF9jb3VudChTR1hfQ1BVSUQsIDB4MSwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisgICAg c2d4aW5mby0+c2Vjc19hdHRyX2JpdG1hc2tbMF0gPSBlYXg7CisgICAgc2d4aW5mby0+c2Vjc19h dHRyX2JpdG1hc2tbMV0gPSBlYng7CisgICAgc2d4aW5mby0+c2Vjc19hdHRyX2JpdG1hc2tbMl0g PSBlY3g7CisgICAgc2d4aW5mby0+c2Vjc19hdHRyX2JpdG1hc2tbM10gPSBlZHg7CisKKyAgICAv KgorICAgICAqIENQVUlELjB4MTIuMHgyOgorICAgICAqCisgICAgICogIEVBWCBbMzowXTogICAg ICAwMDAwOiB0aGlzIHN1Yi1sZWFmIGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAg IDAwMDE6IHRoaXMgc3ViLWxlYWYgZW51bWVyYXRlcyBFUEMgcmVzb3VyY2UKKyAgICAgKiAgICAg IFsxMTo0XTogICAgIHJlc2VydmVkCisgICAgICogICAgICBbMzE6MTJdOiAgICBiaXRzIDMxOjEy IG9mIHBoeXNpY2FsIGFkZHJlc3Mgb2YgRVBDIGJhc2UgKHdoZW4KKyAgICAgKiAgICAgICAgICAg ICAgICAgIEVBWFszOjBdIGlzIDAwMDEsIHdoaWNoIGFwcGxpZXMgdG8gZm9sbG93aW5nKQorICAg ICAqICBFQlggWzE5OjBdOiAgICAgYml0cyA1MTozMiBvZiBwaHlzaWNhbCBhZGRyZXNzIG9mIEVQ QyBiYXNlCisgICAgICogICAgICBbMzE6MjBdOiAgICByZXNlcnZlZAorICAgICAqICBFQ1ggWzM6 MF06ICAgICAgMDAwMDogRURYOkVDWCBhcmUgMAorICAgICAqICAgICAgICAgICAgICAgICAgMDAw MTogdGhpcyBpcyBFUEMgc2VjdGlvbi4KKyAgICAgKiAgICAgIFsxMTo0XTogICAgIHJlc2VydmVk CisgICAgICogICAgICBbMzE6MTJdOiAgICBiaXRzIDMxOjEyIG9mIEVQQyBzaXplCisgICAgICog IEVEWCBbMTk6MF06ICAgICBiaXRzIDUxOjMyIG9mIEVQQyBzaXplCisgICAgICogICAgICBbMzE6 MjBdOiAgICByZXNlcnZlZAorICAgICAqCisgICAgICogIFRPRE86IFNvIGZhciBhc3N1bWUgdGhl cmUncyBvbmx5IG9uZSBFUEMgcmVzb3VyY2UuCisgICAgICovCisgICAgY3B1aWRfY291bnQoU0dY X0NQVUlELCAweDIsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworICAgIGlmICggIShlYXggJiAw eDEpIHx8ICEoZWN4ICYgMHgxKSApCisgICAgeworICAgICAgICAvKiBXZSBtYXkgcmVhY2ggaGVy ZSBpZiBCSU9TIGRvZXNuJ3QgZW5hYmxlIFNHWCAqLworICAgICAgICBwcmludGsoIkNQVSVkOiBD UFVJRC4weDEyLjB4MiByZXBvcnRzIGludmFsaWQgRVBDIHJlc291cmNlLlxuIiwgY3B1KTsKKyAg ICAgICAgZ290byBub3Rfc3VwcG9ydGVkOworICAgIH0KKyAgICBzZ3hpbmZvLT5lcGNfYmFzZSA9 ICgoKHU2NCkoZWJ4ICYgMHhmZmZmZikpIDw8IDMyKSB8IChlYXggJiAweGZmZmZmMDAwKTsKKyAg ICBzZ3hpbmZvLT5lcGNfc2l6ZSA9ICgoKHU2NCkoZWR4ICYgMHhmZmZmZikpIDw8IDMyKSB8IChl Y3ggJiAweGZmZmZmMDAwKTsKKworICAgIHJldHVybjsKKworbm90X3N1cHBvcnRlZDoKKyAgICBt ZW1zZXQoc2d4aW5mbywgMCwgc2l6ZW9mKCpzZ3hpbmZvKSk7CisgICAgZGlzYWJsZV9zZ3goKTsK K30KKwordm9pZCBkZXRlY3Rfc2d4KHN0cnVjdCBzZ3hfY3B1aW5mbyAqc2d4aW5mbykKK3sKKyAg ICBpZiAoICFvcHRfc2d4X2VuYWJsZWQgKQorICAgIHsKKyAgICAgICAgc2V0dXBfY2xlYXJfY3B1 X2NhcChYODZfRkVBVFVSRV9TR1gpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2Ug aWYgKCBzZ3hpbmZvICE9ICZib290X3NneF9jcHVkYXRhICYmCisgICAgICAgICAgICAgICggIWNw dV9oYXNfc2d4IHx8IGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgPCBTR1hfQ1BVSUQgKSkKKyAg ICB7CisgICAgICAgIHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0dYKTsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKworICAgIF9fZGV0ZWN0X3NneChzZ3hpbmZvKTsKK30KKwordm9p ZCBkaXNhYmxlX3NneCh2b2lkKQoreworICAgIC8qCisgICAgICogWDg2X0ZFQVRVUkVfU0dYIGlz IGNsZWFyZWQgaW4gYm9vdF9jcHVfZGF0YSBzbyB0aGF0IGNwdV9oYXNfc2d4CisgICAgICogY2Fu IGJlIHVzZWQgYW55d2hlcmUgdG8gY2hlY2sgd2hldGhlciBTR1ggaXMgc3VwcG9ydGVkIGJ5IFhl bi4KKyAgICAgKgorICAgICAqIEZJWE1FOiBhbHNvIGFkanVzdCBib290X2NwdV9kYXRhLmNwdWlk X2xldmVsID8KKyAgICAgKi8KKyAgICBzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NH WCk7CisgICAgb3B0X3NneF9lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5p dCBwcmludF9zZ3hfY3B1aW5mbyhzdHJ1Y3Qgc2d4X2NwdWluZm8gKnNneGluZm8pCit7CisgICAg cHJpbnRrKCJTR1g6IFxuIgorICAgICAgICAgICAiXHRDQVA6ICVzLCVzXG4iCisgICAgICAgICAg ICJcdEVQQzogWzB4JSJQUkl4NjQiLCAweCUiUFJJeDY0IilcbiIsCisgICAgICAgICAgIGJvb3Rf c2d4X2NwdWRhdGEuY2FwICYgU0dYX0NBUF9TR1gxID8gIlNHWDEiIDogIiIsCisgICAgICAgICAg IGJvb3Rfc2d4X2NwdWRhdGEuY2FwICYgU0dYX0NBUF9TR1gyID8gIlNHWDIiIDogIiIsCisgICAg ICAgICAgIGJvb3Rfc2d4X2NwdWRhdGEuZXBjX2Jhc2UsCisgICAgICAgICAgIGJvb3Rfc2d4X2Nw dWRhdGEuZXBjX2Jhc2UgKyBib290X3NneF9jcHVkYXRhLmVwY19zaXplKTsKK30KKworc3RhdGlj IGludCBfX2luaXQgc2d4X2luaXQodm9pZCkKK3sKKyAgICBpZiAoICFjcHVfaGFzX3NneCApCisg ICAgICAgIGdvdG8gbm90X3N1cHBvcnRlZDsKKworICAgIHByaW50X3NneF9jcHVpbmZvKCZib290 X3NneF9jcHVkYXRhKTsKKworICAgIHJldHVybiAwOworbm90X3N1cHBvcnRlZDoKKyAgICBkaXNh YmxlX3NneCgpOworICAgIHJldHVybiAtRUlOVkFMOworfQorX19pbml0Y2FsbChzZ3hfaW5pdCk7 CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6 ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQt dGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNt LXg4Ni9jcHVmZWF0dXJlLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2NwdWZlYXR1cmUuaAppbmRl eCA4NGNjNTFkMmJkYzguLjk3OTNmOGMxYzU4NiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNt LXg4Ni9jcHVmZWF0dXJlLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgK QEAgLTg1LDYgKzg1LDcgQEAKIAogLyogQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwNzowLmVieCAqLwog I2RlZmluZSBjcHVfaGFzX2ZzZ3NiYXNlICAgICAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVf RlNHU0JBU0UpCisjZGVmaW5lIGNwdV9oYXNfc2d4ICAgICAgICAgICAgIGJvb3RfY3B1X2hhcyhY ODZfRkVBVFVSRV9TR1gpCiAjZGVmaW5lIGNwdV9oYXNfYm1pMSAgICAgICAgICAgIGJvb3RfY3B1 X2hhcyhYODZfRkVBVFVSRV9CTUkxKQogI2RlZmluZSBjcHVfaGFzX2hsZSAgICAgICAgICAgICBi b290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSExFKQogI2RlZmluZSBjcHVfaGFzX2F2eDIgICAgICAg ICAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYMikKZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS14ODYvbXNyLWluZGV4LmggYi94ZW4vaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5o CmluZGV4IGI5OWM2MjMzNjdiOC4uNjNlMTE5MzFjZDA5IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVk ZS9hc20teDg2L21zci1pbmRleC5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4 LmgKQEAgLTI5OCw2ICsyOTgsNyBAQAogI2RlZmluZSBJQTMyX0ZFQVRVUkVfQ09OVFJPTF9FTkFC TEVfU0VOVEVSICAgICAgICAgICAgMHg4MDAwCiAjZGVmaW5lIElBMzJfRkVBVFVSRV9DT05UUk9M X1NHWF9FTkFCTEUgICAgICAgICAgICAgICAweDQwMDAwCiAjZGVmaW5lIElBMzJfRkVBVFVSRV9D T05UUk9MX0xNQ0VfT04gICAgICAgICAgICAgICAgICAweDEwMDAwMAorI2RlZmluZSBJQTMyX0ZF QVRVUkVfQ09OVFJPTF9TR1hfTEVfV1IgICAgICAgICAgICAgICAgMHgyMDAwMAogCiAjZGVmaW5l IE1TUl9JQTMyX1RTQ19BREpVU1QJCTB4MDAwMDAwM2IKIApkaWZmIC0tZ2l0IGEveGVuL2luY2x1 ZGUvYXNtLXg4Ni9zZ3guaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvc2d4LmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMzdlYmRlNjRlODQKLS0tIC9kZXYvbnVsbAor KysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3NneC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBJ bnRlbCBTb2Z0d2FyZSBHdWFyZCBFeHRlbnNpb25zIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAxNywgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogQXV0aG9yOiBLYWkgSHVh bmcgPGthaS5odWFuZ0BsaW51eC5pbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHYy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNp Zm5kZWYgX19BU01fWDg2X1NHWF9IX18KKyNkZWZpbmUgX19BU01fWDg2X1NHWF9IX18KKworI2lu Y2x1ZGUgPHhlbi9jb25maWcuaD4KKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KKyNpbmNsdWRlIDx4 ZW4vaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBTR1hfQ1BV SUQgMHgxMgorCisvKgorICogU0dYIGluZm8gcmVwb3J0ZWQgYnkgU0dYIENQVUlELgorICoKKyAq IFRPRE86CisgKgorICogU0RNICgzNy43LjIgSW50ZWwgU0dYIFJlc291cmNlIEVudW1lcmF0aW9u IExlYXZlcykgYWN0dWFsbHkgc2F5cyBpdCdzCisgKiBwb3NzaWJsZSB0aGVyZSBhcmUgbXVsdGlw bGUgRVBDIHJlc291cmNlcyBvbiB0aGUgbWFjaGluZSAoQ1BVSUQuMHgxMiwKKyAqIEVDWCBzdGFy dGluZyB3aXRoIDB4MiBlbnVtZXJhdGVzIGF2YWlsYWJsZSBFUEMgcmVzb3VyY2VzIHVudGlsIGlu dmFsaWQKKyAqIEVQQyByZXNvdXJjZSBpcyByZXR1cm5lZCkuIEJ1dCB0aGlzIGlzIG9ubHkgZm9y IG11bHRpcGxlIHNvY2tldCBzZXJ2ZXIsCisgKiB3aGljaCB3ZSBjdXJyZW50IGRvbid0IHN1cHBv cnQgbm93ICh0aGVyZSBhcmUgYWRkaXRpb25hbCB0aGluZ3MgbmVlZCB0bworICogYmUgZG9uZSBh cyB3ZWxsKS4gU28gZmFyIGZvciBzaW1wbGljaXR5IHdlIGFzc3VtZSB0aGVyZSBpcyBvbmx5IG9u ZSBFUEMuCisgKi8KK3N0cnVjdCBzZ3hfY3B1aW5mbyB7CisjZGVmaW5lIFNHWF9DQVBfU0dYMSAg ICAoMVVMIDw8IDApCisjZGVmaW5lIFNHWF9DQVBfU0dYMiAgICAoMVVMIDw8IDEpCisgICAgdWlu dDMyX3QgY2FwOworICAgIHVpbnQzMl90IG1pc2NzZWxlY3Q7CisgICAgdWludDhfdCBtYXhfZW5j bGF2ZV9zaXplNjQ7CisgICAgdWludDhfdCBtYXhfZW5jbGF2ZV9zaXplMzI7CisgICAgdWludDMy X3Qgc2Vjc19hdHRyX2JpdG1hc2tbNF07CisgICAgdWludDY0X3QgZXBjX2Jhc2U7CisgICAgdWlu dDY0X3QgZXBjX3NpemU7CisgICAgYm9vbCBsZXdyOworfTsKKworZXh0ZXJuIHN0cnVjdCBzZ3hf Y3B1aW5mbyBfX3JlYWRfbW9zdGx5IGJvb3Rfc2d4X2NwdWRhdGE7CisvKiBEZXRlY3QgU0dYIGlu Zm8gZm9yIHBhcnRpY3VsYXIgQ1BVIHZpYSBTR1ggQ1BVSUQgKi8KK3ZvaWQgZGV0ZWN0X3NneChz dHJ1Y3Qgc2d4X2NwdWluZm8gKnNneGluZm8pOwordm9pZCBkaXNhYmxlX3NneCh2b2lkKTsKKyNk ZWZpbmUgc2d4X2xld3IoKSAoYm9vdF9zZ3hfY3B1ZGF0YS5sZXdyKQorCisjZW5kaWYgIC8qIF9f QVNNX1g4Nl9TR1hfSF9fICovCi0tIAoyLjE1LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v bGlzdGluZm8veGVuLWRldmVs