From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Kiper Subject: [PATCH v11 06/13] efi: create new early memory allocator Date: Mon, 5 Dec 2016 23:25:11 +0100 Message-ID: <1480976718-12198-7-git-send-email-daniel.kiper@oracle.com> References: <1480976718-12198-1-git-send-email-daniel.kiper@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cE1i5-00039i-1c for xen-devel@lists.xenproject.org; Mon, 05 Dec 2016 22:26:09 +0000 In-Reply-To: <1480976718-12198-1-git-send-email-daniel.kiper@oracle.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: jgross@suse.com, sstabellini@kernel.org, andrew.cooper3@citrix.com, cardoe@cardoe.com, pgnet.dev@gmail.com, ning.sun@intel.com, julien.grall@arm.com, jbeulich@suse.com, qiaowei.ren@intel.com, gang.wei@intel.com, fu.wei@linaro.org List-Id: xen-devel@lists.xenproject.org VGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggcGxhY2Vfc3RyaW5nKCkgd2hpY2ggaXMgdXNlZCBhcyBl YXJseSBtZW1vcnkKYWxsb2NhdG9yLiBJdCBnZXRzIG1lbW9yeSBjaHVua3Mgc3RhcnRpbmcgZnJv bSBzdGFydCBzeW1ib2wgYW5kIGdvZXMKZG93bi4gU2FkbHkgdGhpcyBkb2VzIG5vdCB3b3JrIHdo ZW4gWGVuIGlzIGxvYWRlZCB1c2luZyBtdWx0aWJvb3QyCnByb3RvY29sIGJlY2F1c2UgdGhlbiB0 aGUgc3RhcnQgbGl2ZXMgb24gMSBNaUIgYWRkcmVzcyBhbmQgd2Ugc2hvdWxkCm5vdCBhbGxvY2F0 ZSBhIG1lbW9yeSBmcm9tIGJlbG93IG9mIGl0LiBTbywgSSB0cmllZCB0byB1c2UgbWVtX2xvd2Vy CmFkZHJlc3MgY2FsY3VsYXRlZCBieSBHUlVCMi4gSG93ZXZlciwgdGhpcyBzb2x1dGlvbiB3b3Jr cyBvbmx5IG9uIHNvbWUKbWFjaGluZXMuIFRoZXJlIGFyZSBtYWNoaW5lcyBpbiB0aGUgd2lsZCAo ZS5nLiBEZWxsIFBvd2VyRWRnZSBSODIwKQp3aGljaCB1c2VzIGZpcnN0IH42NDAgS2lCIGZvciBi b290IHNlcnZpY2VzIGNvZGUgb3IgZGF0YS4uLiA6LSgoKApIZW5jZSwgd2UgbmVlZCBuZXcgbWVt b3J5IGFsbG9jYXRvciBmb3IgWGVuIEVGSSBib290IGNvZGUgd2hpY2ggaXMKcXVpdGUgc2ltcGxl IGFuZCBnZW5lcmljIGFuZCBjb3VsZCBiZSB1c2VkIGJ5IHBsYWNlX3N0cmluZygpIGFuZAplZmlf YXJjaF9hbGxvY2F0ZV9tbWFwX2J1ZmZlcigpLiBJIHRoaW5rIGFib3V0IGZvbGxvd2luZyBzb2x1 dGlvbnM6CgoxKSBXZSBjb3VsZCB1c2UgbmF0aXZlIEVGSSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAo ZS5nLiBBbGxvY2F0ZVBvb2woKQogICBvciBBbGxvY2F0ZVBhZ2VzKCkpIHRvIGdldCBtZW1vcnkg Y2h1bmsuIEhvd2V2ZXIsIGxhdGVyIChzb21ld2hlcmUKICAgaW4gX19zdGFydF94ZW4oKSkgd2Ug bXVzdCBjb3B5IGl0cyBjb250ZW50cyB0byBzYWZlIHBsYWNlIG9yIHJlc2VydmUKICAgaXQgaW4g ZTgyMCBtZW1vcnkgbWFwIGFuZCBtYXAgaXQgaW4gWGVuIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4g VGhpcwogICBtZWFucyB0aGF0IHRoZSBjb2RlIHJlZmVycmluZyB0byBYZW4gY29tbWFuZCBsaW5l LCBsb2FkZWQgbW9kdWxlcyBhbmQKICAgRUZJIG1lbW9yeSBtYXAsIG1vc3RseSBpbiBfX3N0YXJ0 X3hlbigpLCB3aWxsIGJlIGZ1cnRoZXIgY29tcGxpY2F0ZWQKICAgYW5kIGRpdmVyZ2UgZnJvbSBs ZWdhY3kgQklPUyBjYXNlcy4gQWRkaXRpb25hbGx5LCBib3RoIGZvcm1lciB0aGluZ3MKICAgaGF2 ZSB0byBiZSBwbGFjZWQgYmVsb3cgNCBHaUIgYmVjYXVzZSB0aGVpciBhZGRyZXNzZXMgYXJlIHN0 b3JlZCBpbgogICBtdWx0aWJvb3RfaW5mb190IHN0cnVjdHVyZSB3aGljaCBoYXMgMzItYml0IHJl bGV2YW50IG1lbWJlcnMuCgoyKSBXZSBtYXkgYWxsb2NhdGUgbWVtb3J5IGFyZWEgc3RhdGljYWxs eSBzb21ld2hlcmUgaW4gWGVuIGNvZGUgd2hpY2gKICAgY291bGQgYmUgdXNlZCBhcyBtZW1vcnkg cG9vbCBmb3IgZWFybHkgZHluYW1pYyBhbGxvY2F0aW9ucy4gTG9va3MKICAgcXVpdGUgc2ltcGxl LiBBZGRpdGlvbmFsbHksIGl0IHdvdWxkIG5vdCBkZXBlbmQgb24gRUZJIGF0IGFsbCBhbmQKICAg Y291bGQgYmUgdXNlZCBvbiBsZWdhY3kgQklPUyBwbGF0Zm9ybXMgaWYgd2UgbmVlZCBpdC4gSG93 ZXZlciwgd2UKICAgbXVzdCBjYXJlZnVsbHkgY2hvb3NlIHNpemUgb2YgdGhpcyBwb29sLiBXZSBk byBub3Qgd2FudCBpbmNyZWFzZSBYZW4KICAgYmluYXJ5IHNpemUgdG9vIG11Y2ggYW5kIHdhc3Rl IHRvbyBtdWNoIG1lbW9yeSBidXQgYWxzbyB3ZSBtdXN0IGZpdAogICBhdCBsZWFzdCBtZW1vcnkg bWFwIG9uIHg4NiBFRkkgcGxhdGZvcm1zLiBBcyBJIHNhdyBvbiBzbWFsbCBtYWNoaW5lLAogICBl LmcuIElCTSBTeXN0ZW0geDM1NTAgTTIgd2l0aCA4IEdpQiBSQU0sIG1lbW9yeSBtYXAgbWF5IGNv bnRhaW4gbW9yZQogICB0aGFuIDIwMCBlbnRyaWVzLiBFdmVyeSBlbnRyeSBvbiB4ODYtNjQgcGxh dGZvcm0gaXMgNDAgYnl0ZXMgaW4gc2l6ZS4KICAgU28sIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCBt b3JlIHRoYW4gOCBLaUIgZm9yIEVGSSBtZW1vcnkgbWFwIG9ubHkuCiAgIEFkZGl0aW9uYWxseSwg aWYgd2UgdXNlIHRoaXMgbWVtb3J5IHBvb2wgZm9yIFhlbiBhbmQgbW9kdWxlcyBjb21tYW5kCiAg IGxpbmUgc3RvcmFnZSAoaXQgd291bGQgYmUgdXNlZCB3aGVuIHhlbi5lZmkgaXMgZXhlY3V0ZWQg YXMgRUZJIGFwcGxpY2F0aW9uKQogICB0aGVuIHdlIHNob3VsZCBhZGQsIEkgdGhpbmssIGFib3V0 IDEgS2lCLiBJbiB0aGlzIGNhc2UsIHRvIGJlIG9uIHNhZmUKICAgc2lkZSwgd2Ugc2hvdWxkIGFz c3VtZSBhdCBsZWFzdCA2NCBLaUIgcG9vbCBmb3IgZWFybHkgbWVtb3J5IGFsbG9jYXRpb25zLgog ICBXaGljaCBpcyBhYm91dCA0IHRpbWVzIG9mIG91ciBlYXJsaWVyIGNhbGN1bGF0aW9ucy4gSG93 ZXZlciwgZHVyaW5nCiAgIGRpc2N1c3Npb24gb24gWGVuLWRldmVsIEphbiBCZXVsaWNoIHN1Z2dl c3RlZCB0aGF0IGp1c3QgaW4gY2FzZSB3ZSBzaG91bGQKICAgdXNlIDEgTWlCIG1lbW9yeSBwb29s IGxpa2UgaXQgaXMgaW4gb3JpZ2luYWwgcGxhY2Vfc3RyaW5nKCkgaW1wbGVtZW50YXRpb24uCiAg IFNvLCBsZXQncyB1c2UgMSBNaUIgYXMgaXQgd2FzIHByb3Bvc2VkLiBJZiB3ZSB0aGluayB0aGF0 IHdlIHNob3VsZCBub3QKICAgd2FzdGUgdW5hbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBwb29sIG9u IHJ1bm5pbmcgc3lzdGVtIHRoZW4gd2UgY2FuIG1hcmsKICAgdGhpcyByZWdpb24gYXMgX19pbml0 ZGF0YSBhbmQgbW92ZSBhbGwgcmVxdWlyZWQgZGF0YSB0byBkeW5hbWljYWxseQogICBhbGxvY2F0 ZWQgcGxhY2VzIHNvbWV3aGVyZSBpbiBfX3N0YXJ0X3hlbigpLgoKMmEpIFdlIGNvdWxkIHB1dCBt ZW1vcnkgcG9vbCBpbnRvIC5ic3MucGFnZV9hbGlnbmVkIHNlY3Rpb24uIFRoZW4gYWxsb2NhdGUK ICAgIG1lbW9yeSBjaHVua3Mgc3RhcnRpbmcgZnJvbSB0aGUgbG93ZXN0IGFkZHJlc3MuIEFmdGVy IGluaXQgcGhhc2Ugd2UgY2FuCiAgICBmcmVlIHVudXNlZCBwb3J0aW9uIG9mIHRoZSBtZW1vcnkg cG9vbCBhcyBpbiBjYXNlIG9mIC5pbml0LnRleHQgb3IgLmluaXQuZGF0YQogICAgc2VjdGlvbnMu IFRoaXMgd2F5IHdlIGRvIG5vdCBuZWVkIHRvIGFsbG9jYXRlIGFueSBzcGFjZSBpbiBpbWFnZSBm aWxlIGFuZAogICAgZnJlZWluZyBvZiB1bnVzZWQgYXJlYSBpbiB0aGUgbWVtb3J5IHBvb2wgaXMg dmVyeSBzaW1wbGUuCgpOb3cgIzJhIHNvbHV0aW9uIGlzIGltcGxlbWVudGVkIGJlY2F1c2UgaXQg aXMgcXVpdGUgc2ltcGxlIGFuZCByZXF1aXJlcwpsaW1pdGVkIG51bWJlciBvZiBjaGFuZ2VzLCBl c3BlY2lhbGx5IGluIF9fc3RhcnRfeGVuKCkuCgpOZXcgYWxsb2NhdG9yIGlzIHF1aXRlIGdlbmVy aWMgYW5kIGNhbiBiZSB1c2VkIG9uIEFSTSBwbGF0Zm9ybXMgdG9vLgpUaG91Z2ggaXQgaXMgbm90 IGVuYWJsZWQgb24gQVJNIHlldCBkdWUgdG8gbGFjayBvZiBzb21lIHByZXJlcS4KTGlzdCBvZiB0 aGVtIGlzIHBsYWNlZCBiZWZvcmUgZWJtYWxsb2MgY29kZS4KClNpZ25lZC1vZmYtYnk6IERhbmll bCBLaXBlciA8ZGFuaWVsLmtpcGVyQG9yYWNsZS5jb20+Ci0tLQp2MTEgLSBzdWdnZXN0aW9ucy9m aXhlczoKICAgIC0gI2lmZGVmIG9ubHkgRUJNQUxMT0NfU0laRSBmcm9tIGVibWFsbG9jIG1hY2hp bmVyeQogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKS4KCnYxMCAtIHN1Z2dlc3Rpb25z L2ZpeGVzOgogICAgLSByZW1vdmUgdW5uZWVkZWQgQVJNIGZyZWVfZWJtYWxsb2NfdW51c2VkX21l bSgpIHN0dWIuCgp2OSAtIHN1Z2dlc3Rpb25zL2ZpeGVzOgogICAtIGNhbGwgZnJlZV9lYm1hbGxv Y191bnVzZWRfbWVtKCkgZnJvbSBlZmlfaW5pdF9tZW1vcnkoKQogICAgIGluc3RlYWQgb2YgeGVu L2FyY2gvYXJtL3NldHVwLmM6aW5pdF9kb25lKCkKICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVs aWNoKSwKICAgLSBpbXByb3ZlIGNvbW1lbnRzLgoKdjggLSBzdWdnZXN0aW9ucy9maXhlczoKICAg LSBkaXNhYmxlIHdob2xlIGVibWFsbG9jIG1hY2hpbmVyeSBvbiBBUk0gcGxhdGZvcm1zLAogICAt IGFkZCBjb21tZW50IHNheWluZyB3aGF0IHNob3VsZCBiZSBkb25lIGJlZm9yZQogICAgIGVuYWJs aW5nIGVibWFsbG9jIG9uIEFSTSwKICAgICAoc3VnZ2VzdGVkIGJ5IEp1bGllbiBHcmFsbCksCiAg IC0gbW92ZSBlYm1hbGxvYyBjb2RlIGJlZm9yZSBlZmktYm9vdC5oIGluY2x1c2lvbiBhbmQKICAg ICByZW1vdmUgdW5uZWVkZWQgZm9yd2FyZCBkZWNsYXJhdGlvbgogICAgIChzdWdnZXN0ZWQgYnkg SmFuIEJldWxpY2gpLAogICAtIHJlbW92ZSBmcmVlX2VibWFsbG9jX3VudXNlZF9tZW0oKSBjYWxs IGZyb20KICAgICB4ZW4vYXJjaC9hcm0vc2V0dXAuYzppbml0X2RvbmUoKQogICAgIChzdWdnZXN0 ZWQgYnkgSnVsaWVuIEdyYWxsKSwKICAgLSBpbXByb3ZlIGNvbW1pdCBtZXNzYWdlLgoKdjcgLSBz dWdnZXN0aW9ucy9maXhlczoKICAgLSBlbmFibGUgbW9zdCBvZiBlYm1hbGxvYyBtYWNoaW5lcnkg b24gQVJNIHBsYXRmb3JtcwogICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpLAogICAtIHJl bW92ZSB1bm5lZWRlZCBjYXN0CiAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCksCiAgIC0g d3JhcCBsb25nIGxpbmUKICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKSwKICAgLSBpbXBy b3ZlIGNvbW1pdCBtZXNzYWdlLgoKdjYgLSBzdWdnZXN0aW9ucy9maXhlczoKICAgLSBvcHRpbWl6 ZSBlYm1hbGxvYyBhbGxvY2F0b3IsCiAgIC0gbW92ZSBlYm1hbGxvYyBtYWNoaW5lcnkgdG8geGVu L2NvbW1vbi9lZmkvYm9vdC5jCiAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCksCiAgIC0g ZW5mb3JjZSBQQUdFX1NJWkUgZWJtYWxsb2NfbWVtIGFsaWdubWVudAogICAgIChzdWdnZXN0ZWQg YnkgSmFuIEJldWxpY2gpLAogICAtIGVibWFsbG9jKCkgbXVzdCBhbGxvY2F0ZSBwcm9wZXJseQog ICAgIGFsaWduZWQgbWVtb3J5IHJlZ2lvbnMKICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNo KSwKICAgLSBwcmludGsoKSBzaG91bGQgdXNlIFhFTkxPR19JTkZPCiAgICAgKHN1Z2dlc3RlZCBi eSBKYW4gQmV1bGljaCkuCgp2NCAtIHN1Z2dlc3Rpb25zL2ZpeGVzOgogICAtIG1vdmUgZnJvbSAj MiBzb2x1dGlvbiB0byAjMmEgc29sdXRpb24sCiAgIC0gaW1wcm92ZSBjb21taXQgbWVzc2FnZS4K LS0tCiB4ZW4vYXJjaC94ODYvZWZpL2VmaS1ib290LmggfCAgIDExICsrKy0tLS0tLS0KIHhlbi9h cmNoL3g4Ni9zZXR1cC5jICAgICAgICB8ICAgIDMgKy0tCiB4ZW4vY29tbW9uL2VmaS9ib290LmMg ICAgICAgfCAgIDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDMgZmlsZXMgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEveGVuL2FyY2gveDg2L2VmaS9lZmktYm9vdC5oIGIveGVuL2FyY2gveDg2L2VmaS9l ZmktYm9vdC5oCmluZGV4IDM4OGM0ZWEuLjYyYzAxMGUgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4 Ni9lZmkvZWZpLWJvb3QuaAorKysgYi94ZW4vYXJjaC94ODYvZWZpL2VmaS1ib290LmgKQEAgLTEx NCw3ICsxMTQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmVsb2NhdGVfdHJhbXBvbGluZSh1bnNp Z25lZCBsb25nIHBoeXMpCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwbGFjZV9zdHJpbmcodTMyICph ZGRyLCBjb25zdCBjaGFyICpzKQogewotICAgIHN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGFsbG9j ID0gc3RhcnQ7CisgICAgY2hhciAqYWxsb2MgPSBOVUxMOwogCiAgICAgaWYgKCBzICYmICpzICkK ICAgICB7CkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBsYWNlX3N0cmlu Zyh1MzIgKmFkZHIsIGNvbnN0IGNoYXIgKnMpCiAgICAgICAgIGNvbnN0IGNoYXIgKm9sZCA9IChj aGFyICopKGxvbmcpKmFkZHI7CiAgICAgICAgIHNpemVfdCBsZW4yID0gKmFkZHIgPyBzdHJsZW4o b2xkKSArIDEgOiAwOwogCi0gICAgICAgIGFsbG9jIC09IGxlbjEgKyBsZW4yOworICAgICAgICBh bGxvYyA9IGVibWFsbG9jKGxlbjEgKyBsZW4yKTsKICAgICAgICAgLyoKICAgICAgICAgICogSW5z ZXJ0IG5ldyBzdHJpbmcgYmVmb3JlIGFscmVhZHkgZXhpc3Rpbmcgb25lLiBUaGlzIGlzIG5lZWRl ZAogICAgICAgICAgKiBmb3Igb3B0aW9ucyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0byBv dmVycmlkZSBvcHRpb25zIGZyb20KQEAgLTIwNSwxMiArMjA1LDcgQEAgc3RhdGljIHZvaWQgX19p bml0IGVmaV9hcmNoX3Byb2Nlc3NfbWVtb3J5X21hcChFRklfU1lTVEVNX1RBQkxFICpTeXN0ZW1U YWJsZSwKIAogc3RhdGljIHZvaWQgKl9faW5pdCBlZmlfYXJjaF9hbGxvY2F0ZV9tbWFwX2J1ZmZl cihVSU5UTiBtYXBfc2l6ZSkKIHsKLSAgICBwbGFjZV9zdHJpbmcoJm1iaS5tZW1fdXBwZXIsIE5V TEwpOwotICAgIG1iaS5tZW1fdXBwZXIgLT0gbWFwX3NpemU7Ci0gICAgbWJpLm1lbV91cHBlciAm PSAtX19hbGlnbm9mX18oRUZJX01FTU9SWV9ERVNDUklQVE9SKTsKLSAgICBpZiAoIG1iaS5tZW1f dXBwZXIgPCB4ZW5fcGh5c19zdGFydCApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVy biAodm9pZCAqKShsb25nKW1iaS5tZW1fdXBwZXI7CisgICAgcmV0dXJuIGVibWFsbG9jKG1hcF9z aXplKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGVmaV9hcmNoX3ByZV9leGl0X2Jvb3Qodm9p ZCkKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9zZXR1cC5jIGIveGVuL2FyY2gveDg2L3NldHVw LmMKaW5kZXggZDQ3M2FjOC4uM2E3ZDIxZSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3NldHVw LmMKKysrIGIveGVuL2FyY2gveDg2L3NldHVwLmMKQEAgLTExMjQsOCArMTEyNCw3IEBAIHZvaWQg X19pbml0IG5vcmV0dXJuIF9fc3RhcnRfeGVuKHVuc2lnbmVkIGxvbmcgbWJpX3ApCiAKICAgICBp ZiAoICF4ZW5fcGh5c19zdGFydCApCiAgICAgICAgIHBhbmljKCJOb3QgZW5vdWdoIG1lbW9yeSB0 byByZWxvY2F0ZSBYZW4uIik7Ci0gICAgcmVzZXJ2ZV9lODIwX3JhbSgmYm9vdF9lODIwLCBlZmlf ZW5hYmxlZChFRklfTE9BREVSKSA/IG1iaS0+bWVtX3VwcGVyIDogX19wYSgmX3N0YXJ0KSwKLSAg ICAgICAgICAgICAgICAgICAgIF9fcGEoJl9lbmQpKTsKKyAgICByZXNlcnZlX2U4MjBfcmFtKCZi b290X2U4MjAsIF9fcGEoJl9zdGFydCksIF9fcGEoJl9lbmQpKTsKIAogICAgIC8qIExhdGUga2V4 ZWMgcmVzZXJ2YXRpb24gKGR5bmFtaWMgc3RhcnQgYWRkcmVzcykuICovCiAgICAga2V4ZWNfcmVz ZXJ2ZV9hcmVhKCZib290X2U4MjApOwpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9lZmkvYm9vdC5j IGIveGVuL2NvbW1vbi9lZmkvYm9vdC5jCmluZGV4IDFlZjVkMGIuLjBhOTNlNjEgMTAwNjQ0Ci0t LSBhL3hlbi9jb21tb24vZWZpL2Jvb3QuYworKysgYi94ZW4vY29tbW9uL2VmaS9ib290LmMKQEAg LTk4LDYgKzk4LDU0IEBAIHN0YXRpYyBDSEFSMTYgX19pbml0ZGF0YSBuZXdsaW5lW10gPSBMIlxy XG4iOwogI2RlZmluZSBQcmludFN0cihzKSBTdGRPdXQtPk91dHB1dFN0cmluZyhTdGRPdXQsIHMp CiAjZGVmaW5lIFByaW50RXJyKHMpIFN0ZEVyci0+T3V0cHV0U3RyaW5nKFN0ZEVyciwgcykKIAor I2lmZGVmIENPTkZJR19BUk0KKy8qCisgKiBUT0RPOiBFbmFibGUgRUZJIGJvb3QgYWxsb2NhdG9y IG9uIEFSTS4KKyAqIFRoaXMgY29kZSBjYW4gYmUgY29tbW9uIGZvciB4ODYgYW5kIEFSTS4KKyAq IFRoaW5ncyBUT0RPIG9uIEFSTSBiZWZvcmUgZW5hYmxpbmcgZWJtYWxsb2M6CisgKiAgIC0gZXN0 aW1hdGUgcmVxdWlyZWQgRUJNQUxMT0NfU0laRSB2YWx1ZSwKKyAqICAgLSB3aGVyZSAoaW4gd2hp Y2ggc2VjdGlvbikgZWJtYWxsb2NfbWVtW10gc2hvdWxkIGxpdmU7IGlmIGluCisgKiAgICAgLmJz cy5wYWdlX2FsaWduZWQsIGFzIGl0IGlzIHJpZ2h0IG5vdywgdGhlbiB3aG9sZSBCU1MgemVyb2lu ZworICogICAgIGhhdmUgdG8gYmUgZGlzYWJsZWQgaW4geGVuL2FyY2gvYXJtL2FybTY0L2hlYWQu UzsgdGhvdWdoIEJTUworICogICAgIHNob3VsZCBiZSBpbml0aWFsaXplZCBzb21laG93IGJlZm9y ZSB1c2Ugb2YgdmFyaWFibGVzIGxpdmluZyB0aGVyZSwKKyAqICAgLSB1c2UgZWJtYWxsb2MoKSBp biBBUk0vY29tbW9uIEVGSSBib290IGNvZGUsCisgKiAgIC0gY2FsbCBmcmVlX2VibWFsbG9jX3Vu dXNlZF9tZW0oKSBzb21ld2hlcmUgaW4gaW5pdCBjb2RlLgorICovCisjZGVmaW5lIEVCTUFMTE9D X1NJWkUJTUIoMCkKKyNlbHNlCisjZGVmaW5lIEVCTUFMTE9DX1NJWkUJTUIoMSkKKyNlbmRpZgor CitzdGF0aWMgY2hhciBfX3NlY3Rpb24oIi5ic3MucGFnZV9hbGlnbmVkIikgX19hbGlnbmVkKFBB R0VfU0laRSkKKyAgICBlYm1hbGxvY19tZW1bRUJNQUxMT0NfU0laRV07CitzdGF0aWMgdW5zaWdu ZWQgbG9uZyBfX2luaXRkYXRhIGVibWFsbG9jX2FsbG9jYXRlZDsKKworLyogRUZJIGJvb3QgYWxs b2NhdG9yLiAqLworc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkICplYm1hbGxvYyhz aXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICpwdHIgPSBlYm1hbGxvY19tZW0gKyBlYm1hbGxvY19h bGxvY2F0ZWQ7CisKKyAgICBlYm1hbGxvY19hbGxvY2F0ZWQgKz0gKHNpemUgKyBzaXplb2Yodm9p ZCAqKSAtIDEpICYgfihzaXplb2Yodm9pZCAqKSAtIDEpOworCisgICAgaWYgKCBlYm1hbGxvY19h bGxvY2F0ZWQgPiBzaXplb2YoZWJtYWxsb2NfbWVtKSApCisgICAgICAgIGJsZXhpdChMIk91dCBv ZiBzdGF0aWMgbWVtb3J5XHJcbiIpOworCisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZv aWQgX19pbml0IF9fbWF5YmVfdW51c2VkIGZyZWVfZWJtYWxsb2NfdW51c2VkX21lbSh2b2lkKQor eworICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKworICAgIHN0YXJ0ID0gKHVuc2lnbmVk IGxvbmcpZWJtYWxsb2NfbWVtICsgUEFHRV9BTElHTihlYm1hbGxvY19hbGxvY2F0ZWQpOworICAg IGVuZCA9ICh1bnNpZ25lZCBsb25nKWVibWFsbG9jX21lbSArIHNpemVvZihlYm1hbGxvY19tZW0p OworCisgICAgZGVzdHJveV94ZW5fbWFwcGluZ3Moc3RhcnQsIGVuZCk7CisgICAgaW5pdF94ZW5o ZWFwX3BhZ2VzKF9fcGEoc3RhcnQpLCBfX3BhKGVuZCkpOworCisgICAgcHJpbnRrKFhFTkxPR19J TkZPICJGcmVlZCAlbHVrQiB1bnVzZWQgQlNTIG1lbW9yeVxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAx MCk7Cit9CisKIC8qCiAgKiBJbmNsdWRlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbXBsZW1lbnRh dGlvbiBoZXJlLCB3aGljaCByZWZlcmVuY2VzIHRoZQogICogc3RhdGljIGdsb2JhbHMgZGVmaW5l ZCBhYm92ZS4KQEAgLTEyNTEsNiArMTI5OSw4IEBAIHZvaWQgX19pbml0IGVmaV9pbml0X21lbW9y eSh2b2lkKQogICAgIH0gKmV4dHJhLCAqZXh0cmFfaGVhZCA9IE5VTEw7CiAjZW5kaWYKIAorICAg IGZyZWVfZWJtYWxsb2NfdW51c2VkX21lbSgpOworCiAgICAgaWYgKCAhZWZpX2VuYWJsZWQoRUZJ X0JPT1QpICkKICAgICAgICAgcmV0dXJuOwogCi0tIAoxLjcuMTAuNAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=