From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jens Wiklander Subject: [PATCH v8 2/4] tee: generic TEE subsystem Date: Thu, 11 Feb 2016 18:14:35 +0100 Message-ID: <1455210877-15748-3-git-send-email-jens.wiklander@linaro.org> References: <1455210877-15748-1-git-send-email-jens.wiklander@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1455210877-15748-1-git-send-email-jens.wiklander@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Greg Kroah-Hartman Cc: valentin.manea@huawei.com, Mark Rutland , javier@javigon.com, emmanuel.michel@st.com, Arnd Bergmann , Will Deacon , Michal Simek , jean-michel.delorme@st.com, Jason Gunthorpe , Rob Herring , Jens Wiklander List-Id: devicetree@vger.kernel.org SW5pdGlhbCBwYXRjaCBmb3IgZ2VuZXJpYyBURUUgc3Vic3lzdGVtLgpUaGlzIHN1YnN5c3RlbSBw cm92aWRlczoKKiBSZWdpc3RyYXRpb24vdW4tcmVnaXN0cmF0aW9uIG9mIFRFRSBkcml2ZXJzLgoq IFNoYXJlZCBtZW1vcnkgYmV0d2VlbiBub3JtYWwgd29ybGQgYW5kIHNlY3VyZSB3b3JsZC4KKiBJ b2N0bCBpbnRlcmZhY2UgZm9yIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZS4KKiBTeXNmcyBp bXBsZW1lbnRhdGlvbl9pZCBvZiBURUUgZHJpdmVyCgpBIFRFRSAoVHJ1c3RlZCBFeGVjdXRpb24g RW52aXJvbm1lbnQpIGRyaXZlciBpcyBhIGRyaXZlciB0aGF0IGludGVyZmFjZXMKd2l0aCBhIHRy dXN0ZWQgT1MgcnVubmluZyBpbiBzb21lIHNlY3VyZSBlbnZpcm9ubWVudCwgZm9yIGV4YW1wbGUs ClRydXN0Wm9uZSBvbiBBUk0gY3B1cywgb3IgYSBzZXBhcmF0ZSBzZWN1cmUgY28tcHJvY2Vzc29y IGV0Yy4KClRoZSBURUUgc3Vic3lzdGVtIGNhbiBzZXJ2ZSBhIFRFRSBkcml2ZXIgZm9yIGEgR2xv YmFsIFBsYXRmb3JtIGNvbXBsaWFudApURUUsIGJ1dCBpdCdzIG5vdCBsaW1pdGVkIHRvIG9ubHkg R2xvYmFsIFBsYXRmb3JtIFRFRXMuCgpUaGlzIHBhdGNoIGJ1aWxkcyBvbiBvdGhlciBzaW1pbGFy IGltcGxlbWVudGF0aW9ucyB0cnlpbmcgdG8gc29sdmUKdGhlIHNhbWUgcHJvYmxlbToKKiAib3B0 ZWVfbGludXhkcml2ZXIiIGJ5IGFtb25nIG90aGVycwogIEplYW4tbWljaGVsIERFTE9STUU8amVh bi1taWNoZWwuZGVsb3JtZUBzdC5jb20+IGFuZAogIEVtbWFudWVsIE1JQ0hFTCA8ZW1tYW51ZWwu bWljaGVsQHN0LmNvbT4KKiAiR2VuZXJpYyBUcnVzdFpvbmUgRHJpdmVyIiBieSBKYXZpZXIgR29u esOhbGV6IDxqYXZpZXJAamF2aWdvbi5jb20+CgpTaWduZWQtb2ZmLWJ5OiBKZW5zIFdpa2xhbmRl ciA8amVucy53aWtsYW5kZXJAbGluYXJvLm9yZz4KLS0tCiBEb2N1bWVudGF0aW9uL2lvY3RsL2lv Y3RsLW51bWJlci50eHQgfCAgIDEgKwogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICA3ICsKIGRyaXZlcnMvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICB8ICAgMiAr CiBkcml2ZXJzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy90 ZWUvS2NvbmZpZyAgICAgICAgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvdGVlL01ha2VmaWxl ICAgICAgICAgICAgICAgICB8ICAgMyArCiBkcml2ZXJzL3RlZS90ZWUuYyAgICAgICAgICAgICAg ICAgICAgfCA4NzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv dGVlL3RlZV9wcml2YXRlLmggICAgICAgICAgICB8ICA4MCArKysrCiBkcml2ZXJzL3RlZS90ZWVf c2htLmMgICAgICAgICAgICAgICAgfCAzMjQgKysrKysrKysrKysrKwogZHJpdmVycy90ZWUvdGVl X3NobV9wb29sLmMgICAgICAgICAgIHwgMTMzICsrKysrKwogaW5jbHVkZS9saW51eC90ZWVfZHJ2 LmggICAgICAgICAgICAgIHwgMjk5ICsrKysrKysrKysrKwogaW5jbHVkZS91YXBpL2xpbnV4L3Rl ZS5oICAgICAgICAgICAgIHwgMzgzICsrKysrKysrKysrKysrKwogMTIgZmlsZXMgY2hhbmdlZCwg MjExNSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvS2NvbmZp ZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdGVlL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy90ZWUvdGVlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3RlZS90 ZWVfcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvdGVlX3NobS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvdGVlX3NobV9wb29sLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBpbmNsdWRlL2xpbnV4L3RlZV9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1 ZGUvdWFwaS9saW51eC90ZWUuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9j dGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRl eCA5MTI2MWEzLi5iNWNlN2I2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3Rs LW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBA IC0zMDcsNiArMzA3LDcgQEAgQ29kZSAgU2VxIyhoZXgpCUluY2x1ZGUgRmlsZQkJQ29tbWVudHMK IDB4QTMJODAtOEYJUG9ydCBBQ0wJCWluIGRldmVsb3BtZW50OgogCQkJCQk8bWFpbHRvOnRsZXdp c0BtaW5kc3ByaW5nLmNvbT4KIDB4QTMJOTAtOUYJbGludXgvZHRsay5oCisweEE0CTAwLTFGCXVh cGkvbGludXgvdGVlLmgJR2VuZXJpYyBURUUgc3Vic3lzdGVtCiAweEFBCTAwLTNGCWxpbnV4L3Vh cGkvbGludXgvdXNlcmZhdWx0ZmQuaAogMHhBQgkwMC0xRglsaW51eC9uYmQuaAogMHhBQwkwMC0x RglsaW51eC9yYXcuaApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRl eCA3ZjFmYTRmLi5iMmJhZTBlIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJ TkVSUwpAQCAtOTU2MSw2ICs5NTYxLDEzIEBAIEY6CWRyaXZlcnMvaHd0cmFjaW5nL3N0bS8KIEY6 CWluY2x1ZGUvbGludXgvc3RtLmgKIEY6CWluY2x1ZGUvdWFwaS9saW51eC9zdG0uaAogCitURUUg U1VCU1lTVEVNCitNOglKZW5zIFdpa2xhbmRlciA8amVucy53aWtsYW5kZXJAbGluYXJvLm9yZz4K K1M6CU1haW50YWluZWQKK0Y6CWluY2x1ZGUvbGludXgvdGVlX2Rydi5oCitGOglpbmNsdWRlL3Vh cGkvbGludXgvdGVlLmgKK0Y6CWRyaXZlcnMvdGVlLworCiBUSFVOREVSQk9MVCBEUklWRVIKIE06 CUFuZHJlYXMgTm9ldmVyIDxhbmRyZWFzLm5vZXZlckBnbWFpbC5jb20+CiBTOglNYWludGFpbmVk CmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggZDJh YzMzOS4uNjNiYWNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMv S2NvbmZpZwpAQCAtMTk4LDQgKzE5OCw2IEBAIHNvdXJjZSAiZHJpdmVycy9od3RyYWNpbmcvaW50 ZWxfdGgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2ZwZ2EvS2NvbmZpZyIKIAorc291cmNl ICJkcml2ZXJzL3RlZS9LY29uZmlnIgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL01h a2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCA4ZjVkMDc2Li4yMzFiNDA5IDEwMDY0NAot LS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTE3MiwzICsx NzIsNCBAQCBvYmotJChDT05GSUdfU1RNKQkJKz0gaHd0cmFjaW5nL3N0bS8KIG9iai0kKENPTkZJ R19BTkRST0lEKQkJKz0gYW5kcm9pZC8KIG9iai0kKENPTkZJR19OVk1FTSkJCSs9IG52bWVtLwog b2JqLSQoQ09ORklHX0ZQR0EpCQkrPSBmcGdhLworb2JqLSQoQ09ORklHX1RFRSkJCSs9IHRlZS8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVlL0tjb25maWcgYi9kcml2ZXJzL3RlZS9LY29uZmlnCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYmExNTQKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL3RlZS9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorIyBHZW5lcmljIFRydXN0 ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IENvbmZpZ3VyYXRpb24KK2NvbmZpZyBURUUKKwlib29s ICJUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCBzdXBwb3J0IgorCWRlZmF1bHQgbgorCXNl bGVjdCBETUFfU0hBUkVEX0JVRkZFUgorCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUgorCWhlbHAK KwkgIFRoaXMgaW1wbGVtZW50cyBhIGdlbmVyaWMgaW50ZXJmYWNlIHRvd2FyZHMgYSBUcnVzdGVk IEV4ZWN1dGlvbgorCSAgRW52aXJvbm1lbnQgKFRFRSkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Rl ZS9NYWtlZmlsZSBiL2RyaXZlcnMvdGVlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjYwZDJkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS9NYWtl ZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai15ICs9IHRlZS5vCitvYmoteSArPSB0ZWVfc2htLm8K K29iai15ICs9IHRlZV9zaG1fcG9vbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS90ZWUuYyBi L2RyaXZlcnMvdGVlL3RlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4 YTFjNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS90ZWUuYwpAQCAtMCwwICsxLDg3 MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgTGluYXJvIExpbWl0ZWQKKyAqCisgKiBU aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQs IGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nk ZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNp bmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdGVlX2Rydi5oPgorI2lu Y2x1ZGUgInRlZV9wcml2YXRlLmgiCisKKyNkZWZpbmUgVEVFX05VTV9ERVZJQ0VTCTMyCisKKyNk ZWZpbmUgVEVFX0lPQ1RMX1BBUkFNX1NJWkUoeCkgKHNpemVvZihzdHJ1Y3QgdGVlX3BhcmFtKSAq ICh4KSkKKworLyoKKyAqIFVucHJpdmlsZWdlZCBkZXZpY2VzIGluIHRoZSBpbiB0aGUgbG93ZXIg aGFsZiByYW5nZSBhbmQgcHJpdmlsZWdlZAorICogZGV2aWNlcyBpbiB0aGUgdXBwZXIgaGFsZiBy YW5nZS4KKyAqLworc3RhdGljIERFQ0xBUkVfQklUTUFQKGRldl9tYXNrLCBURUVfTlVNX0RFVklD RVMpOworc3RhdGljIERFRklORV9TUElOTE9DSyhkcml2ZXJfbG9jayk7CisKK3N0YXRpYyBzdHJ1 Y3QgY2xhc3MgKnRlZV9jbGFzczsKK3N0YXRpYyBkZXZfdCB0ZWVfZGV2dDsKKworc3RhdGljIGlu dCB0ZWVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlp bnQgcmM7CisJc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldjsKKwlzdHJ1Y3QgdGVlX2NvbnRleHQg KmN0eDsKKworCXRlZWRldiA9IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgdGVl X2RldmljZSwgY2Rldik7CisJaWYgKCF0ZWVfZGV2aWNlX2dldCh0ZWVkZXYpKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWN0eCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWN0eCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWN0eC0+dGVl ZGV2ID0gdGVlZGV2OworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGN0eDsKKwlyYyA9IHRlZWRldi0+ ZGVzYy0+b3BzLT5vcGVuKGN0eCk7CisJaWYgKHJjKQorCQlnb3RvIGVycjsKKworCXJldHVybiAw OworZXJyOgorCWtmcmVlKGN0eCk7CisJdGVlX2RldmljZV9wdXQodGVlZGV2KTsKKwlyZXR1cm4g cmM7Cit9CisKK3N0YXRpYyBpbnQgdGVlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHRlZV9jb250ZXh0ICpjdHggPSBmaWxwLT5wcml2 YXRlX2RhdGE7CisJc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldiA9IGN0eC0+dGVlZGV2OworCisJ Y3R4LT50ZWVkZXYtPmRlc2MtPm9wcy0+cmVsZWFzZShjdHgpOworCWtmcmVlKGN0eCk7CisJdGVl X2RldmljZV9wdXQodGVlZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWVfaW9j dGxfdmVyc2lvbihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHRlZV9pb2N0bF92 ZXJzaW9uX2RhdGEgX191c2VyICp1dmVycykKK3sKKwlzdHJ1Y3QgdGVlX2lvY3RsX3ZlcnNpb25f ZGF0YSB2ZXJzOworCisJY3R4LT50ZWVkZXYtPmRlc2MtPm9wcy0+Z2V0X3ZlcnNpb24oY3R4LT50 ZWVkZXYsICZ2ZXJzKTsKKwlpZiAoY29weV90b191c2VyKHV2ZXJzLCAmdmVycywgc2l6ZW9mKHZl cnMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVl X2lvY3RsX3NobV9hbGxvYyhzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHRlZV9p b2N0bF9zaG1fYWxsb2NfZGF0YSBfX3VzZXIgKnVkYXRhKQoreworCWxvbmcgcmV0OworCXN0cnVj dCB0ZWVfaW9jdGxfc2htX2FsbG9jX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOwor CisJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCB1ZGF0YSwgc2l6ZW9mKGRhdGEpKSkKKwkJcmV0 dXJuIC1FRkFVTFQ7CisKKwkvKiBDdXJyZW50bHkgbm8gaW5wdXQgZmxhZ3MgYXJlIHN1cHBvcnRl ZCAqLworCWlmIChkYXRhLmZsYWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEuZmQgPSAt MTsKKworCXNobSA9IHRlZV9zaG1fYWxsb2MoY3R4LT50ZWVkZXYsIGRhdGEuc2l6ZSwKKwkJCSAg ICBURUVfU0hNX01BUFBFRCB8IFRFRV9TSE1fRE1BX0JVRik7CisJaWYgKElTX0VSUihzaG0pKQor CQlyZXR1cm4gUFRSX0VSUihzaG0pOworCisJZGF0YS5mbGFncyA9IHNobS0+ZmxhZ3M7CisJZGF0 YS5zaXplID0gc2htLT5zaXplOworCWRhdGEuZmQgPSB0ZWVfc2htX2dldF9mZChzaG0pOworCWlm IChkYXRhLmZkIDwgMCkgeworCQlyZXQgPSBkYXRhLmZkOworCQlnb3RvIGVycjsKKwl9CisKKwlp ZiAoY29weV90b191c2VyKHVkYXRhLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkgeworCQlyZXQgPSAt RUZBVUxUOworCQlnb3RvIGVycjsKKwl9CisJLyoKKwkgKiBXaGVuIHVzZXIgc3BhY2UgY2xvc2Vz IHRoZSBmaWxlIGRlc2NyaXB0b3IgdGhlIHNoYXJlZCBtZW1vcnkKKwkgKiBzaG91bGQgYmUgZnJl ZWQKKwkgKi8KKwl0ZWVfc2htX3B1dChzaG0pOworCXJldHVybiAwOworZXJyOgorCWlmIChkYXRh LmZkID49IDApCisJCXRlZV9zaG1fcHV0X2ZkKGRhdGEuZmQpOworCXRlZV9zaG1fZnJlZShzaG0p OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFyYW1zX2Zyb21fdXNlcihzdHJ1Y3Qg dGVlX3BhcmFtICpwYXJhbXMsIHNpemVfdCBudW1fcGFyYW1zLAorCQlzdHJ1Y3QgdGVlX2lvY3Rs X3BhcmFtIF9fdXNlciAqdXBhcmFtcykKK3sKKwlzaXplX3QgbjsKKworCWZvciAobiA9IDA7IG4g PCBudW1fcGFyYW1zOyBuKyspIHsKKwkJc3RydWN0IHRlZV9zaG0gKnNobTsKKwkJc3RydWN0IHRl ZV9pb2N0bF9wYXJhbSBpcDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmlwLCB1cGFyYW1zICsg biwgc2l6ZW9mKGlwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkvKiBBbGwgdW51c2VkIGF0 dHJpYnV0ZSBiaXRzIGhhcyB0byBiZSB6ZXJvICovCisJCWlmIChpcC5hdHRyICYgflRFRV9JT0NU TF9QQVJBTV9BVFRSX1RZUEVfTUFTSykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXBhcmFtc1tu XS5hdHRyID0gaXAuYXR0cjsKKwkJc3dpdGNoIChpcC5hdHRyKSB7CisJCWNhc2UgVEVFX0lPQ1RM X1BBUkFNX0FUVFJfVFlQRV9OT05FOgorCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVf VkFMVUVfT1VUUFVUOgorCQkJYnJlYWs7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQ RV9WQUxVRV9JTlBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lO T1VUOgorCQkJcGFyYW1zW25dLnUudmFsdWUuYSA9IGlwLnUudmFsdWUuYTsKKwkJCXBhcmFtc1tu XS51LnZhbHVlLmIgPSBpcC51LnZhbHVlLmI7CisJCQlwYXJhbXNbbl0udS52YWx1ZS5jID0gaXAu dS52YWx1ZS5jOworCQkJYnJlYWs7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9N RU1SRUZfSU5QVVQ6CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfT1VU UFVUOgorCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOT1VUOgorCQkJ LyoKKwkJCSAqIElmIHdlIGZhaWwgdG8gZ2V0IGEgcG9pbnRlciB0byBhIHNoYXJlZCBtZW1vcnkK KwkJCSAqIG9iamVjdCAoYW5kIGluY3JlYXNlIHRoZSByZWYgY291bnQpIGZyb20gYSBmaWxlCisJ CQkgKiBkZXNjcmlwdG9yIHdlIHJldHVybiBhbiBlcnJvci4gQWxsIHBvaW50ZXJzIHRoYXQKKwkJ CSAqIGhhcyBiZWVuIGFkZGVkIGluIHBhcmFtcyBoYXZlIGFuIGluY3JlYXNlZCByZWYKKwkJCSAq IGNvdW50LiBJdCdzIHRoZSBjYWxsZXJzIHJlc3BvbmliaWxpdHkgdG8gZG8KKwkJCSAqIHRlZV9z aG1fcHV0KCkgb24gYWxsIHJlc29sdmVkIHBvaW50ZXJzLgorCQkJICovCisJCQlzaG0gPSB0ZWVf c2htX2dldF9mcm9tX2ZkKGlwLnUubWVtcmVmLnNobV9mZCk7CisJCQlpZiAoSVNfRVJSKHNobSkp CisJCQkJcmV0dXJuIFBUUl9FUlIoc2htKTsKKworCQkJcGFyYW1zW25dLnUubWVtcmVmLnNobV9v ZmZzID0gaXAudS5tZW1yZWYuc2htX29mZnM7CisJCQlwYXJhbXNbbl0udS5tZW1yZWYuc2l6ZSA9 IGlwLnUubWVtcmVmLnNpemU7CisJCQlwYXJhbXNbbl0udS5tZW1yZWYuc2htID0gc2htOworCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBVbmtub3duIGF0dHJpYnV0ZSAqLworCQkJcmV0dXJu IC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyYW1zX3Rv X3VzZXIoc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJhbXMsCisJCXNpemVfdCBu dW1fcGFyYW1zLCBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXMpCit7CisJc2l6ZV90IG47CisKKwlm b3IgKG4gPSAwOyBuIDwgbnVtX3BhcmFtczsgbisrKSB7CisJCXN0cnVjdCB0ZWVfaW9jdGxfcGFy YW0gX191c2VyICp1cCA9IHVwYXJhbXMgKyBuOworCQlzdHJ1Y3QgdGVlX3BhcmFtICpwID0gcGFy YW1zICsgbjsKKworCQlzd2l0Y2ggKHAtPmF0dHIpIHsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1f QVRUUl9UWVBFX1ZBTFVFX09VVFBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBF X1ZBTFVFX0lOT1VUOgorCQkJaWYgKHB1dF91c2VyKHAtPnUudmFsdWUuYSwgJnVwLT51LnZhbHVl LmEpIHx8CisJCQkgICAgcHV0X3VzZXIocC0+dS52YWx1ZS5iLCAmdXAtPnUudmFsdWUuYikgfHwK KwkJCSAgICBwdXRfdXNlcihwLT51LnZhbHVlLmMsICZ1cC0+dS52YWx1ZS5jKSkKKwkJCQlyZXR1 cm4gLUVGQVVMVDsKKwkJCWJyZWFrOworCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVf TUVNUkVGX09VVFBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX01FTVJFRl9J Tk9VVDoKKwkJCWlmIChwdXRfdXNlcigodTY0KXAtPnUubWVtcmVmLnNpemUsICZ1cC0+dS5tZW1y ZWYuc2l6ZSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJ fQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgcGFyYW1faXNfbWVtcmVmKHN0cnVj dCB0ZWVfcGFyYW0gKnBhcmFtKQoreworCXN3aXRjaCAocGFyYW0tPmF0dHIgJiBURUVfSU9DVExf UEFSQU1fQVRUUl9UWVBFX01BU0spIHsKKwljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVf TUVNUkVGX0lOUFVUOgorCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfT1VU UFVUOgorCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5PVVQ6CisJCXJl dHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBp bnQgdGVlX2lvY3RsX29wZW5fc2Vzc2lvbihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJc3Ry dWN0IHRlZV9pb2N0bF9idWZfZGF0YSBfX3VzZXIgKnVidWYpCit7CisJaW50IHJjOworCXNpemVf dCBuOworCXN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgYnVmOworCXN0cnVjdCB0ZWVfaW9jdGxf b3Blbl9zZXNzaW9uX2FyZyBfX3VzZXIgKnVhcmc7CisJc3RydWN0IHRlZV9pb2N0bF9vcGVuX3Nl c3Npb25fYXJnIGFyZzsKKwlzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIF9fdXNlciAqdXBhcmFtcyA9 IE5VTEw7CisJc3RydWN0IHRlZV9wYXJhbSAqcGFyYW1zID0gTlVMTDsKKwlib29sIGhhdmVfc2Vz c2lvbiA9IGZhbHNlOworCisJaWYgKCFjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5vcGVuX3Nlc3Np b24pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYs IHNpemVvZihidWYpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoYnVmLmJ1Zl9sZW4gPiBU RUVfTUFYX0FSR19TSVpFIHx8CisJICAgIGJ1Zi5idWZfbGVuIDwgc2l6ZW9mKHN0cnVjdCB0ZWVf aW9jdGxfb3Blbl9zZXNzaW9uX2FyZykpCisJCXJldHVybiAtRUlOVkFMOworCisJdWFyZyA9IChz dHJ1Y3QgdGVlX2lvY3RsX29wZW5fc2Vzc2lvbl9hcmcgX191c2VyICopKHVuc2lnbmVkIGxvbmcp CisJCWJ1Zi5idWZfcHRyOworCXJjID0gY29weV9mcm9tX3VzZXIoJmFyZywgdWFyZywgc2l6ZW9m KGFyZykpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKHNpemVvZihhcmcpICsgVEVF X0lPQ1RMX1BBUkFNX1NJWkUoYXJnLm51bV9wYXJhbXMpICE9IGJ1Zi5idWZfbGVuKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWlmIChhcmcubnVtX3BhcmFtcykgeworCQlwYXJhbXMgPSBrY2FsbG9j KGFyZy5udW1fcGFyYW1zLCBzaXplb2Yoc3RydWN0IHRlZV9wYXJhbSksCisJCQkJR0ZQX0tFUk5F TCk7CisJCWlmICghcGFyYW1zKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXVwYXJhbXMgPSAoc3Ry dWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKikodWFyZyArIDEpOworCQlyYyA9IHBhcmFtc19m cm9tX3VzZXIocGFyYW1zLCBhcmcubnVtX3BhcmFtcywgdXBhcmFtcyk7CisJCWlmIChyYykKKwkJ CWdvdG8gb3V0OworCX0KKworCXJjID0gY3R4LT50ZWVkZXYtPmRlc2MtPm9wcy0+b3Blbl9zZXNz aW9uKGN0eCwgJmFyZywgcGFyYW1zKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCWhhdmVfc2Vz c2lvbiA9IHRydWU7CisKKwlpZiAocHV0X3VzZXIoYXJnLnNlc3Npb24sICZ1YXJnLT5zZXNzaW9u KSB8fAorCSAgICBwdXRfdXNlcihhcmcucmV0LCAmdWFyZy0+cmV0KSB8fAorCSAgICBwdXRfdXNl cihhcmcucmV0X29yaWdpbiwgJnVhcmctPnJldF9vcmlnaW4pKSB7CisJCXJjID0gLUVGQVVMVDsK KwkJZ290byBvdXQ7CisJfQorCXJjID0gcGFyYW1zX3RvX3VzZXIodXBhcmFtcywgYXJnLm51bV9w YXJhbXMsIHBhcmFtcyk7CitvdXQ6CisJLyoKKwkgKiBJZiB3ZSd2ZSBzdWNjZWVkZWQgdG8gb3Bl biB0aGUgc2Vzc2lvbiBidXQgZmFpbGVkIHRvIGNvbW11bmljYXRlCisJICogaXQgYmFjayB0byB1 c2VyIHNwYWNlLCBjbG9zZSB0aGUgc2Vzc2lvbiBhZ2FpbiB0byBhdm9pZCBsZWFrYWdlLgorCSAq LworCWlmIChyYyAmJiBoYXZlX3Nlc3Npb24gJiYgY3R4LT50ZWVkZXYtPmRlc2MtPm9wcy0+Y2xv c2Vfc2Vzc2lvbikKKwkJY3R4LT50ZWVkZXYtPmRlc2MtPm9wcy0+Y2xvc2Vfc2Vzc2lvbihjdHgs IGFyZy5zZXNzaW9uKTsKKworCWlmIChwYXJhbXMpIHsKKwkJLyogRGVjcmVhc2UgcmVmIGNvdW50 IGZvciBhbGwgdmFsaWQgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLworCQlmb3IgKG4gPSAwOyBu IDwgYXJnLm51bV9wYXJhbXM7IG4rKykKKwkJCWlmIChwYXJhbV9pc19tZW1yZWYocGFyYW1zICsg bikgJiYKKwkJCSAgICBwYXJhbXNbbl0udS5tZW1yZWYuc2htKQorCQkJCXRlZV9zaG1fcHV0KHBh cmFtc1tuXS51Lm1lbXJlZi5zaG0pOworCQlrZnJlZShwYXJhbXMpOworCX0KKworCXJldHVybiBy YzsKK30KKworc3RhdGljIGludCB0ZWVfaW9jdGxfaW52b2tlKHN0cnVjdCB0ZWVfY29udGV4dCAq Y3R4LAorCQlzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIF9fdXNlciAqdWJ1ZikKK3sKKwlpbnQg cmM7CisJc2l6ZV90IG47CisJc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSBidWY7CisJc3RydWN0 IHRlZV9pb2N0bF9pbnZva2VfYXJnIF9fdXNlciAqdWFyZzsKKwlzdHJ1Y3QgdGVlX2lvY3RsX2lu dm9rZV9hcmcgYXJnOworCXN0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gX191c2VyICp1cGFyYW1zID0g TlVMTDsKKwlzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXMgPSBOVUxMOworCisJaWYgKCFjdHgtPnRl ZWRldi0+ZGVzYy0+b3BzLT5pbnZva2VfZnVuYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyYyA9 IGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIHNpemVvZihidWYpKTsKKwlpZiAocmMpCisJCXJl dHVybiByYzsKKworCWlmIChidWYuYnVmX2xlbiA+IFRFRV9NQVhfQVJHX1NJWkUgfHwKKwkgICAg YnVmLmJ1Zl9sZW4gPCBzaXplb2Yoc3RydWN0IHRlZV9pb2N0bF9pbnZva2VfYXJnKSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwl1YXJnID0gKHN0cnVjdCB0ZWVfaW9jdGxfaW52b2tlX2FyZyBfX3Vz ZXIgKikodW5zaWduZWQgbG9uZylidWYuYnVmX3B0cjsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFy ZywgdWFyZywgc2l6ZW9mKGFyZykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzaXplb2Yo YXJnKSArIFRFRV9JT0NUTF9QQVJBTV9TSVpFKGFyZy5udW1fcGFyYW1zKSAhPSBidWYuYnVmX2xl bikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJnLm51bV9wYXJhbXMpIHsKKwkJcGFyYW1z ID0ga2NhbGxvYyhhcmcubnVtX3BhcmFtcywgc2l6ZW9mKHN0cnVjdCB0ZWVfcGFyYW0pLAorCQkJ CUdGUF9LRVJORUwpOworCQlpZiAoIXBhcmFtcykKKwkJCXJldHVybiAtRU5PTUVNOworCQl1cGFy YW1zID0gKHN0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gX191c2VyICopKHVhcmcgKyAxKTsKKwkJcmMg PSBwYXJhbXNfZnJvbV91c2VyKHBhcmFtcywgYXJnLm51bV9wYXJhbXMsIHVwYXJhbXMpOworCQlp ZiAocmMpCisJCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IGN0eC0+dGVlZGV2LT5kZXNjLT5vcHMt Pmludm9rZV9mdW5jKGN0eCwgJmFyZywgcGFyYW1zKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0Owor CisJaWYgKHB1dF91c2VyKGFyZy5yZXQsICZ1YXJnLT5yZXQpIHx8CisJICAgIHB1dF91c2VyKGFy Zy5yZXRfb3JpZ2luLCAmdWFyZy0+cmV0X29yaWdpbikpIHsKKwkJcmMgPSAtRUZBVUxUOworCQln b3RvIG91dDsKKwl9CisJcmMgPSBwYXJhbXNfdG9fdXNlcih1cGFyYW1zLCBhcmcubnVtX3BhcmFt cywgcGFyYW1zKTsKK291dDoKKwlpZiAocGFyYW1zKSB7CisJCS8qIERlY3JlYXNlIHJlZiBjb3Vu dCBmb3IgYWxsIHZhbGlkIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KKwkJZm9yIChuID0gMDsg biA8IGFyZy5udW1fcGFyYW1zOyBuKyspCisJCQlpZiAocGFyYW1faXNfbWVtcmVmKHBhcmFtcyAr IG4pICYmCisJCQkgICAgcGFyYW1zW25dLnUubWVtcmVmLnNobSkKKwkJCQl0ZWVfc2htX3B1dChw YXJhbXNbbl0udS5tZW1yZWYuc2htKTsKKwkJa2ZyZWUocGFyYW1zKTsKKwl9CisJcmV0dXJuIHJj OworfQorCisKK3N0YXRpYyBpbnQgdGVlX2lvY3RsX2NhbmNlbChzdHJ1Y3QgdGVlX2NvbnRleHQg KmN0eCwKKwkJc3RydWN0IHRlZV9pb2N0bF9jYW5jZWxfYXJnIF9fdXNlciAqdWFyZykKK3sKKwlz dHJ1Y3QgdGVlX2lvY3RsX2NhbmNlbF9hcmcgYXJnOworCisJaWYgKCFjdHgtPnRlZWRldi0+ZGVz Yy0+b3BzLT5jYW5jZWxfcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21f dXNlcigmYXJnLCB1YXJnLCBzaXplb2YoYXJnKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0 dXJuIGN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPmNhbmNlbF9yZXEoY3R4LCBhcmcuY2FuY2VsX2lk LAorCQkJCQkJICBhcmcuc2Vzc2lvbik7Cit9CisKK3N0YXRpYyBpbnQgdGVlX2lvY3RsX2Nsb3Nl X3Nlc3Npb24oc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsCisJCXN0cnVjdCB0ZWVfaW9jdGxfY2xv c2Vfc2Vzc2lvbl9hcmcgX191c2VyICp1YXJnKQoreworCXN0cnVjdCB0ZWVfaW9jdGxfY2xvc2Vf c2Vzc2lvbl9hcmcgYXJnOworCisJaWYgKCFjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5jbG9zZV9z ZXNzaW9uKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYXJnLCB1 YXJnLCBzaXplb2YoYXJnKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGN0eC0+dGVl ZGV2LT5kZXNjLT5vcHMtPmNsb3NlX3Nlc3Npb24oY3R4LCBhcmcuc2Vzc2lvbik7Cit9CisKK3N0 YXRpYyBpbnQgcGFyYW1zX3RvX3N1cHAoc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKnVw YXJhbXMsCisJCXNpemVfdCBudW1fcGFyYW1zLCBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXMpCit7 CisJaW50IHJjID0gMDsKKwlzaXplX3QgbjsKKwlpbnQgKmZkcyA9IGttYWxsb2NfYXJyYXkobnVt X3BhcmFtcywgc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCisJaWYgKCFmZHMpCisJCXJldHVy biAtRU5PTUVNOworCWZvciAobiA9IDA7IG4gPCBudW1fcGFyYW1zOyBuKyspCisJCWZkc1tuXSA9 IC0xOworCisJZm9yIChuID0gMDsgbiA8IG51bV9wYXJhbXM7IG4rKykgeworCQlzdHJ1Y3QgdGVl X2lvY3RsX3BhcmFtIGlwOworCQlzdHJ1Y3QgdGVlX3BhcmFtICpwID0gcGFyYW1zICsgbjsKKwor CQlpcC5hdHRyID0gcC0+YXR0ciAmIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUFTSzsKKwkJ c3dpdGNoIChwLT5hdHRyKSB7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxV RV9JTlBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lOT1VUOgor CQkJaXAudS52YWx1ZS5hID0gcC0+dS52YWx1ZS5hOworCQkJaXAudS52YWx1ZS5iID0gcC0+dS52 YWx1ZS5iOworCQkJaXAudS52YWx1ZS5jID0gcC0+dS52YWx1ZS5jOworCQkJYnJlYWs7CisJCWNh c2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5QVVQ6CisJCWNhc2UgVEVFX0lP Q1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfT1VUUFVUOgorCQljYXNlIFRFRV9JT0NUTF9QQVJB TV9BVFRSX1RZUEVfTUVNUkVGX0lOT1VUOgorCQkJaXAudS5tZW1yZWYuc2l6ZSA9IHAtPnUubWVt cmVmLnNpemU7CisJCQlpZiAoIXAtPnUubWVtcmVmLnNobSkgeworCQkJCWlwLnUubWVtcmVmLnNo bV9vZmZzID0gMDsKKwkJCQlpcC51Lm1lbXJlZi5zaG1fZmQgPSAtMTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJCWlwLnUubWVtcmVmLnNobV9vZmZzID0gcC0+dS5tZW1yZWYuc2htX29mZnM7CisJCQkv KgorCQkJICogVGhpcyB0ZWVfc2htX2dldF9mZCgpIGlzIHN1cHBvc2VkIHRvIGJlIG1hdGNoZWQK KwkJCSAqIGJ5IGEgY2xvc2UoMikgZnJvbSB0ZWUtc3VwcGxpY2FudC4KKwkJCSAqLworCQkJZmRz W25dID0gdGVlX3NobV9nZXRfZmQocC0+dS5tZW1yZWYuc2htKTsKKwkJCWlmIChmZHNbbl0gPCAw KSB7CisJCQkJcmMgPSBmZHNbbl07CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpcC51Lm1lbXJl Zi5zaG1fZmQgPSBmZHNbbl07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1lbXNldCgmaXAu dSwgMCwgc2l6ZW9mKGlwLnUpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNvcHlfdG9fdXNl cih1cGFyYW1zICsgbiwgJmlwLCBzaXplb2YoaXApKSkgeworCQkJcmMgPSAtRUZBVUxUOworCQkJ Z290byBvdXQ7CisJCX0KKwl9CitvdXQ6CisJaWYgKHJjKSB7CisJCWZvciAobiA9IDA7IG4gPCBu dW1fcGFyYW1zOyBuKyspCisJCQlpZiAoZmRzW25dID49IDApCisJCQkJdGVlX3NobV9wdXRfZmQo ZmRzW25dKTsKKwl9CisJa2ZyZWUoZmRzKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQg dGVlX2lvY3RsX3N1cHBfcmVjdihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHRl ZV9pb2N0bF9idWZfZGF0YSBfX3VzZXIgKnVidWYpCit7CisJaW50IHJjOworCXN0cnVjdCB0ZWVf aW9jdGxfYnVmX2RhdGEgYnVmOworCXN0cnVjdCB0ZWVfaW9jbF9zdXBwX3JlY3ZfYXJnIF9fdXNl ciAqdWFyZzsKKwlzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXM7CisJc3RydWN0IHRlZV9pb2N0bF9w YXJhbSBfX3VzZXIgKnVwYXJhbXM7CisJdTMyIG51bV9wYXJhbXM7CisJdTMyIGZ1bmM7CisKKwlp ZiAoIWN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPnN1cHBfcmVjdikKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1Ziwgc2l6ZW9mKGJ1ZikpKQorCQlyZXR1 cm4gLUVGQVVMVDsKKworCWlmIChidWYuYnVmX2xlbiA+IFRFRV9NQVhfQVJHX1NJWkUgfHwKKwkg ICAgYnVmLmJ1Zl9sZW4gPCBzaXplb2Yoc3RydWN0IHRlZV9pb2NsX3N1cHBfcmVjdl9hcmcpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCXVhcmcgPSAoc3RydWN0IHRlZV9pb2NsX3N1cHBfcmVjdl9h cmcgX191c2VyICopKHVuc2lnbmVkIGxvbmcpCisJCWJ1Zi5idWZfcHRyOworCWlmIChnZXRfdXNl cihudW1fcGFyYW1zLCAmdWFyZy0+bnVtX3BhcmFtcykpCisJCXJldHVybiAtRUZBVUxUOworCisJ aWYgKHNpemVvZigqdWFyZykgKyBURUVfSU9DVExfUEFSQU1fU0laRShudW1fcGFyYW1zKSAhPSBi dWYuYnVmX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJhbXMgPSBrY2FsbG9jKG51bV9w YXJhbXMsIHNpemVvZihzdHJ1Y3QgdGVlX3BhcmFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJh bXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmMgPSBjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5z dXBwX3JlY3YoY3R4LCAmZnVuYywgJm51bV9wYXJhbXMsIHBhcmFtcyk7CisJaWYgKHJjKQorCQln b3RvIG91dDsKKworCWlmIChwdXRfdXNlcihmdW5jLCAmdWFyZy0+ZnVuYykgfHwKKwkgICAgcHV0 X3VzZXIobnVtX3BhcmFtcywgJnVhcmctPm51bV9wYXJhbXMpKSB7CisJCXJjID0gLUVGQVVMVDsK KwkJZ290byBvdXQ7CisJfQorCisJdXBhcmFtcyA9IChzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIF9f dXNlciAqKSh1YXJnICsgMSk7CisJcmMgPSBwYXJhbXNfdG9fc3VwcCh1cGFyYW1zLCBudW1fcGFy YW1zLCBwYXJhbXMpOworb3V0OgorCWtmcmVlKHBhcmFtcyk7CisJcmV0dXJuIHJjOworfQorCitz dGF0aWMgaW50IHBhcmFtc19mcm9tX3N1cHAoc3RydWN0IHRlZV9wYXJhbSAqcGFyYW1zLAorCQlz aXplX3QgbnVtX3BhcmFtcywgc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJhbXMp Cit7CisJc2l6ZV90IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgbnVtX3BhcmFtczsgbisrKSB7CisJ CXN0cnVjdCB0ZWVfcGFyYW0gKnAgPSBwYXJhbXMgKyBuOworCQlzdHJ1Y3QgdGVlX2lvY3RsX3Bh cmFtIGlwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmaXAsIHVwYXJhbXMgKyBuLCBzaXplb2Yo aXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCS8qIEFsbCB1bnVzZWQgYXR0cmlidXRlIGJp dHMgaGFzIHRvIGJlIHplcm8gKi8KKwkJaWYgKGlwLmF0dHIgJiB+VEVFX0lPQ1RMX1BBUkFNX0FU VFJfVFlQRV9NQVNLKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcC0+YXR0ciA9IGlwLmF0dHI7 CisJCXN3aXRjaCAoaXAuYXR0cikgeworCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVf VkFMVUVfT1VUUFVUOgorCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5P VVQ6CisJCQkvKiBPbmx5IG91dCBhbmQgaW4vb3V0IHZhbHVlcyBjYW4gYmUgdXBkYXRlZCAqLwor CQkJcC0+dS52YWx1ZS5hID0gaXAudS52YWx1ZS5hOworCQkJcC0+dS52YWx1ZS5iID0gaXAudS52 YWx1ZS5iOworCQkJcC0+dS52YWx1ZS5jID0gaXAudS52YWx1ZS5jOworCQkJYnJlYWs7CisJCWNh c2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfT1VUUFVUOgorCQljYXNlIFRFRV9J T0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOT1VUOgorCQkJLyoKKwkJCSAqIE9ubHkgdGhl IHNpemUgb2YgdGhlIG1lbXJlZiBjYW4gYmUgdXBkYXRlZC4KKwkJCSAqIFNpbmNlIHdlIGRvbid0 IGhhdmUgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbAorCQkJICogcGFyYW1ldGVycyBoZXJlLCBvbmx5 IHN0b3JlIHRoZSBzdXBwbGllZCBzaXplLgorCQkJICogVGhlIGRyaXZlciB3aWxsIGNvcHkgdGhl IHVwZGF0ZWQgc2l6ZSBpbnRvIHRoZQorCQkJICogb3JpZ2luYWwgcGFyYW1ldGVycy4KKwkJCSAq LworCQkJcC0+dS5tZW1yZWYuc2htID0gTlVMTDsKKwkJCXAtPnUubWVtcmVmLnNobV9vZmZzID0g MDsKKwkJCXAtPnUubWVtcmVmLnNpemUgPSBpcC51Lm1lbXJlZi5zaXplOworCQkJYnJlYWs7CisJ CWRlZmF1bHQ6CisJCQltZW1zZXQoJnAtPnUsIDAsIHNpemVvZihwLT51KSk7CisJCQlicmVhazsK KwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWVfaW9jdGxfc3VwcF9zZW5k KHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LAorCQlzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIF9f dXNlciAqdWJ1ZikKK3sKKwlsb25nIHJjOworCXN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgYnVm OworCXN0cnVjdCB0ZWVfaW9jbF9zdXBwX3NlbmRfYXJnIF9fdXNlciAqdWFyZzsKKwlzdHJ1Y3Qg dGVlX3BhcmFtICpwYXJhbXM7CisJc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJh bXM7CisJdTMyIG51bV9wYXJhbXM7CisJdTMyIHJldDsKKworCS8qIE5vdCB2YWxpZCBmb3IgdGhp cyBkcml2ZXIgKi8KKwlpZiAoIWN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPnN1cHBfc2VuZCkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1Ziwgc2l6ZW9m KGJ1ZikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChidWYuYnVmX2xlbiA+IFRFRV9NQVhf QVJHX1NJWkUgfHwKKwkgICAgYnVmLmJ1Zl9sZW4gPCBzaXplb2Yoc3RydWN0IHRlZV9pb2NsX3N1 cHBfc2VuZF9hcmcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVhcmcgPSAoc3RydWN0IHRlZV9p b2NsX3N1cHBfc2VuZF9hcmcgX191c2VyICopKHVuc2lnbmVkIGxvbmcpCisJCWJ1Zi5idWZfcHRy OworCWlmIChnZXRfdXNlcihyZXQsICZ1YXJnLT5yZXQpIHx8CisJICAgIGdldF91c2VyKG51bV9w YXJhbXMsICZ1YXJnLT5udW1fcGFyYW1zKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoc2l6 ZW9mKCp1YXJnKSArIFRFRV9JT0NUTF9QQVJBTV9TSVpFKG51bV9wYXJhbXMpID4gYnVmLmJ1Zl9s ZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJcGFyYW1zID0ga2NhbGxvYyhudW1fcGFyYW1zLCBz aXplb2Yoc3RydWN0IHRlZV9wYXJhbSksIEdGUF9LRVJORUwpOworCWlmICghcGFyYW1zKQorCQly ZXR1cm4gLUVOT01FTTsKKworCXVwYXJhbXMgPSAoc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3Vz ZXIgKikodWFyZyArIDEpOworCXJjID0gcGFyYW1zX2Zyb21fc3VwcChwYXJhbXMsIG51bV9wYXJh bXMsIHVwYXJhbXMpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwlyYyA9IGN0eC0+dGVlZGV2 LT5kZXNjLT5vcHMtPnN1cHBfc2VuZChjdHgsIHJldCwgbnVtX3BhcmFtcywgcGFyYW1zKTsKK291 dDoKKwlrZnJlZShwYXJhbXMpOworCXJldHVybiByYzsKK30KKworCitzdGF0aWMgbG9uZyB0ZWVf aW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcg YXJnKQoreworCXN0cnVjdCB0ZWVfY29udGV4dCAqY3R4ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwor CXZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnOworCisJc3dpdGNoIChjbWQp IHsKKwljYXNlIFRFRV9JT0NfVkVSU0lPTjoKKwkJcmV0dXJuIHRlZV9pb2N0bF92ZXJzaW9uKGN0 eCwgdWFyZyk7CisJY2FzZSBURUVfSU9DX1NITV9BTExPQzoKKwkJcmV0dXJuIHRlZV9pb2N0bF9z aG1fYWxsb2MoY3R4LCB1YXJnKTsKKwljYXNlIFRFRV9JT0NfT1BFTl9TRVNTSU9OOgorCQlyZXR1 cm4gdGVlX2lvY3RsX29wZW5fc2Vzc2lvbihjdHgsIHVhcmcpOworCWNhc2UgVEVFX0lPQ19JTlZP S0U6CisJCXJldHVybiB0ZWVfaW9jdGxfaW52b2tlKGN0eCwgdWFyZyk7CisJY2FzZSBURUVfSU9D X0NBTkNFTDoKKwkJcmV0dXJuIHRlZV9pb2N0bF9jYW5jZWwoY3R4LCB1YXJnKTsKKwljYXNlIFRF RV9JT0NfQ0xPU0VfU0VTU0lPTjoKKwkJcmV0dXJuIHRlZV9pb2N0bF9jbG9zZV9zZXNzaW9uKGN0 eCwgdWFyZyk7CisJY2FzZSBURUVfSU9DX1NVUFBMX1JFQ1Y6CisJCXJldHVybiB0ZWVfaW9jdGxf c3VwcF9yZWN2KGN0eCwgdWFyZyk7CisJY2FzZSBURUVfSU9DX1NVUFBMX1NFTkQ6CisJCXJldHVy biB0ZWVfaW9jdGxfc3VwcF9zZW5kKGN0eCwgdWFyZyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0ZWVf Zm9wcyA9IHsKKwkub3BlbiA9IHRlZV9vcGVuLAorCS5yZWxlYXNlID0gdGVlX3JlbGVhc2UsCisJ LnVubG9ja2VkX2lvY3RsID0gdGVlX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSB0ZWVfaW9jdGws Cit9OworCitzdGF0aWMgdm9pZCB0ZWVfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2 KQoreworCXN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1 Y3QgdGVlX2RldmljZSwgZGV2KTsKKworCXNwaW5fbG9jaygmZHJpdmVyX2xvY2spOworCWNsZWFy X2JpdCh0ZWVkZXYtPmlkLCBkZXZfbWFzayk7CisJc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsK KwltdXRleF9kZXN0cm95KCZ0ZWVkZXYtPm11dGV4KTsKKwlrZnJlZSh0ZWVkZXYpOworfQorCitz dHJ1Y3QgdGVlX2RldmljZSAqdGVlX2RldmljZV9hbGxvYyhjb25zdCBzdHJ1Y3QgdGVlX2Rlc2Mg KnRlZWRlc2MsCisJCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0ZWVfc2htX3Bvb2wgKnBv b2wsCisJCQl2b2lkICpkcml2ZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2 OworCXZvaWQgKnJldDsKKwlpbnQgcmM7CisJaW50IG9mZnMgPSAwOworCisJaWYgKCF0ZWVkZXNj IHx8ICF0ZWVkZXNjLT5uYW1lIHx8ICF0ZWVkZXNjLT5vcHMgfHwKKwkgICAgIXRlZWRlc2MtPm9w cy0+Z2V0X3ZlcnNpb24gfHwgIXRlZWRlc2MtPm9wcy0+b3BlbiB8fAorCSAgICAhdGVlZGVzYy0+ b3BzLT5yZWxlYXNlIHx8ICFkZXYgfHwgIXBvb2wpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp OworCisJdGVlZGV2ID0ga3phbGxvYyhzaXplb2YoKnRlZWRldiksIEdGUF9LRVJORUwpOworCWlm ICghdGVlZGV2KSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gZXJyOworCX0K KworCWlmICh0ZWVkZXNjLT5mbGFncyAmIFRFRV9ERVNDX1BSSVZJTEVHRUQpCisJCW9mZnMgPSBU RUVfTlVNX0RFVklDRVMgLyAyOworCisJc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7CisJdGVlZGV2 LT5pZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkZXZfbWFzaywgVEVFX05VTV9ERVZJQ0VTLCBvZmZz KTsKKwlpZiAodGVlZGV2LT5pZCA8IFRFRV9OVU1fREVWSUNFUykKKwkJc2V0X2JpdCh0ZWVkZXYt PmlkLCBkZXZfbWFzayk7CisJc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKKworCWlmICh0ZWVk ZXYtPmlkID49IFRFRV9OVU1fREVWSUNFUykgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOwor CQlnb3RvIGVycjsKKwl9CisKKwlzbnByaW50Zih0ZWVkZXYtPm5hbWUsIHNpemVvZih0ZWVkZXYt Pm5hbWUpLCAidGVlJXMlZCIsCisJCSB0ZWVkZXNjLT5mbGFncyAmIFRFRV9ERVNDX1BSSVZJTEVH RUQgPyAicHJpdiIgOiAiIiwKKwkJIHRlZWRldi0+aWQgLSBvZmZzKTsKKworCXRlZWRldi0+ZGV2 LmNsYXNzID0gdGVlX2NsYXNzOworCXRlZWRldi0+ZGV2LnJlbGVhc2UgPSB0ZWVfcmVsZWFzZV9k ZXZpY2U7CisJdGVlZGV2LT5kZXYucGFyZW50ID0gZGV2OworCXRlZWRldi0+ZGV2LmRldnQgPSBN S0RFVihNQUpPUih0ZWVfZGV2dCksIHRlZWRldi0+aWQpOworCisJcmMgPSBkZXZfc2V0X25hbWUo JnRlZWRldi0+ZGV2LCAiJXMiLCB0ZWVkZXYtPm5hbWUpOworCWlmIChyYykgeworCQlyZXQgPSBF UlJfUFRSKHJjKTsKKwkJZ290byBlcnI7CisJfQorCisJY2Rldl9pbml0KCZ0ZWVkZXYtPmNkZXYs ICZ0ZWVfZm9wcyk7CisJdGVlZGV2LT5jZGV2Lm93bmVyID0gdGVlZGVzYy0+b3duZXI7CisJdGVl ZGV2LT5jZGV2LmtvYmoucGFyZW50ID0gJnRlZWRldi0+ZGV2LmtvYmo7CisKKwlkZXZfc2V0X2Ry dmRhdGEoJnRlZWRldi0+ZGV2LCBkcml2ZXJfZGF0YSk7CisJZGV2aWNlX2luaXRpYWxpemUoJnRl ZWRldi0+ZGV2KTsKKworCS8qIDEgYXMgdGVlX2RldmljZV91bnJlZ2lzdGVyKCkgZG9lcyBvbmUg ZmluYWwgdGVlX2RldmljZV9wdXQoKSAqLworCXRlZWRldi0+bnVtX3VzZXJzID0gMTsKKwlpbml0 X2NvbXBsZXRpb24oJnRlZWRldi0+Y19ub191c2Vycyk7CisJbXV0ZXhfaW5pdCgmdGVlZGV2LT5t dXRleCk7CisKKwl0ZWVkZXYtPmRlc2MgPSB0ZWVkZXNjOworCXRlZWRldi0+cG9vbCA9IHBvb2w7 CisJSU5JVF9MSVNUX0hFQUQoJnRlZWRldi0+bGlzdF9zaG0pOworCisJcmV0dXJuIHRlZWRldjsK K2VycjoKKwlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCByZWdpc3RlciAlcyBkcml2ZXJcbiIsCisJ CXRlZWRlc2MtPmZsYWdzICYgVEVFX0RFU0NfUFJJVklMRUdFRCA/ICJwcml2aWxlZ2VkIiA6ICJj bGllbnQiKTsKKwlpZiAodGVlZGV2ICYmIHRlZWRldi0+aWQgPCBURUVfTlVNX0RFVklDRVMpIHsK KwkJc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7CisJCWNsZWFyX2JpdCh0ZWVkZXYtPmlkLCBkZXZf bWFzayk7CisJCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7CisJfQorCWtmcmVlKHRlZWRldik7 CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRlZV9kZXZpY2VfYWxsb2MpOwor CitzdGF0aWMgc3NpemVfdCBpbXBsZW1lbnRhdGlvbl9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRl diwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3Ry dWN0IHRlZV9kZXZpY2UgKnRlZWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB0ZWVfZGV2 aWNlLCBkZXYpOworCXN0cnVjdCB0ZWVfaW9jdGxfdmVyc2lvbl9kYXRhIHZlcnM7CisKKwl0ZWVk ZXYtPmRlc2MtPm9wcy0+Z2V0X3ZlcnNpb24odGVlZGV2LCAmdmVycyk7CisJcmV0dXJuIHNjbnBy aW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2ZXJzLmltcGxfaWQpOworfQorc3RhdGljIERF VklDRV9BVFRSX1JPKGltcGxlbWVudGF0aW9uX2lkKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1 dGUgKnRlZV9kZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfaW1wbGVtZW50YXRpb25faWQuYXR0 ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0ZWVf ZGV2X2dyb3VwID0geworCS5hdHRycyA9IHRlZV9kZXZfYXR0cnMsCit9OworCitpbnQgdGVlX2Rl dmljZV9yZWdpc3RlcihzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2KQoreworCWludCByYzsKKwor CS8qCisJICogSWYgdGhlIHRlZWRldiBhbHJlYWR5IGlzIHJlZ2lzdGVyZWQsIGRvbid0IGRvIGl0 IGFnYWluLiBJdCdzCisJICogb2J2aW91c2x5IGFuIGVycm9yIHRvIHRyeSB0byByZWdpc3RlciB0 d2ljZSwgYnV0IGlmIHdlIHJldHVybgorCSAqIGFuIGVycm9yIHdlJ2xsIGZvcmNlIHRoZSBkcml2 ZXIgdG8gcmVtb3ZlIHRoZSB0ZWVkZXYuCisJICovCisJaWYgKHRlZWRldi0+ZmxhZ3MgJiBURUVf REVWSUNFX0ZMQUdfUkVHSVNURVJFRCkgeworCQlkZXZfZXJyKCZ0ZWVkZXYtPmRldiwgImF0dGVt cHQgdG8gcmVnaXN0ZXIgdHdpY2VcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyYyA9IGNkZXZf YWRkKCZ0ZWVkZXYtPmNkZXYsIHRlZWRldi0+ZGV2LmRldnQsIDEpOworCWlmIChyYykgeworCQlk ZXZfZXJyKCZ0ZWVkZXYtPmRldiwKKwkJCSJ1bmFibGUgdG8gY2Rldl9hZGQoKSAlcywgbWFqb3Ig JWQsIG1pbm9yICVkLCBlcnI9JWRcbiIsCisJCQl0ZWVkZXYtPm5hbWUsIE1BSk9SKHRlZWRldi0+ ZGV2LmRldnQpLAorCQkJTUlOT1IodGVlZGV2LT5kZXYuZGV2dCksIHJjKTsKKwkJcmV0dXJuIHJj OworCX0KKworCXJjID0gZGV2aWNlX2FkZCgmdGVlZGV2LT5kZXYpOworCWlmIChyYykgeworCQlk ZXZfZXJyKCZ0ZWVkZXYtPmRldiwKKwkJCSJ1bmFibGUgdG8gZGV2aWNlX2FkZCgpICVzLCBtYWpv ciAlZCwgbWlub3IgJWQsIGVycj0lZFxuIiwKKwkJCXRlZWRldi0+bmFtZSwgTUFKT1IodGVlZGV2 LT5kZXYuZGV2dCksCisJCQlNSU5PUih0ZWVkZXYtPmRldi5kZXZ0KSwgcmMpOworCQlnb3RvIGVy cl9kZXZpY2VfYWRkOworCX0KKworCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZ0ZWVkZXYtPmRl di5rb2JqLCAmdGVlX2Rldl9ncm91cCk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJnRlZWRldi0+ ZGV2LAorCQkJImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlcywgZXJyPSVkXG4iLCBy Yyk7CisJCWdvdG8gZXJyX3N5c2ZzX2NyZWF0ZV9ncm91cDsKKwl9CisKKwl0ZWVkZXYtPmZsYWdz IHw9IFRFRV9ERVZJQ0VfRkxBR19SRUdJU1RFUkVEOworCXJldHVybiAwOworCitlcnJfc3lzZnNf Y3JlYXRlX2dyb3VwOgorCWRldmljZV9kZWwoJnRlZWRldi0+ZGV2KTsKK2Vycl9kZXZpY2VfYWRk OgorCWNkZXZfZGVsKCZ0ZWVkZXYtPmNkZXYpOworCXJldHVybiByYzsKKworfQorRVhQT1JUX1NZ TUJPTF9HUEwodGVlX2RldmljZV9yZWdpc3Rlcik7CisKK3ZvaWQgdGVlX2RldmljZV9wdXQoc3Ry dWN0IHRlZV9kZXZpY2UgKnRlZWRldikKK3sKKwltdXRleF9sb2NrKCZ0ZWVkZXYtPm11dGV4KTsK KwkvKiBTaG91bGRuJ3QgcHV0IGluIHRoaXMgc3RhdGUgKi8KKwlpZiAoIVdBUk5fT04oIXRlZWRl di0+ZGVzYykpIHsKKwkJdGVlZGV2LT5udW1fdXNlcnMtLTsKKwkJaWYgKCF0ZWVkZXYtPm51bV91 c2VycykgeworCQkJdGVlZGV2LT5kZXNjID0gTlVMTDsKKwkJCWNvbXBsZXRlKCZ0ZWVkZXYtPmNf bm9fdXNlcnMpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmdGVlZGV2LT5tdXRleCk7Cit9CisK K2Jvb2wgdGVlX2RldmljZV9nZXQoc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldikKK3sKKwltdXRl eF9sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKKwlpZiAoIXRlZWRldi0+ZGVzYykgeworCQltdXRleF91 bmxvY2soJnRlZWRldi0+bXV0ZXgpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXRlZWRldi0+bnVt X3VzZXJzKys7CisJbXV0ZXhfdW5sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKKwlyZXR1cm4gdHJ1ZTsK K30KKwordm9pZCB0ZWVfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRl dikKK3sKKwlpZiAoIXRlZWRldikKKwkJcmV0dXJuOworCisJaWYgKHRlZWRldi0+ZmxhZ3MgJiBU RUVfREVWSUNFX0ZMQUdfUkVHSVNURVJFRCkgeworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnRlZWRl di0+ZGV2LmtvYmosICZ0ZWVfZGV2X2dyb3VwKTsKKwkJY2Rldl9kZWwoJnRlZWRldi0+Y2Rldik7 CisJCWRldmljZV9kZWwoJnRlZWRldi0+ZGV2KTsKKwl9CisKKwl0ZWVfZGV2aWNlX3B1dCh0ZWVk ZXYpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnRlZWRldi0+Y19ub191c2Vycyk7CisKKwkvKgor CSAqIE5vIG5lZWQgdG8gdGFrZSBhIG11dGV4IGFueSBsb25nZXIgbm93IHNpbmNlIHRlZWRldi0+ ZGVzYyB3YXMKKwkgKiBzZXQgdG8gTlVMTCBiZWZvcmUgdGVlZGV2LT5jX25vX3VzZXJzIHdhcyBj b21wbGV0ZWQuCisJICovCisKKwl0ZWVkZXYtPnBvb2wgPSBOVUxMOworCisJcHV0X2RldmljZSgm dGVlZGV2LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX2RldmljZV91bnJlZ2lzdGVy KTsKKwordm9pZCAqdGVlX2dldF9kcnZkYXRhKHN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYpCit7 CisJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSgmdGVlZGV2LT5kZXYpOworfQorRVhQT1JUX1NZTUJP TF9HUEwodGVlX2dldF9kcnZkYXRhKTsKKworc3RhdGljIGludCBfX2luaXQgdGVlX2luaXQodm9p ZCkKK3sKKwlpbnQgcmM7CisKKwl0ZWVfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUs ICJ0ZWUiKTsKKwlpZiAoSVNfRVJSKHRlZV9jbGFzcykpIHsKKwkJcHJfZXJyKCJjb3VsZG4ndCBj cmVhdGUgY2xhc3NcbiIpOworCQlyZXR1cm4gUFRSX0VSUih0ZWVfY2xhc3MpOworCX0KKworCXJj ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmdGVlX2RldnQsIDAsIFRFRV9OVU1fREVWSUNFUywgInRl ZSIpOworCWlmIChyYyA8IDApIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgY2hhciBk ZXYgcmVnaW9uXG4iKTsKKwkJY2xhc3NfZGVzdHJveSh0ZWVfY2xhc3MpOworCQl0ZWVfY2xhc3Mg PSBOVUxMOworCX0KKworCXJldHVybiByYzsKK30KKworc3Vic3lzX2luaXRjYWxsKHRlZV9pbml0 KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVlL3RlZV9wcml2YXRlLmggYi9kcml2ZXJzL3RlZS90 ZWVfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMmFjNTQK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS90ZWVfcHJpdmF0ZS5oCkBAIC0wLDAgKzEs ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIExpbmFybyBMaW1pdGVkCisgKgorICog VGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVk LCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKi8KKyNpZm5kZWYgVEVFX1BSSVZBVEVfSAorI2RlZmluZSBURUVfUFJJVkFURV9I CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Cisj aW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisKK3N0cnVj dCB0ZWVfZGV2aWNlOworCitzdHJ1Y3QgdGVlX3NobSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0 X25vZGU7CisJc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldjsKKwlwaHlzX2FkZHJfdCBwYWRkcjsK Kwl2b2lkICprYWRkcjsKKwlzaXplX3Qgc2l6ZTsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOwor CXUzMiBmbGFnczsKK307CisKK3N0cnVjdCB0ZWVfc2htX3Bvb2xfbWdyOworc3RydWN0IHRlZV9z aG1fcG9vbF9tZ3Jfb3BzIHsKKwlpbnQgKCphbGxvYykoc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3Ig KnBvb2xtZ3IsIHN0cnVjdCB0ZWVfc2htICpzaG0sCisJCSAgICAgc2l6ZV90IHNpemUpOworCXZv aWQgKCpmcmVlKShzdHJ1Y3QgdGVlX3NobV9wb29sX21nciAqcG9vbG1nciwgc3RydWN0IHRlZV9z aG0gKnNobSk7Cit9OworCitzdHJ1Y3QgdGVlX3NobV9wb29sX21nciB7CisJY29uc3Qgc3RydWN0 IHRlZV9zaG1fcG9vbF9tZ3Jfb3BzICpvcHM7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworfTsKKwor c3RydWN0IHRlZV9zaG1fcG9vbCB7CisJc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3IgcHJpdmF0ZV9t Z3I7CisJc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3IgZG1hX2J1Zl9tZ3I7CisJdm9pZCAoKmRlc3Ry b3kpKHN0cnVjdCB0ZWVfc2htX3Bvb2wgKnBvb2wpOworCXZvaWQgKnByaXZhdGVfZGF0YTsKK307 CisKKyNkZWZpbmUgVEVFX0RFVklDRV9GTEFHX1JFR0lTVEVSRUQJMHgxCisjZGVmaW5lIFRFRV9N QVhfREVWX05BTUVfTEVOCQkzMgorCitzdHJ1Y3QgdGVlX2RldmljZSB7CisJY2hhciBuYW1lW1RF RV9NQVhfREVWX05BTUVfTEVOXTsKKwljb25zdCBzdHJ1Y3QgdGVlX2Rlc2MgKmRlc2M7CisJaW50 IGlkOworCXVuc2lnbmVkIGZsYWdzOworCisJc3RydWN0IGRldmljZSBkZXY7CisJc3RydWN0IGNk ZXYgY2RldjsKKworCXNpemVfdCBudW1fdXNlcnM7CisJc3RydWN0IGNvbXBsZXRpb24gY19ub191 c2VyczsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfc2ht OworCXN0cnVjdCB0ZWVfc2htX3Bvb2wgKnBvb2w7Cit9OworCitpbnQgdGVlX3NobV9pbml0KHZv aWQpOworCitib29sIHRlZV9kZXZpY2VfZ2V0KHN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYpOwor dm9pZCB0ZWVfZGV2aWNlX3B1dChzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2KTsKKworI2VuZGlm IC8qVEVFX1BSSVZBVEVfSCovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS90ZWVfc2htLmMgYi9k cml2ZXJzL3RlZS90ZWVfc2htLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NjczMmU3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGVlL3RlZV9zaG0uYwpAQCAtMCww ICsxLDMyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgTGluYXJvIExpbWl0ZWQKKyAq CisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJp YnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxp bnV4L2ZkdGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4 L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGVl X2Rydi5oPgorI2luY2x1ZGUgInRlZV9wcml2YXRlLmgiCisKK3N0YXRpYyB2b2lkIHRlZV9zaG1f cmVsZWFzZShzdHJ1Y3QgdGVlX3NobSAqc2htKQoreworCXN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVk ZXYgPSBzaG0tPnRlZWRldjsKKwlzdHJ1Y3QgdGVlX3NobV9wb29sX21nciAqcG9vbG07CisKKwlt dXRleF9sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKKwlsaXN0X2RlbCgmc2htLT5saXN0X25vZGUpOwor CW11dGV4X3VubG9jaygmdGVlZGV2LT5tdXRleCk7CisKKwlpZiAoc2htLT5mbGFncyAmIFRFRV9T SE1fRE1BX0JVRikKKwkJcG9vbG0gPSAmdGVlZGV2LT5wb29sLT5kbWFfYnVmX21ncjsKKwllbHNl CisJCXBvb2xtID0gJnRlZWRldi0+cG9vbC0+cHJpdmF0ZV9tZ3I7CisKKwlwb29sbS0+b3BzLT5m cmVlKHBvb2xtLCBzaG0pOworCWtmcmVlKHNobSk7CisKKwl0ZWVfZGV2aWNlX3B1dCh0ZWVkZXYp OworfQorCitzdGF0aWMgc3RydWN0IHNnX3RhYmxlICp0ZWVfc2htX29wX21hcF9kbWFfYnVmKHN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQKKwkJCSphdHRhY2gsIGVudW0gZG1hX2RhdGFfZGlyZWN0 aW9uIGRpcikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdGVlX3NobV9vcF91 bm1hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKKwkJCXN0cnVj dCBzZ190YWJsZSAqdGFibGUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKwor c3RhdGljIHZvaWQgdGVlX3NobV9vcF9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7 CisJc3RydWN0IHRlZV9zaG0gKnNobSA9IGRtYWJ1Zi0+cHJpdjsKKworCXRlZV9zaG1fcmVsZWFz ZShzaG0pOworfQorCitzdGF0aWMgdm9pZCAqdGVlX3NobV9vcF9rbWFwX2F0b21pYyhzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmLAorCQkJdW5zaWduZWQgbG9uZyBwZ251bSkKK3sKKwlyZXR1cm4gTlVM TDsKK30KKworc3RhdGljIHZvaWQgKnRlZV9zaG1fb3Bfa21hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmLCB1bnNpZ25lZCBsb25nIHBnbnVtKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMg aW50IHRlZV9zaG1fb3BfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHRlZV9zaG0gKnNobSA9IGRtYWJ1Zi0+cHJp djsKKwlzaXplX3Qgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKworCXJldHVy biByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCBzaG0tPnBhZGRyID4+IFBBR0Vf U0hJRlQsCisJCQkgICAgICAgc2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpOworfQorCitzdGF0aWMg c3RydWN0IGRtYV9idWZfb3BzIHRlZV9zaG1fZG1hX2J1Zl9vcHMgPSB7CisJLm1hcF9kbWFfYnVm ID0gdGVlX3NobV9vcF9tYXBfZG1hX2J1ZiwKKwkudW5tYXBfZG1hX2J1ZiA9IHRlZV9zaG1fb3Bf dW5tYXBfZG1hX2J1ZiwKKwkucmVsZWFzZSA9IHRlZV9zaG1fb3BfcmVsZWFzZSwKKwkua21hcF9h dG9taWMgPSB0ZWVfc2htX29wX2ttYXBfYXRvbWljLAorCS5rbWFwID0gdGVlX3NobV9vcF9rbWFw LAorCS5tbWFwID0gdGVlX3NobV9vcF9tbWFwLAorfTsKKworc3RydWN0IHRlZV9zaG0gKnRlZV9z aG1fYWxsb2Moc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldiwgc2l6ZV90IHNpemUsCisJCQl1MzIg ZmxhZ3MpCit7CisJc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3IgKnBvb2xtID0gTlVMTDsKKwlzdHJ1 Y3QgdGVlX3NobSAqc2htOworCXZvaWQgKnJldDsKKwlpbnQgcmM7CisKKwlpZiAoIShmbGFncyAm IFRFRV9TSE1fTUFQUEVEKSkgeworCQlkZXZfZXJyKHRlZWRldi0+ZGV2LnBhcmVudCwKKwkJCSJv bmx5IG1hcHBlZCBhbGxvY2F0aW9ucyBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsKKwl9CisKKwlpZiAoKGZsYWdzICYgfihURUVfU0hNX01BUFBFRHxURUVfU0hNX0RN QV9CVUYpKSkgeworCQlkZXZfZXJyKHRlZWRldi0+ZGV2LnBhcmVudCwgImludmFsaWQgc2htIGZs YWdzIDB4JXgiLCBmbGFncyk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWlm ICghdGVlX2RldmljZV9nZXQodGVlZGV2KSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisK KwlpZiAoIXRlZWRldi0+cG9vbCkgeworCQkvKiB0ZWVkZXYgaGFzIGJlZW4gZGV0YWNoZWQgZnJv bSBkcml2ZXIgKi8KKwkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBlcnI7CisJfQor CisJc2htID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRlZV9zaG0pLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIXNobSkgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGVycjsKKwl9CisK KwlzaG0tPmZsYWdzID0gZmxhZ3M7CisJc2htLT50ZWVkZXYgPSB0ZWVkZXY7CisJaWYgKGZsYWdz ICYgVEVFX1NITV9ETUFfQlVGKQorCQlwb29sbSA9ICZ0ZWVkZXYtPnBvb2wtPmRtYV9idWZfbWdy OworCWVsc2UKKwkJcG9vbG0gPSAmdGVlZGV2LT5wb29sLT5wcml2YXRlX21ncjsKKworCXJjID0g cG9vbG0tPm9wcy0+YWxsb2MocG9vbG0sIHNobSwgc2l6ZSk7CisJaWYgKHJjKSB7CisJCXJldCA9 IEVSUl9QVFIocmMpOworCQlnb3RvIGVycjsKKwl9CisKKwltdXRleF9sb2NrKCZ0ZWVkZXYtPm11 dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZzaG0tPmxpc3Rfbm9kZSwgJnRlZWRldi0+bGlzdF9zaG0p OworCW11dGV4X3VubG9jaygmdGVlZGV2LT5tdXRleCk7CisKKwlpZiAoZmxhZ3MgJiBURUVfU0hN X0RNQV9CVUYpIHsKKwkJREVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOworCisJ CWV4cF9pbmZvLm9wcyA9ICZ0ZWVfc2htX2RtYV9idWZfb3BzOworCQlleHBfaW5mby5zaXplID0g c2htLT5zaXplOworCQlleHBfaW5mby5mbGFncyA9IE9fUkRXUjsKKwkJZXhwX2luZm8ucHJpdiA9 IHNobTsKKworCQlzaG0tPmRtYWJ1ZiA9IGRtYV9idWZfZXhwb3J0KCZleHBfaW5mbyk7CisJCWlm IChJU19FUlIoc2htLT5kbWFidWYpKSB7CisJCQlyZXQgPSBFUlJfQ0FTVChzaG0tPmRtYWJ1Zik7 CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiBzaG07CitlcnI6CisJaWYgKHBvb2xt ICYmIHNobSAmJiBzaG0tPmthZGRyKQorCQlwb29sbS0+b3BzLT5mcmVlKHBvb2xtLCBzaG0pOwor CWtmcmVlKHNobSk7CisJdGVlX2RldmljZV9wdXQodGVlZGV2KTsKKwlyZXR1cm4gcmV0OworfQor RVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9hbGxvYyk7CisKK2ludCB0ZWVfc2htX2dldF9mZChz dHJ1Y3QgdGVlX3NobSAqc2htKQoreworCXUzMiByZXFfZmxhZ3MgPSBURUVfU0hNX01BUFBFRCB8 IFRFRV9TSE1fRE1BX0JVRjsKKwlpbnQgZmQ7CisKKwlpZiAoKHNobS0+ZmxhZ3MgJiByZXFfZmxh Z3MpICE9IHJlcV9mbGFncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmZCA9IGRtYV9idWZfZmQo c2htLT5kbWFidWYsIE9fQ0xPRVhFQyk7CisJaWYgKGZkID49IDApCisJCWdldF9kbWFfYnVmKHNo bS0+ZG1hYnVmKTsKKwlyZXR1cm4gZmQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWVfc2htX2dl dF9mZCk7CisKK2ludCB0ZWVfc2htX3B1dF9mZChpbnQgZmQpCit7CisJcmV0dXJuIF9fY2xvc2Vf ZmQoY3VycmVudC0+ZmlsZXMsIGZkKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRlZV9zaG1fcHV0 X2ZkKTsKKwordm9pZCB0ZWVfc2htX2ZyZWUoc3RydWN0IHRlZV9zaG0gKnNobSkKK3sKKworCS8q CisJICogZG1hX2J1Zl9wdXQoKSBkZWNyZWFzZXMgdGhlIGRtYWJ1ZiByZWZlcmVuY2UgY291bnRl ciBhbmQgd2lsbAorCSAqIGNhbGwgdGVlX3NobV9yZWxlYXNlKCkgd2hlbiB0aGUgbGFzdCByZWZl cmVuY2UgaXMgZ29uZS4KKwkgKgorCSAqIEluIHRoZSBjYXNlIG9mIGRyaXZlciBwcml2YXRlIG1l bW9yeSB3ZSBjYWxsIHRlZV9zaG1fcmVsZWFzZQorCSAqIGRpcmVjdGx5IGluc3RlYWQgYXMgaXQg ZG9lc24ndCBoYXZlIGEgcmVmZXJlbmNlIGNvdW50ZXIuCisJICovCisJaWYgKHNobS0+ZmxhZ3Mg JiBURUVfU0hNX0RNQV9CVUYpCisJCWRtYV9idWZfcHV0KHNobS0+ZG1hYnVmKTsKKwllbHNlCisJ CXRlZV9zaG1fcmVsZWFzZShzaG0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9mcmVl KTsKKworc3RhdGljIGJvb2wgY21wX2tleV92YShzdHJ1Y3QgdGVlX3NobSAqc2htLCB1aW50cHRy X3QgdmEpCit7CisJdWludHB0cl90IHNobV92YSA9ICh1aW50cHRyX3Qpc2htLT5rYWRkcjsKKwor CXJldHVybiAodmEgPj0gc2htX3ZhKSAmJiAodmEgPCAoc2htX3ZhICsgc2htLT5zaXplKSk7Cit9 CisKK3N0YXRpYyBib29sIGNtcF9rZXlfcGEoc3RydWN0IHRlZV9zaG0gKnNobSwgdWludHB0cl90 IHBhKQoreworCXJldHVybiAocGEgPj0gc2htLT5wYWRkcikgJiYgKHBhIDwgKHNobS0+cGFkZHIg KyBzaG0tPnNpemUpKTsKK30KKworc3RhdGljIHN0cnVjdCB0ZWVfc2htICp0ZWVfc2htX2ZpbmRf Ynlfa2V5KHN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYsIHUzMiBmbGFncywKKwkJCWJvb2wgKCpj bXApKHN0cnVjdCB0ZWVfc2htICpzaG0sIHVpbnRwdHJfdCBrZXkpLAorCQkJdWludHB0cl90IGtl eSkKK3sKKwlzdHJ1Y3QgdGVlX3NobSAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgdGVlX3NobSAqc2ht OworCisJbXV0ZXhfbG9jaygmdGVlZGV2LT5tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShz aG0sICZ0ZWVkZXYtPmxpc3Rfc2htLCBsaXN0X25vZGUpIHsKKwkJaWYgKGNtcChzaG0sIGtleSkp IHsKKwkJCXJldCA9IHNobTsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmdGVl ZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgdGVlX3NobSAqdGVlX3No bV9maW5kX2J5X3ZhKHN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYsIHUzMiBmbGFncywKKwkJCXZv aWQgKnZhKQoreworCXJldHVybiB0ZWVfc2htX2ZpbmRfYnlfa2V5KHRlZWRldiwgZmxhZ3MsIGNt cF9rZXlfdmEsICh1aW50cHRyX3QpdmEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9m aW5kX2J5X3ZhKTsKKworc3RydWN0IHRlZV9zaG0gKnRlZV9zaG1fZmluZF9ieV9wYShzdHJ1Y3Qg dGVlX2RldmljZSAqdGVlZGV2LCB1MzIgZmxhZ3MsCisJCQlwaHlzX2FkZHJfdCBwYSkKK3sKKwly ZXR1cm4gdGVlX3NobV9maW5kX2J5X2tleSh0ZWVkZXYsIGZsYWdzLCBjbXBfa2V5X3BhLCBwYSk7 Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWVfc2htX2ZpbmRfYnlfcGEpOworCitpbnQgdGVlX3No bV92YTJwYShzdHJ1Y3QgdGVlX3NobSAqc2htLCB2b2lkICp2YSwgcGh5c19hZGRyX3QgKnBhKQor eworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIHJhbmdlIG9mIHRoZSBzaG0gKi8KKwlpZiAo KGNoYXIgKil2YSA8IChjaGFyICopc2htLT5rYWRkcikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYg KChjaGFyICopdmEgPj0gKChjaGFyICopc2htLT5rYWRkciArIHNobS0+c2l6ZSkpCisJCXJldHVy biAtRUlOVkFMOworCisJcmV0dXJuIHRlZV9zaG1fZ2V0X3BhKAorCQkJc2htLCAodW5zaWduZWQg bG9uZyl2YSAtICh1bnNpZ25lZCBsb25nKXNobS0+a2FkZHIsIHBhKTsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKHRlZV9zaG1fdmEycGEpOworCitpbnQgdGVlX3NobV9wYTJ2YShzdHJ1Y3QgdGVlX3No bSAqc2htLCBwaHlzX2FkZHJfdCBwYSwgdm9pZCAqKnZhKQoreworCS8qIENoZWNrIHRoYXQgd2Un cmUgaW4gdGhlIHJhbmdlIG9mIHRoZSBzaG0gKi8KKwlpZiAocGEgPCBzaG0tPnBhZGRyKQorCQly ZXR1cm4gLUVJTlZBTDsKKwlpZiAocGEgPj0gKHNobS0+cGFkZHIgKyBzaG0tPnNpemUpKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YSkgeworCQl2b2lkICp2ID0gdGVlX3NobV9nZXRfdmEo c2htLCBwYSAtIHNobS0+cGFkZHIpOworCisJCWlmIChJU19FUlIodikpCisJCQlyZXR1cm4gUFRS X0VSUih2KTsKKwkJKnZhID0gdjsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TCh0ZWVfc2htX3BhMnZhKTsKKwordm9pZCAqdGVlX3NobV9nZXRfdmEoc3RydWN0IHRlZV9zaG0g KnNobSwgc2l6ZV90IG9mZnMpCit7CisJaWYgKG9mZnMgPj0gc2htLT5zaXplKQorCQlyZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsKKwlyZXR1cm4gKGNoYXIgKilzaG0tPmthZGRyICsgb2ZmczsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKHRlZV9zaG1fZ2V0X3ZhKTsKKworaW50IHRlZV9zaG1fZ2V0X3Bh KHN0cnVjdCB0ZWVfc2htICpzaG0sIHNpemVfdCBvZmZzLCBwaHlzX2FkZHJfdCAqcGEpCit7CisJ aWYgKG9mZnMgPj0gc2htLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocGEpCisJCSpw YSA9IHNobS0+cGFkZHIgKyBvZmZzOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwo dGVlX3NobV9nZXRfcGEpOworCitzdGF0aWMgYm9vbCBpc19zaG1fZG1hX2J1ZihzdHJ1Y3QgZG1h X2J1ZiAqZG1hYnVmKQoreworCXJldHVybiBkbWFidWYtPm9wcyA9PSAmdGVlX3NobV9kbWFfYnVm X29wczsKK30KKworc3RydWN0IHRlZV9zaG0gKnRlZV9zaG1fZ2V0X2Zyb21fZmQoaW50IGZkKQor eworCXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBkbWFfYnVmX2dldChmZCk7CisKKwlpZiAoSVNf RVJSKGRtYWJ1ZikpCisJCXJldHVybiBFUlJfQ0FTVChkbWFidWYpOworCisJaWYgKCFpc19zaG1f ZG1hX2J1ZihkbWFidWYpKSB7CisJCWRtYV9idWZfcHV0KGRtYWJ1Zik7CisJCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOworCX0KKwlyZXR1cm4gZG1hYnVmLT5wcml2OworfQorRVhQT1JUX1NZTUJP TF9HUEwodGVlX3NobV9nZXRfZnJvbV9mZCk7CisKK3ZvaWQgdGVlX3NobV9wdXQoc3RydWN0IHRl ZV9zaG0gKnNobSkKK3sKKwlpZiAoc2htLT5mbGFncyAmIFRFRV9TSE1fRE1BX0JVRikKKwkJZG1h X2J1Zl9wdXQoc2htLT5kbWFidWYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9wdXQp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWUvdGVlX3NobV9wb29sLmMgYi9kcml2ZXJzL3RlZS90 ZWVfc2htX3Bvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWYyMmJj Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90ZWUvdGVlX3NobV9wb29sLmMKQEAgLTAsMCAr MSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIExpbmFybyBMaW1pdGVkCisgKgor ICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1 dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dl bmFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvdGVlX2Rydi5oPgorI2luY2x1ZGUgInRlZV9wcml2 YXRlLmgiCisKK3N0YXRpYyBpbnQgcG9vbF9vcF9nZW5fYWxsb2Moc3RydWN0IHRlZV9zaG1fcG9v bF9tZ3IgKnBvb2xtLAorCQkJc3RydWN0IHRlZV9zaG0gKnNobSwgc2l6ZV90IHNpemUpCit7CisJ dW5zaWduZWQgbG9uZyB2YTsKKwlzdHJ1Y3QgZ2VuX3Bvb2wgKmdlbnBvb2wgPSBwb29sbS0+cHJp dmF0ZV9kYXRhOworCXNpemVfdCBzID0gcm91bmR1cChzaXplLCAxIDw8IGdlbnBvb2wtPm1pbl9h bGxvY19vcmRlcik7CisKKwl2YSA9IGdlbl9wb29sX2FsbG9jKGdlbnBvb2wsIHMpOworCWlmICgh dmEpCisJCXJldHVybiAtRU5PTUVNOworCXNobS0+a2FkZHIgPSAodm9pZCAqKXZhOworCXNobS0+ cGFkZHIgPSBnZW5fcG9vbF92aXJ0X3RvX3BoeXMoZ2VucG9vbCwgdmEpOworCXNobS0+c2l6ZSA9 IHM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvb2xfb3BfZ2VuX2ZyZWUoc3RydWN0 IHRlZV9zaG1fcG9vbF9tZ3IgKnBvb2xtLAorCQkJc3RydWN0IHRlZV9zaG0gKnNobSkKK3sKKwln ZW5fcG9vbF9mcmVlKHBvb2xtLT5wcml2YXRlX2RhdGEsICh1bnNpZ25lZCBsb25nKXNobS0+a2Fk ZHIsCisJCSAgICAgIHNobS0+c2l6ZSk7CisJc2htLT5rYWRkciA9IE5VTEw7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdGVlX3NobV9wb29sX21ncl9vcHMgcG9vbF9vcHNfZ2VuZXJpYyA9IHsK KwkuYWxsb2MgPSBwb29sX29wX2dlbl9hbGxvYywKKwkuZnJlZSA9IHBvb2xfb3BfZ2VuX2ZyZWUs Cit9OworCitzdGF0aWMgdm9pZCBwb29sX3Jlc19tZW1fZGVzdHJveShzdHJ1Y3QgdGVlX3NobV9w b29sICpwb29sKQoreworCWdlbl9wb29sX2Rlc3Ryb3kocG9vbC0+cHJpdmF0ZV9tZ3IucHJpdmF0 ZV9kYXRhKTsKKwlnZW5fcG9vbF9kZXN0cm95KHBvb2wtPmRtYV9idWZfbWdyLnByaXZhdGVfZGF0 YSk7Cit9CisKK3N0YXRpYyBpbnQgcG9vbF9yZXNfbWVtX21ncl9pbml0KHN0cnVjdCB0ZWVfc2ht X3Bvb2xfbWdyICptZ3IsCisJCQlzdHJ1Y3QgdGVlX3NobV9wb29sX21lbV9pbmZvICppbmZvLCBp bnQgbWluX2FsbG9jX29yZGVyKQoreworCXNpemVfdCBwYWdlX21hc2sgPSBQQUdFX1NJWkUgLSAx OworCXN0cnVjdCBnZW5fcG9vbCAqZ2VucG9vbCA9IE5VTEw7CisJaW50IHJjOworCisJLyoKKwkg KiBTdGFydCBhbmQgZW5kIG11c3QgYmUgcGFnZSBhbGlnbmVkCisJICovCisJaWYgKChpbmZvLT52 YWRkciAmIHBhZ2VfbWFzaykgfHwgKGluZm8tPnBhZGRyICYgcGFnZV9tYXNrKSB8fAorCSAgICAo aW5mby0+c2l6ZSAmIHBhZ2VfbWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJZ2VucG9vbCA9 IGdlbl9wb29sX2NyZWF0ZShtaW5fYWxsb2Nfb3JkZXIsIC0xKTsKKwlpZiAoIWdlbnBvb2wpCisJ CXJldHVybiAtRU5PTUVNOworCisJZ2VuX3Bvb2xfc2V0X2FsZ28oZ2VucG9vbCwgZ2VuX3Bvb2xf YmVzdF9maXQsIE5VTEwpOworCXJjID0gZ2VuX3Bvb2xfYWRkX3ZpcnQoZ2VucG9vbCwgaW5mby0+ dmFkZHIsIGluZm8tPnBhZGRyLCBpbmZvLT5zaXplLAorCQkJICAgICAgIC0xKTsKKwlpZiAocmMp IHsKKwkJZ2VuX3Bvb2xfZGVzdHJveShnZW5wb29sKTsKKwkJcmV0dXJuIHJjOworCX0KKworCW1n ci0+cHJpdmF0ZV9kYXRhID0gZ2VucG9vbDsKKwltZ3ItPm9wcyA9ICZwb29sX29wc19nZW5lcmlj OworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdGVlX3NobV9wb29sICp0ZWVfc2htX3Bvb2xfYWxs b2NfcmVzX21lbShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgdGVlX3NobV9wb29sX21l bV9pbmZvICpwcml2X2luZm8sCisJCQlzdHJ1Y3QgdGVlX3NobV9wb29sX21lbV9pbmZvICpkbWFi dWZfaW5mbykKK3sKKwlzdHJ1Y3QgdGVlX3NobV9wb29sICpwb29sID0gTlVMTDsKKwlpbnQgcmV0 OworCisJcG9vbCA9IGt6YWxsb2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFw b29sKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qCisJICogQ3Jl YXRlIHRoZSBwb29sIGZvciBkcml2ZXIgcHJpdmF0ZSBzaGFyZWQgbWVtb3J5CisJICovCisJcmV0 ID0gcG9vbF9yZXNfbWVtX21ncl9pbml0KCZwb29sLT5wcml2YXRlX21nciwgcHJpdl9pbmZvLAor CQkJCSAgICAzIC8qIDggYnl0ZSBhbGlnbmVkICovKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsK KworCS8qCisJICogQ3JlYXRlIHRoZSBwb29sIGZvciBkbWFfYnVmIHNoYXJlZCBtZW1vcnkKKwkg Ki8KKwlyZXQgPSBwb29sX3Jlc19tZW1fbWdyX2luaXQoJnBvb2wtPmRtYV9idWZfbWdyLCBkbWFi dWZfaW5mbywKKwkJCQkgICAgUEFHRV9TSElGVCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisK Kwlwb29sLT5kZXN0cm95ID0gcG9vbF9yZXNfbWVtX2Rlc3Ryb3k7CisJcmV0dXJuIHBvb2w7Citl cnI6CisJaWYgKHJldCA9PSAtRU5PTUVNKQorCQlkZXZfZXJyKGRldiwgImNhbid0IGFsbG9jYXRl IG1lbW9yeSBmb3IgcmVzX21lbSBzaGFyZWQgbWVtb3J5IHBvb2xcbiIpOworCWlmIChwb29sICYm IHBvb2wtPnByaXZhdGVfbWdyLnByaXZhdGVfZGF0YSkKKwkJZ2VuX3Bvb2xfZGVzdHJveShwb29s LT5wcml2YXRlX21nci5wcml2YXRlX2RhdGEpOworCWtmcmVlKHBvb2wpOworCXJldHVybiBFUlJf UFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWVfc2htX3Bvb2xfYWxsb2NfcmVzX21l bSk7CisKK3ZvaWQgdGVlX3NobV9wb29sX2ZyZWUoc3RydWN0IHRlZV9zaG1fcG9vbCAqcG9vbCkK K3sKKwlwb29sLT5kZXN0cm95KHBvb2wpOworCWtmcmVlKHBvb2wpOworfQorRVhQT1JUX1NZTUJP TF9HUEwodGVlX3NobV9wb29sX2ZyZWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZWVf ZHJ2LmggYi9pbmNsdWRlL2xpbnV4L3RlZV9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4wNmNmZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90ZWVf ZHJ2LmgKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIExpbmFy byBMaW1pdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBj b3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX1RFRV9EUlZfSAorI2Rl ZmluZSBfX1RFRV9EUlZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxs aW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGVlLmg+CisKKy8qCisgKiBUaGUgZmlsZSBk ZXNjcmliZXMgdGhlIEFQSSBwcm92aWRlZCBieSB0aGUgZ2VuZXJpYyBURUUgZHJpdmVyIHRvIHRo ZQorICogc3BlY2lmaWMgVEVFIGRyaXZlci4KKyAqLworCisjZGVmaW5lIFRFRV9TSE1fTUFQUEVE CQkweDEJLyogTWVtb3J5IG1hcHBlZCBieSB0aGUga2VybmVsICovCisjZGVmaW5lIFRFRV9TSE1f RE1BX0JVRgkJMHgyCS8qIE1lbW9yeSB3aXRoIGRtYS1idWYgaGFuZGxlICovCisKK3N0cnVjdCB0 ZWVfZGV2aWNlOworc3RydWN0IHRlZV9zaG07CitzdHJ1Y3QgdGVlX3NobV9wb29sOworCisvKioK KyAqIHN0cnVjdCB0ZWVfY29udGV4dCAtIGRyaXZlciBzcGVjaWZpYyBjb250ZXh0IG9uIGZpbGUg cG9pbnRlciBkYXRhCisgKiBAdGVlZGV2Oglwb2ludGVyIHRvIHRoaXMgZHJpdmVycyBzdHJ1Y3Qg dGVlX2RldmljZQorICogQGRhdGE6CWRyaXZlciBzcGVjaWZpYyBjb250ZXh0IGRhdGEsIG1hbmFn ZWQgYnkgdGhlIGRyaXZlcgorICovCitzdHJ1Y3QgdGVlX2NvbnRleHQgeworCXN0cnVjdCB0ZWVf ZGV2aWNlICp0ZWVkZXY7CisJdm9pZCAqZGF0YTsKK307CisKK3N0cnVjdCB0ZWVfcGFyYW1fbWVt cmVmIHsKKwlzaXplX3Qgc2htX29mZnM7CisJc2l6ZV90IHNpemU7CisJc3RydWN0IHRlZV9zaG0g KnNobTsKK307CisKK3N0cnVjdCB0ZWVfcGFyYW1fdmFsdWUgeworCXU2NCBhOworCXU2NCBiOwor CXU2NCBjOworfTsKKworc3RydWN0IHRlZV9wYXJhbSB7CisJdTY0IGF0dHI7CisJdW5pb24gewor CQlzdHJ1Y3QgdGVlX3BhcmFtX21lbXJlZiBtZW1yZWY7CisJCXN0cnVjdCB0ZWVfcGFyYW1fdmFs dWUgdmFsdWU7CisJfSB1OworfTsKKworLyoqCisgKiBzdHJ1Y3QgdGVlX2RyaXZlcl9vcHMgLSBk cml2ZXIgb3BlcmF0aW9ucyB2dGFibGUKKyAqIEBnZXRfdmVyc2lvbjoJcmV0dXJucyB2ZXJzaW9u IG9mIGRyaXZlcgorICogQG9wZW46CQljYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGZpbGUgaXMgb3Bl bmVkCisgKiBAcmVsZWFzZToJCXJlbGVhc2UgdGhpcyBvcGVuIGZpbGUKKyAqLworc3RydWN0IHRl ZV9kcml2ZXJfb3BzIHsKKwl2b2lkICgqZ2V0X3ZlcnNpb24pKHN0cnVjdCB0ZWVfZGV2aWNlICp0 ZWVkZXYsCisJCQlzdHJ1Y3QgdGVlX2lvY3RsX3ZlcnNpb25fZGF0YSAqdmVycyk7CisJaW50ICgq b3Blbikoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgpOworCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3Qg dGVlX2NvbnRleHQgKmN0eCk7CisJaW50ICgqb3Blbl9zZXNzaW9uKShzdHJ1Y3QgdGVlX2NvbnRl eHQgKmN0eCwKKwkJCXN0cnVjdCB0ZWVfaW9jdGxfb3Blbl9zZXNzaW9uX2FyZyAqYXJnLAorCQkJ c3RydWN0IHRlZV9wYXJhbSAqcGFyYW0pOworCWludCAoKmNsb3NlX3Nlc3Npb24pKHN0cnVjdCB0 ZWVfY29udGV4dCAqY3R4LCB1MzIgc2Vzc2lvbik7CisJaW50ICgqaW52b2tlX2Z1bmMpKHN0cnVj dCB0ZWVfY29udGV4dCAqY3R4LAorCQkJc3RydWN0IHRlZV9pb2N0bF9pbnZva2VfYXJnICphcmcs CisJCQlzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSk7CisJaW50ICgqY2FuY2VsX3JlcSkoc3RydWN0 IHRlZV9jb250ZXh0ICpjdHgsIHUzMiBjYW5jZWxfaWQsIHUzMiBzZXNzaW9uKTsKKwlpbnQgKCpz dXBwX3JlY3YpKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIgKmZ1bmMsIHUzMiAqbnVtX3Bh cmFtcywKKwkJCXN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKTsKKwlpbnQgKCpzdXBwX3NlbmQpKHN0 cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIgcmV0LCB1MzIgbnVtX3BhcmFtcywKKwkJCXN0cnVj dCB0ZWVfcGFyYW0gKnBhcmFtKTsKK307CisKKy8qKgorICogc3RydWN0IHRlZV9kZXNjIC0gRGVz Y3JpYmVzIHRoZSBURUUgZHJpdmVyIHRvIHRoZSBzdWJzeXN0ZW0KKyAqIEBuYW1lOgluYW1lIG9m IGRyaXZlcgorICogQG9wczoJZHJpdmVyIG9wZXJhdGlvbnMgdnRhYmxlCisgKiBAb3duZXI6CW1v ZHVsZSBwcm92aWRpbmcgdGhlIGRyaXZlcgorICogQGZsYWdzOglFeHRyYSBwcm9wZXJ0aWVzIG9m IGRyaXZlciwgZGVmaW5lZCBieSBURUVfREVTQ18qIGJlbG93CisgKi8KKyNkZWZpbmUgVEVFX0RF U0NfUFJJVklMRUdFRAkweDEKK3N0cnVjdCB0ZWVfZGVzYyB7CisJY29uc3QgY2hhciAqbmFtZTsK Kwljb25zdCBzdHJ1Y3QgdGVlX2RyaXZlcl9vcHMgKm9wczsKKwlzdHJ1Y3QgbW9kdWxlICpvd25l cjsKKwl1MzIgZmxhZ3M7Cit9OworCisKKy8qKgorICogdGVlX2RldmljZV9hbGxvYygpIC0gQWxs b2NhdGUgYSBuZXcgc3RydWN0IHRlZV9kZXZpY2UgaW5zdGFuY2UKKyAqIEB0ZWVkZXNjOglEZXNj cmlwdG9yIGZvciB0aGlzIGRyaXZlcgorICogQGRldjoJUGFyZW50IGRldmljZSBmb3IgdGhpcyBk ZXZpY2UKKyAqIEBwb29sOglTaGFyZWQgbWVtb3J5IHBvb2wsIE5VTEwgaWYgbm90IHVzZWQKKyAq IEBkcml2ZXJfZGF0YTogUHJpdmF0ZSBkcml2ZXIgZGF0YSBmb3IgdGhpcyBkZXZpY2UKKyAqCisg KiBBbGxvY2F0ZXMgYSBuZXcgc3RydWN0IHRlZV9kZXZpY2UgaW5zdGFuY2UuIFRoZSBkZXZpY2Ug aXMKKyAqIHJlbW92ZWQgYnkgdGVlX2RldmljZV91bnJlZ2lzdGVyKCkuCisgKgorICogQHJldHVy bnMgYSBwb2ludGVyIHRvIGEgJ3N0cnVjdCB0ZWVfZGV2aWNlJyBvciBhbiBFUlJfUFRSIG9uIGZh aWx1cmUKKyAqLworc3RydWN0IHRlZV9kZXZpY2UgKnRlZV9kZXZpY2VfYWxsb2MoY29uc3Qgc3Ry dWN0IHRlZV9kZXNjICp0ZWVkZXNjLAorCQkJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdGVl X3NobV9wb29sICpwb29sLAorCQkJdm9pZCAqZHJpdmVyX2RhdGEpOworCisvKioKKyAqIHRlZV9k ZXZpY2VfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVycyBhIFRFRSBkZXZpY2UKKyAqIEB0ZWVkZXY6CURl dmljZSB0byByZWdpc3RlcgorICoKKyAqIHRlZV9kZXZpY2VfdW5yZWdpc3RlcigpIG5lZWQgdG8g YmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgQHRlZWRldiBpZgorICogdGhpcyBmdW5jdGlvbiBmYWls cy4KKyAqCisgKiBAcmV0dXJucyA8IDAgb24gZmFpbHVyZQorICovCitpbnQgdGVlX2RldmljZV9y ZWdpc3RlcihzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2KTsKKworLyoqCisgKiB0ZWVfZGV2aWNl X3VucmVnaXN0ZXIoKSAtIFJlbW92ZXMgYSBURUUgZGV2aWNlCisgKiBAdGVlZGV2OglEZXZpY2Ug dG8gdW5yZWdpc3RlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB0byBy ZW1vdmUgdGhlIEB0ZWVkZXYgZXZlbiBpZgorICogdGVlX2RldmljZV9yZWdpc3RlcigpIGhhc24n dCBiZWVuIGNhbGxlZCB5ZXQuIERvZXMgbm90aGluZyBpZgorICogQHRlZWRldiBpcyBOVUxMLgor ICovCit2b2lkIHRlZV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2 KTsKKworLyoqCisgKiBzdHJ1Y3QgdGVlX3NobV9wb29sX21lbV9pbmZvIC0gaG9sZHMgaW5mb3Jt YXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBhIHNoYXJlZCBtZW1vcnkgcG9vbAorICogQHZhZGRyOglW aXJ0dWFsIGFkZHJlc3Mgb2Ygc3RhcnQgb2YgcG9vbAorICogQHBhZGRyOglQaHlzaWNhbCBhZGRy ZXNzIG9mIHN0YXJ0IG9mIHBvb2wKKyAqIEBzaXplOglTaXplIGluIGJ5dGVzIG9mIHRoZSBwb29s CisgKi8KK3N0cnVjdCB0ZWVfc2htX3Bvb2xfbWVtX2luZm8geworCXVuc2lnbmVkIGxvbmcgdmFk ZHI7CisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKwlzaXplX3Qgc2l6ZTsKK307CisKKy8qKgorICog dGVlX3NobV9wb29sX2FsbG9jX3Jlc19tZW0oKSAtIENyZWF0ZSBhIHNoYXJlZCBtZW1vcnkgcG9v bCBmcm9tIHJlc2VydmVkIG1lbW9yeSByYW5nZQorICogQGRldjoJRGV2aWNlIGFsbG9jYXRpbmcg dGhlIHBvb2wKKyAqIEBwcml2X2luZm86CUluZm9ybWF0aW9uIGZvciBkcml2ZXIgcHJpdmF0ZSBz aGFyZWQgbWVtb3J5IHBvb2wKKyAqIEBkbWFidWZfaW5mbzogSW5mb3JtYXRpb24gZm9yIGRtYS1i dWYgc2hhcmVkIG1lbW9yeSBwb29sCisgKgorICogU3RhcnQgYW5kIGVuZCBvZiBwb29scyB3aWxs IG11c3QgYmUgcGFnZSBhbGlnbmVkLgorICoKKyAqIEFsbG9jYXRpb24gd2l0aCB0aGUgZmxhZyBU RUVfU0hNX0RNQV9CVUYgc2V0IHdpbGwgdXNlIHRoZSByYW5nZSBzdXBwbGllZAorICogaW4gQGRt YWJ1Ziwgb3RoZXJzIHdpbGwgdXNlIHRoZSByYW5nZSBwcm92aWRlZCBieSBAcHJpdi4KKyAqCisg KiBAcmV0dXJucyBwb2ludGVyIHRvIGEgJ3N0cnVjdCB0ZWVfc2htX3Bvb2wnIG9yIGFuIEVSUl9Q VFIgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IHRlZV9zaG1fcG9vbCAqdGVlX3NobV9wb29sX2Fs bG9jX3Jlc19tZW0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IHRlZV9zaG1fcG9vbF9t ZW1faW5mbyAqcHJpdl9pbmZvLAorCQkJc3RydWN0IHRlZV9zaG1fcG9vbF9tZW1faW5mbyAqZG1h YnVmX2luZm8pOworCisvKioKKyAqIHRlZV9zaG1fcG9vbF9mcmVlKCkgLSBGcmVlIGEgc2hhcmVk IG1lbW9yeSBwb29sCisgKiBAcG9vbDoJVGhlIHNoYXJlZCBtZW1vcnkgcG9vbCB0byBmcmVlCisg KgorICogVGhlIG11c3QgYmUgbm8gcmVtYWluaW5nIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGVkIGZy b20gdGhpcyBwb29sIHdoZW4KKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICovCit2b2lk IHRlZV9zaG1fcG9vbF9mcmVlKHN0cnVjdCB0ZWVfc2htX3Bvb2wgKnBvb2wpOworCisvKioKKyAq IHRlZV9nZXRfZHJ2ZGF0YSgpIC0gUmV0dXJuIGRyaXZlcl9kYXRhIHBvaW50ZXIKKyAqIEByZXR1 cm5zIHRoZSBkcml2ZXJfZGF0YSBwb2ludGVyIHN1cHBsaWVkIHRvIHRlZV9yZWdpc3RlcigpLgor ICovCit2b2lkICp0ZWVfZ2V0X2RydmRhdGEoc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldik7CisK Ky8qKgorICogdGVlX3NobV9hbGxvYygpIC0gQWxsb2NhdGUgc2hhcmVkIG1lbW9yeQorICogQHRl ZWRldjoJRHJpdmVyIHRoYXQgYWxsb2NhdGVzIHRoZSBzaGFyZWQgbWVtb3J5CisgKiBAc2l6ZToJ UmVxdWVzdGVkIHNpemUgb2Ygc2hhcmVkIG1lbW9yeQorICogQGZsYWdzOglGbGFncyBzZXR0aW5n IHByb3BlcnRpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgc2hhcmVkIG1lbW9yeS4KKyAqCisgKiBNZW1v cnkgYWxsb2NhdGVkIGFzIGdsb2JhbCBzaGFyZWQgbWVtb3J5IGlzIGF1dG9tYXRpY2FsbHkgZnJl ZWQgd2hlbiB0aGUKKyAqIFRFRSBmaWxlIHBvaW50ZXIgaXMgY2xvc2VkLiBUaGUgQGZsYWdzIGZp ZWxkIHVzZXMgdGhlIGJpdHMgZGVmaW5lZCBieQorICogVEVFX1NITV8qIGFib3ZlLiBURUVfU0hN X01BUFBFRCBtdXN0IGN1cnJlbnRseSBhbHdheXMgYmUgc2V0LiBJZgorICogVEVFX1NITV9ETUFf QlVGIGdsb2JhbCBzaGFyZWQgbWVtb3J5IHdpbGwgYmUgYWxsb2NhdGVkIGFuZCBhc3NvY2lhdGVk CisgKiB3aXRoIGEgZG1hLWJ1ZiBoYW5kbGUsIGVsc2UgZHJpdmVyIHByaXZhdGUgbWVtb3J5Lgor ICoKKyAqIEByZXR1cm5zIGEgcG9pbnRlciB0byAnc3RydWN0IHRlZV9zaG0nCisgKi8KK3N0cnVj dCB0ZWVfc2htICp0ZWVfc2htX2FsbG9jKHN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYsIHNpemVf dCBzaXplLAorCQkJdTMyIGZsYWdzKTsKKworLyoqCisgKiB0ZWVfc2htX2ZyZWUoKSAtIEZyZWUg c2hhcmVkIG1lbW9yeQorICogQHNobToJSGFuZGxlIHRvIHNoYXJlZCBtZW1vcnkgdG8gZnJlZQor ICovCit2b2lkIHRlZV9zaG1fZnJlZShzdHJ1Y3QgdGVlX3NobSAqc2htKTsKKworLyoqCisgKiB0 ZWVfc2htX2ZpbmRfYnlfdmEoKSAtIEZpbmQgYSBzaGFyZWQgbWVtb3J5IGhhbmRsZSBieSBhIHZp cnR1YWwgYWRkcmVzcworICogQHRlZWRldjoJVGhlIGRldmljZSB0aGF0IG93bnMgdGhlIHNoYXJl ZCBtZW1vcnkKKyAqIEBmbGFnczoJU2VsZWN0IHdoaWNoIHR5cGUgb2Ygc2hhcmVkIG1lbW9yeSB0 byBsb2NhdGUsIGlmCisgKgkJVEVFX1NITV9ETUFfQlVGIGdsb2JhbCBzaGFyZWQgbWVtb3J5IGVs c2UgZHJpdmVyIHByaXZhdGUKKyAqCQlzaGFyZWQgbWVtb3J5LgorICogQHZhOgkJVmlydHVhbCBh ZGRyZXNzIGNvdmVyZWQgYnkgdGhlIHNoYXJlZCBtZW1vcnkKKyAqIEByZXR1cm5zIGEgSGFuZGxl IHRvIHNoYXJlZCBtZW1vcnkKKyAqLworc3RydWN0IHRlZV9zaG0gKnRlZV9zaG1fZmluZF9ieV92 YShzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2LCB1MzIgZmxhZ3MsCisJCQl2b2lkICp2YSk7Cisv KioKKyAqIHRlZV9zaG1fZmluZF9ieV9wYSgpIC0gRmluZCBhIHNoYXJlZCBtZW1vcnkgaGFuZGxl IGJ5IGEgcGh5c2ljYWwgYWRkcmVzcworICogQHRlZWRldjoJVGhlIGRldmljZSB0aGF0IG93bnMg dGhlIHNoYXJlZCBtZW1vcnkKKyAqIEBmbGFnczoJU2VsZWN0IHdoaWNoIHR5cGUgb2Ygc2hhcmVk IG1lbW9yeSB0byBsb2NhdGUsIGlmCisgKgkJVEVFX1NITV9ETUFfQlVGIGdsb2JhbCBzaGFyZWQg bWVtb3J5IGVsc2UgZHJpdmVyIHByaXZhdGUKKyAqCQlzaGFyZWQgbWVtb3J5LgorICogQHBhOgkJ UGh5c2ljYWwgYWRkcmVzcyBjb3ZlcmVkIGJ5IHRoZSBzaGFyZWQgbWVtb3J5CisgKiBAcmV0dXJu cyBhIEhhbmRsZSB0byBzaGFyZWQgbWVtb3J5CisgKi8KK3N0cnVjdCB0ZWVfc2htICp0ZWVfc2ht X2ZpbmRfYnlfcGEoc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldiwgdTMyIGZsYWdzLAorCQkJcGh5 c19hZGRyX3QgcGEpOworCisvKioKKyAqIHRlZV9zaG1fdmEycGEoKSAtIEdldCBwaHlzaWNhbCBh ZGRyZXNzIG9mIGEgdmlydHVhbCBhZGRyZXNzCisgKiBAc2htOglTaGFyZWQgbWVtb3J5IGhhbmRs ZQorICogQHZhOgkJVmlydHVhbCBhZGRyZXNzIHRvIHRyYW5sc2F0ZQorICogQHBhOgkJUmV0dXJu ZWQgcGh5c2ljYWwgYWRkcmVzcworICogQHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCA8IDAgb24g ZmFpbHVyZQorICovCitpbnQgdGVlX3NobV92YTJwYShzdHJ1Y3QgdGVlX3NobSAqc2htLCB2b2lk ICp2YSwgcGh5c19hZGRyX3QgKnBhKTsKKworLyoqCisgKiB0ZWVfc2htX3BhMnZhKCkgLSBHZXQg dmlydHVhbCBhZGRyZXNzIG9mIGEgcGh5c2ljYWwgYWRkcmVzcworICogQHNobToJU2hhcmVkIG1l bW9yeSBoYW5kbGUKKyAqIEBwYToJCVBoeXNpY2FsIGFkZHJlc3MgdG8gdHJhbmxzYXRlCisgKiBA dmE6CQlSZXR1cm5lZCB2aXJ0dWFsIGFkZHJlc3MKKyAqIEByZXR1cm5zIDAgb24gc3VjY2VzcyBh bmQgPCAwIG9uIGZhaWx1cmUKKyAqLworaW50IHRlZV9zaG1fcGEydmEoc3RydWN0IHRlZV9zaG0g KnNobSwgcGh5c19hZGRyX3QgcGEsIHZvaWQgKip2YSk7CisKKy8qKgorICogdGVlX3NobV9nZXRf dmEoKSAtIEdldCB2aXJ0dWFsIGFkZHJlc3Mgb2YgYSBzaGFyZWQgbWVtb3J5IHBsdXMgYW4gb2Zm c2V0CisgKiBAc2htOglTaGFyZWQgbWVtb3J5IGhhbmRsZQorICogQG9mZnM6CU9mZnNldCBmcm9t IHN0YXJ0IG9mIHRoaXMgc2hhcmVkIG1lbW9yeQorICogQHJldHVybnMgdmlydHVhbCBhZGRyZXNz IG9mIHRoZSBzaGFyZWQgbWVtb3J5ICsgb2ZmcyBpZiBvZmZzIGlzIHdpdGhpbgorICoJdGhlIGJv dW5kcyBvZiB0aGlzIHNoYXJlZCBtZW1vcnksIGVsc2UgYW4gRVJSX1BUUgorICovCit2b2lkICp0 ZWVfc2htX2dldF92YShzdHJ1Y3QgdGVlX3NobSAqc2htLCBzaXplX3Qgb2Zmcyk7CisKKy8qKgor ICogdGVlX3NobV9nZXRfcGEoKSAtIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIGEgc2hhcmVkIG1l bW9yeSBwbHVzIGFuIG9mZnNldAorICogQHNobToJU2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqIEBv ZmZzOglPZmZzZXQgZnJvbSBzdGFydCBvZiB0aGlzIHNoYXJlZCBtZW1vcnkKKyAqIEBwYToJCVBo eXNpY2FsIGFkZHJlc3MgdG8gcmV0dXJuCisgKiBAcmV0dXJucyAwIGlmIG9mZnMgaXMgd2l0aGlu IHRoZSBib3VuZHMgb2YgdGhpcyBzaGFyZWQgbWVtb3J5LCBlbHNlIGFuCisgKgllcnJvciBjb2Rl LgorICovCitpbnQgdGVlX3NobV9nZXRfcGEoc3RydWN0IHRlZV9zaG0gKnNobSwgc2l6ZV90IG9m ZnMsIHBoeXNfYWRkcl90ICpwYSk7CisKKy8qKgorICogdGVlX3NobV9nZXRfZnJvbV9mZCgpIC0g R2V0IGEgc2hhcmVkIG1lbW9yeSBoYW5kbGUgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgorICogQGZk OgkJQSB1c2VyIHNwYWNlIGZpbGUgZGVzY3JpcHRvcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5j cmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnRlciBvbiB0aGUgc2hhcmVkIG1lbW9yeSBhbmQKKyAq IHJldHVybnMgYSBoYW5kbGUuCisgKiBAcmV0dXJucyBoYW5kbGUgdG8gc2hhcmVkIG1lbW9yeQor ICovCitzdHJ1Y3QgdGVlX3NobSAqdGVlX3NobV9nZXRfZnJvbV9mZChpbnQgZmQpOworCisvKioK KyAqIHRlZV9zaG1fcHV0KCkgLSBEZWNyZWFzZSByZWZlcmVuY2UgY291bnQgb24gYSBzaGFyZWQg bWVtb3J5IGhhbmRsZQorICogQHNobToJU2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqLwordm9pZCB0 ZWVfc2htX3B1dChzdHJ1Y3QgdGVlX3NobSAqc2htKTsKKworLyoqCisgKiB0ZWVfc2htX2dldF9m ZCgpIC0gSW5jcmVhc2UgcmVmZXJlbmNlIGNvdW50IGFuZCByZXR1cm4gZmlsZSBkZXNjcmlwdG9y CisgKiBAc2htOglTaGFyZWQgbWVtb3J5IGhhbmRsZQorICogQHJldHVybnMgdXNlciBzcGFjZSBm aWxlIGRlc2NyaXB0b3IgdG8gc2hhcmVkIG1lbW9yeQorICovCitpbnQgdGVlX3NobV9nZXRfZmQo c3RydWN0IHRlZV9zaG0gKnNobSk7CisKKy8qKgorICogdGVlX3NobV9wdXRfZmQoKSAtIERlY3Jl YXNlIHJlZmVyZW5jZSBjb3VudCBhbmQgY2xvc2UgZmlsZSBkZXNjcmlwdG9yCisgKiBAZmQ6CQlG aWxlIGRlc2NyaXB0b3IgdG8gY2xvc2UKKyAqIEByZXR1cm5zIDwgMCBvbiBmYWlsdXJlCisgKi8K K2ludCB0ZWVfc2htX3B1dF9mZChpbnQgZmQpOworCisjZW5kaWYgLypfX1RFRV9EUlZfSCovCmRp ZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdGVlLmggYi9pbmNsdWRlL3VhcGkvbGludXgv dGVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5Y2M2MQotLS0gL2Rl di9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC90ZWUuaApAQCAtMCwwICsxLDM4MyBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgTGluYXJvIExpbWl0ZWQKKyAqCisgKiBUaGlzIHNv ZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBt b2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqLworCisjaWZuZGVmIF9fVEVFX0gKKyNkZWZpbmUgX19URUVfSAorCisjaW5jbHVkZSA8bGlu dXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogVGhpcyBmaWxl IGRlc2NyaWJlcyB0aGUgQVBJIHByb3ZpZGVkIGJ5IGEgVEVFIGRyaXZlciB0byB1c2VyIHNwYWNl LgorICoKKyAqIEVhY2ggVEVFIGRyaXZlciBkZWZpbmVzIGEgVEVFIHNwZWNpZmljIHByb3RvY29s IHdoaWNoIGlzIHVzZWQgZm9yIHRoZQorICogZGF0YSBwYXNzZWQgYmFjayBhbmQgZm9ydGggdXNp bmcgVEVFX0lPQ19DTUQuCisgKi8KKworCisvKiBIZWxwZXJzIHRvIG1ha2UgdGhlIGlvY3RsIGRl ZmluZXMgKi8KKyNkZWZpbmUgVEVFX0lPQ19NQUdJQwkweGE0CisjZGVmaW5lIFRFRV9JT0NfQkFT RQkwCisKKy8qIEZsYWdzIHJlbGF0aW5nIHRvIHNoYXJlZCBtZW1vcnkgKi8KKyNkZWZpbmUgVEVF X0lPQ1RMX1NITV9NQVBQRUQJMHgxCS8qIG1lbW9yeSBtYXBwZWQgaW4gbm9ybWFsIHdvcmxkICov CisjZGVmaW5lIFRFRV9JT0NUTF9TSE1fRE1BX0JVRgkweDIJLyogZG1hLWJ1ZiBoYW5kbGUgb24g c2hhcmVkIG1lbW9yeSAqLworCisjZGVmaW5lIFRFRV9NQVhfQVJHX1NJWkUJMTAyNAorCisjZGVm aW5lIFRFRV9HRU5fQ0FQX0dQCQkoMSA8PCAwKS8qIEdsb2JhbCBQbGF0Zm9ybSBjb21wbGlhbnQg VEVFICovCisKKy8qCisgKiBURUUgSW1wbGVtZW50YXRpb24gSUQKKyAqLworI2RlZmluZSBURUVf SU1QTF9JRF9PUFRFRQkxCisKKy8qCisgKiBPUC1URUUgc3BlY2lmaWMgY2FwYWJpbGl0aWVzCisg Ki8KKyNkZWZpbmUgVEVFX09QVEVFX0NBUF9UWgkoMSA8PCAwKQorCisvKioKKyAqIHN0cnVjdCB0 ZWVfaW9jdGxfdmVyc2lvbl9kYXRhIC0gVEVFIHZlcnNpb24KKyAqIEBpbXBsX2lkOglbb3V0XSBU RUUgaW1wbGVtZW50YXRpb24gaWQKKyAqIEBpbXBsX2NhcHM6CVtvdXRdIEltcGxlbWVudGF0aW9u IHNwZWNpZmljIGNhcGFiaWxpdGllcworICogQGdlbl9jYXBzOglbb3V0XSBHZW5lcmljIGNhcGFi aWxpdGllcywgZGVmaW5lZCBieSBURUVfR0VOX0NBUFNfKiBhYm92ZQorICoKKyAqIElkZW50aWZp ZXMgdGhlIFRFRSBpbXBsZW1lbnRhaW9uLCBAaW1wbF9pZCBpcyBvbmUgb2YgVEVFX0lNUExfSURf KiBhYm92ZS4KKyAqIEBpbXBsX2NhcHMgaXMgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMsIGZvciBl eGFtcGxlIFRFRV9PUFRFRV9DQVBfKgorICogaXMgdmFsaWQgd2hlbiBAaW1wbF9pZCA9PSBURUVf SU1QTF9JRF9PUFRFRS4KKyAqLworc3RydWN0IHRlZV9pb2N0bF92ZXJzaW9uX2RhdGEgeworCV9f dTMyIGltcGxfaWQ7CisJX191MzIgaW1wbF9jYXBzOworCV9fdTMyIGdlbl9jYXBzOworfTsKKy8q KgorICogVEVFX0lPQ19WRVJTSU9OIC0gcXVlcnkgdmVyc2lvbiBvZiBURUUKKyAqCisgKiBUYWtl cyBhIHRlZV92ZXJzaW9uIHN0cnVjdCBhbmQgcmV0dXJucyB3aXRoIHRoZSBURUUgdmVyc2lvbiBk YXRhIGZpbGxlZAorICogaW4uCisgKi8KKyNkZWZpbmUgVEVFX0lPQ19WRVJTSU9OCQlfSU9SKFRF RV9JT0NfTUFHSUMsIFRFRV9JT0NfQkFTRSArIDAsIFwKKwkJCQkgICAgIHN0cnVjdCB0ZWVfaW9j dGxfdmVyc2lvbl9kYXRhKQorCisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jdGxfc2htX2FsbG9jX2Rh dGEgLSBTaGFyZWQgbWVtb3J5IGFsbG9jYXRlIGFyZ3VtZW50CisgKiBAc2l6ZToJW2luL291dF0g U2l6ZSBvZiBzaGFyZWQgbWVtb3J5IHRvIGFsbG9jYXRlCisgKiBAZmxhZ3M6CVtpbi9vdXRdIEZs YWdzIHRvL2Zyb20gYWxsb2NhdGlvbi4KKyAqIEBmZDoJCVtvdXRdIGRtYV9idWYgZmlsZSBkZXNj cmlwdG9yIG9mIHRoZSBzaGFyZWQgbWVtb3J5CisgKgorICogVGhlIGZsYWdzIGZpZWxkIHNob3Vs ZCBjdXJyZW50bHkgYmUgemVybyBhcyBpbnB1dC4gVXBkYXRlZCBieSB0aGUgY2FsbAorICogd2l0 aCBhY3R1YWwgZmxhZ3MgYXMgZGVmaW5lZCBieSBURUVfSU9DVExfU0hNXyogYWJvdmUuCisgKiBU aGlzIHN0cnVjdHVyZSBpcyB1c2VkIGFzIGFyZ3VtZW50IGZvciBURUVfSU9DX1NITV9BTExPQyBi ZWxvdy4KKyAqLworc3RydWN0IHRlZV9pb2N0bF9zaG1fYWxsb2NfZGF0YSB7CisJX191NjQgc2l6 ZTsKKwlfX3UzMiBmbGFnczsKKwlfX3MzMiBmZDsKK307CisvKioKKyAqIFRFRV9JT0NfU0hNX0FM TE9DIC0gYWxsb2NhdGUgc2hhcmVkIG1lbW9yeQorICoKKyAqIEFsbG9jYXRlcyBzaGFyZWQgbWVt b3J5IGJldHdlZW4gdGhlIHVzZXIgc3BhY2UgcHJvY2VzcyBhbmQgc2VjdXJlIE9TLgorICogVGhl IHJldHVybmVkIGZpbGUgZGVzY3JpcHRvciBpcyB1c2VkIHRvIG1hcCB0aGUgc2hhcmVkIG1lbW9y eSBpbnRvIHVzZXIKKyAqIHNwYWNlLiBUaGUgc2hhcmVkIG1lbW9yeSBpcyBmcmVlZCB3aGVuIHRo ZSBkZXNjcmlwdG9yIGlzIGNsb3NlZCBhbmQgdGhlCisgKiBtZW1vcnkgaXMgdW5tYXBwZWQuCisg Ki8KKyNkZWZpbmUgVEVFX0lPQ19TSE1fQUxMT0MJX0lPV1IoVEVFX0lPQ19NQUdJQywgVEVFX0lP Q19CQVNFICsgMSwgXAorCQkJCSAgICAgc3RydWN0IHRlZV9pb2N0bF9zaG1fYWxsb2NfZGF0YSkK KworLyoqCisgKiBzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIC0gVmFyaWFibGUgc2l6ZWQgYnVm ZmVyCisgKiBAYnVmX3B0cjoJW2luXSBBIF9fdXNlciBwb2ludGVyIHRvIGEgYnVmZmVyCisgKiBA YnVmX2xlbjoJW2luXSBMZW5ndGggb2YgdGhlIGJ1ZmZlciBhYm92ZQorICoKKyAqIFVzZWQgYXMg YXJndW1lbnQgZm9yIFRFRV9JT0NfT1BFTl9TRVNTSU9OLCBURUVfSU9DX0lOVk9LRSwKKyAqIFRF RV9JT0NfU1VQUExfUkVDViwgYW5kIFRFRV9JT0NfU1VQUExfU0VORCBiZWxvdy4KKyAqLworc3Ry dWN0IHRlZV9pb2N0bF9idWZfZGF0YSB7CisJX191NjQgYnVmX3B0cjsKKwlfX3U2NCBidWZfbGVu OworfTsKKworCisvKgorICogQXR0cmlidXRlcyBmb3Igc3RydWN0IHRlZV9pb2N0bF9wYXJhbSwg c2VsZWN0cyBmaWVsZCBpbiB0aGUgdW5pb24KKyAqLworI2RlZmluZSBURUVfSU9DVExfUEFSQU1f QVRUUl9UWVBFX05PTkUJCTAJLyogcGFyYW1ldGVyIG5vdCB1c2VkICovCisKKy8qCisgKiBUaGVz ZSBkZWZpbmVzIHZhbHVlIHBhcmFtZXRlcnMgKHN0cnVjdCB0ZWVfaW9jdGxfcGFyYW1fdmFsdWUp CisgKi8KKyNkZWZpbmUgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9JTlBVVAkxCisj ZGVmaW5lIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfT1VUUFVUCTIKKyNkZWZpbmUg VEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9JTk9VVAkzCS8qIGlucHV0IGFuZCBvdXRw dXQgKi8KKworLyoKKyAqIFRoZXNlIGRlZmluZXMgc2hhcmVkIG1lbW9yeSByZWZlcmVuY2UgcGFy YW1ldGVycyAoc3RydWN0CisgKiB0ZWVfaW9jdGxfcGFyYW1fbWVtcmVmKQorICovCisjZGVmaW5l IFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOUFVUCTUKKyNkZWZpbmUgVEVFX0lP Q1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfT1VUUFVUCTYKKyNkZWZpbmUgVEVFX0lPQ1RMX1BB UkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5PVVQJNwkvKiBpbnB1dCBhbmQgb3V0cHV0ICovCisKKy8q CisgKiBNYXNrIGZvciB0aGUgdHlwZSBwYXJ0IG9mIHRoZSBhdHRyaWJ1dGUsIGxlYXZlcyByb29t IGZvciBtb3JlIHR5cGVzCisgKi8KKyNkZWZpbmUgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9N QVNLCQkweGZmCisKKy8qCisgKiBNYXRjaGVzIFRFRUNfTE9HSU5fKiBpbiBHUCBURUUgQ2xpZW50 IEFQSQorICogSXMgb25seSBkZWZpbmVkIGZvciBHUCBjb21wbGlhbnQgVEVFcworICovCisjZGVm aW5lIFRFRV9JT0NUTF9MT0dJTl9QVUJMSUMJCQkwCisjZGVmaW5lIFRFRV9JT0NUTF9MT0dJTl9V U0VSCQkJMQorI2RlZmluZSBURUVfSU9DVExfTE9HSU5fR1JPVVAJCQkyCisjZGVmaW5lIFRFRV9J T0NUTF9MT0dJTl9BUFBMSUNBVElPTgkJNAorI2RlZmluZSBURUVfSU9DVExfTE9HSU5fVVNFUl9B UFBMSUNBVElPTgk1CisjZGVmaW5lIFRFRV9JT0NUTF9MT0dJTl9HUk9VUF9BUFBMSUNBVElPTgk2 CisKKy8qKgorICogc3RydWN0IHRlZV9pb2N0bF9wYXJhbV9tZW1yZWYgLSBtZW1vcnkgcmVmZXJl bmNlCisgKiBAc2htX29mZnM6CU9mZnNldCBpbnRvIHRoZSBzaGFyZWQgbWVtb3J5IG9iamVjdAor ICogQHNpemU6CVNpemUgb2YgdGhlIGJ1ZmZlcgorICogQHNobV9mZDoJU2hhcmVkIG1lbW9yeSBm aWxlIGRlc2NyaXB0b3IKKyAqCisgKiBTaGFyZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoIFRF RV9JT0NfU0hNX0FMTE9DIHdoaWNoIHJldHVybnMgYSBmaWxlCisgKiBkZXNjcmlwdG9yIGNvbm5l Y3RlZCB0byB0aGUgc2hhcmVkIG1lbW9yeSBvYmplY3QuIEEgbWVtcmVmIGNhbiByZWZlcmVuY2UK KyAqIGEgcGFydCBvZiBhIHNoYXJlZCBtZW1vcnkgYnkgc3BlY2lmeWluZyBhbiBvZmZzZXQgKEBz aG1fb2ZmcykgYW5kIEBzaXplCisgKiBvZiB0aGUgb2JqZWN0LiBUbyBzdXBwbHkgdGhlIGVudGly ZSBzaGFyZWQgbWVtb3J5IG9iamVjdCBzZXQgQHNobV9vZmZzIHRvIDAKKyAqIGFuZCBAc2l6ZSB0 byB0aGUgcHJldmlvdXNseSByZXR1cm5lZCBzaXplIG9mIHRoZSBvYmplY3QuCisgKi8KK3N0cnVj dCB0ZWVfaW9jdGxfcGFyYW1fbWVtcmVmIHsKKwlfX3U2NCBzaG1fb2ZmczsKKwlfX3U2NCBzaXpl OworCV9fczY0IHNobV9mZDsKK307CisKKy8qKgorICogc3RydWN0IHRlZV9pb2N0bF9wYXJhbV92 YWx1ZSAtIHZhbHVlcworICogQGE6IGZpcnN0IHZhbHVlCisgKiBAYjogc2Vjb25kIHZhbHVlCisg KiBAYzogdGhpcmQgdmFsdWUKKyAqLworc3RydWN0IHRlZV9pb2N0bF9wYXJhbV92YWx1ZSB7CisJ X191NjQgYTsKKwlfX3U2NCBiOworCV9fdTY0IGM7Cit9OworCisvKioKKyAqIHN0cnVjdCB0ZWVf aW9jdGxfcGFyYW0gLSBwYXJhbWV0ZXIKKyAqIEBhdHRyOiBhdHRyaWJ1dGVzCisgKiBAbWVtcmVm OiBhIG1lbW9yeSByZWZlcmVuY2UKKyAqIEB2YWx1ZTogYSB2YWx1ZQorICoKKyAqIEBhdHRyICYg VEVFX1BBUkFNX0FUVFJfVFlQRV9NQVNLIGluZGljYXRlcyBpZiBtZW1yZWYgb3IgdmFsdWUgaXMg dXNlZCBpbgorICogdGhlIHVuaW9uLiBURUVfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFXyogaW5kaWNh dGVzIHZhbHVlIGFuZAorICogVEVFX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfKiBpbmRpY2F0ZXMg bWVtcmVmLiBURUVfUEFSQU1fQVRUUl9UWVBFX05PTkUKKyAqIGluZGljYXRlcyB0aGF0IG5vbmUg b2YgdGhlIG1lbWJlcnMgYXJlIHVzZWQuCisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gewor CV9fdTY0IGF0dHI7CisJdW5pb24geworCQlzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtX21lbXJlZiBt ZW1yZWY7CisJCXN0cnVjdCB0ZWVfaW9jdGxfcGFyYW1fdmFsdWUgdmFsdWU7CisJfSB1OworfTsK KworI2RlZmluZSBURUVfSU9DVExfVVVJRF9MRU4JCTE2CisKKy8qKgorICogc3RydWN0IHRlZV9p b2N0bF9vcGVuX3Nlc3Npb25fYXJnIC0gT3BlbiBzZXNzaW9uIGFyZ3VtZW50CisgKiBAdXVpZDoJ W2luXSBVVUlEIG9mIHRoZSBUcnVzdGVkIEFwcGxpY2F0aW9uCisgKiBAY2xudF91dWlkOglbaW5d IFVVSUQgb2YgY2xpZW50CisgKiBAY2xudF9sb2dpbjoJW2luXSBMb2dpbiBjbGFzcyBvZiBjbGll bnQsIFRFRV9MT0dJTl8qIGFib3ZlCisgKiBAY2FuY2VsX2lkOglbaW5dIENhbmNlbGxhdGlvbiBp ZCwgYSB1bmlxdWUgdmFsdWUgdG8gaWRlbnRpZnkgdGhpcyByZXF1ZXN0CisgKiBAc2Vzc2lvbjoJ W291dF0gU2Vzc2lvbiBpZAorICogQHJldDoJW291dF0gcmV0dXJuIHZhbHVlCisgKiBAcmV0X29y aWdpbglbb3V0XSBvcmlnaW4gb2YgdGhlIHJldHVybiB2YWx1ZQorICogQG51bV9wYXJhbXMJW2lu XSBudW1iZXIgb2YgcGFyYW1ldGVycyBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3QKKyAqLworc3RydWN0 IHRlZV9pb2N0bF9vcGVuX3Nlc3Npb25fYXJnIHsKKwlfX3U4IHV1aWRbVEVFX0lPQ1RMX1VVSURf TEVOXTsKKwlfX3U4IGNsbnRfdXVpZFtURUVfSU9DVExfVVVJRF9MRU5dOworCV9fdTMyIGNsbnRf bG9naW47CisJX191MzIgY2FuY2VsX2lkOworCV9fdTMyIHNlc3Npb247CisJX191MzIgcmV0Owor CV9fdTMyIHJldF9vcmlnaW47CisJX191MzIgbnVtX3BhcmFtczsKKwkvKgorCSAqIHRoaXMgc3Ry dWN0IGlzIDggYnl0ZSBhbGlnbmVkIHNpbmNlIHRoZSAnc3RydWN0IHRlZV9pb2N0bF9wYXJhbScK KwkgKiB3aGljaCBmb2xsb3dzIHJlcXVpcmVzIDggYnl0ZSBhbGlnbm1lbnQuCisJICoKKwkgKiBD b21tZW50ZWQgb3V0IGVsZW1lbnQgdXNlZCB0byB2aXN1YWxpemUgdGhlIGxheW91dCBkeW5hbWlj IHBhcnQKKwkgKiBvZiB0aGUgc3RydWN0LiBUaGlzIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUgYXQg YWxsIGlmCisJICogbnVtX3BhcmFtcyA9PSAwLgorCSAqCisJICogc3RydWN0IHRlZV9pb2N0bF9w YXJhbSBwYXJhbXNbbnVtX3BhcmFtc107CisJICovCit9IF9fYWxpZ25lZCg4KTsKKworLyoqCisg KiBURUVfSU9DX09QRU5fU0VTU0lPTiAtIG9wZW5zIGEgc2Vzc2lvbiB0byBhIFRydXN0ZWQgQXBw bGljYXRpb24KKyAqCisgKiBUYWtlcyBhIHN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgd2hpY2gg Y29udGFpbnMgYSBzdHJ1Y3QKKyAqIHRlZV9pb2N0bF9vcGVuX3Nlc3Npb25fYXJnIGZvbGxvd2Vk IGJ5IGFueSBhcnJheSBvZiBzdHJ1Y3QKKyAqIHRlZV9pb2N0bF9wYXJhbQorICovCisjZGVmaW5l IFRFRV9JT0NfT1BFTl9TRVNTSU9OCV9JT1IoVEVFX0lPQ19NQUdJQywgVEVFX0lPQ19CQVNFICsg MiwgXAorCQkJCSAgICAgc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSkKKworLyoqCisgKiBzdHJ1 Y3QgdGVlX2lvY3RsX2ludm9rZV9mdW5jX2FyZyAtIEludm9rZXMgYSBmdW5jdGlvbiBpbiBhIFRy dXN0ZWQgQXBwbGljYXRpb24KKyAqIEBmdW5jOglbaW5dIFRydXN0ZWQgQXBwbGljYXRpb24gZnVu Y3Rpb24sIHNwZWNpZmljIHRvIHRoZSBUQQorICogQHNlc3Npb246CVtpbl0gU2Vzc2lvbiBpZAor ICogQGNhbmNlbF9pZDoJW2luXSBDYW5jZWxsYXRpb24gaWQsIGEgdW5pcXVlIHZhbHVlIHRvIGlk ZW50aWZ5IHRoaXMgcmVxdWVzdAorICogQHJldDoJW291dF0gcmV0dXJuIHZhbHVlCisgKiBAcmV0 X29yaWdpbglbb3V0XSBvcmlnaW4gb2YgdGhlIHJldHVybiB2YWx1ZQorICogQG51bV9wYXJhbXMJ W2luXSBudW1iZXIgb2YgcGFyYW1ldGVycyBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3QKKyAqLworc3Ry dWN0IHRlZV9pb2N0bF9pbnZva2VfYXJnIHsKKwlfX3UzMiBmdW5jOworCV9fdTMyIHNlc3Npb247 CisJX191MzIgY2FuY2VsX2lkOworCV9fdTMyIHJldDsKKwlfX3UzMiByZXRfb3JpZ2luOworCV9f dTMyIG51bV9wYXJhbXM7CisJLyoKKwkgKiB0aGlzIHN0cnVjdCBpcyA4IGJ5dGUgYWxpZ25lZCBz aW5jZSB0aGUgJ3N0cnVjdCB0ZWVfaW9jdGxfcGFyYW0nCisJICogd2hpY2ggZm9sbG93cyByZXF1 aXJlcyA4IGJ5dGUgYWxpZ25tZW50LgorCSAqCisJICogQ29tbWVudGVkIG91dCBlbGVtZW50IHVz ZWQgdG8gdmlzdWFsaXplIHRoZSBsYXlvdXQgZHluYW1pYyBwYXJ0CisJICogb2YgdGhlIHN0cnVj dC4gVGhpcyBmaWVsZCBpcyBub3QgYXZhaWxhYmxlIGF0IGFsbCBpZgorCSAqIG51bV9wYXJhbXMg PT0gMC4KKwkgKgorCSAqIHN0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gcGFyYW1zW251bV9wYXJhbXNd OworCSAqLworfSBfX2FsaWduZWQoOCk7CisKKy8qKgorICogVEVFX0lPQ19JTlZPS0UgLSBJbnZv a2VzIGEgZnVuY3Rpb24gaW4gYSBUcnVzdGVkIEFwcGxpY2F0aW9uCisgKgorICogVGFrZXMgYSBz dHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIHdoaWNoIGNvbnRhaW5zIGEgc3RydWN0CisgKiB0ZWVf aW52b2tlX2Z1bmNfYXJnIGZvbGxvd2VkIGJ5IGFueSBhcnJheSBvZiBzdHJ1Y3QgdGVlX3BhcmFt CisgKi8KKyNkZWZpbmUgVEVFX0lPQ19JTlZPS0UJCV9JT1IoVEVFX0lPQ19NQUdJQywgVEVFX0lP Q19CQVNFICsgMywgXAorCQkJCSAgICAgc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSkKKworLyoq CisgKiBzdHJ1Y3QgdGVlX2lvY3RsX2NhbmNlbF9hcmcgLSBDYW5jZWxzIGFuIG9wZW4gc2Vzc2lv biBvciBpbnZva2UgaW9jdGwKKyAqIEBjYW5jZWxfaWQ6CVtpbl0gQ2FuY2VsbGF0aW9uIGlkLCBh IHVuaXF1ZSB2YWx1ZSB0byBpZGVudGlmeSB0aGlzIHJlcXVlc3QKKyAqIEBzZXNzaW9uOglbaW5d IFNlc3Npb24gaWQsIGlmIHRoZSBzZXNzaW9uIGlzIG9wZW5lZCwgZWxzZSBzZXQgdG8gMAorICov CitzdHJ1Y3QgdGVlX2lvY3RsX2NhbmNlbF9hcmcgeworCV9fdTMyIGNhbmNlbF9pZDsKKwlfX3Uz MiBzZXNzaW9uOworfTsKKy8qKgorICogVEVFX0lPQ19DQU5DRUwgLSBDYW5jZWxzIGFuIG9wZW4g c2Vzc2lvbiBvciBpbnZva2UKKyAqLworI2RlZmluZSBURUVfSU9DX0NBTkNFTAkJX0lPUihURUVf SU9DX01BR0lDLCBURUVfSU9DX0JBU0UgKyA0LCBcCisJCQkJICAgICBzdHJ1Y3QgdGVlX2lvY3Rs X2NhbmNlbF9hcmcpCisKKy8qKgorICogc3RydWN0IHRlZV9pb2N0bF9jbG9zZV9zZXNzaW9uX2Fy ZyAtIENsb3NlcyBhbiBvcGVuIHNlc3Npb24KKyAqIEBzZXNzaW9uOglbaW5dIFNlc3Npb24gaWQK KyAqLworc3RydWN0IHRlZV9pb2N0bF9jbG9zZV9zZXNzaW9uX2FyZyB7CisJX191MzIgc2Vzc2lv bjsKK307CisvKioKKyAqIFRFRV9JT0NfQ0xPU0VfU0VTU0lPTiAtIENsb3NlcyBhIHNlc3Npb24K KyAqLworI2RlZmluZSBURUVfSU9DX0NMT1NFX1NFU1NJT04JX0lPUihURUVfSU9DX01BR0lDLCBU RUVfSU9DX0JBU0UgKyA1LCBcCisJCQkJICAgICBzdHJ1Y3QgdGVlX2lvY3RsX2Nsb3NlX3Nlc3Np b25fYXJnKQorCisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jbF9zdXBwX3JlY3ZfYXJnIC0gUmVjZWl2 ZSBhIHJlcXVlc3QgZm9yIGEgc3VwcGxpY2FudCBmdW5jdGlvbgorICogQGZ1bmM6CVtpbl0gc3Vw cGxpY2FudCBmdW5jdGlvbgorICogQG51bV9wYXJhbXMJW2luL291dF0gbnVtYmVyIG9mIHBhcmFt ZXRlcnMgZm9sbG93aW5nIHRoaXMgc3RydWN0CisgKgorICogQG51bV9wYXJhbXMgaXMgdGhlIG51 bWJlciBvZiBwYXJhbXMgdGhhdCB0ZWUtc3VwcGxpY2FudCBoYXMgcm9vbSB0bworICogcmVjZWl2 ZSB3aGVuIGlucHV0LCBAbnVtX3BhcmFtcyBpcyB0aGUgbnVtYmVyIG9mIGFjdHVhbCBwYXJhbXMK KyAqIHRlZS1zdXBwbGljYW50IHJlY2VpdmVzIHdoZW4gb3V0cHV0LgorICovCitzdHJ1Y3QgdGVl X2lvY2xfc3VwcF9yZWN2X2FyZyB7CisJX191MzIgZnVuYzsKKwlfX3UzMiBudW1fcGFyYW1zOwor CS8qCisJICogdGhpcyBzdHJ1Y3QgaXMgOCBieXRlIGFsaWduZWQgc2luY2UgdGhlICdzdHJ1Y3Qg dGVlX2lvY3RsX3BhcmFtJworCSAqIHdoaWNoIGZvbGxvd3MgcmVxdWlyZXMgOCBieXRlIGFsaWdu bWVudC4KKwkgKgorCSAqIENvbW1lbnRlZCBvdXQgZWxlbWVudCB1c2VkIHRvIHZpc3VhbGl6ZSB0 aGUgbGF5b3V0IGR5bmFtaWMgcGFydAorCSAqIG9mIHRoZSBzdHJ1Y3QuIFRoaXMgZmllbGQgaXMg bm90IGF2YWlsYWJsZSBhdCBhbGwgaWYKKwkgKiBudW1fcGFyYW1zID09IDAuCisJICoKKwkgKiBz dHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIHBhcmFtc1tudW1fcGFyYW1zXTsKKwkgKi8KK30gX19hbGln bmVkKDgpOworLyoqCisgKiBURUVfSU9DX1NVUFBMX1JFQ1YgLSBSZWNlaXZlIGEgcmVxdWVzdCBm b3IgYSBzdXBwbGljYW50IGZ1bmN0aW9uCisgKgorICogVGFrZXMgYSBzdHJ1Y3QgdGVlX2lvY3Rs X2J1Zl9kYXRhIHdoaWNoIGNvbnRhaW5zIGEgc3RydWN0CisgKiB0ZWVfaW9jbF9zdXBwX3JlY3Zf YXJnIGZvbGxvd2VkIGJ5IGFueSBhcnJheSBvZiBzdHJ1Y3QgdGVlX3BhcmFtCisgKi8KKyNkZWZp bmUgVEVFX0lPQ19TVVBQTF9SRUNWCV9JT1IoVEVFX0lPQ19NQUdJQywgVEVFX0lPQ19CQVNFICsg NiwgXAorCQkJCSAgICAgc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSkKKworCisvKioKKyAqIHN0 cnVjdCB0ZWVfaW9jbF9zdXBwX3NlbmRfYXJnIC0gU2VuZCBhIHJlc3BvbnNlIHRvIGEgcmVjZWl2 ZWQgcmVxdWVzdAorICogQHJldDoJW291dF0gcmV0dXJuIHZhbHVlCisgKiBAbnVtX3BhcmFtcwlb aW5dIG51bWJlciBvZiBwYXJhbWV0ZXJzIGZvbGxvd2luZyB0aGlzIHN0cnVjdAorICovCitzdHJ1 Y3QgdGVlX2lvY2xfc3VwcF9zZW5kX2FyZyB7CisJX191MzIgcmV0OworCV9fdTMyIG51bV9wYXJh bXM7CisJLyoKKwkgKiB0aGlzIHN0cnVjdCBpcyA4IGJ5dGUgYWxpZ25lZCBzaW5jZSB0aGUgJ3N0 cnVjdCB0ZWVfaW9jdGxfcGFyYW0nCisJICogd2hpY2ggZm9sbG93cyByZXF1aXJlcyA4IGJ5dGUg YWxpZ25tZW50LgorCSAqCisJICogQ29tbWVudGVkIG91dCBlbGVtZW50IHVzZWQgdG8gdmlzdWFs aXplIHRoZSBsYXlvdXQgZHluYW1pYyBwYXJ0CisJICogb2YgdGhlIHN0cnVjdC4gVGhpcyBmaWVs ZCBpcyBub3QgYXZhaWxhYmxlIGF0IGFsbCBpZgorCSAqIG51bV9wYXJhbXMgPT0gMC4KKwkgKgor CSAqIHN0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gcGFyYW1zW251bV9wYXJhbXNdOworCSAqLworfSBf X2FsaWduZWQoOCk7CisvKioKKyAqIFRFRV9JT0NfU1VQUExfU0VORCAtIFJlY2VpdmUgYSByZXF1 ZXN0IGZvciBhIHN1cHBsaWNhbnQgZnVuY3Rpb24KKyAqCisgKiBUYWtlcyBhIHN0cnVjdCB0ZWVf aW9jdGxfYnVmX2RhdGEgd2hpY2ggY29udGFpbnMgYSBzdHJ1Y3QKKyAqIHRlZV9pb2NsX3N1cHBf c2VuZF9hcmcgZm9sbG93ZWQgYnkgYW55IGFycmF5IG9mIHN0cnVjdCB0ZWVfcGFyYW0KKyAqLwor I2RlZmluZSBURUVfSU9DX1NVUFBMX1NFTkQJX0lPUihURUVfSU9DX01BR0lDLCBURUVfSU9DX0JB U0UgKyA3LCBcCisJCQkJICAgICBzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhKQorCisKKy8qCisg KiBGaXZlIHN5c2NhbGxzIGFyZSB1c2VkIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoZSBURUUg ZHJpdmVyLgorICogb3BlbigpOiBvcGVucyB0aGUgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUg ZHJpdmVyCisgKiBpb2N0bCgpOiBhcyBkZXNjcmliZWQgYWJvdmUgb3BlcmF0aW5nIG9uIHRoZSBm aWxlIGRlc2NyaXB0b3IgZnJvbSBvcGVuKCkKKyAqIGNsb3NlKCk6IHR3byBjYXNlcworICogICAt IGNsb3NlcyB0aGUgZGV2aWNlIGZpbGUgZGVzY3JpcHRvcgorICogICAtIGNsb3NlcyBhIGZpbGUg ZGVzY3JpcHRvciBjb25uZWN0ZWQgdG8gYWxsb2NhdGVkIHNoYXJlZCBtZW1vcnkKKyAqIG1tYXAo KTogbWFwcyBzaGFyZWQgbWVtb3J5IGludG8gdXNlciBzcGFjZSB1c2luZyBpbmZvcm1hdGlvbiBm cm9tIHN0cnVjdAorICoJICAgdGVlX2lvY3RsX3NobV9hbGxvY19kYXRhCisgKiBtdW5tYXAoKTog dW5tYXBzIHByZXZpb3VzbHkgc2hhcmVkIG1lbW9yeQorICovCisKKyNlbmRpZiAvKl9fVEVFX0gq LwotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg==