From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH RFC 06/12] xen/x86: populate PVHv2 Dom0 physical memory map Date: Fri, 29 Jul 2016 18:29:01 +0200 Message-ID: <1469809747-11176-7-git-send-email-roger.pau@citrix.com> References: <1469809747-11176-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.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bTAf8-0003UA-Vg for xen-devel@lists.xenproject.org; Fri, 29 Jul 2016 16:29:27 +0000 In-Reply-To: <1469809747-11176-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 , Jan Beulich , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org Q3JhZnQgdGhlIERvbTAgZTgyMCBtZW1vcnkgbWFwIGFuZCBwb3B1bGF0ZSBpdC4KClNpZ25lZC1v ZmYtYnk6IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXguY29tPgotLS0KQ2M6IEph biBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5j b29wZXIzQGNpdHJpeC5jb20+Ci0tLQogeGVuL2FyY2gveDg2L2RvbWFpbl9idWlsZC5jIHwgMTk5 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiAxIGZpbGUgY2hh bmdlZCwgMTkzIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVu L2FyY2gveDg2L2RvbWFpbl9idWlsZC5jIGIveGVuL2FyY2gveDg2L2RvbWFpbl9idWlsZC5jCmlu ZGV4IGMwZWY0MGYuLmNiOGVjYmQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9kb21haW5fYnVp bGQuYworKysgYi94ZW4vYXJjaC94ODYvZG9tYWluX2J1aWxkLmMKQEAgLTQzLDYgKzQzLDExIEBA IHN0YXRpYyBsb25nIF9faW5pdGRhdGEgZG9tMF9ucnBhZ2VzOwogc3RhdGljIGxvbmcgX19pbml0 ZGF0YSBkb20wX21pbl9ucnBhZ2VzOwogc3RhdGljIGxvbmcgX19pbml0ZGF0YSBkb20wX21heF9u cnBhZ2VzID0gTE9OR19NQVg7CiAKKy8qIEdGTiBvZiB0aGUgaWRlbnRpdHkgbWFwIGZvciBFUFQu ICovCisjZGVmaW5lIEhWTV9JREVOVF9QVF9HRk4gIDB4ZmVmZmV1CisKK3N0YXRpYyB1bnNpZ25l ZCBpbnQgX19pbml0ZGF0YSBodm1fbWVtX3N0YXRzW01BWF9PUkRFUiArIDFdOworCiAvKgogICog ZG9tMF9tZW09W21pbjo8bWluX2FtdD4sXVttYXg6PG1heF9hbXQ+LF1bPGFtdD5dCiAgKiAKQEAg LTMwNCw3ICszMDksOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgY29tcHV0ZV9kb20w X25yX3BhZ2VzKAogICAgICAgICAgICAgYXZhaWwgLT0gbWF4X3BkeCA+PiBzOwogICAgIH0KIAot ICAgIG5lZWRfcGFnaW5nID0gb3B0X2RvbTBfc2hhZG93IHx8IChpc19wdmhfZG9tYWluKGQpICYm ICFpb21tdV9oYXBfcHRfc2hhcmUpOworICAgIG5lZWRfcGFnaW5nID0gb3B0X2RvbTBfc2hhZG93 IHx8IChoYXNfaHZtX2NvbnRhaW5lcl9kb21haW4oZCkgJiYKKyAgICAgICAgICAgICAgICAgICgh aW9tbXVfaGFwX3B0X3NoYXJlIHx8ICFwYWdpbmdfbW9kZV9oYXAoZCkpKTsKICAgICBmb3IgKCA7 IDsgbmVlZF9wYWdpbmcgPSAwICkKICAgICB7CiAgICAgICAgIG5yX3BhZ2VzID0gZG9tMF9ucnBh Z2VzOwpAQCAtMzM2LDcgKzM0Miw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBjb21w dXRlX2RvbTBfbnJfcGFnZXMoCiAgICAgICAgIGF2YWlsIC09IGRvbTBfcGFnaW5nX3BhZ2VzKGQs IG5yX3BhZ2VzKTsKICAgICB9CiAKLSAgICBpZiAoIChwYXJtcy0+cDJtX2Jhc2UgPT0gVU5TRVRf QUREUikgJiYgKGRvbTBfbnJwYWdlcyA8PSAwKSAmJgorICAgIGlmICggaXNfcHZfZG9tYWluKGQp ICYmCisgICAgICAgICAocGFybXMtPnAybV9iYXNlID09IFVOU0VUX0FERFIpICYmIChkb20wX25y cGFnZXMgPD0gMCkgJiYKICAgICAgICAgICgoZG9tMF9taW5fbnJwYWdlcyA8PSAwKSB8fCAobnJf cGFnZXMgPiBtaW5fcGFnZXMpKSApCiAgICAgewogICAgICAgICAvKgpAQCAtNTQ3LDExICs1NTQs MTIgQEAgc3RhdGljIF9faW5pdCB2b2lkIHB2aF9tYXBfYWxsX2lvbWVtKHN0cnVjdCBkb21haW4g KmQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiAgICAgQVNTRVJUKG5yX2hvbGVzID09IDApOwog fQogCi1zdGF0aWMgX19pbml0IHZvaWQgcHZoX3NldHVwX2U4MjAoc3RydWN0IGRvbWFpbiAqZCwg dW5zaWduZWQgbG9uZyBucl9wYWdlcykKK3N0YXRpYyBfX2luaXQgdm9pZCBodm1fc2V0dXBfZTgy MChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogewogICAgIHN0cnVj dCBlODIwZW50cnkgKmVudHJ5LCAqZW50cnlfZ3Vlc3Q7CiAgICAgdW5zaWduZWQgaW50IGk7CiAg ICAgdW5zaWduZWQgbG9uZyBwYWdlcywgY3VyX3BhZ2VzID0gMDsKKyAgICB1aW50NjRfdCBzdGFy dCwgZW5kOwogCiAgICAgLyoKICAgICAgKiBDcmFmdCB0aGUgZTgyMCBtZW1vcnkgbWFwIGZvciBE b20wIGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBlODIwIG1hcC4KQEAgLTU3OSw4ICs1ODcsMTkgQEAg c3RhdGljIF9faW5pdCB2b2lkIHB2aF9zZXR1cF9lODIwKHN0cnVjdCBkb21haW4gKmQsIHVuc2ln bmVkIGxvbmcgbnJfcGFnZXMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g ICAgICAgICplbnRyeV9ndWVzdCA9ICplbnRyeTsKLSAgICAgICAgcGFnZXMgPSBQRk5fVVAoZW50 cnlfZ3Vlc3QtPnNpemUpOworICAgICAgICAvKgorICAgICAgICAgKiBNYWtlIHN1cmUgdGhlIHN0 YXJ0IGFuZCBsZW5ndGggYXJlIGFsaWduZWQgdG8gUEFHRV9TSVpFLCBiZWNhdXNlCisgICAgICAg ICAqIHRoYXQncyB0aGUgbWluaW11bSBncmFudWxhcml0eSBvZiB0aGUgMm5kIHN0YWdlIHRyYW5z bGF0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgc3RhcnQgPSBST1VORFVQKGVudHJ5LT5hZGRy LCBQQUdFX1NJWkUpOworICAgICAgICBlbmQgPSAoZW50cnktPmFkZHIgKyBlbnRyeS0+c2l6ZSkg JiBQQUdFX01BU0s7CisgICAgICAgIGlmICggc3RhcnQgPj0gZW5kICkKKyAgICAgICAgICAgIGNv bnRpbnVlOworCisgICAgICAgIGVudHJ5X2d1ZXN0LT50eXBlID0gRTgyMF9SQU07CisgICAgICAg IGVudHJ5X2d1ZXN0LT5hZGRyID0gc3RhcnQ7CisgICAgICAgIGVudHJ5X2d1ZXN0LT5zaXplID0g ZW5kIC0gc3RhcnQ7CisgICAgICAgIHBhZ2VzID0gUEZOX0RPV04oZW50cnlfZ3Vlc3QtPnNpemUp OwogICAgICAgICBpZiAoIChjdXJfcGFnZXMgKyBwYWdlcykgPiBucl9wYWdlcyApCiAgICAgICAg IHsKICAgICAgICAgICAgIC8qIFRydW5jYXRlIHJlZ2lvbiAqLwpAQCAtNTkxLDYgKzYxMCw4IEBA IHN0YXRpYyBfX2luaXQgdm9pZCBwdmhfc2V0dXBfZTgyMChzdHJ1Y3QgZG9tYWluICpkLCB1bnNp Z25lZCBsb25nIG5yX3BhZ2VzKQogICAgICAgICB7CiAgICAgICAgICAgICBjdXJfcGFnZXMgKz0g cGFnZXM7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKChlbnRyeV9ndWVzdC0+YWRkciAmIH5Q QUdFX01BU0spID09IDAgJiYKKyAgICAgICAgICAgICAgIChlbnRyeV9ndWVzdC0+c2l6ZSAmIH5Q QUdFX01BU0spID09IDApOwogIG5leHQ6CiAgICAgICAgIGQtPmFyY2gubnJfZTgyMCsrOwogICAg ICAgICBlbnRyeV9ndWVzdCsrOwpAQCAtMTYzMSw3ICsxNjUyLDcgQEAgc3RhdGljIGludCBfX2lu aXQgY29uc3RydWN0X2RvbTBfcHYoCiAgICAgICAgIGRvbTBfdXBkYXRlX3BoeXNtYXAoZCwgcGZu LCBtZm4sIDApOwogCiAgICAgICAgIHB2aF9tYXBfYWxsX2lvbWVtKGQsIG5yX3BhZ2VzKTsKLSAg ICAgICAgcHZoX3NldHVwX2U4MjAoZCwgbnJfcGFnZXMpOworICAgICAgICBodm1fc2V0dXBfZTgy MChkLCBucl9wYWdlcyk7CiAgICAgfQogCiAgICAgaWYgKCBkLT5kb21haW5faWQgPT0gaGFyZHdh cmVfZG9taWQgKQpAQCAtMTY0NywxNSArMTY2OCwxODEgQEAgb3V0OgogICAgIHJldHVybiByYzsK IH0KIAorLyogSGVscGVyIHRvIGNvbnZlcnQgZnJvbSBieXRlcyBpbnRvIGh1bWFuLXJlYWRhYmxl IGZvcm0uICovCitzdGF0aWMgdm9pZCBfX2luaXQgcHJldHR5X3ByaW50X2J5dGVzKHVpbnQ2NF90 IHNpemUpCit7CisgICAgY29uc3QgY2hhciogdW5pdHNbXSA9IHsiQiIsICJLQiIsICJNQiIsICJH QiIsICJUQiJ9OworICAgIGludCBpID0gMDsKKworICAgIHdoaWxlICggKytpIDwgc2l6ZW9mKHVu aXRzKSAmJiBzaXplID49IDEwMjQgKQorICAgICAgICBzaXplID4+PSAxMDsgLyogc2l6ZSAvPSAx MDI0ICovCisKKyAgICBwcmludGsoIiU0IiBQUkl1NjQgIiUycyIsIHNpemUsIHVuaXRzW2ktMV0p OworfQorCisvKiBDYWxjdWxhdGUgdGhlIGJpZ2dlc3QgdXNhYmxlIG9yZGVyIGdpdmVuIGEgc2l6 ZSBpbiBieXRlcy4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9vcmRlcih1aW50 NjRfdCBzaXplKQoreworICAgIHVuc2lnbmVkIGludCBvcmRlcjsKKyAgICB1aW50NjRfdCBwZzsK KworICAgIEFTU0VSVCgoc2l6ZSAmIH5QQUdFX01BU0spID09IDApOworICAgIHBnID0gUEZOX0RP V04oc2l6ZSk7CisgICAgZm9yICggb3JkZXIgPSAwOyBwZyA+PSAoMSA8PCAob3JkZXIgKyAxKSk7 IG9yZGVyKysgKTsKKworICAgIHJldHVybiBvcmRlcjsKK30KKworLyogUG9wdWxhdGUgYW4gSFZN IG1lbW9yeSByYW5nZSB1c2luZyB0aGUgYmlnZ2VzdCBwb3NzaWJsZSBvcmRlci4gKi8KK3N0YXRp YyB2b2lkIF9faW5pdCBodm1fcG9wdWxhdGVfbWVtb3J5X3JhbmdlKHN0cnVjdCBkb21haW4gKmQs IHVpbnQ2NF90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDY0X3Qgc2l6ZSkKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRh dGEgbWVtZmxhZ3MgPSBNRU1GX25vX2RtYXxNRU1GX2V4YWN0X25vZGU7CisgICAgdW5zaWduZWQg aW50IG9yZGVyOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgaW50IHJjOworCisg ICAgQVNTRVJUKChzaXplICYgflBBR0VfTUFTSykgPT0gMCAmJiAoc3RhcnQgJiB+UEFHRV9NQVNL KSA9PSAwKTsKKworICAgIG9yZGVyID0gTUFYX09SREVSOworICAgIHdoaWxlICggc2l6ZSAhPSAw ICkKKyAgICB7CisgICAgICAgIG9yZGVyID0gbWluKGdldF9vcmRlcihzaXplKSwgb3JkZXIpOwor ICAgICAgICBwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBvcmRlciwgbWVtZmxhZ3MpOwor ICAgICAgICBpZiAoIHBhZ2UgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgg b3JkZXIgPT0gMCAmJiBtZW1mbGFncyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg LyogVHJ5IGFnYWluIHdpdGhvdXQgYW55IG1lbWZsYWdzLiAqLworICAgICAgICAgICAgICAgIG1l bWZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICBvcmRlciA9IE1BWF9PUkRFUjsKKyAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggb3JkZXIg PT0gMCApCisgICAgICAgICAgICAgICAgcGFuaWMoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkg d2l0aCBvcmRlciAwIVxuIik7CisgICAgICAgICAgICBvcmRlci0tOworICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIH0KKworICAgICAgICBodm1fbWVtX3N0YXRzW29yZGVyXSsrOworICAg ICAgICByYyA9IGd1ZXN0X3BoeXNtYXBfYWRkX3BhZ2UoZCwgX2dmbihQRk5fRE9XTihzdGFydCkp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21mbihwYWdlX3RvX21mbihw YWdlKSksIG9yZGVyKTsKKyAgICAgICAgaWYgKCByYyAhPSAwICkKKyAgICAgICAgICAgIHBhbmlj KCJGYWlsZWQgdG8gcG9wdWxhdGUgbWVtb3J5OiBbJSIgUFJJeDY0ICIgLSAlIiBQUkl4NjQgIl0g JWRcbiIsCisgICAgICAgICAgICAgICAgICBzdGFydCwgc3RhcnQgKyAoKCh1aW50NjRfdCkxKSA8 PCAob3JkZXIgKyBQQUdFX1NISUZUKSksIHJjKTsKKyAgICAgICAgc3RhcnQgKz0gKCh1aW50NjRf dCkxKSA8PCAob3JkZXIgKyBQQUdFX1NISUZUKTsKKyAgICAgICAgc2l6ZSAtPSAoKHVpbnQ2NF90 KTEpIDw8IChvcmRlciArIFBBR0VfU0hJRlQpOworICAgICAgICBpZiAoIChzaXplICYgMHhmZmZm ZmZmZikgPT0gMCApCisgICAgICAgICAgICBwcm9jZXNzX3BlbmRpbmdfc29mdGlycXMoKTsKKyAg ICB9CisKK30KKworc3RhdGljIGludCBfX2luaXQgaHZtX3NldHVwX3AybShzdHJ1Y3QgZG9tYWlu ICpkKQoreworICAgIHN0cnVjdCB2Y3B1ICp2ID0gZC0+dmNwdVswXTsKKyAgICB1bnNpZ25lZCBs b25nIG5yX3BhZ2VzOworICAgIGludCBpOworCisgICAgcHJpbnRrKCIqKiBQcmVwYXJpbmcgbWVt b3J5IG1hcCAqKlxuIik7CisKKyAgICAvKgorICAgICAqIFN1YnRyYWN0IG9uZSBwYWdlIGZvciB0 aGUgRVBUIGlkZW50aXR5IHBhZ2UgdGFibGUgYW5kIHR3byBwYWdlcworICAgICAqIGZvciB0aGUg TUFEVCByZXBsYWNlbWVudC4KKyAgICAgKi8KKyAgICBucl9wYWdlcyA9IGNvbXB1dGVfZG9tMF9u cl9wYWdlcyhkLCBOVUxMLCAwKSAtIDM7CisKKyAgICBodm1fc2V0dXBfZTgyMChkLCBucl9wYWdl cyk7CisgICAgcGFnaW5nX3NldF9hbGxvY2F0aW9uKGQsIGRvbTBfcGFnaW5nX3BhZ2VzKGQsIG5y X3BhZ2VzKSk7CisKKyAgICBwcmludGsoIkRvbTAgbWVtb3J5IG1hcDpcbiIpOworICAgIHByaW50 X2U4MjBfbWVtb3J5X21hcChkLT5hcmNoLmU4MjAsIGQtPmFyY2gubnJfZTgyMCk7CisKKyAgICBw cmludGsoIioqIFBvcHVsYXRpbmcgbWVtb3J5IG1hcCAqKlxuIik7CisgICAgLyogUG9wdWxhdGUg bWVtb3J5IG1hcC4gKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IGQtPmFyY2gubnJfZTgyMDsgaSsr ICkKKyAgICB7CisgICAgICAgIGlmICggZC0+YXJjaC5lODIwW2ldLnR5cGUgIT0gRTgyMF9SQU0g KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaHZtX3BvcHVsYXRlX21lbW9yeV9y YW5nZShkLCBkLT5hcmNoLmU4MjBbaV0uYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkLT5hcmNoLmU4MjBbaV0uc2l6ZSk7CisgICAgfQorCisgICAgcHJpbnRrKCJNZW1v cnkgYWxsb2NhdGlvbiBzdGF0czpcbiIpOworICAgIGZvciAoIGkgPSAwOyBpIDw9IE1BWF9PUkRF UjsgaSsrICkKKyAgICB7CisgICAgICAgIGlmICggaHZtX21lbV9zdGF0c1tNQVhfT1JERVIgLSBp XSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRrKCJPcmRlciAlMnU6ICIsIE1B WF9PUkRFUiAtIGkpOworICAgICAgICAgICAgcHJldHR5X3ByaW50X2J5dGVzKCgodWludDY0X3Qp MSA8PCAoTUFYX09SREVSIC0gaSArIFBBR0VfU0hJRlQpKSAqCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaHZtX21lbV9zdGF0c1tNQVhfT1JERVIgLSBpXSk7CisgICAgICAgICAgICBw cmludGsoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGNwdV9oYXNfdm14ICYm IHBhZ2luZ19tb2RlX2hhcChkKSAmJiAhdm14X3VucmVzdHJpY3RlZF9ndWVzdCh2KSApCisgICAg eworICAgICAgICBzdHJ1Y3QgdmNwdSAqc2F2ZWRfY3VycmVudDsKKyAgICAgICAgc3RydWN0IHBh Z2VfaW5mbyAqcGFnZTsKKyAgICAgICAgdWludDMyX3QgKmlkZW50X3B0OworCisgICAgICAgIC8q CisgICAgICAgICAqIElkZW50aXR5LW1hcCBwYWdlIHRhYmxlIGlzIHJlcXVpcmVkIGZvciBydW5u aW5nIHdpdGggQ1IwLlBHPTAKKyAgICAgICAgICogd2hlbiB1c2luZyBJbnRlbCBFUFQuIENyZWF0 ZSBhIDMyLWJpdCBub24tUEFFIHBhZ2UgZGlyZWN0b3J5IG9mCisgICAgICAgICAqIHN1cGVycGFn ZXMuCisgICAgICAgICAqLworICAgICAgICBwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCAw LCAwKTsKKyAgICAgICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQorICAgICAgICB7CisgICAgICAg ICAgICBwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBwYWdlIGZvciBpZGVudGl0eSBtYXBcbiIp OworICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKworICAgICAgICBzYXZl ZF9jdXJyZW50ID0gY3VycmVudDsKKyAgICAgICAgc2V0X2N1cnJlbnQodik7CisKKyAgICAgICAg aWRlbnRfcHQgPSBfX21hcF9kb21haW5fcGFnZShwYWdlKTsKKyAgICAgICAgZm9yICggaSA9IDA7 IGkgPCBQQUdFX1NJWkUgLyBzaXplb2YoKmlkZW50X3B0KTsgaSsrICkKKyAgICAgICAgICAgIGlk ZW50X3B0W2ldID0gKChpIDw8IDIyKSB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdF X1VTRVIgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfQUNDRVNTRUQgfCBfUEFH RV9ESVJUWSB8IF9QQUdFX1BTRSk7CisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGlkZW50X3B0 KTsKKworICAgICAgICBndWVzdF9waHlzbWFwX2FkZF9wYWdlKGQsIF9nZm4oSFZNX0lERU5UX1BU X0dGTiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21mbihwYWdlX3RvX21mbihw YWdlKSksIDApOworICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGFyYW1zW0hWTV9QQVJBTV9J REVOVF9QVF0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFZNX0lERU5UX1BU X0dGTiA8PCBQQUdFX1NISUZUOworICAgICAgICBzZXRfY3VycmVudChzYXZlZF9jdXJyZW50KTsK KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgY29uc3RydWN0 X2RvbTBfaHZtKHN0cnVjdCBkb21haW4gKmQsIGNvbnN0IG1vZHVsZV90ICppbWFnZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGltYWdlX2hlYWRy b29tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV90ICppbml0 cmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpib290c3Ry YXBfbWFwKShjb25zdCBtb2R1bGVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpjbWRsaW5lKQogeworICAgIGludCByYzsKIAogICAgIHByaW50aygiKiog QnVpbGRpbmcgYSBQVkggRG9tMCAqKlxuIik7CiAKKyAgICAvKiBTYW5pdHkhICovCisgICAgQlVH X09OKGQtPmRvbWFpbl9pZCAhPSAwKTsKKyAgICBCVUdfT04oZC0+dmNwdVswXSA9PSBOVUxMKTsK KworICAgIHByb2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOworCisgICAgaW9tbXVfaHdkb21faW5p dChkKTsKKworICAgIHJjID0gaHZtX3NldHVwX3AybShkKTsKKyAgICBpZiAoIHJjICkKKyAgICB7 CisgICAgICAgIHByaW50aygiRmFpbGVkIHRvIHNldHVwIERvbTAgcGh5c2ljYWwgbWVtb3J5IG1h cFxuIik7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKICAgICByZXR1cm4gMDsKIH0KIAot LSAKMi43LjQgKEFwcGxlIEdpdC02NikKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK