From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH 21/22] mini-os: get physical memory map Date: Tue, 23 Aug 2016 17:16:07 +0200 Message-ID: <1471965368-6159-22-git-send-email-jgross@suse.com> References: <1471965368-6159-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: <1471965368-6159-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 Y29tPgotLS0KIGFyY2gvYXJtL21tLmMgICAgICAgICB8ICA4ICsrKysrKwogYXJjaC94ODYvbW0u YyAgICAgICAgIHwgNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogYXJjaC94ODYvc2V0dXAuYyAgICAgIHwgIDEgKwogaW5jbHVkZS9lODIwLmggICAgICAg IHwgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS94ODYvYXJjaF9t bS5oIHwgIDQgKysrCiBtbS5jICAgICAgICAgICAgICAgICAgfCA3OSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIDYgZmlsZXMgY2hhbmdlZCwgMTgz IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1 ZGUvZTgyMC5oCgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0uYyBiL2FyY2gvYXJtL21tLmMKaW5k ZXggZGJkZTE2Mi4uOGMxNTZjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0uYworKysgYi9hcmNo L2FybS9tbS5jCkBAIC03LDYgKzcsMTQgQEAKICNpbmNsdWRlIDxsaWIuaD4KIAogdWludDMyX3Qg cGh5c2ljYWxfYWRkcmVzc19vZmZzZXQ7CitzdHJ1Y3QgZTgyMGVudHJ5IGU4MjBfbWFwWzFdID0g eworICAgIHsKKyAgICAgICAgLmFkZHIgPSAwLAorICAgICAgICAuc2l6ZSA9IFVMT05HX01BWCAt IDEsCisgICAgICAgIC50eXBlID0gRTgyMF9SQU0KKyAgICB9Cit9OwordW5zaWduZWQgZTgyMF9l bnRyaWVzID0gMTsKIAogdW5zaWduZWQgbG9uZyBhbGxvY2F0ZV9vbmRlbWFuZCh1bnNpZ25lZCBs b25nIG4sIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50KQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYv bW0uYyBiL2FyY2gveDg2L21tLmMKaW5kZXggNzYyNTk5ZC4uOGRkOTBiOCAxMDA2NDQKLS0tIGEv YXJjaC94ODYvbW0uYworKysgYi9hcmNoL3g4Ni9tbS5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5j bHVkZSA8bWluaS1vcy90eXBlcy5oPgogI2luY2x1ZGUgPG1pbmktb3MvbGliLmg+CiAjaW5jbHVk ZSA8bWluaS1vcy94bWFsbG9jLmg+CisjaW5jbHVkZSA8bWluaS1vcy9lODIwLmg+CiAjaW5jbHVk ZSA8eGVuL21lbW9yeS5oPgogCiAjaWZkZWYgTU1fREVCVUcKQEAgLTYzLDYgKzY0LDE1IEBAIGV4 dGVybiBjaGFyIHN0YWNrW107CiBleHRlcm4gdm9pZCBwYWdlX3dhbGsodW5zaWduZWQgbG9uZyB2 YSk7CiAKICNpZmRlZiBDT05GSUdfUEFSQVZJUlQKK3N0cnVjdCBlODIwZW50cnkgZTgyMF9tYXBb MV0gPSB7CisgICAgeworICAgICAgICAuYWRkciA9IDAsCisgICAgICAgIC5zaXplID0gVUxPTkdf TUFYIC0gMSwKKyAgICAgICAgLnR5cGUgPSBFODIwX1JBTQorICAgIH0KK307Cit1bnNpZ25lZCBl ODIwX2VudHJpZXMgPSAxOworCiB2b2lkIGFyY2hfbW1fcHJlaW5pdCh2b2lkICpwKQogewogICAg IHN0YXJ0X2luZm9fdCAqc2kgPSBwOwpAQCAtMTAyLDEwICsxMTIsMjUgQEAgZGVzY19wdHIgaWR0 X3B0ciA9CiAgICAgLmJhc2UgPSAodW5zaWduZWQgbG9uZykmaWR0LAogfTsKIAorc3RydWN0IGU4 MjBlbnRyeSBlODIwX21hcFtFODIwX01BWF07Cit1bnNpZ25lZCBlODIwX2VudHJpZXM7CisKK3N0 YXRpYyBjaGFyICplODIwX3R5cGVzW0U4MjBfVFlQRVNdID0geworICAgIFtFODIwX1JBTV0gICAg ICA9ICJSQU0iLAorICAgIFtFODIwX1JFU0VSVkVEXSA9ICJSZXNlcnZlZCIsCisgICAgW0U4MjBf QUNQSV0gICAgID0gIkFDUEkiLAorICAgIFtFODIwX05WU10gICAgICA9ICJOVlMiLAorICAgIFtF ODIwX1VOVVNBQkxFXSA9ICJVbnVzYWJsZSIsCisgICAgW0U4MjBfUE1FTV0gICAgID0gIlBNRU0i Cit9OworCiB2b2lkIGFyY2hfbW1fcHJlaW5pdCh2b2lkICpwKQogewogICAgIGxvbmcgcmV0Owog ICAgIGRvbWlkX3QgZG9taWQgPSBET01JRF9TRUxGOworICAgIHN0cnVjdCB4ZW5fbWVtb3J5X21h cCBtZW1tYXA7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgbG9uZyBwZm4sIG1heCA9IDA7CiAK ICAgICBwdF9iYXNlID0gcGFnZV90YWJsZV9iYXNlOwogICAgIGZpcnN0X2ZyZWVfcGZuID0gUEZO X1VQKHRvX3BoeXMoJl9lbmQpKTsKQEAgLTExNiw2ICsxNDEsNTMgQEAgdm9pZCBhcmNoX21tX3By ZWluaXQodm9pZCAqcCkKICAgICAgICAgZG9fZXhpdCgpOwogICAgIH0KICAgICBsYXN0X2ZyZWVf cGZuID0gcmV0OworCisgICAgbWVtbWFwLm5yX2VudHJpZXMgPSBFODIwX01BWDsKKyAgICBzZXRf eGVuX2d1ZXN0X2hhbmRsZShtZW1tYXAuYnVmZmVyLCBlODIwX21hcCk7CisgICAgcmV0ID0gSFlQ RVJWSVNPUl9tZW1vcnlfb3AoWEVOTUVNX21lbW9yeV9tYXAsICZtZW1tYXApOworICAgIGlmICgg cmV0IDwgMCApCisgICAgeworICAgICAgICB4cHJpbnRrKCJjb3VsZCBub3QgZ2V0IG1lbW9yeSBt YXBcbiIpOworICAgICAgICBkb19leGl0KCk7CisgICAgfQorICAgIGU4MjBfZW50cmllcyA9IG1l bW1hcC5ucl9lbnRyaWVzOworCisgICAgZm9yICggaSA9IDA7IGkgPCBlODIwX2VudHJpZXM7IGkr KyApCisgICAgeworICAgICAgICBpZiAoIGU4MjBfbWFwW2ldLnR5cGUgIT0gRTgyMF9SQU0gKQor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHBmbiA9IChlODIwX21hcFtpXS5hZGRyICsg ZTgyMF9tYXBbaV0uc2l6ZSkgPj4gUEFHRV9TSElGVDsKKyAgICAgICAgaWYgKCBwZm4gPiBtYXgg KQorICAgICAgICAgICAgbWF4ID0gcGZuOworICAgIH0KKworICAgIGlmICggbWF4IDwgbGFzdF9m cmVlX3BmbiApCisgICAgICAgIGxhc3RfZnJlZV9wZm4gPSBtYXg7Cit9CisKK3ZvaWQgYXJjaF9w cmludF9tZW1tYXAodm9pZCkKK3sKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBsb25nIGZyb20s IHRvOworICAgIGNoYXIgKnR5cGU7CisgICAgY2hhciBidWZbMTJdOworCisgICAgcHJpbnRrKCJN ZW1vcnkgbWFwOlxuIik7CisgICAgZm9yICggaSA9IDA7IGkgPCBlODIwX2VudHJpZXM7IGkrKyAp CisgICAgeworICAgICAgICBpZiAoIGU4MjBfbWFwW2ldLnR5cGUgPj0gRTgyMF9UWVBFUyB8fCAh ZTgyMF90eXBlc1tlODIwX21hcFtpXS50eXBlXSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNu cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlOHgiLCBlODIwX21hcFtpXS50eXBlKTsKKyAgICAg ICAgICAgIHR5cGUgPSBidWY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg ICAgICAgICAgICB0eXBlID0gZTgyMF90eXBlc1tlODIwX21hcFtpXS50eXBlXTsKKyAgICAgICAg fQorICAgICAgICBmcm9tID0gZTgyMF9tYXBbaV0uYWRkcjsKKyAgICAgICAgdG8gPSBmcm9tICsg ZTgyMF9tYXBbaV0uc2l6ZSAtIDE7CisgICAgICAgIHByaW50aygiJTAxMmx4LSUwMTJseDogJXNc biIsIGZyb20sIHRvLCB0eXBlKTsKKyAgICB9CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJj aC94ODYvc2V0dXAuYyBiL2FyY2gveDg2L3NldHVwLmMKaW5kZXggOTQ4YjA4YS4uODI5YjAzYyAx MDA2NDQKLS0tIGEvYXJjaC94ODYvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9zZXR1cC5jCkBAIC0x NTAsNiArMTUwLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfc3RhcnRfb2ZfZGF5KHZvaWQgKnApCiAg ICAgcHJpbnRrKCIgICAgICAgZmxhZ3M6IDB4JXhcbiIsICh1bnNpZ25lZCBpbnQpc2ktPmZsYWdz KTsKICAgICBwcmludGsoIiAgICBjbWRfbGluZTogJXNcbiIsIGNtZGxpbmUpOwogICAgIHByaW50 aygiICAgICAgIHN0YWNrOiAlcC0lcFxuIiwgc3RhY2ssIHN0YWNrICsgc2l6ZW9mKHN0YWNrKSk7 CisgICAgYXJjaF9wcmludF9tZW1tYXAoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNs dWRlL2U4MjAuaCBiL2luY2x1ZGUvZTgyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjkyMDU1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2U4MjAuaApAQCAtMCww ICsxLDQ4IEBACisvKiAtKi0gIE1vZGU6QzsgYy1iYXNpYy1vZmZzZXQ6NDsgdGFiLXdpZHRoOjQg LSotCisgKgorICogKEMpIDIwMTYgLSBKdWVyZ2VuIEdyb3NzLCBTVVNFIExpbnV4IEdtYkgKKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisg KiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCisgKi8KKworI2lmbmRlZiBfX0U4MjBfSEVBREVSCisjZGVmaW5lIF9fRTgyMF9IRUFE RVIKKworLyogUEMgQklPUyBzdGFuZGFyZCBFODIwIHR5cGVzIGFuZCBzdHJ1Y3R1cmUuICovCisj ZGVmaW5lIEU4MjBfUkFNICAgICAgICAgIDEKKyNkZWZpbmUgRTgyMF9SRVNFUlZFRCAgICAgMgor I2RlZmluZSBFODIwX0FDUEkgICAgICAgICAzCisjZGVmaW5lIEU4MjBfTlZTICAgICAgICAgIDQK KyNkZWZpbmUgRTgyMF9VTlVTQUJMRSAgICAgNQorI2RlZmluZSBFODIwX1BNRU0gICAgICAgICA3 CisjZGVmaW5lIEU4MjBfVFlQRVMgICAgICAgIDgKKworc3RydWN0IF9fcGFja2VkIGU4MjBlbnRy eSB7CisgICAgdWludDY0X3QgYWRkcjsKKyAgICB1aW50NjRfdCBzaXplOworICAgIHVpbnQzMl90 IHR5cGU7Cit9OworCisvKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzLiAqLworI2RlZmluZSBF ODIwX01BWCAgICAgICAgICAxMjgKKworZXh0ZXJuIHN0cnVjdCBlODIwZW50cnkgZTgyMF9tYXBb XTsKK2V4dGVybiB1bnNpZ25lZCBlODIwX2VudHJpZXM7CisKKyNlbmRpZiAvKl9fRTgyMF9IRUFE RVIqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ODYvYXJjaF9tbS5oIGIvaW5jbHVkZS94ODYvYXJj aF9tbS5oCmluZGV4IDkzNzJmMWUuLmFiOGE1M2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveDg2L2Fy Y2hfbW0uaAorKysgYi9pbmNsdWRlL3g4Ni9hcmNoX21tLmgKQEAgLTI3OSw2ICsyNzksMTAgQEAg cGdlbnRyeV90ICpuZWVkX3BndCh1bnNpZ25lZCBsb25nIGFkZHIpOwogdm9pZCBhcmNoX21tX3By ZWluaXQodm9pZCAqcCk7CiB1bnNpZ25lZCBsb25nIGFsbG9jX3ZpcnRfa2VybmVsKHVuc2lnbmVk IG5fcGFnZXMpOwogCisjaWZuZGVmIENPTkZJR19QQVJBVklSVAordm9pZCBhcmNoX3ByaW50X21l bW1hcCh2b2lkKTsKKyNlbmRpZgorCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BUkNIX01NX0hfICov CmRpZmYgLS1naXQgYS9tbS5jIGIvbW0uYwppbmRleCBjNzZiZTdmLi45MzJjZWViIDEwMDY0NAot LS0gYS9tbS5jCisrKyBiL21tLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxtaW5pLW9z L3R5cGVzLmg+CiAjaW5jbHVkZSA8bWluaS1vcy9saWIuaD4KICNpbmNsdWRlIDxtaW5pLW9zL3ht YWxsb2MuaD4KKyNpbmNsdWRlIDxtaW5pLW9zL2U4MjAuaD4KIAogLyoqKioqKioqKioqKioqKioq KioqKgogICogQUxMT0NBVElPTiBCSVRNQVAKQEAgLTE0NywxMCArMTQ4LDE0IEBAIHN0YXRpYyBj aHVua19oZWFkX3QgIGZyZWVfdGFpbFtGUkVFTElTVF9TSVpFXTsKICAqLwogc3RhdGljIHZvaWQg aW5pdF9wYWdlX2FsbG9jYXRvcih1bnNpZ25lZCBsb25nIG1pbiwgdW5zaWduZWQgbG9uZyBtYXgp CiB7Ci0gICAgaW50IGk7CisgICAgaW50IGksIG07CiAgICAgdW5zaWduZWQgbG9uZyByYW5nZTsK KyAgICB1bnNpZ25lZCBsb25nIHJfbWluLCByX21heDsKICAgICBjaHVua19oZWFkX3QgKmNoOwog ICAgIGNodW5rX3RhaWxfdCAqY3Q7CisKKyAgICBwcmludGsoIk1NOiBJbml0aWFsaXNlIHBhZ2Ug YWxsb2NhdG9yIGZvciAlbHgoJWx4KS0lbHgoJWx4KVxuIiwKKyAgICAgICAgICAgKHVfbG9uZyl0 b192aXJ0KG1pbiksIG1pbiwgKHVfbG9uZyl0b192aXJ0KG1heCksIG1heCk7CiAgICAgZm9yICgg aSA9IDA7IGkgPCBGUkVFTElTVF9TSVpFOyBpKysgKQogICAgIHsKICAgICAgICAgZnJlZV9oZWFk W2ldICAgICAgID0gJmZyZWVfdGFpbFtpXTsKQEAgLTE2NiwzOCArMTcxLDU3IEBAIHN0YXRpYyB2 b2lkIGluaXRfcGFnZV9hbGxvY2F0b3IodW5zaWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxvbmcg bWF4KQogICAgIG1tX2FsbG9jX2JpdG1hcF9zaXplICA9IHJvdW5kX3BndXAobW1fYWxsb2NfYml0 bWFwX3NpemUpOwogICAgIG1tX2FsbG9jX2JpdG1hcCA9ICh1bnNpZ25lZCBsb25nICopdG9fdmly dChtaW4pOwogICAgIG1pbiAgICAgICAgICs9IG1tX2FsbG9jX2JpdG1hcF9zaXplOwotICAgIHJh bmdlICAgICAgICA9IG1heCAtIG1pbjsKIAogICAgIC8qIEFsbCBhbGxvY2F0ZWQgYnkgZGVmYXVs dC4gKi8KICAgICBtZW1zZXQobW1fYWxsb2NfYml0bWFwLCB+MCwgbW1fYWxsb2NfYml0bWFwX3Np emUpOwotICAgIC8qIEZyZWUgdXAgdGhlIG1lbW9yeSB3ZSd2ZSBiZWVuIGdpdmVuIHRvIHBsYXkg d2l0aC4gKi8KLSAgICBtYXBfZnJlZShQSFlTX1BGTihtaW4pLCByYW5nZT4+UEFHRV9TSElGVCk7 CiAKLSAgICAvKiBUaGUgYnVkZHkgbGlzdHMgYXJlIGFkZHJlc3NlZCBpbiBoaWdoIG1lbW9yeS4g Ki8KLSAgICBtaW4gPSAodW5zaWduZWQgbG9uZykgdG9fdmlydChtaW4pOwotICAgIG1heCA9ICh1 bnNpZ25lZCBsb25nKSB0b192aXJ0KG1heCk7Ci0KLSAgICB3aGlsZSAoIHJhbmdlICE9IDAgKQor ICAgIGZvciAoIG0gPSAwOyBtIDwgZTgyMF9lbnRyaWVzOyBtKysgKQogICAgIHsKLSAgICAgICAg LyoKLSAgICAgICAgICogTmV4dCBjaHVuayBpcyBsaW1pdGVkIGJ5IGFsaWdubWVudCBvZiBtaW4s IGJ1dCBhbHNvCi0gICAgICAgICAqIG11c3Qgbm90IGJlIGJpZ2dlciB0aGFuIHJlbWFpbmluZyBy YW5nZS4KLSAgICAgICAgICovCi0gICAgICAgIGZvciAoIGkgPSBQQUdFX1NISUZUOyAoMVVMPDwo aSsxKSkgPD0gcmFuZ2U7IGkrKyApCi0gICAgICAgICAgICBpZiAoIG1pbiAmICgxVUw8PGkpICkg YnJlYWs7CisgICAgICAgIGlmICggZTgyMF9tYXBbbV0udHlwZSAhPSBFODIwX1JBTSApCisgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCBlODIwX21hcFttXS5hZGRyICsgZTgyMF9t YXBbbV0uc2l6ZSA+PSBVTE9OR19NQVggKQorICAgICAgICAgICAgQlVHKCk7CiAKKyAgICAgICAg cl9taW4gPSBlODIwX21hcFttXS5hZGRyOworICAgICAgICByX21heCA9IHJfbWluICsgZTgyMF9t YXBbbV0uc2l6ZTsKKyAgICAgICAgaWYgKCByX21heCA8PSBtaW4gfHwgcl9taW4gPj0gbWF4ICkK KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIHJfbWluIDwgbWluICkKKyAgICAg ICAgICAgIHJfbWluID0gbWluOworICAgICAgICBpZiAoIHJfbWF4ID4gbWF4ICkKKyAgICAgICAg ICAgIHJfbWF4ID0gbWF4OwogCi0gICAgICAgIGNoID0gKGNodW5rX2hlYWRfdCAqKW1pbjsKLSAg ICAgICAgbWluICAgKz0gKDFVTDw8aSk7Ci0gICAgICAgIHJhbmdlIC09ICgxVUw8PGkpOwotICAg ICAgICBjdCA9IChjaHVua190YWlsX3QgKiltaW4tMTsKLSAgICAgICAgaSAtPSBQQUdFX1NISUZU OwotICAgICAgICBjaC0+bGV2ZWwgICAgICAgPSBpOwotICAgICAgICBjaC0+bmV4dCAgICAgICAg PSBmcmVlX2hlYWRbaV07Ci0gICAgICAgIGNoLT5wcHJldiAgICAgICA9ICZmcmVlX2hlYWRbaV07 Ci0gICAgICAgIGNoLT5uZXh0LT5wcHJldiA9ICZjaC0+bmV4dDsKLSAgICAgICAgZnJlZV9oZWFk W2ldICAgID0gY2g7Ci0gICAgICAgIGN0LT5sZXZlbCAgICAgICA9IGk7CisgICAgICAgIHByaW50 aygiICAgIEFkZGluZyBtZW1vcnkgcmFuZ2UgJWx4LSVseFxuIiwgcl9taW4sIHJfbWF4KTsKKwor ICAgICAgICAvKiBUaGUgYnVkZHkgbGlzdHMgYXJlIGFkZHJlc3NlZCBpbiBoaWdoIG1lbW9yeS4g Ki8KKyAgICAgICAgcl9taW4gPSAodW5zaWduZWQgbG9uZyl0b192aXJ0KHJfbWluKTsKKyAgICAg ICAgcl9tYXggPSAodW5zaWduZWQgbG9uZyl0b192aXJ0KHJfbWF4KTsKKyAgICAgICAgcmFuZ2Ug PSByX21heCAtIHJfbWluOworCisgICAgICAgIC8qIEZyZWUgdXAgdGhlIG1lbW9yeSB3ZSd2ZSBi ZWVuIGdpdmVuIHRvIHBsYXkgd2l0aC4gKi8KKyAgICAgICAgbWFwX2ZyZWUoUEhZU19QRk4ocl9t aW4pLCByYW5nZSA+PiBQQUdFX1NISUZUKTsKKworICAgICAgICB3aGlsZSAoIHJhbmdlICE9IDAg KQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTmV4dCBjaHVuayBp cyBsaW1pdGVkIGJ5IGFsaWdubWVudCBvZiBtaW4sIGJ1dCBhbHNvCisgICAgICAgICAgICAgKiBt dXN0IG5vdCBiZSBiaWdnZXIgdGhhbiByZW1haW5pbmcgcmFuZ2UuCisgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgIGZvciAoIGkgPSBQQUdFX1NISUZUOyAoMVVMIDw8IChpICsgMSkpIDw9IHJh bmdlOyBpKysgKQorICAgICAgICAgICAgICAgIGlmICggcl9taW4gJiAoMVVMIDw8IGkpICkgYnJl YWs7CisKKyAgICAgICAgICAgIGNoID0gKGNodW5rX2hlYWRfdCAqKXJfbWluOworICAgICAgICAg ICAgcl9taW4gKz0gMVVMIDw8IGk7CisgICAgICAgICAgICByYW5nZSAtPSAxVUwgPDwgaTsKKyAg ICAgICAgICAgIGN0ID0gKGNodW5rX3RhaWxfdCAqKXJfbWluIC0gMTsKKyAgICAgICAgICAgIGkg LT0gUEFHRV9TSElGVDsKKyAgICAgICAgICAgIGNoLT5sZXZlbCAgICAgICA9IGk7CisgICAgICAg ICAgICBjaC0+bmV4dCAgICAgICAgPSBmcmVlX2hlYWRbaV07CisgICAgICAgICAgICBjaC0+cHBy ZXYgICAgICAgPSAmZnJlZV9oZWFkW2ldOworICAgICAgICAgICAgY2gtPm5leHQtPnBwcmV2ID0g JmNoLT5uZXh0OworICAgICAgICAgICAgZnJlZV9oZWFkW2ldICAgID0gY2g7CisgICAgICAgICAg ICBjdC0+bGV2ZWwgICAgICAgPSBpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbW1fYWxsb2Nf Yml0bWFwX3JlbWFwKCk7CkBAIC0zNzcsOSArNDAxLDYgQEAgdm9pZCBpbml0X21tKHZvaWQpCiAg ICAgLyoKICAgICAgKiBub3cgd2UgY2FuIGluaXRpYWxpc2UgdGhlIHBhZ2UgYWxsb2NhdG9yCiAg ICAgICovCi0gICAgcHJpbnRrKCJNTTogSW5pdGlhbGlzZSBwYWdlIGFsbG9jYXRvciBmb3IgJWx4 KCVseCktJWx4KCVseClcbiIsCi0gICAgICAgICAgICh1X2xvbmcpdG9fdmlydChQRk5fUEhZUyhz dGFydF9wZm4pKSwgKHVfbG9uZylQRk5fUEhZUyhzdGFydF9wZm4pLAotICAgICAgICAgICAodV9s b25nKXRvX3ZpcnQoUEZOX1BIWVMobWF4X3BmbikpLCAodV9sb25nKVBGTl9QSFlTKG1heF9wZm4p KTsKICAgICBpbml0X3BhZ2VfYWxsb2NhdG9yKFBGTl9QSFlTKHN0YXJ0X3BmbiksIFBGTl9QSFlT KG1heF9wZm4pKTsKICAgICBwcmludGsoIk1NOiBkb25lXG4iKTsKIAotLSAKMi42LjYKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94 ZW4tZGV2ZWwK