From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v2 18/30] xen/x86: setup PVHv2 Dom0 ACPI tables Date: Tue, 27 Sep 2016 17:57:13 +0200 Message-ID: <1474991845-27962-19-git-send-email-roger.pau@citrix.com> References: <1474991845-27962-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1boum3-0007lF-2l for xen-devel@lists.xenproject.org; Tue, 27 Sep 2016 15:58:27 +0000 In-Reply-To: <1474991845-27962-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Andrew Cooper , boris.ostrovsky@oracle.com, Roger Pau Monne , Jan Beulich List-Id: xen-devel@lists.xenproject.org VGhpcyBtYXBzIGFsbCB0aGUgcmVnaW9ucyBpbiB0aGUgZTgyMCBtYXJrZWQgYXMgRTgyMF9BQ1BJ IG9yIEU4MjBfTlZTIGFuZAp0aGUgdG9wLWxldmVsIEFDUEkgdGFibGVzIGRpc2NvdmVyZWQgYnkg WGVuIHRvIERvbTAgMToxLiBJdCBhbHNvIHNoYWRvd3MgdGhlCnBhZ2Uocykgd2hlcmUgdGhlIG5h dGl2ZSBNQURUIGlzIHBsYWNlZCBieSBtYXBwaW5nIGEgUkFNIHBhZ2Ugb3ZlciBpdCwKY29weWlu ZyB0aGUgb3JpZ2luYWwgZGF0YSBhbmQgbW9kaWZ5aW5nIGl0IGFmdGVyd2FyZHMgaW4gb3JkZXIg dG8gcmVwcmVzZW50CnRoZSByZWFsIENQVSB0b3BvbG9neSBleHBvc2VkIHRvIERvbTAuCgpTaWdu ZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNvbT4KLS0tCkNj OiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+CkNjOiBBbmRyZXcgQ29vcGVyIDxhbmRy ZXcuY29vcGVyM0BjaXRyaXguY29tPgotLS0KRldJVywgSSB0aGluayB0aGF0IHRoZSBjdXJyZW50 IGFwcHJvYWNoIHRoYXQgSSd2ZSB1c2VkIGluIG9yZGVyIHRvIGNyYWZ0IHRoZQpNQURUIGlzIG5v dCB0aGUgYmVzdCBvbmUsIElNSE8gaXQgd291bGQgYmUgYmV0dGVyIHRvIHBsYWNlIHRoZSBNQURU IGF0IHRoZQplbmQgb2YgdGhlIEU4MjBfQUNQSSByZWdpb24gKGV4cGFuZGluZyBpdCdzIHNpemUg b25lIHBhZ2UpLCBhbmQgbW9kaWZ5IHRoZQpYU0RUL1JTRFQgaW4gb3JkZXIgdG8gcG9pbnQgdG8g aXQsIHRoYXQgd2F5IHdlIGF2b2lkIHNoYWRvd2luZyBhbnkgb3RoZXIKQUNQSSBkYXRhIHRoYXQg bWlnaHQgYmUgYXQgdGhlIHNhbWUgcGFnZSBhcyB0aGUgbmF0aXZlIE1BRFQgKGFuZCB0aGF0IG5l ZWRzCnRvIGJlIG1vZGlmaWVkIGJ5IERvbTApLgotLS0KIHhlbi9hcmNoL3g4Ni9kb21haW5fYnVp bGQuYyB8IDI3NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MSBmaWxlIGNoYW5nZWQsIDI3NCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L2RvbWFpbl9idWlsZC5jIGIveGVuL2FyY2gveDg2L2RvbWFpbl9idWlsZC5jCmluZGV4IDhl YTU0YWUuLjQwN2Y3NDIgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9kb21haW5fYnVpbGQuYwor KysgYi94ZW4vYXJjaC94ODYvZG9tYWluX2J1aWxkLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNs dWRlIDx4ZW4vbGliZWxmLmg+CiAjaW5jbHVkZSA8eGVuL3Bmbi5oPgogI2luY2x1ZGUgPHhlbi9n dWVzdF9hY2Nlc3MuaD4KKyNpbmNsdWRlIDx4ZW4vYWNwaS5oPgogI2luY2x1ZGUgPGFzbS9yZWdz Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMzgs NiArMzksOCBAQAogI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2hwZXQu aD4KIAorI2luY2x1ZGUgPGFjcGkvYWN0YWJsZXMuaD4KKwogI2luY2x1ZGUgPHB1YmxpYy92ZXJz aW9uLmg+CiAjaW5jbHVkZSA8cHVibGljL2FyY2gteDg2L2h2bS9zdGFydF9pbmZvLmg+CiAjaW5j bHVkZSA8cHVibGljL2h2bS9odm1fdmNwdS5oPgpAQCAtNTAsNiArNTMsOCBAQCBzdGF0aWMgbG9u ZyBfX2luaXRkYXRhIGRvbTBfbWF4X25ycGFnZXMgPSBMT05HX01BWDsKICNkZWZpbmUgSFZNX1ZN ODZfVFNTX1NJWkUgICAxMjgKIAogc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRhIGh2bV9t ZW1fc3RhdHNbTUFYX09SREVSICsgMV07CitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEg YWNwaV9pbnRyX292ZXJycmlkZXMgPSAwOworc3RhdGljIHN0cnVjdCBhY3BpX21hZHRfaW50ZXJy dXB0X292ZXJyaWRlIF9faW5pdGRhdGEgKmludHNyY292ciA9IE5VTEw7CiAKIC8qCiAgKiBkb20w X21lbT1bbWluOjxtaW5fYW10PixdW21heDo8bWF4X2FtdD4sXVs8YW10Pl0KQEAgLTE5OTksNiAr MjAwNCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGh2bV9sb2FkX2tlcm5lbChzdHJ1Y3QgZG9tYWlu ICpkLCBjb25zdCBtb2R1bGVfdCAqaW1hZ2UsCiAgICAgbGFzdF9hZGRyICs9IHNpemVvZihtb2Qp OwogICAgIHN0YXJ0X2luZm8ubWFnaWMgPSBYRU5fSFZNX1NUQVJUX01BR0lDX1ZBTFVFOwogICAg IHN0YXJ0X2luZm8uZmxhZ3MgPSBTSUZfUFJJVklMRUdFRCB8IFNJRl9JTklURE9NQUlOOworICAg IHN0YXJ0X2luZm8ucnNkcF9wYWRkciA9IGFjcGlfb3NfZ2V0X3Jvb3RfcG9pbnRlcigpOwogICAg IHJjID0gaHZtX2NvcHlfdG9fZ3Vlc3RfcGh5cyhsYXN0X2FkZHIsICZzdGFydF9pbmZvLCBzaXpl b2Yoc3RhcnRfaW5mbykpOwogICAgIGlmICggcmMgIT0gSFZNQ09QWV9va2F5ICkKICAgICB7CkBA IC0yMTExLDYgKzIxMTcsMjY3IEBAIHN0YXRpYyBpbnQgX19pbml0IGh2bV9zZXR1cF9jcHVzKHN0 cnVjdCBkb21haW4gKmQsIHBhZGRyX3QgZW50cnksCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRp YyBpbnQgX19pbml0IGFjcGlfY291bnRfaW50cl9vdihzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFk ZXIgKmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBsb25nIGVuZCkKK3sKKworICAgIGFjcGlfaW50cl9vdmVycnJpZGVzKys7CisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfc2V0X2ludHJfb3Yoc3RydWN0 IGFjcGlfc3VidGFibGVfaGVhZGVyICpoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kKQoreworICAgIHN0cnVjdCBhY3BpX21h ZHRfaW50ZXJydXB0X292ZXJyaWRlICppbnRyID0KKyAgICAgICAgY29udGFpbmVyX29mKGhlYWRl ciwgc3RydWN0IGFjcGlfbWFkdF9pbnRlcnJ1cHRfb3ZlcnJpZGUsIGhlYWRlcik7CisKKyAgICBB Q1BJX01FTUNQWShpbnRzcmNvdnIsIGludHIsIHNpemVvZigqaW50cikpOworICAgIGludHNyY292 cisrOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3BpX3phcF90 YWJsZV9zaWduYXR1cmUoY2hhciAqbmFtZSkKK3sKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFk ZXIgKnRhYmxlOworICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKKyAgICB1bmlvbiB7CisgICAgICAg IGNoYXIgc3RyW0FDUElfTkFNRV9TSVpFXTsKKyAgICAgICAgdWludDMyX3QgYml0czsKKyAgICB9 IHNpZ25hdHVyZTsKKyAgICBjaGFyIHRtcDsKKyAgICBpbnQgaTsKKworICAgIHN0YXR1cyA9IGFj cGlfZ2V0X3RhYmxlKG5hbWUsIDAsICZ0YWJsZSk7CisgICAgaWYgKCBBQ1BJX1NVQ0NFU1Moc3Rh dHVzKSApCisgICAgeworICAgICAgICBtZW1jcHkoJnNpZ25hdHVyZS5zdHJbMF0sICZ0YWJsZS0+ c2lnbmF0dXJlWzBdLCBBQ1BJX05BTUVfU0laRSk7CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwg QUNQSV9OQU1FX1NJWkUgLyAyOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICB0bXAgPSBz aWduYXR1cmUuc3RyW0FDUElfTkFNRV9TSVpFIC0gaSAtIDFdOworICAgICAgICAgICAgc2lnbmF0 dXJlLnN0cltBQ1BJX05BTUVfU0laRSAtIGkgLSAxXSA9IHNpZ25hdHVyZS5zdHJbaV07CisgICAg ICAgICAgICBzaWduYXR1cmUuc3RyW2ldID0gdG1wOworICAgICAgICB9CisgICAgICAgIHdyaXRl X2F0b21pYygodWludDMyX3QqKSZ0YWJsZS0+c2lnbmF0dXJlWzBdLCBzaWduYXR1cmUuYml0cyk7 CisgICAgfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBodm1fc2V0dXBfYWNwaShzdHJ1Y3QgZG9t YWluICpkKQoreworICAgIHN0cnVjdCB2Y3B1ICpzYXZlZF9jdXJyZW50LCAqdiA9IGQtPnZjcHVb MF07CisgICAgdW5zaWduZWQgbG9uZyBwZm4sIG5yX3BhZ2VzOworICAgIHVpbnQ2NF90IHNpemUs IHN0YXJ0X2FkZHIsIGVuZF9hZGRyOworICAgIHVpbnQ2NF90IG1hZHRfYWRkclsyXSA9IHsgMCwg MCB9OworICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGU7CisgICAgc3RydWN0IGFj cGlfdGFibGVfbWFkdCAqbWFkdDsKKyAgICBzdHJ1Y3QgYWNwaV9tYWR0X2lvX2FwaWMgKmlvX2Fw aWM7CisgICAgc3RydWN0IGFjcGlfbWFkdF9sb2NhbF9hcGljICpsb2NhbF9hcGljOworICAgIGFj cGlfc3RhdHVzIHN0YXR1czsKKyAgICBpbnQgcmMsIGk7CisKKyAgICBwcmludGsoIioqIFNldHVw IEFDUEkgdGFibGVzICoqXG4iKTsKKworICAgIC8qIFpBUCB0aGUgSFBFVCwgU0xJVCwgU1JBVCwg TVBTVCBhbmQgUE1UVCB0YWJsZXMuICovCisgICAgYWNwaV96YXBfdGFibGVfc2lnbmF0dXJlKEFD UElfU0lHX0hQRVQpOworICAgIGFjcGlfemFwX3RhYmxlX3NpZ25hdHVyZShBQ1BJX1NJR19TTElU KTsKKyAgICBhY3BpX3phcF90YWJsZV9zaWduYXR1cmUoQUNQSV9TSUdfU1JBVCk7CisgICAgYWNw aV96YXBfdGFibGVfc2lnbmF0dXJlKEFDUElfU0lHX01QU1QpOworICAgIGFjcGlfemFwX3RhYmxl X3NpZ25hdHVyZShBQ1BJX1NJR19QTVRUKTsKKworICAgIC8qIE1hcCBBQ1BJIHRhYmxlcyAxOjEg Ki8KKyAgICBmb3IgKCBpID0gMDsgaSA8IGQtPmFyY2gubnJfZTgyMDsgaSsrICkKKyAgICB7Cisg ICAgICAgIGlmICggZC0+YXJjaC5lODIwW2ldLnR5cGUgIT0gRTgyMF9BQ1BJICYmCisgICAgICAg ICAgICAgZC0+YXJjaC5lODIwW2ldLnR5cGUgIT0gRTgyMF9OVlMgKQorICAgICAgICAgICAgY29u dGludWU7CisKKyAgICAgICAgcGZuID0gUEZOX0RPV04oZC0+YXJjaC5lODIwW2ldLmFkZHIpOwor ICAgICAgICBucl9wYWdlcyA9IERJVl9ST1VORF9VUChkLT5hcmNoLmU4MjBbaV0uc2l6ZSwgUEFH RV9TSVpFKTsKKworICAgICAgICByYyA9IG1vZGlmeV9tbWlvXzExKGQsIHBmbiwgbnJfcGFnZXMs IHRydWUpOworICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRr KAorICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gbWFwIEFDUEkgcmVnaW9uICUjbHggLSAlI2x4 IGludG8gRG9tMCBtZW1vcnkgbWFwXG4iLAorICAgICAgICAgICAgICAgICAgIHBmbiwgcGZuICsg bnJfcGFnZXMpOworICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisgICAgfQorICAg IC8qCisgICAgICogU2luY2UgbW9zdCBtZW1vcnkgbWFwcyBwcm92aWRlZCBieSBoYXJkd2FyZSBh cmUgd3JvbmcsIG1ha2Ugc3VyZSBlYWNoCisgICAgICogdG9wLWxldmVsIHRhYmxlIGlzIHByb3Bl cmx5IG1hcHBlZCBpbnRvIERvbTAuCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IGFjcGlf Z2JsX3Jvb3RfdGFibGVfbGlzdC5jb3VudDsgaSsrICkKKyAgICB7CisgICAgICAgIHBmbiA9IFBG Tl9ET1dOKGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0uYWRkcmVzcyk7CisgICAg ICAgIG5yX3BhZ2VzID0gRElWX1JPVU5EX1VQKGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJs ZXNbaV0ubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUp OworICAgICAgICByYyA9IG1vZGlmeV9tbWlvXzExKGQsIHBmbiwgbnJfcGFnZXMsIHRydWUpOwor ICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRrKAorICAgICAg ICAgICAgICAgICJGYWlsZWQgdG8gbWFwIEFDUEkgcmVnaW9uICUjbHggLSAlI2x4IGludG8gRG9t MCBtZW1vcnkgbWFwXG4iLAorICAgICAgICAgICAgICAgICAgIHBmbiwgcGZuICsgbnJfcGFnZXMp OworICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAg ICAgKiBTcGVjaWFsIHRyZWF0bWVudCBmb3IgbWVtb3J5IDwgMU1COgorICAgICAqICAtIENvcHkg dGhlIGRhdGEgaW4gZTgyMCByZWdpb25zIG1hcmtlZCBhcyBSQU0gKEJEQSwgRUJEQS4uLikuCisg ICAgICogIC0gTWFwIGFueSByZXNlcnZlZCByZWdpb25zIGFzIDE6MS4KKyAgICAgKiBOQjogYWxs IHRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiBib290ZWQgZnJvbSBsZWdhY3kgQklPU2VzLgorICAg ICAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgZC0+YXJjaC5ucl9lODIwOyBpKysgKQorICAgIHsK KyAgICAgICAgdW5zaWduZWQgbG9uZyBlbmQgPSBkLT5hcmNoLmU4MjBbaV0uYWRkciArIGQtPmFy Y2guZTgyMFtpXS5zaXplOworICAgICAgICBlbmQgPSBlbmQgPiBNQigxKSA/IE1CKDEpIDogZW5k OworCisgICAgICAgIGlmICggZC0+YXJjaC5lODIwW2ldLnR5cGUgPT0gRTgyMF9SQU0gKQorICAg ICAgICB7CisgICAgICAgICAgICBzYXZlZF9jdXJyZW50ID0gY3VycmVudDsKKyAgICAgICAgICAg IHNldF9jdXJyZW50KHYpOworICAgICAgICAgICAgcmMgPSBodm1fY29weV90b19ndWVzdF9waHlz KGQtPmFyY2guZTgyMFtpXS5hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1hZGRyX3RvX3ZpcnQoZC0+YXJjaC5lODIwW2ldLmFkZHIpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAtIGQtPmFyY2guZTgyMFtpXS5hZGRyKTsK KyAgICAgICAgICAgIHNldF9jdXJyZW50KHNhdmVkX2N1cnJlbnQpOworICAgICAgICAgICAgaWYg KCByYyAhPSBIVk1DT1BZX29rYXkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBy aW50aygiVW5hYmxlIHRvIGNvcHkgUkFNIHJlZ2lvbiAlI2x4IC0gJSNseFxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgZC0+YXJjaC5lODIwW2ldLmFkZHIsIGVuZCk7CisgICAgICAgICAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz ZSBpZiAoIGQtPmFyY2guZTgyMFtpXS50eXBlID09IEU4MjBfUkVTRVJWRUQgKQorICAgICAgICB7 CisgICAgICAgICAgICBwZm4gPSBQRk5fRE9XTihkLT5hcmNoLmU4MjBbaV0uYWRkcik7CisgICAg ICAgICAgICBucl9wYWdlcyA9IERJVl9ST1VORF9VUChlbmQgLSBkLT5hcmNoLmU4MjBbaV0uYWRk ciwgUEFHRV9TSVpFKTsKKyAgICAgICAgICAgIHJjID0gbW9kaWZ5X21taW9fMTEoZCwgcGZuLCBu cl9wYWdlcywgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBwcmludGsoIlVuYWJsZSB0byBtYXAgcmVzZXJ2ZWQgcmVnaW9uIGF0ICUj bHggLSAlI2x4OiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5lODIwW2ld LmFkZHIsIGVuZCwgcmMpOworICAgICAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIGVuZCA9PSBNQigxKSApCisgICAgICAgICAgICBi cmVhazsKKyAgICAgfQorCisgICAgYWNwaV9nZXRfdGFibGVfcGh5cyhBQ1BJX1NJR19NQURULCAw LCAmbWFkdF9hZGRyWzBdLCAmc2l6ZSk7CisgICAgaWYgKCAhbWFkdF9hZGRyWzBdICkKKyAgICB7 CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGZpbmQgQUNQSSBNQURUIHRhYmxlXG4iKTsKKyAg ICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorICAgIGlmICggc2l6ZSA+IFBBR0VfU0laRSAp CisgICAgeworICAgICAgICBwcmludGsoIk1BRFQgdGFibGUgaXMgYmlnZ2VyIHRoYW4gUEFHRV9T SVpFLCBhYm9ydGluZ1xuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAg IGFjcGlfZ2V0X3RhYmxlX3BoeXMoQUNQSV9TSUdfTUFEVCwgMiwgJm1hZHRfYWRkclsxXSwgJnNp emUpOworICAgIGlmICggbWFkdF9hZGRyWzFdICE9IDAgJiYgbWFkdF9hZGRyWzFdICE9IG1hZHRf YWRkclswXSApCisgICAgeworICAgICAgICBwcmludGsoIk11bHRpcGxlIE1BRFQgdGFibGVzIGZv dW5kLCBhYm9ydGluZ1xuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAg IC8qCisgICAgICogUG9wdWxhdGUgdGhlIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSB3ZXJlIE1BRFQg cmVzaWRlcyB3aXRoIGVtcHR5IFJBTQorICAgICAqIHBhZ2VzLiBUaGlzIHdpbGwgcmVtb3ZlIHRo ZSAxOjEgbWFwcGluZyBpbiB0aGlzIGFyZWEsIHNvIHRoYXQgWGVuCisgICAgICogY2FuIG1vZGlm eSBpdCB3aXRob3V0IGFueSBzaWRlLWVmZmVjdHMuCisgICAgICovCisgICAgc3RhcnRfYWRkciA9 IG1hZHRfYWRkclswXSAmIFBBR0VfTUFTSzsKKyAgICBlbmRfYWRkciA9IFBBR0VfQUxJR04obWFk dF9hZGRyWzBdICsgc2l6ZSk7CisgICAgaHZtX3BvcHVsYXRlX21lbW9yeV9yYW5nZShkLCBzdGFy dF9hZGRyLCBlbmRfYWRkciAtIHN0YXJ0X2FkZHIpOworCisgICAgLyogR2V0IHRoZSBhZGRyZXNz IHdoZXJlIHRoZSBNQURUIGlzIGN1cnJlbnRseSBtYXBwZWQuICovCisgICAgc3RhdHVzID0gYWNw aV9nZXRfdGFibGUoQUNQSV9TSUdfTUFEVCwgMCwgJnRhYmxlKTsKKyAgICBpZiAoICFBQ1BJX1NV Q0NFU1Moc3RhdHVzKSApCisgICAgeworICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQgTUFE VCBBQ1BJIHRhYmxlLCBhYm9ydGluZy5cbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAg ICB9CisKKyAgICAvKgorICAgICAqIENvcHkgdGhlIG9yaWdpbmFsIE1BRFQgdGFibGUgKGFuZCB3 aGF0ZXZlciBpcyBhcm91bmQgaXQpIHRvIHRoZQorICAgICAqIGd1ZXN0IHBoeXNtYXAuCisgICAg ICovCisgICAgc2F2ZWRfY3VycmVudCA9IGN1cnJlbnQ7CisgICAgc2V0X2N1cnJlbnQodik7Cisg ICAgcmMgPSBodm1fY29weV90b19ndWVzdF9waHlzKHN0YXJ0X2FkZHIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh2b2lkICopKCh1aW50cHRyX3QpdGFibGUgJiBQQUdFX01BU0sp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfYWRkciAtIHN0YXJ0X2FkZHIp OworICAgIHNldF9jdXJyZW50KHNhdmVkX2N1cnJlbnQpOworICAgIGlmICggcmMgIT0gSFZNQ09Q WV9va2F5ICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGNvcHkgb3JpZ2luYWwg TUFEVCBwYWdlKHMpXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgfQorCisgICAg LyogQ3JhZnQgYSBuZXcgTUFEVCBmb3IgdGhlIGd1ZXN0ICovCisKKyAgICAvKiBDb3VudCBudW1i ZXIgb2YgaW50ZXJydXB0IG92ZXJyaWRlcy4gKi8KKyAgICBhY3BpX3RhYmxlX3BhcnNlX21hZHQo QUNQSV9NQURUX1RZUEVfSU5URVJSVVBUX09WRVJSSURFLCBhY3BpX2NvdW50X2ludHJfb3YsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9JUlFfU09VUkNFUyk7CisgICAgc2l6ZSA9IHNp emVvZihzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0KTsKKyAgICBzaXplICs9IHNpemVvZihzdHJ1Y3Qg YWNwaV9tYWR0X2ludGVycnVwdF9vdmVycmlkZSkgKiBhY3BpX2ludHJfb3ZlcnJyaWRlczsKKyAg ICBzaXplICs9IHNpemVvZihzdHJ1Y3QgYWNwaV9tYWR0X2lvX2FwaWMpOworICAgIHNpemUgKz0g c2l6ZW9mKHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfYXBpYykgKiBkb20wX21heF92Y3B1cygpOwor CisgICAgbWFkdCA9IHh6YWxsb2NfYnl0ZXMoc2l6ZSk7CisgICAgQUNQSV9NRU1DUFkobWFkdCwg dGFibGUsIHNpemVvZigqbWFkdCkpOworICAgIG1hZHQtPmFkZHJlc3MgPSBBUElDX0RFRkFVTFRf UEhZU19CQVNFOworICAgIGlvX2FwaWMgPSAoc3RydWN0IGFjcGlfbWFkdF9pb19hcGljICopKG1h ZHQgKyAxKTsKKyAgICBpb19hcGljLT5oZWFkZXIudHlwZSA9IEFDUElfTUFEVF9UWVBFX0lPX0FQ SUM7CisgICAgaW9fYXBpYy0+aGVhZGVyLmxlbmd0aCA9IHNpemVvZigqaW9fYXBpYyk7CisgICAg aW9fYXBpYy0+aWQgPSAxOworICAgIGlvX2FwaWMtPmFkZHJlc3MgPSBWSU9BUElDX0RFRkFVTFRf QkFTRV9BRERSRVNTOworCisgICAgaWYgKCBkb20wX21heF92Y3B1cygpID4gbnVtX29ubGluZV9j cHVzKCkgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJDUFUgb3ZlcmNvbW1pdCBpcyBub3Qgc3Vw cG9ydGVkIGZvciBEb20wXG4iKTsKKyAgICAgICAgeGZyZWUobWFkdCk7CisgICAgICAgIHJldHVy biAtRUlOVkFMOworICAgIH0KKworICAgIGxvY2FsX2FwaWMgPSAoc3RydWN0IGFjcGlfbWFkdF9s b2NhbF9hcGljICopKGlvX2FwaWMgKyAxKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGRvbTBfbWF4 X3ZjcHVzKCk7IGkrKyApCisgICAgeworICAgICAgICBsb2NhbF9hcGljLT5oZWFkZXIudHlwZSA9 IEFDUElfTUFEVF9UWVBFX0xPQ0FMX0FQSUM7CisgICAgICAgIGxvY2FsX2FwaWMtPmhlYWRlci5s ZW5ndGggPSBzaXplb2YoKmxvY2FsX2FwaWMpOworICAgICAgICBsb2NhbF9hcGljLT5wcm9jZXNz b3JfaWQgPSBpOworICAgICAgICBsb2NhbF9hcGljLT5pZCA9IGkgKiAyOworICAgICAgICBsb2Nh bF9hcGljLT5sYXBpY19mbGFncyA9IEFDUElfTUFEVF9FTkFCTEVEOworICAgICAgICBsb2NhbF9h cGljKys7CisgICAgfQorCisgICAgaW50c3Jjb3ZyID0gKHN0cnVjdCBhY3BpX21hZHRfaW50ZXJy dXB0X292ZXJyaWRlICopbG9jYWxfYXBpYzsKKyAgICBhY3BpX3RhYmxlX3BhcnNlX21hZHQoQUNQ SV9NQURUX1RZUEVfSU5URVJSVVBUX09WRVJSSURFLCBhY3BpX3NldF9pbnRyX292LAorICAgICAg ICAgICAgICAgICAgICAgICAgICBNQVhfSVJRX1NPVVJDRVMpOworICAgIEFTU0VSVCgoKHVuc2ln bmVkIGNoYXIgKilpbnRzcmNvdnIgLSAodW5zaWduZWQgY2hhciAqKW1hZHQpID09IHNpemUpOwor ICAgIG1hZHQtPmhlYWRlci5sZW5ndGggPSBzaXplOworICAgIG1hZHQtPmhlYWRlci5jaGVja3N1 bSAtPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgsIG1hZHQpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZHQtPmhlYWRlci5sZW5ndGgp OworCisgICAgLyogQ29weSB0aGUgbmV3IE1BRFQgdGFibGUgdG8gdGhlIGd1ZXN0IHBoeXNtYXAu ICovCisgICAgc2F2ZWRfY3VycmVudCA9IGN1cnJlbnQ7CisgICAgc2V0X2N1cnJlbnQodik7Cisg ICAgcmMgPSBodm1fY29weV90b19ndWVzdF9waHlzKG1hZHRfYWRkclswXSwgbWFkdCwgc2l6ZSk7 CisgICAgc2V0X2N1cnJlbnQoc2F2ZWRfY3VycmVudCk7CisgICAgaWYgKCByYyAhPSBIVk1DT1BZ X29rYXkgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gY29weSBtb2RpZmllZCBN QURUIHBhZ2UocylcbiIpOworICAgICAgICB4ZnJlZShtYWR0KTsKKyAgICAgICAgcmV0dXJuIC1F RkFVTFQ7CisgICAgfQorCisgICAgeGZyZWUobWFkdCk7CisKKyAgICByZXR1cm4gMDsKK30KKwog c3RhdGljIGludCBfX2luaXQgY29uc3RydWN0X2RvbTBfaHZtKHN0cnVjdCBkb21haW4gKmQsIGNv bnN0IG1vZHVsZV90ICppbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGltYWdlX2hlYWRyb29tLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1vZHVsZV90ICppbml0cmQsCkBAIC0yMTUyLDYgKzI0MTksMTMgQEAgc3Rh dGljIGludCBfX2luaXQgY29uc3RydWN0X2RvbTBfaHZtKHN0cnVjdCBkb21haW4gKmQsIGNvbnN0 IG1vZHVsZV90ICppbWFnZSwKICAgICAgICAgcmV0dXJuIHJjOwogICAgIH0KIAorICAgIHJjID0g aHZtX3NldHVwX2FjcGkoZCk7CisgICAgaWYgKCByYyApCisgICAgeworICAgICAgICBwcmludGso IkZhaWxlZCB0byBzZXR1cCBEb20wIEFDUEkgdGFibGVzOiAlZFxuIiwgcmMpOworICAgICAgICBy ZXR1cm4gcmM7CisgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9CiAKLS0gCjIuNy40IChBcHBsZSBH aXQtNjYpCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xp c3RzLnhlbi5vcmcveGVuLWRldmVsCg==