From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v2 21/22] mini-os: get physical memory map Date: Wed, 24 Aug 2016 12:11:43 +0200 Message-ID: <1472033504-23180-22-git-send-email-jgross@suse.com> References: <1472033504-23180-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1472033504-23180-1-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: minios-devel@lists.xenproject.org, xen-devel@lists.xenproject.org Cc: Juergen Gross , samuel.thibault@ens-lyon.org, wei.liu2@citrix.com List-Id: xen-devel@lists.xenproject.org T24gSFZNbGl0ZSB3ZSBoYXZlIHRvIGxvb2sgYXQgdGhlIHBoeXNpY2FsIG1lbW9yeSBtYXAgdG8g a25vdyB3aGljaAptZW1vcnkgZnJhbWVzIGFyZSB1c2FibGUuCgpJbiBvcmRlciB0byBtYWtlIGxp ZmUgZWFzaWVyIHdlIGRlZmluZSBhIGR1bW15IG1lbW9yeSBtYXAgZm9yIG90aGVyCmRvbWFpbiB0 eXBlcyAocHYgYW5kIGFybSkgd2hpY2ggaGFzIGp1c3Qgb25lIGVudHJ5IHdpdGggYSBtYXhpbXVt Cm1lbW9yeSBzaXplLgoKU2lnbmVkLW9mZi1ieTogSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2Uu Y29tPgpSZXZpZXdlZC1ieTogU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5 b24ub3JnPgotLS0KIGFyY2gvYXJtL21tLmMgICAgICAgICB8ICA4ICsrKysrKwogYXJjaC94ODYv bW0uYyAgICAgICAgIHwgNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogYXJjaC94ODYvc2V0dXAuYyAgICAgIHwgIDEgKwogaW5jbHVkZS9lODIwLmggICAg ICAgIHwgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS94ODYvYXJj aF9tbS5oIHwgIDQgKysrCiBtbS5jICAgICAgICAgICAgICAgICAgfCA3OSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIDYgZmlsZXMgY2hhbmdlZCwg MTgzIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvZTgyMC5oCgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0uYyBiL2FyY2gvYXJtL21tLmMK aW5kZXggZGJkZTE2Mi4uOGMxNTZjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0uYworKysgYi9h cmNoL2FybS9tbS5jCkBAIC03LDYgKzcsMTQgQEAKICNpbmNsdWRlIDxsaWIuaD4KIAogdWludDMy X3QgcGh5c2ljYWxfYWRkcmVzc19vZmZzZXQ7CitzdHJ1Y3QgZTgyMGVudHJ5IGU4MjBfbWFwWzFd ID0geworICAgIHsKKyAgICAgICAgLmFkZHIgPSAwLAorICAgICAgICAuc2l6ZSA9IFVMT05HX01B WCAtIDEsCisgICAgICAgIC50eXBlID0gRTgyMF9SQU0KKyAgICB9Cit9OwordW5zaWduZWQgZTgy MF9lbnRyaWVzID0gMTsKIAogdW5zaWduZWQgbG9uZyBhbGxvY2F0ZV9vbmRlbWFuZCh1bnNpZ25l ZCBsb25nIG4sIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50KQogewpkaWZmIC0tZ2l0IGEvYXJjaC94 ODYvbW0uYyBiL2FyY2gveDg2L21tLmMKaW5kZXggNzYyNTk5ZC4uOGRkOTBiOCAxMDA2NDQKLS0t IGEvYXJjaC94ODYvbW0uYworKysgYi9hcmNoL3g4Ni9tbS5jCkBAIC00Myw2ICs0Myw3IEBACiAj aW5jbHVkZSA8bWluaS1vcy90eXBlcy5oPgogI2luY2x1ZGUgPG1pbmktb3MvbGliLmg+CiAjaW5j bHVkZSA8bWluaS1vcy94bWFsbG9jLmg+CisjaW5jbHVkZSA8bWluaS1vcy9lODIwLmg+CiAjaW5j bHVkZSA8eGVuL21lbW9yeS5oPgogCiAjaWZkZWYgTU1fREVCVUcKQEAgLTYzLDYgKzY0LDE1IEBA IGV4dGVybiBjaGFyIHN0YWNrW107CiBleHRlcm4gdm9pZCBwYWdlX3dhbGsodW5zaWduZWQgbG9u ZyB2YSk7CiAKICNpZmRlZiBDT05GSUdfUEFSQVZJUlQKK3N0cnVjdCBlODIwZW50cnkgZTgyMF9t YXBbMV0gPSB7CisgICAgeworICAgICAgICAuYWRkciA9IDAsCisgICAgICAgIC5zaXplID0gVUxP TkdfTUFYIC0gMSwKKyAgICAgICAgLnR5cGUgPSBFODIwX1JBTQorICAgIH0KK307Cit1bnNpZ25l ZCBlODIwX2VudHJpZXMgPSAxOworCiB2b2lkIGFyY2hfbW1fcHJlaW5pdCh2b2lkICpwKQogewog ICAgIHN0YXJ0X2luZm9fdCAqc2kgPSBwOwpAQCAtMTAyLDEwICsxMTIsMjUgQEAgZGVzY19wdHIg aWR0X3B0ciA9CiAgICAgLmJhc2UgPSAodW5zaWduZWQgbG9uZykmaWR0LAogfTsKIAorc3RydWN0 IGU4MjBlbnRyeSBlODIwX21hcFtFODIwX01BWF07Cit1bnNpZ25lZCBlODIwX2VudHJpZXM7CisK K3N0YXRpYyBjaGFyICplODIwX3R5cGVzW0U4MjBfVFlQRVNdID0geworICAgIFtFODIwX1JBTV0g ICAgICA9ICJSQU0iLAorICAgIFtFODIwX1JFU0VSVkVEXSA9ICJSZXNlcnZlZCIsCisgICAgW0U4 MjBfQUNQSV0gICAgID0gIkFDUEkiLAorICAgIFtFODIwX05WU10gICAgICA9ICJOVlMiLAorICAg IFtFODIwX1VOVVNBQkxFXSA9ICJVbnVzYWJsZSIsCisgICAgW0U4MjBfUE1FTV0gICAgID0gIlBN RU0iCit9OworCiB2b2lkIGFyY2hfbW1fcHJlaW5pdCh2b2lkICpwKQogewogICAgIGxvbmcgcmV0 OwogICAgIGRvbWlkX3QgZG9taWQgPSBET01JRF9TRUxGOworICAgIHN0cnVjdCB4ZW5fbWVtb3J5 X21hcCBtZW1tYXA7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgbG9uZyBwZm4sIG1heCA9IDA7 CiAKICAgICBwdF9iYXNlID0gcGFnZV90YWJsZV9iYXNlOwogICAgIGZpcnN0X2ZyZWVfcGZuID0g UEZOX1VQKHRvX3BoeXMoJl9lbmQpKTsKQEAgLTExNiw2ICsxNDEsNTMgQEAgdm9pZCBhcmNoX21t X3ByZWluaXQodm9pZCAqcCkKICAgICAgICAgZG9fZXhpdCgpOwogICAgIH0KICAgICBsYXN0X2Zy ZWVfcGZuID0gcmV0OworCisgICAgbWVtbWFwLm5yX2VudHJpZXMgPSBFODIwX01BWDsKKyAgICBz ZXRfeGVuX2d1ZXN0X2hhbmRsZShtZW1tYXAuYnVmZmVyLCBlODIwX21hcCk7CisgICAgcmV0ID0g SFlQRVJWSVNPUl9tZW1vcnlfb3AoWEVOTUVNX21lbW9yeV9tYXAsICZtZW1tYXApOworICAgIGlm ICggcmV0IDwgMCApCisgICAgeworICAgICAgICB4cHJpbnRrKCJjb3VsZCBub3QgZ2V0IG1lbW9y eSBtYXBcbiIpOworICAgICAgICBkb19leGl0KCk7CisgICAgfQorICAgIGU4MjBfZW50cmllcyA9 IG1lbW1hcC5ucl9lbnRyaWVzOworCisgICAgZm9yICggaSA9IDA7IGkgPCBlODIwX2VudHJpZXM7 IGkrKyApCisgICAgeworICAgICAgICBpZiAoIGU4MjBfbWFwW2ldLnR5cGUgIT0gRTgyMF9SQU0g KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHBmbiA9IChlODIwX21hcFtpXS5hZGRy ICsgZTgyMF9tYXBbaV0uc2l6ZSkgPj4gUEFHRV9TSElGVDsKKyAgICAgICAgaWYgKCBwZm4gPiBt YXggKQorICAgICAgICAgICAgbWF4ID0gcGZuOworICAgIH0KKworICAgIGlmICggbWF4IDwgbGFz dF9mcmVlX3BmbiApCisgICAgICAgIGxhc3RfZnJlZV9wZm4gPSBtYXg7Cit9CisKK3ZvaWQgYXJj aF9wcmludF9tZW1tYXAodm9pZCkKK3sKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBsb25nIGZy b20sIHRvOworICAgIGNoYXIgKnR5cGU7CisgICAgY2hhciBidWZbMTJdOworCisgICAgcHJpbnRr KCJNZW1vcnkgbWFwOlxuIik7CisgICAgZm9yICggaSA9IDA7IGkgPCBlODIwX2VudHJpZXM7IGkr KyApCisgICAgeworICAgICAgICBpZiAoIGU4MjBfbWFwW2ldLnR5cGUgPj0gRTgyMF9UWVBFUyB8 fCAhZTgyMF90eXBlc1tlODIwX21hcFtpXS50eXBlXSApCisgICAgICAgIHsKKyAgICAgICAgICAg IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlOHgiLCBlODIwX21hcFtpXS50eXBlKTsKKyAg ICAgICAgICAgIHR5cGUgPSBidWY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7 CisgICAgICAgICAgICB0eXBlID0gZTgyMF90eXBlc1tlODIwX21hcFtpXS50eXBlXTsKKyAgICAg ICAgfQorICAgICAgICBmcm9tID0gZTgyMF9tYXBbaV0uYWRkcjsKKyAgICAgICAgdG8gPSBmcm9t ICsgZTgyMF9tYXBbaV0uc2l6ZSAtIDE7CisgICAgICAgIHByaW50aygiJTAxMmx4LSUwMTJseDog JXNcbiIsIGZyb20sIHRvLCB0eXBlKTsKKyAgICB9CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv YXJjaC94ODYvc2V0dXAuYyBiL2FyY2gveDg2L3NldHVwLmMKaW5kZXggZjQyMmE5Ni4uODY5NTVj ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9zZXR1cC5jCkBA IC0xNTEsNiArMTUxLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3RhcnRfb2ZfZGF5KHZvaWQgKnAp CiAgICAgcHJpbnRrKCIgICAgICAgZmxhZ3M6IDB4JXhcbiIsICh1bnNpZ25lZCBpbnQpc2ktPmZs YWdzKTsKICAgICBwcmludGsoIiAgICBjbWRfbGluZTogJXNcbiIsIGNtZGxpbmUpOwogICAgIHBy aW50aygiICAgICAgIHN0YWNrOiAlcC0lcFxuIiwgc3RhY2ssIHN0YWNrICsgc2l6ZW9mKHN0YWNr KSk7CisgICAgYXJjaF9wcmludF9tZW1tYXAoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9p bmNsdWRlL2U4MjAuaCBiL2luY2x1ZGUvZTgyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjkyMDU1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2U4MjAuaApAQCAt MCwwICsxLDQ4IEBACisvKiAtKi0gIE1vZGU6QzsgYy1iYXNpYy1vZmZzZXQ6NDsgdGFiLXdpZHRo OjQgLSotCisgKgorICogKEMpIDIwMTYgLSBKdWVyZ2VuIEdyb3NzLCBTVVNFIExpbnV4IEdtYkgK KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyAqIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlz CisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX0U4MjBfSEVBREVSCisjZGVmaW5lIF9fRTgyMF9I RUFERVIKKworLyogUEMgQklPUyBzdGFuZGFyZCBFODIwIHR5cGVzIGFuZCBzdHJ1Y3R1cmUuICov CisjZGVmaW5lIEU4MjBfUkFNICAgICAgICAgIDEKKyNkZWZpbmUgRTgyMF9SRVNFUlZFRCAgICAg MgorI2RlZmluZSBFODIwX0FDUEkgICAgICAgICAzCisjZGVmaW5lIEU4MjBfTlZTICAgICAgICAg IDQKKyNkZWZpbmUgRTgyMF9VTlVTQUJMRSAgICAgNQorI2RlZmluZSBFODIwX1BNRU0gICAgICAg ICA3CisjZGVmaW5lIEU4MjBfVFlQRVMgICAgICAgIDgKKworc3RydWN0IF9fcGFja2VkIGU4MjBl bnRyeSB7CisgICAgdWludDY0X3QgYWRkcjsKKyAgICB1aW50NjRfdCBzaXplOworICAgIHVpbnQz Ml90IHR5cGU7Cit9OworCisvKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzLiAqLworI2RlZmlu ZSBFODIwX01BWCAgICAgICAgICAxMjgKKworZXh0ZXJuIHN0cnVjdCBlODIwZW50cnkgZTgyMF9t YXBbXTsKK2V4dGVybiB1bnNpZ25lZCBlODIwX2VudHJpZXM7CisKKyNlbmRpZiAvKl9fRTgyMF9I RUFERVIqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ODYvYXJjaF9tbS5oIGIvaW5jbHVkZS94ODYv YXJjaF9tbS5oCmluZGV4IDkzNzJmMWUuLmFiOGE1M2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveDg2 L2FyY2hfbW0uaAorKysgYi9pbmNsdWRlL3g4Ni9hcmNoX21tLmgKQEAgLTI3OSw2ICsyNzksMTAg QEAgcGdlbnRyeV90ICpuZWVkX3BndCh1bnNpZ25lZCBsb25nIGFkZHIpOwogdm9pZCBhcmNoX21t X3ByZWluaXQodm9pZCAqcCk7CiB1bnNpZ25lZCBsb25nIGFsbG9jX3ZpcnRfa2VybmVsKHVuc2ln bmVkIG5fcGFnZXMpOwogCisjaWZuZGVmIENPTkZJR19QQVJBVklSVAordm9pZCBhcmNoX3ByaW50 X21lbW1hcCh2b2lkKTsKKyNlbmRpZgorCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BUkNIX01NX0hf ICovCmRpZmYgLS1naXQgYS9tbS5jIGIvbW0uYwppbmRleCBjNzZiZTdmLi45MzJjZWViIDEwMDY0 NAotLS0gYS9tbS5jCisrKyBiL21tLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxtaW5p LW9zL3R5cGVzLmg+CiAjaW5jbHVkZSA8bWluaS1vcy9saWIuaD4KICNpbmNsdWRlIDxtaW5pLW9z L3htYWxsb2MuaD4KKyNpbmNsdWRlIDxtaW5pLW9zL2U4MjAuaD4KIAogLyoqKioqKioqKioqKioq KioqKioqKgogICogQUxMT0NBVElPTiBCSVRNQVAKQEAgLTE0NywxMCArMTQ4LDE0IEBAIHN0YXRp YyBjaHVua19oZWFkX3QgIGZyZWVfdGFpbFtGUkVFTElTVF9TSVpFXTsKICAqLwogc3RhdGljIHZv aWQgaW5pdF9wYWdlX2FsbG9jYXRvcih1bnNpZ25lZCBsb25nIG1pbiwgdW5zaWduZWQgbG9uZyBt YXgpCiB7Ci0gICAgaW50IGk7CisgICAgaW50IGksIG07CiAgICAgdW5zaWduZWQgbG9uZyByYW5n ZTsKKyAgICB1bnNpZ25lZCBsb25nIHJfbWluLCByX21heDsKICAgICBjaHVua19oZWFkX3QgKmNo OwogICAgIGNodW5rX3RhaWxfdCAqY3Q7CisKKyAgICBwcmludGsoIk1NOiBJbml0aWFsaXNlIHBh Z2UgYWxsb2NhdG9yIGZvciAlbHgoJWx4KS0lbHgoJWx4KVxuIiwKKyAgICAgICAgICAgKHVfbG9u Zyl0b192aXJ0KG1pbiksIG1pbiwgKHVfbG9uZyl0b192aXJ0KG1heCksIG1heCk7CiAgICAgZm9y ICggaSA9IDA7IGkgPCBGUkVFTElTVF9TSVpFOyBpKysgKQogICAgIHsKICAgICAgICAgZnJlZV9o ZWFkW2ldICAgICAgID0gJmZyZWVfdGFpbFtpXTsKQEAgLTE2NiwzOCArMTcxLDU3IEBAIHN0YXRp YyB2b2lkIGluaXRfcGFnZV9hbGxvY2F0b3IodW5zaWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxv bmcgbWF4KQogICAgIG1tX2FsbG9jX2JpdG1hcF9zaXplICA9IHJvdW5kX3BndXAobW1fYWxsb2Nf Yml0bWFwX3NpemUpOwogICAgIG1tX2FsbG9jX2JpdG1hcCA9ICh1bnNpZ25lZCBsb25nICopdG9f dmlydChtaW4pOwogICAgIG1pbiAgICAgICAgICs9IG1tX2FsbG9jX2JpdG1hcF9zaXplOwotICAg IHJhbmdlICAgICAgICA9IG1heCAtIG1pbjsKIAogICAgIC8qIEFsbCBhbGxvY2F0ZWQgYnkgZGVm YXVsdC4gKi8KICAgICBtZW1zZXQobW1fYWxsb2NfYml0bWFwLCB+MCwgbW1fYWxsb2NfYml0bWFw X3NpemUpOwotICAgIC8qIEZyZWUgdXAgdGhlIG1lbW9yeSB3ZSd2ZSBiZWVuIGdpdmVuIHRvIHBs YXkgd2l0aC4gKi8KLSAgICBtYXBfZnJlZShQSFlTX1BGTihtaW4pLCByYW5nZT4+UEFHRV9TSElG VCk7CiAKLSAgICAvKiBUaGUgYnVkZHkgbGlzdHMgYXJlIGFkZHJlc3NlZCBpbiBoaWdoIG1lbW9y eS4gKi8KLSAgICBtaW4gPSAodW5zaWduZWQgbG9uZykgdG9fdmlydChtaW4pOwotICAgIG1heCA9 ICh1bnNpZ25lZCBsb25nKSB0b192aXJ0KG1heCk7Ci0KLSAgICB3aGlsZSAoIHJhbmdlICE9IDAg KQorICAgIGZvciAoIG0gPSAwOyBtIDwgZTgyMF9lbnRyaWVzOyBtKysgKQogICAgIHsKLSAgICAg ICAgLyoKLSAgICAgICAgICogTmV4dCBjaHVuayBpcyBsaW1pdGVkIGJ5IGFsaWdubWVudCBvZiBt aW4sIGJ1dCBhbHNvCi0gICAgICAgICAqIG11c3Qgbm90IGJlIGJpZ2dlciB0aGFuIHJlbWFpbmlu ZyByYW5nZS4KLSAgICAgICAgICovCi0gICAgICAgIGZvciAoIGkgPSBQQUdFX1NISUZUOyAoMVVM PDwoaSsxKSkgPD0gcmFuZ2U7IGkrKyApCi0gICAgICAgICAgICBpZiAoIG1pbiAmICgxVUw8PGkp ICkgYnJlYWs7CisgICAgICAgIGlmICggZTgyMF9tYXBbbV0udHlwZSAhPSBFODIwX1JBTSApCisg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCBlODIwX21hcFttXS5hZGRyICsgZTgy MF9tYXBbbV0uc2l6ZSA+PSBVTE9OR19NQVggKQorICAgICAgICAgICAgQlVHKCk7CiAKKyAgICAg ICAgcl9taW4gPSBlODIwX21hcFttXS5hZGRyOworICAgICAgICByX21heCA9IHJfbWluICsgZTgy MF9tYXBbbV0uc2l6ZTsKKyAgICAgICAgaWYgKCByX21heCA8PSBtaW4gfHwgcl9taW4gPj0gbWF4 ICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIHJfbWluIDwgbWluICkKKyAg ICAgICAgICAgIHJfbWluID0gbWluOworICAgICAgICBpZiAoIHJfbWF4ID4gbWF4ICkKKyAgICAg ICAgICAgIHJfbWF4ID0gbWF4OwogCi0gICAgICAgIGNoID0gKGNodW5rX2hlYWRfdCAqKW1pbjsK LSAgICAgICAgbWluICAgKz0gKDFVTDw8aSk7Ci0gICAgICAgIHJhbmdlIC09ICgxVUw8PGkpOwot ICAgICAgICBjdCA9IChjaHVua190YWlsX3QgKiltaW4tMTsKLSAgICAgICAgaSAtPSBQQUdFX1NI SUZUOwotICAgICAgICBjaC0+bGV2ZWwgICAgICAgPSBpOwotICAgICAgICBjaC0+bmV4dCAgICAg ICAgPSBmcmVlX2hlYWRbaV07Ci0gICAgICAgIGNoLT5wcHJldiAgICAgICA9ICZmcmVlX2hlYWRb aV07Ci0gICAgICAgIGNoLT5uZXh0LT5wcHJldiA9ICZjaC0+bmV4dDsKLSAgICAgICAgZnJlZV9o ZWFkW2ldICAgID0gY2g7Ci0gICAgICAgIGN0LT5sZXZlbCAgICAgICA9IGk7CisgICAgICAgIHBy aW50aygiICAgIEFkZGluZyBtZW1vcnkgcmFuZ2UgJWx4LSVseFxuIiwgcl9taW4sIHJfbWF4KTsK KworICAgICAgICAvKiBUaGUgYnVkZHkgbGlzdHMgYXJlIGFkZHJlc3NlZCBpbiBoaWdoIG1lbW9y eS4gKi8KKyAgICAgICAgcl9taW4gPSAodW5zaWduZWQgbG9uZyl0b192aXJ0KHJfbWluKTsKKyAg ICAgICAgcl9tYXggPSAodW5zaWduZWQgbG9uZyl0b192aXJ0KHJfbWF4KTsKKyAgICAgICAgcmFu Z2UgPSByX21heCAtIHJfbWluOworCisgICAgICAgIC8qIEZyZWUgdXAgdGhlIG1lbW9yeSB3ZSd2 ZSBiZWVuIGdpdmVuIHRvIHBsYXkgd2l0aC4gKi8KKyAgICAgICAgbWFwX2ZyZWUoUEhZU19QRk4o cl9taW4pLCByYW5nZSA+PiBQQUdFX1NISUZUKTsKKworICAgICAgICB3aGlsZSAoIHJhbmdlICE9 IDAgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTmV4dCBjaHVu ayBpcyBsaW1pdGVkIGJ5IGFsaWdubWVudCBvZiBtaW4sIGJ1dCBhbHNvCisgICAgICAgICAgICAg KiBtdXN0IG5vdCBiZSBiaWdnZXIgdGhhbiByZW1haW5pbmcgcmFuZ2UuCisgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgIGZvciAoIGkgPSBQQUdFX1NISUZUOyAoMVVMIDw8IChpICsgMSkpIDw9 IHJhbmdlOyBpKysgKQorICAgICAgICAgICAgICAgIGlmICggcl9taW4gJiAoMVVMIDw8IGkpICkg YnJlYWs7CisKKyAgICAgICAgICAgIGNoID0gKGNodW5rX2hlYWRfdCAqKXJfbWluOworICAgICAg ICAgICAgcl9taW4gKz0gMVVMIDw8IGk7CisgICAgICAgICAgICByYW5nZSAtPSAxVUwgPDwgaTsK KyAgICAgICAgICAgIGN0ID0gKGNodW5rX3RhaWxfdCAqKXJfbWluIC0gMTsKKyAgICAgICAgICAg IGkgLT0gUEFHRV9TSElGVDsKKyAgICAgICAgICAgIGNoLT5sZXZlbCAgICAgICA9IGk7CisgICAg ICAgICAgICBjaC0+bmV4dCAgICAgICAgPSBmcmVlX2hlYWRbaV07CisgICAgICAgICAgICBjaC0+ cHByZXYgICAgICAgPSAmZnJlZV9oZWFkW2ldOworICAgICAgICAgICAgY2gtPm5leHQtPnBwcmV2 ID0gJmNoLT5uZXh0OworICAgICAgICAgICAgZnJlZV9oZWFkW2ldICAgID0gY2g7CisgICAgICAg ICAgICBjdC0+bGV2ZWwgICAgICAgPSBpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbW1fYWxs b2NfYml0bWFwX3JlbWFwKCk7CkBAIC0zNzcsOSArNDAxLDYgQEAgdm9pZCBpbml0X21tKHZvaWQp CiAgICAgLyoKICAgICAgKiBub3cgd2UgY2FuIGluaXRpYWxpc2UgdGhlIHBhZ2UgYWxsb2NhdG9y CiAgICAgICovCi0gICAgcHJpbnRrKCJNTTogSW5pdGlhbGlzZSBwYWdlIGFsbG9jYXRvciBmb3Ig JWx4KCVseCktJWx4KCVseClcbiIsCi0gICAgICAgICAgICh1X2xvbmcpdG9fdmlydChQRk5fUEhZ UyhzdGFydF9wZm4pKSwgKHVfbG9uZylQRk5fUEhZUyhzdGFydF9wZm4pLAotICAgICAgICAgICAo dV9sb25nKXRvX3ZpcnQoUEZOX1BIWVMobWF4X3BmbikpLCAodV9sb25nKVBGTl9QSFlTKG1heF9w Zm4pKTsKICAgICBpbml0X3BhZ2VfYWxsb2NhdG9yKFBGTl9QSFlTKHN0YXJ0X3BmbiksIFBGTl9Q SFlTKG1heF9wZm4pKTsKICAgICBwcmludGsoIk1NOiBkb25lXG4iKTsKIAotLSAKMi42LjYKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK