From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v15 2/8] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Wed, 27 Apr 2016 17:05:46 +0200 Message-ID: <1461769552-2752-3-git-send-email-p.zabel@pengutronix.de> References: <1461769552-2752-1-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1461769552-2752-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala List-Id: devicetree@vger.kernel.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0 aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0 IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8 ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjE0OgogLSBGaXhlZCBtb2R1bGUgYnVpbGQKIC0g U2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUiBhbmQgdXNlIGRybV9nZW1fY21hX3ZtX29wcwogLSBT ZWxlY3QgTUVNT1JZIHNvIHRoYXQgc2VsZWN0IE1US19TTUkgd29ya3MgcHJvcGVybHkKIC0gUmVi YXNlIG9udG8gZHJtLW5leHQgc28gd2UgY2FuIHVzZSBkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXJf YWxsKCkKIC0gUmVtb3ZlIGRlcHJlY2F0ZWQgdW5sb2FkIGhvb2sKLS0tCiBkcml2ZXJzL2dwdS9k cm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL0tjb25maWcgICAgICAgICAgICB8ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv TWFrZWZpbGUgICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZGlzcF9vdmwuYyAgICAgfCAzMDIgKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2Rpc3BfcmRtYS5jICAgIHwgMjQwICsrKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jICAgICB8IDU4MiArKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggICAgIHwg IDMyICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyAgICAgIHwgMzUz ICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAu aCAgICAgIHwgIDQxICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29t cC5jIHwgMjI1ICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k ZHBfY29tcC5oIHwgMTUwICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2Rydi5jICAgICAgfCA1NTggKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTcgKysrCiBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAgIHwgIDIzICsrCiBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwgMjY5ICsrKysrKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTkgKysrCiBkcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQwICsrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCAgICB8ICA1OSArKysKIDIw IGZpbGVzIGNoYW5nZWQsIDMzODMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry di5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9mYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZmIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fcGxhbmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggOWU0ZjJmMS4uOGNlMDM1YyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25m aWcKQEAgLTI4MywzICsyODMsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZp ZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvS2NvbmZpZyIKIAogc291cmNlICJk cml2ZXJzL2dwdS9kcm0vYXJjL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggYzMzOGQwNC4uNDcyZWY1ZCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQpAQCAtNzMsNiArNzMsNyBAQCBvYmotJChDT05GSUdfRFJNX01TTSkgKz0gbXNtLwogb2JqLSQo Q09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmotJChDT05GSUdfRFJNX1NUSSkgKz0gc3Rp Lwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8KK29iai0kKENPTkZJR19EUk1fTUVESUFU RUspICs9IG1lZGlhdGVrLwogb2JqLXkJCQkrPSBpMmMvCiBvYmoteQkJCSs9IHBhbmVsLwogb2Jq LXkJCQkrPSBicmlkZ2UvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2Nv bmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjMwZTUzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25maWcgRFJNX01FRElB VEVLCisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBNZWRpYXRlayBTb0NzIgorCWRlcGVuZHMg b24gRFJNCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYgQ09NUElMRV9URVNU KQorCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlz ZWxlY3QgSU9NTVVfRE1BCisJc2VsZWN0IE1FTU9SWQorCXNlbGVjdCBNVEtfU01JCisJaGVscAor CSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgTWVkaWF0ZWsgU29Dcy4KKwkgIFRo ZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJtCisJICBUaGlzIGRyaXZlciBwcm92 aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAorCSAgYnVmZmVyIG1hbmFnZW1lbnQgdG8gdXNl cnNwYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmQ0YmRlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorbWVkaWF0ZWstZHJtLXkgOj0gbXRr X2Rpc3Bfb3ZsLm8gXAorCQkgIG10a19kaXNwX3JkbWEubyBcCisJCSAgbXRrX2RybV9jcnRjLm8g XAorCQkgIG10a19kcm1fZGRwLm8gXAorCQkgIG10a19kcm1fZGRwX2NvbXAubyBcCisJCSAgbXRr X2RybV9kcnYubyBcCisJCSAgbXRrX2RybV9mYi5vIFwKKwkJICBtdGtfZHJtX2dlbS5vIFwKKwkJ ICBtdGtfZHJtX3BsYW5lLm8KKworb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0 ZWstZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9v dmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjYyNjcxZgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpAQCAtMCwwICsxLDMwMiBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5o PgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5o PgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAibXRrX2Ry bV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1Bf UkVHX09WTF9JTlRFTgkJCTB4MDAwNAorI2RlZmluZSBPVkxfRk1FX0NQTF9JTlQJCQkJCUJJVCgx KQorI2RlZmluZSBESVNQX1JFR19PVkxfSU5UU1RBCQkJMHgwMDA4CisjZGVmaW5lIERJU1BfUkVH X09WTF9FTgkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JTVAkJCTB4MDAxNAorI2Rl ZmluZSBESVNQX1JFR19PVkxfUk9JX1NJWkUJCQkweDAwMjAKKyNkZWZpbmUgRElTUF9SRUdfT1ZM X1JPSV9CR0NMUgkJCTB4MDAyOAorI2RlZmluZSBESVNQX1JFR19PVkxfU1JDX0NPTgkJCTB4MDAy YworI2RlZmluZSBESVNQX1JFR19PVkxfQ09OKG4pCQkJKDB4MDAzMCArIDB4MjAgKiAobikpCisj ZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0laRShuKQkJKDB4MDAzOCArIDB4MjAgKiAobikpCisj ZGVmaW5lIERJU1BfUkVHX09WTF9PRkZTRVQobikJCQkoMHgwMDNjICsgMHgyMCAqIChuKSkKKyNk ZWZpbmUgRElTUF9SRUdfT1ZMX1BJVENIKG4pCQkJKDB4MDA0NCArIDB4MjAgKiAobikpCisjZGVm aW5lIERJU1BfUkVHX09WTF9SRE1BX0NUUkwobikJCSgweDAwYzAgKyAweDIwICogKG4pKQorI2Rl ZmluZSBESVNQX1JFR19PVkxfUkRNQV9HTUMobikJCSgweDAwYzggKyAweDIwICogKG4pKQorI2Rl ZmluZSBESVNQX1JFR19PVkxfQUREUihuKQkJCSgweDBmNDAgKyAweDIwICogKG4pKQorCisjZGVm aW5lCU9WTF9SRE1BX01FTV9HTUMJMHg0MDQwMjAyMAorCisjZGVmaW5lIE9WTF9DT05fQllURV9T V0FQCUJJVCgyNCkKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCNTY1CSgwIDw8IDEyKQorI2Rl ZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I4ODgJKDEgPDwgMTIpCisjZGVmaW5lIE9WTF9DT05fQ0xS Rk1UX1JHQkE4ODg4CSgyIDw8IDEyKQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9BUkdCODg4OAko MyA8PCAxMikKKyNkZWZpbmUJT1ZMX0NPTl9BRU4JCUJJVCg4KQorI2RlZmluZQlPVkxfQ09OX0FM UEhBCQkweGZmCisKKy8qKgorICogc3RydWN0IG10a19kaXNwX292bCAtIERJU1BfT1ZMIGRyaXZl ciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVyZSBjb250YWluaW5nIHR5cGUgZW51 bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAtIGFzc29jaWF0ZWQgY3J0YyB0byBy ZXBvcnQgdmJsYW5rIGV2ZW50cyB0bworICovCitzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsIHsKKwlzdHJ1 Y3QgbXRrX2RkcF9jb21wCQlkZHBfY29tcDsKKwlzdHJ1Y3QgZHJtX2NydGMJCQkqY3J0YzsKK307 CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIoaW50IGlycSwg dm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfaWQ7CisJ c3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gJnByaXYtPmRkcF9jb21wOworCisJLyogQ2xlYXIg ZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMHgwLCBvdmwtPnJlZ3MgKyBE SVNQX1JFR19PVkxfSU5UU1RBKTsKKworCWlmICghcHJpdi0+Y3J0YykKKwkJcmV0dXJuIElSUV9O T05FOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5jcnRjLCBvdmwpOworCisJcmV0dXJuIElS UV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2VuYWJsZV92Ymxhbmsoc3RydWN0 IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlz dHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtf ZGlzcF9vdmwsCisJCQkJCQkgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNydGM7CisJd3Jp dGVsX3JlbGF4ZWQoT1ZMX0ZNRV9DUExfSU5ULCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lO VEVOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRr X2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBjb250YWlu ZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwKKwkJCQkJCSBkZHBfY29tcCk7CisKKwlw cml2LT5jcnRjID0gTlVMTDsKKwl3cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQ X1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX3N0YXJ0KHN0cnVjdCBt dGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4ZWQoMHgxLCBjb21wLT5yZWdzICsg RElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9zdG9wKHN0cnVjdCBt dGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsg RElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9jb25maWcoc3RydWN0 IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgICB1bnNpZ25lZCBpbnQg aCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmICh3ICE9IDAgJiYgaCAhPSAwKQorCQl3 cml0ZWxfcmVsYXhlZChoIDw8IDE2IHwgdywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9ST0lf U0laRSk7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JP SV9CR0NMUik7CisKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JTVCk7 CisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SU1QpOworfQorCitzdGF0 aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29uKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2ln bmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXdyaXRlbCgweDEsIGNvbXAt PnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlkeCkpOworCXdyaXRlbChPVkxfUkRNQV9N RU1fR01DLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfR01DKGlkeCkpOworCisJcmVn ID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKKwlyZWcgPSByZWcg fCBCSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19D T04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29mZihzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwly ZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOworCXJlZyA9IHJl ZyAmIH5CSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NS Q19DT04pOworCisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SRE1BX0NU UkwoaWR4KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3ZsX2ZtdF9jb252ZXJ0KHVuc2ln bmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwlkZWZhdWx0OgorCWNhc2UgRFJNX0ZP Uk1BVF9SR0I1NjU6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I1NjU7CisJY2FzZSBEUk1f Rk9STUFUX0JHUjU2NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjU2NSB8IE9WTF9DT05f QllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJCXJldHVybiBPVkxfQ09OX0NM UkZNVF9SR0I4ODg7CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkJcmV0dXJuIE9WTF9DT05f Q0xSRk1UX1JHQjg4OCB8IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9SR0JY ODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZN VF9BUkdCODg4ODsKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6CisJY2FzZSBEUk1fRk9STUFU X0JHUkE4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODggfCBPVkxfQ09OX0JZ VEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FS R0I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODg7CisJY2FzZSBEUk1fRk9S TUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJcmV0dXJuIE9WTF9D T05fQ0xSRk1UX1JHQkE4ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJfQorfQorCitzdGF0aWMg dm9pZCBtdGtfb3ZsX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNp Z25lZCBpbnQgaWR4LAorCQkJCSBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlz dHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgKnBlbmRpbmcgPSAmc3RhdGUtPnBlbmRpbmc7 CisJdW5zaWduZWQgaW50IGFkZHIgPSBwZW5kaW5nLT5hZGRyOworCXVuc2lnbmVkIGludCBwaXRj aCA9IHBlbmRpbmctPnBpdGNoICYgMHhmZmZmOworCXVuc2lnbmVkIGludCBmbXQgPSBwZW5kaW5n LT5mb3JtYXQ7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IChwZW5kaW5nLT55IDw8IDE2KSB8IHBl bmRpbmctPng7CisJdW5zaWduZWQgaW50IHNyY19zaXplID0gKHBlbmRpbmctPmhlaWdodCA8PCAx NikgfCBwZW5kaW5nLT53aWR0aDsKKwl1bnNpZ25lZCBpbnQgY29uOworCisJaWYgKCFwZW5kaW5n LT5lbmFibGUpCisJCW10a19vdmxfbGF5ZXJfb2ZmKGNvbXAsIGlkeCk7CisKKwljb24gPSBvdmxf Zm10X2NvbnZlcnQoZm10KTsKKwlpZiAoaWR4ICE9IDApCisJCWNvbiB8PSBPVkxfQ09OX0FFTiB8 IE9WTF9DT05fQUxQSEE7CisKKwl3cml0ZWxfcmVsYXhlZChjb24sIGNvbXAtPnJlZ3MgKyBESVNQ X1JFR19PVkxfQ09OKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKHBpdGNoLCBjb21wLT5yZWdzICsg RElTUF9SRUdfT1ZMX1BJVENIKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKHNyY19zaXplLCBjb21w LT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKG9m ZnNldCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9PRkZTRVQoaWR4KSk7CisJd3JpdGVsX3Jl bGF4ZWQoYWRkciwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9BRERSKGlkeCkpOworCisJaWYg KHBlbmRpbmctPmVuYWJsZSkKKwkJbXRrX292bF9sYXllcl9vbihjb21wLCBpZHgpOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtfZGlzcF9vdmxfZnVuY3Mg PSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAorCS5zdGFydCA9IG10a19vdmxfc3RhcnQs CisJLnN0b3AgPSBtdGtfb3ZsX3N0b3AsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtfb3ZsX2VuYWJs ZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX292bF9kaXNhYmxlX3ZibGFuaywKKwku bGF5ZXJfb24gPSBtdGtfb3ZsX2xheWVyX29uLAorCS5sYXllcl9vZmYgPSBtdGtfb3ZsX2xheWVy X29mZiwKKwkubGF5ZXJfY29uZmlnID0gbXRrX292bF9sYXllcl9jb25maWcsCit9OworCitzdGF0 aWMgaW50IG10a19kaXNwX292bF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZSAqbWFzdGVyLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwg KnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rl diA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1f ZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAi RmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUt PmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2UgKm1hc3RlciwKKwkJCQl2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9v dmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJt X2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRrX2Rp c3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQJPSBtdGtfZGlzcF9vdmxfYmluZCwKKwku dW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bf b3ZsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2OworCWludCBj b21wX2lkOworCWludCBpcnE7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5P TUVNOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkK KwkJcmV0dXJuIGlycTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10a19k aXNwX292bF9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1RSSUdHRVJfTk9ORSwgZGV2X25h bWUoZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor CisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBNVEtfRElTUF9P VkwpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVu dGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisK KwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJnByaXYtPmRkcF9j b21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9vdmxfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVkXG4iLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYp OworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtfZGlzcF9vdmxfY29tcG9uZW50X29w cyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDog JWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kaXNwX292 bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfZGVs KCZwZGV2LT5kZXYsICZtdGtfZGlzcF9vdmxfY29tcG9uZW50X29wcyk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2Rpc3Bfb3ZsX2RyaXZl cl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3At b3ZsIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfZGlzcF9vdmxf ZHJpdmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxf ZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGlzcF9vdmxfcHJvYmUsCisJLnJlbW92ZQkJPSBt dGtfZGlzcF9vdmxfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1k aXNwLW92bCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBt dGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZGlzcF9yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NWZiODBjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZGlzcF9yZG1hLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUg TWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsu aD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZp Y2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19k cm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUJCTB4MDAw MAorI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJCTB4MDAwNAorI2RlZmluZSBSRE1B X1RBUkdFVF9MSU5FX0lOVAkJCQlCSVQoNSkKKyNkZWZpbmUgUkRNQV9GSUZPX1VOREVSRkxPV19J TlQJCQkJQklUKDQpCisjZGVmaW5lIFJETUFfRU9GX0FCTk9STUFMX0lOVAkJCQlCSVQoMykKKyNk ZWZpbmUgUkRNQV9GUkFNRV9FTkRfSU5UCQkJCUJJVCgyKQorI2RlZmluZSBSRE1BX0ZSQU1FX1NU QVJUX0lOVAkJCQlCSVQoMSkKKyNkZWZpbmUgUkRNQV9SRUdfVVBEQVRFX0lOVAkJCQlCSVQoMCkK KyNkZWZpbmUgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OCQkweDAwMTAKKyNkZWZpbmUgUkRNQV9F TkdJTkVfRU4JCQkJCUJJVCgwKQorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzAJCTB4 MDAxNAorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEJCTB4MDAxOAorI2RlZmluZSBE SVNQX1JFR19SRE1BX1RBUkdFVF9MSU5FCQkweDAwMWMKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9G SUZPX0NPTgkJCTB4MDA0MAorI2RlZmluZSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0VOCQkJCUJJVCgz MSkKKyNkZWZpbmUgUkRNQV9GSUZPX1BTRVVET19TSVpFKGJ5dGVzKQkJCSgoKGJ5dGVzKSAvIDE2 KSA8PCAxNikKKyNkZWZpbmUgUkRNQV9PVVRQVVRfVkFMSURfRklGT19USFJFU0hPTEQoYnl0ZXMp CQkoKGJ5dGVzKSAvIDE2KQorCisvKioKKyAqIHN0cnVjdCBtdGtfZGlzcF9yZG1hIC0gRElTUF9S RE1BIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVyZSBjb250YWluaW5n IHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAtIGFzc29jaWF0ZWQg Y3J0YyB0byByZXBvcnQgaXJxIGV2ZW50cyB0bworICovCitzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSB7 CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJc3RydWN0IGRybV9jcnRjCQkJKmNy dGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rpc3BfcmRtYV9pcnFfaGFuZGxlcihp bnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBk ZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqcmRtYSA9ICZwcml2LT5kZHBfY29tcDsKKwor CS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0ICovCisJd3JpdGVsKDB4MCwgcmRt YS0+cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisKKwlpZiAoIXByaXYtPmNydGMp CisJCXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2RkcF9pcnEocHJpdi0+Y3J0YywgcmRt YSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkbWFfdXBkYXRl X2JpdHMoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHJlZywKKwkJCSAg ICAgdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWwpCit7CisJdW5zaWduZWQgaW50 IHRtcCA9IHJlYWRsKGNvbXAtPnJlZ3MgKyByZWcpOworCisJdG1wID0gKHRtcCAmIH5tYXNrKSB8 ICh2YWwgJiBtYXNrKTsKKwl3cml0ZWwodG1wLCBjb21wLT5yZWdzICsgcmVnKTsKK30KKworc3Rh dGljIHZvaWQgbXRrX3JkbWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w LAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRt YSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSwKKwkJCQkJ CSAgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNydGM7CisJcmRtYV91cGRhdGVfYml0cyhj b21wLCBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUsIFJETUFfRlJBTUVfRU5EX0lOVCwKKwkJCSBS RE1BX0ZSQU1FX0VORF9JTlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9kaXNhYmxlX3Zi bGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1h ICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9yZG1hLAorCQkJCQkJ ICBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNv bXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwgUkRNQV9GUkFNRV9FTkRfSU5ULCAwKTsKK30K Kworc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkK K3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfR0xPQkFMX0NPTiwgUkRN QV9FTkdJTkVfRU4sCisJCQkgUkRNQV9FTkdJTkVfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtf cmRtYV9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJcmRtYV91cGRhdGVfYml0 cyhjb21wLCBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04sIFJETUFfRU5HSU5FX0VOLCAwKTsKK30K Kworc3RhdGljIHZvaWQgbXRrX3JkbWFfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs IHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25l ZCBpbnQgdnJlZnJlc2gpCit7CisJdW5zaWduZWQgaW50IHRocmVzaG9sZDsKKwl1bnNpZ25lZCBp bnQgcmVnOworCisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX1NJWkVfQ09O XzAsIDB4ZmZmLCB3aWR0aCk7CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1B X1NJWkVfQ09OXzEsIDB4ZmZmZmYsIGhlaWdodCk7CisKKwkvKgorCSAqIEVuYWJsZSBGSUZPIHVu ZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9ja2VkLgorCSAqIEtlZXAgdGhl IEZJRk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4IEtpQi4gU2V0IHRoZQorCSAqIG91 dHB1dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0aCA3LzYgb3ZlcmhlYWQgdG8KKwkg KiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBwaXhlbCBkZXB0aCBvZiA0IGJ5dGVz OgorCSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0ICogdnJlZnJlc2ggKiA0ICogNyAv IDEwMDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxPV19FTiB8CisJICAgICAgUkRNQV9G SUZPX1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRNQV9PVVRQVVRfVkFMSURfRklGT19U SFJFU0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdf UkRNQV9GSUZPX0NPTik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1 bmNzIG10a19kaXNwX3JkbWFfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10a19yZG1hX2NvbmZpZywK Kwkuc3RhcnQgPSBtdGtfcmRtYV9zdGFydCwKKwkuc3RvcCA9IG10a19yZG1hX3N0b3AsCisJLmVu YWJsZV92YmxhbmsgPSBtdGtfcmRtYV9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9 IG10a19yZG1hX2Rpc2FibGVfdmJsYW5rLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9yZG1h X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAg ICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCBy ZXQ7CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9j b21wKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3Rl ciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIHZvaWQgbXRr X2Rpc3BfcmRtYV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0 ZXIsCisJCQkJIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7 CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRrX2Rpc3BfcmRtYV9jb21w b25lbnRfb3BzID0geworCS5iaW5kCT0gbXRrX2Rpc3BfcmRtYV9iaW5kLAorCS51bmJpbmQgPSBt dGtfZGlzcF9yZG1hX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3BfcmRtYV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXY7CisJaW50IGNvbXBfaWQ7 CisJaW50IGlycTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1 cm4gaXJxOworCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBN VEtfRElTUF9SRE1BKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJcmV0dXJuIGNvbXBf aWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYtPm9mX25vZGUsICZw cml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rpc3BfcmRtYV9mdW5jcyk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbXBvbmVudDog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRGlzYWJsZSBhbmQgY2xlYXIg cGVuZGluZyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4MCwgcHJpdi0+ZGRwX2NvbXAucmVncyAr IERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSk7CisJd3JpdGVsKDB4MCwgcHJpdi0+ZGRwX2NvbXAu cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisKKwlyZXQgPSBkZXZtX3JlcXVlc3Rf aXJxKGRldiwgaXJxLCBtdGtfZGlzcF9yZG1hX2lycV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZf VFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBwcml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAlZDogJWRcbiIsIGlycSwgcmV0KTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsK KworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRrX2Rpc3BfcmRtYV9jb21wb25lbnRfb3Bz KTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY29tcG9uZW50OiAl ZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3BfcmRt YV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfZGVs KCZwZGV2LT5kZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kaXNwX3JkbWFfZHJp dmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlz cC1yZG1hIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfZGlzcF9y ZG1hX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bf cmRtYV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kaXNwX3JkbWFfcHJvYmUsCisJLnJlbW92 ZQkJPSBtdGtfZGlzcF9yZG1hX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWVk aWF0ZWstZGlzcC1yZG1hIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90 YWJsZSA9IG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmY4Y2I2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9jcnRjLmMKQEAgLTAsMCArMSw1ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5o PgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4K KyNpbmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21pLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5o IgorI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCisj aW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisj aW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisvKioKKyAqIHN0cnVjdCBtdGtfZHJtX2NydGMg LSBNZWRpYVRlayBzcGVjaWZpYyBjcnRjIHN0cnVjdHVyZS4KKyAqIEBiYXNlOiBjcnRjIG9iamVj dC4KKyAqIEBlbmFibGVkOiByZWNvcmRzIHdoZXRoZXIgY3J0Y19lbmFibGUgc3VjY2VlZGVkCisg KiBAcGxhbmVzOiBhcnJheSBvZiA0IG10a19kcm1fcGxhbmUgc3RydWN0dXJlcywgb25lIGZvciBl YWNoIG92ZXJsYXkgcGxhbmUKKyAqIEBwZW5kaW5nX3BsYW5lczogd2hldGhlciBhbnkgcGxhbmUg aGFzIHBlbmRpbmcgY2hhbmdlcyB0byBiZSBhcHBsaWVkCisgKiBAY29uZmlnX3JlZ3M6IG1lbW9y eSBtYXBwZWQgbW1zeXMgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGFjZQorICogQG11dGV4OiBo YW5kbGUgdG8gb25lIG9mIHRoZSB0ZW4gZGlzcF9tdXRleCBzdHJlYW1zCisgKiBAZGRwX2NvbXBf bnI6IG51bWJlciBvZiBjb21wb25lbnRzIGluIGRkcF9jb21wCisgKiBAZGRwX2NvbXA6IGFycmF5 IG9mIHBvaW50ZXJzIHRoZSBtdGtfZGRwX2NvbXAgc3RydWN0dXJlcyB1c2VkIGJ5IHRoaXMgY3J0 YworICovCitzdHJ1Y3QgbXRrX2RybV9jcnRjIHsKKwlzdHJ1Y3QgZHJtX2NydGMJCQliYXNlOwor CWJvb2wJCQkJZW5hYmxlZDsKKworCWJvb2wJCQkJcGVuZGluZ19uZWVkc192Ymxhbms7CisJc3Ry dWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7CisKKwlzdHJ1Y3QgbXRrX2RybV9w bGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisJYm9vbAkJCQlwZW5kaW5nX3BsYW5lczsKKwor CXZvaWQgX19pb21lbQkJCSpjb25maWdfcmVnczsKKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgJCSpt dXRleDsKKwl1bnNpZ25lZCBpbnQJCQlkZHBfY29tcF9ucjsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21w CQkqKmRkcF9jb21wOworfTsKKworc3RydWN0IG10a19jcnRjX3N0YXRlIHsKKwlzdHJ1Y3QgZHJt X2NydGNfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRpbmdfY29uZmlnOworCXVuc2lnbmVk IGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19oZWlnaHQ7CisJ dW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IG10a19kcm1fY3J0YyAqdG9fbXRrX2NydGMoc3RydWN0IGRybV9jcnRjICpjKQoreworCXJl dHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kcm1fY3J0YywgYmFzZSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IG10a19jcnRjX3N0YXRlICp0b19tdGtfY3J0Y19zdGF0ZShzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKnMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzLCBzdHJ1Y3Qg bXRrX2NydGNfc3RhdGUsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZmlu aXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KworCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlk cm1fc2VuZF92YmxhbmtfZXZlbnQoY3J0Yy0+ZGV2LCBtdGtfY3J0Yy0+ZXZlbnQtPnBpcGUsIG10 a19jcnRjLT5ldmVudCk7CisJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKKwltdGtfY3J0Yy0+ ZXZlbnQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNydGMtPmRldi0+ZXZlbnRf bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2ZpbmlzaF9wYWdlX2ZsaXAo c3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJZHJtX2NydGNfaGFuZGxlX3ZibGFu aygmbXRrX2NydGMtPmJhc2UpOworCWlmIChtdGtfY3J0Yy0+cGVuZGluZ19uZWVkc192Ymxhbmsp IHsKKwkJbXRrX2RybV9jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAobXRrX2NydGMpOworCQltdGtfY3J0 Yy0+cGVuZGluZ19uZWVkc192YmxhbmsgPSBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10 a19kcm1fY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRr X2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCWludCBpOworCisJZm9y IChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQljbGtfdW5wcmVwYXJl KG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKworCW10a19kaXNwX211dGV4X3B1dChtdGtf Y3J0Yy0+bXV0ZXgpOworCisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKK30KKworc3RhdGljIHZv aWQgbXRrX2RybV9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3Qg bXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJaWYgKGNydGMtPnN0YXRlKSB7CisJCWlmIChjcnRj LT5zdGF0ZS0+bW9kZV9ibG9iKQorCQkJZHJtX3Byb3BlcnR5X3VucmVmZXJlbmNlX2Jsb2IoY3J0 Yy0+c3RhdGUtPm1vZGVfYmxvYik7CisKKwkJc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRj LT5zdGF0ZSk7CisJCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOworCX0gZWxzZSB7 CisJCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICgh c3RhdGUpCisJCQlyZXR1cm47CisJCWNydGMtPnN0YXRlID0gJnN0YXRlLT5iYXNlOworCX0KKwor CXN0YXRlLT5iYXNlLmNydGMgPSBjcnRjOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX3N0 YXRlICptdGtfZHJtX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK K3sKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFsbG9jKHNp emVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsK KworCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUoY3J0YywgJnN0YXRl LT5iYXNlKTsKKworCVdBUk5fT04oc3RhdGUtPmJhc2UuY3J0YyAhPSBjcnRjKTsKKwlzdGF0ZS0+ YmFzZS5jcnRjID0gY3J0YzsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19kcm1fY3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJ CQkgICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlfX2RybV9hdG9taWNf aGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShjcnRjLCBzdGF0ZSk7CisJa2ZyZWUodG9fbXRrX2Ny dGNfc3RhdGUoc3RhdGUpKTsKK30KKworc3RhdGljIGJvb2wgbXRrX2RybV9jcnRjX21vZGVfZml4 dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVk X21vZGUpCit7CisJLyogTm90aGluZyB0byBkbyBoZXJlLCBidXQgdGhpcyBjYWxsYmFjayBpcyBt YW5kYXRvcnkuICovCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0 Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2Ny dGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCisJc3Rh dGUtPnBlbmRpbmdfd2lkdGggPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5n X2hlaWdodCA9IGNydGMtPm1vZGUudmRpc3BsYXk7CisJc3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gg PSBjcnRjLT5tb2RlLnZyZWZyZXNoOworCXdtYigpOwkvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBh cmFtZXRlcnMgYXJlIHNldCBiZWZvcmUgdXBkYXRlICovCisJc3RhdGUtPnBlbmRpbmdfY29uZmln ID0gdHJ1ZTsKK30KKworaW50IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZh dGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19j cnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJc3RydWN0IG10a19kZHBfY29t cCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRrX2RkcF9jb21wX2VuYWJsZV92 Ymxhbmsob3ZsLCAmbXRrX2NydGMtPmJhc2UpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRr X2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVk IGludCBwaXBlKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9w cml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMocHJp di0+Y3J0Y1twaXBlXSk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRk cF9jb21wWzBdOworCisJbXRrX2RkcF9jb21wX2Rpc2FibGVfdmJsYW5rKG92bCk7Cit9CisKK3N0 YXRpYyBpbnQgbXRrX2NydGNfZGRwX2Nsa19lbmFibGUoc3RydWN0IG10a19kcm1fY3J0YyAqbXRr X2NydGMpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4i LCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsr KSB7CisJCXJldCA9IGNsa19lbmFibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCQlp ZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgY2xvY2sgJWQ6ICVkXG4i LCBpLCByZXQpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK2VycjoKKwl3 aGlsZSAoLS1pID49IDApCisJCWNsa19kaXNhYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xr KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfY2xrX2Rpc2Fi bGUoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJaW50IGk7CisKKwlEUk1fREVC VUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX2Rpc2FibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5j bGspOworfQorCitzdGF0aWMgaW50IG10a19jcnRjX2RkcF9od19pbml0KHN0cnVjdCBtdGtfZHJt X2NydGMgKm10a19jcnRjKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtdGtfY3J0Yy0+ YmFzZTsKKwl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgdnJlZnJlc2g7CisJaW50IHJldDsK KwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKFdB Uk5fT04oIWNydGMtPnN0YXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aWR0aCA9IGNydGMt PnN0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5OworCWhlaWdodCA9IGNydGMtPnN0YXRlLT5h ZGp1c3RlZF9tb2RlLnZkaXNwbGF5OworCXZyZWZyZXNoID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVk X21vZGUudnJlZnJlc2g7CisKKwlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGNydGMtPmRldi0+ ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgcG93 ZXIgZG9tYWluOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBtdGtf ZGlzcF9tdXRleF9wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisJaWYgKHJldCA8IDApIHsKKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIG11dGV4IGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJ Z290byBlcnJfcG1fcnVudGltZV9wdXQ7CisJfQorCisJcmV0ID0gbXRrX2NydGNfZGRwX2Nsa19l bmFibGUobXRrX2NydGMpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRv IGVuYWJsZSBjb21wb25lbnQgY2xvY2tzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfbXV0ZXhf dW5wcmVwYXJlOworCX0KKworCURSTV9ERUJVR19EUklWRVIoIm1lZGlhdGVrX2RkcF9kZHBfcGF0 aF9zZXR1cFxuIik7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7 IGkrKykgeworCQltdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgobXRrX2NydGMtPmNvbmZpZ19yZWdz LAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJIG10a19jcnRjLT5kZHBf Y29tcFtpICsgMV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11 dGV4LAorCQkJCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwl9CisJbXRrX2Rpc3BfbXV0 ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsK KwltdGtfZGlzcF9tdXRleF9lbmFibGUobXRrX2NydGMtPm11dGV4KTsKKworCWZvciAoaSA9IDA7 IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQlzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wID0gbXRrX2NydGMtPmRkcF9jb21wW2ldOworCisJCW10a19kZHBfY29tcF9jb25maWco Y29tcCwgd2lkdGgsIGhlaWdodCwgdnJlZnJlc2gpOworCQltdGtfZGRwX2NvbXBfc3RhcnQoY29t cCk7CisJfQorCisJLyogSW5pdGlhbGx5IGNvbmZpZ3VyZSBhbGwgcGxhbmVzICovCisJZm9yIChp ID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l ID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUt PnN0YXRlKTsKKwkJbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhtdGtfY3J0Yy0+ZGRwX2NvbXBb MF0sIGksCisJCQkJCSAgcGxhbmVfc3RhdGUpOworCX0KKworCXJldHVybiAwOworCitlcnJfbXV0 ZXhfdW5wcmVwYXJlOgorCW10a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgp OworZXJyX3BtX3J1bnRpbWVfcHV0OgorCXBtX3J1bnRpbWVfcHV0KGNydGMtPmRldi0+ZGV2KTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaHdfZmluaShzdHJ1 Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g bXRrX2NydGMtPmJhc2UuZGV2OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIs IF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKysp CisJCW10a19kZHBfY29tcF9zdG9wKG10a19jcnRjLT5kZHBfY29tcFtpXSk7CisJZm9yIChpID0g MDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtfZGlzcF9tdXRleF9yZW1v dmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+ aWQpOworCW10a19kaXNwX211dGV4X2Rpc2FibGUobXRrX2NydGMtPm11dGV4KTsKKwlmb3IgKGkg PSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10a19kZHBfcmVt b3ZlX2NvbXBfZnJvbV9wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywKKwkJCQkJICAgICAgbXRr X2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJICAgICAgbXRrX2NydGMtPmRkcF9jb21wW2kg KyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgs CisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtfZGlzcF9tdXRl eF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQp OworCW10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShtdGtfY3J0Yyk7CisJbXRrX2Rpc3BfbXV0ZXhf dW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisKKwlwbV9ydW50aW1lX3B1dChkcm0tPmRldik7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpj cnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0 Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOwor CWludCByZXQ7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwgX19mdW5jX18sIGNydGMt PmJhc2UuaWQpOworCisJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChvdmwtPmxhcmJfZGV2KTsKKwlp ZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsYXJiOiAlZFxuIiwgcmV0KTsK KwkJcmV0dXJuOworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9od19pbml0KG10a19jcnRjKTsK KwlpZiAocmV0KSB7CisJCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7CisJCXJldHVy bjsKKwl9CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJbXRrX2NydGMtPmVuYWJsZWQg PSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtf Y3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2Nv bXBbMF07CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwgX19mdW5jX18s IGNydGMtPmJhc2UuaWQpOworCWlmICghbXRrX2NydGMtPmVuYWJsZWQpCisJCXJldHVybjsKKwor CS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0ZSB0byBkaXNhYmxlZCAqLworCWZvciAoaSA9 IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9 ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5z dGF0ZSk7CisJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZhbHNlOworCQlwbGFuZV9z dGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCX0KKwltdGtfY3J0Yy0+cGVuZGluZ19wbGFu ZXMgPSB0cnVlOworCisJLyogV2FpdCBmb3IgcGxhbmVzIHRvIGJlIGRpc2FibGVkICovCisJZHJt X2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOworCisJZHJtX2NydGNfdmJsYW5rX29mZihjcnRj KTsKKwltdGtfY3J0Y19kZHBfaHdfZmluaShtdGtfY3J0Yyk7CisJbXRrX3NtaV9sYXJiX3B1dChv dmwtPmxhcmJfZGV2KTsKKworCW10a19jcnRjLT5lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRp YyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAor CQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCit7CisJc3Ry dWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRl KTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOwor CisJaWYgKG10a19jcnRjLT5ldmVudCAmJiBzdGF0ZS0+YmFzZS5ldmVudCkKKwkJRFJNX0VSUk9S KCJuZXcgZXZlbnQgd2hpbGUgdGhlcmUgaXMgc3RpbGwgYSBwZW5kaW5nIGV2ZW50XG4iKTsKKwor CWlmIChzdGF0ZS0+YmFzZS5ldmVudCkgeworCQlzdGF0ZS0+YmFzZS5ldmVudC0+cGlwZSA9IGRy bV9jcnRjX2luZGV4KGNydGMpOworCQlXQVJOX09OKGRybV9jcnRjX3ZibGFua19nZXQoY3J0Yykg IT0gMCk7CisJCW10a19jcnRjLT5ldmVudCA9IHN0YXRlLT5iYXNlLmV2ZW50OworCQlzdGF0ZS0+ YmFzZS5ldmVudCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRv bWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19j cnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJdW5zaWduZWQgaW50IHBlbmRpbmdfcGxhbmVzID0g MDsKKwlpbnQgaTsKKworCWlmIChtdGtfY3J0Yy0+ZXZlbnQpCisJCW10a19jcnRjLT5wZW5kaW5n X25lZWRzX3ZibGFuayA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsr KSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFz ZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3Rh dGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJaWYgKHBsYW5lX3N0YXRl LT5wZW5kaW5nLmRpcnR5KSB7CisJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVl OworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuZGlydHkgPSBmYWxzZTsKKwkJCXBlbmRpbmdfcGxh bmVzIHw9IEJJVChpKTsKKwkJfQorCX0KKwlpZiAocGVuZGluZ19wbGFuZXMpCisJCW10a19jcnRj LT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny dGNfZnVuY3MgbXRrX2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcJCT0gZHJtX2F0b21pY19o ZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwCQk9IGRybV9hdG9taWNfaGVscGVyX3BhZ2Vf ZmxpcCwKKwkuZGVzdHJveQkJPSBtdGtfZHJtX2NydGNfZGVzdHJveSwKKwkucmVzZXQJCQk9IG10 a19kcm1fY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZQk9IG10a19kcm1fY3J0 Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlCT0gbXRrX2RybV9jcnRj X2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBl cl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAJPSBtdGtfZHJt X2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9mYgk9IG10a19kcm1fY3J0Y19tb2RlX3Nl dF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRjX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG10 a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVnaW4JPSBtdGtfZHJtX2NydGNfYXRvbWlj X2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJtX2NydGNfYXRvbWljX2ZsdXNoLAorfTsK Kworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAor CQkJICAgICBzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YywKKwkJCSAgICAgc3RydWN0IGRy bV9wbGFuZSAqcHJpbWFyeSwKKwkJCSAgICAgc3RydWN0IGRybV9wbGFuZSAqY3Vyc29yLCB1bnNp Z25lZCBpbnQgcGlwZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRo X3BsYW5lcyhkcm0sICZtdGtfY3J0Yy0+YmFzZSwgcHJpbWFyeSwgY3Vyc29yLAorCQkJCQkmbXRr X2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NsZWFudXBfY3J0YzsK KworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm10a19jcnRjLT5iYXNlLCAmbXRrX2NydGNfaGVscGVy X2Z1bmNzKTsKKworCXJldHVybiAwOworCitlcnJfY2xlYW51cF9jcnRjOgorCWRybV9jcnRjX2Ns ZWFudXAoJm10a19jcnRjLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG10a19jcnRj X2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwp Cit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsK KwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUobXRrX2Ny dGMtPmJhc2Uuc3RhdGUpOworCXVuc2lnbmVkIGludCBpOworCisJLyoKKwkgKiBUT0RPOiBpbnN0 ZWFkIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlcnMgaGVyZSwgd2Ugc2hvdWxkIHByZXBhcmUKKwkg KiB3b3JraW5nIHJlZ2lzdGVycyBpbiBhdG9taWNfY29tbWl0IGFuZCBsZXQgdGhlIGhhcmR3YXJl IGNvbW1hbmQKKwkgKiBxdWV1ZSB1cGRhdGUgbW9kdWxlIHJlZ2lzdGVycyBvbiB2YmxhbmsuCisJ ICovCisJaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykgeworCQltdGtfZGRwX2NvbXBfY29uZmln KG92bCwgc3RhdGUtPnBlbmRpbmdfd2lkdGgsCisJCQkJICAgIHN0YXRlLT5wZW5kaW5nX2hlaWdo dCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gpOworCisJCXN0YXRlLT5wZW5kaW5n X2NvbmZpZyA9IGZhbHNlOworCX0KKworCWlmIChtdGtfY3J0Yy0+cGVuZGluZ19wbGFuZXMpIHsK KwkJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCQlzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCQlzdHJ1Y3QgbXRrX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVf c3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZp ZykgeworCQkJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcob3ZsLCBpLCBwbGFuZV9zdGF0ZSk7 CisJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gZmFsc2U7CisJCQl9CisJCX0KKwkJ bXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gZmFsc2U7CisJfQorCisJbXRrX2RybV9maW5pc2hf cGFnZV9mbGlwKG10a19jcnRjKTsKK30KKworaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAqcGF0 aCwgdW5zaWduZWQgaW50IHBhdGhfbGVuKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnBy aXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm1fZGV2 LT5kZXY7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGM7CisJZW51bSBkcm1fcGxhbmVf dHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB6cG9zOworCWludCBwaXBlID0gcHJpdi0+bnVtX3Bp cGVzOworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aF9sZW47IGkr KykgeworCQllbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkID0gcGF0aFtpXTsKKwkJc3RydWN0 IGRldmljZV9ub2RlICpub2RlOworCisJCW5vZGUgPSBwcml2LT5jb21wX25vZGVbY29tcF9pZF07 CisJCWlmICghbm9kZSkgeworCQkJZGV2X2luZm8oZGV2LAorCQkJCSAiTm90IGNyZWF0aW5nIGNy dGMgJWQgYmVjYXVzZSBjb21wb25lbnQgJWQgaXMgZGlzYWJsZWQgb3IgbWlzc2luZ1xuIiwKKwkJ CQkgcGlwZSwgY29tcF9pZCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCW10a19jcnRjID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptdGtfY3J0YyksIEdGUF9LRVJORUwpOworCWlmICgh bXRrX2NydGMpCisJCXJldHVybiAtRU5PTUVNOworCisJbXRrX2NydGMtPmNvbmZpZ19yZWdzID0g cHJpdi0+Y29uZmlnX3JlZ3M7CisJbXRrX2NydGMtPmRkcF9jb21wX25yID0gcGF0aF9sZW47CisJ bXRrX2NydGMtPmRkcF9jb21wID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgbXRrX2NydGMtPmRk cF9jb21wX25yLAorCQkJCQkJc2l6ZW9mKCptdGtfY3J0Yy0+ZGRwX2NvbXApLAorCQkJCQkJR0ZQ X0tFUk5FTCk7CisKKwltdGtfY3J0Yy0+bXV0ZXggPSBtdGtfZGlzcF9tdXRleF9nZXQocHJpdi0+ bXV0ZXhfZGV2LCBwaXBlKTsKKwlpZiAoSVNfRVJSKG10a19jcnRjLT5tdXRleCkpIHsKKwkJcmV0 ID0gUFRSX0VSUihtdGtfY3J0Yy0+bXV0ZXgpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBn ZXQgbXV0ZXg6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7 IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQllbnVtIG10a19kZHBfY29tcF9p ZCBjb21wX2lkID0gcGF0aFtpXTsKKwkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcDsKKwkJc3Ry dWN0IGRldmljZV9ub2RlICpub2RlOworCisJCW5vZGUgPSBwcml2LT5jb21wX25vZGVbY29tcF9p ZF07CisJCWNvbXAgPSBwcml2LT5kZHBfY29tcFtjb21wX2lkXTsKKwkJaWYgKCFjb21wKSB7CisJ CQlkZXZfZXJyKGRldiwgIkNvbXBvbmVudCAlcyBub3QgaW5pdGlhbGl6ZWRcbiIsCisJCQkJbm9k ZS0+ZnVsbF9uYW1lKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIHVucHJlcGFyZTsKKwkJ fQorCisJCXJldCA9IGNsa19wcmVwYXJlKGNvbXAtPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCWRl dl9lcnIoZGV2LAorCQkJCSJGYWlsZWQgdG8gcHJlcGFyZSBjbG9jayBmb3IgY29tcG9uZW50ICVz OiAlZFxuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCQlnb3RvIHVucHJlcGFyZTsK KwkJfQorCisJCW10a19jcnRjLT5kZHBfY29tcFtpXSA9IGNvbXA7CisJfQorCisJZm9yICh6cG9z ID0gMDsgenBvcyA8IE9WTF9MQVlFUl9OUjsgenBvcysrKSB7CisJCXR5cGUgPSAoenBvcyA9PSAw KSA/IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgOgorCQkJCSh6cG9zID09IDEpID8gRFJNX1BMQU5F X1RZUEVfQ1VSU09SIDoKKwkJCQkJCURSTV9QTEFORV9UWVBFX09WRVJMQVk7CisJCXJldCA9IG10 a19wbGFuZV9pbml0KGRybV9kZXYsICZtdGtfY3J0Yy0+cGxhbmVzW3pwb3NdLAorCQkJCSAgICAg QklUKHBpcGUpLCB0eXBlLCB6cG9zKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gdW5wcmVwYXJlOwor CX0KKworCXJldCA9IG10a19kcm1fY3J0Y19pbml0KGRybV9kZXYsIG10a19jcnRjLCAmbXRrX2Ny dGMtPnBsYW5lc1swXS5iYXNlLAorCQkJCSZtdGtfY3J0Yy0+cGxhbmVzWzFdLmJhc2UsIHBpcGUp OworCWlmIChyZXQgPCAwKQorCQlnb3RvIHVucHJlcGFyZTsKKworCXByaXYtPmNydGNbcGlwZV0g PSAmbXRrX2NydGMtPmJhc2U7CisJcHJpdi0+bnVtX3BpcGVzKys7CisKKwlyZXR1cm4gMDsKKwor dW5wcmVwYXJlOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJY2xrX3VucHJlcGFyZShtdGtfY3J0Yy0+ ZGRwX2NvbXBbaV0tPmNsayk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fY3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgx ZTU1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9jcnRjLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRp YVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9DUlRDX0gKKyNkZWZpbmUgTVRLX0RSTV9DUlRDX0gK KworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAu aCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisKKyNkZWZpbmUgT1ZMX0xBWUVSX05SCTQK KworaW50IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0s IHVuc2lnbmVkIGludCBwaXBlKTsKK3ZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKTsKK3ZvaWQgbXRrX2RybV9j cnRjX2NoZWNrX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19kcm1fY3J0 Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK3ZvaWQgbXRrX2NydGNfZGRwX2lycShz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCk7CitpbnQgbXRr X2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVu dW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLAorCQkJdW5zaWduZWQgaW50IHBhdGhfbGVuKTsKKwor I2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2RkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YmE5MzU1Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKQEAg LTAsMCArMSwzNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj aW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVk ZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgor I2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19DT05GSUdf RElTUF9PVkwwX01PVVRfRU4JMHgwNDAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZM MV9NT1VUX0VOCTB4MDQ0CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09EX01PVVRfRU4J CTB4MDQ4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRfRU4JMHgwNGMK KyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOCTB4MDUwCisjZGVmaW5l IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU4JMHgwODQKKyNkZWZpbmUgRElTUF9S RUdfQ09ORklHX0RJU1BfQ09MT1IxX1NFTF9JTgkweDA4OAorI2RlZmluZSBESVNQX1JFR19DT05G SUdfRFBJX1NFTF9JTgkJMHgwYWMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFf TU9VVF9FTgkweDBjOAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfTU1TWVNfQ0dfQ09OMAkJMHgx MDAKKworI2RlZmluZSBESVNQX1JFR19NVVRFWF9FTihuKQkoMHgyMCArIDB4MjAgKiAobikpCisj ZGVmaW5lIERJU1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCArIDB4MjAgKiAobikpCisjZGVmaW5l IERJU1BfUkVHX01VVEVYX01PRChuKQkoMHgyYyArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1Bf UkVHX01VVEVYX1NPRihuKQkoMHgzMCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUgTVVURVhfTU9E X0RJU1BfT1ZMMAkJQklUKDExKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkwxCQlCSVQoMTIp CisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQoMTMpCisjZGVmaW5lIE1VVEVYX01P RF9ESVNQX1JETUExCQlCSVQoMTQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEyCQlCSVQo MTUpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlCSVQoMTYpCisjZGVmaW5lIE1VVEVY X01PRF9ESVNQX1dETUExCQlCSVQoMTcpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMAkJ QklUKDE4KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjEJCUJJVCgxOSkKKyNkZWZpbmUg TVVURVhfTU9EX0RJU1BfQUFMCQlCSVQoMjApCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0dBTU1B CQlCSVQoMjEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VGT0UJCUJJVCgyMikKKyNkZWZpbmUg TVVURVhfTU9EX0RJU1BfUFdNMAkJQklUKDIzKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00x CQlCSVQoMjQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09ECQlCSVQoMjUpCisKKyNkZWZpbmUg TVVURVhfU09GX1NJTkdMRV9NT0RFCQkwCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kwCQkJMQorI2Rl ZmluZSBNVVRFWF9TT0ZfRFNJMQkJCTIKKyNkZWZpbmUgTVVURVhfU09GX0RQSTAJCQkzCisKKyNk ZWZpbmUgT1ZMMF9NT1VUX0VOX0NPTE9SMAkJMHgxCisjZGVmaW5lIE9EX01PVVRfRU5fUkRNQTAJ CTB4MQorI2RlZmluZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgxCisjZGVmaW5lIENPTE9SMF9TRUxf SU5fT1ZMMAkJMHgxCisjZGVmaW5lIE9WTDFfTU9VVF9FTl9DT0xPUjEJCTB4MQorI2RlZmluZSBH QU1NQV9NT1VUX0VOX1JETUExCQkweDEKKyNkZWZpbmUgUkRNQTFfTU9VVF9EUEkwCQkJMHgyCisj ZGVmaW5lIERQSTBfU0VMX0lOX1JETUExCQkweDEKKyNkZWZpbmUgQ09MT1IxX1NFTF9JTl9PVkwx CQkweDEKKworc3RydWN0IG10a19kaXNwX211dGV4IHsKKwlpbnQgaWQ7CisJYm9vbCBjbGFpbWVk OworfTsKKworc3RydWN0IG10a19kZHAgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVj dCBjbGsJCQkqY2xrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworCXN0cnVjdCBtdGtfZGlzcF9t dXRleAkJbXV0ZXhbMTBdOworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtdXRleF9t b2RbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0geworCVtERFBfQ09NUE9ORU5UX0FBTF0gPSBNVVRF WF9NT0RfRElTUF9BQUwsCisJW0REUF9DT01QT05FTlRfQ09MT1IwXSA9IE1VVEVYX01PRF9ESVNQ X0NPTE9SMCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdID0gTVVURVhfTU9EX0RJU1BfQ09MT1Ix LAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXSA9IE1VVEVYX01PRF9ESVNQX0dBTU1BLAorCVtERFBf Q09NUE9ORU5UX09EXSA9IE1VVEVYX01PRF9ESVNQX09ELAorCVtERFBfQ09NUE9ORU5UX09WTDBd ID0gTVVURVhfTU9EX0RJU1BfT1ZMMCwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXSA9IE1VVEVYX01P RF9ESVNQX09WTDEsCisJW0REUF9DT01QT05FTlRfUFdNMF0gPSBNVVRFWF9NT0RfRElTUF9QV00w LAorCVtERFBfQ09NUE9ORU5UX1BXTTFdID0gTVVURVhfTU9EX0RJU1BfUFdNMSwKKwlbRERQX0NP TVBPTkVOVF9SRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMCwKKwlbRERQX0NPTVBPTkVOVF9S RE1BMV0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0gPSBN VVRFWF9NT0RfRElTUF9SRE1BMiwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXSA9IE1VVEVYX01PRF9E SVNQX1VGT0UsCisJW0REUF9DT01QT05FTlRfV0RNQTBdID0gTVVURVhfTU9EX0RJU1BfV0RNQTAs CisJW0REUF9DT01QT05FTlRfV0RNQTFdID0gTVVURVhfTU9EX0RJU1BfV0RNQTEsCit9OworCitz dGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfbW91dF9lbihlbnVtIG10a19kZHBfY29tcF9pZCBj dXIsCisJCQkJICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAgIHVuc2lnbmVk IGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlpZiAoY3VyID09IEREUF9D T01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7CisJCSphZGRy ID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDBfTU9V VF9FTl9DT0xPUjA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PRCAmJiBuZXh0 ID09IEREUF9DT01QT05FTlRfUkRNQTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElT UF9PRF9NT1VUX0VOOworCQl2YWx1ZSA9IE9EX01PVVRfRU5fUkRNQTA7CisJfSBlbHNlIGlmIChj dXIgPT0gRERQX0NPTVBPTkVOVF9VRk9FICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EU0kwKSB7 CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOOworCQl2YWx1ZSA9 IFVGT0VfTU9VVF9FTl9EU0kwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZM MSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7CisJCSphZGRyID0gRElTUF9SRUdf Q09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDFfTU9VVF9FTl9DT0xPUjE7 CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9HQU1NQSAmJiBuZXh0ID09IEREUF9D T01QT05FTlRfUkRNQTEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1NQV9N T1VUX0VOOworCQl2YWx1ZSA9IEdBTU1BX01PVVRfRU5fUkRNQTE7CisJfSBlbHNlIGlmIChjdXIg PT0gRERQX0NPTVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMCkgewor CQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01PVVRfRU47CisJCXZhbHVlID0g UkRNQTFfTU9VVF9EUEkwOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4g dmFsdWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxfaW4oZW51bSBtdGtf ZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJ ICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChj dXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjAp IHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjBfU0VMX0lOOworCQl2YWx1 ZSA9IENPTE9SMF9TRUxfSU5fT1ZMMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5U X1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRyID0gRElTUF9S RUdfQ09ORklHX0RQSV9TRUxfSU47CisJCXZhbHVlID0gRFBJMF9TRUxfSU5fUkRNQTE7CisJfSBl bHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVO VF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lO OworCQl2YWx1ZSA9IENPTE9SMV9TRUxfSU5fT1ZMMTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IDA7 CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0 aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBf aWQgY3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25l ZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwg bmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZp Z19yZWdzICsgYWRkcikgfCB2YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVn cyArIGFkZHIpOworCX0KKworCXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBuZXh0LCAmYWRk cik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBh ZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7 CisJfQorfQorCit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21l bSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAg IGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5zaWduZWQgaW50IGFkZHIsIHZhbHVl LCByZWc7CisKKwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIsIG5leHQsICZhZGRyKTsKKwlp ZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYg fnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQor CisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUp IHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOwor CQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQorCitzdHJ1 Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYs IHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gZGV2X2dldF9kcnZk YXRhKGRldik7CisKKwlpZiAoaWQgPj0gMTApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwor CWlmIChkZHAtPm11dGV4W2lkXS5jbGFpbWVkKQorCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOwor CisJZGRwLT5tdXRleFtpZF0uY2xhaW1lZCA9IHRydWU7CisKKwlyZXR1cm4gJmRkcC0+bXV0ZXhb aWRdOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgg Km11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0 cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRk cC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwltdXRleC0+Y2xhaW1lZCA9IGZhbHNl OworfQorCitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgg Km11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0 cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwlyZXR1cm4gY2xrX3By ZXBhcmVfZW5hYmxlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF91bnByZXBh cmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRw ID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0 ZXgtPmlkXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBt dGtfZGlzcF9tdXRleF9hZGRfY29tcChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJ ICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0g Y29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgt PmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgt PmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RT STA6CisJCXJlZyA9IE1VVEVYX1NPRl9EU0kwOworCQlicmVhazsKKwljYXNlIEREUF9DT01QT05F TlRfRFNJMToKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNhc2UgRERQX0NP TVBPTkVOVF9EUEkwOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFBJMDsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0Qo bXV0ZXgtPmlkKSk7CisJCXJlZyB8PSBtdXRleF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChy ZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmV0dXJu OworCX0KKworCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhf U09GKG11dGV4LT5pZCkpOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0 cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQp Cit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10 a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXVuc2lnbmVkIGludCByZWc7CisK KwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOworCisJc3dpdGNoIChp ZCkgeworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kwOgorCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kx OgorCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQl3cml0ZWxfcmVsYXhlZChNVVRFWF9TT0Zf U0lOR0xFX01PREUsCisJCQkgICAgICAgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfU09GKG11 dGV4LT5pZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRk cC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVnICY9IH5tdXRl eF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01V VEVYX01PRChtdXRleC0+aWQpKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIG10a19kaXNwX211 dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtf ZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBt dXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBt dXRleCk7CisKKwl3cml0ZWwoMSwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgt PmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShzdHJ1Y3QgbXRrX2Rpc3Bf bXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0 ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5f T04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwoMCwgZGRwLT5y ZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cit9CisKK3N0YXRpYyBpbnQgbXRr X2RkcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kZHAgKmRkcDsKKwlzdHJ1Y3QgcmVz b3VyY2UgKnJlZ3M7CisJaW50IGk7CisKKwlkZHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo KmRkcCksIEdGUF9LRVJORUwpOworCWlmICghZGRwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZv ciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQlkZHAtPm11dGV4W2ldLmlkID0gaTsKKworCWRkcC0+ Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkZHAtPmNsaykpIHsK KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9F UlIoZGRwLT5jbGspOworCX0KKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwg SU9SRVNPVVJDRV9NRU0sIDApOworCWRkcC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIHJlZ3MpOworCWlmIChJU19FUlIoZGRwLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBtYXAgbXV0ZXggcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGRwLT5y ZWdzKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZHApOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgZGRwX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0 ZWssbXQ4MTczLWRpc3AtbXV0ZXgiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgZGRwX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rk cF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kZHBfcHJvYmUsCisJLnJlbW92ZQkJPSBtdGtf ZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZGRwIiwKKwkJ Lm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGRkcF9kcml2ZXJfZHRf bWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzExNzUKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaApAQCAtMCwwICsxLDQxIEBA CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBNVEtfRFJN X0REUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0gKKworI2luY2x1ZGUgIm10a19kcm1fZGRwX2Nv bXAuaCIKKworc3RydWN0IHJlZ21hcDsKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgbXRrX2Rpc3Bf bXV0ZXg7CisKK3ZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19wYXRoKHZvaWQgX19pb21lbSAqY29u ZmlnX3JlZ3MsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkgICAgICBl bnVtIG10a19kZHBfY29tcF9pZCBuZXh0KTsKK3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9t X3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCQkgICBlbnVtIG10a19kZHBfY29t cF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7CisKK3N0cnVjdCBt dGtfZGlzcF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5z aWduZWQgaW50IGlkKTsKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKHN0cnVjdCBtdGtfZGlz cF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9hZGRfY29tcChzdHJ1Y3QgbXRr X2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBpZCk7Cit2 b2lkIG10a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsK K3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4 KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4 ICptdXRleCwKKwkJCQllbnVtIG10a19kZHBfY29tcF9pZCBpZCk7Cit2b2lkIG10a19kaXNwX211 dGV4X3VucHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rp c3BfbXV0ZXhfcHV0KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOworCisjZW5kaWYgLyog TVRLX0RSTV9ERFBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZGRwX2NvbXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9j b21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3MGZjZgotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMK QEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5j LgorICogQXV0aG9yczoKKyAqCVlUIFNoZW4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoJQ0sg SHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUg PGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxp bnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRl ICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKyNpbmNsdWRlICJt dGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9PRF9FTgkJCQkweDAwMDAKKyNkZWZp bmUgRElTUF9PRF9JTlRFTgkJCQkweDAwMDgKKyNkZWZpbmUgRElTUF9PRF9JTlRTVEEJCQkJMHgw MDBjCisjZGVmaW5lIERJU1BfT0RfQ0ZHCQkJCTB4MDAyMAorI2RlZmluZSBESVNQX09EX1NJWkUJ CQkJMHgwMDMwCisKKyNkZWZpbmUgRElTUF9SRUdfVUZPX1NUQVJUCQkJMHgwMDAwCisKKyNkZWZp bmUgRElTUF9DT0xPUl9DRkdfTUFJTgkJCTB4MDQwMAorI2RlZmluZSBESVNQX0NPTE9SX1NUQVJU CQkJMHgwYzAwCisjZGVmaW5lIERJU1BfQ09MT1JfV0lEVEgJCQkweDBjNTAKKyNkZWZpbmUgRElT UF9DT0xPUl9IRUlHSFQJCQkweDBjNTQKKworI2RlZmluZQlPRF9SRUxBWV9NT0RFCQlCSVQoMCkK KworI2RlZmluZQlVRk9fQllQQVNTCQlCSVQoMikKKworI2RlZmluZQlDT0xPUl9CWVBBU1NfQUxM CUJJVCg3KQorI2RlZmluZQlDT0xPUl9TRVFfU0VMCQlCSVQoMTMpCisKK3N0YXRpYyB2b2lkIG10 a19jb2xvcl9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcs CisJCQkgICAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJd3Jp dGVsKHcsIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX1dJRFRIKTsKKwl3cml0ZWwoaCwgY29tcC0+ cmVncyArIERJU1BfQ09MT1JfSEVJR0hUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NvbG9yX3N0 YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsKENPTE9SX0JZUEFTU19B TEwgfCBDT0xPUl9TRVFfU0VMLAorCSAgICAgICBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9DRkdf TUFJTik7CisJd3JpdGVsKDB4MSwgY29tcC0+cmVncyArIERJU1BfQ09MT1JfU1RBUlQpOworfQor CitzdGF0aWMgdm9pZCBtdGtfb2RfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVu c2lnbmVkIGludCB3LAorCQkJICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNo KQoreworCXdyaXRlbCh3IDw8IDE2IHwgaCwgY29tcC0+cmVncyArIERJU1BfT0RfU0laRSk7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19vZF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQor eworCXdyaXRlbChPRF9SRUxBWV9NT0RFLCBjb21wLT5yZWdzICsgRElTUF9PRF9DRkcpOworCXdy aXRlbCgxLCBjb21wLT5yZWdzICsgRElTUF9PRF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a191 Zm9lX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsKFVGT19CWVBB U1MsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19VRk9fU1RBUlQpOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfY29sb3IgPSB7CisJLmNvbmZpZyA9IG10a19j b2xvcl9jb25maWcsCisJLnN0YXJ0ID0gbXRrX2NvbG9yX3N0YXJ0LAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX29kID0geworCS5jb25maWcgPSBtdGtf b2RfY29uZmlnLAorCS5zdGFydCA9IG10a19vZF9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF91Zm9lID0geworCS5zdGFydCA9IG10a191Zm9l X3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtdGtfZGRwX2NvbXBfc3Rl bVtNVEtfRERQX0NPTVBfVFlQRV9NQVhdID0geworCVtNVEtfRElTUF9PVkxdID0gIm92bCIsCisJ W01US19ESVNQX1JETUFdID0gInJkbWEiLAorCVtNVEtfRElTUF9XRE1BXSA9ICJ3ZG1hIiwKKwlb TVRLX0RJU1BfQ09MT1JdID0gImNvbG9yIiwKKwlbTVRLX0RJU1BfQUFMXSA9ICJhYWwiLAorCVtN VEtfRElTUF9HQU1NQV0gPSAiZ2FtbWEiLAorCVtNVEtfRElTUF9VRk9FXSA9ICJ1Zm9lIiwKKwlb TVRLX0RTSV0gPSAiZHNpIiwKKwlbTVRLX0RQSV0gPSAiZHBpIiwKKwlbTVRLX0RJU1BfUFdNXSA9 ICJwd20iLAorCVtNVEtfRElTUF9NVVRFWF0gPSAibXV0ZXgiLAorCVtNVEtfRElTUF9PRF0gPSAi b2QiLAorfTsKKworc3RydWN0IG10a19kZHBfY29tcF9tYXRjaCB7CisJZW51bSBtdGtfZGRwX2Nv bXBfdHlwZSB0eXBlOworCWludCBhbGlhc19pZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21w X2Z1bmNzICpmdW5jczsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX21h dGNoIG10a19kZHBfbWF0Y2hlc1tERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01Q T05FTlRfQUFMXQk9IHsgTVRLX0RJU1BfQUFMLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRf Q09MT1IwXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTAsICZkZHBfY29sb3IgfSwKKwlbRERQX0NPTVBP TkVOVF9DT0xPUjFdCT0geyBNVEtfRElTUF9DT0xPUiwJMSwgJmRkcF9jb2xvciB9LAorCVtERFBf Q09NUE9ORU5UX0RQSTBdCT0geyBNVEtfRFBJLAkJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5U X0RTSTBdCT0geyBNVEtfRFNJLAkJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0RTSTFdCT0g eyBNVEtfRFNJLAkJMSwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXQk9IHsgTVRLX0RJ U1BfR0FNTUEsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9PRF0JPSB7IE1US19ESVNQX09E LAkwLCAmZGRwX29kIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMF0JPSB7IE1US19ESVNQX09WTCwJ MCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09WTDFdCT0geyBNVEtfRElTUF9PVkwsCTEsIE5V TEwgfSwKKwlbRERQX0NPTVBPTkVOVF9QV00wXQk9IHsgTVRLX0RJU1BfUFdNLAkwLCBOVUxMIH0s CisJW0REUF9DT01QT05FTlRfUkRNQTBdCT0geyBNVEtfRElTUF9SRE1BLAkwLCBOVUxMIH0sCisJ W0REUF9DT01QT05FTlRfUkRNQTFdCT0geyBNVEtfRElTUF9SRE1BLAkxLCBOVUxMIH0sCisJW0RE UF9DT01QT05FTlRfUkRNQTJdCT0geyBNVEtfRElTUF9SRE1BLAkyLCBOVUxMIH0sCisJW0REUF9D T01QT05FTlRfVUZPRV0JPSB7IE1US19ESVNQX1VGT0UsCTAsICZkZHBfdWZvZSB9LAorCVtERFBf Q09NUE9ORU5UX1dETUEwXQk9IHsgTVRLX0RJU1BfV0RNQSwJMCwgTlVMTCB9LAorCVtERFBfQ09N UE9ORU5UX1dETUExXQk9IHsgTVRLX0RJU1BfV0RNQSwJMSwgTlVMTCB9LAorfTsKKworaW50IG10 a19kZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJZW51bSBtdGtf ZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUpCit7CisJaW50IGlkID0gb2ZfYWxpYXNfZ2V0X2lkKG5v ZGUsIG10a19kZHBfY29tcF9zdGVtW2NvbXBfdHlwZV0pOworCWludCBpOworCisJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUobXRrX2RkcF9tYXRjaGVzKTsgaSsrKSB7CisJCWlmIChjb21wX3R5 cGUgPT0gbXRrX2RkcF9tYXRjaGVzW2ldLnR5cGUgJiYKKwkJICAgIChpZCA8IDAgfHwgaWQgPT0g bXRrX2RkcF9tYXRjaGVzW2ldLmFsaWFzX2lkKSkKKwkJCXJldHVybiBpOworCX0KKworCXJldHVy biAtRUlOVkFMOworfQorCitpbnQgbXRrX2RkcF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAg KmNvbXAsIGVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVj dCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKQoreworCWVudW0gbXRrX2RkcF9jb21wX3R5cGUg dHlwZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxhcmJfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpsYXJiX3BkZXY7CisKKwlpZiAoY29tcF9pZCA8IDAgfHwgY29tcF9pZCA+PSBERFBf Q09NUE9ORU5UX0lEX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21wLT5pZCA9IGNvbXBf aWQ7CisJY29tcC0+ZnVuY3MgPSBmdW5jcyA/OiBtdGtfZGRwX21hdGNoZXNbY29tcF9pZF0uZnVu Y3M7CisKKwlpZiAoY29tcF9pZCA9PSBERFBfQ09NUE9ORU5UX0RQSTAgfHwKKwkgICAgY29tcF9p ZCA9PSBERFBfQ09NUE9ORU5UX0RTSTAgfHwKKwkgICAgY29tcF9pZCA9PSBERFBfQ09NUE9ORU5U X1BXTTApIHsKKwkJY29tcC0+cmVncyA9IE5VTEw7CisJCWNvbXAtPmNsayA9IE5VTEw7CisJCWNv bXAtPmlycSA9IDA7CisJCXJldHVybiAwOworCX0KKworCWNvbXAtPnJlZ3MgPSBvZl9pb21hcChu b2RlLCAwKTsKKwljb21wLT5pcnEgPSBvZl9pcnFfZ2V0KG5vZGUsIDApOworCWNvbXAtPmNsayA9 IG9mX2Nsa19nZXQobm9kZSwgMCk7CisJaWYgKElTX0VSUihjb21wLT5jbGspKQorCQljb21wLT5j bGsgPSBOVUxMOworCisJdHlwZSA9IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS50eXBlOworCisJ LyogT25seSBETUEgY2FwYWJsZSBjb21wb25lbnRzIG5lZWQgdGhlIExBUkIgcHJvcGVydHkgKi8K Kwljb21wLT5sYXJiX2RldiA9IE5VTEw7CisJaWYgKHR5cGUgIT0gTVRLX0RJU1BfT1ZMICYmCisJ ICAgIHR5cGUgIT0gTVRLX0RJU1BfUkRNQSAmJgorCSAgICB0eXBlICE9IE1US19ESVNQX1dETUEp CisJCXJldHVybiAwOworCisJbGFyYl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCAibWVk aWF0ZWssbGFyYiIsIDApOworCWlmICghbGFyYl9ub2RlKSB7CisJCWRldl9lcnIoZGV2LAorCQkJ Ik1pc3NpbmcgbWVkaWFkZWssbGFyYiBwaGFuZGxlIGluICVzIG5vZGVcbiIsCisJCQlub2RlLT5m dWxsX25hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsYXJiX3BkZXYgPSBvZl9maW5k X2RldmljZV9ieV9ub2RlKGxhcmJfbm9kZSk7CisJaWYgKCFsYXJiX3BkZXYpIHsKKwkJZGV2X3dh cm4oZGV2LCAiV2FpdGluZyBmb3IgbGFyYiBkZXZpY2UgJXNcbiIsCisJCQkgbGFyYl9ub2RlLT5m dWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChsYXJiX25vZGUpOworCQlyZXR1cm4gLUVQUk9CRV9E RUZFUjsKKwl9CisJb2Zfbm9kZV9wdXQobGFyYl9ub2RlKTsKKworCWNvbXAtPmxhcmJfZGV2ID0g JmxhcmJfcGRldi0+ZGV2OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfcmVn aXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkK K3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsK KworCWlmIChwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0pCisJCXJldHVybiAtRUJVU1k7CisK Kwlwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0gPSBjb21wOworCXJldHVybiAwOworfQorCit2 b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVj dCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0 ZSA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0gPSBO VUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw X2NvbXAuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxM2JhOQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKQEAgLTAsMCAr MSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVm IE1US19EUk1fRERQX0NPTVBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9DT01QX0gKKworI2luY2x1 ZGUgPGxpbnV4L2lvLmg+CisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNlX25vZGU7Citz dHJ1Y3QgZHJtX2NydGM7CitzdHJ1Y3QgZHJtX2RldmljZTsKK3N0cnVjdCBtdGtfcGxhbmVfc3Rh dGU7CisKK2VudW0gbXRrX2RkcF9jb21wX3R5cGUgeworCU1US19ESVNQX09WTCwKKwlNVEtfRElT UF9SRE1BLAorCU1US19ESVNQX1dETUEsCisJTVRLX0RJU1BfQ09MT1IsCisJTVRLX0RJU1BfQUFM LAorCU1US19ESVNQX0dBTU1BLAorCU1US19ESVNQX1VGT0UsCisJTVRLX0RTSSwKKwlNVEtfRFBJ LAorCU1US19ESVNQX1BXTSwKKwlNVEtfRElTUF9NVVRFWCwKKwlNVEtfRElTUF9PRCwKKwlNVEtf RERQX0NPTVBfVFlQRV9NQVgsCit9OworCitlbnVtIG10a19kZHBfY29tcF9pZCB7CisJRERQX0NP TVBPTkVOVF9BQUwsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9DT0xP UjEsCisJRERQX0NPTVBPTkVOVF9EUEkwLAorCUREUF9DT01QT05FTlRfRFNJMCwKKwlERFBfQ09N UE9ORU5UX0RTSTEsCisJRERQX0NPTVBPTkVOVF9HQU1NQSwKKwlERFBfQ09NUE9ORU5UX09ELAor CUREUF9DT01QT05FTlRfT1ZMMCwKKwlERFBfQ09NUE9ORU5UX09WTDEsCisJRERQX0NPTVBPTkVO VF9QV00wLAorCUREUF9DT01QT05FTlRfUFdNMSwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCURE UF9DT01QT05FTlRfUkRNQTEsCisJRERQX0NPTVBPTkVOVF9SRE1BMiwKKwlERFBfQ09NUE9ORU5U X1VGT0UsCisJRERQX0NPTVBPTkVOVF9XRE1BMCwKKwlERFBfQ09NUE9ORU5UX1dETUExLAorCURE UF9DT01QT05FTlRfSURfTUFYLAorfTsKKworc3RydWN0IG10a19kZHBfY29tcDsKKworc3RydWN0 IG10a19kZHBfY29tcF9mdW5jcyB7CisJdm9pZCAoKmNvbmZpZykoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWdu ZWQgaW50IHZyZWZyZXNoKTsKKwl2b2lkICgqc3RhcnQpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv bXApOworCXZvaWQgKCpzdG9wKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgq ZW5hYmxlX3ZibGFuaykoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgc3RydWN0IGRybV9jcnRj ICpjcnRjKTsKKwl2b2lkICgqZGlzYWJsZV92YmxhbmspKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv bXApOworCXZvaWQgKCpsYXllcl9vbikoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWdu ZWQgaW50IGlkeCk7CisJdm9pZCAoKmxheWVyX29mZikoc3RydWN0IG10a19kZHBfY29tcCAqY29t cCwgdW5zaWduZWQgaW50IGlkeCk7CisJdm9pZCAoKmxheWVyX2NvbmZpZykoc3RydWN0IG10a19k ZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCwKKwkJCSAgICAgc3RydWN0IG10a19wbGFu ZV9zdGF0ZSAqc3RhdGUpOworfTsKKworc3RydWN0IG10a19kZHBfY29tcCB7CisJc3RydWN0IGNs ayAqY2xrOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlpbnQgaXJxOworCXN0cnVjdCBkZXZpY2Ug KmxhcmJfZGV2OworCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkOworCWNvbnN0IHN0cnVjdCBtdGtf ZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBf Y29tcF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgICAgICAgdW5zaWdu ZWQgaW50IHcsIHVuc2lnbmVkIGludCBoLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdnJlZnJl c2gpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5jb25maWcpCisJCWNvbXAt PmZ1bmNzLT5jb25maWcoY29tcCwgdywgaCwgdnJlZnJlc2gpOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgbXRrX2RkcF9jb21wX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJ aWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5zdGFydCkKKwkJY29tcC0+ZnVuY3MtPnN0 YXJ0KGNvbXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX3N0b3Aoc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVu Y3MtPnN0b3ApCisJCWNvbXAtPmZ1bmNzLT5zdG9wKGNvbXApOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgbXRrX2RkcF9jb21wX2VuYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29t cCwKKwkJCQkJICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCWlmIChjb21wLT5mdW5j cyAmJiBjb21wLT5mdW5jcy0+ZW5hYmxlX3ZibGFuaykKKwkJY29tcC0+ZnVuY3MtPmVuYWJsZV92 YmxhbmsoY29tcCwgY3J0Yyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBf ZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmRpc2FibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+ZGlz YWJsZV92YmxhbmsoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBf bGF5ZXJfb24oc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJIHVuc2lnbmVkIGludCBp ZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5sYXllcl9vbikKKwkJY29t cC0+ZnVuY3MtPmxheWVyX29uKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBt dGtfZGRwX2NvbXBfbGF5ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSAg dW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxh eWVyX29mZikKKwkJY29tcC0+ZnVuY3MtPmxheWVyX29mZihjb21wLCBpZHgpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBpZHgsCisJCQkJCSAgICAgc3RydWN0 IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1 bmNzLT5sYXllcl9jb25maWcpCisJCWNvbXAtPmZ1bmNzLT5sYXllcl9jb25maWcoY29tcCwgaWR4 LCBzdGF0ZSk7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbm9kZSwKKwkJCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBlKTsKK2ludCBtdGtf ZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29t cF9ub2RlLAorCQkgICAgICBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBlbnVtIG10a19kZHBf Y29tcF9pZCBjb21wX2lkLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNz ICpmdW5jcyk7CitpbnQgbXRrX2RkcF9jb21wX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOwordm9pZCBtdGtfZGRwX2NvbXBfdW5yZWdp c3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsK KworI2VuZGlmIC8qIE1US19EUk1fRERQX0NPTVBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWEwOWEx Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2 LmMKQEAgLTAsMCArMSw1NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsg SW5jLgorICogQXV0aG9yOiBZVCBTSEVOIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUg PGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVy Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvaW9tbXUu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxh dGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJtdGtf ZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1f ZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1f ZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJt ZWRpYXRlayIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIk1lZGlhdGVrIFNvQyBEUk0iCisjZGVmaW5l IERSSVZFUl9EQVRFICIyMDE1MDUxMyIKKyNkZWZpbmUgRFJJVkVSX01BSk9SIDEKKyNkZWZpbmUg RFJJVkVSX01JTk9SIDAKKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19zY2hlZHVsZShzdHJ1Y3Qg bXRrX2RybV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSkKK3sKKwlwcml2YXRlLT5jb21taXQuc3RhdGUgPSBzdGF0ZTsKKwlzY2hlZHVsZV93b3Jr KCZwcml2YXRlLT5jb21taXQud29yayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd2Fp dF9mb3JfZmVuY2VzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZTsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsK KwlpbnQgaTsKKworCWZvcl9lYWNoX3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcGxhbmVf c3RhdGUsIGkpCisJCW10a19mYl93YWl0KHBsYW5lLT5zdGF0ZS0+ZmIpOworfQorCitzdGF0aWMg dm9pZCBtdGtfYXRvbWljX2NvbXBsZXRlKHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUs CisJCQkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisKKwltdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhz dGF0ZSk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkcm0s IHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKGRybSwgc3RhdGUsIGZh bHNlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRybSwgc3Rh dGUpOworCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3MoZHJtLCBzdGF0ZSk7CisJ ZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21p Y19zdGF0ZV9mcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY193b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2 YXRlID0gY29udGFpbmVyX29mKHdvcmssCisJCQlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlLCBjb21t aXQud29yayk7CisKKwltdGtfYXRvbWljX2NvbXBsZXRlKHByaXZhdGUsIHByaXZhdGUtPmNvbW1p dC5zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2F0b21pY19jb21taXQoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwKKwkJCSAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJ ICAgICBib29sIGFzeW5jKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBk cm0tPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9w cmVwYXJlX3BsYW5lcyhkcm0sIHN0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ bXV0ZXhfbG9jaygmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOworCWZsdXNoX3dvcmsoJnByaXZhdGUt PmNvbW1pdC53b3JrKTsKKworCWRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZHJtLCBzdGF0 ZSk7CisKKwlpZiAoYXN5bmMpCisJCW10a19hdG9taWNfc2NoZWR1bGUocHJpdmF0ZSwgc3RhdGUp OworCWVsc2UKKwkJbXRrX2F0b21pY19jb21wbGV0ZShwcml2YXRlLCBzdGF0ZSk7CisKKwltdXRl eF91bmxvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBtdGtfZHJtX21vZGVfY29uZmln X2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSBtdGtfZHJtX21vZGVfZmJfY3JlYXRlLAorCS5hdG9t aWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IG10 a19hdG9taWNfY29tbWl0LAorfTsKKworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lk IG10a19kZHBfbWFpbltdID0geworCUREUF9DT01QT05FTlRfT1ZMMCwKKwlERFBfQ09NUE9ORU5U X0NPTE9SMCwKKwlERFBfQ09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5UX09ELAorCUREUF9D T01QT05FTlRfUkRNQTAsCisJRERQX0NPTVBPTkVOVF9VRk9FLAorCUREUF9DT01QT05FTlRfRFNJ MCwKKwlERFBfQ09NUE9ORU5UX1BXTTAsCit9OworCitzdGF0aWMgY29uc3QgZW51bSBtdGtfZGRw X2NvbXBfaWQgbXRrX2RkcF9leHRbXSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDEsCisJRERQX0NP TVBPTkVOVF9DT0xPUjEsCisJRERQX0NPTVBPTkVOVF9HQU1NQSwKKwlERFBfQ09NUE9ORU5UX1JE TUExLAorCUREUF9DT01QT05FTlRfRFBJMCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RybV9rbXNf aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUg KnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgcmV0OworCisJaWYgKCFpb21tdV9w cmVzZW50KCZwbGF0Zm9ybV9idXNfdHlwZSkpCisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCisJ cGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJaWYg KCFwZGV2KSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJXYWl0aW5nIGZvciBkaXNwLW11dGV4IGRl dmljZSAlc1xuIiwKKwkJCXByaXZhdGUtPm11dGV4X25vZGUtPmZ1bGxfbmFtZSk7CisJCW9mX25v ZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9 CisJcHJpdmF0ZS0+bXV0ZXhfZGV2ID0gJnBkZXYtPmRldjsKKworCWRybV9tb2RlX2NvbmZpZ19p bml0KGRybSk7CisKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDY0OworCWRybS0+bW9k ZV9jb25maWcubWluX2hlaWdodCA9IDY0OworCisJLyoKKwkgKiBzZXQgbWF4IHdpZHRoIGFuZCBo ZWlnaHQgYXMgZGVmYXVsdCB2YWx1ZSg0MDk2eDQwOTYpLgorCSAqIHRoaXMgdmFsdWUgd291bGQg YmUgdXNlZCB0byBjaGVjayBmcmFtZWJ1ZmZlciBzaXplIGxpbWl0YXRpb24KKwkgKiBhdCBkcm1f bW9kZV9hZGRmYigpLgorCSAqLworCWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gNDA5NjsK Kwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA0MDk2OworCWRybS0+bW9kZV9jb25maWcu ZnVuY3MgPSAmbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jczsKKworCXJldCA9IGNvbXBvbmVudF9i aW5kX2FsbChkcm0tPmRldiwgZHJtKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfY2xl YW51cDsKKworCS8qCisJICogV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIGZpeGVkIGRhdGEgc3Ry ZWFtcywgZWFjaCBvcHRpb25hbCwKKwkgKiBhbmQgZWFjaCBzdGF0aWNhbGx5IGFzc2lnbmVkIHRv IGEgY3J0YzoKKwkgKiBPVkwwIC0+IENPTE9SMCAtPiBBQUwgLT4gT0QgLT4gUkRNQTAgLT4gVUZP RSAtPiBEU0kwIC4uLgorCSAqLworCXJldCA9IG10a19kcm1fY3J0Y19jcmVhdGUoZHJtLCBtdGtf ZGRwX21haW4sIEFSUkFZX1NJWkUobXRrX2RkcF9tYWluKSk7CisJaWYgKHJldCA8IDApCisJCWdv dG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisJLyogLi4uIGFuZCBPVkwxIC0+IENPTE9SMSAtPiBH QU1NQSAtPiBSRE1BMSAtPiBEUEkwLiAqLworCXJldCA9IG10a19kcm1fY3J0Y19jcmVhdGUoZHJt LCBtdGtfZGRwX2V4dCwgQVJSQVlfU0laRShtdGtfZGRwX2V4dCkpOworCWlmIChyZXQgPCAwKQor CQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCisJLyogVXNlIE9WTCBkZXZpY2UgZm9yIGFs bCBETUEgbWVtb3J5IGFsbG9jYXRpb25zICovCisJbnAgPSBwcml2YXRlLT5jb21wX25vZGVbbXRr X2RkcF9tYWluWzBdXSA/OgorCSAgICAgcHJpdmF0ZS0+Y29tcF9ub2RlW210a19kZHBfZXh0WzBd XTsKKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShucCk7CisJaWYgKCFwZGV2KSB7CisJ CXJldCA9IC1FTk9ERVY7CisJCWRldl9lcnIoZHJtLT5kZXYsICJOZWVkIGF0IGxlYXN0IG9uZSBP VkwgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKwl9CisKKwlwcml2 YXRlLT5kbWFfZGV2ID0gJnBkZXYtPmRldjsKKworCS8qCisJICogV2UgZG9uJ3QgdXNlIHRoZSBk cm1faXJxX2luc3RhbGwoKSBoZWxwZXJzIHByb3ZpZGVkIGJ5IHRoZSBEUk0KKwkgKiBjb3JlLCBz byB3ZSBuZWVkIHRvIHNldCB0aGlzIG1hbnVhbGx5IGluIG9yZGVyIHRvIGFsbG93IHRoZQorCSAq IERSTV9JT0NUTF9XQUlUX1ZCTEFOSyB0byBvcGVyYXRlIGNvcnJlY3RseS4KKwkgKi8KKwlkcm0t PmlycV9lbmFibGVkID0gdHJ1ZTsKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBNQVhfQ1JU Qyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisKKwlkcm1f a21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsK KworCXJldHVybiAwOworCitlcnJfY29tcG9uZW50X3VuYmluZDoKKwljb21wb25lbnRfdW5iaW5k X2FsbChkcm0tPmRldiwgZHJtKTsKK2Vycl9jb25maWdfY2xlYW51cDoKKwlkcm1fbW9kZV9jb25m aWdfY2xlYW51cChkcm0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Ry bV9rbXNfZGVpbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJZHJtX2ttc19oZWxwZXJf cG9sbF9maW5pKGRybSk7CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKKwljb21wb25lbnRf dW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0p OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtdGtfZHJtX2ZvcHMg PSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFz ZSA9IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkubW1hcCA9 IG10a19kcm1fZ2VtX21tYXAsCisJLnBvbGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFk LAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0 bCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG10a19kcm1fZHJpdmVy ID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBE UklWRVJfUFJJTUUgfAorCQkJICAgRFJJVkVSX0FUT01JQywKKworCS5nZXRfdmJsYW5rX2NvdW50 ZXIgPSBkcm1fdmJsYW5rX2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Vu YWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rpc2FibGVfdmJs YW5rLAorCisJLmdlbV9mcmVlX29iamVjdCA9IG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0LAorCS5n ZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUgPSBtdGtfZHJt X2dlbV9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gbXRrX2RybV9nZW1fZHVtYl9t YXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKKworCS5w cmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVf ZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9l eHBvcnQgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9n ZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbXRrX2dlbV9wcmlt ZV9nZXRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBtdGtfZ2VtX3By aW1lX2ltcG9ydF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1lX21tYXAgPSBtdGtfZHJtX2dlbV9tbWFw X2J1ZiwKKwkuZm9wcyA9ICZtdGtfZHJtX2ZvcHMsCisKKwkubmFtZSA9IERSSVZFUl9OQU1FLAor CS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBEUklWRVJfREFURSwKKwkubWFqb3IgPSBE UklWRVJfTUFKT1IsCisJLm1pbm9yID0gRFJJVkVSX01JTk9SLAorfTsKKworc3RhdGljIGludCBj b21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGV2 LT5vZl9ub2RlID09IGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dl dF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlpbnQgcmV0OworCisJ ZHJtID0gZHJtX2Rldl9hbGxvYygmbXRrX2RybV9kcml2ZXIsIGRldik7CisJaWYgKCFkcm0pCisJ CXJldHVybiAtRU5PTUVNOworCisJZHJtX2Rldl9zZXRfdW5pcXVlKGRybSwgZGV2X25hbWUoZGV2 KSk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJldCA8IDApCisJ CWdvdG8gZXJyX2ZyZWU7CisKKwlkcm0tPmRldl9wcml2YXRlID0gcHJpdmF0ZTsKKwlwcml2YXRl LT5kcm0gPSBkcm07CisKKwlyZXQgPSBtdGtfZHJtX2ttc19pbml0KGRybSk7CisJaWYgKHJldCA8 IDApCisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0 ZXI6CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CitlcnJfZnJlZToKKwlkcm1fZGV2X3VucmVm KGRybSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV91bmJpbmQoc3Ry dWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRybV9wdXRfZGV2KHByaXZhdGUtPmRybSk7CisJcHJp dmF0ZS0+ZHJtID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFz dGVyX29wcyBtdGtfZHJtX29wcyA9IHsKKwkuYmluZAkJPSBtdGtfZHJtX2JpbmQsCisJLnVuYmlu ZAkJPSBtdGtfZHJtX3VuYmluZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIG10a19kZHBfY29tcF9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr LG10ODE3My1kaXNwLW92bCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09WTCB9LAorCXsg LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcmRtYSIsICAuZGF0YSA9ICh2b2lk ICopTVRLX0RJU1BfUkRNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRp c3Atd2RtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfV0RNQSB9LAorCXsgLmNvbXBhdGli bGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtY29sb3IiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJ U1BfQ09MT1IgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWFhbCIs ICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX0FBTH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRp YXRlayxtdDgxNzMtZGlzcC1nYW1tYSIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9HQU1NQSwg fSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXVmb2UiLCAgLmRhdGEg PSAodm9pZCAqKU1US19ESVNQX1VGT0UgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10 ODE3My1kc2kiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EU0kgfSwKKwl7IC5jb21wYXRp YmxlID0gIm1lZGlhdGVrLG10ODE3My1kcGkiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19E UEkgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW11dGV4IiwgLmRh dGEgPSAodm9pZCAqKU1US19ESVNQX01VVEVYIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxtdDgxNzMtZGlzcC1wd20iLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9QV00gfSwKKwl7 IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW9kIiwgICAgLmRhdGEgPSAodm9p ZCAqKU1US19ESVNQX09EIH0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IG10a19kcm1fcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IHJl c291cmNlICptZW07CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCXN0cnVjdCBjb21wb25l bnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlpbnQgcmV0OworCWludCBpOworCisJcHJpdmF0ZSA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICgh cHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZwcml2YXRlLT5jb21t aXQubG9jayk7CisJSU5JVF9XT1JLKCZwcml2YXRlLT5jb21taXQud29yaywgbXRrX2F0b21pY193 b3JrKTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01F TSwgMCk7CisJcHJpdmF0ZS0+Y29uZmlnX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2 LCBtZW0pOworCWlmIChJU19FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpKSB7CisJCXJldCA9IFBU Ul9FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBp b3JlbWFwIG1tc3lzLWNvbmZpZyByZXNvdXJjZTogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCS8qIEl0ZXJhdGUgb3ZlciBzaWJsaW5nIERJU1AgZnVuY3Rpb24gYmxvY2tz ICovCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVudCwgbm9kZSkg eworCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwkJZW51bSBtdGtfZGRwX2Nv bXBfdHlwZSBjb21wX3R5cGU7CisJCWludCBjb21wX2lkOworCisJCW9mX2lkID0gb2ZfbWF0Y2hf bm9kZShtdGtfZGRwX2NvbXBfZHRfaWRzLCBub2RlKTsKKwkJaWYgKCFvZl9pZCkKKwkJCWNvbnRp bnVlOworCisJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkgeworCQkJZGV2X2Ri ZyhkZXYsICJTa2lwcGluZyBkaXNhYmxlZCBjb21wb25lbnQgJXNcbiIsCisJCQkJbm9kZS0+ZnVs bF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF90eXBlID0gKGVudW0gbXRrX2Rk cF9jb21wX3R5cGUpb2ZfaWQtPmRhdGE7CisKKwkJaWYgKGNvbXBfdHlwZSA9PSBNVEtfRElTUF9N VVRFWCkgeworCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9mX25vZGVfZ2V0KG5vZGUpOworCQkJ Y29udGludWU7CisJCX0KKworCQljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChub2RlLCBj b21wX3R5cGUpOworCQlpZiAoY29tcF9pZCA8IDApIHsKKwkJCWRldl93YXJuKGRldiwgIlNraXBw aW5nIHVua25vd24gY29tcG9uZW50ICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJ Y29udGludWU7CisJCX0KKworCQlwcml2YXRlLT5jb21wX25vZGVbY29tcF9pZF0gPSBvZl9ub2Rl X2dldChub2RlKTsKKworCQkvKgorCQkgKiBDdXJyZW50bHkgb25seSB0aGUgT1ZMLCBSRE1BLCBE U0ksIGFuZCBEUEkgYmxvY2tzIGhhdmUKKwkJICogc2VwYXJhdGUgY29tcG9uZW50IHBsYXRmb3Jt IGRyaXZlcnMgYW5kIGluaXRpYWxpemUgdGhlaXIgb3duCisJCSAqIEREUCBjb21wb25lbnQgc3Ry dWN0dXJlLiBUaGUgb3RoZXJzIGFyZSBpbml0aWFsaXplZCBoZXJlLgorCQkgKi8KKwkJaWYgKGNv bXBfdHlwZSA9PSBNVEtfRElTUF9PVkwgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRElTUF9S RE1BIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RTSSB8fAorCQkgICAgY29tcF90eXBlID09 IE1US19EUEkpIHsKKwkJCWRldl9pbmZvKGRldiwgIkFkZGluZyBjb21wb25lbnQgbWF0Y2ggZm9y ICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJY29tcG9uZW50X21hdGNoX2FkZChk ZXYsICZtYXRjaCwgY29tcGFyZV9vZiwgbm9kZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgbXRr X2RkcF9jb21wICpjb21wOworCisJCQljb21wID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpj b21wKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJCQlyZXQgPSAtRU5PTUVNOwor CQkJCWdvdG8gZXJyX25vZGU7CisJCQl9CisKKwkJCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRl diwgbm9kZSwgY29tcCwgY29tcF9pZCwgTlVMTCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJy X25vZGU7CisKKwkJCXByaXZhdGUtPmRkcF9jb21wW2NvbXBfaWRdID0gY29tcDsKKwkJfQorCX0K KworCWlmICghcHJpdmF0ZS0+bXV0ZXhfbm9kZSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBmaW5kIGRpc3AtbXV0ZXggbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJy X25vZGU7CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXBsYXRmb3JtX3NldF9k cnZkYXRhKHBkZXYsIHByaXZhdGUpOworCisJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0 aF9tYXRjaChkZXYsICZtdGtfZHJtX29wcywgbWF0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gZXJy X3BtOworCisJcmV0dXJuIDA7CisKK2Vycl9wbToKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsK K2Vycl9ub2RlOgorCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCWZvciAoaSA9 IDA7IGkgPCBERFBfQ09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlvZl9ub2RlX3B1dChwcml2YXRl LT5jb21wX25vZGVbaV0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w cml2YXRlICpwcml2YXRlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKwlpbnQgaTsKKworCWRybV9jb25uZWN0b3Jf dW5yZWdpc3Rlcl9hbGwoZHJtKTsKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKKwltdGtfZHJt X2ttc19kZWluaXQoZHJtKTsKKwlkcm1fZGV2X3VucmVmKGRybSk7CisKKwljb21wb25lbnRfbWFz dGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RybV9vcHMpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgm cGRldi0+ZGV2KTsKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkg PSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0 ZS0+Y29tcF9ub2RlW2ldKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NM RUVQCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQor eworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJZHJtX2ttc19o ZWxwZXJfcG9sbF9kaXNhYmxlKGRybSk7CisKKwlwcml2YXRlLT5zdXNwZW5kX3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfc3VzcGVuZChkcm0pOworCWlmIChJU19FUlIocHJpdmF0ZS0+c3VzcGVu ZF9zdGF0ZSkpIHsKKwkJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZHJtKTsKKwkJcmV0dXJu IFBUUl9FUlIocHJpdmF0ZS0+c3VzcGVuZF9zdGF0ZSk7CisJfQorCisJRFJNX0RFQlVHX0RSSVZF UigibXRrX2RybV9zeXNfc3VzcGVuZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2RybV9zeXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Ry bV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKworCWRybV9hdG9taWNfaGVscGVyX3Jlc3VtZShk cm0sIHByaXZhdGUtPnN1c3BlbmRfc3RhdGUpOworCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxl KGRybSk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtdGtfZHJtX3N5c19yZXN1bWVcbiIpOworCXJl dHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtdGtfZHJtX3Bt X29wcywgbXRrX2RybV9zeXNfc3VzcGVuZCwKKwkJCSBtdGtfZHJtX3N5c19yZXN1bWUpOworCitz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHJtX29mX2lkc1tdID0geworCXsg LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLW1tc3lzIiwgfSwKKwl7IH0KK307CisKK3N0 YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kcm1fcGxhdGZvcm1fZHJpdmVyID0gewor CS5wcm9iZQk9IG10a19kcm1fcHJvYmUsCisJLnJlbW92ZQk9IG10a19kcm1fcmVtb3ZlLAorCS5k cml2ZXIJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRybSIsCisJCS5vZl9tYXRjaF90YWJsZSA9 IG10a19kcm1fb2ZfaWRzLAorCQkucG0gICAgID0gJm10a19kcm1fcG1fb3BzLAorCX0sCit9Owor CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19kcm1fZHJpdmVyc1td ID0geworCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKKwkmbXRrX2RkcF9kcml2ZXIsCisJJm10 a19kaXNwX292bF9kcml2ZXIsCisJJm10a19kaXNwX3JkbWFfZHJpdmVyLAorfTsKKworc3RhdGlj IGludCBfX2luaXQgbXRrX2RybV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19kcm1fZHJpdmVycyk7IGkrKykgeworCQly ZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIobXRrX2RybV9kcml2ZXJzW2ldKTsKKwkJaWYg KHJldCA8IDApIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIGRyaXZlcjogJWRc biIsCisJCQkgICAgICAgbXRrX2RybV9kcml2ZXJzW2ldLT5kcml2ZXIubmFtZSwgcmV0KTsKKwkJ CWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwl3aGlsZSAoLS1pID49 IDApCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXRrX2RybV9leGl0KHZvaWQp Cit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBBUlJBWV9TSVpFKG10a19kcm1fZHJpdmVycykgLSAx OyBpID49IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2RybV9kcml2 ZXJzW2ldKTsKK30KKworbW9kdWxlX2luaXQobXRrX2RybV9pbml0KTsKK21vZHVsZV9leGl0KG10 a19kcm1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIllUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsu Y29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYXRlayBTb0MgRFJNIGRyaXZlciIpOwor TU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k cnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2RjOGZhCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKQEAgLTAs MCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5k ZWYgTVRLX0RSTV9EUlZfSAorI2RlZmluZSBNVEtfRFJNX0RSVl9ICisKKyNpbmNsdWRlIDxsaW51 eC9pby5oPgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBNQVhfQ1JU QwkyCisjZGVmaW5lIE1BWF9DT05ORUNUT1IJMgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRl dmljZV9ub2RlOworc3RydWN0IGRybV9jcnRjOworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlcjsKK3N0cnVjdCBkcm1fcHJvcGVydHk7CitzdHJ1Y3QgcmVnbWFwOworCitz dHJ1Y3QgbXRrX2RybV9wcml2YXRlIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCXN0cnVj dCBkZXZpY2UgKmRtYV9kZXY7CisKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGNbTUFYX0NSVENdOwor CXVuc2lnbmVkIGludCBudW1fcGlwZXM7CisKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm11dGV4X25v ZGU7CisJc3RydWN0IGRldmljZSAqbXV0ZXhfZGV2OworCXZvaWQgX19pb21lbSAqY29uZmlnX3Jl Z3M7CisJc3RydWN0IGRldmljZV9ub2RlICpjb21wX25vZGVbRERQX0NPTVBPTkVOVF9JRF9NQVhd OworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmRkcF9jb21wW0REUF9DT01QT05FTlRfSURfTUFYXTsK KworCXN0cnVjdCB7CisJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKKwkJc3RydWN0 IHdvcmtfc3RydWN0IHdvcms7CisJCXN0cnVjdCBtdXRleCBsb2NrOworCX0gY29tbWl0OworCisJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN1c3BlbmRfc3RhdGU7Cit9OworCitleHRlcm4gc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGRwX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBtdGtfZGlzcF9yZG1hX2RyaXZlcjsKKworI2VuZGlmIC8qIE1US19EUk1fRFJWX0ggKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjMzZDMwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9mYi5jCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0 IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5j bHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KKworI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisj aW5jbHVkZSAibXRrX2RybV9mYi5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisKKy8qCisg KiBtdGsgc3BlY2lmaWMgZnJhbWVidWZmZXIgc3RydWN0dXJlLgorICoKKyAqIEBmYjogZHJtIGZy YW1lYnVmZmVyIG9iamVjdC4KKyAqIEBnZW1fb2JqOiBhcnJheSBvZiBnZW0gb2JqZWN0cy4KKyAq Lworc3RydWN0IG10a19kcm1fZmIgeworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIJYmFzZTsKKwkv KiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSBwbGFuZSAqLworCXN0cnVjdCBkcm1f Z2VtX29iamVjdAkqZ2VtX29iajsKK307CisKKyNkZWZpbmUgdG9fbXRrX2ZiKHgpIGNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9mYiwgYmFzZSkKKworc3RydWN0IGRybV9nZW1fb2JqZWN0 ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3Ry dWN0IG10a19kcm1fZmIgKm10a19mYiA9IHRvX210a19mYihmYik7CisKKwlyZXR1cm4gbXRrX2Zi LT5nZW1fb2JqOworfQorCitzdGF0aWMgaW50IG10a19kcm1fZmJfY3JlYXRlX2hhbmRsZShzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYsCisJCQkJICAgIHVuc2lnbmVkIGludCAqaGFuZGxlKQoreworCXN0cnVjdCBtdGtfZHJtX2Zi ICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJcmV0dXJuIGRybV9nZW1faGFuZGxlX2NyZWF0 ZShmaWxlX3ByaXYsIG10a19mYi0+Z2VtX29iaiwgaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQg bXRrX2RybV9mYl9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVj dCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJZHJtX2ZyYW1lYnVmZmVy X2NsZWFudXAoZmIpOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQobXRr X2ZiLT5nZW1fb2JqKTsKKworCWtmcmVlKG10a19mYik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIG10a19kcm1fZmJfZnVuY3MgPSB7CisJLmNyZWF0ZV9o YW5kbGUgPSBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUsCisJLmRlc3Ryb3kgPSBtdGtfZHJtX2Zi X2Rlc3Ryb3ksCit9OworCitzdGF0aWMgc3RydWN0IG10a19kcm1fZmIgKm10a19kcm1fZnJhbWVi dWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgZHJt X21vZGVfZmJfY21kMiAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7 CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlpbnQgcmV0OworCisJaWYgKGRybV9mb3Jt YXRfbnVtX3BsYW5lcyhtb2RlLT5waXhlbF9mb3JtYXQpICE9IDEpCisJCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOworCisJbXRrX2ZiID0ga3phbGxvYyhzaXplb2YoKm10a19mYiksIEdGUF9LRVJO RUwpOworCWlmICghbXRrX2ZiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRybV9o ZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmbXRrX2ZiLT5iYXNlLCBtb2RlKTsKKworCW10a19m Yi0+Z2VtX29iaiA9IG9iajsKKworCXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJm10 a19mYi0+YmFzZSwgJm10a19kcm1fZmJfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlclxuIik7CisJCWtmcmVlKG10a19mYik7 CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG10a19mYjsKK30KKworLyoK KyAqIFdhaXQgZm9yIGFueSBleGNsdXNpdmUgZmVuY2UgaW4gZmIncyBnZW0gb2JqZWN0J3MgcmVz ZXJ2YXRpb24gb2JqZWN0LgorICoKKyAqIFJldHVybnMgLUVSRVNUQVJUU1lTIGlmIGludGVycnVw dGVkLCBlbHNlIDAuCisgKi8KK2ludCBtdGtfZmJfd2FpdChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKKwlzdHJ1Y3QgcmVzZXJ2YXRp b25fb2JqZWN0ICpyZXN2OworCWxvbmcgcmV0OworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7CisK KwlnZW0gPSBtdGtfZmJfZ2V0X2dlbV9vYmooZmIpOworCWlmICghZ2VtIHx8ICFnZW0tPmRtYV9i dWYgfHwgIWdlbS0+ZG1hX2J1Zi0+cmVzdikKKwkJcmV0dXJuIDA7CisKKwlyZXN2ID0gZ2VtLT5k bWFfYnVmLT5yZXN2OworCXJldCA9IHJlc2VydmF0aW9uX29iamVjdF93YWl0X3RpbWVvdXRfcmN1 KHJlc3YsIGZhbHNlLCB0cnVlLAorCQkJCQkJICBNQVhfU0NIRURVTEVfVElNRU9VVCk7CisJLyog TUFYX1NDSEVEVUxFX1RJTUVPVVQgb24gc3VjY2VzcywgLUVSRVNUQVJUU1lTIGlmIGludGVycnVw dGVkICovCisJaWYgKFdBUk5fT04ocmV0IDwgMCkpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4g MDsKK30KKworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxl LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCkKK3sKKwlz dHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwor CXVuc2lnbmVkIGludCB3aWR0aCA9IGNtZC0+d2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodCA9 IGNtZC0+aGVpZ2h0OworCXVuc2lnbmVkIGludCBzaXplLCBicHA7CisJaW50IHJldDsKKworCWlm IChkcm1fZm9ybWF0X251bV9wbGFuZXMoY21kLT5waXhlbF9mb3JtYXQpICE9IDEpCisJCXJldHVy biBFUlJfUFRSKC1FSU5WQUwpOworCisJZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwg ZmlsZSwgY21kLT5oYW5kbGVzWzBdKTsKKwlpZiAoIWdlbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T0VOVCk7CisKKwlicHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChjbWQtPnBpeGVsX2Zvcm1hdCwg MCk7CisJc2l6ZSA9IChoZWlnaHQgLSAxKSAqIGNtZC0+cGl0Y2hlc1swXSArIHdpZHRoICogYnBw OworCXNpemUgKz0gY21kLT5vZmZzZXRzWzBdOworCisJaWYgKGdlbS0+c2l6ZSA8IHNpemUpIHsK KwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bnJlZmVyZW5jZTsKKwl9CisKKwltdGtfZmIgPSBt dGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCBjbWQsIGdlbSk7CisJaWYgKElTX0VSUihtdGtf ZmIpKSB7CisJCXJldCA9IFBUUl9FUlIobXRrX2ZiKTsKKwkJZ290byB1bnJlZmVyZW5jZTsKKwl9 CisKKwlyZXR1cm4gJm10a19mYi0+YmFzZTsKKwordW5yZWZlcmVuY2U6CisJZHJtX2dlbV9vYmpl Y3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaCBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uOWIyYWUzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2ZiLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9GQl9ICisjZGVmaW5lIE1US19E Uk1fRkJfSAorCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm10a19mYl9nZXRfZ2VtX29iaihzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIpOworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2ZiX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRybV9maWxl ICpmaWxlLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCk7 CisKKyNlbmRpZiAvKiBNVEtfRFJNX0ZCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3M2JmYQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCkBA IC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwor I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRl IDxsaW51eC9kbWEtYnVmLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUg Im10a19kcm1fZ2VtLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJt X2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQl1bnNpZ25lZCBsb25nIHNp emUpCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbV9vYmo7CisJaW50IHJldDsK KworCXNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpOworCisJbXRrX2dlbV9vYmogPSBr emFsbG9jKHNpemVvZigqbXRrX2dlbV9vYmopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19nZW1f b2JqKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJldCA9IGRybV9nZW1fb2JqZWN0 X2luaXQoZGV2LCAmbXRrX2dlbV9vYmotPmJhc2UsIHNpemUpOworCWlmIChyZXQgPCAwKSB7CisJ CURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZ2VtIG9iamVjdFxuIik7CisJCWtmcmVl KG10a19nZW1fb2JqKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlyZXR1cm4gbXRr X2dlbV9vYmo7Cit9CisKK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICBzaXplX3Qgc2l6ZSwgYm9vbCBhbGxv Y19rbWFwKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2 YXRlOworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07CisJc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCW10a19nZW0gPSBtdGtfZHJtX2dlbV9pbml0KGRl diwgc2l6ZSk7CisJaWYgKElTX0VSUihtdGtfZ2VtKSkKKwkJcmV0dXJuIEVSUl9DQVNUKG10a19n ZW0pOworCisJb2JqID0gJm10a19nZW0tPmJhc2U7CisKKwlpbml0X2RtYV9hdHRycygmbXRrX2dl bS0+ZG1hX2F0dHJzKTsKKwlkbWFfc2V0X2F0dHIoRE1BX0FUVFJfV1JJVEVfQ09NQklORSwgJm10 a19nZW0tPmRtYV9hdHRycyk7CisKKwlpZiAoIWFsbG9jX2ttYXApCisJCWRtYV9zZXRfYXR0cihE TUFfQVRUUl9OT19LRVJORUxfTUFQUElORywgJm10a19nZW0tPmRtYV9hdHRycyk7CisKKwltdGtf Z2VtLT5jb29raWUgPSBkbWFfYWxsb2NfYXR0cnMocHJpdi0+ZG1hX2Rldiwgb2JqLT5zaXplLAor CQkJCQkgICZtdGtfZ2VtLT5kbWFfYWRkciwgR0ZQX0tFUk5FTCwKKwkJCQkJICAmbXRrX2dlbS0+ ZG1hX2F0dHJzKTsKKwlpZiAoIW10a19nZW0tPmNvb2tpZSkgeworCQlEUk1fRVJST1IoImZhaWxl ZCB0byBhbGxvY2F0ZSAlenggYnl0ZSBkbWEgYnVmZmVyIiwgb2JqLT5zaXplKTsKKwkJcmV0ID0g LUVOT01FTTsKKwkJZ290byBlcnJfZ2VtX2ZyZWU7CisJfQorCisJaWYgKGFsbG9jX2ttYXApCisJ CW10a19nZW0tPmt2YWRkciA9IG10a19nZW0tPmNvb2tpZTsKKworCURSTV9ERUJVR19EUklWRVIo ImNvb2tpZSA9ICVwIGRtYV9hZGRyID0gJXBhZCBzaXplID0gJXp1XG4iLAorCQkJIG10a19nZW0t PmNvb2tpZSwgJm10a19nZW0tPmRtYV9hZGRyLAorCQkJIHNpemUpOworCisJcmV0dXJuIG10a19n ZW07CisKK2Vycl9nZW1fZnJlZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJa2Zy ZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBtdGtfZHJtX2dl bV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbXRr X2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKwlzdHJ1Y3QgbXRr X2RybV9wcml2YXRlICpwcml2ID0gb2JqLT5kZXYtPmRldl9wcml2YXRlOworCisJaWYgKG10a19n ZW0tPnNnKQorCQlkcm1fcHJpbWVfZ2VtX2Rlc3Ryb3kob2JqLCBtdGtfZ2VtLT5zZyk7CisJZWxz ZQorCQlkbWFfZnJlZV9hdHRycyhwcml2LT5kbWFfZGV2LCBvYmotPnNpemUsIG10a19nZW0tPmNv b2tpZSwKKwkJCSAgICAgICBtdGtfZ2VtLT5kbWFfYWRkciwgJm10a19nZW0tPmRtYV9hdHRycyk7 CisKKwkvKiByZWxlYXNlIGZpbGUgcG9pbnRlciB0byBnZW0gb2JqZWN0LiAqLworCWRybV9nZW1f b2JqZWN0X3JlbGVhc2Uob2JqKTsKKworCWtmcmVlKG10a19nZW0pOworfQorCitpbnQgbXRrX2Ry bV9nZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKQor eworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07CisJaW50IHJldDsKKworCWFyZ3Mt PnBpdGNoID0gRElWX1JPVU5EX1VQKGFyZ3MtPndpZHRoICogYXJncy0+YnBwLCA4KTsKKwlhcmdz LT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CisKKwltdGtfZ2VtID0gbXRrX2Ry bV9nZW1fY3JlYXRlKGRldiwgYXJncy0+c2l6ZSwgZmFsc2UpOworCWlmIChJU19FUlIobXRrX2dl bSkpCisJCXJldHVybiBQVFJfRVJSKG10a19nZW0pOworCisJLyoKKwkgKiBhbGxvY2F0ZSBhIGlk IG9mIGlkciB0YWJsZSB3aGVyZSB0aGUgb2JqIGlzIHJlZ2lzdGVyZWQKKwkgKiBhbmQgaGFuZGxl IGhhcyB0aGUgaWQgd2hhdCB1c2VyIGNhbiBzZWUuCisJICovCisJcmV0ID0gZHJtX2dlbV9oYW5k bGVfY3JlYXRlKGZpbGVfcHJpdiwgJm10a19nZW0tPmJhc2UsICZhcmdzLT5oYW5kbGUpOworCWlm IChyZXQpCisJCWdvdG8gZXJyX2hhbmRsZV9jcmVhdGU7CisKKwkvKiBkcm9wIHJlZmVyZW5jZSBm cm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5vdy4gKi8KKwlkcm1fZ2VtX29iamVjdF91 bnJlZmVyZW5jZV91bmxvY2tlZCgmbXRrX2dlbS0+YmFzZSk7CisKKwlyZXR1cm4gMDsKKworZXJy X2hhbmRsZV9jcmVhdGU6CisJbXRrX2RybV9nZW1fZnJlZV9vYmplY3QoJm10a19nZW0tPmJhc2Up OworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9kdW1iX21hcF9vZmZzZXQoc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWlu dDMyX3QgaGFuZGxlLAorCQkJCXVpbnQ2NF90ICpvZmZzZXQpCit7CisJc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChk ZXYsIGZpbGVfcHJpdiwgaGFuZGxlKTsKKwlpZiAoIW9iaikgeworCQlEUk1fRVJST1IoImZhaWxl ZCB0byBsb29rdXAgZ2VtIG9iamVjdC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwly ZXQgPSBkcm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChvYmopOworCWlmIChyZXQpCisJCWdvdG8g b3V0OworCisJKm9mZnNldCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmb2JqLT52bWFfbm9k ZSk7CisJRFJNX0RFQlVHX0tNUygib2Zmc2V0ID0gMHglbGx4XG4iLCAqb2Zmc2V0KTsKKworb3V0 OgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwKKwkJCQkgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKKworewor CWludCByZXQ7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1f b2JqKG9iaik7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZf cHJpdmF0ZTsKKworCS8qCisJICogZG1hX2FsbG9jX2F0dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0 IHBhZ2UgdGFibGUgZm9yIG10a19nZW0sIHNvIGNsZWFyCisJICogVk1fUEZOTUFQIGZsYWcgdGhh dCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcF9vYmooKS9kcm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2 bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9wZ29mZiA9IDA7CisKKwlyZXQg PSBkbWFfbW1hcF9hdHRycyhwcml2LT5kbWFfZGV2LCB2bWEsIG10a19nZW0tPmNvb2tpZSwKKwkJ CSAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwgJm10a19nZW0tPmRtYV9hdHRycyk7 CisJaWYgKHJldCkKKwkJZHJtX2dlbV92bV9jbG9zZSh2bWEpOworCisJcmV0dXJuIHJldDsKK30K KworaW50IG10a19kcm1fZ2VtX21tYXBfYnVmKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dl bV9tbWFwX29iaihvYmosIG9iai0+c2l6ZSwgdm1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworaW50 IG10a19kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwly ZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gbXRrX2RybV9nZW1fb2Jq ZWN0X21tYXAob2JqLCB2bWEpOworfQorCisvKgorICogQWxsb2NhdGUgYSBzZ190YWJsZSBmb3Ig dGhpcyBHRU0gb2JqZWN0LgorICogTm90ZTogQm90aCB0aGUgdGFibGUncyBjb250ZW50cywgYW5k IHRoZSBzZ190YWJsZSBpdHNlbGYgbXVzdCBiZSBmcmVlZCBieQorICogICAgICAgdGhlIGNhbGxl ci4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc2dfdGFibGUs IG9yIGFuIEVSUl9QVFIoKSBlcnJvci4KKyAqLworc3RydWN0IHNnX3RhYmxlICptdGtfZ2VtX3By aW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3Qg bXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKwlzdHJ1Y3Qg bXRrX2RybV9wcml2YXRlICpwcml2ID0gb2JqLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBz Z190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3QgPSBremFsbG9jKHNpemVvZigqc2d0KSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ cmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKHByaXYtPmRtYV9kZXYsIHNndCwgbXRrX2dlbS0+ Y29va2llLAorCQkJCSAgICBtdGtfZ2VtLT5kbWFfYWRkciwgb2JqLT5zaXplLAorCQkJCSAgICAm bXRrX2dlbS0+ZG1hX2F0dHJzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRv IGFsbG9jYXRlIHNndCwgJWRcbiIsIHJldCk7CisJCWtmcmVlKHNndCk7CisJCXJldHVybiBFUlJf UFRSKHJldCk7CisJfQorCisJcmV0dXJuIHNndDsKK30KKworc3RydWN0IGRybV9nZW1fb2JqZWN0 ICptdGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNn KQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07CisJaW50IHJldDsKKwlzdHJ1 Y3Qgc2NhdHRlcmxpc3QgKnM7CisJdW5zaWduZWQgaW50IGk7CisJZG1hX2FkZHJfdCBleHBlY3Rl ZDsKKworCW10a19nZW0gPSBtdGtfZHJtX2dlbV9pbml0KGRldiwgYXR0YWNoLT5kbWFidWYtPnNp emUpOworCisJaWYgKElTX0VSUihtdGtfZ2VtKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUiht dGtfZ2VtKSk7CisKKwlleHBlY3RlZCA9IHNnX2RtYV9hZGRyZXNzKHNnLT5zZ2wpOworCWZvcl9l YWNoX3NnKHNnLT5zZ2wsIHMsIHNnLT5uZW50cywgaSkgeworCQlpZiAoc2dfZG1hX2FkZHJlc3Mo cykgIT0gZXhwZWN0ZWQpIHsKKwkJCURSTV9FUlJPUigic2dfdGFibGUgaXMgbm90IGNvbnRpZ3Vv dXMiKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycl9nZW1fZnJlZTsKKwkJfQorCQll eHBlY3RlZCA9IHNnX2RtYV9hZGRyZXNzKHMpICsgc2dfZG1hX2xlbihzKTsKKwl9CisKKwltdGtf Z2VtLT5kbWFfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnLT5zZ2wpOworCW10a19nZW0tPnNnID0g c2c7CisKKwlyZXR1cm4gJm10a19nZW0tPmJhc2U7CisKK2Vycl9nZW1fZnJlZToKKwlrZnJlZSht dGtfZ2VtKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTJhNTYy Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2Vt LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpZm5kZWYgX01US19EUk1fR0VNX0hfCisjZGVmaW5lIF9NVEtfRFJNX0dFTV9IXworCisj aW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKworLyoKKyAqIG10ayBkcm0gYnVmZmVyIHN0cnVjdHVy ZS4KKyAqCisgKiBAYmFzZTogYSBnZW0gb2JqZWN0LgorICoJLSBhIG5ldyBoYW5kbGUgdG8gdGhp cyBnZW0gb2JqZWN0IHdvdWxkIGJlIGNyZWF0ZWQKKyAqCWJ5IGRybV9nZW1faGFuZGxlX2NyZWF0 ZSgpLgorICogQGNvb2tpZTogdGhlIHJldHVybiB2YWx1ZSBvZiBkbWFfYWxsb2NfYXR0cnMoKSwg a2VlcCBpdCBmb3IgZG1hX2ZyZWVfYXR0cnMoKQorICogQGt2YWRkcjoga2VybmVsIHZpcnR1YWwg YWRkcmVzcyBvZiBnZW0gYnVmZmVyLgorICogQGRtYV9hZGRyOiBkbWEgYWRkcmVzcyBvZiBnZW0g YnVmZmVyLgorICogQGRtYV9hdHRyczogZG1hIGF0dHJpYnV0ZXMgb2YgZ2VtIGJ1ZmZlci4KKyAq CisgKiBQLlMuIHRoaXMgb2JqZWN0IHdvdWxkIGJlIHRyYW5zZmVycmVkIHRvIHVzZXIgYXMga21z X2JvLmhhbmRsZSBzbworICoJdXNlciBjYW4gYWNjZXNzIHRoZSBidWZmZXIgdGhyb3VnaCBrbXNf Ym8uaGFuZGxlLgorICovCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqIHsKKwlzdHJ1Y3QgZHJtX2dl bV9vYmplY3QJYmFzZTsKKwl2b2lkCQkJKmNvb2tpZTsKKwl2b2lkCQkJKmt2YWRkcjsKKwlkbWFf YWRkcl90CQlkbWFfYWRkcjsKKwlzdHJ1Y3QgZG1hX2F0dHJzCWRtYV9hdHRyczsKKwlzdHJ1Y3Qg c2dfdGFibGUJCSpzZzsKK307CisKKyNkZWZpbmUgdG9fbXRrX2dlbV9vYmooeCkJY29udGFpbmVy X29mKHgsIHN0cnVjdCBtdGtfZHJtX2dlbV9vYmosIGJhc2UpCisKK3ZvaWQgbXRrX2RybV9nZW1f ZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0pOworc3RydWN0IG10a19kcm1f Z2VtX29iaiAqbXRrX2RybV9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVf dCBzaXplLAorCQkJCQkgICBib29sIGFsbG9jX2ttYXApOworaW50IG10a19kcm1fZ2VtX2R1bWJf Y3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7CitpbnQgbXRrX2Ry bV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zm c2V0KTsKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSk7CitpbnQgbXRrX2RybV9nZW1fbW1hcF9idWYoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosCisJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworc3RydWN0 IHNnX3RhYmxlICptdGtfZ2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaik7CitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm10a19nZW1fcHJpbWVfaW1wb3J0X3Nn X3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50ICphdHRhY2gsIHN0cnVjdCBzZ190YWJsZSAqc2cpOworCisjZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmM4OTg3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9wbGFuZS5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IChj KSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNv bT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8K KworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5l X2hlbHBlci5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2Ry bV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2Ry bV9mYi5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFu ZS5oIgorCitzdGF0aWMgY29uc3QgdTMyIGZvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX1hSR0I4 ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCit9OworCitz dGF0aWMgdm9pZCBtdGtfcGxhbmVfZW5hYmxlKHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxh bmUsIGJvb2wgZW5hYmxlLAorCQkJICAgICBkbWFfYWRkcl90IGFkZHIsIHN0cnVjdCBkcm1fcmVj dCAqZGVzdCkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfcGxhbmUtPmJhc2U7 CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxh bmUtPnN0YXRlKTsKKwl1bnNpZ25lZCBpbnQgcGl0Y2gsIGZvcm1hdDsKKwlpbnQgeCwgeTsKKwor CWlmIChXQVJOX09OKCFwbGFuZS0+c3RhdGUgfHwgKGVuYWJsZSAmJiAhcGxhbmUtPnN0YXRlLT5m YikpKQorCQlyZXR1cm47CisKKwlpZiAocGxhbmUtPnN0YXRlLT5mYikgeworCQlwaXRjaCA9IHBs YW5lLT5zdGF0ZS0+ZmItPnBpdGNoZXNbMF07CisJCWZvcm1hdCA9IHBsYW5lLT5zdGF0ZS0+ZmIt PnBpeGVsX2Zvcm1hdDsKKwl9IGVsc2UgeworCQlwaXRjaCA9IDA7CisJCWZvcm1hdCA9IERSTV9G T1JNQVRfUkdCQTg4ODg7CisJfQorCisJeCA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y194OworCXkgPSBw bGFuZS0+c3RhdGUtPmNydGNfeTsKKworCWlmICh4IDwgMCkgeworCQlhZGRyIC09IHggKiA0Owor CQl4ID0gMDsKKwl9CisKKwlpZiAoeSA8IDApIHsKKwkJYWRkciAtPSB5ICogcGl0Y2g7CisJCXkg PSAwOworCX0KKworCXN0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGVuYWJsZTsKKwlzdGF0ZS0+cGVu ZGluZy5waXRjaCA9IHBpdGNoOworCXN0YXRlLT5wZW5kaW5nLmZvcm1hdCA9IGZvcm1hdDsKKwlz dGF0ZS0+cGVuZGluZy5hZGRyID0gYWRkcjsKKwlzdGF0ZS0+cGVuZGluZy54ID0geDsKKwlzdGF0 ZS0+cGVuZGluZy55ID0geTsKKwlzdGF0ZS0+cGVuZGluZy53aWR0aCA9IGRlc3QtPngyIC0gZGVz dC0+eDE7CisJc3RhdGUtPnBlbmRpbmcuaGVpZ2h0ID0gZGVzdC0+eTIgLSBkZXN0LT55MTsKKwl3 bWIoKTsgLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYmVmb3JlIHVw ZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg bXRrX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBtdGtf cGxhbmVfc3RhdGUgKnN0YXRlOworCisJaWYgKHBsYW5lLT5zdGF0ZSkgeworCQlpZiAocGxhbmUt PnN0YXRlLT5mYikKKwkJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShwbGFuZS0+c3RhdGUt PmZiKTsKKworCQlzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCQlt ZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9IGVsc2UgeworCQlzdGF0ZSA9IGt6 YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YXRlKQorCQkJcmV0 dXJuOworCQlwbGFuZS0+c3RhdGUgPSAmc3RhdGUtPmJhc2U7CisJfQorCisJc3RhdGUtPmJhc2Uu cGxhbmUgPSBwbGFuZTsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQgPSBEUk1fRk9STUFUX1JHQjU2 NTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm10a19wbGFuZV9kdXBsaWNh dGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IG10a19wbGFuZV9z dGF0ZSAqb2xkX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJc3Ry dWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpz dGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJX19k cm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZzdGF0ZS0+YmFz ZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLnBsYW5lICE9IHBsYW5lKTsKKworCXN0YXRlLT5w ZW5kaW5nID0gb2xkX3N0YXRlLT5wZW5kaW5nOworCisJcmV0dXJuICZzdGF0ZS0+YmFzZTsKK30K Kworc3RhdGljIHZvaWQgbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAorCQkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlfX2Ry bV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUsIHN0YXRlKTsKKwlrZnJl ZSh0b19tdGtfcGxhbmVfc3RhdGUoc3RhdGUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfZnVuY3MgbXRrX3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1f YXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWlj X2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95ID0gZHJtX3BsYW5lX2NsZWFudXAsCisJ LnJlc2V0ID0gbXRrX3BsYW5lX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gbXRr X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBtdGtfZHJt X3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgaW50IG10a19wbGFuZV9hdG9taWNf Y2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsK KwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisJYm9vbCB2aXNpYmxlOworCXN0 cnVjdCBkcm1fcmVjdCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+Y3J0Y194LAorCQkueTEgPSBz dGF0ZS0+Y3J0Y195LAorCQkueDIgPSBzdGF0ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNfdywKKwkJ LnkyID0gc3RhdGUtPmNydGNfeSArIHN0YXRlLT5jcnRjX2gsCisJfTsKKwlzdHJ1Y3QgZHJtX3Jl Y3Qgc3JjID0geworCQkvKiAxNi4xNiBmaXhlZCBwb2ludCAqLworCQkueDEgPSBzdGF0ZS0+c3Jj X3gsCisJCS55MSA9IHN0YXRlLT5zcmNfeSwKKwkJLngyID0gc3RhdGUtPnNyY194ICsgc3RhdGUt PnNyY193LAorCQkueTIgPSBzdGF0ZS0+c3JjX3kgKyBzdGF0ZS0+c3JjX2gsCisJfTsKKwlzdHJ1 Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghZmIpCisJCXJldHVybiAwOworCisJ aWYgKCFtdGtfZmJfZ2V0X2dlbV9vYmooZmIpKSB7CisJCURSTV9ERUJVR19LTVMoImJ1ZmZlciBp cyBudWxsXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCFzdGF0ZS0+Y3J0YykK KwkJcmV0dXJuIDA7CisKKwljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShz dGF0ZS0+c3RhdGUsIHN0YXRlLT5jcnRjKTsKKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQorCQly ZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKworCWNsaXAueDIgPSBjcnRjX3N0YXRlLT5tb2Rl LmhkaXNwbGF5OworCWNsaXAueTIgPSBjcnRjX3N0YXRlLT5tb2RlLnZkaXNwbGF5OworCisJcmV0 dXJuIGRybV9wbGFuZV9oZWxwZXJfY2hlY2tfdXBkYXRlKHBsYW5lLCBzdGF0ZS0+Y3J0YywgZmIs CisJCQkJCSAgICAgJnNyYywgJmRlc3QsICZjbGlwLAorCQkJCQkgICAgIERSTV9QTEFORV9IRUxQ RVJfTk9fU0NBTElORywKKwkJCQkJICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJ CQkJCSAgICAgdHJ1ZSwgdHJ1ZSwgJnZpc2libGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGxh bmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUg KnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJc3RydWN0IGRybV9j cnRjICpjcnRjID0gc3RhdGUtPmJhc2UuY3J0YzsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdl bTsKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCXN0cnVjdCBtdGtfZHJtX3Bs YW5lICptdGtfcGxhbmUgPSB0b19tdGtfcGxhbmUocGxhbmUpOworCXN0cnVjdCBkcm1fcmVjdCBk ZXN0ID0geworCQkueDEgPSBzdGF0ZS0+YmFzZS5jcnRjX3gsCisJCS55MSA9IHN0YXRlLT5iYXNl LmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmJhc2UuY3J0Y194ICsgc3RhdGUtPmJhc2UuY3J0Y193 LAorCQkueTIgPSBzdGF0ZS0+YmFzZS5jcnRjX3kgKyBzdGF0ZS0+YmFzZS5jcnRjX2gsCisJfTsK KwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghY3J0YykKKwkJcmV0dXJu OworCisJY2xpcC54MiA9IHN0YXRlLT5iYXNlLmNydGMtPnN0YXRlLT5tb2RlLmhkaXNwbGF5Owor CWNsaXAueTIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9kZS52ZGlzcGxheTsKKwlkcm1f cmVjdF9pbnRlcnNlY3QoJmRlc3QsICZjbGlwKTsKKworCWdlbSA9IG10a19mYl9nZXRfZ2VtX29i aihzdGF0ZS0+YmFzZS5mYik7CisJbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKGdlbSk7CisJbXRr X3BsYW5lX2VuYWJsZShtdGtfcGxhbmUsIHRydWUsIG10a19nZW0tPmRtYV9hZGRyLCAmZGVzdCk7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkK K3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShw bGFuZS0+c3RhdGUpOworCisJc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZmFsc2U7CisJd21iKCk7 IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVyIGlzIHNldCBiZWZvcmUgdXBkYXRlICov CisJc3RhdGUtPnBlbmRpbmcuZGlydHkgPSB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRv bWljX2NoZWNrID0gbXRrX3BsYW5lX2F0b21pY19jaGVjaywKKwkuYXRvbWljX3VwZGF0ZSA9IG10 a19wbGFuZV9hdG9taWNfdXBkYXRlLAorCS5hdG9taWNfZGlzYWJsZSA9IG10a19wbGFuZV9hdG9t aWNfZGlzYWJsZSwKK307CisKK2ludCBtdGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLAorCQkgICB1bnNpZ25lZCBsb25n IHBvc3NpYmxlX2NydGNzLCBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUsCisJCSAgIHVuc2lnbmVk IGludCB6cG9zKQoreworCWludCBlcnI7CisKKwllcnIgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2lu aXQoZGV2LCAmbXRrX3BsYW5lLT5iYXNlLCBwb3NzaWJsZV9jcnRjcywKKwkJCQkgICAgICAgJm10 a19wbGFuZV9mdW5jcywgZm9ybWF0cywKKwkJCQkgICAgICAgQVJSQVlfU0laRShmb3JtYXRzKSwg dHlwZSwgTlVMTCk7CisJaWYgKGVycikgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFs aXplIHBsYW5lXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkcm1fcGxhbmVfaGVscGVyX2Fk ZCgmbXRrX3BsYW5lLT5iYXNlLCAmbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisJbXRrX3BsYW5l LT5pZHggPSB6cG9zOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fcGxhbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmE3YjNl Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxh bmUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVr IEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTVRL X0RSTV9QTEFORV9IXworI2RlZmluZSBfTVRLX0RSTV9QTEFORV9IXworCisjaW5jbHVkZSA8ZHJt L2RybV9jcnRjLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IG10a19kcm1f cGxhbmUgeworCXN0cnVjdCBkcm1fcGxhbmUJCWJhc2U7CisJdW5zaWduZWQgaW50CQkJaWR4Owor fTsKKworc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlIHsKKwlib29sCQkJCWNvbmZpZzsK Kwlib29sCQkJCWVuYWJsZTsKKwlkbWFfYWRkcl90CQkJYWRkcjsKKwl1bnNpZ25lZCBpbnQJCQlw aXRjaDsKKwl1bnNpZ25lZCBpbnQJCQlmb3JtYXQ7CisJdW5zaWduZWQgaW50CQkJeDsKKwl1bnNp Z25lZCBpbnQJCQl5OworCXVuc2lnbmVkIGludAkJCXdpZHRoOworCXVuc2lnbmVkIGludAkJCWhl aWdodDsKKwlib29sCQkJCWRpcnR5OworfTsKKworc3RydWN0IG10a19wbGFuZV9zdGF0ZSB7CisJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZQkJYmFzZTsKKwlzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdf c3RhdGUJcGVuZGluZzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kcm1fcGxhbmUg KnRvX210a19wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlyZXR1cm4gY29udGFp bmVyX29mKHBsYW5lLCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSwgYmFzZSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqCit0b19tdGtfcGxhbmVfc3RhdGUoc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzdGF0ZSwg c3RydWN0IG10a19wbGFuZV9zdGF0ZSwgYmFzZSk7Cit9CisKK2ludCBtdGtfcGxhbmVfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLAor CQkgICB1bnNpZ25lZCBsb25nIHBvc3NpYmxlX2NydGNzLCBlbnVtIGRybV9wbGFuZV90eXBlIHR5 cGUsCisJCSAgIHVuc2lnbmVkIGludCB6cG9zKTsKKworI2VuZGlmCi0tIAoyLjguMC5yYzMKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=