From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jens Wiklander Subject: [PATCH v6 4/6] tee: generic TEE subsystem Date: Thu, 29 Oct 2015 09:21:26 +0100 Message-ID: <1446106888-8983-5-git-send-email-jens.wiklander@linaro.org> References: <1446106888-8983-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: <1446106888-8983-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, Arnd Bergmann , Greg Kroah-Hartman , Kees Cook Cc: valentin.manea@huawei.com, Mark Rutland , javier@javigon.com, emmanuel.michel@st.com, 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 ZWUvS2NvbmZpZyAgICAgICAgICAgICAgICAgIHwgICA4ICsKIGRyaXZlcnMvdGVlL01ha2VmaWxl ICAgICAgICAgICAgICAgICB8ICAgMyArCiBkcml2ZXJzL3RlZS90ZWUuYyAgICAgICAgICAgICAg ICAgICAgfCA4NzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv dGVlL3RlZV9wcml2YXRlLmggICAgICAgICAgICB8ICA4MCArKysrCiBkcml2ZXJzL3RlZS90ZWVf c2htLmMgICAgICAgICAgICAgICAgfCAzMjQgKysrKysrKysrKysrKwogZHJpdmVycy90ZWUvdGVl X3NobV9wb29sLmMgICAgICAgICAgIHwgMTMzICsrKysrKwogaW5jbHVkZS9saW51eC90ZWVfZHJ2 LmggICAgICAgICAgICAgIHwgMzAwICsrKysrKysrKysrKwogaW5jbHVkZS91YXBpL2xpbnV4L3Rl ZS5oICAgICAgICAgICAgIHwgMzgzICsrKysrKysrKysrKysrKwogMTIgZmlsZXMgY2hhbmdlZCwg MjExNSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvS2NvbmZp ZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdGVlL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy90ZWUvdGVlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3RlZS90 ZWVfcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvdGVlX3NobS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvdGVlX3NobV9wb29sLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBpbmNsdWRlL2xpbnV4L3RlZV9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1 ZGUvdWFwaS9saW51eC90ZWUuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9j dGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRl eCBkZjFiMjVlLi44ZTRiN2FjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3Rs LW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBA IC0zMDMsNiArMzAzLDcgQEAgQ29kZSAgU2VxIyhoZXgpCUluY2x1ZGUgRmlsZQkJQ29tbWVudHMK IDB4QTMJODAtOEYJUG9ydCBBQ0wJCWluIGRldmVsb3BtZW50OgogCQkJCQk8bWFpbHRvOnRsZXdp c0BtaW5kc3ByaW5nLmNvbT4KIDB4QTMJOTAtOUYJbGludXgvZHRsay5oCisweEE0CTAwLTFGCXVh cGkvbGludXgvdGVlLmgJR2VuZXJpYyBURUUgc3Vic3lzdGVtCiAweEFBCTAwLTNGCWxpbnV4L3Vh cGkvbGludXgvdXNlcmZhdWx0ZmQuaAogMHhBQgkwMC0xRglsaW51eC9uYmQuaAogMHhBQwkwMC0x RglsaW51eC9yYXcuaApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRl eCA5ZGUxODVkLi45M2IxZGQ4IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJ TkVSUwpAQCAtOTEzMyw2ICs5MTMzLDEzIEBAIFM6CU1haW50YWluZWQKIEY6CWluY2x1ZGUvbGlu dXgvbW1jL2R3X21tYy5oCiBGOglkcml2ZXJzL21tYy9ob3N0L2R3X21tYyoKIAorVEVFIFNVQlNZ U1RFTQorTToJSmVucyBXaWtsYW5kZXIgPGplbnMud2lrbGFuZGVyQGxpbmFyby5vcmc+CitTOglN YWludGFpbmVkCitGOglpbmNsdWRlL2xpbnV4L3RlZV9kcnYuaAorRjoJaW5jbHVkZS91YXBpL2xp bnV4L3RlZS5oCitGOglkcml2ZXJzL3RlZS8KKwogVEhVTkRFUkJPTFQgRFJJVkVSCiBNOglBbmRy ZWFzIE5vZXZlciA8YW5kcmVhcy5ub2V2ZXJAZ21haWwuY29tPgogUzoJTWFpbnRhaW5lZApkaWZm IC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDQ2YjRhOGUu LmZkZDJlOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25m aWcKQEAgLTE4OCw0ICsxODgsNiBAQCBzb3VyY2UgImRyaXZlcnMvbnZkaW1tL0tjb25maWciCiAK IHNvdXJjZSAiZHJpdmVycy9udm1lbS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvdGVlL0tj b25maWciCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJz L01ha2VmaWxlCmluZGV4IGIyNTBiMzYuLjkxYzA0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtMTY3LDMgKzE2Nyw0IEBAIG9iai0kKENP TkZJR19USFVOREVSQk9MVCkJKz0gdGh1bmRlcmJvbHQvCiBvYmotJChDT05GSUdfQ09SRVNJR0hU KQkJKz0gaHd0cmFjaW5nL2NvcmVzaWdodC8KIG9iai0kKENPTkZJR19BTkRST0lEKQkJKz0gYW5k cm9pZC8KIG9iai0kKENPTkZJR19OVk1FTSkJCSs9IG52bWVtLworb2JqLSQoQ09ORklHX1RFRSkJ CSs9IHRlZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVlL0tjb25maWcgYi9kcml2ZXJzL3RlZS9L Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YThjZDcKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS9LY29uZmlnCkBAIC0wLDAgKzEsOCBAQAorIyBHZW5l cmljIFRydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IENvbmZpZ3VyYXRpb24KK2NvbmZpZyBU RUUKKwlib29sICJUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCBzdXBwb3J0IgorCWRlZmF1 bHQgbgorCXNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUgorCWhlbHAKKwkgIFRoaXMgaW1wbGVtZW50 cyBhIGdlbmVyaWMgaW50ZXJmYWNlIHRvd2FyZHMgYSBUcnVzdGVkIEV4ZWN1dGlvbgorCSAgRW52 aXJvbm1lbnQgKFRFRSkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9NYWtlZmlsZSBiL2RyaXZl cnMvdGVlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDJk YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS9NYWtlZmlsZQpAQCAtMCwwICsxLDMg QEAKK29iai15ICs9IHRlZS5vCitvYmoteSArPSB0ZWVfc2htLm8KK29iai15ICs9IHRlZV9zaG1f cG9vbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS90ZWUuYyBiL2RyaXZlcnMvdGVlL3RlZS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTFjNzYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL3RlZS90ZWUuYwpAQCAtMCwwICsxLDg3MyBAQAorLyoKKyAqIENvcHly aWdodCAoYykgMjAxNSwgTGluYXJvIExpbWl0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxp Y2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRl ciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1 ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxs aW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNj ZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdGVlX2Rydi5oPgorI2luY2x1ZGUgInRlZV9wcml2YXRl LmgiCisKKyNkZWZpbmUgVEVFX05VTV9ERVZJQ0VTCTMyCisKKyNkZWZpbmUgVEVFX0lPQ1RMX1BB UkFNX1NJWkUoeCkgKHNpemVvZihzdHJ1Y3QgdGVlX3BhcmFtKSAqICh4KSkKKworLyoKKyAqIFVu cHJpdmlsZWdlZCBkZXZpY2VzIGluIHRoZSBpbiB0aGUgbG93ZXIgaGFsZiByYW5nZSBhbmQgcHJp dmlsZWdlZAorICogZGV2aWNlcyBpbiB0aGUgdXBwZXIgaGFsZiByYW5nZS4KKyAqLworc3RhdGlj IERFQ0xBUkVfQklUTUFQKGRldl9tYXNrLCBURUVfTlVNX0RFVklDRVMpOworc3RhdGljIERFRklO RV9TUElOTE9DSyhkcml2ZXJfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKnRlZV9jbGFz czsKK3N0YXRpYyBkZXZfdCB0ZWVfZGV2dDsKKworc3RhdGljIGludCB0ZWVfb3BlbihzdHJ1Y3Qg aW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHRl ZV9kZXZpY2UgKnRlZWRldjsKKwlzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eDsKKworCXRlZWRldiA9 IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgdGVlX2RldmljZSwgY2Rldik7CisJ aWYgKCF0ZWVfZGV2aWNlX2dldCh0ZWVkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN0eCA9 IGt6YWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkgeworCQlyYyA9 IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWN0eC0+dGVlZGV2ID0gdGVlZGV2OworCWZp bHAtPnByaXZhdGVfZGF0YSA9IGN0eDsKKwlyYyA9IHRlZWRldi0+ZGVzYy0+b3BzLT5vcGVuKGN0 eCk7CisJaWYgKHJjKQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyOgorCWtmcmVlKGN0 eCk7CisJdGVlX2RldmljZV9wdXQodGVlZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBp bnQgdGVlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7 CisJc3RydWN0IHRlZV9jb250ZXh0ICpjdHggPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0 IHRlZV9kZXZpY2UgKnRlZWRldiA9IGN0eC0+dGVlZGV2OworCisJY3R4LT50ZWVkZXYtPmRlc2Mt Pm9wcy0+cmVsZWFzZShjdHgpOworCWtmcmVlKGN0eCk7CisJdGVlX2RldmljZV9wdXQodGVlZGV2 KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWVfaW9jdGxfdmVyc2lvbihzdHJ1Y3Qg dGVlX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHRlZV9pb2N0bF92ZXJzaW9uX2RhdGEgX191c2Vy ICp1dmVycykKK3sKKwlzdHJ1Y3QgdGVlX2lvY3RsX3ZlcnNpb25fZGF0YSB2ZXJzOworCisJY3R4 LT50ZWVkZXYtPmRlc2MtPm9wcy0+Z2V0X3ZlcnNpb24oY3R4LT50ZWVkZXYsICZ2ZXJzKTsKKwlp ZiAoY29weV90b191c2VyKHV2ZXJzLCAmdmVycywgc2l6ZW9mKHZlcnMpKSkKKwkJcmV0dXJuIC1F RkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVlX2lvY3RsX3NobV9hbGxvYyhz dHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHRlZV9pb2N0bF9zaG1fYWxsb2NfZGF0 YSBfX3VzZXIgKnVkYXRhKQoreworCWxvbmcgcmV0OworCXN0cnVjdCB0ZWVfaW9jdGxfc2htX2Fs bG9jX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOworCisJaWYgKGNvcHlfZnJvbV91 c2VyKCZkYXRhLCB1ZGF0YSwgc2l6ZW9mKGRhdGEpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkv KiBDdXJyZW50bHkgbm8gaW5wdXQgZmxhZ3MgYXJlIHN1cHBvcnRlZCAqLworCWlmIChkYXRhLmZs YWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEuZmQgPSAtMTsKKworCXNobSA9IHRlZV9z aG1fYWxsb2MoY3R4LT50ZWVkZXYsIGRhdGEuc2l6ZSwKKwkJCSAgICBURUVfU0hNX01BUFBFRCB8 IFRFRV9TSE1fRE1BX0JVRik7CisJaWYgKElTX0VSUihzaG0pKQorCQlyZXR1cm4gUFRSX0VSUihz aG0pOworCisJZGF0YS5mbGFncyA9IHNobS0+ZmxhZ3M7CisJZGF0YS5zaXplID0gc2htLT5zaXpl OworCWRhdGEuZmQgPSB0ZWVfc2htX2dldF9mZChzaG0pOworCWlmIChkYXRhLmZkIDwgMCkgewor CQlyZXQgPSBkYXRhLmZkOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoY29weV90b191c2VyKHVk YXRhLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGVy cjsKKwl9CisJLyoKKwkgKiBXaGVuIHVzZXIgc3BhY2UgY2xvc2VzIHRoZSBmaWxlIGRlc2NyaXB0 b3IgdGhlIHNoYXJlZCBtZW1vcnkKKwkgKiBzaG91bGQgYmUgZnJlZWQKKwkgKi8KKwl0ZWVfc2ht X3B1dChzaG0pOworCXJldHVybiAwOworZXJyOgorCWlmIChkYXRhLmZkID49IDApCisJCXRlZV9z aG1fcHV0X2ZkKGRhdGEuZmQpOworCXRlZV9zaG1fZnJlZShzaG0pOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgcGFyYW1zX2Zyb21fdXNlcihzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXMs IHNpemVfdCBudW1fcGFyYW1zLAorCQlzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIF9fdXNlciAqdXBh cmFtcykKK3sKKwlzaXplX3QgbjsKKworCWZvciAobiA9IDA7IG4gPCBudW1fcGFyYW1zOyBuKysp IHsKKwkJc3RydWN0IHRlZV9zaG0gKnNobTsKKwkJc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBpcDsK KworCQlpZiAoY29weV9mcm9tX3VzZXIoJmlwLCB1cGFyYW1zICsgbiwgc2l6ZW9mKGlwKSkpCisJ CQlyZXR1cm4gLUVGQVVMVDsKKworCQkvKiBBbGwgdW51c2VkIGF0dHJpYnV0ZSBiaXRzIGhhcyB0 byBiZSB6ZXJvICovCisJCWlmIChpcC5hdHRyICYgflRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVf TUFTSykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXBhcmFtc1tuXS5hdHRyID0gaXAuYXR0cjsK KwkJc3dpdGNoIChpcC5hdHRyKSB7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9O T05FOgorCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfT1VUUFVUOgorCQkJ YnJlYWs7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9JTlBVVDoKKwkJ Y2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lOT1VUOgorCQkJcGFyYW1zW25d LnUudmFsdWUuYSA9IGlwLnUudmFsdWUuYTsKKwkJCXBhcmFtc1tuXS51LnZhbHVlLmIgPSBpcC51 LnZhbHVlLmI7CisJCQlwYXJhbXNbbl0udS52YWx1ZS5jID0gaXAudS52YWx1ZS5jOworCQkJYnJl YWs7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5QVVQ6CisJCWNh c2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfT1VUUFVUOgorCQljYXNlIFRFRV9J T0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOT1VUOgorCQkJLyoKKwkJCSAqIElmIHdlIGZh aWwgdG8gZ2V0IGEgcG9pbnRlciB0byBhIHNoYXJlZCBtZW1vcnkKKwkJCSAqIG9iamVjdCAoYW5k IGluY3JlYXNlIHRoZSByZWYgY291bnQpIGZyb20gYSBmaWxlCisJCQkgKiBkZXNjcmlwdG9yIHdl IHJldHVybiBhbiBlcnJvci4gQWxsIHBvaW50ZXJzIHRoYXQKKwkJCSAqIGhhcyBiZWVuIGFkZGVk IGluIHBhcmFtcyBoYXZlIGFuIGluY3JlYXNlZCByZWYKKwkJCSAqIGNvdW50LiBJdCdzIHRoZSBj YWxsZXJzIHJlc3BvbmliaWxpdHkgdG8gZG8KKwkJCSAqIHRlZV9zaG1fcHV0KCkgb24gYWxsIHJl c29sdmVkIHBvaW50ZXJzLgorCQkJICovCisJCQlzaG0gPSB0ZWVfc2htX2dldF9mcm9tX2ZkKGlw LnUubWVtcmVmLnNobV9mZCk7CisJCQlpZiAoSVNfRVJSKHNobSkpCisJCQkJcmV0dXJuIFBUUl9F UlIoc2htKTsKKworCQkJcGFyYW1zW25dLnUubWVtcmVmLnNobV9vZmZzID0gaXAudS5tZW1yZWYu c2htX29mZnM7CisJCQlwYXJhbXNbbl0udS5tZW1yZWYuc2l6ZSA9IGlwLnUubWVtcmVmLnNpemU7 CisJCQlwYXJhbXNbbl0udS5tZW1yZWYuc2htID0gc2htOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQkvKiBVbmtub3duIGF0dHJpYnV0ZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyYW1zX3RvX3VzZXIoc3RydWN0IHRlZV9p b2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJhbXMsCisJCXNpemVfdCBudW1fcGFyYW1zLCBzdHJ1Y3Qg dGVlX3BhcmFtICpwYXJhbXMpCit7CisJc2l6ZV90IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgbnVt X3BhcmFtczsgbisrKSB7CisJCXN0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gX191c2VyICp1cCA9IHVw YXJhbXMgKyBuOworCQlzdHJ1Y3QgdGVlX3BhcmFtICpwID0gcGFyYW1zICsgbjsKKworCQlzd2l0 Y2ggKHAtPmF0dHIpIHsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX09V VFBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lOT1VUOgorCQkJ aWYgKHB1dF91c2VyKHAtPnUudmFsdWUuYSwgJnVwLT51LnZhbHVlLmEpIHx8CisJCQkgICAgcHV0 X3VzZXIocC0+dS52YWx1ZS5iLCAmdXAtPnUudmFsdWUuYikgfHwKKwkJCSAgICBwdXRfdXNlcihw LT51LnZhbHVlLmMsICZ1cC0+dS52YWx1ZS5jKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJy ZWFrOworCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX09VVFBVVDoKKwkJ Y2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX01FTVJFRl9JTk9VVDoKKwkJCWlmIChwdXRf dXNlcigodTY0KXAtPnUubWVtcmVmLnNpemUsICZ1cC0+dS5tZW1yZWYuc2l6ZSkpCisJCQkJcmV0 dXJuIC1FRkFVTFQ7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGJvb2wgcGFyYW1faXNfbWVtcmVmKHN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFt KQoreworCXN3aXRjaCAocGFyYW0tPmF0dHIgJiBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX01B U0spIHsKKwljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOUFVUOgorCWNh c2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfT1VUUFVUOgorCWNhc2UgVEVFX0lP Q1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5PVVQ6CisJCXJldHVybiB0cnVlOworCWRlZmF1 bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGVlX2lvY3RsX29wZW5f c2Vzc2lvbihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHRlZV9pb2N0bF9idWZf ZGF0YSBfX3VzZXIgKnVidWYpCit7CisJaW50IHJjOworCXNpemVfdCBuOworCXN0cnVjdCB0ZWVf aW9jdGxfYnVmX2RhdGEgYnVmOworCXN0cnVjdCB0ZWVfaW9jdGxfb3Blbl9zZXNzaW9uX2FyZyBf X3VzZXIgKnVhcmc7CisJc3RydWN0IHRlZV9pb2N0bF9vcGVuX3Nlc3Npb25fYXJnIGFyZzsKKwlz dHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIF9fdXNlciAqdXBhcmFtcyA9IE5VTEw7CisJc3RydWN0IHRl ZV9wYXJhbSAqcGFyYW1zID0gTlVMTDsKKwlib29sIGhhdmVfc2Vzc2lvbiA9IGZhbHNlOworCisJ aWYgKCFjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5vcGVuX3Nlc3Npb24pCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIHNpemVvZihidWYpKSkKKwkJ cmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoYnVmLmJ1Zl9sZW4gPiBURUVfTUFYX0FSR19TSVpFIHx8 CisJICAgIGJ1Zi5idWZfbGVuIDwgc2l6ZW9mKHN0cnVjdCB0ZWVfaW9jdGxfb3Blbl9zZXNzaW9u X2FyZykpCisJCXJldHVybiAtRUlOVkFMOworCisJdWFyZyA9IChzdHJ1Y3QgdGVlX2lvY3RsX29w ZW5fc2Vzc2lvbl9hcmcgX191c2VyICopKHVuc2lnbmVkIGxvbmcpCisJCWJ1Zi5idWZfcHRyOwor CXJjID0gY29weV9mcm9tX3VzZXIoJmFyZywgdWFyZywgc2l6ZW9mKGFyZykpOworCWlmIChyYykK KwkJcmV0dXJuIHJjOworCisJaWYgKHNpemVvZihhcmcpICsgVEVFX0lPQ1RMX1BBUkFNX1NJWkUo YXJnLm51bV9wYXJhbXMpICE9IGJ1Zi5idWZfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlm IChhcmcubnVtX3BhcmFtcykgeworCQlwYXJhbXMgPSBrY2FsbG9jKGFyZy5udW1fcGFyYW1zLCBz aXplb2Yoc3RydWN0IHRlZV9wYXJhbSksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghcGFyYW1z KQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXVwYXJhbXMgPSAoc3RydWN0IHRlZV9pb2N0bF9wYXJh bSBfX3VzZXIgKikodWFyZyArIDEpOworCQlyYyA9IHBhcmFtc19mcm9tX3VzZXIocGFyYW1zLCBh cmcubnVtX3BhcmFtcywgdXBhcmFtcyk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCX0KKwor CXJjID0gY3R4LT50ZWVkZXYtPmRlc2MtPm9wcy0+b3Blbl9zZXNzaW9uKGN0eCwgJmFyZywgcGFy YW1zKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCWhhdmVfc2Vzc2lvbiA9IHRydWU7CisKKwlp ZiAocHV0X3VzZXIoYXJnLnNlc3Npb24sICZ1YXJnLT5zZXNzaW9uKSB8fAorCSAgICBwdXRfdXNl cihhcmcucmV0LCAmdWFyZy0+cmV0KSB8fAorCSAgICBwdXRfdXNlcihhcmcucmV0X29yaWdpbiwg JnVhcmctPnJldF9vcmlnaW4pKSB7CisJCXJjID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQor CXJjID0gcGFyYW1zX3RvX3VzZXIodXBhcmFtcywgYXJnLm51bV9wYXJhbXMsIHBhcmFtcyk7Citv dXQ6CisJLyoKKwkgKiBJZiB3ZSd2ZSBzdWNjZWVkZWQgdG8gb3BlbiB0aGUgc2Vzc2lvbiBidXQg ZmFpbGVkIHRvIGNvbW11bmljYXRlCisJICogaXQgYmFjayB0byB1c2VyIHNwYWNlLCBjbG9zZSB0 aGUgc2Vzc2lvbiBhZ2FpbiB0byBhdm9pZCBsZWFrYWdlLgorCSAqLworCWlmIChyYyAmJiBoYXZl X3Nlc3Npb24gJiYgY3R4LT50ZWVkZXYtPmRlc2MtPm9wcy0+Y2xvc2Vfc2Vzc2lvbikKKwkJY3R4 LT50ZWVkZXYtPmRlc2MtPm9wcy0+Y2xvc2Vfc2Vzc2lvbihjdHgsIGFyZy5zZXNzaW9uKTsKKwor CWlmIChwYXJhbXMpIHsKKwkJLyogRGVjcmVhc2UgcmVmIGNvdW50IGZvciBhbGwgdmFsaWQgc2hh cmVkIG1lbW9yeSBwb2ludGVycyAqLworCQlmb3IgKG4gPSAwOyBuIDwgYXJnLm51bV9wYXJhbXM7 IG4rKykKKwkJCWlmIChwYXJhbV9pc19tZW1yZWYocGFyYW1zICsgbikgJiYKKwkJCSAgICBwYXJh bXNbbl0udS5tZW1yZWYuc2htKQorCQkJCXRlZV9zaG1fcHV0KHBhcmFtc1tuXS51Lm1lbXJlZi5z aG0pOworCQlrZnJlZShwYXJhbXMpOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGlu dCB0ZWVfaW9jdGxfaW52b2tlKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LAorCQlzdHJ1Y3QgdGVl X2lvY3RsX2J1Zl9kYXRhIF9fdXNlciAqdWJ1ZikKK3sKKwlpbnQgcmM7CisJc2l6ZV90IG47CisJ c3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSBidWY7CisJc3RydWN0IHRlZV9pb2N0bF9pbnZva2Vf YXJnIF9fdXNlciAqdWFyZzsKKwlzdHJ1Y3QgdGVlX2lvY3RsX2ludm9rZV9hcmcgYXJnOworCXN0 cnVjdCB0ZWVfaW9jdGxfcGFyYW0gX191c2VyICp1cGFyYW1zID0gTlVMTDsKKwlzdHJ1Y3QgdGVl X3BhcmFtICpwYXJhbXMgPSBOVUxMOworCisJaWYgKCFjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5p bnZva2VfZnVuYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyYyA9IGNvcHlfZnJvbV91c2VyKCZi dWYsIHVidWYsIHNpemVvZihidWYpKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChi dWYuYnVmX2xlbiA+IFRFRV9NQVhfQVJHX1NJWkUgfHwKKwkgICAgYnVmLmJ1Zl9sZW4gPCBzaXpl b2Yoc3RydWN0IHRlZV9pb2N0bF9pbnZva2VfYXJnKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1 YXJnID0gKHN0cnVjdCB0ZWVfaW9jdGxfaW52b2tlX2FyZyBfX3VzZXIgKikodW5zaWduZWQgbG9u ZylidWYuYnVmX3B0cjsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZywgdWFyZywgc2l6ZW9mKGFy ZykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzaXplb2YoYXJnKSArIFRFRV9JT0NUTF9Q QVJBTV9TSVpFKGFyZy5udW1fcGFyYW1zKSAhPSBidWYuYnVmX2xlbikKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlpZiAoYXJnLm51bV9wYXJhbXMpIHsKKwkJcGFyYW1zID0ga2NhbGxvYyhhcmcubnVt X3BhcmFtcywgc2l6ZW9mKHN0cnVjdCB0ZWVfcGFyYW0pLAorCQkJCUdGUF9LRVJORUwpOworCQlp ZiAoIXBhcmFtcykKKwkJCXJldHVybiAtRU5PTUVNOworCQl1cGFyYW1zID0gKHN0cnVjdCB0ZWVf aW9jdGxfcGFyYW0gX191c2VyICopKHVhcmcgKyAxKTsKKwkJcmMgPSBwYXJhbXNfZnJvbV91c2Vy KHBhcmFtcywgYXJnLm51bV9wYXJhbXMsIHVwYXJhbXMpOworCQlpZiAocmMpCisJCQlnb3RvIG91 dDsKKwl9CisKKwlyYyA9IGN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPmludm9rZV9mdW5jKGN0eCwg JmFyZywgcGFyYW1zKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJaWYgKHB1dF91c2VyKGFy Zy5yZXQsICZ1YXJnLT5yZXQpIHx8CisJICAgIHB1dF91c2VyKGFyZy5yZXRfb3JpZ2luLCAmdWFy Zy0+cmV0X29yaWdpbikpIHsKKwkJcmMgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJcmMg PSBwYXJhbXNfdG9fdXNlcih1cGFyYW1zLCBhcmcubnVtX3BhcmFtcywgcGFyYW1zKTsKK291dDoK KwlpZiAocGFyYW1zKSB7CisJCS8qIERlY3JlYXNlIHJlZiBjb3VudCBmb3IgYWxsIHZhbGlkIHNo YXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KKwkJZm9yIChuID0gMDsgbiA8IGFyZy5udW1fcGFyYW1z OyBuKyspCisJCQlpZiAocGFyYW1faXNfbWVtcmVmKHBhcmFtcyArIG4pICYmCisJCQkgICAgcGFy YW1zW25dLnUubWVtcmVmLnNobSkKKwkJCQl0ZWVfc2htX3B1dChwYXJhbXNbbl0udS5tZW1yZWYu c2htKTsKKwkJa2ZyZWUocGFyYW1zKTsKKwl9CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBp bnQgdGVlX2lvY3RsX2NhbmNlbChzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHRl ZV9pb2N0bF9jYW5jZWxfYXJnIF9fdXNlciAqdWFyZykKK3sKKwlzdHJ1Y3QgdGVlX2lvY3RsX2Nh bmNlbF9hcmcgYXJnOworCisJaWYgKCFjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5jYW5jZWxfcmVx KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYXJnLCB1YXJnLCBz aXplb2YoYXJnKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGN0eC0+dGVlZGV2LT5k ZXNjLT5vcHMtPmNhbmNlbF9yZXEoY3R4LCBhcmcuY2FuY2VsX2lkLAorCQkJCQkJICBhcmcuc2Vz c2lvbik7Cit9CisKK3N0YXRpYyBpbnQgdGVlX2lvY3RsX2Nsb3NlX3Nlc3Npb24oc3RydWN0IHRl ZV9jb250ZXh0ICpjdHgsCisJCXN0cnVjdCB0ZWVfaW9jdGxfY2xvc2Vfc2Vzc2lvbl9hcmcgX191 c2VyICp1YXJnKQoreworCXN0cnVjdCB0ZWVfaW9jdGxfY2xvc2Vfc2Vzc2lvbl9hcmcgYXJnOwor CisJaWYgKCFjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5jbG9zZV9zZXNzaW9uKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYXJnLCB1YXJnLCBzaXplb2YoYXJnKSkp CisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPmNs b3NlX3Nlc3Npb24oY3R4LCBhcmcuc2Vzc2lvbik7Cit9CisKK3N0YXRpYyBpbnQgcGFyYW1zX3Rv X3N1cHAoc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJhbXMsCisJCXNpemVfdCBu dW1fcGFyYW1zLCBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXMpCit7CisJaW50IHJjID0gMDsKKwlz aXplX3QgbjsKKwlpbnQgKmZkcyA9IGttYWxsb2NfYXJyYXkobnVtX3BhcmFtcywgc2l6ZW9mKGlu dCksIEdGUF9LRVJORUwpOworCisJaWYgKCFmZHMpCisJCXJldHVybiAtRU5PTUVNOworCWZvciAo biA9IDA7IG4gPCBudW1fcGFyYW1zOyBuKyspCisJCWZkc1tuXSA9IC0xOworCisJZm9yIChuID0g MDsgbiA8IG51bV9wYXJhbXM7IG4rKykgeworCQlzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIGlwOwor CQlzdHJ1Y3QgdGVlX3BhcmFtICpwID0gcGFyYW1zICsgbjsKKworCQlpcC5hdHRyID0gcC0+YXR0 ciAmIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUFTSzsKKwkJc3dpdGNoIChwLT5hdHRyKSB7 CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9JTlBVVDoKKwkJY2FzZSBU RUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lOT1VUOgorCQkJaXAudS52YWx1ZS5hID0g cC0+dS52YWx1ZS5hOworCQkJaXAudS52YWx1ZS5iID0gcC0+dS52YWx1ZS5iOworCQkJaXAudS52 YWx1ZS5jID0gcC0+dS52YWx1ZS5jOworCQkJYnJlYWs7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFN X0FUVFJfVFlQRV9NRU1SRUZfSU5QVVQ6CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQ RV9NRU1SRUZfT1VUUFVUOgorCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVG X0lOT1VUOgorCQkJaXAudS5tZW1yZWYuc2l6ZSA9IHAtPnUubWVtcmVmLnNpemU7CisJCQlpZiAo IXAtPnUubWVtcmVmLnNobSkgeworCQkJCWlwLnUubWVtcmVmLnNobV9vZmZzID0gMDsKKwkJCQlp cC51Lm1lbXJlZi5zaG1fZmQgPSAtMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlwLnUubWVtcmVm LnNobV9vZmZzID0gcC0+dS5tZW1yZWYuc2htX29mZnM7CisJCQkvKgorCQkJICogVGhpcyB0ZWVf c2htX2dldF9mZCgpIGlzIHN1cHBvc2VkIHRvIGJlIG1hdGNoZWQKKwkJCSAqIGJ5IGEgY2xvc2Uo MikgZnJvbSB0ZWUtc3VwcGxpY2FudC4KKwkJCSAqLworCQkJZmRzW25dID0gdGVlX3NobV9nZXRf ZmQocC0+dS5tZW1yZWYuc2htKTsKKwkJCWlmIChmZHNbbl0gPCAwKSB7CisJCQkJcmMgPSBmZHNb bl07CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpcC51Lm1lbXJlZi5zaG1fZmQgPSBmZHNbbl07 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1lbXNldCgmaXAudSwgMCwgc2l6ZW9mKGlwLnUp KTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1cGFyYW1zICsgbiwgJmlw LCBzaXplb2YoaXApKSkgeworCQkJcmMgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwl9 CitvdXQ6CisJaWYgKHJjKSB7CisJCWZvciAobiA9IDA7IG4gPCBudW1fcGFyYW1zOyBuKyspCisJ CQlpZiAoZmRzW25dID49IDApCisJCQkJdGVlX3NobV9wdXRfZmQoZmRzW25dKTsKKwl9CisJa2Zy ZWUoZmRzKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdGVlX2lvY3RsX3N1cHBfcmVj dihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSBf X3VzZXIgKnVidWYpCit7CisJaW50IHJjOworCXN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgYnVm OworCXN0cnVjdCB0ZWVfaW9jbF9zdXBwX3JlY3ZfYXJnIF9fdXNlciAqdWFyZzsKKwlzdHJ1Y3Qg dGVlX3BhcmFtICpwYXJhbXM7CisJc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJh bXM7CisJdTMyIG51bV9wYXJhbXM7CisJdTMyIGZ1bmM7CisKKwlpZiAoIWN0eC0+dGVlZGV2LT5k ZXNjLT5vcHMtPnN1cHBfcmVjdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9t X3VzZXIoJmJ1ZiwgdWJ1Ziwgc2l6ZW9mKGJ1ZikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlm IChidWYuYnVmX2xlbiA+IFRFRV9NQVhfQVJHX1NJWkUgfHwKKwkgICAgYnVmLmJ1Zl9sZW4gPCBz aXplb2Yoc3RydWN0IHRlZV9pb2NsX3N1cHBfcmVjdl9hcmcpKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCXVhcmcgPSAoc3RydWN0IHRlZV9pb2NsX3N1cHBfcmVjdl9hcmcgX191c2VyICopKHVuc2ln bmVkIGxvbmcpCisJCWJ1Zi5idWZfcHRyOworCWlmIChnZXRfdXNlcihudW1fcGFyYW1zLCAmdWFy Zy0+bnVtX3BhcmFtcykpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHNpemVvZigqdWFyZykg KyBURUVfSU9DVExfUEFSQU1fU0laRShudW1fcGFyYW1zKSAhPSBidWYuYnVmX2xlbikKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlwYXJhbXMgPSBrY2FsbG9jKG51bV9wYXJhbXMsIHNpemVvZihzdHJ1 Y3QgdGVlX3BhcmFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJhbXMpCisJCXJldHVybiAtRU5P TUVNOworCisJcmMgPSBjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5zdXBwX3JlY3YoY3R4LCAmZnVu YywgJm51bV9wYXJhbXMsIHBhcmFtcyk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKworCWlmIChw dXRfdXNlcihmdW5jLCAmdWFyZy0+ZnVuYykgfHwKKwkgICAgcHV0X3VzZXIobnVtX3BhcmFtcywg JnVhcmctPm51bV9wYXJhbXMpKSB7CisJCXJjID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQor CisJdXBhcmFtcyA9IChzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIF9fdXNlciAqKSh1YXJnICsgMSk7 CisJcmMgPSBwYXJhbXNfdG9fc3VwcCh1cGFyYW1zLCBudW1fcGFyYW1zLCBwYXJhbXMpOworb3V0 OgorCWtmcmVlKHBhcmFtcyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHBhcmFtc19m cm9tX3N1cHAoc3RydWN0IHRlZV9wYXJhbSAqcGFyYW1zLAorCQlzaXplX3QgbnVtX3BhcmFtcywg c3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJhbXMpCit7CisJc2l6ZV90IG47CisK Kwlmb3IgKG4gPSAwOyBuIDwgbnVtX3BhcmFtczsgbisrKSB7CisJCXN0cnVjdCB0ZWVfcGFyYW0g KnAgPSBwYXJhbXMgKyBuOworCQlzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIGlwOworCisJCWlmIChj b3B5X2Zyb21fdXNlcigmaXAsIHVwYXJhbXMgKyBuLCBzaXplb2YoaXApKSkKKwkJCXJldHVybiAt RUZBVUxUOworCisJCS8qIEFsbCB1bnVzZWQgYXR0cmlidXRlIGJpdHMgaGFzIHRvIGJlIHplcm8g Ki8KKwkJaWYgKGlwLmF0dHIgJiB+VEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NQVNLKQorCQkJ cmV0dXJuIC1FSU5WQUw7CisKKwkJcC0+YXR0ciA9IGlwLmF0dHI7CisJCXN3aXRjaCAoaXAuYXR0 cikgeworCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfT1VUUFVUOgorCQlj YXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5PVVQ6CisJCQkvKiBPbmx5IG91 dCBhbmQgaW4vb3V0IHZhbHVlcyBjYW4gYmUgdXBkYXRlZCAqLworCQkJcC0+dS52YWx1ZS5hID0g aXAudS52YWx1ZS5hOworCQkJcC0+dS52YWx1ZS5iID0gaXAudS52YWx1ZS5iOworCQkJcC0+dS52 YWx1ZS5jID0gaXAudS52YWx1ZS5jOworCQkJYnJlYWs7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFN X0FUVFJfVFlQRV9NRU1SRUZfT1VUUFVUOgorCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZ UEVfTUVNUkVGX0lOT1VUOgorCQkJLyoKKwkJCSAqIE9ubHkgdGhlIHNpemUgb2YgdGhlIG1lbXJl ZiBjYW4gYmUgdXBkYXRlZC4KKwkJCSAqIFNpbmNlIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRo ZSBvcmlnaW5hbAorCQkJICogcGFyYW1ldGVycyBoZXJlLCBvbmx5IHN0b3JlIHRoZSBzdXBwbGll ZCBzaXplLgorCQkJICogVGhlIGRyaXZlciB3aWxsIGNvcHkgdGhlIHVwZGF0ZWQgc2l6ZSBpbnRv IHRoZQorCQkJICogb3JpZ2luYWwgcGFyYW1ldGVycy4KKwkJCSAqLworCQkJcC0+dS5tZW1yZWYu c2htID0gTlVMTDsKKwkJCXAtPnUubWVtcmVmLnNobV9vZmZzID0gMDsKKwkJCXAtPnUubWVtcmVm LnNpemUgPSBpcC51Lm1lbXJlZi5zaXplOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltZW1z ZXQoJnAtPnUsIDAsIHNpemVvZihwLT51KSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCB0ZWVfaW9jdGxfc3VwcF9zZW5kKHN0cnVjdCB0ZWVfY29udGV4 dCAqY3R4LAorCQlzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIF9fdXNlciAqdWJ1ZikKK3sKKwls b25nIHJjOworCXN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgYnVmOworCXN0cnVjdCB0ZWVfaW9j bF9zdXBwX3NlbmRfYXJnIF9fdXNlciAqdWFyZzsKKwlzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXM7 CisJc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJhbXM7CisJdTMyIG51bV9wYXJh bXM7CisJdTMyIHJldDsKKworCS8qIE5vdCB2YWxpZCBmb3IgdGhpcyBkcml2ZXIgKi8KKwlpZiAo IWN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPnN1cHBfc2VuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1Ziwgc2l6ZW9mKGJ1ZikpKQorCQlyZXR1cm4g LUVGQVVMVDsKKworCWlmIChidWYuYnVmX2xlbiA+IFRFRV9NQVhfQVJHX1NJWkUgfHwKKwkgICAg YnVmLmJ1Zl9sZW4gPCBzaXplb2Yoc3RydWN0IHRlZV9pb2NsX3N1cHBfc2VuZF9hcmcpKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCXVhcmcgPSAoc3RydWN0IHRlZV9pb2NsX3N1cHBfc2VuZF9hcmcg X191c2VyICopKHVuc2lnbmVkIGxvbmcpCisJCWJ1Zi5idWZfcHRyOworCWlmIChnZXRfdXNlcihy ZXQsICZ1YXJnLT5yZXQpIHx8CisJICAgIGdldF91c2VyKG51bV9wYXJhbXMsICZ1YXJnLT5udW1f cGFyYW1zKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoc2l6ZW9mKCp1YXJnKSArIFRFRV9J T0NUTF9QQVJBTV9TSVpFKG51bV9wYXJhbXMpID4gYnVmLmJ1Zl9sZW4pCisJCXJldHVybiAtRUlO VkFMOworCisJcGFyYW1zID0ga2NhbGxvYyhudW1fcGFyYW1zLCBzaXplb2Yoc3RydWN0IHRlZV9w YXJhbSksIEdGUF9LRVJORUwpOworCWlmICghcGFyYW1zKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CXVwYXJhbXMgPSAoc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIgKikodWFyZyArIDEpOwor CXJjID0gcGFyYW1zX2Zyb21fc3VwcChwYXJhbXMsIG51bV9wYXJhbXMsIHVwYXJhbXMpOworCWlm IChyYykKKwkJZ290byBvdXQ7CisKKwlyYyA9IGN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPnN1cHBf c2VuZChjdHgsIHJldCwgbnVtX3BhcmFtcywgcGFyYW1zKTsKK291dDoKKwlrZnJlZShwYXJhbXMp OworCXJldHVybiByYzsKK30KKworCitzdGF0aWMgbG9uZyB0ZWVfaW9jdGwoc3RydWN0IGZpbGUg KmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB0 ZWVfY29udGV4dCAqY3R4ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX191c2VyICp1YXJn ID0gKHZvaWQgX191c2VyICopYXJnOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRFRV9JT0Nf VkVSU0lPTjoKKwkJcmV0dXJuIHRlZV9pb2N0bF92ZXJzaW9uKGN0eCwgdWFyZyk7CisJY2FzZSBU RUVfSU9DX1NITV9BTExPQzoKKwkJcmV0dXJuIHRlZV9pb2N0bF9zaG1fYWxsb2MoY3R4LCB1YXJn KTsKKwljYXNlIFRFRV9JT0NfT1BFTl9TRVNTSU9OOgorCQlyZXR1cm4gdGVlX2lvY3RsX29wZW5f c2Vzc2lvbihjdHgsIHVhcmcpOworCWNhc2UgVEVFX0lPQ19JTlZPS0U6CisJCXJldHVybiB0ZWVf aW9jdGxfaW52b2tlKGN0eCwgdWFyZyk7CisJY2FzZSBURUVfSU9DX0NBTkNFTDoKKwkJcmV0dXJu IHRlZV9pb2N0bF9jYW5jZWwoY3R4LCB1YXJnKTsKKwljYXNlIFRFRV9JT0NfQ0xPU0VfU0VTU0lP TjoKKwkJcmV0dXJuIHRlZV9pb2N0bF9jbG9zZV9zZXNzaW9uKGN0eCwgdWFyZyk7CisJY2FzZSBU RUVfSU9DX1NVUFBMX1JFQ1Y6CisJCXJldHVybiB0ZWVfaW9jdGxfc3VwcF9yZWN2KGN0eCwgdWFy Zyk7CisJY2FzZSBURUVfSU9DX1NVUFBMX1NFTkQ6CisJCXJldHVybiB0ZWVfaW9jdGxfc3VwcF9z ZW5kKGN0eCwgdWFyZyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0ZWVfZm9wcyA9IHsKKwkub3BlbiA9 IHRlZV9vcGVuLAorCS5yZWxlYXNlID0gdGVlX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0g dGVlX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSB0ZWVfaW9jdGwsCit9OworCitzdGF0aWMgdm9p ZCB0ZWVfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0ZWVf ZGV2aWNlICp0ZWVkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdGVlX2RldmljZSwgZGV2 KTsKKworCXNwaW5fbG9jaygmZHJpdmVyX2xvY2spOworCWNsZWFyX2JpdCh0ZWVkZXYtPmlkLCBk ZXZfbWFzayk7CisJc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKKwltdXRleF9kZXN0cm95KCZ0 ZWVkZXYtPm11dGV4KTsKKwlrZnJlZSh0ZWVkZXYpOworfQorCitzdHJ1Y3QgdGVlX2RldmljZSAq dGVlX2RldmljZV9hbGxvYyhjb25zdCBzdHJ1Y3QgdGVlX2Rlc2MgKnRlZWRlc2MsCisJCQlzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0ZWVfc2htX3Bvb2wgKnBvb2wsCisJCQl2b2lkICpkcml2 ZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2OworCXZvaWQgKnJldDsKKwlp bnQgcmM7CisJaW50IG9mZnMgPSAwOworCisJaWYgKCF0ZWVkZXNjIHx8ICF0ZWVkZXNjLT5uYW1l IHx8ICF0ZWVkZXNjLT5vcHMgfHwKKwkgICAgIXRlZWRlc2MtPm9wcy0+Z2V0X3ZlcnNpb24gfHwg IXRlZWRlc2MtPm9wcy0+b3BlbiB8fAorCSAgICAhdGVlZGVzYy0+b3BzLT5yZWxlYXNlIHx8ICFk ZXYgfHwgIXBvb2wpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJdGVlZGV2ID0ga3ph bGxvYyhzaXplb2YoKnRlZWRldiksIEdGUF9LRVJORUwpOworCWlmICghdGVlZGV2KSB7CisJCXJl dCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gZXJyOworCX0KKworCWlmICh0ZWVkZXNjLT5m bGFncyAmIFRFRV9ERVNDX1BSSVZJTEVHRUQpCisJCW9mZnMgPSBURUVfTlVNX0RFVklDRVMgLyAy OworCisJc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7CisJdGVlZGV2LT5pZCA9IGZpbmRfbmV4dF96 ZXJvX2JpdChkZXZfbWFzaywgVEVFX05VTV9ERVZJQ0VTLCBvZmZzKTsKKwlpZiAodGVlZGV2LT5p ZCA8IFRFRV9OVU1fREVWSUNFUykKKwkJc2V0X2JpdCh0ZWVkZXYtPmlkLCBkZXZfbWFzayk7CisJ c3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKKworCWlmICh0ZWVkZXYtPmlkID49IFRFRV9OVU1f REVWSUNFUykgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGVycjsKKwl9CisK KwlzbnByaW50Zih0ZWVkZXYtPm5hbWUsIHNpemVvZih0ZWVkZXYtPm5hbWUpLCAidGVlJXMlZCIs CisJCSB0ZWVkZXNjLT5mbGFncyAmIFRFRV9ERVNDX1BSSVZJTEVHRUQgPyAicHJpdiIgOiAiIiwK KwkJIHRlZWRldi0+aWQgLSBvZmZzKTsKKworCXRlZWRldi0+ZGV2LmNsYXNzID0gdGVlX2NsYXNz OworCXRlZWRldi0+ZGV2LnJlbGVhc2UgPSB0ZWVfcmVsZWFzZV9kZXZpY2U7CisJdGVlZGV2LT5k ZXYucGFyZW50ID0gZGV2OworCXRlZWRldi0+ZGV2LmRldnQgPSBNS0RFVihNQUpPUih0ZWVfZGV2 dCksIHRlZWRldi0+aWQpOworCisJcmMgPSBkZXZfc2V0X25hbWUoJnRlZWRldi0+ZGV2LCAiJXMi LCB0ZWVkZXYtPm5hbWUpOworCWlmIChyYykgeworCQlyZXQgPSBFUlJfUFRSKHJjKTsKKwkJZ290 byBlcnI7CisJfQorCisJY2Rldl9pbml0KCZ0ZWVkZXYtPmNkZXYsICZ0ZWVfZm9wcyk7CisJdGVl ZGV2LT5jZGV2Lm93bmVyID0gdGVlZGVzYy0+b3duZXI7CisJdGVlZGV2LT5jZGV2LmtvYmoucGFy ZW50ID0gJnRlZWRldi0+ZGV2LmtvYmo7CisKKwlkZXZfc2V0X2RydmRhdGEoJnRlZWRldi0+ZGV2 LCBkcml2ZXJfZGF0YSk7CisJZGV2aWNlX2luaXRpYWxpemUoJnRlZWRldi0+ZGV2KTsKKworCS8q IDEgYXMgdGVlX2RldmljZV91bnJlZ2lzdGVyKCkgZG9lcyBvbmUgZmluYWwgdGVlX2RldmljZV9w dXQoKSAqLworCXRlZWRldi0+bnVtX3VzZXJzID0gMTsKKwlpbml0X2NvbXBsZXRpb24oJnRlZWRl di0+Y19ub191c2Vycyk7CisJbXV0ZXhfaW5pdCgmdGVlZGV2LT5tdXRleCk7CisKKwl0ZWVkZXYt PmRlc2MgPSB0ZWVkZXNjOworCXRlZWRldi0+cG9vbCA9IHBvb2w7CisJSU5JVF9MSVNUX0hFQUQo JnRlZWRldi0+bGlzdF9zaG0pOworCisJcmV0dXJuIHRlZWRldjsKK2VycjoKKwlkZXZfZXJyKGRl diwgImNvdWxkIG5vdCByZWdpc3RlciAlcyBkcml2ZXJcbiIsCisJCXRlZWRlc2MtPmZsYWdzICYg VEVFX0RFU0NfUFJJVklMRUdFRCA/ICJwcml2aWxlZ2VkIiA6ICJjbGllbnQiKTsKKwlpZiAodGVl ZGV2ICYmIHRlZWRldi0+aWQgPCBURUVfTlVNX0RFVklDRVMpIHsKKwkJc3Bpbl9sb2NrKCZkcml2 ZXJfbG9jayk7CisJCWNsZWFyX2JpdCh0ZWVkZXYtPmlkLCBkZXZfbWFzayk7CisJCXNwaW5fdW5s b2NrKCZkcml2ZXJfbG9jayk7CisJfQorCWtmcmVlKHRlZWRldik7CisJcmV0dXJuIHJldDsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKHRlZV9kZXZpY2VfYWxsb2MpOworCitzdGF0aWMgc3NpemVfdCBp bXBsZW1lbnRhdGlvbl9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHRlZV9kZXZpY2UgKnRl ZWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB0ZWVfZGV2aWNlLCBkZXYpOworCXN0cnVj dCB0ZWVfaW9jdGxfdmVyc2lvbl9kYXRhIHZlcnM7CisKKwl0ZWVkZXYtPmRlc2MtPm9wcy0+Z2V0 X3ZlcnNpb24odGVlZGV2LCAmdmVycyk7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0la RSwgIiVkXG4iLCB2ZXJzLmltcGxfaWQpOworfQorc3RhdGljIERFVklDRV9BVFRSX1JPKGltcGxl bWVudGF0aW9uX2lkKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRlZV9kZXZfYXR0cnNb XSA9IHsKKwkmZGV2X2F0dHJfaW1wbGVtZW50YXRpb25faWQuYXR0ciwKKwlOVUxMCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0ZWVfZGV2X2dyb3VwID0geworCS5h dHRycyA9IHRlZV9kZXZfYXR0cnMsCit9OworCitpbnQgdGVlX2RldmljZV9yZWdpc3RlcihzdHJ1 Y3QgdGVlX2RldmljZSAqdGVlZGV2KQoreworCWludCByYzsKKworCS8qCisJICogSWYgdGhlIHRl ZWRldiBhbHJlYWR5IGlzIHJlZ2lzdGVyZWQsIGRvbid0IGRvIGl0IGFnYWluLiBJdCdzCisJICog b2J2aW91c2x5IGFuIGVycm9yIHRvIHRyeSB0byByZWdpc3RlciB0d2ljZSwgYnV0IGlmIHdlIHJl dHVybgorCSAqIGFuIGVycm9yIHdlJ2xsIGZvcmNlIHRoZSBkcml2ZXIgdG8gcmVtb3ZlIHRoZSB0 ZWVkZXYuCisJICovCisJaWYgKHRlZWRldi0+ZmxhZ3MgJiBURUVfREVWSUNFX0ZMQUdfUkVHSVNU RVJFRCkgeworCQlkZXZfZXJyKCZ0ZWVkZXYtPmRldiwgImF0dGVtcHQgdG8gcmVnaXN0ZXIgdHdp Y2VcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyYyA9IGNkZXZfYWRkKCZ0ZWVkZXYtPmNkZXYs IHRlZWRldi0+ZGV2LmRldnQsIDEpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZ0ZWVkZXYtPmRl diwKKwkJCSJ1bmFibGUgdG8gY2Rldl9hZGQoKSAlcywgbWFqb3IgJWQsIG1pbm9yICVkLCBlcnI9 JWRcbiIsCisJCQl0ZWVkZXYtPm5hbWUsIE1BSk9SKHRlZWRldi0+ZGV2LmRldnQpLAorCQkJTUlO T1IodGVlZGV2LT5kZXYuZGV2dCksIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJjID0gZGV2 aWNlX2FkZCgmdGVlZGV2LT5kZXYpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZ0ZWVkZXYtPmRl diwKKwkJCSJ1bmFibGUgdG8gZGV2aWNlX2FkZCgpICVzLCBtYWpvciAlZCwgbWlub3IgJWQsIGVy cj0lZFxuIiwKKwkJCXRlZWRldi0+bmFtZSwgTUFKT1IodGVlZGV2LT5kZXYuZGV2dCksCisJCQlN SU5PUih0ZWVkZXYtPmRldi5kZXZ0KSwgcmMpOworCQlnb3RvIGVycl9kZXZpY2VfYWRkOworCX0K KworCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZ0ZWVkZXYtPmRldi5rb2JqLCAmdGVlX2Rldl9n cm91cCk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJnRlZWRldi0+ZGV2LAorCQkJImZhaWxlZCB0 byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlcywgZXJyPSVkXG4iLCByYyk7CisJCWdvdG8gZXJyX3N5 c2ZzX2NyZWF0ZV9ncm91cDsKKwl9CisKKwl0ZWVkZXYtPmZsYWdzIHw9IFRFRV9ERVZJQ0VfRkxB R19SRUdJU1RFUkVEOworCXJldHVybiAwOworCitlcnJfc3lzZnNfY3JlYXRlX2dyb3VwOgorCWRl dmljZV9kZWwoJnRlZWRldi0+ZGV2KTsKK2Vycl9kZXZpY2VfYWRkOgorCWNkZXZfZGVsKCZ0ZWVk ZXYtPmNkZXYpOworCXJldHVybiByYzsKKworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX2Rldmlj ZV9yZWdpc3Rlcik7CisKK3ZvaWQgdGVlX2RldmljZV9wdXQoc3RydWN0IHRlZV9kZXZpY2UgKnRl ZWRldikKK3sKKwltdXRleF9sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKKwkvKiBTaG91bGRuJ3QgcHV0 IGluIHRoaXMgc3RhdGUgKi8KKwlpZiAoIVdBUk5fT04oIXRlZWRldi0+ZGVzYykpIHsKKwkJdGVl ZGV2LT5udW1fdXNlcnMtLTsKKwkJaWYgKCF0ZWVkZXYtPm51bV91c2VycykgeworCQkJdGVlZGV2 LT5kZXNjID0gTlVMTDsKKwkJCWNvbXBsZXRlKCZ0ZWVkZXYtPmNfbm9fdXNlcnMpOworCQl9CisJ fQorCW11dGV4X3VubG9jaygmdGVlZGV2LT5tdXRleCk7Cit9CisKK2Jvb2wgdGVlX2RldmljZV9n ZXQoc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldikKK3sKKwltdXRleF9sb2NrKCZ0ZWVkZXYtPm11 dGV4KTsKKwlpZiAoIXRlZWRldi0+ZGVzYykgeworCQltdXRleF91bmxvY2soJnRlZWRldi0+bXV0 ZXgpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXRlZWRldi0+bnVtX3VzZXJzKys7CisJbXV0ZXhf dW5sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCB0ZWVfZGV2 aWNlX3VucmVnaXN0ZXIoc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldikKK3sKKwlpZiAoIXRlZWRl dikKKwkJcmV0dXJuOworCisJaWYgKHRlZWRldi0+ZmxhZ3MgJiBURUVfREVWSUNFX0ZMQUdfUkVH SVNURVJFRCkgeworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnRlZWRldi0+ZGV2LmtvYmosICZ0ZWVf ZGV2X2dyb3VwKTsKKwkJY2Rldl9kZWwoJnRlZWRldi0+Y2Rldik7CisJCWRldmljZV9kZWwoJnRl ZWRldi0+ZGV2KTsKKwl9CisKKwl0ZWVfZGV2aWNlX3B1dCh0ZWVkZXYpOworCXdhaXRfZm9yX2Nv bXBsZXRpb24oJnRlZWRldi0+Y19ub191c2Vycyk7CisKKwkvKgorCSAqIE5vIG5lZWQgdG8gdGFr ZSBhIG11dGV4IGFueSBsb25nZXIgbm93IHNpbmNlIHRlZWRldi0+ZGVzYyB3YXMKKwkgKiBzZXQg dG8gTlVMTCBiZWZvcmUgdGVlZGV2LT5jX25vX3VzZXJzIHdhcyBjb21wbGV0ZWQuCisJICovCisK Kwl0ZWVkZXYtPnBvb2wgPSBOVUxMOworCisJcHV0X2RldmljZSgmdGVlZGV2LT5kZXYpOworfQor RVhQT1JUX1NZTUJPTF9HUEwodGVlX2RldmljZV91bnJlZ2lzdGVyKTsKKwordm9pZCAqdGVlX2dl dF9kcnZkYXRhKHN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYpCit7CisJcmV0dXJuIGRldl9nZXRf ZHJ2ZGF0YSgmdGVlZGV2LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX2dldF9kcnZk YXRhKTsKKworc3RhdGljIGludCBfX2luaXQgdGVlX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisK Kwl0ZWVfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ0ZWUiKTsKKwlpZiAoSVNf RVJSKHRlZV9jbGFzcykpIHsKKwkJcHJfZXJyKCJjb3VsZG4ndCBjcmVhdGUgY2xhc3NcbiIpOwor CQlyZXR1cm4gUFRSX0VSUih0ZWVfY2xhc3MpOworCX0KKworCXJjID0gYWxsb2NfY2hyZGV2X3Jl Z2lvbigmdGVlX2RldnQsIDAsIFRFRV9OVU1fREVWSUNFUywgInRlZSIpOworCWlmIChyYyA8IDAp IHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgY2hhciBkZXYgcmVnaW9uXG4iKTsKKwkJ Y2xhc3NfZGVzdHJveSh0ZWVfY2xhc3MpOworCQl0ZWVfY2xhc3MgPSBOVUxMOworCX0KKworCXJl dHVybiByYzsKK30KKworc3Vic3lzX2luaXRjYWxsKHRlZV9pbml0KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdGVlL3RlZV9wcml2YXRlLmggYi9kcml2ZXJzL3RlZS90ZWVfcHJpdmF0ZS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMmFjNTQKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL3RlZS90ZWVfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTUsIExpbmFybyBMaW1pdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBs aWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5k ZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpZm5k ZWYgVEVFX1BSSVZBVEVfSAorI2RlZmluZSBURUVfUFJJVkFURV9ICisKKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nk ZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbXV0 ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisKK3N0cnVjdCB0ZWVfZGV2aWNlOworCitz dHJ1Y3QgdGVlX3NobSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CisJc3RydWN0IHRl ZV9kZXZpY2UgKnRlZWRldjsKKwlwaHlzX2FkZHJfdCBwYWRkcjsKKwl2b2lkICprYWRkcjsKKwlz aXplX3Qgc2l6ZTsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOworCXUzMiBmbGFnczsKK307CisK K3N0cnVjdCB0ZWVfc2htX3Bvb2xfbWdyOworc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3Jfb3BzIHsK KwlpbnQgKCphbGxvYykoc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3IgKnBvb2xtZ3IsIHN0cnVjdCB0 ZWVfc2htICpzaG0sCisJCSAgICAgc2l6ZV90IHNpemUpOworCXZvaWQgKCpmcmVlKShzdHJ1Y3Qg dGVlX3NobV9wb29sX21nciAqcG9vbG1nciwgc3RydWN0IHRlZV9zaG0gKnNobSk7Cit9OworCitz dHJ1Y3QgdGVlX3NobV9wb29sX21nciB7CisJY29uc3Qgc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3Jf b3BzICpvcHM7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworfTsKKworc3RydWN0IHRlZV9zaG1fcG9v bCB7CisJc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3IgcHJpdmF0ZV9tZ3I7CisJc3RydWN0IHRlZV9z aG1fcG9vbF9tZ3IgZG1hX2J1Zl9tZ3I7CisJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCB0ZWVfc2ht X3Bvb2wgKnBvb2wpOworCXZvaWQgKnByaXZhdGVfZGF0YTsKK307CisKKyNkZWZpbmUgVEVFX0RF VklDRV9GTEFHX1JFR0lTVEVSRUQJMHgxCisjZGVmaW5lIFRFRV9NQVhfREVWX05BTUVfTEVOCQkz MgorCitzdHJ1Y3QgdGVlX2RldmljZSB7CisJY2hhciBuYW1lW1RFRV9NQVhfREVWX05BTUVfTEVO XTsKKwljb25zdCBzdHJ1Y3QgdGVlX2Rlc2MgKmRlc2M7CisJaW50IGlkOworCXVuc2lnbmVkIGZs YWdzOworCisJc3RydWN0IGRldmljZSBkZXY7CisJc3RydWN0IGNkZXYgY2RldjsKKworCXNpemVf dCBudW1fdXNlcnM7CisJc3RydWN0IGNvbXBsZXRpb24gY19ub191c2VyczsKKwlzdHJ1Y3QgbXV0 ZXggbXV0ZXg7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfc2htOworCXN0cnVjdCB0ZWVfc2ht X3Bvb2wgKnBvb2w7Cit9OworCitpbnQgdGVlX3NobV9pbml0KHZvaWQpOworCitib29sIHRlZV9k ZXZpY2VfZ2V0KHN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYpOwordm9pZCB0ZWVfZGV2aWNlX3B1 dChzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2KTsKKworI2VuZGlmIC8qVEVFX1BSSVZBVEVfSCov CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS90ZWVfc2htLmMgYi9kcml2ZXJzL3RlZS90ZWVfc2ht LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczMmU3NwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvdGVlL3RlZV9zaG0uYwpAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNSwgTGluYXJvIExpbWl0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJl IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmll ZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLwor I2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZkdGFibGUuaD4KKyNp bmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNs dWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGVlX2Rydi5oPgorI2luY2x1ZGUg InRlZV9wcml2YXRlLmgiCisKK3N0YXRpYyB2b2lkIHRlZV9zaG1fcmVsZWFzZShzdHJ1Y3QgdGVl X3NobSAqc2htKQoreworCXN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYgPSBzaG0tPnRlZWRldjsK KwlzdHJ1Y3QgdGVlX3NobV9wb29sX21nciAqcG9vbG07CisKKwltdXRleF9sb2NrKCZ0ZWVkZXYt Pm11dGV4KTsKKwlsaXN0X2RlbCgmc2htLT5saXN0X25vZGUpOworCW11dGV4X3VubG9jaygmdGVl ZGV2LT5tdXRleCk7CisKKwlpZiAoc2htLT5mbGFncyAmIFRFRV9TSE1fRE1BX0JVRikKKwkJcG9v bG0gPSAmdGVlZGV2LT5wb29sLT5kbWFfYnVmX21ncjsKKwllbHNlCisJCXBvb2xtID0gJnRlZWRl di0+cG9vbC0+cHJpdmF0ZV9tZ3I7CisKKwlwb29sbS0+b3BzLT5mcmVlKHBvb2xtLCBzaG0pOwor CWtmcmVlKHNobSk7CisKKwl0ZWVfZGV2aWNlX3B1dCh0ZWVkZXYpOworfQorCitzdGF0aWMgc3Ry dWN0IHNnX3RhYmxlICp0ZWVfc2htX29wX21hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQKKwkJCSphdHRhY2gsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlyZXR1 cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdGVlX3NobV9vcF91bm1hcF9kbWFfYnVmKHN0cnVj dCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKKwkJCXN0cnVjdCBzZ190YWJsZSAqdGFibGUs IGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworc3RhdGljIHZvaWQgdGVlX3No bV9vcF9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7CisJc3RydWN0IHRlZV9zaG0g KnNobSA9IGRtYWJ1Zi0+cHJpdjsKKworCXRlZV9zaG1fcmVsZWFzZShzaG0pOworfQorCitzdGF0 aWMgdm9pZCAqdGVlX3NobV9vcF9rbWFwX2F0b21pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAor CQkJdW5zaWduZWQgbG9uZyBwZ251bSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZv aWQgKnRlZV9zaG1fb3Bfa21hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCB1bnNpZ25lZCBsb25n IHBnbnVtKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHRlZV9zaG1fb3BfbW1h cChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Cit7CisJc3RydWN0IHRlZV9zaG0gKnNobSA9IGRtYWJ1Zi0+cHJpdjsKKwlzaXplX3Qgc2l6ZSA9 IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKworCXJldHVybiByZW1hcF9wZm5fcmFuZ2Uo dm1hLCB2bWEtPnZtX3N0YXJ0LCBzaG0tPnBhZGRyID4+IFBBR0VfU0hJRlQsCisJCQkgICAgICAg c2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9idWZfb3Bz IHRlZV9zaG1fZG1hX2J1Zl9vcHMgPSB7CisJLm1hcF9kbWFfYnVmID0gdGVlX3NobV9vcF9tYXBf ZG1hX2J1ZiwKKwkudW5tYXBfZG1hX2J1ZiA9IHRlZV9zaG1fb3BfdW5tYXBfZG1hX2J1ZiwKKwku cmVsZWFzZSA9IHRlZV9zaG1fb3BfcmVsZWFzZSwKKwkua21hcF9hdG9taWMgPSB0ZWVfc2htX29w X2ttYXBfYXRvbWljLAorCS5rbWFwID0gdGVlX3NobV9vcF9rbWFwLAorCS5tbWFwID0gdGVlX3No bV9vcF9tbWFwLAorfTsKKworc3RydWN0IHRlZV9zaG0gKnRlZV9zaG1fYWxsb2Moc3RydWN0IHRl ZV9kZXZpY2UgKnRlZWRldiwgc2l6ZV90IHNpemUsCisJCQl1MzIgZmxhZ3MpCit7CisJc3RydWN0 IHRlZV9zaG1fcG9vbF9tZ3IgKnBvb2xtID0gTlVMTDsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOwor CXZvaWQgKnJldDsKKwlpbnQgcmM7CisKKwlpZiAoIShmbGFncyAmIFRFRV9TSE1fTUFQUEVEKSkg eworCQlkZXZfZXJyKHRlZWRldi0+ZGV2LnBhcmVudCwKKwkJCSJvbmx5IG1hcHBlZCBhbGxvY2F0 aW9ucyBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlp ZiAoKGZsYWdzICYgfihURUVfU0hNX01BUFBFRHxURUVfU0hNX0RNQV9CVUYpKSkgeworCQlkZXZf ZXJyKHRlZWRldi0+ZGV2LnBhcmVudCwgImludmFsaWQgc2htIGZsYWdzIDB4JXgiLCBmbGFncyk7 CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWlmICghdGVlX2RldmljZV9nZXQo dGVlZGV2KSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlpZiAoIXRlZWRldi0+cG9v bCkgeworCQkvKiB0ZWVkZXYgaGFzIGJlZW4gZGV0YWNoZWQgZnJvbSBkcml2ZXIgKi8KKwkJcmV0 ID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBlcnI7CisJfQorCisJc2htID0ga3phbGxvYyhz aXplb2Yoc3RydWN0IHRlZV9zaG0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNobSkgeworCQlyZXQg PSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGVycjsKKwl9CisKKwlzaG0tPmZsYWdzID0gZmxh Z3M7CisJc2htLT50ZWVkZXYgPSB0ZWVkZXY7CisJaWYgKGZsYWdzICYgVEVFX1NITV9ETUFfQlVG KQorCQlwb29sbSA9ICZ0ZWVkZXYtPnBvb2wtPmRtYV9idWZfbWdyOworCWVsc2UKKwkJcG9vbG0g PSAmdGVlZGV2LT5wb29sLT5wcml2YXRlX21ncjsKKworCXJjID0gcG9vbG0tPm9wcy0+YWxsb2Mo cG9vbG0sIHNobSwgc2l6ZSk7CisJaWYgKHJjKSB7CisJCXJldCA9IEVSUl9QVFIocmMpOworCQln b3RvIGVycjsKKwl9CisKKwltdXRleF9sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKKwlsaXN0X2FkZF90 YWlsKCZzaG0tPmxpc3Rfbm9kZSwgJnRlZWRldi0+bGlzdF9zaG0pOworCW11dGV4X3VubG9jaygm dGVlZGV2LT5tdXRleCk7CisKKwlpZiAoZmxhZ3MgJiBURUVfU0hNX0RNQV9CVUYpIHsKKwkJREVG SU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOworCisJCWV4cF9pbmZvLm9wcyA9ICZ0 ZWVfc2htX2RtYV9idWZfb3BzOworCQlleHBfaW5mby5zaXplID0gc2htLT5zaXplOworCQlleHBf aW5mby5mbGFncyA9IE9fUkRXUjsKKwkJZXhwX2luZm8ucHJpdiA9IHNobTsKKworCQlzaG0tPmRt YWJ1ZiA9IGRtYV9idWZfZXhwb3J0KCZleHBfaW5mbyk7CisJCWlmIChJU19FUlIoc2htLT5kbWFi dWYpKSB7CisJCQlyZXQgPSBFUlJfQ0FTVChzaG0tPmRtYWJ1Zik7CisJCQlnb3RvIGVycjsKKwkJ fQorCX0KKworCXJldHVybiBzaG07CitlcnI6CisJaWYgKHBvb2xtICYmIHNobSAmJiBzaG0tPmth ZGRyKQorCQlwb29sbS0+b3BzLT5mcmVlKHBvb2xtLCBzaG0pOworCWtmcmVlKHNobSk7CisJdGVl X2RldmljZV9wdXQodGVlZGV2KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwo dGVlX3NobV9hbGxvYyk7CisKK2ludCB0ZWVfc2htX2dldF9mZChzdHJ1Y3QgdGVlX3NobSAqc2ht KQoreworCXUzMiByZXFfZmxhZ3MgPSBURUVfU0hNX01BUFBFRCB8IFRFRV9TSE1fRE1BX0JVRjsK KwlpbnQgZmQ7CisKKwlpZiAoKHNobS0+ZmxhZ3MgJiByZXFfZmxhZ3MpICE9IHJlcV9mbGFncykK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmZCA9IGRtYV9idWZfZmQoc2htLT5kbWFidWYsIE9fQ0xP RVhFQyk7CisJaWYgKGZkID49IDApCisJCWdldF9kbWFfYnVmKHNobS0+ZG1hYnVmKTsKKwlyZXR1 cm4gZmQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWVfc2htX2dldF9mZCk7CisKK2ludCB0ZWVf c2htX3B1dF9mZChpbnQgZmQpCit7CisJcmV0dXJuIF9fY2xvc2VfZmQoY3VycmVudC0+ZmlsZXMs IGZkKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRlZV9zaG1fcHV0X2ZkKTsKKwordm9pZCB0ZWVf c2htX2ZyZWUoc3RydWN0IHRlZV9zaG0gKnNobSkKK3sKKworCS8qCisJICogZG1hX2J1Zl9wdXQo KSBkZWNyZWFzZXMgdGhlIGRtYWJ1ZiByZWZlcmVuY2UgY291bnRlciBhbmQgd2lsbAorCSAqIGNh bGwgdGVlX3NobV9yZWxlYXNlKCkgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgaXMgZ29uZS4KKwkg KgorCSAqIEluIHRoZSBjYXNlIG9mIGRyaXZlciBwcml2YXRlIG1lbW9yeSB3ZSBjYWxsIHRlZV9z aG1fcmVsZWFzZQorCSAqIGRpcmVjdGx5IGluc3RlYWQgYXMgaXQgZG9lc24ndCBoYXZlIGEgcmVm ZXJlbmNlIGNvdW50ZXIuCisJICovCisJaWYgKHNobS0+ZmxhZ3MgJiBURUVfU0hNX0RNQV9CVUYp CisJCWRtYV9idWZfcHV0KHNobS0+ZG1hYnVmKTsKKwllbHNlCisJCXRlZV9zaG1fcmVsZWFzZShz aG0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9mcmVlKTsKKworc3RhdGljIGJvb2wg Y21wX2tleV92YShzdHJ1Y3QgdGVlX3NobSAqc2htLCB1aW50cHRyX3QgdmEpCit7CisJdWludHB0 cl90IHNobV92YSA9ICh1aW50cHRyX3Qpc2htLT5rYWRkcjsKKworCXJldHVybiAodmEgPj0gc2ht X3ZhKSAmJiAodmEgPCAoc2htX3ZhICsgc2htLT5zaXplKSk7Cit9CisKK3N0YXRpYyBib29sIGNt cF9rZXlfcGEoc3RydWN0IHRlZV9zaG0gKnNobSwgdWludHB0cl90IHBhKQoreworCXJldHVybiAo cGEgPj0gc2htLT5wYWRkcikgJiYgKHBhIDwgKHNobS0+cGFkZHIgKyBzaG0tPnNpemUpKTsKK30K Kworc3RhdGljIHN0cnVjdCB0ZWVfc2htICp0ZWVfc2htX2ZpbmRfYnlfa2V5KHN0cnVjdCB0ZWVf ZGV2aWNlICp0ZWVkZXYsIHUzMiBmbGFncywKKwkJCWJvb2wgKCpjbXApKHN0cnVjdCB0ZWVfc2ht ICpzaG0sIHVpbnRwdHJfdCBrZXkpLAorCQkJdWludHB0cl90IGtleSkKK3sKKwlzdHJ1Y3QgdGVl X3NobSAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOworCisJbXV0ZXhfbG9jaygm dGVlZGV2LT5tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzaG0sICZ0ZWVkZXYtPmxpc3Rf c2htLCBsaXN0X25vZGUpIHsKKwkJaWYgKGNtcChzaG0sIGtleSkpIHsKKwkJCXJldCA9IHNobTsK KwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmdGVlZGV2LT5tdXRleCk7CisKKwly ZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgdGVlX3NobSAqdGVlX3NobV9maW5kX2J5X3ZhKHN0cnVj dCB0ZWVfZGV2aWNlICp0ZWVkZXYsIHUzMiBmbGFncywKKwkJCXZvaWQgKnZhKQoreworCXJldHVy biB0ZWVfc2htX2ZpbmRfYnlfa2V5KHRlZWRldiwgZmxhZ3MsIGNtcF9rZXlfdmEsICh1aW50cHRy X3QpdmEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9maW5kX2J5X3ZhKTsKKworc3Ry dWN0IHRlZV9zaG0gKnRlZV9zaG1fZmluZF9ieV9wYShzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2 LCB1MzIgZmxhZ3MsCisJCQlwaHlzX2FkZHJfdCBwYSkKK3sKKwlyZXR1cm4gdGVlX3NobV9maW5k X2J5X2tleSh0ZWVkZXYsIGZsYWdzLCBjbXBfa2V5X3BhLCBwYSk7Cit9CitFWFBPUlRfU1lNQk9M X0dQTCh0ZWVfc2htX2ZpbmRfYnlfcGEpOworCitpbnQgdGVlX3NobV92YTJwYShzdHJ1Y3QgdGVl X3NobSAqc2htLCB2b2lkICp2YSwgcGh5c19hZGRyX3QgKnBhKQoreworCS8qIENoZWNrIHRoYXQg d2UncmUgaW4gdGhlIHJhbmdlIG9mIHRoZSBzaG0gKi8KKwlpZiAoKGNoYXIgKil2YSA8IChjaGFy ICopc2htLT5rYWRkcikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChjaGFyICopdmEgPj0gKChj aGFyICopc2htLT5rYWRkciArIHNobS0+c2l6ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0 dXJuIHRlZV9zaG1fZ2V0X3BhKAorCQkJc2htLCAodW5zaWduZWQgbG9uZyl2YSAtICh1bnNpZ25l ZCBsb25nKXNobS0+a2FkZHIsIHBhKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRlZV9zaG1fdmEy cGEpOworCitpbnQgdGVlX3NobV9wYTJ2YShzdHJ1Y3QgdGVlX3NobSAqc2htLCBwaHlzX2FkZHJf dCBwYSwgdm9pZCAqKnZhKQoreworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIHJhbmdlIG9m IHRoZSBzaG0gKi8KKwlpZiAocGEgPCBzaG0tPnBhZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlp ZiAocGEgPj0gKHNobS0+cGFkZHIgKyBzaG0tPnNpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlmICh2YSkgeworCQl2b2lkICp2ID0gdGVlX3NobV9nZXRfdmEoc2htLCBwYSAtIHNobS0+cGFk ZHIpOworCisJCWlmIChJU19FUlIodikpCisJCQlyZXR1cm4gUFRSX0VSUih2KTsKKwkJKnZhID0g djsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWVfc2htX3BhMnZhKTsK Kwordm9pZCAqdGVlX3NobV9nZXRfdmEoc3RydWN0IHRlZV9zaG0gKnNobSwgc2l6ZV90IG9mZnMp Cit7CisJaWYgKG9mZnMgPj0gc2htLT5zaXplKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK KwlyZXR1cm4gKGNoYXIgKilzaG0tPmthZGRyICsgb2ZmczsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KHRlZV9zaG1fZ2V0X3ZhKTsKKworaW50IHRlZV9zaG1fZ2V0X3BhKHN0cnVjdCB0ZWVfc2htICpz aG0sIHNpemVfdCBvZmZzLCBwaHlzX2FkZHJfdCAqcGEpCit7CisJaWYgKG9mZnMgPj0gc2htLT5z aXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocGEpCisJCSpwYSA9IHNobS0+cGFkZHIgKyBv ZmZzOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9nZXRfcGEpOwor CitzdGF0aWMgYm9vbCBpc19zaG1fZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQorewor CXJldHVybiBkbWFidWYtPm9wcyA9PSAmdGVlX3NobV9kbWFfYnVmX29wczsKK30KKworc3RydWN0 IHRlZV9zaG0gKnRlZV9zaG1fZ2V0X2Zyb21fZmQoaW50IGZkKQoreworCXN0cnVjdCBkbWFfYnVm ICpkbWFidWYgPSBkbWFfYnVmX2dldChmZCk7CisKKwlpZiAoSVNfRVJSKGRtYWJ1ZikpCisJCXJl dHVybiBFUlJfQ0FTVChkbWFidWYpOworCisJaWYgKCFpc19zaG1fZG1hX2J1ZihkbWFidWYpKSB7 CisJCWRtYV9idWZfcHV0KGRtYWJ1Zik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0K KwlyZXR1cm4gZG1hYnVmLT5wcml2OworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9nZXRf ZnJvbV9mZCk7CisKK3ZvaWQgdGVlX3NobV9wdXQoc3RydWN0IHRlZV9zaG0gKnNobSkKK3sKKwlp ZiAoc2htLT5mbGFncyAmIFRFRV9TSE1fRE1BX0JVRikKKwkJZG1hX2J1Zl9wdXQoc2htLT5kbWFi dWYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9wdXQpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy90ZWUvdGVlX3NobV9wb29sLmMgYi9kcml2ZXJzL3RlZS90ZWVfc2htX3Bvb2wuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWYyMmJjCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy90ZWUvdGVlX3NobV9wb29sLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMTUsIExpbmFybyBMaW1pdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBp cyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQg dW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNp bmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5j bHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmFsbG9jLmg+CisjaW5jbHVk ZSA8bGludXgvdGVlX2Rydi5oPgorI2luY2x1ZGUgInRlZV9wcml2YXRlLmgiCisKK3N0YXRpYyBp bnQgcG9vbF9vcF9nZW5fYWxsb2Moc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3IgKnBvb2xtLAorCQkJ c3RydWN0IHRlZV9zaG0gKnNobSwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyB2YTsK KwlzdHJ1Y3QgZ2VuX3Bvb2wgKmdlbnBvb2wgPSBwb29sbS0+cHJpdmF0ZV9kYXRhOworCXNpemVf dCBzID0gcm91bmR1cChzaXplLCAxIDw8IGdlbnBvb2wtPm1pbl9hbGxvY19vcmRlcik7CisKKwl2 YSA9IGdlbl9wb29sX2FsbG9jKGdlbnBvb2wsIHMpOworCWlmICghdmEpCisJCXJldHVybiAtRU5P TUVNOworCXNobS0+a2FkZHIgPSAodm9pZCAqKXZhOworCXNobS0+cGFkZHIgPSBnZW5fcG9vbF92 aXJ0X3RvX3BoeXMoZ2VucG9vbCwgdmEpOworCXNobS0+c2l6ZSA9IHM7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIHBvb2xfb3BfZ2VuX2ZyZWUoc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3Ig KnBvb2xtLAorCQkJc3RydWN0IHRlZV9zaG0gKnNobSkKK3sKKwlnZW5fcG9vbF9mcmVlKHBvb2xt LT5wcml2YXRlX2RhdGEsICh1bnNpZ25lZCBsb25nKXNobS0+a2FkZHIsCisJCSAgICAgIHNobS0+ c2l6ZSk7CisJc2htLT5rYWRkciA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVl X3NobV9wb29sX21ncl9vcHMgcG9vbF9vcHNfZ2VuZXJpYyA9IHsKKwkuYWxsb2MgPSBwb29sX29w X2dlbl9hbGxvYywKKwkuZnJlZSA9IHBvb2xfb3BfZ2VuX2ZyZWUsCit9OworCitzdGF0aWMgdm9p ZCBwb29sX3Jlc19tZW1fZGVzdHJveShzdHJ1Y3QgdGVlX3NobV9wb29sICpwb29sKQoreworCWdl bl9wb29sX2Rlc3Ryb3kocG9vbC0+cHJpdmF0ZV9tZ3IucHJpdmF0ZV9kYXRhKTsKKwlnZW5fcG9v bF9kZXN0cm95KHBvb2wtPmRtYV9idWZfbWdyLnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBp bnQgcG9vbF9yZXNfbWVtX21ncl9pbml0KHN0cnVjdCB0ZWVfc2htX3Bvb2xfbWdyICptZ3IsCisJ CQlzdHJ1Y3QgdGVlX3NobV9wb29sX21lbV9pbmZvICppbmZvLCBpbnQgbWluX2FsbG9jX29yZGVy KQoreworCXNpemVfdCBwYWdlX21hc2sgPSBQQUdFX1NJWkUgLSAxOworCXN0cnVjdCBnZW5fcG9v bCAqZ2VucG9vbCA9IE5VTEw7CisJaW50IHJjOworCisJLyoKKwkgKiBTdGFydCBhbmQgZW5kIG11 c3QgYmUgcGFnZSBhbGlnbmVkCisJICovCisJaWYgKChpbmZvLT52YWRkciAmIHBhZ2VfbWFzaykg fHwgKGluZm8tPnBhZGRyICYgcGFnZV9tYXNrKSB8fAorCSAgICAoaW5mby0+c2l6ZSAmIHBhZ2Vf bWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJZ2VucG9vbCA9IGdlbl9wb29sX2NyZWF0ZSht aW5fYWxsb2Nfb3JkZXIsIC0xKTsKKwlpZiAoIWdlbnBvb2wpCisJCXJldHVybiAtRU5PTUVNOwor CisJZ2VuX3Bvb2xfc2V0X2FsZ28oZ2VucG9vbCwgZ2VuX3Bvb2xfYmVzdF9maXQsIE5VTEwpOwor CXJjID0gZ2VuX3Bvb2xfYWRkX3ZpcnQoZ2VucG9vbCwgaW5mby0+dmFkZHIsIGluZm8tPnBhZGRy LCBpbmZvLT5zaXplLAorCQkJICAgICAgIC0xKTsKKwlpZiAocmMpIHsKKwkJZ2VuX3Bvb2xfZGVz dHJveShnZW5wb29sKTsKKwkJcmV0dXJuIHJjOworCX0KKworCW1nci0+cHJpdmF0ZV9kYXRhID0g Z2VucG9vbDsKKwltZ3ItPm9wcyA9ICZwb29sX29wc19nZW5lcmljOworCXJldHVybiAwOworfQor CitzdHJ1Y3QgdGVlX3NobV9wb29sICp0ZWVfc2htX3Bvb2xfYWxsb2NfcmVzX21lbShzdHJ1Y3Qg ZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgdGVlX3NobV9wb29sX21lbV9pbmZvICpwcml2X2luZm8s CisJCQlzdHJ1Y3QgdGVlX3NobV9wb29sX21lbV9pbmZvICpkbWFidWZfaW5mbykKK3sKKwlzdHJ1 Y3QgdGVlX3NobV9wb29sICpwb29sID0gTlVMTDsKKwlpbnQgcmV0OworCisJcG9vbCA9IGt6YWxs b2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb29sKSB7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qCisJICogQ3JlYXRlIHRoZSBwb29sIGZvciBk cml2ZXIgcHJpdmF0ZSBzaGFyZWQgbWVtb3J5CisJICovCisJcmV0ID0gcG9vbF9yZXNfbWVtX21n cl9pbml0KCZwb29sLT5wcml2YXRlX21nciwgcHJpdl9pbmZvLAorCQkJCSAgICAzIC8qIDggYnl0 ZSBhbGlnbmVkICovKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCS8qCisJICogQ3JlYXRl IHRoZSBwb29sIGZvciBkbWFfYnVmIHNoYXJlZCBtZW1vcnkKKwkgKi8KKwlyZXQgPSBwb29sX3Jl c19tZW1fbWdyX2luaXQoJnBvb2wtPmRtYV9idWZfbWdyLCBkbWFidWZfaW5mbywKKwkJCQkgICAg UEFHRV9TSElGVCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlwb29sLT5kZXN0cm95ID0g cG9vbF9yZXNfbWVtX2Rlc3Ryb3k7CisJcmV0dXJuIHBvb2w7CitlcnI6CisJaWYgKHJldCA9PSAt RU5PTUVNKQorCQlkZXZfZXJyKGRldiwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVzX21l bSBzaGFyZWQgbWVtb3J5IHBvb2xcbiIpOworCWlmIChwb29sICYmIHBvb2wtPnByaXZhdGVfbWdy LnByaXZhdGVfZGF0YSkKKwkJZ2VuX3Bvb2xfZGVzdHJveShwb29sLT5wcml2YXRlX21nci5wcml2 YXRlX2RhdGEpOworCWtmcmVlKHBvb2wpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBP UlRfU1lNQk9MX0dQTCh0ZWVfc2htX3Bvb2xfYWxsb2NfcmVzX21lbSk7CisKK3ZvaWQgdGVlX3No bV9wb29sX2ZyZWUoc3RydWN0IHRlZV9zaG1fcG9vbCAqcG9vbCkKK3sKKwlwb29sLT5kZXN0cm95 KHBvb2wpOworCWtmcmVlKHBvb2wpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9wb29s X2ZyZWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZWVfZHJ2LmggYi9pbmNsdWRlL2xp bnV4L3RlZV9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmZlOGMy Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90ZWVfZHJ2LmgKQEAgLTAsMCArMSwz MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIExpbmFybyBMaW1pdGVkCisgKgorICog VGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVk LCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKi8KKworI2lmbmRlZiBfX1RFRV9EUlZfSAorI2RlZmluZSBfX1RFRV9EUlZfSAor CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5j bHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RlZS5oPgorCisvKgor ICogVGhlIGZpbGUgZGVzY3JpYmVzIHRoZSBBUEkgcHJvdmlkZWQgYnkgdGhlIGdlbmVyaWMgVEVF IGRyaXZlciB0byB0aGUKKyAqIHNwZWNpZmljIFRFRSBkcml2ZXIuCisgKi8KKworI2RlZmluZSBU RUVfU0hNX01BUFBFRAkJMHgxCS8qIE1lbW9yeSBtYXBwZWQgYnkgdGhlIGtlcm5lbCAqLworI2Rl ZmluZSBURUVfU0hNX0RNQV9CVUYJCTB4MgkvKiBNZW1vcnkgd2l0aCBkbWEtYnVmIGhhbmRsZSAq LworCitzdHJ1Y3QgdGVlX2RldmljZTsKK3N0cnVjdCB0ZWVfc2htOworc3RydWN0IHRlZV9zaG1f cG9vbDsKKworLyoqCisgKiBzdHJ1Y3QgdGVlX2NvbnRleHQgLSBkcml2ZXIgc3BlY2lmaWMgY29u dGV4dCBvbiBmaWxlIHBvaW50ZXIgZGF0YQorICogQHRlZWRldjoJcG9pbnRlciB0byB0aGlzIGRy aXZlcnMgc3RydWN0IHRlZV9kZXZpY2UKKyAqIEBkYXRhOglkcml2ZXIgc3BlY2lmaWMgY29udGV4 dCBkYXRhLCBtYW5hZ2VkIGJ5IHRoZSBkcml2ZXIKKyAqLworc3RydWN0IHRlZV9jb250ZXh0IHsK KwlzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2OworCXZvaWQgKmRhdGE7Cit9OworCitzdHJ1Y3Qg dGVlX3BhcmFtX21lbXJlZiB7CisJc2l6ZV90IHNobV9vZmZzOworCXNpemVfdCBzaXplOworCXN0 cnVjdCB0ZWVfc2htICpzaG07Cit9OworCitzdHJ1Y3QgdGVlX3BhcmFtX3ZhbHVlIHsKKwl1NjQg YTsKKwl1NjQgYjsKKwl1NjQgYzsKK307CisKK3N0cnVjdCB0ZWVfcGFyYW0geworCXU2NCBhdHRy OworCXVuaW9uIHsKKwkJc3RydWN0IHRlZV9wYXJhbV9tZW1yZWYgbWVtcmVmOworCQlzdHJ1Y3Qg dGVlX3BhcmFtX3ZhbHVlIHZhbHVlOworCX0gdTsKK307CisKKy8qKgorICogc3RydWN0IHRlZV9k cml2ZXJfb3BzIC0gZHJpdmVyIG9wZXJhdGlvbnMgdnRhYmxlCisgKiBAZ2V0X3ZlcnNpb246CXJl dHVybnMgdmVyc2lvbiBvZiBkcml2ZXIKKyAqIEBvcGVuOgkJY2FsbGVkIHdoZW4gdGhlIGRldmlj ZSBmaWxlIGlzIG9wZW5lZAorICogQHJlbGVhc2U6CQlyZWxlYXNlIHRoaXMgb3BlbiBmaWxlCisg Ki8KK3N0cnVjdCB0ZWVfZHJpdmVyX29wcyB7CisJdm9pZCAoKmdldF92ZXJzaW9uKShzdHJ1Y3Qg dGVlX2RldmljZSAqdGVlZGV2LAorCQkJc3RydWN0IHRlZV9pb2N0bF92ZXJzaW9uX2RhdGEgKnZl cnMpOworCWludCAoKm9wZW4pKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4KTsKKwl2b2lkICgqcmVs ZWFzZSkoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgpOworCWludCAoKm9wZW5fc2Vzc2lvbikoc3Ry dWN0IHRlZV9jb250ZXh0ICpjdHgsCisJCQlzdHJ1Y3QgdGVlX2lvY3RsX29wZW5fc2Vzc2lvbl9h cmcgKmFyZywKKwkJCXN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKTsKKwlpbnQgKCpjbG9zZV9zZXNz aW9uKShzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyIHNlc3Npb24pOworCWludCAoKmludm9r ZV9mdW5jKShzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJCXN0cnVjdCB0ZWVfaW9jdGxfaW52 b2tlX2FyZyAqYXJnLAorCQkJc3RydWN0IHRlZV9wYXJhbSAqcGFyYW0pOworCWludCAoKmNhbmNl bF9yZXEpKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIgY2FuY2VsX2lkLCB1MzIgc2Vzc2lv bik7CisJaW50ICgqc3VwcF9yZWN2KShzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyICpmdW5j LCB1MzIgKm51bV9wYXJhbXMsCisJCQlzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSk7CisJaW50ICgq c3VwcF9zZW5kKShzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyIHJldCwgdTMyIG51bV9wYXJh bXMsCisJCQlzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSk7Cit9OworCisvKioKKyAqIHN0cnVjdCB0 ZWVfZGVzYyAtIERlc2NyaWJlcyB0aGUgVEVFIGRyaXZlciB0byB0aGUgc3Vic3lzdGVtCisgKiBA bmFtZToJbmFtZSBvZiBkcml2ZXIKKyAqIEBvcHM6CWRyaXZlciBvcGVyYXRpb25zIHZ0YWJsZQor ICogQG93bmVyOgltb2R1bGUgcHJvdmlkaW5nIHRoZSBkcml2ZXIKKyAqIEBmbGFnczoJRXh0cmEg cHJvcGVydGllcyBvZiBkcml2ZXIsIGRlZmluZWQgYnkgVEVFX0RFU0NfKiBiZWxvdworICovCisj ZGVmaW5lIFRFRV9ERVNDX1BSSVZJTEVHRUQJMHgxCitzdHJ1Y3QgdGVlX2Rlc2MgeworCWNvbnN0 IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IHRlZV9kcml2ZXJfb3BzICpvcHM7CisJc3RydWN0 IG1vZHVsZSAqb3duZXI7CisJdTMyIGZsYWdzOworfTsKKworCisvKioKKyAqIHRlZV9kZXZpY2Vf YWxsb2MoKSAtIEFsbG9jYXRlIGEgbmV3IHN0cnVjdCB0ZWVfZGV2aWNlIGluc3RhbmNlCisgKiBA dGVlZGVzYzoJRGVzY3JpcHRvciBmb3IgdGhpcyBkcml2ZXIKKyAqIEBkZXY6CVBhcmVudCBkZXZp Y2UgZm9yIHRoaXMgZGV2aWNlCisgKiBAcG9vbDoJU2hhcmVkIG1lbW9yeSBwb29sLCBOVUxMIGlm IG5vdCB1c2VkCisgKiBAZHJpdmVyX2RhdGE6IFByaXZhdGUgZHJpdmVyIGRhdGEgZm9yIHRoaXMg ZGV2aWNlCisgKgorICogQWxsb2NhdGVzIGEgbmV3IHN0cnVjdCB0ZWVfZGV2aWNlIGluc3RhbmNl LiBUaGUgZGV2aWNlIGlzCisgKiByZW1vdmVkIGJ5IHRlZV9kZXZpY2VfdW5yZWdpc3RlcigpLgor ICoKKyAqIEByZXR1cm5zIGEgcG9pbnRlciB0byBhICdzdHJ1Y3QgdGVlX2RldmljZScgb3IgYW4g RVJSX1BUUiBvbiBmYWlsdXJlCisgKi8KK3N0cnVjdCB0ZWVfZGV2aWNlICp0ZWVfZGV2aWNlX2Fs bG9jKGNvbnN0IHN0cnVjdCB0ZWVfZGVzYyAqdGVlZGVzYywKKwkJCXN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IHRlZV9zaG1fcG9vbCAqcG9vbCwKKwkJCXZvaWQgKmRyaXZlcl9kYXRhKTsKKwor LyoqCisgKiB0ZWVfZGV2aWNlX3JlZ2lzdGVyKCkgLSBSZWdpc3RlcnMgYSBURUUgZGV2aWNlCisg KiBAdGVlZGV2OglEZXZpY2UgdG8gcmVnaXN0ZXIKKyAqCisgKiB0ZWVfZGV2aWNlX3VucmVnaXN0 ZXIoKSBuZWVkIHRvIGJlIGNhbGxlZCB0byByZW1vdmUgdGhlIEB0ZWVkZXYgaWYKKyAqIHRoaXMg ZnVuY3Rpb24gZmFpbHMuCisgKgorICogQHJldHVybnMgPCAwIG9uIGZhaWx1cmUKKyAqLworaW50 IHRlZV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldik7CisKKy8qKgor ICogdGVlX2RldmljZV91bnJlZ2lzdGVyKCkgLSBSZW1vdmVzIGEgVEVFIGRldmljZQorICogQHRl ZWRldjoJRGV2aWNlIHRvIHVucmVnaXN0ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBi ZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBAdGVlZGV2IGV2ZW4gaWYKKyAqIHRlZV9kZXZpY2VfcmVn aXN0ZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LiBEb2VzIG5vdGhpbmcgaWYKKyAqIEB0ZWVk ZXYgaXMgTlVMTC4KKyAqLwordm9pZCB0ZWVfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHRlZV9k ZXZpY2UgKnRlZWRldik7CisKKy8qKgorICogc3RydWN0IHRlZV9zaG1fcG9vbF9tZW1faW5mbyAt IGhvbGRzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgYSBzaGFyZWQgbWVtb3J5IHBvb2wK KyAqIEB2YWRkcjoJVmlydHVhbCBhZGRyZXNzIG9mIHN0YXJ0IG9mIHBvb2wKKyAqIEBwYWRkcjoJ UGh5c2ljYWwgYWRkcmVzcyBvZiBzdGFydCBvZiBwb29sCisgKiBAc2l6ZToJU2l6ZSBpbiBieXRl cyBvZiB0aGUgcG9vbAorICovCitzdHJ1Y3QgdGVlX3NobV9wb29sX21lbV9pbmZvIHsKKwl1bnNp Z25lZCBsb25nIHZhZGRyOworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJc2l6ZV90IHNpemU7Cit9 OworCisvKioKKyAqIHRlZV9zaG1fcG9vbF9hbGxvY19yZXNfbWVtKCkgLSBDcmVhdGUgYSBzaGFy ZWQgbWVtb3J5IHBvb2wgZnJvbSByZXNlcnZlZCBtZW1vcnkgcmFuZ2UKKyAqIEBkZXY6CURldmlj ZSBhbGxvY2F0aW5nIHRoZSBwb29sCisgKiBAcHJpdl9pbmZvOglJbmZvcm1hdGlvbiBmb3IgZHJp dmVyIHByaXZhdGUgc2hhcmVkIG1lbW9yeSBwb29sCisgKiBAZG1hYnVmX2luZm86IEluZm9ybWF0 aW9uIGZvciBkbWEtYnVmIHNoYXJlZCBtZW1vcnkgcG9vbAorICoKKyAqIFN0YXJ0IGFuZCBlbmQg b2YgcG9vbHMgd2lsbCBtdXN0IGJlIHBhZ2UgYWxpZ25lZC4KKyAqCisgKiBBbGxvY2F0aW9uIHdp dGggdGhlIGZsYWcgVEVFX1NITV9ETUFfQlVGIHNldCB3aWxsIHVzZSB0aGUgcmFuZ2Ugc3VwcGxp ZWQKKyAqIGluIEBkbWFidWYsIG90aGVycyB3aWxsIHVzZSB0aGUgcmFuZ2UgcHJvdmlkZWQgYnkg QHByaXYuCisgKgorICogQHJldHVybnMgcG9pbnRlciB0byBhICdzdHJ1Y3QgdGVlX3NobV9wb29s JyBvciBhbiBFUlJfUFRSIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCB0ZWVfc2htX3Bvb2wgKnRl ZV9zaG1fcG9vbF9hbGxvY19yZXNfbWVtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCB0 ZWVfc2htX3Bvb2xfbWVtX2luZm8gKnByaXZfaW5mbywKKwkJCXN0cnVjdCB0ZWVfc2htX3Bvb2xf bWVtX2luZm8gKmRtYWJ1Zl9pbmZvKTsKKworLyoqCisgKiB0ZWVfc2htX3Bvb2xfZnJlZSgpIC0g RnJlZSBhIHNoYXJlZCBtZW1vcnkgcG9vbAorICogQHBvb2w6CVRoZSBzaGFyZWQgbWVtb3J5IHBv b2wgdG8gZnJlZQorICoKKyAqIFRoZSBtdXN0IGJlIG5vIHJlbWFpbmluZyBzaGFyZWQgbWVtb3J5 IGFsbG9jYXRlZCBmcm9tIHRoaXMgcG9vbCB3aGVuCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZC4KKyAqLwordm9pZCB0ZWVfc2htX3Bvb2xfZnJlZShzdHJ1Y3QgdGVlX3NobV9wb29sICpwb29s KTsKKworLyoqCisgKiB0ZWVfZ2V0X2RydmRhdGEoKSAtIFJldHVybiBkcml2ZXJfZGF0YSBwb2lu dGVyCisgKiBAcmV0dXJucyB0aGUgZHJpdmVyX2RhdGEgcG9pbnRlciBzdXBwbGllZCB0byB0ZWVf cmVnaXN0ZXIoKS4KKyAqLwordm9pZCAqdGVlX2dldF9kcnZkYXRhKHN0cnVjdCB0ZWVfZGV2aWNl ICp0ZWVkZXYpOworCisvKioKKyAqIHRlZV9zaG1fYWxsb2MoKSAtIEFsbG9jYXRlIHNoYXJlZCBt ZW1vcnkKKyAqIEB0ZWVkZXY6CURyaXZlciB0aGF0IGFsbG9jYXRlcyB0aGUgc2hhcmVkIG1lbW9y eQorICogQHNpemU6CVJlcXVlc3RlZCBzaXplIG9mIHNoYXJlZCBtZW1vcnkKKyAqIEBmbGFnczoJ RmxhZ3Mgc2V0dGluZyBwcm9wZXJ0aWVzIGZvciB0aGUgcmVxdWVzdGVkIHNoYXJlZCBtZW1vcnku CisgKgorICogTWVtb3J5IGFsbG9jYXRlZCBhcyBnbG9iYWwgc2hhcmVkIG1lbW9yeSBpcyBhdXRv bWF0aWNhbGx5IGZyZWVkIHdoZW4gdGhlCisgKiBURUUgZmlsZSBwb2ludGVyIGlzIGNsb3NlZC4g VGhlIEBmbGFncyBmaWVsZCB1c2VzIHRoZSBiaXRzIGRlZmluZWQgYnkKKyAqIFRFRV9TSE1fKiBh Ym92ZS4gVEVFX1NITV9NQVBQRUQgbXVzdCBjdXJyZW50bHkgYWx3YXlzIGJlIHNldC4gSWYKKyAq IFRFRV9TSE1fRE1BX0JVRiBnbG9iYWwgc2hhcmVkIG1lbW9yeSB3aWxsIGJlIGFsbG9jYXRlZCBh bmQgYXNzb2NpYXRlZAorICogd2l0aCBhIGRtYS1idWYgaGFuZGxlLCBlbHNlIGRyaXZlciBwcml2 YXRlIG1lbW9yeS4KKyAqCisgKiBAcmV0dXJucyBhIHBvaW50ZXIgdG8gJ3N0cnVjdCB0ZWVfc2ht JworICovCitzdHJ1Y3QgdGVlX3NobSAqdGVlX3NobV9hbGxvYyhzdHJ1Y3QgdGVlX2RldmljZSAq dGVlZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCXUzMiBmbGFncyk7CisKKy8qKgorICogdGVlX3NobV9m cmVlKCkgLSBGcmVlIHNoYXJlZCBtZW1vcnkKKyAqIEBzaG06CUhhbmRsZSB0byBzaGFyZWQgbWVt b3J5IHRvIGZyZWUKKyAqLwordm9pZCB0ZWVfc2htX2ZyZWUoc3RydWN0IHRlZV9zaG0gKnNobSk7 CisKKy8qKgorICogdGVlX3NobV9maW5kX2J5X3ZhKCkgLSBGaW5kIGEgc2hhcmVkIG1lbW9yeSBo YW5kbGUgYnkgYSB2aXJ0dWFsIGFkZHJlc3MKKyAqIEB0ZWVkZXY6CVRoZSBkZXZpY2UgdGhhdCBv d25zIHRoZSBzaGFyZWQgbWVtb3J5CisgKiBAZmxhZ3M6CVNlbGVjdCB3aGljaCB0eXBlIG9mIHNo YXJlZCBtZW1vcnkgdG8gbG9jYXRlLCBpZgorICoJCVRFRV9TSE1fRE1BX0JVRiBnbG9iYWwgc2hh cmVkIG1lbW9yeSBlbHNlIGRyaXZlciBwcml2YXRlCisgKgkJc2hhcmVkIG1lbW9yeS4KKyAqIEB2 YToJCVZpcnR1YWwgYWRkcmVzcyBjb3ZlcmVkIGJ5IHRoZSBzaGFyZWQgbWVtb3J5CisgKiBAcmV0 dXJucyBhIEhhbmRsZSB0byBzaGFyZWQgbWVtb3J5CisgKi8KK3N0cnVjdCB0ZWVfc2htICp0ZWVf c2htX2ZpbmRfYnlfdmEoc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldiwgdTMyIGZsYWdzLAorCQkJ dm9pZCAqdmEpOworLyoqCisgKiB0ZWVfc2htX2ZpbmRfYnlfcGEoKSAtIEZpbmQgYSBzaGFyZWQg bWVtb3J5IGhhbmRsZSBieSBhIHBoeXNpY2FsIGFkZHJlc3MKKyAqIEB0ZWVkZXY6CVRoZSBkZXZp Y2UgdGhhdCBvd25zIHRoZSBzaGFyZWQgbWVtb3J5CisgKiBAZmxhZ3M6CVNlbGVjdCB3aGljaCB0 eXBlIG9mIHNoYXJlZCBtZW1vcnkgdG8gbG9jYXRlLCBpZgorICoJCVRFRV9TSE1fRE1BX0JVRiBn bG9iYWwgc2hhcmVkIG1lbW9yeSBlbHNlIGRyaXZlciBwcml2YXRlCisgKgkJc2hhcmVkIG1lbW9y eS4KKyAqIEBwYToJCVBoeXNpY2FsIGFkZHJlc3MgY292ZXJlZCBieSB0aGUgc2hhcmVkIG1lbW9y eQorICogQHJldHVybnMgYSBIYW5kbGUgdG8gc2hhcmVkIG1lbW9yeQorICovCitzdHJ1Y3QgdGVl X3NobSAqdGVlX3NobV9maW5kX2J5X3BhKHN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXYsIHUzMiBm bGFncywKKwkJCXBoeXNfYWRkcl90IHBhKTsKKworLyoqCisgKiB0ZWVfc2htX3ZhMnBhKCkgLSBH ZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIHZpcnR1YWwgYWRkcmVzcworICogQHNobToJU2hhcmVk IG1lbW9yeSBoYW5kbGUKKyAqIEB2YToJCVZpcnR1YWwgYWRkcmVzcyB0byB0cmFubHNhdGUKKyAq IEBwYToJCVJldHVybmVkIHBoeXNpY2FsIGFkZHJlc3MKKyAqIEByZXR1cm5zIDAgb24gc3VjY2Vz cyBhbmQgPCAwIG9uIGZhaWx1cmUKKyAqLworaW50IHRlZV9zaG1fdmEycGEoc3RydWN0IHRlZV9z aG0gKnNobSwgdm9pZCAqdmEsIHBoeXNfYWRkcl90ICpwYSk7CisKKy8qKgorICogdGVlX3NobV9w YTJ2YSgpIC0gR2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBhIHBoeXNpY2FsIGFkZHJlc3MKKyAqIEBz aG06CVNoYXJlZCBtZW1vcnkgaGFuZGxlCisgKiBAcGE6CQlQaHlzaWNhbCBhZGRyZXNzIHRvIHRy YW5sc2F0ZQorICogQHZhOgkJUmV0dXJuZWQgdmlydHVhbCBhZGRyZXNzCisgKiBAcmV0dXJucyAw IG9uIHN1Y2Nlc3MgYW5kIDwgMCBvbiBmYWlsdXJlCisgKi8KK2ludCB0ZWVfc2htX3BhMnZhKHN0 cnVjdCB0ZWVfc2htICpzaG0sIHBoeXNfYWRkcl90IHBhLCB2b2lkICoqdmEpOworCisvKioKKyAq IHRlZV9zaG1fZ2V0X3ZhKCkgLSBHZXQgdmlydHVhbCBhZGRyZXNzIG9mIGEgc2hhcmVkIG1lbW9y eSBwbHVzIGFuIG9mZnNldAorICogQHNobToJU2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqIEBvZmZz OglPZmZzZXQgZnJvbSBzdGFydCBvZiB0aGlzIHNoYXJlZCBtZW1vcnkKKyAqIEByZXR1cm5zIHZp cnR1YWwgYWRkcmVzcyBvZiB0aGUgc2hhcmVkIG1lbW9yeSArIG9mZnMgaWYgb2ZmcyBpcyB3aXRo aW4KKyAqCXRoZSBib3VuZHMgb2YgdGhpcyBzaGFyZWQgbWVtb3J5LCBlbHNlIGFuIEVSUl9QVFIK KyAqLwordm9pZCAqdGVlX3NobV9nZXRfdmEoc3RydWN0IHRlZV9zaG0gKnNobSwgc2l6ZV90IG9m ZnMpOworCisvKioKKyAqIHRlZV9zaG1fZ2V0X3BhKCkgLSBHZXQgcGh5c2ljYWwgYWRkcmVzcyBv ZiBhIHNoYXJlZCBtZW1vcnkgcGx1cyBhbiBvZmZzZXQKKyAqIEBzaG06CVNoYXJlZCBtZW1vcnkg aGFuZGxlCisgKiBAb2ZmczoJT2Zmc2V0IGZyb20gc3RhcnQgb2YgdGhpcyBzaGFyZWQgbWVtb3J5 CisgKiBAcGE6CQlQaHlzaWNhbCBhZGRyZXNzIHRvIHJldHVybgorICogQHJldHVybnMgMCBpZiBv ZmZzIGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoaXMgc2hhcmVkIG1lbW9yeSwgZWxzZSBhbgor ICoJZXJyb3IgY29kZS4KKyAqLworaW50IHRlZV9zaG1fZ2V0X3BhKHN0cnVjdCB0ZWVfc2htICpz aG0sIHNpemVfdCBvZmZzLCBwaHlzX2FkZHJfdCAqcGEpOworCisvKioKKyAqIHRlZV9zaG1fZ2V0 X2Zyb21fZmQoKSAtIEdldCBhIHNoYXJlZCBtZW1vcnkgaGFuZGxlIGZyb20gYSBmaWxlIGRlc2Ny aXB0b3IKKyAqIEBmZDoJCUEgdXNlciBzcGFjZSBmaWxlIGRlc2NyaXB0b3IKKyAqCisgKiBUaGlz IGZ1bmN0aW9uIGluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50ZXIgb24gdGhlIHNoYXJlZCBt ZW1vcnkgYW5kCisgKiByZXR1cm5zIGEgaGFuZGxlLgorICogQHJldHVybnMgaGFuZGxlIHRvIHNo YXJlZCBtZW1vcnkKKyAqLworc3RydWN0IHRlZV9zaG0gKnRlZV9zaG1fZ2V0X2Zyb21fZmQoaW50 IGZkKTsKKworLyoqCisgKiB0ZWVfc2htX3B1dCgpIC0gRGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50 IG9uIGEgc2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqIEBzaG06CVNoYXJlZCBtZW1vcnkgaGFuZGxl CisgKi8KK3ZvaWQgdGVlX3NobV9wdXQoc3RydWN0IHRlZV9zaG0gKnNobSk7CisKKy8qKgorICog dGVlX3NobV9nZXRfZmQoKSAtIEluY3JlYXNlIHJlZmVyZW5jZSBjb3VudCBhbmQgcmV0dXJuIGZp bGUgZGVzY3JpcHRvcgorICogQHNobToJU2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqIEByZXR1cm5z IHVzZXIgc3BhY2UgZmlsZSBkZXNjcmlwdG9yIHRvIHNoYXJlZCBtZW1vcnkKKyAqLworaW50IHRl ZV9zaG1fZ2V0X2ZkKHN0cnVjdCB0ZWVfc2htICpzaG0pOworCisvKioKKyAqIHRlZV9zaG1fcHV0 X2ZkKCkgLSBEZWNyZWFzZSByZWZlcmVuY2UgY291bnQgYW5kIGNsb3NlIGZpbGUgZGVzY3JpcHRv cgorICogQGZkOgkJRmlsZSBkZXNjcmlwdG9yIHRvIGNsb3NlCisgKiBAcmV0dXJucyA8IDAgb24g ZmFpbHVyZQorICovCitpbnQgdGVlX3NobV9wdXRfZmQoaW50IGZkKTsKKworI2VuZGlmIC8qX19U RUVfRFJWX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3RlZS5oIGIvaW5jbHVk ZS91YXBpL2xpbnV4L3RlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMx OWNjNjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdGVlLmgKQEAgLTAs MCArMSwzODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIExpbmFybyBMaW1pdGVkCisg KgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3Ry aWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX1RFRV9ICisjZGVmaW5lIF9fVEVFX0gKKwor I2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoK KyAqIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIEFQSSBwcm92aWRlZCBieSBhIFRFRSBkcml2ZXIg dG8gdXNlciBzcGFjZS4KKyAqCisgKiBFYWNoIFRFRSBkcml2ZXIgZGVmaW5lcyBhIFRFRSBzcGVj aWZpYyBwcm90b2NvbCB3aGljaCBpcyB1c2VkIGZvciB0aGUKKyAqIGRhdGEgcGFzc2VkIGJhY2sg YW5kIGZvcnRoIHVzaW5nIFRFRV9JT0NfQ01ELgorICovCisKKworLyogSGVscGVycyB0byBtYWtl IHRoZSBpb2N0bCBkZWZpbmVzICovCisjZGVmaW5lIFRFRV9JT0NfTUFHSUMJMHhhNAorI2RlZmlu ZSBURUVfSU9DX0JBU0UJMAorCisvKiBGbGFncyByZWxhdGluZyB0byBzaGFyZWQgbWVtb3J5ICov CisjZGVmaW5lIFRFRV9JT0NUTF9TSE1fTUFQUEVECTB4MQkvKiBtZW1vcnkgbWFwcGVkIGluIG5v cm1hbCB3b3JsZCAqLworI2RlZmluZSBURUVfSU9DVExfU0hNX0RNQV9CVUYJMHgyCS8qIGRtYS1i dWYgaGFuZGxlIG9uIHNoYXJlZCBtZW1vcnkgKi8KKworI2RlZmluZSBURUVfTUFYX0FSR19TSVpF CTEwMjQKKworI2RlZmluZSBURUVfR0VOX0NBUF9HUAkJKDEgPDwgMCkvKiBHbG9iYWwgUGxhdGZv cm0gY29tcGxpYW50IFRFRSAqLworCisvKgorICogVEVFIEltcGxlbWVudGF0aW9uIElECisgKi8K KyNkZWZpbmUgVEVFX0lNUExfSURfT1BURUUJMQorCisvKgorICogT1AtVEVFIHNwZWNpZmljIGNh cGFiaWxpdGllcworICovCisjZGVmaW5lIFRFRV9PUFRFRV9DQVBfVFoJKDEgPDwgMCkKKworLyoq CisgKiBzdHJ1Y3QgdGVlX2lvY3RsX3ZlcnNpb25fZGF0YSAtIFRFRSB2ZXJzaW9uCisgKiBAaW1w bF9pZDoJW291dF0gVEVFIGltcGxlbWVudGF0aW9uIGlkCisgKiBAaW1wbF9jYXBzOglbb3V0XSBJ bXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBjYXBhYmlsaXRpZXMKKyAqIEBnZW5fY2FwczoJW291dF0g R2VuZXJpYyBjYXBhYmlsaXRpZXMsIGRlZmluZWQgYnkgVEVFX0dFTl9DQVBTXyogYWJvdmUKKyAq CisgKiBJZGVudGlmaWVzIHRoZSBURUUgaW1wbGVtZW50YWlvbiwgQGltcGxfaWQgaXMgb25lIG9m IFRFRV9JTVBMX0lEXyogYWJvdmUuCisgKiBAaW1wbF9jYXBzIGlzIGltcGxlbWVudGF0aW9uIHNw ZWNpZmljLCBmb3IgZXhhbXBsZSBURUVfT1BURUVfQ0FQXyoKKyAqIGlzIHZhbGlkIHdoZW4gQGlt cGxfaWQgPT0gVEVFX0lNUExfSURfT1BURUUuCisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfdmVyc2lv bl9kYXRhIHsKKwlfX3UzMiBpbXBsX2lkOworCV9fdTMyIGltcGxfY2FwczsKKwlfX3UzMiBnZW5f Y2FwczsKK307CisvKioKKyAqIFRFRV9JT0NfVkVSU0lPTiAtIHF1ZXJ5IHZlcnNpb24gb2YgVEVF CisgKgorICogVGFrZXMgYSB0ZWVfdmVyc2lvbiBzdHJ1Y3QgYW5kIHJldHVybnMgd2l0aCB0aGUg VEVFIHZlcnNpb24gZGF0YSBmaWxsZWQKKyAqIGluLgorICovCisjZGVmaW5lIFRFRV9JT0NfVkVS U0lPTgkJX0lPUihURUVfSU9DX01BR0lDLCBURUVfSU9DX0JBU0UgKyAwLCBcCisJCQkJICAgICBz dHJ1Y3QgdGVlX2lvY3RsX3ZlcnNpb25fZGF0YSkKKworLyoqCisgKiBzdHJ1Y3QgdGVlX2lvY3Rs X3NobV9hbGxvY19kYXRhIC0gU2hhcmVkIG1lbW9yeSBhbGxvY2F0ZSBhcmd1bWVudAorICogQHNp emU6CVtpbi9vdXRdIFNpemUgb2Ygc2hhcmVkIG1lbW9yeSB0byBhbGxvY2F0ZQorICogQGZsYWdz OglbaW4vb3V0XSBGbGFncyB0by9mcm9tIGFsbG9jYXRpb24uCisgKiBAZmQ6CQlbb3V0XSBkbWFf YnVmIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgc2hhcmVkIG1lbW9yeQorICoKKyAqIFRoZSBmbGFn cyBmaWVsZCBzaG91bGQgY3VycmVudGx5IGJlIHplcm8gYXMgaW5wdXQuIFVwZGF0ZWQgYnkgdGhl IGNhbGwKKyAqIHdpdGggYWN0dWFsIGZsYWdzIGFzIGRlZmluZWQgYnkgVEVFX0lPQ1RMX1NITV8q IGFib3ZlLgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyBhcmd1bWVudCBmb3IgVEVFX0lP Q19TSE1fQUxMT0MgYmVsb3cuCisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfc2htX2FsbG9jX2RhdGEg eworCV9fdTY0IHNpemU7CisJX191MzIgZmxhZ3M7CisJX19zMzIgZmQ7Cit9OworLyoqCisgKiBU RUVfSU9DX1NITV9BTExPQyAtIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBBbGxvY2F0 ZXMgc2hhcmVkIG1lbW9yeSBiZXR3ZWVuIHRoZSB1c2VyIHNwYWNlIHByb2Nlc3MgYW5kIHNlY3Vy ZSBPUy4KKyAqIFRoZSByZXR1cm5lZCBmaWxlIGRlc2NyaXB0b3IgaXMgdXNlZCB0byBtYXAgdGhl IHNoYXJlZCBtZW1vcnkgaW50byB1c2VyCisgKiBzcGFjZS4gVGhlIHNoYXJlZCBtZW1vcnkgaXMg ZnJlZWQgd2hlbiB0aGUgZGVzY3JpcHRvciBpcyBjbG9zZWQgYW5kIHRoZQorICogbWVtb3J5IGlz IHVubWFwcGVkLgorICovCisjZGVmaW5lIFRFRV9JT0NfU0hNX0FMTE9DCV9JT1dSKFRFRV9JT0Nf TUFHSUMsIFRFRV9JT0NfQkFTRSArIDEsIFwKKwkJCQkgICAgIHN0cnVjdCB0ZWVfaW9jdGxfc2ht X2FsbG9jX2RhdGEpCisKKy8qKgorICogc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSAtIFZhcmlh YmxlIHNpemVkIGJ1ZmZlcgorICogQGJ1Zl9wdHI6CVtpbl0gQSBfX3VzZXIgcG9pbnRlciB0byBh IGJ1ZmZlcgorICogQGJ1Zl9sZW46CVtpbl0gTGVuZ3RoIG9mIHRoZSBidWZmZXIgYWJvdmUKKyAq CisgKiBVc2VkIGFzIGFyZ3VtZW50IGZvciBURUVfSU9DX09QRU5fU0VTU0lPTiwgVEVFX0lPQ19J TlZPS0UsCisgKiBURUVfSU9DX1NVUFBMX1JFQ1YsIGFuZCBURUVfSU9DX1NVUFBMX1NFTkQgYmVs b3cuCisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgeworCV9fdTY0IGJ1Zl9wdHI7CisJ X191NjQgYnVmX2xlbjsKK307CisKKworLyoKKyAqIEF0dHJpYnV0ZXMgZm9yIHN0cnVjdCB0ZWVf aW9jdGxfcGFyYW0sIHNlbGVjdHMgZmllbGQgaW4gdGhlIHVuaW9uCisgKi8KKyNkZWZpbmUgVEVF X0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9OT05FCQkwCS8qIHBhcmFtZXRlciBub3QgdXNlZCAqLwor CisvKgorICogVGhlc2UgZGVmaW5lcyB2YWx1ZSBwYXJhbWV0ZXJzIChzdHJ1Y3QgdGVlX2lvY3Rs X3BhcmFtX3ZhbHVlKQorICovCisjZGVmaW5lIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFM VUVfSU5QVVQJMQorI2RlZmluZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX09VVFBV VAkyCisjZGVmaW5lIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5PVVQJMwkvKiBp bnB1dCBhbmQgb3V0cHV0ICovCisKKy8qCisgKiBUaGVzZSBkZWZpbmVzIHNoYXJlZCBtZW1vcnkg cmVmZXJlbmNlIHBhcmFtZXRlcnMgKHN0cnVjdAorICogdGVlX2lvY3RsX3BhcmFtX21lbXJlZikK KyAqLworI2RlZmluZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX01FTVJFRl9JTlBVVAk1Cisj ZGVmaW5lIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX09VVFBVVAk2CisjZGVmaW5l IFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOT1VUCTcJLyogaW5wdXQgYW5kIG91 dHB1dCAqLworCisvKgorICogTWFzayBmb3IgdGhlIHR5cGUgcGFydCBvZiB0aGUgYXR0cmlidXRl LCBsZWF2ZXMgcm9vbSBmb3IgbW9yZSB0eXBlcworICovCisjZGVmaW5lIFRFRV9JT0NUTF9QQVJB TV9BVFRSX1RZUEVfTUFTSwkJMHhmZgorCisvKgorICogTWF0Y2hlcyBURUVDX0xPR0lOXyogaW4g R1AgVEVFIENsaWVudCBBUEkKKyAqIElzIG9ubHkgZGVmaW5lZCBmb3IgR1AgY29tcGxpYW50IFRF RXMKKyAqLworI2RlZmluZSBURUVfSU9DVExfTE9HSU5fUFVCTElDCQkJMAorI2RlZmluZSBURUVf SU9DVExfTE9HSU5fVVNFUgkJCTEKKyNkZWZpbmUgVEVFX0lPQ1RMX0xPR0lOX0dST1VQCQkJMgor I2RlZmluZSBURUVfSU9DVExfTE9HSU5fQVBQTElDQVRJT04JCTQKKyNkZWZpbmUgVEVFX0lPQ1RM X0xPR0lOX1VTRVJfQVBQTElDQVRJT04JNQorI2RlZmluZSBURUVfSU9DVExfTE9HSU5fR1JPVVBf QVBQTElDQVRJT04JNgorCisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jdGxfcGFyYW1fbWVtcmVmIC0g bWVtb3J5IHJlZmVyZW5jZQorICogQHNobV9vZmZzOglPZmZzZXQgaW50byB0aGUgc2hhcmVkIG1l bW9yeSBvYmplY3QKKyAqIEBzaXplOglTaXplIG9mIHRoZSBidWZmZXIKKyAqIEBzaG1fZmQ6CVNo YXJlZCBtZW1vcnkgZmlsZSBkZXNjcmlwdG9yCisgKgorICogU2hhcmVkIG1lbW9yeSBpcyBhbGxv Y2F0ZWQgd2l0aCBURUVfSU9DX1NITV9BTExPQyB3aGljaCByZXR1cm5zIGEgZmlsZQorICogZGVz Y3JpcHRvciBjb25uZWN0ZWQgdG8gdGhlIHNoYXJlZCBtZW1vcnkgb2JqZWN0LiBBIG1lbXJlZiBj YW4gcmVmZXJlbmNlCisgKiBhIHBhcnQgb2YgYSBzaGFyZWQgbWVtb3J5IGJ5IHNwZWNpZnlpbmcg YW4gb2Zmc2V0IChAc2htX29mZnMpIGFuZCBAc2l6ZQorICogb2YgdGhlIG9iamVjdC4gVG8gc3Vw cGx5IHRoZSBlbnRpcmUgc2hhcmVkIG1lbW9yeSBvYmplY3Qgc2V0IEBzaG1fb2ZmcyB0byAwCisg KiBhbmQgQHNpemUgdG8gdGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgc2l6ZSBvZiB0aGUgb2JqZWN0 LgorICovCitzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtX21lbXJlZiB7CisJX191NjQgc2htX29mZnM7 CisJX191NjQgc2l6ZTsKKwlfX3M2NCBzaG1fZmQ7Cit9OworCisvKioKKyAqIHN0cnVjdCB0ZWVf aW9jdGxfcGFyYW1fdmFsdWUgLSB2YWx1ZXMKKyAqIEBhOiBmaXJzdCB2YWx1ZQorICogQGI6IHNl Y29uZCB2YWx1ZQorICogQGM6IHRoaXJkIHZhbHVlCisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfcGFy YW1fdmFsdWUgeworCV9fdTY0IGE7CisJX191NjQgYjsKKwlfX3U2NCBjOworfTsKKworLyoqCisg KiBzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIC0gcGFyYW1ldGVyCisgKiBAYXR0cjogYXR0cmlidXRl cworICogQG1lbXJlZjogYSBtZW1vcnkgcmVmZXJlbmNlCisgKiBAdmFsdWU6IGEgdmFsdWUKKyAq CisgKiBAYXR0ciAmIFRFRV9QQVJBTV9BVFRSX1RZUEVfTUFTSyBpbmRpY2F0ZXMgaWYgbWVtcmVm IG9yIHZhbHVlIGlzIHVzZWQgaW4KKyAqIHRoZSB1bmlvbi4gVEVFX1BBUkFNX0FUVFJfVFlQRV9W QUxVRV8qIGluZGljYXRlcyB2YWx1ZSBhbmQKKyAqIFRFRV9QQVJBTV9BVFRSX1RZUEVfTUVNUkVG XyogaW5kaWNhdGVzIG1lbXJlZi4gVEVFX1BBUkFNX0FUVFJfVFlQRV9OT05FCisgKiBpbmRpY2F0 ZXMgdGhhdCBub25lIG9mIHRoZSBtZW1iZXJzIGFyZSB1c2VkLgorICovCitzdHJ1Y3QgdGVlX2lv Y3RsX3BhcmFtIHsKKwlfX3U2NCBhdHRyOworCXVuaW9uIHsKKwkJc3RydWN0IHRlZV9pb2N0bF9w YXJhbV9tZW1yZWYgbWVtcmVmOworCQlzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtX3ZhbHVlIHZhbHVl OworCX0gdTsKK307CisKKyNkZWZpbmUgVEVFX0lPQ1RMX1VVSURfTEVOCQkxNgorCisvKioKKyAq IHN0cnVjdCB0ZWVfaW9jdGxfb3Blbl9zZXNzaW9uX2FyZyAtIE9wZW4gc2Vzc2lvbiBhcmd1bWVu dAorICogQHV1aWQ6CVtpbl0gVVVJRCBvZiB0aGUgVHJ1c3RlZCBBcHBsaWNhdGlvbgorICogQGNs bnRfdXVpZDoJW2luXSBVVUlEIG9mIGNsaWVudAorICogQGNsbnRfbG9naW46CVtpbl0gTG9naW4g Y2xhc3Mgb2YgY2xpZW50LCBURUVfTE9HSU5fKiBhYm92ZQorICogQGNhbmNlbF9pZDoJW2luXSBD YW5jZWxsYXRpb24gaWQsIGEgdW5pcXVlIHZhbHVlIHRvIGlkZW50aWZ5IHRoaXMgcmVxdWVzdAor ICogQHNlc3Npb246CVtvdXRdIFNlc3Npb24gaWQKKyAqIEByZXQ6CVtvdXRdIHJldHVybiB2YWx1 ZQorICogQHJldF9vcmlnaW4JW291dF0gb3JpZ2luIG9mIHRoZSByZXR1cm4gdmFsdWUKKyAqIEBu dW1fcGFyYW1zCVtpbl0gbnVtYmVyIG9mIHBhcmFtZXRlcnMgZm9sbG93aW5nIHRoaXMgc3RydWN0 CisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfb3Blbl9zZXNzaW9uX2FyZyB7CisJX191OCB1dWlkW1RF RV9JT0NUTF9VVUlEX0xFTl07CisJX191OCBjbG50X3V1aWRbVEVFX0lPQ1RMX1VVSURfTEVOXTsK KwlfX3UzMiBjbG50X2xvZ2luOworCV9fdTMyIGNhbmNlbF9pZDsKKwlfX3UzMiBzZXNzaW9uOwor CV9fdTMyIHJldDsKKwlfX3UzMiByZXRfb3JpZ2luOworCV9fdTMyIG51bV9wYXJhbXM7CisJLyoK KwkgKiB0aGlzIHN0cnVjdCBpcyA4IGJ5dGUgYWxpZ25lZCBzaW5jZSB0aGUgJ3N0cnVjdCB0ZWVf aW9jdGxfcGFyYW0nCisJICogd2hpY2ggZm9sbG93cyByZXF1aXJlcyA4IGJ5dGUgYWxpZ25tZW50 LgorCSAqCisJICogQ29tbWVudGVkIG91dCBlbGVtZW50IHVzZWQgdG8gdmlzdWFsaXplIHRoZSBs YXlvdXQgZHluYW1pYyBwYXJ0CisJICogb2YgdGhlIHN0cnVjdC4gVGhpcyBmaWVsZCBpcyBub3Qg YXZhaWxhYmxlIGF0IGFsbCBpZgorCSAqIG51bV9wYXJhbXMgPT0gMC4KKwkgKgorCSAqIHN0cnVj dCB0ZWVfaW9jdGxfcGFyYW0gcGFyYW1zW251bV9wYXJhbXNdOworCSAqLworfSBfX2FsaWduZWQo OCk7CisKKy8qKgorICogVEVFX0lPQ19PUEVOX1NFU1NJT04gLSBvcGVucyBhIHNlc3Npb24gdG8g YSBUcnVzdGVkIEFwcGxpY2F0aW9uCisgKgorICogVGFrZXMgYSBzdHJ1Y3QgdGVlX2lvY3RsX2J1 Zl9kYXRhIHdoaWNoIGNvbnRhaW5zIGEgc3RydWN0CisgKiB0ZWVfaW9jdGxfb3Blbl9zZXNzaW9u X2FyZyBmb2xsb3dlZCBieSBhbnkgYXJyYXkgb2Ygc3RydWN0CisgKiB0ZWVfaW9jdGxfcGFyYW0K KyAqLworI2RlZmluZSBURUVfSU9DX09QRU5fU0VTU0lPTglfSU9SKFRFRV9JT0NfTUFHSUMsIFRF RV9JT0NfQkFTRSArIDIsIFwKKwkJCQkgICAgIHN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEpCisK Ky8qKgorICogc3RydWN0IHRlZV9pb2N0bF9pbnZva2VfZnVuY19hcmcgLSBJbnZva2VzIGEgZnVu Y3Rpb24gaW4gYSBUcnVzdGVkIEFwcGxpY2F0aW9uCisgKiBAZnVuYzoJW2luXSBUcnVzdGVkIEFw cGxpY2F0aW9uIGZ1bmN0aW9uLCBzcGVjaWZpYyB0byB0aGUgVEEKKyAqIEBzZXNzaW9uOglbaW5d IFNlc3Npb24gaWQKKyAqIEBjYW5jZWxfaWQ6CVtpbl0gQ2FuY2VsbGF0aW9uIGlkLCBhIHVuaXF1 ZSB2YWx1ZSB0byBpZGVudGlmeSB0aGlzIHJlcXVlc3QKKyAqIEByZXQ6CVtvdXRdIHJldHVybiB2 YWx1ZQorICogQHJldF9vcmlnaW4JW291dF0gb3JpZ2luIG9mIHRoZSByZXR1cm4gdmFsdWUKKyAq IEBudW1fcGFyYW1zCVtpbl0gbnVtYmVyIG9mIHBhcmFtZXRlcnMgZm9sbG93aW5nIHRoaXMgc3Ry dWN0CisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfaW52b2tlX2FyZyB7CisJX191MzIgZnVuYzsKKwlf X3UzMiBzZXNzaW9uOworCV9fdTMyIGNhbmNlbF9pZDsKKwlfX3UzMiByZXQ7CisJX191MzIgcmV0 X29yaWdpbjsKKwlfX3UzMiBudW1fcGFyYW1zOworCS8qCisJICogdGhpcyBzdHJ1Y3QgaXMgOCBi eXRlIGFsaWduZWQgc2luY2UgdGhlICdzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtJworCSAqIHdoaWNo IGZvbGxvd3MgcmVxdWlyZXMgOCBieXRlIGFsaWdubWVudC4KKwkgKgorCSAqIENvbW1lbnRlZCBv dXQgZWxlbWVudCB1c2VkIHRvIHZpc3VhbGl6ZSB0aGUgbGF5b3V0IGR5bmFtaWMgcGFydAorCSAq IG9mIHRoZSBzdHJ1Y3QuIFRoaXMgZmllbGQgaXMgbm90IGF2YWlsYWJsZSBhdCBhbGwgaWYKKwkg KiBudW1fcGFyYW1zID09IDAuCisJICoKKwkgKiBzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIHBhcmFt c1tudW1fcGFyYW1zXTsKKwkgKi8KK30gX19hbGlnbmVkKDgpOworCisvKioKKyAqIFRFRV9JT0Nf SU5WT0tFIC0gSW52b2tlcyBhIGZ1bmN0aW9uIGluIGEgVHJ1c3RlZCBBcHBsaWNhdGlvbgorICoK KyAqIFRha2VzIGEgc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSB3aGljaCBjb250YWlucyBhIHN0 cnVjdAorICogdGVlX2ludm9rZV9mdW5jX2FyZyBmb2xsb3dlZCBieSBhbnkgYXJyYXkgb2Ygc3Ry dWN0IHRlZV9wYXJhbQorICovCisjZGVmaW5lIFRFRV9JT0NfSU5WT0tFCQlfSU9SKFRFRV9JT0Nf TUFHSUMsIFRFRV9JT0NfQkFTRSArIDMsIFwKKwkJCQkgICAgIHN0cnVjdCB0ZWVfaW9jdGxfYnVm X2RhdGEpCisKKy8qKgorICogc3RydWN0IHRlZV9pb2N0bF9jYW5jZWxfYXJnIC0gQ2FuY2VscyBh biBvcGVuIHNlc3Npb24gb3IgaW52b2tlIGlvY3RsCisgKiBAY2FuY2VsX2lkOglbaW5dIENhbmNl bGxhdGlvbiBpZCwgYSB1bmlxdWUgdmFsdWUgdG8gaWRlbnRpZnkgdGhpcyByZXF1ZXN0CisgKiBA c2Vzc2lvbjoJW2luXSBTZXNzaW9uIGlkLCBpZiB0aGUgc2Vzc2lvbiBpcyBvcGVuZWQsIGVsc2Ug c2V0IHRvIDAKKyAqLworc3RydWN0IHRlZV9pb2N0bF9jYW5jZWxfYXJnIHsKKwlfX3UzMiBjYW5j ZWxfaWQ7CisJX191MzIgc2Vzc2lvbjsKK307CisvKioKKyAqIFRFRV9JT0NfQ0FOQ0VMIC0gQ2Fu Y2VscyBhbiBvcGVuIHNlc3Npb24gb3IgaW52b2tlCisgKi8KKyNkZWZpbmUgVEVFX0lPQ19DQU5D RUwJCV9JT1IoVEVFX0lPQ19NQUdJQywgVEVFX0lPQ19CQVNFICsgNCwgXAorCQkJCSAgICAgc3Ry dWN0IHRlZV9pb2N0bF9jYW5jZWxfYXJnKQorCisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jdGxfY2xv c2Vfc2Vzc2lvbl9hcmcgLSBDbG9zZXMgYW4gb3BlbiBzZXNzaW9uCisgKiBAc2Vzc2lvbjoJW2lu XSBTZXNzaW9uIGlkCisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfY2xvc2Vfc2Vzc2lvbl9hcmcgewor CV9fdTMyIHNlc3Npb247Cit9OworLyoqCisgKiBURUVfSU9DX0NMT1NFX1NFU1NJT04gLSBDbG9z ZXMgYSBzZXNzaW9uCisgKi8KKyNkZWZpbmUgVEVFX0lPQ19DTE9TRV9TRVNTSU9OCV9JT1IoVEVF X0lPQ19NQUdJQywgVEVFX0lPQ19CQVNFICsgNSwgXAorCQkJCSAgICAgc3RydWN0IHRlZV9pb2N0 bF9jbG9zZV9zZXNzaW9uX2FyZykKKworLyoqCisgKiBzdHJ1Y3QgdGVlX2lvY2xfc3VwcF9yZWN2 X2FyZyAtIFJlY2VpdmUgYSByZXF1ZXN0IGZvciBhIHN1cHBsaWNhbnQgZnVuY3Rpb24KKyAqIEBm dW5jOglbaW5dIHN1cHBsaWNhbnQgZnVuY3Rpb24KKyAqIEBudW1fcGFyYW1zCVtpbi9vdXRdIG51 bWJlciBvZiBwYXJhbWV0ZXJzIGZvbGxvd2luZyB0aGlzIHN0cnVjdAorICoKKyAqIEBudW1fcGFy YW1zIGlzIHRoZSBudW1iZXIgb2YgcGFyYW1zIHRoYXQgdGVlLXN1cHBsaWNhbnQgaGFzIHJvb20g dG8KKyAqIHJlY2VpdmUgd2hlbiBpbnB1dCwgQG51bV9wYXJhbXMgaXMgdGhlIG51bWJlciBvZiBh Y3R1YWwgcGFyYW1zCisgKiB0ZWUtc3VwcGxpY2FudCByZWNlaXZlcyB3aGVuIG91dHB1dC4KKyAq Lworc3RydWN0IHRlZV9pb2NsX3N1cHBfcmVjdl9hcmcgeworCV9fdTMyIGZ1bmM7CisJX191MzIg bnVtX3BhcmFtczsKKwkvKgorCSAqIHRoaXMgc3RydWN0IGlzIDggYnl0ZSBhbGlnbmVkIHNpbmNl IHRoZSAnc3RydWN0IHRlZV9pb2N0bF9wYXJhbScKKwkgKiB3aGljaCBmb2xsb3dzIHJlcXVpcmVz IDggYnl0ZSBhbGlnbm1lbnQuCisJICoKKwkgKiBDb21tZW50ZWQgb3V0IGVsZW1lbnQgdXNlZCB0 byB2aXN1YWxpemUgdGhlIGxheW91dCBkeW5hbWljIHBhcnQKKwkgKiBvZiB0aGUgc3RydWN0LiBU aGlzIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUgYXQgYWxsIGlmCisJICogbnVtX3BhcmFtcyA9PSAw LgorCSAqCisJICogc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBwYXJhbXNbbnVtX3BhcmFtc107CisJ ICovCit9IF9fYWxpZ25lZCg4KTsKKy8qKgorICogVEVFX0lPQ19TVVBQTF9SRUNWIC0gUmVjZWl2 ZSBhIHJlcXVlc3QgZm9yIGEgc3VwcGxpY2FudCBmdW5jdGlvbgorICoKKyAqIFRha2VzIGEgc3Ry dWN0IHRlZV9pb2N0bF9idWZfZGF0YSB3aGljaCBjb250YWlucyBhIHN0cnVjdAorICogdGVlX2lv Y2xfc3VwcF9yZWN2X2FyZyBmb2xsb3dlZCBieSBhbnkgYXJyYXkgb2Ygc3RydWN0IHRlZV9wYXJh bQorICovCisjZGVmaW5lIFRFRV9JT0NfU1VQUExfUkVDVglfSU9SKFRFRV9JT0NfTUFHSUMsIFRF RV9JT0NfQkFTRSArIDYsIFwKKwkJCQkgICAgIHN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEpCisK KworLyoqCisgKiBzdHJ1Y3QgdGVlX2lvY2xfc3VwcF9zZW5kX2FyZyAtIFNlbmQgYSByZXNwb25z ZSB0byBhIHJlY2VpdmVkIHJlcXVlc3QKKyAqIEByZXQ6CVtvdXRdIHJldHVybiB2YWx1ZQorICog QG51bV9wYXJhbXMJW2luXSBudW1iZXIgb2YgcGFyYW1ldGVycyBmb2xsb3dpbmcgdGhpcyBzdHJ1 Y3QKKyAqLworc3RydWN0IHRlZV9pb2NsX3N1cHBfc2VuZF9hcmcgeworCV9fdTMyIHJldDsKKwlf X3UzMiBudW1fcGFyYW1zOworCS8qCisJICogdGhpcyBzdHJ1Y3QgaXMgOCBieXRlIGFsaWduZWQg c2luY2UgdGhlICdzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtJworCSAqIHdoaWNoIGZvbGxvd3MgcmVx dWlyZXMgOCBieXRlIGFsaWdubWVudC4KKwkgKgorCSAqIENvbW1lbnRlZCBvdXQgZWxlbWVudCB1 c2VkIHRvIHZpc3VhbGl6ZSB0aGUgbGF5b3V0IGR5bmFtaWMgcGFydAorCSAqIG9mIHRoZSBzdHJ1 Y3QuIFRoaXMgZmllbGQgaXMgbm90IGF2YWlsYWJsZSBhdCBhbGwgaWYKKwkgKiBudW1fcGFyYW1z ID09IDAuCisJICoKKwkgKiBzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIHBhcmFtc1tudW1fcGFyYW1z XTsKKwkgKi8KK30gX19hbGlnbmVkKDgpOworLyoqCisgKiBURUVfSU9DX1NVUFBMX1NFTkQgLSBS ZWNlaXZlIGEgcmVxdWVzdCBmb3IgYSBzdXBwbGljYW50IGZ1bmN0aW9uCisgKgorICogVGFrZXMg YSBzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIHdoaWNoIGNvbnRhaW5zIGEgc3RydWN0CisgKiB0 ZWVfaW9jbF9zdXBwX3NlbmRfYXJnIGZvbGxvd2VkIGJ5IGFueSBhcnJheSBvZiBzdHJ1Y3QgdGVl X3BhcmFtCisgKi8KKyNkZWZpbmUgVEVFX0lPQ19TVVBQTF9TRU5ECV9JT1IoVEVFX0lPQ19NQUdJ QywgVEVFX0lPQ19CQVNFICsgNywgXAorCQkJCSAgICAgc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0 YSkKKworCisvKgorICogRml2ZSBzeXNjYWxscyBhcmUgdXNlZCB3aGVuIGNvbW11bmljYXRpbmcg d2l0aCB0aGUgVEVFIGRyaXZlci4KKyAqIG9wZW4oKTogb3BlbnMgdGhlIGRldmljZSBhc3NvY2lh dGVkIHdpdGggdGhlIGRyaXZlcgorICogaW9jdGwoKTogYXMgZGVzY3JpYmVkIGFib3ZlIG9wZXJh dGluZyBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yIGZyb20gb3BlbigpCisgKiBjbG9zZSgpOiB0d28g Y2FzZXMKKyAqICAgLSBjbG9zZXMgdGhlIGRldmljZSBmaWxlIGRlc2NyaXB0b3IKKyAqICAgLSBj bG9zZXMgYSBmaWxlIGRlc2NyaXB0b3IgY29ubmVjdGVkIHRvIGFsbG9jYXRlZCBzaGFyZWQgbWVt b3J5CisgKiBtbWFwKCk6IG1hcHMgc2hhcmVkIG1lbW9yeSBpbnRvIHVzZXIgc3BhY2UgdXNpbmcg aW5mb3JtYXRpb24gZnJvbSBzdHJ1Y3QKKyAqCSAgIHRlZV9pb2N0bF9zaG1fYWxsb2NfZGF0YQor ICogbXVubWFwKCk6IHVubWFwcyBwcmV2aW91c2x5IHNoYXJlZCBtZW1vcnkKKyAqLworCisjZW5k aWYgLypfX1RFRV9IKi8KLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=