From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jens Wiklander Subject: [PATCH v15 2/5] tee: generic TEE subsystem Date: Sat, 28 Jan 2017 13:19:41 +0100 Message-ID: <1485605984-30064-3-git-send-email-jens.wiklander@linaro.org> References: <1485605984-30064-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: <1485605984-30064-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: Greg Kroah-Hartman , Arnd Bergmann , Olof Johansson , Andrew Morton Cc: Mark Rutland , Nishanth Menon , Benjamin GAIGNARD , Will Deacon , Patrice CHOTARD , Christophe PRIOUZEAU , Franck ALBESA , javier@javigon.com, Loic PALLARDY , Michal Simek , Wei Xu , Jason Gunthorpe , devicetree@vger.kernel.org, scott.branden@broadcom.com, jean-michel.delorme@st.com, broonie@kernel.org, Al Viro , linux-arm-kernel@lists.infradead.org, Etienne CARRIERE , emmanuel.michel@st.com, Eric FINCO , linux-kernel@vger.kernel.org, "Andrew F . Davis" , 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+CgpBY2tlZC1ieTogQW5kcmVhcyBEYW5uZW5iZXJn IDxkYW5uZW5iZXJnQHRpLmNvbT4KVGVzdGVkLWJ5OiBKZXJvbWUgRm9yaXNzaWVyIDxqZXJvbWUu Zm9yaXNzaWVyQGxpbmFyby5vcmc+IChIaUtleSkKVGVzdGVkLWJ5OiBWb2xvZHlteXIgQmFiY2h1 ayA8dmxhZC5iYWJjaHVrQGdtYWlsLmNvbT4gKFJDQVIgSDMpClRlc3RlZC1ieTogU2NvdHQgQnJh bmRlbiA8c2NvdHQuYnJhbmRlbkBicm9hZGNvbS5jb20+ClJldmlld2VkLWJ5OiBKYXZpZXIgR29u esOhbGV6IDxqYXZpZXJAamF2aWdvbi5jb20+ClNpZ25lZC1vZmYtYnk6IEplbnMgV2lrbGFuZGVy IDxqZW5zLndpa2xhbmRlckBsaW5hcm8ub3JnPgotLS0KIERvY3VtZW50YXRpb24vaW9jdGwvaW9j dGwtbnVtYmVyLnR4dCB8ICAgMSArCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDcgKwogZHJpdmVycy9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsK IGRyaXZlcnMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL3Rl ZS9LY29uZmlnICAgICAgICAgICAgICAgICAgfCAgIDggKwogZHJpdmVycy90ZWUvTWFrZWZpbGUg ICAgICAgICAgICAgICAgIHwgICA0ICsKIGRyaXZlcnMvdGVlL3RlZV9jb3JlLmMgICAgICAgICAg ICAgICB8IDg5MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy90 ZWUvdGVlX3ByaXZhdGUuaCAgICAgICAgICAgIHwgMTI5ICsrKysrCiBkcml2ZXJzL3RlZS90ZWVf c2htLmMgICAgICAgICAgICAgICAgfCAzNTcgKysrKysrKysrKysrKysKIGRyaXZlcnMvdGVlL3Rl ZV9zaG1fcG9vbC5jICAgICAgICAgICB8IDE1NiArKysrKysKIGluY2x1ZGUvbGludXgvdGVlX2Ry di5oICAgICAgICAgICAgICB8IDI3NiArKysrKysrKysrKwogaW5jbHVkZS91YXBpL2xpbnV4L3Rl ZS5oICAgICAgICAgICAgIHwgMzQ2ICsrKysrKysrKysrKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCAy MTc4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3RlZS9LY29uZmln CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3RlZS90ZWVfY29yZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90 ZWUvdGVlX3ByaXZhdGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdGVlL3RlZV9zaG0u YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdGVlL3RlZV9zaG1fcG9vbC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC90ZWVfZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBp bmNsdWRlL3VhcGkvbGludXgvdGVlLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lvY3Rs L2lvY3RsLW51bWJlci50eHQgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQK aW5kZXggODFjN2YyYmI3ZGFmLi5lZmIzOGRhNzAwYzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRp b24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3Rs LW51bWJlci50eHQKQEAgLTMwOCw2ICszMDgsNyBAQCBDb2RlICBTZXEjKGhleCkJSW5jbHVkZSBG aWxlCQlDb21tZW50cwogMHhBMwk4MC04RglQb3J0IEFDTAkJaW4gZGV2ZWxvcG1lbnQ6CiAJCQkJ CTxtYWlsdG86dGxld2lzQG1pbmRzcHJpbmcuY29tPgogMHhBMwk5MC05RglsaW51eC9kdGxrLmgK KzB4QTQJMDAtMUYJdWFwaS9saW51eC90ZWUuaAlHZW5lcmljIFRFRSBzdWJzeXN0ZW0KIDB4QUEJ MDAtM0YJbGludXgvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oCiAweEFCCTAwLTFGCWxpbnV4L25i ZC5oCiAweEFDCTAwLTFGCWxpbnV4L3Jhdy5oCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01B SU5UQUlORVJTCmluZGV4IDI2ZWRkODMyYzY0ZS4uMjhlZDk1MTY2ZTQwIDEwMDY0NAotLS0gYS9N QUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTA4OTEsNiArMTA4OTEsMTMgQEAgRjoJ ZHJpdmVycy9od3RyYWNpbmcvc3RtLwogRjoJaW5jbHVkZS9saW51eC9zdG0uaAogRjoJaW5jbHVk ZS91YXBpL2xpbnV4L3N0bS5oCiAKK1RFRSBTVUJTWVNURU0KK006CUplbnMgV2lrbGFuZGVyIDxq ZW5zLndpa2xhbmRlckBsaW5hcm8ub3JnPgorUzoJTWFpbnRhaW5lZAorRjoJaW5jbHVkZS9saW51 eC90ZWVfZHJ2LmgKK0Y6CWluY2x1ZGUvdWFwaS9saW51eC90ZWUuaAorRjoJZHJpdmVycy90ZWUv CisKIFRIVU5ERVJCT0xUIERSSVZFUgogTToJQW5kcmVhcyBOb2V2ZXIgPGFuZHJlYXMubm9ldmVy QGdtYWlsLmNvbT4KIFM6CU1haW50YWluZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvS2NvbmZpZyBi L2RyaXZlcnMvS2NvbmZpZwppbmRleCBlMWUyMDY2Y2VjZGIuLmRlNTgxYzEzZWM5YSAxMDA2NDQK LS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtMjAyLDQgKzIw Miw2IEBAIHNvdXJjZSAiZHJpdmVycy9od3RyYWNpbmcvaW50ZWxfdGgvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2ZwZ2EvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3RlZS9LY29uZmln IgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtl ZmlsZQppbmRleCAwNjAwMjZhMDJmNTkuLmE0MGEwYjgzNzZlNyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0xNzMsMyArMTczLDQgQEAgb2Jq LSQoQ09ORklHX1NUTSkJCSs9IGh3dHJhY2luZy9zdG0vCiBvYmotJChDT05GSUdfQU5EUk9JRCkJ CSs9IGFuZHJvaWQvCiBvYmotJChDT05GSUdfTlZNRU0pCQkrPSBudm1lbS8KIG9iai0kKENPTkZJ R19GUEdBKQkJKz0gZnBnYS8KK29iai0kKENPTkZJR19URUUpCQkrPSB0ZWUvCmRpZmYgLS1naXQg YS9kcml2ZXJzL3RlZS9LY29uZmlnIGIvZHJpdmVycy90ZWUvS2NvbmZpZwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUwYzI0NGVhZDQ2ZAotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvdGVlL0tjb25maWcKQEAgLTAsMCArMSw4IEBACisjIEdlbmVyaWMgVHJ1c3Rl ZCBFeGVjdXRpb24gRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvbgorY29uZmlnIFRFRQorCXRyaXN0 YXRlICJUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCBzdXBwb3J0IgorCXNlbGVjdCBETUFf U0hBUkVEX0JVRkZFUgorCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUgorCWhlbHAKKwkgIFRoaXMg aW1wbGVtZW50cyBhIGdlbmVyaWMgaW50ZXJmYWNlIHRvd2FyZHMgYSBUcnVzdGVkIEV4ZWN1dGlv bgorCSAgRW52aXJvbm1lbnQgKFRFRSkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9NYWtlZmls ZSBiL2RyaXZlcnMvdGVlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uZWM2NDA0N2E4NmUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90ZWUvTWFr ZWZpbGUKQEAgLTAsMCArMSw0IEBACitvYmotJChDT05GSUdfVEVFKSArPSB0ZWUubwordGVlLW9i anMgKz0gdGVlX2NvcmUubwordGVlLW9ianMgKz0gdGVlX3NobS5vCit0ZWUtb2JqcyArPSB0ZWVf c2htX3Bvb2wubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWUvdGVlX2NvcmUuYyBiL2RyaXZlcnMv dGVlL3RlZV9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5j ZjM2NTg5OGY5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS90ZWVfY29yZS5jCkBA IC0wLDAgKzEsODkxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIExpbmFybyBM aW1pdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3Bp ZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSAiJXM6ICIg Zm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4 L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2lu Y2x1ZGUgPGxpbnV4L3RlZV9kcnYuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5j bHVkZSAidGVlX3ByaXZhdGUuaCIKKworI2RlZmluZSBURUVfTlVNX0RFVklDRVMJMzIKKworI2Rl ZmluZSBURUVfSU9DVExfUEFSQU1fU0laRSh4KSAoc2l6ZW9mKHN0cnVjdCB0ZWVfcGFyYW0pICog KHgpKQorCisvKgorICogVW5wcml2aWxlZ2VkIGRldmljZXMgaW4gdGhlIGxvd2VyIGhhbGYgcmFu Z2UgYW5kIHByaXZpbGVnZWQgZGV2aWNlcyBpbgorICogdGhlIHVwcGVyIGhhbGYgcmFuZ2UuCisg Ki8KK3N0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfbWFzaywgVEVFX05VTV9ERVZJQ0VTKTsKK3N0 YXRpYyBERUZJTkVfU1BJTkxPQ0soZHJpdmVyX2xvY2spOworCitzdGF0aWMgc3RydWN0IGNsYXNz ICp0ZWVfY2xhc3M7CitzdGF0aWMgZGV2X3QgdGVlX2RldnQ7CisKK3N0YXRpYyBpbnQgdGVlX29w ZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJjOwor CXN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXY7CisJc3RydWN0IHRlZV9jb250ZXh0ICpjdHg7CisK Kwl0ZWVkZXYgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IHRlZV9kZXZpY2Us IGNkZXYpOworCWlmICghdGVlX2RldmljZV9nZXQodGVlZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwljdHggPSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgp IHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwljdHgtPnRlZWRldiA9IHRl ZWRldjsKKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5saXN0X3NobSk7CisJZmlscC0+cHJpdmF0ZV9k YXRhID0gY3R4OworCXJjID0gdGVlZGV2LT5kZXNjLT5vcHMtPm9wZW4oY3R4KTsKKwlpZiAocmMp CisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CitlcnI6CisJa2ZyZWUoY3R4KTsKKwl0ZWVfZGV2 aWNlX3B1dCh0ZWVkZXYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB0ZWVfcmVsZWFz ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdGVl X2NvbnRleHQgKmN0eCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdGVlX2RldmljZSAq dGVlZGV2ID0gY3R4LT50ZWVkZXY7CisJc3RydWN0IHRlZV9zaG0gKnNobTsKKworCWN0eC0+dGVl ZGV2LT5kZXNjLT5vcHMtPnJlbGVhc2UoY3R4KTsKKwltdXRleF9sb2NrKCZjdHgtPnRlZWRldi0+ bXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2htLCAmY3R4LT5saXN0X3NobSwgbGluaykK KwkJc2htLT5jdHggPSBOVUxMOworCW11dGV4X3VubG9jaygmY3R4LT50ZWVkZXYtPm11dGV4KTsK KwlrZnJlZShjdHgpOworCXRlZV9kZXZpY2VfcHV0KHRlZWRldik7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgdGVlX2lvY3RsX3ZlcnNpb24oc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsCisJ CQkgICAgIHN0cnVjdCB0ZWVfaW9jdGxfdmVyc2lvbl9kYXRhIF9fdXNlciAqdXZlcnMpCit7CisJ c3RydWN0IHRlZV9pb2N0bF92ZXJzaW9uX2RhdGEgdmVyczsKKworCWN0eC0+dGVlZGV2LT5kZXNj LT5vcHMtPmdldF92ZXJzaW9uKGN0eC0+dGVlZGV2LCAmdmVycyk7CisJaWYgKGNvcHlfdG9fdXNl cih1dmVycywgJnZlcnMsIHNpemVvZih2ZXJzKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IHRlZV9pb2N0bF9zaG1fYWxsb2Moc3RydWN0IHRlZV9jb250 ZXh0ICpjdHgsCisJCQkgICAgICAgc3RydWN0IHRlZV9pb2N0bF9zaG1fYWxsb2NfZGF0YSBfX3Vz ZXIgKnVkYXRhKQoreworCWxvbmcgcmV0OworCXN0cnVjdCB0ZWVfaW9jdGxfc2htX2FsbG9jX2Rh dGEgZGF0YTsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZk YXRhLCB1ZGF0YSwgc2l6ZW9mKGRhdGEpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBDdXJy ZW50bHkgbm8gaW5wdXQgZmxhZ3MgYXJlIHN1cHBvcnRlZCAqLworCWlmIChkYXRhLmZsYWdzKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEuaWQgPSAtMTsKKworCXNobSA9IHRlZV9zaG1fYWxs b2MoY3R4LCBkYXRhLnNpemUsIFRFRV9TSE1fTUFQUEVEIHwgVEVFX1NITV9ETUFfQlVGKTsKKwlp ZiAoSVNfRVJSKHNobSkpCisJCXJldHVybiBQVFJfRVJSKHNobSk7CisKKwlkYXRhLmlkID0gc2ht LT5pZDsKKwlkYXRhLmZsYWdzID0gc2htLT5mbGFnczsKKwlkYXRhLnNpemUgPSBzaG0tPnNpemU7 CisKKwlpZiAoY29weV90b191c2VyKHVkYXRhLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkKKwkJcmV0 ID0gLUVGQVVMVDsKKwllbHNlCisJCXJldCA9IHRlZV9zaG1fZ2V0X2ZkKHNobSk7CisKKwkvKgor CSAqIFdoZW4gdXNlciBzcGFjZSBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvciB0aGUgc2hhcmVk IG1lbW9yeQorCSAqIHNob3VsZCBiZSBmcmVlZCBvciBpZiB0ZWVfc2htX2dldF9mZCgpIGZhaWxl ZCB0aGVuIGl0IHdpbGwKKwkgKiBiZSBmcmVlZCBpbW1lZGlhdGVseS4KKwkgKi8KKwl0ZWVfc2ht X3B1dChzaG0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFyYW1zX2Zyb21fdXNl cihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IHRlZV9wYXJhbSAqcGFyYW1zLAorCQkJ ICAgIHNpemVfdCBudW1fcGFyYW1zLAorCQkJICAgIHN0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gX191 c2VyICp1cGFyYW1zKQoreworCXNpemVfdCBuOworCisJZm9yIChuID0gMDsgbiA8IG51bV9wYXJh bXM7IG4rKykgeworCQlzdHJ1Y3QgdGVlX3NobSAqc2htOworCQlzdHJ1Y3QgdGVlX2lvY3RsX3Bh cmFtIGlwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmaXAsIHVwYXJhbXMgKyBuLCBzaXplb2Yo aXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCS8qIEFsbCB1bnVzZWQgYXR0cmlidXRlIGJp dHMgaGFzIHRvIGJlIHplcm8gKi8KKwkJaWYgKGlwLmF0dHIgJiB+VEVFX0lPQ1RMX1BBUkFNX0FU VFJfVFlQRV9NQVNLKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcGFyYW1zW25dLmF0dHIgPSBp cC5hdHRyOworCQlzd2l0Y2ggKGlwLmF0dHIpIHsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRU Ul9UWVBFX05PTkU6CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9PVVRQ VVQ6CisJCQlicmVhazsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lO UFVUOgorCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5PVVQ6CisJCQlw YXJhbXNbbl0udS52YWx1ZS5hID0gaXAuYTsKKwkJCXBhcmFtc1tuXS51LnZhbHVlLmIgPSBpcC5i OworCQkJcGFyYW1zW25dLnUudmFsdWUuYyA9IGlwLmM7CisJCQlicmVhazsKKwkJY2FzZSBURUVf SU9DVExfUEFSQU1fQVRUUl9UWVBFX01FTVJFRl9JTlBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFS QU1fQVRUUl9UWVBFX01FTVJFRl9PVVRQVVQ6CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJf VFlQRV9NRU1SRUZfSU5PVVQ6CisJCQkvKgorCQkJICogSWYgd2UgZmFpbCB0byBnZXQgYSBwb2lu dGVyIHRvIGEgc2hhcmVkIG1lbW9yeQorCQkJICogb2JqZWN0IChhbmQgaW5jcmVhc2UgdGhlIHJl ZiBjb3VudCkgZnJvbSBhbgorCQkJICogaWRlbnRpZmllciB3ZSByZXR1cm4gYW4gZXJyb3IuIEFs bCBwb2ludGVycyB0aGF0CisJCQkgKiBoYXMgYmVlbiBhZGRlZCBpbiBwYXJhbXMgaGF2ZSBhbiBp bmNyZWFzZWQgcmVmCisJCQkgKiBjb3VudC4gSXQncyB0aGUgY2FsbGVycyByZXNwb25pYmlsaXR5 IHRvIGRvCisJCQkgKiB0ZWVfc2htX3B1dCgpIG9uIGFsbCByZXNvbHZlZCBwb2ludGVycy4KKwkJ CSAqLworCQkJc2htID0gdGVlX3NobV9nZXRfZnJvbV9pZChjdHgsIGlwLmMpOworCQkJaWYgKElT X0VSUihzaG0pKQorCQkJCXJldHVybiBQVFJfRVJSKHNobSk7CisKKwkJCXBhcmFtc1tuXS51Lm1l bXJlZi5zaG1fb2ZmcyA9IGlwLmE7CisJCQlwYXJhbXNbbl0udS5tZW1yZWYuc2l6ZSA9IGlwLmI7 CisJCQlwYXJhbXNbbl0udS5tZW1yZWYuc2htID0gc2htOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQkvKiBVbmtub3duIGF0dHJpYnV0ZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyYW1zX3RvX3VzZXIoc3RydWN0IHRlZV9p b2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJhbXMsCisJCQkgIHNpemVfdCBudW1fcGFyYW1zLCBzdHJ1 Y3QgdGVlX3BhcmFtICpwYXJhbXMpCit7CisJc2l6ZV90IG47CisKKwlmb3IgKG4gPSAwOyBuIDwg bnVtX3BhcmFtczsgbisrKSB7CisJCXN0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gX191c2VyICp1cCA9 IHVwYXJhbXMgKyBuOworCQlzdHJ1Y3QgdGVlX3BhcmFtICpwID0gcGFyYW1zICsgbjsKKworCQlz d2l0Y2ggKHAtPmF0dHIpIHsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVF X09VVFBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lOT1VUOgor CQkJaWYgKHB1dF91c2VyKHAtPnUudmFsdWUuYSwgJnVwLT5hKSB8fAorCQkJICAgIHB1dF91c2Vy KHAtPnUudmFsdWUuYiwgJnVwLT5iKSB8fAorCQkJICAgIHB1dF91c2VyKHAtPnUudmFsdWUuYywg JnVwLT5jKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJyZWFrOworCQljYXNlIFRFRV9JT0NU TF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX09VVFBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1f QVRUUl9UWVBFX01FTVJFRl9JTk9VVDoKKwkJCWlmIChwdXRfdXNlcigodTY0KXAtPnUubWVtcmVm LnNpemUsICZ1cC0+YikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWRlZmF1bHQ6CisJCQlicmVh azsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgcGFyYW1faXNfbWVtcmVm KHN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKQoreworCXN3aXRjaCAocGFyYW0tPmF0dHIgJiBURUVf SU9DVExfUEFSQU1fQVRUUl9UWVBFX01BU0spIHsKKwljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRS X1RZUEVfTUVNUkVGX0lOUFVUOgorCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1S RUZfT1VUUFVUOgorCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5PVVQ6 CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0 YXRpYyBpbnQgdGVlX2lvY3RsX29wZW5fc2Vzc2lvbihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwK KwkJCQkgIHN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgX191c2VyICp1YnVmKQoreworCWludCBy YzsKKwlzaXplX3QgbjsKKwlzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIGJ1ZjsKKwlzdHJ1Y3Qg dGVlX2lvY3RsX29wZW5fc2Vzc2lvbl9hcmcgX191c2VyICp1YXJnOworCXN0cnVjdCB0ZWVfaW9j dGxfb3Blbl9zZXNzaW9uX2FyZyBhcmc7CisJc3RydWN0IHRlZV9pb2N0bF9wYXJhbSBfX3VzZXIg KnVwYXJhbXMgPSBOVUxMOworCXN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtcyA9IE5VTEw7CisJYm9v bCBoYXZlX3Nlc3Npb24gPSBmYWxzZTsKKworCWlmICghY3R4LT50ZWVkZXYtPmRlc2MtPm9wcy0+ b3Blbl9zZXNzaW9uKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigm YnVmLCB1YnVmLCBzaXplb2YoYnVmKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGJ1Zi5i dWZfbGVuID4gVEVFX01BWF9BUkdfU0laRSB8fAorCSAgICBidWYuYnVmX2xlbiA8IHNpemVvZihz dHJ1Y3QgdGVlX2lvY3RsX29wZW5fc2Vzc2lvbl9hcmcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXVhcmcgPSB1NjRfdG9fdXNlcl9wdHIoYnVmLmJ1Zl9wdHIpOworCWlmIChjb3B5X2Zyb21fdXNl cigmYXJnLCB1YXJnLCBzaXplb2YoYXJnKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHNp emVvZihhcmcpICsgVEVFX0lPQ1RMX1BBUkFNX1NJWkUoYXJnLm51bV9wYXJhbXMpICE9IGJ1Zi5i dWZfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmcubnVtX3BhcmFtcykgeworCQlw YXJhbXMgPSBrY2FsbG9jKGFyZy5udW1fcGFyYW1zLCBzaXplb2Yoc3RydWN0IHRlZV9wYXJhbSks CisJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoIXBhcmFtcykKKwkJCXJldHVybiAtRU5PTUVNOwor CQl1cGFyYW1zID0gdWFyZy0+cGFyYW1zOworCQlyYyA9IHBhcmFtc19mcm9tX3VzZXIoY3R4LCBw YXJhbXMsIGFyZy5udW1fcGFyYW1zLCB1cGFyYW1zKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7 CisJfQorCisJcmMgPSBjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5vcGVuX3Nlc3Npb24oY3R4LCAm YXJnLCBwYXJhbXMpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisJaGF2ZV9zZXNzaW9uID0gdHJ1 ZTsKKworCWlmIChwdXRfdXNlcihhcmcuc2Vzc2lvbiwgJnVhcmctPnNlc3Npb24pIHx8CisJICAg IHB1dF91c2VyKGFyZy5yZXQsICZ1YXJnLT5yZXQpIHx8CisJICAgIHB1dF91c2VyKGFyZy5yZXRf b3JpZ2luLCAmdWFyZy0+cmV0X29yaWdpbikpIHsKKwkJcmMgPSAtRUZBVUxUOworCQlnb3RvIG91 dDsKKwl9CisJcmMgPSBwYXJhbXNfdG9fdXNlcih1cGFyYW1zLCBhcmcubnVtX3BhcmFtcywgcGFy YW1zKTsKK291dDoKKwkvKgorCSAqIElmIHdlJ3ZlIHN1Y2NlZWRlZCB0byBvcGVuIHRoZSBzZXNz aW9uIGJ1dCBmYWlsZWQgdG8gY29tbXVuaWNhdGUKKwkgKiBpdCBiYWNrIHRvIHVzZXIgc3BhY2Us IGNsb3NlIHRoZSBzZXNzaW9uIGFnYWluIHRvIGF2b2lkIGxlYWthZ2UuCisJICovCisJaWYgKHJj ICYmIGhhdmVfc2Vzc2lvbiAmJiBjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5jbG9zZV9zZXNzaW9u KQorCQljdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5jbG9zZV9zZXNzaW9uKGN0eCwgYXJnLnNlc3Np b24pOworCisJaWYgKHBhcmFtcykgeworCQkvKiBEZWNyZWFzZSByZWYgY291bnQgZm9yIGFsbCB2 YWxpZCBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCisJCWZvciAobiA9IDA7IG4gPCBhcmcubnVt X3BhcmFtczsgbisrKQorCQkJaWYgKHBhcmFtX2lzX21lbXJlZihwYXJhbXMgKyBuKSAmJgorCQkJ ICAgIHBhcmFtc1tuXS51Lm1lbXJlZi5zaG0pCisJCQkJdGVlX3NobV9wdXQocGFyYW1zW25dLnUu bWVtcmVmLnNobSk7CisJCWtmcmVlKHBhcmFtcyk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitz dGF0aWMgaW50IHRlZV9pb2N0bF9pbnZva2Uoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsCisJCQkg ICAgc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSBfX3VzZXIgKnVidWYpCit7CisJaW50IHJjOwor CXNpemVfdCBuOworCXN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgYnVmOworCXN0cnVjdCB0ZWVf aW9jdGxfaW52b2tlX2FyZyBfX3VzZXIgKnVhcmc7CisJc3RydWN0IHRlZV9pb2N0bF9pbnZva2Vf YXJnIGFyZzsKKwlzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIF9fdXNlciAqdXBhcmFtcyA9IE5VTEw7 CisJc3RydWN0IHRlZV9wYXJhbSAqcGFyYW1zID0gTlVMTDsKKworCWlmICghY3R4LT50ZWVkZXYt PmRlc2MtPm9wcy0+aW52b2tlX2Z1bmMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlf ZnJvbV91c2VyKCZidWYsIHVidWYsIHNpemVvZihidWYpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisK KwlpZiAoYnVmLmJ1Zl9sZW4gPiBURUVfTUFYX0FSR19TSVpFIHx8CisJICAgIGJ1Zi5idWZfbGVu IDwgc2l6ZW9mKHN0cnVjdCB0ZWVfaW9jdGxfaW52b2tlX2FyZykpCisJCXJldHVybiAtRUlOVkFM OworCisJdWFyZyA9IHU2NF90b191c2VyX3B0cihidWYuYnVmX3B0cik7CisJaWYgKGNvcHlfZnJv bV91c2VyKCZhcmcsIHVhcmcsIHNpemVvZihhcmcpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlp ZiAoc2l6ZW9mKGFyZykgKyBURUVfSU9DVExfUEFSQU1fU0laRShhcmcubnVtX3BhcmFtcykgIT0g YnVmLmJ1Zl9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFyZy5udW1fcGFyYW1zKSB7 CisJCXBhcmFtcyA9IGtjYWxsb2MoYXJnLm51bV9wYXJhbXMsIHNpemVvZihzdHJ1Y3QgdGVlX3Bh cmFtKSwKKwkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghcGFyYW1zKQorCQkJcmV0dXJuIC1FTk9N RU07CisJCXVwYXJhbXMgPSB1YXJnLT5wYXJhbXM7CisJCXJjID0gcGFyYW1zX2Zyb21fdXNlcihj dHgsIHBhcmFtcywgYXJnLm51bV9wYXJhbXMsIHVwYXJhbXMpOworCQlpZiAocmMpCisJCQlnb3Rv IG91dDsKKwl9CisKKwlyYyA9IGN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPmludm9rZV9mdW5jKGN0 eCwgJmFyZywgcGFyYW1zKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJaWYgKHB1dF91c2Vy KGFyZy5yZXQsICZ1YXJnLT5yZXQpIHx8CisJICAgIHB1dF91c2VyKGFyZy5yZXRfb3JpZ2luLCAm dWFyZy0+cmV0X29yaWdpbikpIHsKKwkJcmMgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJ cmMgPSBwYXJhbXNfdG9fdXNlcih1cGFyYW1zLCBhcmcubnVtX3BhcmFtcywgcGFyYW1zKTsKK291 dDoKKwlpZiAocGFyYW1zKSB7CisJCS8qIERlY3JlYXNlIHJlZiBjb3VudCBmb3IgYWxsIHZhbGlk IHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KKwkJZm9yIChuID0gMDsgbiA8IGFyZy5udW1fcGFy YW1zOyBuKyspCisJCQlpZiAocGFyYW1faXNfbWVtcmVmKHBhcmFtcyArIG4pICYmCisJCQkgICAg cGFyYW1zW25dLnUubWVtcmVmLnNobSkKKwkJCQl0ZWVfc2htX3B1dChwYXJhbXNbbl0udS5tZW1y ZWYuc2htKTsKKwkJa2ZyZWUocGFyYW1zKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMg aW50IHRlZV9pb2N0bF9jYW5jZWwoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsCisJCQkgICAgc3Ry dWN0IHRlZV9pb2N0bF9jYW5jZWxfYXJnIF9fdXNlciAqdWFyZykKK3sKKwlzdHJ1Y3QgdGVlX2lv Y3RsX2NhbmNlbF9hcmcgYXJnOworCisJaWYgKCFjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5jYW5j ZWxfcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYXJnLCB1 YXJnLCBzaXplb2YoYXJnKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGN0eC0+dGVl ZGV2LT5kZXNjLT5vcHMtPmNhbmNlbF9yZXEoY3R4LCBhcmcuY2FuY2VsX2lkLAorCQkJCQkJICBh cmcuc2Vzc2lvbik7Cit9CisKK3N0YXRpYyBpbnQKK3RlZV9pb2N0bF9jbG9zZV9zZXNzaW9uKHN0 cnVjdCB0ZWVfY29udGV4dCAqY3R4LAorCQkJc3RydWN0IHRlZV9pb2N0bF9jbG9zZV9zZXNzaW9u X2FyZyBfX3VzZXIgKnVhcmcpCit7CisJc3RydWN0IHRlZV9pb2N0bF9jbG9zZV9zZXNzaW9uX2Fy ZyBhcmc7CisKKwlpZiAoIWN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPmNsb3NlX3Nlc3Npb24pCisJ CXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmcsIHVhcmcsIHNpemVv ZihhcmcpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gY3R4LT50ZWVkZXYtPmRlc2Mt Pm9wcy0+Y2xvc2Vfc2Vzc2lvbihjdHgsIGFyZy5zZXNzaW9uKTsKK30KKworc3RhdGljIGludCBw YXJhbXNfdG9fc3VwcChzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJCSAgc3RydWN0IHRlZV9p b2N0bF9wYXJhbSBfX3VzZXIgKnVwYXJhbXMsCisJCQkgIHNpemVfdCBudW1fcGFyYW1zLCBzdHJ1 Y3QgdGVlX3BhcmFtICpwYXJhbXMpCit7CisJc2l6ZV90IG47CisKKwlmb3IgKG4gPSAwOyBuIDwg bnVtX3BhcmFtczsgbisrKSB7CisJCXN0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gaXA7CisJCXN0cnVj dCB0ZWVfcGFyYW0gKnAgPSBwYXJhbXMgKyBuOworCisJCWlwLmF0dHIgPSBwLT5hdHRyICYgVEVF X0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NQVNLOworCQlzd2l0Y2ggKHAtPmF0dHIpIHsKKwkJY2Fz ZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lOUFVUOgorCQljYXNlIFRFRV9JT0NU TF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5PVVQ6CisJCQlpcC5hID0gcC0+dS52YWx1ZS5hOwor CQkJaXAuYiA9IHAtPnUudmFsdWUuYjsKKwkJCWlwLmMgPSBwLT51LnZhbHVlLmM7CisJCQlicmVh azsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX01FTVJFRl9JTlBVVDoKKwkJY2Fz ZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX01FTVJFRl9PVVRQVVQ6CisJCWNhc2UgVEVFX0lP Q1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5PVVQ6CisJCQlpcC5iID0gcC0+dS5tZW1yZWYu c2l6ZTsKKwkJCWlmICghcC0+dS5tZW1yZWYuc2htKSB7CisJCQkJaXAuYSA9IDA7CisJCQkJaXAu YyA9ICh1NjQpLTE7IC8qIGludmFsaWQgc2htIGlkICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlp cC5hID0gcC0+dS5tZW1yZWYuc2htX29mZnM7CisJCQlpcC5jID0gcC0+dS5tZW1yZWYuc2htLT5p ZDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaXAuYSA9IDA7CisJCQlpcC5iID0gMDsKKwkJ CWlwLmMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoY29weV90b191c2VyKHVwYXJhbXMg KyBuLCAmaXAsIHNpemVvZihpcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgdGVlX2lvY3RsX3N1cHBfcmVjdihzdHJ1Y3QgdGVlX2NvbnRl eHQgKmN0eCwKKwkJCSAgICAgICBzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIF9fdXNlciAqdWJ1 ZikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSBidWY7CisJc3RydWN0 IHRlZV9pb2NsX3N1cHBfcmVjdl9hcmcgX191c2VyICp1YXJnOworCXN0cnVjdCB0ZWVfcGFyYW0g KnBhcmFtczsKKwl1MzIgbnVtX3BhcmFtczsKKwl1MzIgZnVuYzsKKworCWlmICghY3R4LT50ZWVk ZXYtPmRlc2MtPm9wcy0+c3VwcF9yZWN2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5 X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBzaXplb2YoYnVmKSkpCisJCXJldHVybiAtRUZBVUxUOwor CisJaWYgKGJ1Zi5idWZfbGVuID4gVEVFX01BWF9BUkdfU0laRSB8fAorCSAgICBidWYuYnVmX2xl biA8IHNpemVvZihzdHJ1Y3QgdGVlX2lvY2xfc3VwcF9yZWN2X2FyZykpCisJCXJldHVybiAtRUlO VkFMOworCisJdWFyZyA9IHU2NF90b191c2VyX3B0cihidWYuYnVmX3B0cik7CisJaWYgKGdldF91 c2VyKG51bV9wYXJhbXMsICZ1YXJnLT5udW1fcGFyYW1zKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisK KwlpZiAoc2l6ZW9mKCp1YXJnKSArIFRFRV9JT0NUTF9QQVJBTV9TSVpFKG51bV9wYXJhbXMpICE9 IGJ1Zi5idWZfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhcmFtcyA9IGtjYWxsb2MobnVt X3BhcmFtcywgc2l6ZW9mKHN0cnVjdCB0ZWVfcGFyYW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBh cmFtcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYyA9IGN0eC0+dGVlZGV2LT5kZXNjLT5vcHMt PnN1cHBfcmVjdihjdHgsICZmdW5jLCAmbnVtX3BhcmFtcywgcGFyYW1zKTsKKwlpZiAocmMpCisJ CWdvdG8gb3V0OworCisJaWYgKHB1dF91c2VyKGZ1bmMsICZ1YXJnLT5mdW5jKSB8fAorCSAgICBw dXRfdXNlcihudW1fcGFyYW1zLCAmdWFyZy0+bnVtX3BhcmFtcykpIHsKKwkJcmMgPSAtRUZBVUxU OworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IHBhcmFtc190b19zdXBwKGN0eCwgdWFyZy0+cGFy YW1zLCBudW1fcGFyYW1zLCBwYXJhbXMpOworb3V0OgorCWtmcmVlKHBhcmFtcyk7CisJcmV0dXJu IHJjOworfQorCitzdGF0aWMgaW50IHBhcmFtc19mcm9tX3N1cHAoc3RydWN0IHRlZV9wYXJhbSAq cGFyYW1zLCBzaXplX3QgbnVtX3BhcmFtcywKKwkJCSAgICBzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFt IF9fdXNlciAqdXBhcmFtcykKK3sKKwlzaXplX3QgbjsKKworCWZvciAobiA9IDA7IG4gPCBudW1f cGFyYW1zOyBuKyspIHsKKwkJc3RydWN0IHRlZV9wYXJhbSAqcCA9IHBhcmFtcyArIG47CisJCXN0 cnVjdCB0ZWVfaW9jdGxfcGFyYW0gaXA7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpcCwgdXBh cmFtcyArIG4sIHNpemVvZihpcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJLyogQWxsIHVu dXNlZCBhdHRyaWJ1dGUgYml0cyBoYXMgdG8gYmUgemVybyAqLworCQlpZiAoaXAuYXR0ciAmIH5U RUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX01BU0spCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlw LT5hdHRyID0gaXAuYXR0cjsKKwkJc3dpdGNoIChpcC5hdHRyKSB7CisJCWNhc2UgVEVFX0lPQ1RM X1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9PVVRQVVQ6CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FU VFJfVFlQRV9WQUxVRV9JTk9VVDoKKwkJCS8qIE9ubHkgb3V0IGFuZCBpbi9vdXQgdmFsdWVzIGNh biBiZSB1cGRhdGVkICovCisJCQlwLT51LnZhbHVlLmEgPSBpcC5hOworCQkJcC0+dS52YWx1ZS5i ID0gaXAuYjsKKwkJCXAtPnUudmFsdWUuYyA9IGlwLmM7CisJCQlicmVhazsKKwkJY2FzZSBURUVf SU9DVExfUEFSQU1fQVRUUl9UWVBFX01FTVJFRl9PVVRQVVQ6CisJCWNhc2UgVEVFX0lPQ1RMX1BB UkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5PVVQ6CisJCQkvKgorCQkJICogT25seSB0aGUgc2l6ZSBv ZiB0aGUgbWVtcmVmIGNhbiBiZSB1cGRhdGVkLgorCQkJICogU2luY2Ugd2UgZG9uJ3QgaGF2ZSBh Y2Nlc3MgdG8gdGhlIG9yaWdpbmFsCisJCQkgKiBwYXJhbWV0ZXJzIGhlcmUsIG9ubHkgc3RvcmUg dGhlIHN1cHBsaWVkIHNpemUuCisJCQkgKiBUaGUgZHJpdmVyIHdpbGwgY29weSB0aGUgdXBkYXRl ZCBzaXplIGludG8gdGhlCisJCQkgKiBvcmlnaW5hbCBwYXJhbWV0ZXJzLgorCQkJICovCisJCQlw LT51Lm1lbXJlZi5zaG0gPSBOVUxMOworCQkJcC0+dS5tZW1yZWYuc2htX29mZnMgPSAwOworCQkJ cC0+dS5tZW1yZWYuc2l6ZSA9IGlwLmI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1lbXNl dCgmcC0+dSwgMCwgc2l6ZW9mKHAtPnUpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHRlZV9pb2N0bF9zdXBwX3NlbmQoc3RydWN0IHRlZV9jb250ZXh0 ICpjdHgsCisJCQkgICAgICAgc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSBfX3VzZXIgKnVidWYp Cit7CisJbG9uZyByYzsKKwlzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIGJ1ZjsKKwlzdHJ1Y3Qg dGVlX2lvY2xfc3VwcF9zZW5kX2FyZyBfX3VzZXIgKnVhcmc7CisJc3RydWN0IHRlZV9wYXJhbSAq cGFyYW1zOworCXUzMiBudW1fcGFyYW1zOworCXUzMiByZXQ7CisKKwkvKiBOb3QgdmFsaWQgZm9y IHRoaXMgZHJpdmVyICovCisJaWYgKCFjdHgtPnRlZWRldi0+ZGVzYy0+b3BzLT5zdXBwX3NlbmQp CisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIHNp emVvZihidWYpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoYnVmLmJ1Zl9sZW4gPiBURUVf TUFYX0FSR19TSVpFIHx8CisJICAgIGJ1Zi5idWZfbGVuIDwgc2l6ZW9mKHN0cnVjdCB0ZWVfaW9j bF9zdXBwX3NlbmRfYXJnKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1YXJnID0gdTY0X3RvX3Vz ZXJfcHRyKGJ1Zi5idWZfcHRyKTsKKwlpZiAoZ2V0X3VzZXIocmV0LCAmdWFyZy0+cmV0KSB8fAor CSAgICBnZXRfdXNlcihudW1fcGFyYW1zLCAmdWFyZy0+bnVtX3BhcmFtcykpCisJCXJldHVybiAt RUZBVUxUOworCisJaWYgKHNpemVvZigqdWFyZykgKyBURUVfSU9DVExfUEFSQU1fU0laRShudW1f cGFyYW1zKSA+IGJ1Zi5idWZfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhcmFtcyA9IGtj YWxsb2MobnVtX3BhcmFtcywgc2l6ZW9mKHN0cnVjdCB0ZWVfcGFyYW0pLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYyA9IHBhcmFtc19mcm9tX3N1 cHAocGFyYW1zLCBudW1fcGFyYW1zLCB1YXJnLT5wYXJhbXMpOworCWlmIChyYykKKwkJZ290byBv dXQ7CisKKwlyYyA9IGN0eC0+dGVlZGV2LT5kZXNjLT5vcHMtPnN1cHBfc2VuZChjdHgsIHJldCwg bnVtX3BhcmFtcywgcGFyYW1zKTsKK291dDoKKwlrZnJlZShwYXJhbXMpOworCXJldHVybiByYzsK K30KKworc3RhdGljIGxvbmcgdGVlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBp bnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCA9 IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9fdXNlciAqdWFyZyA9ICh2b2lkIF9fdXNlciAq KWFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBURUVfSU9DX1ZFUlNJT046CisJCXJldHVy biB0ZWVfaW9jdGxfdmVyc2lvbihjdHgsIHVhcmcpOworCWNhc2UgVEVFX0lPQ19TSE1fQUxMT0M6 CisJCXJldHVybiB0ZWVfaW9jdGxfc2htX2FsbG9jKGN0eCwgdWFyZyk7CisJY2FzZSBURUVfSU9D X09QRU5fU0VTU0lPTjoKKwkJcmV0dXJuIHRlZV9pb2N0bF9vcGVuX3Nlc3Npb24oY3R4LCB1YXJn KTsKKwljYXNlIFRFRV9JT0NfSU5WT0tFOgorCQlyZXR1cm4gdGVlX2lvY3RsX2ludm9rZShjdHgs IHVhcmcpOworCWNhc2UgVEVFX0lPQ19DQU5DRUw6CisJCXJldHVybiB0ZWVfaW9jdGxfY2FuY2Vs KGN0eCwgdWFyZyk7CisJY2FzZSBURUVfSU9DX0NMT1NFX1NFU1NJT046CisJCXJldHVybiB0ZWVf aW9jdGxfY2xvc2Vfc2Vzc2lvbihjdHgsIHVhcmcpOworCWNhc2UgVEVFX0lPQ19TVVBQTF9SRUNW OgorCQlyZXR1cm4gdGVlX2lvY3RsX3N1cHBfcmVjdihjdHgsIHVhcmcpOworCWNhc2UgVEVFX0lP Q19TVVBQTF9TRU5EOgorCQlyZXR1cm4gdGVlX2lvY3RsX3N1cHBfc2VuZChjdHgsIHVhcmcpOwor CWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgdGVlX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJ Lm9wZW4gPSB0ZWVfb3BlbiwKKwkucmVsZWFzZSA9IHRlZV9yZWxlYXNlLAorCS51bmxvY2tlZF9p b2N0bCA9IHRlZV9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0gdGVlX2lvY3RsLAorfTsKKworc3Rh dGljIHZvaWQgdGVlX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgdGVlX2RldmljZSAqdGVlZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHRlZV9kZXZp Y2UsIGRldik7CisKKwlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKKwljbGVhcl9iaXQodGVlZGV2 LT5pZCwgZGV2X21hc2spOworCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7CisJbXV0ZXhfZGVz dHJveSgmdGVlZGV2LT5tdXRleCk7CisJa2ZyZWUodGVlZGV2KTsKK30KKworLyoqCisgKiB0ZWVf ZGV2aWNlX2FsbG9jKCkgLSBBbGxvY2F0ZSBhIG5ldyBzdHJ1Y3QgdGVlX2RldmljZSBpbnN0YW5j ZQorICogQHRlZWRlc2M6CURlc2NyaXB0b3IgZm9yIHRoaXMgZHJpdmVyCisgKiBAZGV2OglQYXJl bnQgZGV2aWNlIGZvciB0aGlzIGRldmljZQorICogQHBvb2w6CVNoYXJlZCBtZW1vcnkgcG9vbCwg TlVMTCBpZiBub3QgdXNlZAorICogQGRyaXZlcl9kYXRhOiBQcml2YXRlIGRyaXZlciBkYXRhIGZv ciB0aGlzIGRldmljZQorICoKKyAqIEFsbG9jYXRlcyBhIG5ldyBzdHJ1Y3QgdGVlX2RldmljZSBp bnN0YW5jZS4gVGhlIGRldmljZSBpcworICogcmVtb3ZlZCBieSB0ZWVfZGV2aWNlX3VucmVnaXN0 ZXIoKS4KKyAqCisgKiBAcmV0dXJucyBhIHBvaW50ZXIgdG8gYSAnc3RydWN0IHRlZV9kZXZpY2Un IG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZQorICovCitzdHJ1Y3QgdGVlX2RldmljZSAqdGVlX2Rl dmljZV9hbGxvYyhjb25zdCBzdHJ1Y3QgdGVlX2Rlc2MgKnRlZWRlc2MsCisJCQkJICAgIHN0cnVj dCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IHRlZV9zaG1fcG9vbCAqcG9vbCwKKwkJCQkg ICAgdm9pZCAqZHJpdmVyX2RhdGEpCit7CisJc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldjsKKwl2 b2lkICpyZXQ7CisJaW50IHJjOworCWludCBvZmZzID0gMDsKKworCWlmICghdGVlZGVzYyB8fCAh dGVlZGVzYy0+bmFtZSB8fCAhdGVlZGVzYy0+b3BzIHx8CisJICAgICF0ZWVkZXNjLT5vcHMtPmdl dF92ZXJzaW9uIHx8ICF0ZWVkZXNjLT5vcHMtPm9wZW4gfHwKKwkgICAgIXRlZWRlc2MtPm9wcy0+ cmVsZWFzZSB8fCAhcG9vbCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwl0ZWVkZXYg PSBremFsbG9jKHNpemVvZigqdGVlZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZWVkZXYpIHsK KwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKHRlZWRl c2MtPmZsYWdzICYgVEVFX0RFU0NfUFJJVklMRUdFRCkKKwkJb2ZmcyA9IFRFRV9OVU1fREVWSUNF UyAvIDI7CisKKwlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKKwl0ZWVkZXYtPmlkID0gZmluZF9u ZXh0X3plcm9fYml0KGRldl9tYXNrLCBURUVfTlVNX0RFVklDRVMsIG9mZnMpOworCWlmICh0ZWVk ZXYtPmlkIDwgVEVFX05VTV9ERVZJQ0VTKQorCQlzZXRfYml0KHRlZWRldi0+aWQsIGRldl9tYXNr KTsKKwlzcGluX3VubG9jaygmZHJpdmVyX2xvY2spOworCisJaWYgKHRlZWRldi0+aWQgPj0gVEVF X05VTV9ERVZJQ0VTKSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gZXJyOwor CX0KKworCXNucHJpbnRmKHRlZWRldi0+bmFtZSwgc2l6ZW9mKHRlZWRldi0+bmFtZSksICJ0ZWUl cyVkIiwKKwkJIHRlZWRlc2MtPmZsYWdzICYgVEVFX0RFU0NfUFJJVklMRUdFRCA/ICJwcml2IiA6 ICIiLAorCQkgdGVlZGV2LT5pZCAtIG9mZnMpOworCisJdGVlZGV2LT5kZXYuY2xhc3MgPSB0ZWVf Y2xhc3M7CisJdGVlZGV2LT5kZXYucmVsZWFzZSA9IHRlZV9yZWxlYXNlX2RldmljZTsKKwl0ZWVk ZXYtPmRldi5wYXJlbnQgPSBkZXY7CisKKwl0ZWVkZXYtPmRldi5kZXZ0ID0gTUtERVYoTUFKT1Io dGVlX2RldnQpLCB0ZWVkZXYtPmlkKTsKKworCXJjID0gZGV2X3NldF9uYW1lKCZ0ZWVkZXYtPmRl diwgIiVzIiwgdGVlZGV2LT5uYW1lKTsKKwlpZiAocmMpIHsKKwkJcmV0ID0gRVJSX1BUUihyYyk7 CisJCWdvdG8gZXJyX2RldnQ7CisJfQorCisJY2Rldl9pbml0KCZ0ZWVkZXYtPmNkZXYsICZ0ZWVf Zm9wcyk7CisJdGVlZGV2LT5jZGV2Lm93bmVyID0gdGVlZGVzYy0+b3duZXI7CisJdGVlZGV2LT5j ZGV2LmtvYmoucGFyZW50ID0gJnRlZWRldi0+ZGV2LmtvYmo7CisKKwlkZXZfc2V0X2RydmRhdGEo JnRlZWRldi0+ZGV2LCBkcml2ZXJfZGF0YSk7CisJZGV2aWNlX2luaXRpYWxpemUoJnRlZWRldi0+ ZGV2KTsKKworCS8qIDEgYXMgdGVlX2RldmljZV91bnJlZ2lzdGVyKCkgZG9lcyBvbmUgZmluYWwg dGVlX2RldmljZV9wdXQoKSAqLworCXRlZWRldi0+bnVtX3VzZXJzID0gMTsKKwlpbml0X2NvbXBs ZXRpb24oJnRlZWRldi0+Y19ub191c2Vycyk7CisJbXV0ZXhfaW5pdCgmdGVlZGV2LT5tdXRleCk7 CisKKwl0ZWVkZXYtPmRlc2MgPSB0ZWVkZXNjOworCXRlZWRldi0+cG9vbCA9IHBvb2w7CisKKwly ZXR1cm4gdGVlZGV2OworZXJyX2RldnQ6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKHRlZWRl di0+ZGV2LmRldnQsIDEpOworZXJyOgorCXByX2VycigiY291bGQgbm90IHJlZ2lzdGVyICVzIGRy aXZlclxuIiwKKwkgICAgICAgdGVlZGVzYy0+ZmxhZ3MgJiBURUVfREVTQ19QUklWSUxFR0VEID8g InByaXZpbGVnZWQiIDogImNsaWVudCIpOworCWlmICh0ZWVkZXYgJiYgdGVlZGV2LT5pZCA8IFRF RV9OVU1fREVWSUNFUykgeworCQlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKKwkJY2xlYXJfYml0 KHRlZWRldi0+aWQsIGRldl9tYXNrKTsKKwkJc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKKwl9 CisJa2ZyZWUodGVlZGV2KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVl X2RldmljZV9hbGxvYyk7CisKK3N0YXRpYyBzc2l6ZV90IGltcGxlbWVudGF0aW9uX2lkX3Nob3co c3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICph dHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldiA9IGNvbnRhaW5l cl9vZihkZXYsIHN0cnVjdCB0ZWVfZGV2aWNlLCBkZXYpOworCXN0cnVjdCB0ZWVfaW9jdGxfdmVy c2lvbl9kYXRhIHZlcnM7CisKKwl0ZWVkZXYtPmRlc2MtPm9wcy0+Z2V0X3ZlcnNpb24odGVlZGV2 LCAmdmVycyk7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2ZXJz LmltcGxfaWQpOworfQorc3RhdGljIERFVklDRV9BVFRSX1JPKGltcGxlbWVudGF0aW9uX2lkKTsK Kworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRlZV9kZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0 dHJfaW1wbGVtZW50YXRpb25faWQuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGF0dHJpYnV0ZV9ncm91cCB0ZWVfZGV2X2dyb3VwID0geworCS5hdHRycyA9IHRlZV9kZXZf YXR0cnMsCit9OworCisvKioKKyAqIHRlZV9kZXZpY2VfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVycyBh IFRFRSBkZXZpY2UKKyAqIEB0ZWVkZXY6CURldmljZSB0byByZWdpc3RlcgorICoKKyAqIHRlZV9k ZXZpY2VfdW5yZWdpc3RlcigpIG5lZWQgdG8gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgQHRlZWRl diBpZgorICogdGhpcyBmdW5jdGlvbiBmYWlscy4KKyAqCisgKiBAcmV0dXJucyA8IDAgb24gZmFp bHVyZQorICovCitpbnQgdGVlX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgdGVlX2RldmljZSAqdGVl ZGV2KQoreworCWludCByYzsKKworCWlmICh0ZWVkZXYtPmZsYWdzICYgVEVFX0RFVklDRV9GTEFH X1JFR0lTVEVSRUQpIHsKKwkJZGV2X2VycigmdGVlZGV2LT5kZXYsICJhdHRlbXB0IHRvIHJlZ2lz dGVyIHR3aWNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmMgPSBjZGV2X2FkZCgm dGVlZGV2LT5jZGV2LCB0ZWVkZXYtPmRldi5kZXZ0LCAxKTsKKwlpZiAocmMpIHsKKwkJZGV2X2Vy cigmdGVlZGV2LT5kZXYsCisJCQkidW5hYmxlIHRvIGNkZXZfYWRkKCkgJXMsIG1ham9yICVkLCBt aW5vciAlZCwgZXJyPSVkXG4iLAorCQkJdGVlZGV2LT5uYW1lLCBNQUpPUih0ZWVkZXYtPmRldi5k ZXZ0KSwKKwkJCU1JTk9SKHRlZWRldi0+ZGV2LmRldnQpLCByYyk7CisJCXJldHVybiByYzsKKwl9 CisKKwlyYyA9IGRldmljZV9hZGQoJnRlZWRldi0+ZGV2KTsKKwlpZiAocmMpIHsKKwkJZGV2X2Vy cigmdGVlZGV2LT5kZXYsCisJCQkidW5hYmxlIHRvIGRldmljZV9hZGQoKSAlcywgbWFqb3IgJWQs IG1pbm9yICVkLCBlcnI9JWRcbiIsCisJCQl0ZWVkZXYtPm5hbWUsIE1BSk9SKHRlZWRldi0+ZGV2 LmRldnQpLAorCQkJTUlOT1IodGVlZGV2LT5kZXYuZGV2dCksIHJjKTsKKwkJZ290byBlcnJfZGV2 aWNlX2FkZDsKKwl9CisKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmdGVlZGV2LT5kZXYua29i aiwgJnRlZV9kZXZfZ3JvdXApOworCWlmIChyYykgeworCQlkZXZfZXJyKCZ0ZWVkZXYtPmRldiwK KwkJCSJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZXMsIGVycj0lZFxuIiwgcmMpOwor CQlnb3RvIGVycl9zeXNmc19jcmVhdGVfZ3JvdXA7CisJfQorCisJdGVlZGV2LT5mbGFncyB8PSBU RUVfREVWSUNFX0ZMQUdfUkVHSVNURVJFRDsKKwlyZXR1cm4gMDsKKworZXJyX3N5c2ZzX2NyZWF0 ZV9ncm91cDoKKwlkZXZpY2VfZGVsKCZ0ZWVkZXYtPmRldik7CitlcnJfZGV2aWNlX2FkZDoKKwlj ZGV2X2RlbCgmdGVlZGV2LT5jZGV2KTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TCh0ZWVfZGV2aWNlX3JlZ2lzdGVyKTsKKwordm9pZCB0ZWVfZGV2aWNlX3B1dChzdHJ1Y3QgdGVl X2RldmljZSAqdGVlZGV2KQoreworCW11dGV4X2xvY2soJnRlZWRldi0+bXV0ZXgpOworCS8qIFNo b3VsZG4ndCBwdXQgaW4gdGhpcyBzdGF0ZSAqLworCWlmICghV0FSTl9PTighdGVlZGV2LT5kZXNj KSkgeworCQl0ZWVkZXYtPm51bV91c2Vycy0tOworCQlpZiAoIXRlZWRldi0+bnVtX3VzZXJzKSB7 CisJCQl0ZWVkZXYtPmRlc2MgPSBOVUxMOworCQkJY29tcGxldGUoJnRlZWRldi0+Y19ub191c2Vy cyk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKK30KKworYm9vbCB0 ZWVfZGV2aWNlX2dldChzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2KQoreworCW11dGV4X2xvY2so JnRlZWRldi0+bXV0ZXgpOworCWlmICghdGVlZGV2LT5kZXNjKSB7CisJCW11dGV4X3VubG9jaygm dGVlZGV2LT5tdXRleCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJdGVlZGV2LT5udW1fdXNlcnMr KzsKKwltdXRleF91bmxvY2soJnRlZWRldi0+bXV0ZXgpOworCXJldHVybiB0cnVlOworfQorCisv KioKKyAqIHRlZV9kZXZpY2VfdW5yZWdpc3RlcigpIC0gUmVtb3ZlcyBhIFRFRSBkZXZpY2UKKyAq IEB0ZWVkZXY6CURldmljZSB0byB1bnJlZ2lzdGVyCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91 bGQgYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgQHRlZWRldiBldmVuIGlmCisgKiB0ZWVfZGV2aWNl X3JlZ2lzdGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIHlldC4gRG9lcyBub3RoaW5nIGlmCisgKiBA dGVlZGV2IGlzIE5VTEwuCisgKi8KK3ZvaWQgdGVlX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB0 ZWVfZGV2aWNlICp0ZWVkZXYpCit7CisJaWYgKCF0ZWVkZXYpCisJCXJldHVybjsKKworCWlmICh0 ZWVkZXYtPmZsYWdzICYgVEVFX0RFVklDRV9GTEFHX1JFR0lTVEVSRUQpIHsKKwkJc3lzZnNfcmVt b3ZlX2dyb3VwKCZ0ZWVkZXYtPmRldi5rb2JqLCAmdGVlX2Rldl9ncm91cCk7CisJCWNkZXZfZGVs KCZ0ZWVkZXYtPmNkZXYpOworCQlkZXZpY2VfZGVsKCZ0ZWVkZXYtPmRldik7CisJfQorCisJdGVl X2RldmljZV9wdXQodGVlZGV2KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ0ZWVkZXYtPmNfbm9f dXNlcnMpOworCisJLyoKKwkgKiBObyBuZWVkIHRvIHRha2UgYSBtdXRleCBhbnkgbG9uZ2VyIG5v dyBzaW5jZSB0ZWVkZXYtPmRlc2Mgd2FzCisJICogc2V0IHRvIE5VTEwgYmVmb3JlIHRlZWRldi0+ Y19ub191c2VycyB3YXMgY29tcGxldGVkLgorCSAqLworCisJdGVlZGV2LT5wb29sID0gTlVMTDsK KworCXB1dF9kZXZpY2UoJnRlZWRldi0+ZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRlZV9k ZXZpY2VfdW5yZWdpc3Rlcik7CisKKy8qKgorICogdGVlX2dldF9kcnZkYXRhKCkgLSBSZXR1cm4g ZHJpdmVyX2RhdGEgcG9pbnRlcgorICogQHRlZWRldjoJRGV2aWNlIGNvbnRhaW5pbmcgdGhlIGRy aXZlcl9kYXRhIHBvaW50ZXIKKyAqIEByZXR1cm5zIHRoZSBkcml2ZXJfZGF0YSBwb2ludGVyIHN1 cHBsaWVkIHRvIHRlZV9yZWdpc3RlcigpLgorICovCit2b2lkICp0ZWVfZ2V0X2RydmRhdGEoc3Ry dWN0IHRlZV9kZXZpY2UgKnRlZWRldikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZ0ZWVk ZXYtPmRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWVfZ2V0X2RydmRhdGEpOworCitzdGF0 aWMgaW50IF9faW5pdCB0ZWVfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCXRlZV9jbGFzcyA9 IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInRlZSIpOworCWlmIChJU19FUlIodGVlX2NsYXNz KSkgeworCQlwcl9lcnIoImNvdWxkbid0IGNyZWF0ZSBjbGFzc1xuIik7CisJCXJldHVybiBQVFJf RVJSKHRlZV9jbGFzcyk7CisJfQorCisJcmMgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZ0ZWVfZGV2 dCwgMCwgVEVFX05VTV9ERVZJQ0VTLCAidGVlIik7CisJaWYgKHJjKSB7CisJCXByX2VycigiZmFp bGVkIHRvIGFsbG9jYXRlIGNoYXIgZGV2IHJlZ2lvblxuIik7CisJCWNsYXNzX2Rlc3Ryb3kodGVl X2NsYXNzKTsKKwkJdGVlX2NsYXNzID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0 YXRpYyB2b2lkIF9fZXhpdCB0ZWVfZXhpdCh2b2lkKQoreworCWNsYXNzX2Rlc3Ryb3kodGVlX2Ns YXNzKTsKKwl0ZWVfY2xhc3MgPSBOVUxMOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbih0ZWVf ZGV2dCwgVEVFX05VTV9ERVZJQ0VTKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHRlZV9pbml0KTsK K21vZHVsZV9leGl0KHRlZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGluYXJvIik7CitNT0RV TEVfREVTQ1JJUFRJT04oIlRFRSBEcml2ZXIiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjAiKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVlL3RlZV9wcml2 YXRlLmggYi9kcml2ZXJzL3RlZS90ZWVfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMjFjYjZiZThiY2U5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy90ZWUvdGVlX3ByaXZhdGUuaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAxNS0yMDE2LCBMaW5hcm8gTGltaXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGlj ZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu c2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVy IHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisjaWZuZGVm IFRFRV9QUklWQVRFX0gKKyNkZWZpbmUgVEVFX1BSSVZBVEVfSAorCisjaW5jbHVkZSA8bGludXgv Y2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXgu aD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgdGVlX2RldmljZTsKKworLyoq CisgKiBzdHJ1Y3QgdGVlX3NobSAtIHNoYXJlZCBtZW1vcnkgb2JqZWN0CisgKiBAdGVlZGV2Oglk ZXZpY2UgdXNlZCB0byBhbGxvY2F0ZSB0aGUgb2JqZWN0CisgKiBAY3R4Ogljb250ZXh0IHVzaW5n IHRoZSBvYmplY3QsIGlmIE5VTEwgdGhlIGNvbnRleHQgaXMgZ29uZQorICogQGxpbmsJbGluayBl bGVtZW50CisgKiBAcGFkZHI6CXBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHNoYXJlZCBtZW1vcnkK KyAqIEBrYWRkcjoJdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBzaGFyZWQgbWVtb3J5CisgKiBAc2l6 ZToJc2l6ZSBvZiBzaGFyZWQgbWVtb3J5CisgKiBAZG1hYnVmOglkbWFidWYgdXNlZCB0byBmb3Ig ZXhwb3J0aW5nIHRvIHVzZXIgc3BhY2UKKyAqIEBmbGFnczoJZGVmaW5lZCBieSBURUVfU0hNXyog aW4gdGVlX2Rydi5oCisgKiBAaWQ6CQl1bmlxdWUgaWQgb2YgYSBzaGFyZWQgbWVtb3J5IG9iamVj dCBvbiB0aGlzIGRldmljZQorICovCitzdHJ1Y3QgdGVlX3NobSB7CisJc3RydWN0IHRlZV9kZXZp Y2UgKnRlZWRldjsKKwlzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgbGlzdF9oZWFk IGxpbms7CisJcGh5c19hZGRyX3QgcGFkZHI7CisJdm9pZCAqa2FkZHI7CisJc2l6ZV90IHNpemU7 CisJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKKwl1MzIgZmxhZ3M7CisJaW50IGlkOworfTsKKwor c3RydWN0IHRlZV9zaG1fcG9vbF9tZ3I7CisKKy8qKgorICogc3RydWN0IHRlZV9zaG1fcG9vbF9t Z3Jfb3BzIC0gc2hhcmVkIG1lbW9yeSBwb29sIG1hbmFnZXIgb3BlcmF0aW9ucworICogQGFsbG9j OgljYWxsZWQgd2hlbiBhbGxvY2F0aW5nIHNoYXJlZCBtZW1vcnkKKyAqIEBmcmVlOgljYWxsZWQg d2hlbiBmcmVlaW5nIHNoYXJlZCBtZW1vcnkKKyAqLworc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3Jf b3BzIHsKKwlpbnQgKCphbGxvYykoc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3IgKnBvb2xtZ3IsIHN0 cnVjdCB0ZWVfc2htICpzaG0sCisJCSAgICAgc2l6ZV90IHNpemUpOworCXZvaWQgKCpmcmVlKShz dHJ1Y3QgdGVlX3NobV9wb29sX21nciAqcG9vbG1nciwgc3RydWN0IHRlZV9zaG0gKnNobSk7Cit9 OworCisvKioKKyAqIHN0cnVjdCB0ZWVfc2htX3Bvb2xfbWdyIC0gc2hhcmVkIG1lbW9yeSBtYW5h Z2VyCisgKiBAb3BzOgkJb3BlcmF0aW9ucworICogQHByaXZhdGVfZGF0YToJcHJpdmF0ZSBkYXRh IGZvciB0aGUgc2hhcmVkIG1lbW9yeSBtYW5hZ2VyCisgKi8KK3N0cnVjdCB0ZWVfc2htX3Bvb2xf bWdyIHsKKwljb25zdCBzdHJ1Y3QgdGVlX3NobV9wb29sX21ncl9vcHMgKm9wczsKKwl2b2lkICpw cml2YXRlX2RhdGE7Cit9OworCisvKioKKyAqIHN0cnVjdCB0ZWVfc2htX3Bvb2wgLSBzaGFyZWQg bWVtb3J5IHBvb2wKKyAqIEBwcml2YXRlX21ncjoJcG9vbCBtYW5hZ2VyIGZvciBzaGFyZWQgbWVt b3J5IG9ubHkgYmV0d2VlbiBrZXJuZWwKKyAqCQkJYW5kIHNlY3VyZSB3b3JsZAorICogQGRtYV9i dWZfbWdyOglwb29sIG1hbmFnZXIgZm9yIHNoYXJlZCBtZW1vcnkgZXhwb3J0ZWQgdG8gdXNlciBz cGFjZQorICogQGRlc3Ryb3k6CQljYWxsZWQgd2hlbiBkZXN0cm95aW5nIHRoZSBwb29sCisgKiBA cHJpdmF0ZV9kYXRhOglwcml2YXRlIGRhdGEgZm9yIHRoZSBwb29sCisgKi8KK3N0cnVjdCB0ZWVf c2htX3Bvb2wgeworCXN0cnVjdCB0ZWVfc2htX3Bvb2xfbWdyIHByaXZhdGVfbWdyOworCXN0cnVj dCB0ZWVfc2htX3Bvb2xfbWdyIGRtYV9idWZfbWdyOworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3Qg dGVlX3NobV9wb29sICpwb29sKTsKKwl2b2lkICpwcml2YXRlX2RhdGE7Cit9OworCisjZGVmaW5l IFRFRV9ERVZJQ0VfRkxBR19SRUdJU1RFUkVECTB4MQorI2RlZmluZSBURUVfTUFYX0RFVl9OQU1F X0xFTgkJMzIKKworLyoqCisgKiBzdHJ1Y3QgdGVlX2RldmljZSAtIFRFRSBEZXZpY2UgcmVwcmVz ZW50YXRpb24KKyAqIEBuYW1lOgluYW1lIG9mIGRldmljZQorICogQGRlc2M6CWRlc2NyaXB0aW9u IG9mIGRldmljZQorICogQGlkOgkJdW5pcXVlIGlkIG9mIGRldmljZQorICogQGZsYWdzOglyZXBy ZXNlbnRlZCBieSBURUVfREVWSUNFX0ZMQUdfUkVHSVNURVJFRCBhYm92ZQorICogQGRldjoJZW1i ZWRkZWQgYmFzaWMgZGV2aWNlIHN0cnVjdHVyZQorICogQGNkZXY6CWVtYmVkZGVkIGNkZXYKKyAq IEBudW1fdXNlcnM6CW51bWJlciBvZiBhY3RpdmUgdXNlcnMgb2YgdGhpcyBkZXZpY2UKKyAqIEBj X25vX3VzZXI6CWNvbXBsZXRpb24gdXNlZCB3aGVuIHVucmVnaXN0ZXJpbmcgdGhlIGRldmljZQor ICogQG11dGV4OgltdXRleCBwcm90ZWN0aW5nIEBudW1fdXNlcnMgYW5kIEBpZHIKKyAqIEBpZHI6 CXJlZ2lzdGVyIG9mIHNoYXJlZCBtZW1vcnkgb2JqZWN0IGFsbG9jYXRlZCBvbiB0aGlzIGRldmlj ZQorICogQHBvb2w6CXNoYXJlZCBtZW1vcnkgcG9vbAorICovCitzdHJ1Y3QgdGVlX2RldmljZSB7 CisJY2hhciBuYW1lW1RFRV9NQVhfREVWX05BTUVfTEVOXTsKKwljb25zdCBzdHJ1Y3QgdGVlX2Rl c2MgKmRlc2M7CisJaW50IGlkOworCXVuc2lnbmVkIGludCBmbGFnczsKKworCXN0cnVjdCBkZXZp Y2UgZGV2OworCXN0cnVjdCBjZGV2IGNkZXY7CisKKwlzaXplX3QgbnVtX3VzZXJzOworCXN0cnVj dCBjb21wbGV0aW9uIGNfbm9fdXNlcnM7CisJc3RydWN0IG11dGV4IG11dGV4OwkvKiBwcm90ZWN0 cyBudW1fdXNlcnMgYW5kIGlkciAqLworCisJc3RydWN0IGlkciBpZHI7CisJc3RydWN0IHRlZV9z aG1fcG9vbCAqcG9vbDsKK307CisKK2ludCB0ZWVfc2htX2luaXQodm9pZCk7CisKK2ludCB0ZWVf c2htX2dldF9mZChzdHJ1Y3QgdGVlX3NobSAqc2htKTsKKworYm9vbCB0ZWVfZGV2aWNlX2dldChz dHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2KTsKK3ZvaWQgdGVlX2RldmljZV9wdXQoc3RydWN0IHRl ZV9kZXZpY2UgKnRlZWRldik7CisKKyNlbmRpZiAvKlRFRV9QUklWQVRFX0gqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy90ZWUvdGVlX3NobS5jIGIvZHJpdmVycy90ZWUvdGVlX3NobS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWZkNTAxYzhlMjJlCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy90ZWUvdGVlX3NobS5jCkBAIC0wLDAgKzEsMzU3IEBACisvKgorICog Q29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIExpbmFybyBMaW1pdGVkCisgKgorICogVGhpcyBzb2Z0 d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9k aWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg Ki8KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+ CisjaW5jbHVkZSA8bGludXgvZmR0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUg PGxpbnV4L3RlZV9kcnYuaD4KKyNpbmNsdWRlICJ0ZWVfcHJpdmF0ZS5oIgorCitzdGF0aWMgdm9p ZCB0ZWVfc2htX3JlbGVhc2Uoc3RydWN0IHRlZV9zaG0gKnNobSkKK3sKKwlzdHJ1Y3QgdGVlX2Rl dmljZSAqdGVlZGV2ID0gc2htLT50ZWVkZXY7CisJc3RydWN0IHRlZV9zaG1fcG9vbF9tZ3IgKnBv b2xtOworCisJbXV0ZXhfbG9jaygmdGVlZGV2LT5tdXRleCk7CisJaWRyX3JlbW92ZSgmdGVlZGV2 LT5pZHIsIHNobS0+aWQpOworCWlmIChzaG0tPmN0eCkKKwkJbGlzdF9kZWwoJnNobS0+bGluayk7 CisJbXV0ZXhfdW5sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKKworCWlmIChzaG0tPmZsYWdzICYgVEVF X1NITV9ETUFfQlVGKQorCQlwb29sbSA9ICZ0ZWVkZXYtPnBvb2wtPmRtYV9idWZfbWdyOworCWVs c2UKKwkJcG9vbG0gPSAmdGVlZGV2LT5wb29sLT5wcml2YXRlX21ncjsKKworCXBvb2xtLT5vcHMt PmZyZWUocG9vbG0sIHNobSk7CisJa2ZyZWUoc2htKTsKKworCXRlZV9kZXZpY2VfcHV0KHRlZWRl dik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKnRlZV9zaG1fb3BfbWFwX2RtYV9idWYo c3RydWN0IGRtYV9idWZfYXR0YWNobWVudAorCQkJKmF0dGFjaCwgZW51bSBkbWFfZGF0YV9kaXJl Y3Rpb24gZGlyKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB0ZWVfc2htX29w X3VubWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAorCQkJCSAg ICAgc3RydWN0IHNnX3RhYmxlICp0YWJsZSwKKwkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0 aW9uIGRpcikKK3sKK30KKworc3RhdGljIHZvaWQgdGVlX3NobV9vcF9yZWxlYXNlKHN0cnVjdCBk bWFfYnVmICpkbWFidWYpCit7CisJc3RydWN0IHRlZV9zaG0gKnNobSA9IGRtYWJ1Zi0+cHJpdjsK KworCXRlZV9zaG1fcmVsZWFzZShzaG0pOworfQorCitzdGF0aWMgdm9pZCAqdGVlX3NobV9vcF9r bWFwX2F0b21pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCB1bnNpZ25lZCBsb25nIHBnbnVtKQor eworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqdGVlX3NobV9vcF9rbWFwKHN0cnVj dCBkbWFfYnVmICpkbWFidWYsIHVuc2lnbmVkIGxvbmcgcGdudW0pCit7CisJcmV0dXJuIE5VTEw7 Cit9CisKK3N0YXRpYyBpbnQgdGVlX3NobV9vcF9tbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCB0ZWVfc2htICpzaG0gPSBk bWFidWYtPnByaXY7CisJc2l6ZV90IHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7 CisKKwlyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgc2htLT5wYWRk ciA+PiBQQUdFX1NISUZULAorCQkJICAgICAgIHNpemUsIHZtYS0+dm1fcGFnZV9wcm90KTsKK30K Kworc3RhdGljIHN0cnVjdCBkbWFfYnVmX29wcyB0ZWVfc2htX2RtYV9idWZfb3BzID0geworCS5t YXBfZG1hX2J1ZiA9IHRlZV9zaG1fb3BfbWFwX2RtYV9idWYsCisJLnVubWFwX2RtYV9idWYgPSB0 ZWVfc2htX29wX3VubWFwX2RtYV9idWYsCisJLnJlbGVhc2UgPSB0ZWVfc2htX29wX3JlbGVhc2Us CisJLmttYXBfYXRvbWljID0gdGVlX3NobV9vcF9rbWFwX2F0b21pYywKKwkua21hcCA9IHRlZV9z aG1fb3Bfa21hcCwKKwkubW1hcCA9IHRlZV9zaG1fb3BfbW1hcCwKK307CisKKy8qKgorICogdGVl X3NobV9hbGxvYygpIC0gQWxsb2NhdGUgc2hhcmVkIG1lbW9yeQorICogQGN0eDoJQ29udGV4dCB0 aGF0IGFsbG9jYXRlcyB0aGUgc2hhcmVkIG1lbW9yeQorICogQHNpemU6CVJlcXVlc3RlZCBzaXpl IG9mIHNoYXJlZCBtZW1vcnkKKyAqIEBmbGFnczoJRmxhZ3Mgc2V0dGluZyBwcm9wZXJ0aWVzIGZv ciB0aGUgcmVxdWVzdGVkIHNoYXJlZCBtZW1vcnkuCisgKgorICogTWVtb3J5IGFsbG9jYXRlZCBh cyBnbG9iYWwgc2hhcmVkIG1lbW9yeSBpcyBhdXRvbWF0aWNhbGx5IGZyZWVkIHdoZW4gdGhlCisg KiBURUUgZmlsZSBwb2ludGVyIGlzIGNsb3NlZC4gVGhlIEBmbGFncyBmaWVsZCB1c2VzIHRoZSBi aXRzIGRlZmluZWQgYnkKKyAqIFRFRV9TSE1fKiBpbiA8bGludXgvdGVlX2Rydi5oPi4gVEVFX1NI TV9NQVBQRUQgbXVzdCBjdXJyZW50bHkgYWx3YXlzIGJlCisgKiBzZXQuIElmIFRFRV9TSE1fRE1B X0JVRiBnbG9iYWwgc2hhcmVkIG1lbW9yeSB3aWxsIGJlIGFsbG9jYXRlZCBhbmQKKyAqIGFzc29j aWF0ZWQgd2l0aCBhIGRtYS1idWYgaGFuZGxlLCBlbHNlIGRyaXZlciBwcml2YXRlIG1lbW9yeS4K KyAqLworc3RydWN0IHRlZV9zaG0gKnRlZV9zaG1fYWxsb2Moc3RydWN0IHRlZV9jb250ZXh0ICpj dHgsIHNpemVfdCBzaXplLCB1MzIgZmxhZ3MpCit7CisJc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRl diA9IGN0eC0+dGVlZGV2OworCXN0cnVjdCB0ZWVfc2htX3Bvb2xfbWdyICpwb29sbSA9IE5VTEw7 CisJc3RydWN0IHRlZV9zaG0gKnNobTsKKwl2b2lkICpyZXQ7CisJaW50IHJjOworCisJaWYgKCEo ZmxhZ3MgJiBURUVfU0hNX01BUFBFRCkpIHsKKwkJZGV2X2Vycih0ZWVkZXYtPmRldi5wYXJlbnQs CisJCQkib25seSBtYXBwZWQgYWxsb2NhdGlvbnMgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIEVS Ul9QVFIoLUVJTlZBTCk7CisJfQorCisJaWYgKChmbGFncyAmIH4oVEVFX1NITV9NQVBQRUQgfCBU RUVfU0hNX0RNQV9CVUYpKSkgeworCQlkZXZfZXJyKHRlZWRldi0+ZGV2LnBhcmVudCwgImludmFs aWQgc2htIGZsYWdzIDB4JXgiLCBmbGFncyk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwor CX0KKworCWlmICghdGVlX2RldmljZV9nZXQodGVlZGV2KSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJ TlZBTCk7CisKKwlpZiAoIXRlZWRldi0+cG9vbCkgeworCQkvKiB0ZWVkZXYgaGFzIGJlZW4gZGV0 YWNoZWQgZnJvbSBkcml2ZXIgKi8KKwkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBl cnJfZGV2X3B1dDsKKwl9CisKKwlzaG0gPSBremFsbG9jKHNpemVvZigqc2htKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFzaG0pIHsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBlcnJf ZGV2X3B1dDsKKwl9CisKKwlzaG0tPmZsYWdzID0gZmxhZ3M7CisJc2htLT50ZWVkZXYgPSB0ZWVk ZXY7CisJc2htLT5jdHggPSBjdHg7CisJaWYgKGZsYWdzICYgVEVFX1NITV9ETUFfQlVGKQorCQlw b29sbSA9ICZ0ZWVkZXYtPnBvb2wtPmRtYV9idWZfbWdyOworCWVsc2UKKwkJcG9vbG0gPSAmdGVl ZGV2LT5wb29sLT5wcml2YXRlX21ncjsKKworCXJjID0gcG9vbG0tPm9wcy0+YWxsb2MocG9vbG0s IHNobSwgc2l6ZSk7CisJaWYgKHJjKSB7CisJCXJldCA9IEVSUl9QVFIocmMpOworCQlnb3RvIGVy cl9rZnJlZTsKKwl9CisKKwltdXRleF9sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKKwlzaG0tPmlkID0g aWRyX2FsbG9jKCZ0ZWVkZXYtPmlkciwgc2htLCAxLCAwLCBHRlBfS0VSTkVMKTsKKwltdXRleF91 bmxvY2soJnRlZWRldi0+bXV0ZXgpOworCWlmIChzaG0tPmlkIDwgMCkgeworCQlyZXQgPSBFUlJf UFRSKHNobS0+aWQpOworCQlnb3RvIGVycl9wb29sX2ZyZWU7CisJfQorCisJaWYgKGZsYWdzICYg VEVFX1NITV9ETUFfQlVGKSB7CisJCURFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4cF9pbmZv KTsKKworCQlleHBfaW5mby5vcHMgPSAmdGVlX3NobV9kbWFfYnVmX29wczsKKwkJZXhwX2luZm8u c2l6ZSA9IHNobS0+c2l6ZTsKKwkJZXhwX2luZm8uZmxhZ3MgPSBPX1JEV1I7CisJCWV4cF9pbmZv LnByaXYgPSBzaG07CisKKwkJc2htLT5kbWFidWYgPSBkbWFfYnVmX2V4cG9ydCgmZXhwX2luZm8p OworCQlpZiAoSVNfRVJSKHNobS0+ZG1hYnVmKSkgeworCQkJcmV0ID0gRVJSX0NBU1Qoc2htLT5k bWFidWYpOworCQkJZ290byBlcnJfcmVtOworCQl9CisJfQorCW11dGV4X2xvY2soJnRlZWRldi0+ bXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJnNobS0+bGluaywgJmN0eC0+bGlzdF9zaG0pOworCW11 dGV4X3VubG9jaygmdGVlZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gc2htOworZXJyX3JlbToKKwlt dXRleF9sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKKwlpZHJfcmVtb3ZlKCZ0ZWVkZXYtPmlkciwgc2ht LT5pZCk7CisJbXV0ZXhfdW5sb2NrKCZ0ZWVkZXYtPm11dGV4KTsKK2Vycl9wb29sX2ZyZWU6CisJ cG9vbG0tPm9wcy0+ZnJlZShwb29sbSwgc2htKTsKK2Vycl9rZnJlZToKKwlrZnJlZShzaG0pOwor ZXJyX2Rldl9wdXQ6CisJdGVlX2RldmljZV9wdXQodGVlZGV2KTsKKwlyZXR1cm4gcmV0OworfQor RVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9hbGxvYyk7CisKKy8qKgorICogdGVlX3NobV9nZXRf ZmQoKSAtIEluY3JlYXNlIHJlZmVyZW5jZSBjb3VudCBhbmQgcmV0dXJuIGZpbGUgZGVzY3JpcHRv cgorICogQHNobToJU2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqIEByZXR1cm5zIHVzZXIgc3BhY2Ug ZmlsZSBkZXNjcmlwdG9yIHRvIHNoYXJlZCBtZW1vcnkKKyAqLworaW50IHRlZV9zaG1fZ2V0X2Zk KHN0cnVjdCB0ZWVfc2htICpzaG0pCit7CisJdTMyIHJlcV9mbGFncyA9IFRFRV9TSE1fTUFQUEVE IHwgVEVFX1NITV9ETUFfQlVGOworCWludCBmZDsKKworCWlmICgoc2htLT5mbGFncyAmIHJlcV9m bGFncykgIT0gcmVxX2ZsYWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZkID0gZG1hX2J1Zl9m ZChzaG0tPmRtYWJ1ZiwgT19DTE9FWEVDKTsKKwlpZiAoZmQgPj0gMCkKKwkJZ2V0X2RtYV9idWYo c2htLT5kbWFidWYpOworCXJldHVybiBmZDsKK30KKworLyoqCisgKiB0ZWVfc2htX2ZyZWUoKSAt IEZyZWUgc2hhcmVkIG1lbW9yeQorICogQHNobToJSGFuZGxlIHRvIHNoYXJlZCBtZW1vcnkgdG8g ZnJlZQorICovCit2b2lkIHRlZV9zaG1fZnJlZShzdHJ1Y3QgdGVlX3NobSAqc2htKQoreworCS8q CisJICogZG1hX2J1Zl9wdXQoKSBkZWNyZWFzZXMgdGhlIGRtYWJ1ZiByZWZlcmVuY2UgY291bnRl ciBhbmQgd2lsbAorCSAqIGNhbGwgdGVlX3NobV9yZWxlYXNlKCkgd2hlbiB0aGUgbGFzdCByZWZl cmVuY2UgaXMgZ29uZS4KKwkgKgorCSAqIEluIHRoZSBjYXNlIG9mIGRyaXZlciBwcml2YXRlIG1l bW9yeSB3ZSBjYWxsIHRlZV9zaG1fcmVsZWFzZQorCSAqIGRpcmVjdGx5IGluc3RlYWQgYXMgaXQg ZG9lc24ndCBoYXZlIGEgcmVmZXJlbmNlIGNvdW50ZXIuCisJICovCisJaWYgKHNobS0+ZmxhZ3Mg JiBURUVfU0hNX0RNQV9CVUYpCisJCWRtYV9idWZfcHV0KHNobS0+ZG1hYnVmKTsKKwllbHNlCisJ CXRlZV9zaG1fcmVsZWFzZShzaG0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9mcmVl KTsKKworLyoqCisgKiB0ZWVfc2htX3ZhMnBhKCkgLSBHZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBh IHZpcnR1YWwgYWRkcmVzcworICogQHNobToJU2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqIEB2YToJ CVZpcnR1YWwgYWRkcmVzcyB0byB0cmFubHNhdGUKKyAqIEBwYToJCVJldHVybmVkIHBoeXNpY2Fs IGFkZHJlc3MKKyAqIEByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgPCAwIG9uIGZhaWx1cmUKKyAq LworaW50IHRlZV9zaG1fdmEycGEoc3RydWN0IHRlZV9zaG0gKnNobSwgdm9pZCAqdmEsIHBoeXNf YWRkcl90ICpwYSkKK3sKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGluIHRoZSByYW5nZSBvZiB0aGUg c2htICovCisJaWYgKChjaGFyICopdmEgPCAoY2hhciAqKXNobS0+a2FkZHIpCisJCXJldHVybiAt RUlOVkFMOworCWlmICgoY2hhciAqKXZhID49ICgoY2hhciAqKXNobS0+a2FkZHIgKyBzaG0tPnNp emUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB0ZWVfc2htX2dldF9wYSgKKwkJCXNo bSwgKHVuc2lnbmVkIGxvbmcpdmEgLSAodW5zaWduZWQgbG9uZylzaG0tPmthZGRyLCBwYSk7Cit9 CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWVfc2htX3ZhMnBhKTsKKworLyoqCisgKiB0ZWVfc2htX3Bh MnZhKCkgLSBHZXQgdmlydHVhbCBhZGRyZXNzIG9mIGEgcGh5c2ljYWwgYWRkcmVzcworICogQHNo bToJU2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqIEBwYToJCVBoeXNpY2FsIGFkZHJlc3MgdG8gdHJh bmxzYXRlCisgKiBAdmE6CQlSZXR1cm5lZCB2aXJ0dWFsIGFkZHJlc3MKKyAqIEByZXR1cm5zIDAg b24gc3VjY2VzcyBhbmQgPCAwIG9uIGZhaWx1cmUKKyAqLworaW50IHRlZV9zaG1fcGEydmEoc3Ry dWN0IHRlZV9zaG0gKnNobSwgcGh5c19hZGRyX3QgcGEsIHZvaWQgKip2YSkKK3sKKwkvKiBDaGVj ayB0aGF0IHdlJ3JlIGluIHRoZSByYW5nZSBvZiB0aGUgc2htICovCisJaWYgKHBhIDwgc2htLT5w YWRkcikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHBhID49IChzaG0tPnBhZGRyICsgc2htLT5z aXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmEpIHsKKwkJdm9pZCAqdiA9IHRlZV9z aG1fZ2V0X3ZhKHNobSwgcGEgLSBzaG0tPnBhZGRyKTsKKworCQlpZiAoSVNfRVJSKHYpKQorCQkJ cmV0dXJuIFBUUl9FUlIodik7CisJCSp2YSA9IHY7CisJfQorCXJldHVybiAwOworfQorRVhQT1JU X1NZTUJPTF9HUEwodGVlX3NobV9wYTJ2YSk7CisKKy8qKgorICogdGVlX3NobV9nZXRfdmEoKSAt IEdldCB2aXJ0dWFsIGFkZHJlc3Mgb2YgYSBzaGFyZWQgbWVtb3J5IHBsdXMgYW4gb2Zmc2V0Cisg KiBAc2htOglTaGFyZWQgbWVtb3J5IGhhbmRsZQorICogQG9mZnM6CU9mZnNldCBmcm9tIHN0YXJ0 IG9mIHRoaXMgc2hhcmVkIG1lbW9yeQorICogQHJldHVybnMgdmlydHVhbCBhZGRyZXNzIG9mIHRo ZSBzaGFyZWQgbWVtb3J5ICsgb2ZmcyBpZiBvZmZzIGlzIHdpdGhpbgorICoJdGhlIGJvdW5kcyBv ZiB0aGlzIHNoYXJlZCBtZW1vcnksIGVsc2UgYW4gRVJSX1BUUgorICovCit2b2lkICp0ZWVfc2ht X2dldF92YShzdHJ1Y3QgdGVlX3NobSAqc2htLCBzaXplX3Qgb2ZmcykKK3sKKwlpZiAob2ZmcyA+ PSBzaG0tPnNpemUpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCXJldHVybiAoY2hhciAq KXNobS0+a2FkZHIgKyBvZmZzOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9nZXRfdmEp OworCisvKioKKyAqIHRlZV9zaG1fZ2V0X3BhKCkgLSBHZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBh IHNoYXJlZCBtZW1vcnkgcGx1cyBhbiBvZmZzZXQKKyAqIEBzaG06CVNoYXJlZCBtZW1vcnkgaGFu ZGxlCisgKiBAb2ZmczoJT2Zmc2V0IGZyb20gc3RhcnQgb2YgdGhpcyBzaGFyZWQgbWVtb3J5Cisg KiBAcGE6CQlQaHlzaWNhbCBhZGRyZXNzIHRvIHJldHVybgorICogQHJldHVybnMgMCBpZiBvZmZz IGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoaXMgc2hhcmVkIG1lbW9yeSwgZWxzZSBhbgorICoJ ZXJyb3IgY29kZS4KKyAqLworaW50IHRlZV9zaG1fZ2V0X3BhKHN0cnVjdCB0ZWVfc2htICpzaG0s IHNpemVfdCBvZmZzLCBwaHlzX2FkZHJfdCAqcGEpCit7CisJaWYgKG9mZnMgPj0gc2htLT5zaXpl KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocGEpCisJCSpwYSA9IHNobS0+cGFkZHIgKyBvZmZz OworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9nZXRfcGEpOworCisv KioKKyAqIHRlZV9zaG1fZ2V0X2Zyb21faWQoKSAtIEZpbmQgc2hhcmVkIG1lbW9yeSBvYmplY3Qg YW5kIGluY3JlYXNlIHJlZmVyZWNlIGNvdW50CisgKiBAY3R4OglDb250ZXh0IG93bmluZyB0aGUg c2hhcmVkIG1lbW9yeQorICogQGlkOgkJSWQgb2Ygc2hhcmVkIG1lbW9yeSBvYmplY3QKKyAqIEBy ZXR1cm5zIGEgcG9pbnRlciB0byAnc3RydWN0IHRlZV9zaG0nIG9uIHN1Y2Nlc3Mgb3IgYW4gRVJS X1BUUiBvbiBmYWlsdXJlCisgKi8KK3N0cnVjdCB0ZWVfc2htICp0ZWVfc2htX2dldF9mcm9tX2lk KHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBpbnQgaWQpCit7CisJc3RydWN0IHRlZV9kZXZpY2Ug KnRlZWRldjsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOworCisJaWYgKCFjdHgpCisJCXJldHVybiBF UlJfUFRSKC1FSU5WQUwpOworCisJdGVlZGV2ID0gY3R4LT50ZWVkZXY7CisJbXV0ZXhfbG9jaygm dGVlZGV2LT5tdXRleCk7CisJc2htID0gaWRyX2ZpbmQoJnRlZWRldi0+aWRyLCBpZCk7CisJaWYg KCFzaG0gfHwgc2htLT5jdHggIT0gY3R4KQorCQlzaG0gPSBFUlJfUFRSKC1FSU5WQUwpOworCWVs c2UgaWYgKHNobS0+ZmxhZ3MgJiBURUVfU0hNX0RNQV9CVUYpCisJCWdldF9kbWFfYnVmKHNobS0+ ZG1hYnVmKTsKKwltdXRleF91bmxvY2soJnRlZWRldi0+bXV0ZXgpOworCXJldHVybiBzaG07Cit9 CitFWFBPUlRfU1lNQk9MX0dQTCh0ZWVfc2htX2dldF9mcm9tX2lkKTsKKworLyoqCisgKiB0ZWVf c2htX2dldF9pZCgpIC0gR2V0IGlkIG9mIGEgc2hhcmVkIG1lbW9yeSBvYmplY3QKKyAqIEBzaG06 CVNoYXJlZCBtZW1vcnkgaGFuZGxlCisgKiBAcmV0dXJucyBpZAorICovCitpbnQgdGVlX3NobV9n ZXRfaWQoc3RydWN0IHRlZV9zaG0gKnNobSkKK3sKKwlyZXR1cm4gc2htLT5pZDsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKHRlZV9zaG1fZ2V0X2lkKTsKKworLyoqCisgKiB0ZWVfc2htX3B1dCgpIC0g RGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50IG9uIGEgc2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqIEBz aG06CVNoYXJlZCBtZW1vcnkgaGFuZGxlCisgKi8KK3ZvaWQgdGVlX3NobV9wdXQoc3RydWN0IHRl ZV9zaG0gKnNobSkKK3sKKwlpZiAoc2htLT5mbGFncyAmIFRFRV9TSE1fRE1BX0JVRikKKwkJZG1h X2J1Zl9wdXQoc2htLT5kbWFidWYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9wdXQp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWUvdGVlX3NobV9wb29sLmMgYi9kcml2ZXJzL3RlZS90 ZWVfc2htX3Bvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZi NGY4NTIyYTUyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGVlL3RlZV9zaG1fcG9vbC5j CkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBMaW5hcm8gTGlt aXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVk LCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmFsbG9jLmg+CisjaW5j bHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RlZV9kcnYuaD4KKyNpbmNsdWRl ICJ0ZWVfcHJpdmF0ZS5oIgorCitzdGF0aWMgaW50IHBvb2xfb3BfZ2VuX2FsbG9jKHN0cnVjdCB0 ZWVfc2htX3Bvb2xfbWdyICpwb29sbSwKKwkJCSAgICAgc3RydWN0IHRlZV9zaG0gKnNobSwgc2l6 ZV90IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyB2YTsKKwlzdHJ1Y3QgZ2VuX3Bvb2wgKmdlbnBv b2wgPSBwb29sbS0+cHJpdmF0ZV9kYXRhOworCXNpemVfdCBzID0gcm91bmR1cChzaXplLCAxIDw8 IGdlbnBvb2wtPm1pbl9hbGxvY19vcmRlcik7CisKKwl2YSA9IGdlbl9wb29sX2FsbG9jKGdlbnBv b2wsIHMpOworCWlmICghdmEpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KCh2b2lkICop dmEsIDAsIHMpOworCXNobS0+a2FkZHIgPSAodm9pZCAqKXZhOworCXNobS0+cGFkZHIgPSBnZW5f cG9vbF92aXJ0X3RvX3BoeXMoZ2VucG9vbCwgdmEpOworCXNobS0+c2l6ZSA9IHM7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvb2xfb3BfZ2VuX2ZyZWUoc3RydWN0IHRlZV9zaG1fcG9v bF9tZ3IgKnBvb2xtLAorCQkJICAgICBzdHJ1Y3QgdGVlX3NobSAqc2htKQoreworCWdlbl9wb29s X2ZyZWUocG9vbG0tPnByaXZhdGVfZGF0YSwgKHVuc2lnbmVkIGxvbmcpc2htLT5rYWRkciwKKwkJ ICAgICAgc2htLT5zaXplKTsKKwlzaG0tPmthZGRyID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCB0ZWVfc2htX3Bvb2xfbWdyX29wcyBwb29sX29wc19nZW5lcmljID0geworCS5hbGxv YyA9IHBvb2xfb3BfZ2VuX2FsbG9jLAorCS5mcmVlID0gcG9vbF9vcF9nZW5fZnJlZSwKK307CisK K3N0YXRpYyB2b2lkIHBvb2xfcmVzX21lbV9kZXN0cm95KHN0cnVjdCB0ZWVfc2htX3Bvb2wgKnBv b2wpCit7CisJZ2VuX3Bvb2xfZGVzdHJveShwb29sLT5wcml2YXRlX21nci5wcml2YXRlX2RhdGEp OworCWdlbl9wb29sX2Rlc3Ryb3kocG9vbC0+ZG1hX2J1Zl9tZ3IucHJpdmF0ZV9kYXRhKTsKK30K Kworc3RhdGljIGludCBwb29sX3Jlc19tZW1fbWdyX2luaXQoc3RydWN0IHRlZV9zaG1fcG9vbF9t Z3IgKm1nciwKKwkJCQkgc3RydWN0IHRlZV9zaG1fcG9vbF9tZW1faW5mbyAqaW5mbywKKwkJCQkg aW50IG1pbl9hbGxvY19vcmRlcikKK3sKKwlzaXplX3QgcGFnZV9tYXNrID0gUEFHRV9TSVpFIC0g MTsKKwlzdHJ1Y3QgZ2VuX3Bvb2wgKmdlbnBvb2wgPSBOVUxMOworCWludCByYzsKKworCS8qCisJ ICogU3RhcnQgYW5kIGVuZCBtdXN0IGJlIHBhZ2UgYWxpZ25lZAorCSAqLworCWlmICgoaW5mby0+ dmFkZHIgJiBwYWdlX21hc2spIHx8IChpbmZvLT5wYWRkciAmIHBhZ2VfbWFzaykgfHwKKwkgICAg KGluZm8tPnNpemUgJiBwYWdlX21hc2spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdlbnBvb2wg PSBnZW5fcG9vbF9jcmVhdGUobWluX2FsbG9jX29yZGVyLCAtMSk7CisJaWYgKCFnZW5wb29sKQor CQlyZXR1cm4gLUVOT01FTTsKKworCWdlbl9wb29sX3NldF9hbGdvKGdlbnBvb2wsIGdlbl9wb29s X2Jlc3RfZml0LCBOVUxMKTsKKwlyYyA9IGdlbl9wb29sX2FkZF92aXJ0KGdlbnBvb2wsIGluZm8t PnZhZGRyLCBpbmZvLT5wYWRkciwgaW5mby0+c2l6ZSwKKwkJCSAgICAgICAtMSk7CisJaWYgKHJj KSB7CisJCWdlbl9wb29sX2Rlc3Ryb3koZ2VucG9vbCk7CisJCXJldHVybiByYzsKKwl9CisKKwlt Z3ItPnByaXZhdGVfZGF0YSA9IGdlbnBvb2w7CisJbWdyLT5vcHMgPSAmcG9vbF9vcHNfZ2VuZXJp YzsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0ZWVfc2htX3Bvb2xfYWxsb2NfcmVzX21lbSgp IC0gQ3JlYXRlIGEgc2hhcmVkIG1lbW9yeSBwb29sIGZyb20gcmVzZXJ2ZWQKKyAqIG1lbW9yeSBy YW5nZQorICogQHByaXZfaW5mbzoJSW5mb3JtYXRpb24gZm9yIGRyaXZlciBwcml2YXRlIHNoYXJl ZCBtZW1vcnkgcG9vbAorICogQGRtYWJ1Zl9pbmZvOiBJbmZvcm1hdGlvbiBmb3IgZG1hLWJ1ZiBz aGFyZWQgbWVtb3J5IHBvb2wKKyAqCisgKiBTdGFydCBhbmQgZW5kIG9mIHBvb2xzIHdpbGwgbXVz dCBiZSBwYWdlIGFsaWduZWQuCisgKgorICogQWxsb2NhdGlvbiB3aXRoIHRoZSBmbGFnIFRFRV9T SE1fRE1BX0JVRiBzZXQgd2lsbCB1c2UgdGhlIHJhbmdlIHN1cHBsaWVkCisgKiBpbiBAZG1hYnVm LCBvdGhlcnMgd2lsbCB1c2UgdGhlIHJhbmdlIHByb3ZpZGVkIGJ5IEBwcml2LgorICoKKyAqIEBy ZXR1cm5zIHBvaW50ZXIgdG8gYSAnc3RydWN0IHRlZV9zaG1fcG9vbCcgb3IgYW4gRVJSX1BUUiBv biBmYWlsdXJlLgorICovCitzdHJ1Y3QgdGVlX3NobV9wb29sICoKK3RlZV9zaG1fcG9vbF9hbGxv Y19yZXNfbWVtKHN0cnVjdCB0ZWVfc2htX3Bvb2xfbWVtX2luZm8gKnByaXZfaW5mbywKKwkJCSAg IHN0cnVjdCB0ZWVfc2htX3Bvb2xfbWVtX2luZm8gKmRtYWJ1Zl9pbmZvKQoreworCXN0cnVjdCB0 ZWVfc2htX3Bvb2wgKnBvb2wgPSBOVUxMOworCWludCByZXQ7CisKKwlwb29sID0ga3phbGxvYyhz aXplb2YoKnBvb2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvb2wpIHsKKwkJcmV0ID0gLUVOT01F TTsKKwkJZ290byBlcnI7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgdGhlIHBvb2wgZm9yIGRyaXZl ciBwcml2YXRlIHNoYXJlZCBtZW1vcnkKKwkgKi8KKwlyZXQgPSBwb29sX3Jlc19tZW1fbWdyX2lu aXQoJnBvb2wtPnByaXZhdGVfbWdyLCBwcml2X2luZm8sCisJCQkJICAgIDMgLyogOCBieXRlIGFs aWduZWQgKi8pOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJLyoKKwkgKiBDcmVhdGUgdGhl IHBvb2wgZm9yIGRtYV9idWYgc2hhcmVkIG1lbW9yeQorCSAqLworCXJldCA9IHBvb2xfcmVzX21l bV9tZ3JfaW5pdCgmcG9vbC0+ZG1hX2J1Zl9tZ3IsIGRtYWJ1Zl9pbmZvLAorCQkJCSAgICBQQUdF X1NISUZUKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXBvb2wtPmRlc3Ryb3kgPSBwb29s X3Jlc19tZW1fZGVzdHJveTsKKwlyZXR1cm4gcG9vbDsKK2VycjoKKwlpZiAocmV0ID09IC1FTk9N RU0pCisJCXByX2VycigiJXM6IGNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVzX21lbSBzaGFy ZWQgbWVtb3J5IHBvb2xcbiIsIF9fZnVuY19fKTsKKwlpZiAocG9vbCAmJiBwb29sLT5wcml2YXRl X21nci5wcml2YXRlX2RhdGEpCisJCWdlbl9wb29sX2Rlc3Ryb3kocG9vbC0+cHJpdmF0ZV9tZ3Iu cHJpdmF0ZV9kYXRhKTsKKwlrZnJlZShwb29sKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQor RVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9wb29sX2FsbG9jX3Jlc19tZW0pOworCisvKioKKyAq IHRlZV9zaG1fcG9vbF9mcmVlKCkgLSBGcmVlIGEgc2hhcmVkIG1lbW9yeSBwb29sCisgKiBAcG9v bDoJVGhlIHNoYXJlZCBtZW1vcnkgcG9vbCB0byBmcmVlCisgKgorICogVGhlcmUgbXVzdCBiZSBu byByZW1haW5pbmcgc2hhcmVkIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSB0aGlzIHBvb2wgd2hlbgor ICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKi8KK3ZvaWQgdGVlX3NobV9wb29sX2ZyZWUo c3RydWN0IHRlZV9zaG1fcG9vbCAqcG9vbCkKK3sKKwlwb29sLT5kZXN0cm95KHBvb2wpOworCWtm cmVlKHBvb2wpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGVlX3NobV9wb29sX2ZyZWUpOwpkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZWVfZHJ2LmggYi9pbmNsdWRlL2xpbnV4L3RlZV9kcnYu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjljNjEwNmVmY2JjYQot LS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGVlX2Rydi5oCkBAIC0wLDAgKzEsMjc2 IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIExpbmFybyBMaW1pdGVkCisgKgor ICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1 dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX1RFRV9EUlZfSAorI2RlZmluZSBfX1RFRV9EUlZf SAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNp bmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGVlLmg+CisKKy8qCisgKiBU aGUgZmlsZSBkZXNjcmliZXMgdGhlIEFQSSBwcm92aWRlZCBieSB0aGUgZ2VuZXJpYyBURUUgZHJp dmVyIHRvIHRoZQorICogc3BlY2lmaWMgVEVFIGRyaXZlci4KKyAqLworCisjZGVmaW5lIFRFRV9T SE1fTUFQUEVECQkweDEJLyogTWVtb3J5IG1hcHBlZCBieSB0aGUga2VybmVsICovCisjZGVmaW5l IFRFRV9TSE1fRE1BX0JVRgkJMHgyCS8qIE1lbW9yeSB3aXRoIGRtYS1idWYgaGFuZGxlICovCisK K3N0cnVjdCB0ZWVfZGV2aWNlOworc3RydWN0IHRlZV9zaG07CitzdHJ1Y3QgdGVlX3NobV9wb29s OworCisvKioKKyAqIHN0cnVjdCB0ZWVfY29udGV4dCAtIGRyaXZlciBzcGVjaWZpYyBjb250ZXh0 IG9uIGZpbGUgcG9pbnRlciBkYXRhCisgKiBAdGVlZGV2Oglwb2ludGVyIHRvIHRoaXMgZHJpdmVy cyBzdHJ1Y3QgdGVlX2RldmljZQorICogQGxpc3Rfc2htOglMaXN0IG9mIHNoYXJlZCBtZW1vcnkg b2JqZWN0IG93bmVkIGJ5IHRoaXMgY29udGV4dAorICogQGRhdGE6CWRyaXZlciBzcGVjaWZpYyBj b250ZXh0IGRhdGEsIG1hbmFnZWQgYnkgdGhlIGRyaXZlcgorICovCitzdHJ1Y3QgdGVlX2NvbnRl eHQgeworCXN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXY7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0 X3NobTsKKwl2b2lkICpkYXRhOworfTsKKworc3RydWN0IHRlZV9wYXJhbV9tZW1yZWYgeworCXNp emVfdCBzaG1fb2ZmczsKKwlzaXplX3Qgc2l6ZTsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOworfTsK Kworc3RydWN0IHRlZV9wYXJhbV92YWx1ZSB7CisJdTY0IGE7CisJdTY0IGI7CisJdTY0IGM7Cit9 OworCitzdHJ1Y3QgdGVlX3BhcmFtIHsKKwl1NjQgYXR0cjsKKwl1bmlvbiB7CisJCXN0cnVjdCB0 ZWVfcGFyYW1fbWVtcmVmIG1lbXJlZjsKKwkJc3RydWN0IHRlZV9wYXJhbV92YWx1ZSB2YWx1ZTsK Kwl9IHU7Cit9OworCisvKioKKyAqIHN0cnVjdCB0ZWVfZHJpdmVyX29wcyAtIGRyaXZlciBvcGVy YXRpb25zIHZ0YWJsZQorICogQGdldF92ZXJzaW9uOglyZXR1cm5zIHZlcnNpb24gb2YgZHJpdmVy CisgKiBAb3BlbjoJCWNhbGxlZCB3aGVuIHRoZSBkZXZpY2UgZmlsZSBpcyBvcGVuZWQKKyAqIEBy ZWxlYXNlOgkJcmVsZWFzZSB0aGlzIG9wZW4gZmlsZQorICogQG9wZW5fc2Vzc2lvbjoJb3BlbiBh IG5ldyBzZXNzaW9uCisgKiBAY2xvc2Vfc2Vzc2lvbjoJY2xvc2UgYSBzZXNzaW9uCisgKiBAaW52 b2tlX2Z1bmM6CWludm9rZSBhIHRydXN0ZWQgZnVuY3Rpb24KKyAqIEBjYW5jZWxfcmVxOgkJcmVx dWVzdCBjYW5jZWwgb2YgYW4gb25nb2luZyBpbnZva2Ugb3Igb3BlbgorICogQHN1cHBfcmV2YzoJ CWNhbGxlZCBmb3Igc3VwcGxpY2FudCB0byBnZXQgYSBjb21tYW5kCisgKiBAc3VwcF9zZW5kOgkJ Y2FsbGVkIGZvciBzdXBwbGljYW50IHRvIHNlbmQgYSByZXNwb25zZQorICovCitzdHJ1Y3QgdGVl X2RyaXZlcl9vcHMgeworCXZvaWQgKCpnZXRfdmVyc2lvbikoc3RydWN0IHRlZV9kZXZpY2UgKnRl ZWRldiwKKwkJCSAgICBzdHJ1Y3QgdGVlX2lvY3RsX3ZlcnNpb25fZGF0YSAqdmVycyk7CisJaW50 ICgqb3Blbikoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgpOworCXZvaWQgKCpyZWxlYXNlKShzdHJ1 Y3QgdGVlX2NvbnRleHQgKmN0eCk7CisJaW50ICgqb3Blbl9zZXNzaW9uKShzdHJ1Y3QgdGVlX2Nv bnRleHQgKmN0eCwKKwkJCSAgICBzdHJ1Y3QgdGVlX2lvY3RsX29wZW5fc2Vzc2lvbl9hcmcgKmFy ZywKKwkJCSAgICBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSk7CisJaW50ICgqY2xvc2Vfc2Vzc2lv bikoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHUzMiBzZXNzaW9uKTsKKwlpbnQgKCppbnZva2Vf ZnVuYykoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsCisJCQkgICBzdHJ1Y3QgdGVlX2lvY3RsX2lu dm9rZV9hcmcgKmFyZywKKwkJCSAgIHN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKTsKKwlpbnQgKCpj YW5jZWxfcmVxKShzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyIGNhbmNlbF9pZCwgdTMyIHNl c3Npb24pOworCWludCAoKnN1cHBfcmVjdikoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHUzMiAq ZnVuYywgdTMyICpudW1fcGFyYW1zLAorCQkJIHN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtKTsKKwlp bnQgKCpzdXBwX3NlbmQpKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIgcmV0LCB1MzIgbnVt X3BhcmFtcywKKwkJCSBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSk7Cit9OworCisvKioKKyAqIHN0 cnVjdCB0ZWVfZGVzYyAtIERlc2NyaWJlcyB0aGUgVEVFIGRyaXZlciB0byB0aGUgc3Vic3lzdGVt CisgKiBAbmFtZToJbmFtZSBvZiBkcml2ZXIKKyAqIEBvcHM6CWRyaXZlciBvcGVyYXRpb25zIHZ0 YWJsZQorICogQG93bmVyOgltb2R1bGUgcHJvdmlkaW5nIHRoZSBkcml2ZXIKKyAqIEBmbGFnczoJ RXh0cmEgcHJvcGVydGllcyBvZiBkcml2ZXIsIGRlZmluZWQgYnkgVEVFX0RFU0NfKiBiZWxvdwor ICovCisjZGVmaW5lIFRFRV9ERVNDX1BSSVZJTEVHRUQJMHgxCitzdHJ1Y3QgdGVlX2Rlc2Mgewor CWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IHRlZV9kcml2ZXJfb3BzICpvcHM7CisJ c3RydWN0IG1vZHVsZSAqb3duZXI7CisJdTMyIGZsYWdzOworfTsKKworLyoqCisgKiB0ZWVfZGV2 aWNlX2FsbG9jKCkgLSBBbGxvY2F0ZSBhIG5ldyBzdHJ1Y3QgdGVlX2RldmljZSBpbnN0YW5jZQor ICogQHRlZWRlc2M6CURlc2NyaXB0b3IgZm9yIHRoaXMgZHJpdmVyCisgKiBAZGV2OglQYXJlbnQg ZGV2aWNlIGZvciB0aGlzIGRldmljZQorICogQHBvb2w6CVNoYXJlZCBtZW1vcnkgcG9vbCwgTlVM TCBpZiBub3QgdXNlZAorICogQGRyaXZlcl9kYXRhOiBQcml2YXRlIGRyaXZlciBkYXRhIGZvciB0 aGlzIGRldmljZQorICoKKyAqIEFsbG9jYXRlcyBhIG5ldyBzdHJ1Y3QgdGVlX2RldmljZSBpbnN0 YW5jZS4gVGhlIGRldmljZSBpcworICogcmVtb3ZlZCBieSB0ZWVfZGV2aWNlX3VucmVnaXN0ZXIo KS4KKyAqCisgKiBAcmV0dXJucyBhIHBvaW50ZXIgdG8gYSAnc3RydWN0IHRlZV9kZXZpY2UnIG9y IGFuIEVSUl9QVFIgb24gZmFpbHVyZQorICovCitzdHJ1Y3QgdGVlX2RldmljZSAqdGVlX2Rldmlj ZV9hbGxvYyhjb25zdCBzdHJ1Y3QgdGVlX2Rlc2MgKnRlZWRlc2MsCisJCQkJICAgIHN0cnVjdCBk ZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IHRlZV9zaG1fcG9vbCAqcG9vbCwKKwkJCQkgICAg dm9pZCAqZHJpdmVyX2RhdGEpOworCisvKioKKyAqIHRlZV9kZXZpY2VfcmVnaXN0ZXIoKSAtIFJl Z2lzdGVycyBhIFRFRSBkZXZpY2UKKyAqIEB0ZWVkZXY6CURldmljZSB0byByZWdpc3RlcgorICoK KyAqIHRlZV9kZXZpY2VfdW5yZWdpc3RlcigpIG5lZWQgdG8gYmUgY2FsbGVkIHRvIHJlbW92ZSB0 aGUgQHRlZWRldiBpZgorICogdGhpcyBmdW5jdGlvbiBmYWlscy4KKyAqCisgKiBAcmV0dXJucyA8 IDAgb24gZmFpbHVyZQorICovCitpbnQgdGVlX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgdGVlX2Rl dmljZSAqdGVlZGV2KTsKKworLyoqCisgKiB0ZWVfZGV2aWNlX3VucmVnaXN0ZXIoKSAtIFJlbW92 ZXMgYSBURUUgZGV2aWNlCisgKiBAdGVlZGV2OglEZXZpY2UgdG8gdW5yZWdpc3RlcgorICoKKyAq IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB0byByZW1vdmUgdGhlIEB0ZWVkZXYgZXZl biBpZgorICogdGVlX2RldmljZV9yZWdpc3RlcigpIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuIERv ZXMgbm90aGluZyBpZgorICogQHRlZWRldiBpcyBOVUxMLgorICovCit2b2lkIHRlZV9kZXZpY2Vf dW5yZWdpc3RlcihzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2KTsKKworLyoqCisgKiBzdHJ1Y3Qg dGVlX3NobV9wb29sX21lbV9pbmZvIC0gaG9sZHMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0 ZSBhIHNoYXJlZAorICogbWVtb3J5IHBvb2wKKyAqIEB2YWRkcjoJVmlydHVhbCBhZGRyZXNzIG9m IHN0YXJ0IG9mIHBvb2wKKyAqIEBwYWRkcjoJUGh5c2ljYWwgYWRkcmVzcyBvZiBzdGFydCBvZiBw b29sCisgKiBAc2l6ZToJU2l6ZSBpbiBieXRlcyBvZiB0aGUgcG9vbAorICovCitzdHJ1Y3QgdGVl X3NobV9wb29sX21lbV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCXBoeXNfYWRkcl90 IHBhZGRyOworCXNpemVfdCBzaXplOworfTsKKworLyoqCisgKiB0ZWVfc2htX3Bvb2xfYWxsb2Nf cmVzX21lbSgpIC0gQ3JlYXRlIGEgc2hhcmVkIG1lbW9yeSBwb29sIGZyb20gcmVzZXJ2ZWQKKyAq IG1lbW9yeSByYW5nZQorICogQHByaXZfaW5mbzoJIEluZm9ybWF0aW9uIGZvciBkcml2ZXIgcHJp dmF0ZSBzaGFyZWQgbWVtb3J5IHBvb2wKKyAqIEBkbWFidWZfaW5mbzogSW5mb3JtYXRpb24gZm9y IGRtYS1idWYgc2hhcmVkIG1lbW9yeSBwb29sCisgKgorICogU3RhcnQgYW5kIGVuZCBvZiBwb29s cyB3aWxsIG11c3QgYmUgcGFnZSBhbGlnbmVkLgorICoKKyAqIEFsbG9jYXRpb24gd2l0aCB0aGUg ZmxhZyBURUVfU0hNX0RNQV9CVUYgc2V0IHdpbGwgdXNlIHRoZSByYW5nZSBzdXBwbGllZAorICog aW4gQGRtYWJ1Ziwgb3RoZXJzIHdpbGwgdXNlIHRoZSByYW5nZSBwcm92aWRlZCBieSBAcHJpdi4K KyAqCisgKiBAcmV0dXJucyBwb2ludGVyIHRvIGEgJ3N0cnVjdCB0ZWVfc2htX3Bvb2wnIG9yIGFu IEVSUl9QVFIgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IHRlZV9zaG1fcG9vbCAqCit0ZWVfc2ht X3Bvb2xfYWxsb2NfcmVzX21lbShzdHJ1Y3QgdGVlX3NobV9wb29sX21lbV9pbmZvICpwcml2X2lu Zm8sCisJCQkgICBzdHJ1Y3QgdGVlX3NobV9wb29sX21lbV9pbmZvICpkbWFidWZfaW5mbyk7CisK Ky8qKgorICogdGVlX3NobV9wb29sX2ZyZWUoKSAtIEZyZWUgYSBzaGFyZWQgbWVtb3J5IHBvb2wK KyAqIEBwb29sOglUaGUgc2hhcmVkIG1lbW9yeSBwb29sIHRvIGZyZWUKKyAqCisgKiBUaGUgbXVz dCBiZSBubyByZW1haW5pbmcgc2hhcmVkIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSB0aGlzIHBvb2wg d2hlbgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKi8KK3ZvaWQgdGVlX3NobV9wb29s X2ZyZWUoc3RydWN0IHRlZV9zaG1fcG9vbCAqcG9vbCk7CisKKy8qKgorICogdGVlX2dldF9kcnZk YXRhKCkgLSBSZXR1cm4gZHJpdmVyX2RhdGEgcG9pbnRlcgorICogQHJldHVybnMgdGhlIGRyaXZl cl9kYXRhIHBvaW50ZXIgc3VwcGxpZWQgdG8gdGVlX3JlZ2lzdGVyKCkuCisgKi8KK3ZvaWQgKnRl ZV9nZXRfZHJ2ZGF0YShzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2KTsKKworLyoqCisgKiB0ZWVf c2htX2FsbG9jKCkgLSBBbGxvY2F0ZSBzaGFyZWQgbWVtb3J5CisgKiBAY3R4OglDb250ZXh0IHRo YXQgYWxsb2NhdGVzIHRoZSBzaGFyZWQgbWVtb3J5CisgKiBAc2l6ZToJUmVxdWVzdGVkIHNpemUg b2Ygc2hhcmVkIG1lbW9yeQorICogQGZsYWdzOglGbGFncyBzZXR0aW5nIHByb3BlcnRpZXMgZm9y IHRoZSByZXF1ZXN0ZWQgc2hhcmVkIG1lbW9yeS4KKyAqCisgKiBNZW1vcnkgYWxsb2NhdGVkIGFz IGdsb2JhbCBzaGFyZWQgbWVtb3J5IGlzIGF1dG9tYXRpY2FsbHkgZnJlZWQgd2hlbiB0aGUKKyAq IFRFRSBmaWxlIHBvaW50ZXIgaXMgY2xvc2VkLiBUaGUgQGZsYWdzIGZpZWxkIHVzZXMgdGhlIGJp dHMgZGVmaW5lZCBieQorICogVEVFX1NITV8qIGFib3ZlLiBURUVfU0hNX01BUFBFRCBtdXN0IGN1 cnJlbnRseSBhbHdheXMgYmUgc2V0LiBJZgorICogVEVFX1NITV9ETUFfQlVGIGdsb2JhbCBzaGFy ZWQgbWVtb3J5IHdpbGwgYmUgYWxsb2NhdGVkIGFuZCBhc3NvY2lhdGVkCisgKiB3aXRoIGEgZG1h LWJ1ZiBoYW5kbGUsIGVsc2UgZHJpdmVyIHByaXZhdGUgbWVtb3J5LgorICoKKyAqIEByZXR1cm5z IGEgcG9pbnRlciB0byAnc3RydWN0IHRlZV9zaG0nCisgKi8KK3N0cnVjdCB0ZWVfc2htICp0ZWVf c2htX2FsbG9jKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBzaXplX3Qgc2l6ZSwgdTMyIGZsYWdz KTsKKworLyoqCisgKiB0ZWVfc2htX2ZyZWUoKSAtIEZyZWUgc2hhcmVkIG1lbW9yeQorICogQHNo bToJSGFuZGxlIHRvIHNoYXJlZCBtZW1vcnkgdG8gZnJlZQorICovCit2b2lkIHRlZV9zaG1fZnJl ZShzdHJ1Y3QgdGVlX3NobSAqc2htKTsKKworLyoqCisgKiB0ZWVfc2htX3B1dCgpIC0gRGVjcmVh c2UgcmVmZXJlbmNlIGNvdW50IG9uIGEgc2hhcmVkIG1lbW9yeSBoYW5kbGUKKyAqIEBzaG06CVNo YXJlZCBtZW1vcnkgaGFuZGxlCisgKi8KK3ZvaWQgdGVlX3NobV9wdXQoc3RydWN0IHRlZV9zaG0g KnNobSk7CisKKy8qKgorICogdGVlX3NobV92YTJwYSgpIC0gR2V0IHBoeXNpY2FsIGFkZHJlc3Mg b2YgYSB2aXJ0dWFsIGFkZHJlc3MKKyAqIEBzaG06CVNoYXJlZCBtZW1vcnkgaGFuZGxlCisgKiBA dmE6CQlWaXJ0dWFsIGFkZHJlc3MgdG8gdHJhbmxzYXRlCisgKiBAcGE6CQlSZXR1cm5lZCBwaHlz aWNhbCBhZGRyZXNzCisgKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIDwgMCBvbiBmYWlsdXJl CisgKi8KK2ludCB0ZWVfc2htX3ZhMnBhKHN0cnVjdCB0ZWVfc2htICpzaG0sIHZvaWQgKnZhLCBw aHlzX2FkZHJfdCAqcGEpOworCisvKioKKyAqIHRlZV9zaG1fcGEydmEoKSAtIEdldCB2aXJ0dWFs IGFkZHJlc3Mgb2YgYSBwaHlzaWNhbCBhZGRyZXNzCisgKiBAc2htOglTaGFyZWQgbWVtb3J5IGhh bmRsZQorICogQHBhOgkJUGh5c2ljYWwgYWRkcmVzcyB0byB0cmFubHNhdGUKKyAqIEB2YToJCVJl dHVybmVkIHZpcnR1YWwgYWRkcmVzcworICogQHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCA8IDAg b24gZmFpbHVyZQorICovCitpbnQgdGVlX3NobV9wYTJ2YShzdHJ1Y3QgdGVlX3NobSAqc2htLCBw aHlzX2FkZHJfdCBwYSwgdm9pZCAqKnZhKTsKKworLyoqCisgKiB0ZWVfc2htX2dldF92YSgpIC0g R2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBhIHNoYXJlZCBtZW1vcnkgcGx1cyBhbiBvZmZzZXQKKyAq IEBzaG06CVNoYXJlZCBtZW1vcnkgaGFuZGxlCisgKiBAb2ZmczoJT2Zmc2V0IGZyb20gc3RhcnQg b2YgdGhpcyBzaGFyZWQgbWVtb3J5CisgKiBAcmV0dXJucyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhl IHNoYXJlZCBtZW1vcnkgKyBvZmZzIGlmIG9mZnMgaXMgd2l0aGluCisgKgl0aGUgYm91bmRzIG9m IHRoaXMgc2hhcmVkIG1lbW9yeSwgZWxzZSBhbiBFUlJfUFRSCisgKi8KK3ZvaWQgKnRlZV9zaG1f Z2V0X3ZhKHN0cnVjdCB0ZWVfc2htICpzaG0sIHNpemVfdCBvZmZzKTsKKworLyoqCisgKiB0ZWVf c2htX2dldF9wYSgpIC0gR2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBzaGFyZWQgbWVtb3J5IHBs dXMgYW4gb2Zmc2V0CisgKiBAc2htOglTaGFyZWQgbWVtb3J5IGhhbmRsZQorICogQG9mZnM6CU9m ZnNldCBmcm9tIHN0YXJ0IG9mIHRoaXMgc2hhcmVkIG1lbW9yeQorICogQHBhOgkJUGh5c2ljYWwg YWRkcmVzcyB0byByZXR1cm4KKyAqIEByZXR1cm5zIDAgaWYgb2ZmcyBpcyB3aXRoaW4gdGhlIGJv dW5kcyBvZiB0aGlzIHNoYXJlZCBtZW1vcnksIGVsc2UgYW4KKyAqCWVycm9yIGNvZGUuCisgKi8K K2ludCB0ZWVfc2htX2dldF9wYShzdHJ1Y3QgdGVlX3NobSAqc2htLCBzaXplX3Qgb2ZmcywgcGh5 c19hZGRyX3QgKnBhKTsKKworLyoqCisgKiB0ZWVfc2htX2dldF9pZCgpIC0gR2V0IGlkIG9mIGEg c2hhcmVkIG1lbW9yeSBvYmplY3QKKyAqIEBzaG06CVNoYXJlZCBtZW1vcnkgaGFuZGxlCisgKiBA cmV0dXJucyBpZAorICovCitpbnQgdGVlX3NobV9nZXRfaWQoc3RydWN0IHRlZV9zaG0gKnNobSk7 CisKKy8qKgorICogdGVlX3NobV9nZXRfZnJvbV9pZCgpIC0gRmluZCBzaGFyZWQgbWVtb3J5IG9i amVjdCBhbmQgaW5jcmVhc2UgcmVmZXJlY2UgY291bnQKKyAqIEBjdHg6CUNvbnRleHQgb3duaW5n IHRoZSBzaGFyZWQgbWVtb3J5CisgKiBAaWQ6CQlJZCBvZiBzaGFyZWQgbWVtb3J5IG9iamVjdAor ICogQHJldHVybnMgYSBwb2ludGVyIHRvICdzdHJ1Y3QgdGVlX3NobScgb24gc3VjY2VzcyBvciBh biBFUlJfUFRSIG9uIGZhaWx1cmUKKyAqLworc3RydWN0IHRlZV9zaG0gKnRlZV9zaG1fZ2V0X2Zy b21faWQoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIGludCBpZCk7CisKKyNlbmRpZiAvKl9fVEVF X0RSVl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90ZWUuaCBiL2luY2x1ZGUv dWFwaS9saW51eC90ZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjM3MGQ4ODQ1YWIyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC90ZWUu aApAQCAtMCwwICsxLDM0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBMaW5h cm8gTGltaXRlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S UyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S IENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm bmRlZiBfX1RFRV9ICisjZGVmaW5lIF9fVEVFX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+ CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFRoaXMgZmlsZSBkZXNjcmliZXMg dGhlIEFQSSBwcm92aWRlZCBieSBhIFRFRSBkcml2ZXIgdG8gdXNlciBzcGFjZS4KKyAqCisgKiBF YWNoIFRFRSBkcml2ZXIgZGVmaW5lcyBhIFRFRSBzcGVjaWZpYyBwcm90b2NvbCB3aGljaCBpcyB1 c2VkIGZvciB0aGUKKyAqIGRhdGEgcGFzc2VkIGJhY2sgYW5kIGZvcnRoIHVzaW5nIFRFRV9JT0Nf Q01ELgorICovCisKKy8qIEhlbHBlcnMgdG8gbWFrZSB0aGUgaW9jdGwgZGVmaW5lcyAqLworI2Rl ZmluZSBURUVfSU9DX01BR0lDCTB4YTQKKyNkZWZpbmUgVEVFX0lPQ19CQVNFCTAKKworLyogRmxh Z3MgcmVsYXRpbmcgdG8gc2hhcmVkIG1lbW9yeSAqLworI2RlZmluZSBURUVfSU9DVExfU0hNX01B UFBFRAkweDEJLyogbWVtb3J5IG1hcHBlZCBpbiBub3JtYWwgd29ybGQgKi8KKyNkZWZpbmUgVEVF X0lPQ1RMX1NITV9ETUFfQlVGCTB4MgkvKiBkbWEtYnVmIGhhbmRsZSBvbiBzaGFyZWQgbWVtb3J5 ICovCisKKyNkZWZpbmUgVEVFX01BWF9BUkdfU0laRQkxMDI0CisKKyNkZWZpbmUgVEVFX0dFTl9D QVBfR1AJCSgxIDw8IDApLyogR2xvYmFsUGxhdGZvcm0gY29tcGxpYW50IFRFRSAqLworCisvKgor ICogVEVFIEltcGxlbWVudGF0aW9uIElECisgKi8KKyNkZWZpbmUgVEVFX0lNUExfSURfT1BURUUJ MQorCisvKgorICogT1AtVEVFIHNwZWNpZmljIGNhcGFiaWxpdGllcworICovCisjZGVmaW5lIFRF RV9PUFRFRV9DQVBfVFoJKDEgPDwgMCkKKworLyoqCisgKiBzdHJ1Y3QgdGVlX2lvY3RsX3ZlcnNp b25fZGF0YSAtIFRFRSB2ZXJzaW9uCisgKiBAaW1wbF9pZDoJW291dF0gVEVFIGltcGxlbWVudGF0 aW9uIGlkCisgKiBAaW1wbF9jYXBzOglbb3V0XSBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBjYXBh YmlsaXRpZXMKKyAqIEBnZW5fY2FwczoJW291dF0gR2VuZXJpYyBjYXBhYmlsaXRpZXMsIGRlZmlu ZWQgYnkgVEVFX0dFTl9DQVBTXyogYWJvdmUKKyAqCisgKiBJZGVudGlmaWVzIHRoZSBURUUgaW1w bGVtZW50YXRpb24sIEBpbXBsX2lkIGlzIG9uZSBvZiBURUVfSU1QTF9JRF8qIGFib3ZlLgorICog QGltcGxfY2FwcyBpcyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYywgZm9yIGV4YW1wbGUgVEVFX09Q VEVFX0NBUF8qCisgKiBpcyB2YWxpZCB3aGVuIEBpbXBsX2lkID09IFRFRV9JTVBMX0lEX09QVEVF LgorICovCitzdHJ1Y3QgdGVlX2lvY3RsX3ZlcnNpb25fZGF0YSB7CisJX191MzIgaW1wbF9pZDsK KwlfX3UzMiBpbXBsX2NhcHM7CisJX191MzIgZ2VuX2NhcHM7Cit9OworCisvKioKKyAqIFRFRV9J T0NfVkVSU0lPTiAtIHF1ZXJ5IHZlcnNpb24gb2YgVEVFCisgKgorICogVGFrZXMgYSB0ZWVfaW9j dGxfdmVyc2lvbl9kYXRhIHN0cnVjdCBhbmQgcmV0dXJucyB3aXRoIHRoZSBURUUgdmVyc2lvbgor ICogZGF0YSBmaWxsZWQgaW4uCisgKi8KKyNkZWZpbmUgVEVFX0lPQ19WRVJTSU9OCQlfSU9SKFRF RV9JT0NfTUFHSUMsIFRFRV9JT0NfQkFTRSArIDAsIFwKKwkJCQkgICAgIHN0cnVjdCB0ZWVfaW9j dGxfdmVyc2lvbl9kYXRhKQorCisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jdGxfc2htX2FsbG9jX2Rh dGEgLSBTaGFyZWQgbWVtb3J5IGFsbG9jYXRlIGFyZ3VtZW50CisgKiBAc2l6ZToJW2luL291dF0g U2l6ZSBvZiBzaGFyZWQgbWVtb3J5IHRvIGFsbG9jYXRlCisgKiBAZmxhZ3M6CVtpbi9vdXRdIEZs YWdzIHRvL2Zyb20gYWxsb2NhdGlvbi4KKyAqIEBpZDoJCVtvdXRdIElkZW50aWZpZXIgb2YgdGhl IHNoYXJlZCBtZW1vcnkKKyAqCisgKiBUaGUgZmxhZ3MgZmllbGQgc2hvdWxkIGN1cnJlbnRseSBi ZSB6ZXJvIGFzIGlucHV0LiBVcGRhdGVkIGJ5IHRoZSBjYWxsCisgKiB3aXRoIGFjdHVhbCBmbGFn cyBhcyBkZWZpbmVkIGJ5IFRFRV9JT0NUTF9TSE1fKiBhYm92ZS4KKyAqIFRoaXMgc3RydWN0dXJl IGlzIHVzZWQgYXMgYXJndW1lbnQgZm9yIFRFRV9JT0NfU0hNX0FMTE9DIGJlbG93LgorICovCitz dHJ1Y3QgdGVlX2lvY3RsX3NobV9hbGxvY19kYXRhIHsKKwlfX3U2NCBzaXplOworCV9fdTMyIGZs YWdzOworCV9fczMyIGlkOworfTsKKworLyoqCisgKiBURUVfSU9DX1NITV9BTExPQyAtIGFsbG9j YXRlIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBBbGxvY2F0ZXMgc2hhcmVkIG1lbW9yeSBiZXR3ZWVu IHRoZSB1c2VyIHNwYWNlIHByb2Nlc3MgYW5kIHNlY3VyZSBPUy4KKyAqCisgKiBSZXR1cm5zIGEg ZmlsZSBkZXNjcmlwdG9yIG9uIHN1Y2Nlc3Mgb3IgPCAwIG9uIGZhaWx1cmUKKyAqCisgKiBUaGUg cmV0dXJuZWQgZmlsZSBkZXNjcmlwdG9yIGlzIHVzZWQgdG8gbWFwIHRoZSBzaGFyZWQgbWVtb3J5 IGludG8gdXNlcgorICogc3BhY2UuIFRoZSBzaGFyZWQgbWVtb3J5IGlzIGZyZWVkIHdoZW4gdGhl IGRlc2NyaXB0b3IgaXMgY2xvc2VkIGFuZCB0aGUKKyAqIG1lbW9yeSBpcyB1bm1hcHBlZC4KKyAq LworI2RlZmluZSBURUVfSU9DX1NITV9BTExPQwlfSU9XUihURUVfSU9DX01BR0lDLCBURUVfSU9D X0JBU0UgKyAxLCBcCisJCQkJICAgICBzdHJ1Y3QgdGVlX2lvY3RsX3NobV9hbGxvY19kYXRhKQor CisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgLSBWYXJpYWJsZSBzaXplZCBidWZm ZXIKKyAqIEBidWZfcHRyOglbaW5dIEEgX191c2VyIHBvaW50ZXIgdG8gYSBidWZmZXIKKyAqIEBi dWZfbGVuOglbaW5dIExlbmd0aCBvZiB0aGUgYnVmZmVyIGFib3ZlCisgKgorICogVXNlZCBhcyBh cmd1bWVudCBmb3IgVEVFX0lPQ19PUEVOX1NFU1NJT04sIFRFRV9JT0NfSU5WT0tFLAorICogVEVF X0lPQ19TVVBQTF9SRUNWLCBhbmQgVEVFX0lPQ19TVVBQTF9TRU5EIGJlbG93LgorICovCitzdHJ1 Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIHsKKwlfX3U2NCBidWZfcHRyOworCV9fdTY0IGJ1Zl9sZW47 Cit9OworCisvKgorICogQXR0cmlidXRlcyBmb3Igc3RydWN0IHRlZV9pb2N0bF9wYXJhbSwgc2Vs ZWN0cyBmaWVsZCBpbiB0aGUgdW5pb24KKyAqLworI2RlZmluZSBURUVfSU9DVExfUEFSQU1fQVRU Ul9UWVBFX05PTkUJCTAJLyogcGFyYW1ldGVyIG5vdCB1c2VkICovCisKKy8qCisgKiBUaGVzZSBk ZWZpbmVzIHZhbHVlIHBhcmFtZXRlcnMgKHN0cnVjdCB0ZWVfaW9jdGxfcGFyYW1fdmFsdWUpCisg Ki8KKyNkZWZpbmUgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9JTlBVVAkxCisjZGVm aW5lIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfT1VUUFVUCTIKKyNkZWZpbmUgVEVF X0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9JTk9VVAkzCS8qIGlucHV0IGFuZCBvdXRwdXQg Ki8KKworLyoKKyAqIFRoZXNlIGRlZmluZXMgc2hhcmVkIG1lbW9yeSByZWZlcmVuY2UgcGFyYW1l dGVycyAoc3RydWN0CisgKiB0ZWVfaW9jdGxfcGFyYW1fbWVtcmVmKQorICovCisjZGVmaW5lIFRF RV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOUFVUCTUKKyNkZWZpbmUgVEVFX0lPQ1RM X1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfT1VUUFVUCTYKKyNkZWZpbmUgVEVFX0lPQ1RMX1BBUkFN X0FUVFJfVFlQRV9NRU1SRUZfSU5PVVQJNwkvKiBpbnB1dCBhbmQgb3V0cHV0ICovCisKKy8qCisg KiBNYXNrIGZvciB0aGUgdHlwZSBwYXJ0IG9mIHRoZSBhdHRyaWJ1dGUsIGxlYXZlcyByb29tIGZv ciBtb3JlIHR5cGVzCisgKi8KKyNkZWZpbmUgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NQVNL CQkweGZmCisKKy8qCisgKiBNYXRjaGVzIFRFRUNfTE9HSU5fKiBpbiBHUCBURUUgQ2xpZW50IEFQ SQorICogQXJlIG9ubHkgZGVmaW5lZCBmb3IgR1AgY29tcGxpYW50IFRFRXMKKyAqLworI2RlZmlu ZSBURUVfSU9DVExfTE9HSU5fUFVCTElDCQkJMAorI2RlZmluZSBURUVfSU9DVExfTE9HSU5fVVNF UgkJCTEKKyNkZWZpbmUgVEVFX0lPQ1RMX0xPR0lOX0dST1VQCQkJMgorI2RlZmluZSBURUVfSU9D VExfTE9HSU5fQVBQTElDQVRJT04JCTQKKyNkZWZpbmUgVEVFX0lPQ1RMX0xPR0lOX1VTRVJfQVBQ TElDQVRJT04JNQorI2RlZmluZSBURUVfSU9DVExfTE9HSU5fR1JPVVBfQVBQTElDQVRJT04JNgor CisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jdGxfcGFyYW0gLSBwYXJhbWV0ZXIKKyAqIEBhdHRyOiBh dHRyaWJ1dGVzCisgKiBAYTogaWYgYSBtZW1yZWYsIG9mZnNldCBpbnRvIHRoZSBzaGFyZWQgbWVt b3J5IG9iamVjdCwgZWxzZSBhIHZhbHVlIHBhcmFtZXRlcgorICogQGI6IGlmIGEgbWVtcmVmLCBz aXplIG9mIHRoZSBidWZmZXIsIGVsc2UgYSB2YWx1ZSBwYXJhbWV0ZXIKKyAqIEBjOiBpZiBhIG1l bXJlZiwgc2hhcmVkIG1lbW9yeSBpZGVudGlmaWVyLCBlbHNlIGEgdmFsdWUgcGFyYW1ldGVyCisg KgorICogQGF0dHIgJiBURUVfUEFSQU1fQVRUUl9UWVBFX01BU0sgaW5kaWNhdGVzIGlmIG1lbXJl ZiBvciB2YWx1ZSBpcyB1c2VkIGluCisgKiB0aGUgdW5pb24uIFRFRV9QQVJBTV9BVFRSX1RZUEVf VkFMVUVfKiBpbmRpY2F0ZXMgdmFsdWUgYW5kCisgKiBURUVfUEFSQU1fQVRUUl9UWVBFX01FTVJF Rl8qIGluZGljYXRlcyBtZW1yZWYuIFRFRV9QQVJBTV9BVFRSX1RZUEVfTk9ORQorICogaW5kaWNh dGVzIHRoYXQgbm9uZSBvZiB0aGUgbWVtYmVycyBhcmUgdXNlZC4KKyAqCisgKiBTaGFyZWQgbWVt b3J5IGlzIGFsbG9jYXRlZCB3aXRoIFRFRV9JT0NfU0hNX0FMTE9DIHdoaWNoIHJldHVybnMgYW4K KyAqIGlkZW50aWZpZXIgcmVwcmVzZW50aW5nIHRoZSBzaGFyZWQgbWVtb3J5IG9iamVjdC4gQSBt ZW1yZWYgY2FuIHJlZmVyZW5jZQorICogYSBwYXJ0IG9mIGEgc2hhcmVkIG1lbW9yeSBieSBzcGVj aWZ5aW5nIGFuIG9mZnNldCAoQGEpIGFuZCBzaXplIChAYikgb2YKKyAqIHRoZSBvYmplY3QuIFRv IHN1cHBseSB0aGUgZW50aXJlIHNoYXJlZCBtZW1vcnkgb2JqZWN0IHNldCB0aGUgb2Zmc2V0Cisg KiAoQGEpIHRvIDAgYW5kIHNpemUgKEBiKSB0byB0aGUgcHJldmlvdXNseSByZXR1cm5lZCBzaXpl IG9mIHRoZSBvYmplY3QuCisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfcGFyYW0geworCV9fdTY0IGF0 dHI7CisJX191NjQgYTsKKwlfX3U2NCBiOworCV9fdTY0IGM7Cit9OworCisjZGVmaW5lIFRFRV9J T0NUTF9VVUlEX0xFTgkJMTYKKworLyoqCisgKiBzdHJ1Y3QgdGVlX2lvY3RsX29wZW5fc2Vzc2lv bl9hcmcgLSBPcGVuIHNlc3Npb24gYXJndW1lbnQKKyAqIEB1dWlkOglbaW5dIFVVSUQgb2YgdGhl IFRydXN0ZWQgQXBwbGljYXRpb24KKyAqIEBjbG50X3V1aWQ6CVtpbl0gVVVJRCBvZiBjbGllbnQK KyAqIEBjbG50X2xvZ2luOglbaW5dIExvZ2luIGNsYXNzIG9mIGNsaWVudCwgVEVFX0lPQ1RMX0xP R0lOXyogYWJvdmUKKyAqIEBjYW5jZWxfaWQ6CVtpbl0gQ2FuY2VsbGF0aW9uIGlkLCBhIHVuaXF1 ZSB2YWx1ZSB0byBpZGVudGlmeSB0aGlzIHJlcXVlc3QKKyAqIEBzZXNzaW9uOglbb3V0XSBTZXNz aW9uIGlkCisgKiBAcmV0Oglbb3V0XSByZXR1cm4gdmFsdWUKKyAqIEByZXRfb3JpZ2luCVtvdXRd IG9yaWdpbiBvZiB0aGUgcmV0dXJuIHZhbHVlCisgKiBAbnVtX3BhcmFtcwlbaW5dIG51bWJlciBv ZiBwYXJhbWV0ZXJzIGZvbGxvd2luZyB0aGlzIHN0cnVjdAorICovCitzdHJ1Y3QgdGVlX2lvY3Rs X29wZW5fc2Vzc2lvbl9hcmcgeworCV9fdTggdXVpZFtURUVfSU9DVExfVVVJRF9MRU5dOworCV9f dTggY2xudF91dWlkW1RFRV9JT0NUTF9VVUlEX0xFTl07CisJX191MzIgY2xudF9sb2dpbjsKKwlf X3UzMiBjYW5jZWxfaWQ7CisJX191MzIgc2Vzc2lvbjsKKwlfX3UzMiByZXQ7CisJX191MzIgcmV0 X29yaWdpbjsKKwlfX3UzMiBudW1fcGFyYW1zOworCS8qIG51bV9wYXJhbXMgdGVsbHMgdGhlIGFj dHVhbCBudW1iZXIgb2YgZWxlbWVudCBpbiBwYXJhbXMgKi8KKwlzdHJ1Y3QgdGVlX2lvY3RsX3Bh cmFtIHBhcmFtc1tdOworfTsKKworLyoqCisgKiBURUVfSU9DX09QRU5fU0VTU0lPTiAtIG9wZW5z IGEgc2Vzc2lvbiB0byBhIFRydXN0ZWQgQXBwbGljYXRpb24KKyAqCisgKiBUYWtlcyBhIHN0cnVj dCB0ZWVfaW9jdGxfYnVmX2RhdGEgd2hpY2ggY29udGFpbnMgYSBzdHJ1Y3QKKyAqIHRlZV9pb2N0 bF9vcGVuX3Nlc3Npb25fYXJnIGZvbGxvd2VkIGJ5IGFueSBhcnJheSBvZiBzdHJ1Y3QKKyAqIHRl ZV9pb2N0bF9wYXJhbQorICovCisjZGVmaW5lIFRFRV9JT0NfT1BFTl9TRVNTSU9OCV9JT1IoVEVF X0lPQ19NQUdJQywgVEVFX0lPQ19CQVNFICsgMiwgXAorCQkJCSAgICAgc3RydWN0IHRlZV9pb2N0 bF9idWZfZGF0YSkKKworLyoqCisgKiBzdHJ1Y3QgdGVlX2lvY3RsX2ludm9rZV9mdW5jX2FyZyAt IEludm9rZXMgYSBmdW5jdGlvbiBpbiBhIFRydXN0ZWQKKyAqIEFwcGxpY2F0aW9uCisgKiBAZnVu YzoJW2luXSBUcnVzdGVkIEFwcGxpY2F0aW9uIGZ1bmN0aW9uLCBzcGVjaWZpYyB0byB0aGUgVEEK KyAqIEBzZXNzaW9uOglbaW5dIFNlc3Npb24gaWQKKyAqIEBjYW5jZWxfaWQ6CVtpbl0gQ2FuY2Vs bGF0aW9uIGlkLCBhIHVuaXF1ZSB2YWx1ZSB0byBpZGVudGlmeSB0aGlzIHJlcXVlc3QKKyAqIEBy ZXQ6CVtvdXRdIHJldHVybiB2YWx1ZQorICogQHJldF9vcmlnaW4JW291dF0gb3JpZ2luIG9mIHRo ZSByZXR1cm4gdmFsdWUKKyAqIEBudW1fcGFyYW1zCVtpbl0gbnVtYmVyIG9mIHBhcmFtZXRlcnMg Zm9sbG93aW5nIHRoaXMgc3RydWN0CisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfaW52b2tlX2FyZyB7 CisJX191MzIgZnVuYzsKKwlfX3UzMiBzZXNzaW9uOworCV9fdTMyIGNhbmNlbF9pZDsKKwlfX3Uz MiByZXQ7CisJX191MzIgcmV0X29yaWdpbjsKKwlfX3UzMiBudW1fcGFyYW1zOworCS8qIG51bV9w YXJhbXMgdGVsbHMgdGhlIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudCBpbiBwYXJhbXMgKi8KKwlz dHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIHBhcmFtc1tdOworfTsKKworLyoqCisgKiBURUVfSU9DX0lO Vk9LRSAtIEludm9rZXMgYSBmdW5jdGlvbiBpbiBhIFRydXN0ZWQgQXBwbGljYXRpb24KKyAqCisg KiBUYWtlcyBhIHN0cnVjdCB0ZWVfaW9jdGxfYnVmX2RhdGEgd2hpY2ggY29udGFpbnMgYSBzdHJ1 Y3QKKyAqIHRlZV9pbnZva2VfZnVuY19hcmcgZm9sbG93ZWQgYnkgYW55IGFycmF5IG9mIHN0cnVj dCB0ZWVfcGFyYW0KKyAqLworI2RlZmluZSBURUVfSU9DX0lOVk9LRQkJX0lPUihURUVfSU9DX01B R0lDLCBURUVfSU9DX0JBU0UgKyAzLCBcCisJCQkJICAgICBzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9k YXRhKQorCisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jdGxfY2FuY2VsX2FyZyAtIENhbmNlbHMgYW4g b3BlbiBzZXNzaW9uIG9yIGludm9rZSBpb2N0bAorICogQGNhbmNlbF9pZDoJW2luXSBDYW5jZWxs YXRpb24gaWQsIGEgdW5pcXVlIHZhbHVlIHRvIGlkZW50aWZ5IHRoaXMgcmVxdWVzdAorICogQHNl c3Npb246CVtpbl0gU2Vzc2lvbiBpZCwgaWYgdGhlIHNlc3Npb24gaXMgb3BlbmVkLCBlbHNlIHNl dCB0byAwCisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfY2FuY2VsX2FyZyB7CisJX191MzIgY2FuY2Vs X2lkOworCV9fdTMyIHNlc3Npb247Cit9OworCisvKioKKyAqIFRFRV9JT0NfQ0FOQ0VMIC0gQ2Fu Y2VscyBhbiBvcGVuIHNlc3Npb24gb3IgaW52b2tlCisgKi8KKyNkZWZpbmUgVEVFX0lPQ19DQU5D RUwJCV9JT1IoVEVFX0lPQ19NQUdJQywgVEVFX0lPQ19CQVNFICsgNCwgXAorCQkJCSAgICAgc3Ry dWN0IHRlZV9pb2N0bF9jYW5jZWxfYXJnKQorCisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jdGxfY2xv c2Vfc2Vzc2lvbl9hcmcgLSBDbG9zZXMgYW4gb3BlbiBzZXNzaW9uCisgKiBAc2Vzc2lvbjoJW2lu XSBTZXNzaW9uIGlkCisgKi8KK3N0cnVjdCB0ZWVfaW9jdGxfY2xvc2Vfc2Vzc2lvbl9hcmcgewor CV9fdTMyIHNlc3Npb247Cit9OworCisvKioKKyAqIFRFRV9JT0NfQ0xPU0VfU0VTU0lPTiAtIENs b3NlcyBhIHNlc3Npb24KKyAqLworI2RlZmluZSBURUVfSU9DX0NMT1NFX1NFU1NJT04JX0lPUihU RUVfSU9DX01BR0lDLCBURUVfSU9DX0JBU0UgKyA1LCBcCisJCQkJICAgICBzdHJ1Y3QgdGVlX2lv Y3RsX2Nsb3NlX3Nlc3Npb25fYXJnKQorCisvKioKKyAqIHN0cnVjdCB0ZWVfaW9jbF9zdXBwX3Jl Y3ZfYXJnIC0gUmVjZWl2ZSBhIHJlcXVlc3QgZm9yIGEgc3VwcGxpY2FudCBmdW5jdGlvbgorICog QGZ1bmM6CVtpbl0gc3VwcGxpY2FudCBmdW5jdGlvbgorICogQG51bV9wYXJhbXMJW2luL291dF0g bnVtYmVyIG9mIHBhcmFtZXRlcnMgZm9sbG93aW5nIHRoaXMgc3RydWN0CisgKgorICogQG51bV9w YXJhbXMgaXMgdGhlIG51bWJlciBvZiBwYXJhbXMgdGhhdCB0ZWUtc3VwcGxpY2FudCBoYXMgcm9v bSB0bworICogcmVjZWl2ZSB3aGVuIGlucHV0LCBAbnVtX3BhcmFtcyBpcyB0aGUgbnVtYmVyIG9m IGFjdHVhbCBwYXJhbXMKKyAqIHRlZS1zdXBwbGljYW50IHJlY2VpdmVzIHdoZW4gb3V0cHV0Lgor ICovCitzdHJ1Y3QgdGVlX2lvY2xfc3VwcF9yZWN2X2FyZyB7CisJX191MzIgZnVuYzsKKwlfX3Uz MiBudW1fcGFyYW1zOworCS8qIG51bV9wYXJhbXMgdGVsbHMgdGhlIGFjdHVhbCBudW1iZXIgb2Yg ZWxlbWVudCBpbiBwYXJhbXMgKi8KKwlzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIHBhcmFtc1tdOwor fTsKKworLyoqCisgKiBURUVfSU9DX1NVUFBMX1JFQ1YgLSBSZWNlaXZlIGEgcmVxdWVzdCBmb3Ig YSBzdXBwbGljYW50IGZ1bmN0aW9uCisgKgorICogVGFrZXMgYSBzdHJ1Y3QgdGVlX2lvY3RsX2J1 Zl9kYXRhIHdoaWNoIGNvbnRhaW5zIGEgc3RydWN0CisgKiB0ZWVfaW9jbF9zdXBwX3JlY3ZfYXJn IGZvbGxvd2VkIGJ5IGFueSBhcnJheSBvZiBzdHJ1Y3QgdGVlX3BhcmFtCisgKi8KKyNkZWZpbmUg VEVFX0lPQ19TVVBQTF9SRUNWCV9JT1IoVEVFX0lPQ19NQUdJQywgVEVFX0lPQ19CQVNFICsgNiwg XAorCQkJCSAgICAgc3RydWN0IHRlZV9pb2N0bF9idWZfZGF0YSkKKworLyoqCisgKiBzdHJ1Y3Qg dGVlX2lvY2xfc3VwcF9zZW5kX2FyZyAtIFNlbmQgYSByZXNwb25zZSB0byBhIHJlY2VpdmVkIHJl cXVlc3QKKyAqIEByZXQ6CVtvdXRdIHJldHVybiB2YWx1ZQorICogQG51bV9wYXJhbXMJW2luXSBu dW1iZXIgb2YgcGFyYW1ldGVycyBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3QKKyAqLworc3RydWN0IHRl ZV9pb2NsX3N1cHBfc2VuZF9hcmcgeworCV9fdTMyIHJldDsKKwlfX3UzMiBudW1fcGFyYW1zOwor CS8qIG51bV9wYXJhbXMgdGVsbHMgdGhlIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudCBpbiBwYXJh bXMgKi8KKwlzdHJ1Y3QgdGVlX2lvY3RsX3BhcmFtIHBhcmFtc1tdOworfTsKKworLyoqCisgKiBU RUVfSU9DX1NVUFBMX1NFTkQgLSBSZWNlaXZlIGEgcmVxdWVzdCBmb3IgYSBzdXBwbGljYW50IGZ1 bmN0aW9uCisgKgorICogVGFrZXMgYSBzdHJ1Y3QgdGVlX2lvY3RsX2J1Zl9kYXRhIHdoaWNoIGNv bnRhaW5zIGEgc3RydWN0CisgKiB0ZWVfaW9jbF9zdXBwX3NlbmRfYXJnIGZvbGxvd2VkIGJ5IGFu eSBhcnJheSBvZiBzdHJ1Y3QgdGVlX3BhcmFtCisgKi8KKyNkZWZpbmUgVEVFX0lPQ19TVVBQTF9T RU5ECV9JT1IoVEVFX0lPQ19NQUdJQywgVEVFX0lPQ19CQVNFICsgNywgXAorCQkJCSAgICAgc3Ry dWN0IHRlZV9pb2N0bF9idWZfZGF0YSkKKworLyoKKyAqIEZpdmUgc3lzY2FsbHMgYXJlIHVzZWQg d2hlbiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIFRFRSBkcml2ZXIuCisgKiBvcGVuKCk6IG9wZW5z IHRoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBkcml2ZXIKKyAqIGlvY3RsKCk6IGFzIGRl c2NyaWJlZCBhYm92ZSBvcGVyYXRpbmcgb24gdGhlIGZpbGUgZGVzY3JpcHRvciBmcm9tIG9wZW4o KQorICogY2xvc2UoKTogdHdvIGNhc2VzCisgKiAgIC0gY2xvc2VzIHRoZSBkZXZpY2UgZmlsZSBk ZXNjcmlwdG9yCisgKiAgIC0gY2xvc2VzIGEgZmlsZSBkZXNjcmlwdG9yIGNvbm5lY3RlZCB0byBh bGxvY2F0ZWQgc2hhcmVkIG1lbW9yeQorICogbW1hcCgpOiBtYXBzIHNoYXJlZCBtZW1vcnkgaW50 byB1c2VyIHNwYWNlIHVzaW5nIGluZm9ybWF0aW9uIGZyb20gc3RydWN0CisgKgkgICB0ZWVfaW9j dGxfc2htX2FsbG9jX2RhdGEKKyAqIG11bm1hcCgpOiB1bm1hcHMgcHJldmlvdXNseSBzaGFyZWQg bWVtb3J5CisgKi8KKworI2VuZGlmIC8qX19URUVfSCovCi0tIAoyLjcuNAoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK