From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v13 02/14] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Tue, 8 Mar 2016 14:27:17 +0100 Message-ID: <1457443649-12133-3-git-send-email-p.zabel@pengutronix.de> References: <1457443649-12133-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: <1457443649-12133-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 b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjEyOgogLSB1c2UgT1ZMIGRldmljZSBpbnN0ZWFk IG9mIG1tc3lzIGRldmljZSBmb3IgRE1BIGFsbG9jYXRpb25zCi0tLQogZHJpdmVycy9ncHUvZHJt L0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9LY29uZmlnICAgICAgICAgICAgfCAgMTIgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01h a2VmaWxlICAgICAgICAgICB8ICAxMSArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rp c3Bfb3ZsLmMgICAgIHwgMzAyICsrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2Rpc3BfcmRtYS5jICAgIHwgMjQwICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwgNTgyICsrKysrKysrKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oICAgICB8ICAzMiAr KwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgICAgICB8IDM1NSArKysr KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmggICAg ICB8ICA0MSArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYyB8 IDIyNSArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2Nv bXAuaCB8IDE1MCArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu YyAgICAgIHwgNTkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTQgKysrCiBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAgIHwgIDIzICsrCiBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwgMjY5ICsrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTkgKysrCiBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQwICsrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oICAgIHwgIDU5ICsrKwogMjAgZmls ZXMgY2hhbmdlZCwgMzQxNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Zi LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9m Yi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f Z2VtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9nZW0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX3BsYW5lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9wbGFuZS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9k cml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA4YWU3YWI2Li5mN2IwZDc5IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpA QCAtMjY5LDMgKzI2OSw1IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2lteC9LY29uZmlnIgog c291cmNlICJkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9n cHUvZHJtL2V0bmF2aXYvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA2MTc2NmRlLi43YjBkMWFiIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBA IC02OSw2ICs2OSw3IEBAIG9iai0kKENPTkZJR19EUk1fTVNNKSArPSBtc20vCiBvYmotJChDT05G SUdfRFJNX1RFR1JBKSArPSB0ZWdyYS8KIG9iai0kKENPTkZJR19EUk1fU1RJKSArPSBzdGkvCiBv YmotJChDT05GSUdfRFJNX0lNWCkgKz0gaW14Lworb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykg Kz0gbWVkaWF0ZWsvCiBvYmoteQkJCSs9IGkyYy8KIG9iai15CQkJKz0gcGFuZWwvCiBvYmoteQkJ CSs9IGJyaWRnZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uOGRhZDg5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9LY29uZmlnCkBAIC0wLDAgKzEsMTIgQEAKK2NvbmZpZyBEUk1fTUVESUFURUsK Kwl0cmlzdGF0ZSAiRFJNIFN1cHBvcnQgZm9yIE1lZGlhdGVrIFNvQ3MiCisJZGVwZW5kcyBvbiBE Uk0KKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgKEFSTSAmJiBDT01QSUxFX1RFU1QpCisJ c2VsZWN0IERSTV9LTVNfSEVMUEVSCisJc2VsZWN0IElPTU1VX0RNQQorCXNlbGVjdCBNVEtfU01J CisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgTWVkaWF0ZWsgU29D cy4KKwkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJtCisJICBUaGlzIGRy aXZlciBwcm92aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAorCSAgYnVmZmVyIG1hbmFnZW1l bnQgdG8gdXNlcnNwYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YmRlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorbWVkaWF0ZWstZHJt LXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAorCQkgIG10a19kaXNwX3JkbWEubyBcCisJCSAgbXRrX2Ry bV9jcnRjLm8gXAorCQkgIG10a19kcm1fZGRwLm8gXAorCQkgIG10a19kcm1fZGRwX2NvbXAubyBc CisJCSAgbXRrX2RybV9kcnYubyBcCisJCSAgbXRrX2RybV9mYi5vIFwKKwkJICBtdGtfZHJtX2dl bS5vIFwKKwkJICBtdGtfZHJtX3BsYW5lLm8KKworb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykg Kz0gbWVkaWF0ZWstZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZGlzcF9vdmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjYyNjcxZgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpAQCAtMCwwICsx LDMwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRl IDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nv bXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4 L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVk ZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVm aW5lIERJU1BfUkVHX09WTF9JTlRFTgkJCTB4MDAwNAorI2RlZmluZSBPVkxfRk1FX0NQTF9JTlQJ CQkJCUJJVCgxKQorI2RlZmluZSBESVNQX1JFR19PVkxfSU5UU1RBCQkJMHgwMDA4CisjZGVmaW5l IERJU1BfUkVHX09WTF9FTgkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JTVAkJCTB4 MDAxNAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX1NJWkUJCQkweDAwMjAKKyNkZWZpbmUgRElT UF9SRUdfT1ZMX1JPSV9CR0NMUgkJCTB4MDAyOAorI2RlZmluZSBESVNQX1JFR19PVkxfU1JDX0NP TgkJCTB4MDAyYworI2RlZmluZSBESVNQX1JFR19PVkxfQ09OKG4pCQkJKDB4MDAzMCArIDB4MjAg KiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0laRShuKQkJKDB4MDAzOCArIDB4MjAg KiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9PRkZTRVQobikJCQkoMHgwMDNjICsgMHgyMCAq IChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1BJVENIKG4pCQkJKDB4MDA0NCArIDB4MjAgKiAo bikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0NUUkwobikJCSgweDAwYzAgKyAweDIwICog KG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUkRNQV9HTUMobikJCSgweDAwYzggKyAweDIwICog KG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfQUREUihuKQkJCSgweDBmNDAgKyAweDIwICogKG4p KQorCisjZGVmaW5lCU9WTF9SRE1BX01FTV9HTUMJMHg0MDQwMjAyMAorCisjZGVmaW5lIE9WTF9D T05fQllURV9TV0FQCUJJVCgyNCkKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCNTY1CSgwIDw8 IDEyKQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I4ODgJKDEgPDwgMTIpCisjZGVmaW5lIE9W TF9DT05fQ0xSRk1UX1JHQkE4ODg4CSgyIDw8IDEyKQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9B UkdCODg4OAkoMyA8PCAxMikKKyNkZWZpbmUJT1ZMX0NPTl9BRU4JCUJJVCg4KQorI2RlZmluZQlP VkxfQ09OX0FMUEhBCQkweGZmCisKKy8qKgorICogc3RydWN0IG10a19kaXNwX292bCAtIERJU1Bf T1ZMIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVyZSBjb250YWluaW5n IHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAtIGFzc29jaWF0ZWQg Y3J0YyB0byByZXBvcnQgdmJsYW5rIGV2ZW50cyB0bworICovCitzdHJ1Y3QgbXRrX2Rpc3Bfb3Zs IHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQlkZHBfY29tcDsKKwlzdHJ1Y3QgZHJtX2NydGMJCQkq Y3J0YzsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIo aW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBk ZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gJnByaXYtPmRkcF9jb21wOworCisJ LyogQ2xlYXIgZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMHgwLCBvdmwt PnJlZ3MgKyBESVNQX1JFR19PVkxfSU5UU1RBKTsKKworCWlmICghcHJpdi0+Y3J0YykKKwkJcmV0 dXJuIElSUV9OT05FOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5jcnRjLCBvdmwpOworCisJ cmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2VuYWJsZV92Ymxh bmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0 cnVjdCBtdGtfZGlzcF9vdmwsCisJCQkJCQkgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNy dGM7CisJd3JpdGVsX3JlbGF4ZWQoT1ZMX0ZNRV9DUExfSU5ULCBjb21wLT5yZWdzICsgRElTUF9S RUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9kaXNhYmxlX3ZibGFuayhz dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYg PSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwKKwkJCQkJCSBkZHBfY29t cCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsKKwl3cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJl Z3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX3N0YXJ0 KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4ZWQoMHgxLCBjb21w LT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9zdG9w KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21w LT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9jb25m aWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgICB1bnNp Z25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmICh3ICE9IDAgJiYgaCAh PSAwKQorCQl3cml0ZWxfcmVsYXhlZChoIDw8IDE2IHwgdywgY29tcC0+cmVncyArIERJU1BfUkVH X09WTF9ST0lfU0laRSk7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9S RUdfT1ZMX1JPSV9CR0NMUik7CisKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdf T1ZMX1JTVCk7CisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SU1QpOwor fQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29uKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv bXAsIHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXdyaXRlbCgw eDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlkeCkpOworCXdyaXRlbChP VkxfUkRNQV9NRU1fR01DLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfR01DKGlkeCkp OworCisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKKwly ZWcgPSByZWcgfCBCSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdf T1ZMX1NSQ19DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29mZihzdHJ1Y3Qg bXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCBy ZWc7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOwor CXJlZyA9IHJlZyAmIH5CSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9S RUdfT1ZMX1NSQ19DT04pOworCisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09W TF9SRE1BX0NUUkwoaWR4KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3ZsX2ZtdF9jb252 ZXJ0KHVuc2lnbmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwlkZWZhdWx0OgorCWNh c2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I1NjU7CisJ Y2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjU2NSB8 IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJCXJldHVybiBP VkxfQ09OX0NMUkZNVF9SR0I4ODg7CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkJcmV0dXJu IE9WTF9DT05fQ0xSRk1UX1JHQjg4OCB8IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZP Uk1BVF9SR0JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJCXJldHVybiBPVkxf Q09OX0NMUkZNVF9BUkdCODg4ODsKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6CisJY2FzZSBE Uk1fRk9STUFUX0JHUkE4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODggfCBP VkxfQ09OX0JZVEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1f Rk9STUFUX0FSR0I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODg7CisJY2Fz ZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJcmV0 dXJuIE9WTF9DT05fQ0xSRk1UX1JHQkE4ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJfQorfQor CitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJCSBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0 ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgKnBlbmRpbmcgPSAmc3RhdGUt PnBlbmRpbmc7CisJdW5zaWduZWQgaW50IGFkZHIgPSBwZW5kaW5nLT5hZGRyOworCXVuc2lnbmVk IGludCBwaXRjaCA9IHBlbmRpbmctPnBpdGNoICYgMHhmZmZmOworCXVuc2lnbmVkIGludCBmbXQg PSBwZW5kaW5nLT5mb3JtYXQ7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IChwZW5kaW5nLT55IDw8 IDE2KSB8IHBlbmRpbmctPng7CisJdW5zaWduZWQgaW50IHNyY19zaXplID0gKHBlbmRpbmctPmhl aWdodCA8PCAxNikgfCBwZW5kaW5nLT53aWR0aDsKKwl1bnNpZ25lZCBpbnQgY29uOworCisJaWYg KCFwZW5kaW5nLT5lbmFibGUpCisJCW10a19vdmxfbGF5ZXJfb2ZmKGNvbXAsIGlkeCk7CisKKwlj b24gPSBvdmxfZm10X2NvbnZlcnQoZm10KTsKKwlpZiAoaWR4ICE9IDApCisJCWNvbiB8PSBPVkxf Q09OX0FFTiB8IE9WTF9DT05fQUxQSEE7CisKKwl3cml0ZWxfcmVsYXhlZChjb24sIGNvbXAtPnJl Z3MgKyBESVNQX1JFR19PVkxfQ09OKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKHBpdGNoLCBjb21w LT5yZWdzICsgRElTUF9SRUdfT1ZMX1BJVENIKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKHNyY19z aXplLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKGlkeCkpOworCXdyaXRlbF9y ZWxheGVkKG9mZnNldCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9PRkZTRVQoaWR4KSk7CisJ d3JpdGVsX3JlbGF4ZWQoYWRkciwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9BRERSKGlkeCkp OworCisJaWYgKHBlbmRpbmctPmVuYWJsZSkKKwkJbXRrX292bF9sYXllcl9vbihjb21wLCBpZHgp OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtfZGlzcF9v dmxfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAorCS5zdGFydCA9IG10a19v dmxfc3RhcnQsCisJLnN0b3AgPSBtdGtfb3ZsX3N0b3AsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtf b3ZsX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX292bF9kaXNhYmxlX3Zi bGFuaywKKwkubGF5ZXJfb24gPSBtdGtfb3ZsX2xheWVyX29uLAorCS5sYXllcl9vZmYgPSBtdGtf b3ZsX2xheWVyX29mZiwKKwkubGF5ZXJfY29uZmlnID0gbXRrX292bF9sYXllcl9jb25maWcsCit9 OworCitzdGF0aWMgaW50IG10a19kaXNwX292bF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtf ZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IG10a19kZHBfY29tcF9yZWdp c3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQlkZXYt Pm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCQl2b2lkICpkYXRhKQoreworCXN0cnVjdCBt dGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtX2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2 LCAmcHJpdi0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9v cHMgbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQJPSBtdGtfZGlzcF9vdmxf YmluZCwKKwkudW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQg bXRrX2Rpc3Bfb3ZsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2 OworCWludCBjb21wX2lkOworCWludCBpcnE7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJl dHVybiAtRU5PTUVNOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAo aXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBp cnEsIG10a19kaXNwX292bF9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1RSSUdHRVJfTk9O RSwgZGV2X25hbWUoZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBN VEtfRElTUF9PVkwpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxl ZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9p ZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJnBy aXYtPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9vdmxfZnVuY3MpOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIHByaXYpOworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtfZGlzcF9vdmxfY29t cG9uZW50X29wcyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNv bXBvbmVudDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10 a19kaXNwX292bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21w b25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZGlzcF9vdmxfY29tcG9uZW50X29wcyk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2Rpc3Bf b3ZsX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4 MTczLWRpc3Atb3ZsIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtf ZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf ZGlzcF9vdmxfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGlzcF9vdmxfcHJvYmUsCisJLnJl bW92ZQkJPSBtdGtfZGlzcF9vdmxfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJt ZWRpYXRlay1kaXNwLW92bCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hf dGFibGUgPSBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMzY4YWU4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZGlzcF9yZG1hLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwor ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51 eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1 ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9FTkFC TEUJCTB4MDAwMAorI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJCTB4MDAwNAorI2Rl ZmluZSBSRE1BX1RBUkdFVF9MSU5FX0lOVAkJCQlCSVQoNSkKKyNkZWZpbmUgUkRNQV9GSUZPX1VO REVSRkxPV19JTlQJCQkJQklUKDQpCisjZGVmaW5lIFJETUFfRU9GX0FCTk9STUFMX0lOVAkJCQlC SVQoMykKKyNkZWZpbmUgUkRNQV9GUkFNRV9FTkRfSU5UCQkJCUJJVCgyKQorI2RlZmluZSBSRE1B X0ZSQU1FX1NUQVJUX0lOVAkJCQlCSVQoMSkKKyNkZWZpbmUgUkRNQV9SRUdfVVBEQVRFX0lOVAkJ CQlCSVQoMCkKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OCQkweDAwMTAKKyNkZWZp bmUgUkRNQV9FTkdJTkVfRU4JCQkJCUJJVCgwKQorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVf Q09OXzAJCTB4MDAxNAorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEJCTB4MDAxOAor I2RlZmluZSBESVNQX1JFR19SRE1BX1RBUkdFVF9MSU5FCQkweDAwMWMKKyNkZWZpbmUgRElTUF9S RUdfUkRNQV9GSUZPX0NPTgkJCTB4MDA0MAorI2RlZmluZSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0VO CQkJCUJJVCgzMSkKKyNkZWZpbmUgUkRNQV9GSUZPX1BTRVVET19TSVpFKGJ5dGVzKQkJCSgoKGJ5 dGVzKSAvIDE2KSA8PCAxNikKKyNkZWZpbmUgUkRNQV9PVVRQVVRfVkFMSURfRklGT19USFJFU0hP TEQoYnl0ZXMpCQkoKGJ5dGVzKSAvIDE2KQorCisvKioKKyAqIHN0cnVjdCBtdGtfZGlzcF9yZG1h IC0gRElTUF9SRE1BIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVyZSBj b250YWluaW5nIHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAtIGFz c29jaWF0ZWQgY3J0YyB0byByZXBvcnQgaXJxIGV2ZW50cyB0bworICovCitzdHJ1Y3QgbXRrX2Rp c3BfcmRtYSB7CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJc3RydWN0IGRybV9j cnRjCQkJKmNydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rpc3BfcmRtYV9pcnFf aGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEg KnByaXYgPSBkZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqcmRtYSA9ICZwcml2LT5kZHBf Y29tcDsKKworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0ICovCisJd3JpdGVs KDB4MCwgcmRtYS0+cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisKKwlpZiAoIXBy aXYtPmNydGMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2RkcF9pcnEocHJpdi0+ Y3J0YywgcmRtYSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHJk bWFfdXBkYXRlX2JpdHMoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHJl ZywKKwkJCSAgICAgdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWwpCit7CisJdW5z aWduZWQgaW50IHRtcCA9IHJlYWRsKGNvbXAtPnJlZ3MgKyByZWcpOworCisJdG1wID0gKHRtcCAm IH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKKwl3cml0ZWwodG1wLCBjb21wLT5yZWdzICsgcmVnKTsK K30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRr X2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3BfcmRt YSwKKwkJCQkJCSAgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNydGM7CisJcmRtYV91cGRh dGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUsIFJETUFfRlJBTUVfRU5EX0lO VCwKKwkJCSBSRE1BX0ZSQU1FX0VORF9JTlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9k aXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtf ZGlzcF9yZG1hICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9yZG1h LAorCQkJCQkJICBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsKKwlyZG1hX3VwZGF0 ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwgUkRNQV9GUkFNRV9FTkRfSU5U LCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RhcnQoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCkKK3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfR0xPQkFM X0NPTiwgUkRNQV9FTkdJTkVfRU4sCisJCQkgUkRNQV9FTkdJTkVfRU4pOworfQorCitzdGF0aWMg dm9pZCBtdGtfcmRtYV9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJcmRtYV91 cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04sIFJETUFfRU5HSU5FX0VO LCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2Nv bXAgKmNvbXAsIHVuc2lnbmVkIHdpZHRoLAorCQkJICAgIHVuc2lnbmVkIGhlaWdodCwgdW5zaWdu ZWQgaW50IHZyZWZyZXNoKQoreworCXVuc2lnbmVkIGludCB0aHJlc2hvbGQ7CisJdW5zaWduZWQg aW50IHJlZzsKKworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9TSVpFX0NP Tl8wLCAweGZmZiwgd2lkdGgpOworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRN QV9TSVpFX0NPTl8xLCAweGZmZmZmLCBoZWlnaHQpOworCisJLyoKKwkgKiBFbmFibGUgRklGTyB1 bmRlcmZsb3cgc2luY2UgRFNJIGFuZCBEUEkgY2FuJ3QgYmUgYmxvY2tlZC4KKwkgKiBLZWVwIHRo ZSBGSUZPIHBzZXVkbyBzaXplIHJlc2V0IGRlZmF1bHQgb2YgOCBLaUIuIFNldCB0aGUKKwkgKiBv dXRwdXQgdGhyZXNob2xkIHRvIDYgbWljcm9zZWNvbmRzIHdpdGggNy82IG92ZXJoZWFkIHRvCisJ ICogYWNjb3VudCBmb3IgYmxhbmtpbmcsIGFuZCB3aXRoIGEgcGl4ZWwgZGVwdGggb2YgNCBieXRl czoKKwkgKi8KKwl0aHJlc2hvbGQgPSB3aWR0aCAqIGhlaWdodCAqIHZyZWZyZXNoICogNCAqIDcg LyAxMDAwMDAwOworCXJlZyA9IFJETUFfRklGT19VTkRFUkZMT1dfRU4gfAorCSAgICAgIFJETUFf RklGT19QU0VVRE9fU0laRShTWl84SykgfAorCSAgICAgIFJETUFfT1VUUFVUX1ZBTElEX0ZJRk9f VEhSRVNIT0xEKHRocmVzaG9sZCk7CisJd3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJU1BfUkVH X1JETUFfRklGT19DT04pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m dW5jcyBtdGtfZGlzcF9yZG1hX2Z1bmNzID0geworCS5jb25maWcgPSBtdGtfcmRtYV9jb25maWcs CisJLnN0YXJ0ID0gbXRrX3JkbWFfc3RhcnQsCisJLnN0b3AgPSBtdGtfcmRtYV9zdG9wLAorCS5l bmFibGVfdmJsYW5rID0gbXRrX3JkbWFfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92Ymxhbmsg PSBtdGtfcmRtYV9kaXNhYmxlX3ZibGFuaywKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3BfcmRt YV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAg ICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlpbnQg cmV0OworCisJcmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBf Y29tcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0 ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2b2lkIG10 a19kaXNwX3JkbWFfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz dGVyLAorCQkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0g ZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRh OworCisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIG10a19kaXNwX3JkbWFfY29t cG9uZW50X29wcyA9IHsKKwkuYmluZAk9IG10a19kaXNwX3JkbWFfYmluZCwKKwkudW5iaW5kID0g bXRrX2Rpc3BfcmRtYV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IG10a19kaXNwX3JkbWFfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2OworCWludCBjb21wX2lk OworCWludCBpcnE7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOwor CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0 dXJuIGlycTsKKworCWNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0X2lkKGRldi0+b2Zfbm9kZSwg TVRLX0RJU1BfUkRNQSk7CisJaWYgKGNvbXBfaWQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFp bGVkIHRvIGlkZW50aWZ5IGJ5IGFsaWFzOiAlZFxuIiwgY29tcF9pZCk7CisJCXJldHVybiBjb21w X2lkOworCX0KKworCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAm cHJpdi0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10a19kaXNwX3JkbWFfZnVuY3MpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6 ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIERpc2FibGUgYW5kIGNsZWFy IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCXdyaXRlbCgweDAsIHByaXYtPmRkcF9jb21wLnJlZ3Mg KyBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUpOworCXdyaXRlbCgweDAsIHByaXYtPmRkcF9jb21w LnJlZ3MgKyBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMpOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0 X2lycShkZXYsIGlycSwgbXRrX2Rpc3BfcmRtYV9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFG X1RSSUdHRVJfTk9ORSwgZGV2X25hbWUoZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7 CisKKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10a19kaXNwX3JkbWFfY29tcG9uZW50X29w cyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDog JWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kaXNwX3Jk bWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2Rl bCgmcGRldi0+ZGV2LCAmbXRrX2Rpc3BfcmRtYV9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZGlzcF9yZG1hX2Ry aXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRp c3AtcmRtYSIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX2Rpc3Bf cmRtYV9kcml2ZXJfZHRfbWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNw X3JkbWFfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGlzcF9yZG1hX3Byb2JlLAorCS5yZW1v dmUJCT0gbXRrX2Rpc3BfcmRtYV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1l ZGlhdGVrLWRpc3AtcmRtYSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hf dGFibGUgPSBtdGtfZGlzcF9yZG1hX2RyaXZlcl9kdF9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5jZTNlZmEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fY3J0Yy5jCkBAIC0wLDAgKzEsNTgyIEBACisvKgorICogQ29weXJpZ2h0IChj KSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIu aD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+ CisjaW5jbHVkZSA8c29jL21lZGlhdGVrL3NtaS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kcnYu aCIKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgor I2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgor I2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2RybV9jcnRj IC0gTWVkaWFUZWsgc3BlY2lmaWMgY3J0YyBzdHJ1Y3R1cmUuCisgKiBAYmFzZTogY3J0YyBvYmpl Y3QuCisgKiBAZW5hYmxlZDogcmVjb3JkcyB3aGV0aGVyIGNydGNfZW5hYmxlIHN1Y2NlZWRlZAor ICogQHBsYW5lczogYXJyYXkgb2YgNCBtdGtfZHJtX3BsYW5lIHN0cnVjdHVyZXMsIG9uZSBmb3Ig ZWFjaCBvdmVybGF5IHBsYW5lCisgKiBAcGVuZGluZ19wbGFuZXM6IHdoZXRoZXIgYW55IHBsYW5l IGhhcyBwZW5kaW5nIGNoYW5nZXMgdG8gYmUgYXBwbGllZAorICogQGNvbmZpZ19yZWdzOiBtZW1v cnkgbWFwcGVkIG1tc3lzIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BhY2UKKyAqIEBtdXRleDog aGFuZGxlIHRvIG9uZSBvZiB0aGUgdGVuIGRpc3BfbXV0ZXggc3RyZWFtcworICogQGRkcF9jb21w X25yOiBudW1iZXIgb2YgY29tcG9uZW50cyBpbiBkZHBfY29tcAorICogQGRkcF9jb21wOiBhcnJh eSBvZiBwb2ludGVycyB0aGUgbXRrX2RkcF9jb21wIHN0cnVjdHVyZXMgdXNlZCBieSB0aGlzIGNy dGMKKyAqLworc3RydWN0IG10a19kcm1fY3J0YyB7CisJc3RydWN0IGRybV9jcnRjCQkJYmFzZTsK Kwlib29sCQkJCWVuYWJsZWQ7CisKKwlib29sCQkJCXBlbmRpbmdfbmVlZHNfdmJsYW5rOworCXN0 cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQJKmV2ZW50OworCisJc3RydWN0IG10a19kcm1f cGxhbmUJCXBsYW5lc1tPVkxfTEFZRVJfTlJdOworCWJvb2wJCQkJcGVuZGluZ19wbGFuZXM7CisK Kwl2b2lkIF9faW9tZW0JCQkqY29uZmlnX3JlZ3M7CisJc3RydWN0IG10a19kaXNwX211dGV4CQkq bXV0ZXg7CisJdW5zaWduZWQgaW50CQkJZGRwX2NvbXBfbnI7CisJc3RydWN0IG10a19kZHBfY29t cAkJKipkZHBfY29tcDsKK307CisKK3N0cnVjdCBtdGtfY3J0Y19zdGF0ZSB7CisJc3RydWN0IGRy bV9jcnRjX3N0YXRlCQliYXNlOworCisJYm9vbAkJCQlwZW5kaW5nX2NvbmZpZzsKKwl1bnNpZ25l ZCBpbnQJCQlwZW5kaW5nX3dpZHRoOworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfaGVpZ2h0Owor CXVuc2lnbmVkIGludAkJCXBlbmRpbmdfdnJlZnJlc2g7Cit9OworCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBtdGtfZHJtX2NydGMgKnRvX210a19jcnRjKHN0cnVjdCBkcm1fY3J0YyAqYykKK3sKKwly ZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdGtfZHJtX2NydGMsIGJhc2UpOworfQorCitz dGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqdG9fbXRrX2NydGNfc3RhdGUoc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzKQoreworCXJldHVybiBjb250YWluZXJfb2Yocywgc3RydWN0 IG10a19jcnRjX3N0YXRlLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Zp bmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0 IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJ ZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMtPmRldiwgbXRrX2NydGMtPmV2ZW50LT5waXBlLCBt dGtfY3J0Yy0+ZXZlbnQpOworCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJbXRrX2NydGMt PmV2ZW50ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYtPmV2ZW50 X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9maW5pc2hfcGFnZV9mbGlw KHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWRybV9jcnRjX2hhbmRsZV92Ymxh bmsoJm10a19jcnRjLT5iYXNlKTsKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5r KSB7CisJCW10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKKwkJbXRrX2Ny dGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5rID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCBt dGtfZHJtX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10 a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlpbnQgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX3VucHJlcGFy ZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisKKwltdGtfZGlzcF9tdXRleF9wdXQobXRr X2NydGMtPm11dGV4KTsKKworCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19kcm1fY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0 IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCWlmIChjcnRjLT5zdGF0ZSkgeworCQlpZiAoY3J0 Yy0+c3RhdGUtPm1vZGVfYmxvYikKKwkJCWRybV9wcm9wZXJ0eV91bnJlZmVyZW5jZV9ibG9iKGNy dGMtPnN0YXRlLT5tb2RlX2Jsb2IpOworCisJCXN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0 Yy0+c3RhdGUpOworCQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9IGVsc2Ug eworCQlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAo IXN0YXRlKQorCQkJcmV0dXJuOworCQljcnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKwl9CisK KwlzdGF0ZS0+YmFzZS5jcnRjID0gY3J0YzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhz aXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7 CisKKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMsICZzdGF0 ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLmNydGMgIT0gY3J0Yyk7CisJc3RhdGUt PmJhc2UuY3J0YyA9IGNydGM7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitzdGF0aWMg dm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJ CQkJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWlj X2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoY3J0Yywgc3RhdGUpOworCWtmcmVlKHRvX210a19j cnRjX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBib29sIG10a19kcm1fY3J0Y19tb2RlX2Zp eHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3Rl ZF9tb2RlKQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMg bWFuZGF0b3J5LiAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2Ny dGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19j cnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCXN0 YXRlLT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGlu Z19oZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNo ID0gY3J0Yy0+bW9kZS52cmVmcmVzaDsKKwl3bWIoKTsJLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBw YXJhbWV0ZXJzIGFyZSBzZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nX2NvbmZp ZyA9IHRydWU7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJt X2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2 YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtf Y3J0YyA9IHRvX210a19jcnRjKHByaXYtPmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2Nv bXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKworCW10a19kZHBfY29tcF9lbmFibGVf dmJsYW5rKG92bCwgJm10a19jcnRjLT5iYXNlKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG10 a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25l ZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZf cHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKHBy aXYtPmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5k ZHBfY29tcFswXTsKKworCW10a19kZHBfY29tcF9kaXNhYmxlX3ZibGFuayhvdmwpOworfQorCitz dGF0aWMgaW50IG10a19jcnRjX2RkcF9jbGtfZW5hYmxlKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10 a19jcnRjKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xu IiwgX19mdW5jX18pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkr KykgeworCQlyZXQgPSBjbGtfZW5hYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKwkJ aWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxu IiwgaSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJ d2hpbGUgKC0taSA+PSAwKQorCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNs ayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2Nsa19kaXNh YmxlKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWludCBpOworCisJRFJNX0RF QlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMt PmRkcF9jb21wX25yOyBpKyspCisJCWNsa19kaXNhYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+ Y2xrKTsKK30KKworc3RhdGljIGludCBtdGtfY3J0Y19kZHBfaHdfaW5pdChzdHJ1Y3QgbXRrX2Ry bV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMt PmJhc2U7CisJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQsIHZyZWZyZXNoOworCWludCByZXQ7 CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWlmIChX QVJOX09OKCFjcnRjLT5zdGF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2lkdGggPSBjcnRj LT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5oZGlzcGxheTsKKwloZWlnaHQgPSBjcnRjLT5zdGF0ZS0+ YWRqdXN0ZWRfbW9kZS52ZGlzcGxheTsKKwl2cmVmcmVzaCA9IGNydGMtPnN0YXRlLT5hZGp1c3Rl ZF9tb2RlLnZyZWZyZXNoOworCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhjcnRjLT5kZXYt PmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIHBv d2VyIGRvbWFpbjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXRr X2Rpc3BfbXV0ZXhfcHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCWlmIChyZXQgPCAwKSB7CisJ CURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBtdXRleCBjbG9jazogJWRcbiIsIHJldCk7CisJ CWdvdG8gZXJyX3BtX3J1bnRpbWVfcHV0OworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9jbGtf ZW5hYmxlKG10a19jcnRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0 byBlbmFibGUgY29tcG9uZW50IGNsb2NrczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX211dGV4 X3VucHJlcGFyZTsKKwl9CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtZWRpYXRla19kZHBfZGRwX3Bh dGhfc2V0dXBcbiIpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgLSAx OyBpKyspIHsKKwkJbXRrX2RkcF9hZGRfY29tcF90b19wYXRoKG10a19jcnRjLT5jb25maWdfcmVn cywKKwkJCQkJIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSBtdGtfY3J0Yy0+ZGRw X2NvbXBbaSArIDFdLT5pZCk7CisJCW10a19kaXNwX211dGV4X2FkZF9jb21wKG10a19jcnRjLT5t dXRleCwKKwkJCQkJbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJfQorCW10a19kaXNwX211 dGV4X2FkZF9jb21wKG10a19jcnRjLT5tdXRleCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7 CisJbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKG10a19jcnRjLT5tdXRleCk7CisKKwlmb3IgKGkgPSAw OyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJc3RydWN0IG10a19kZHBfY29t cCAqY29tcCA9IG10a19jcnRjLT5kZHBfY29tcFtpXTsKKworCQltdGtfZGRwX2NvbXBfY29uZmln KGNvbXAsIHdpZHRoLCBoZWlnaHQsIHZyZWZyZXNoKTsKKwkJbXRrX2RkcF9jb21wX3N0YXJ0KGNv bXApOworCX0KKworCS8qIEluaXRpYWxseSBjb25maWd1cmUgYWxsIHBsYW5lcyAqLworCWZvciAo aSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5l LT5zdGF0ZSk7CisJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcobXRrX2NydGMtPmRkcF9jb21w WzBdLCBpLAorCQkJCQkgIHBsYW5lX3N0YXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX211 dGV4X3VucHJlcGFyZToKKwltdGtfZGlzcF9tdXRleF91bnByZXBhcmUobXRrX2NydGMtPm11dGV4 KTsKK2Vycl9wbV9ydW50aW1lX3B1dDoKKwlwbV9ydW50aW1lX3B1dChjcnRjLT5kZXYtPmRldik7 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2h3X2Zpbmkoc3Ry dWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9 IG10a19jcnRjLT5iYXNlLmRldjsKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4i LCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsr KQorCQltdGtfZGRwX2NvbXBfc3RvcChtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0pOworCWZvciAoaSA9 IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVt b3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0t PmlkKTsKKwltdGtfZGlzcF9tdXRleF9kaXNhYmxlKG10a19jcnRjLT5tdXRleCk7CisJZm9yIChp ID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgeworCQltdGtfZGRwX3Jl bW92ZV9jb21wX2Zyb21fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSAgICAgIG10 a19jcnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSAgICAgIG10a19jcnRjLT5kZHBfY29tcFtp ICsgMV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4 LAorCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwl9CisJbXRrX2Rpc3BfbXV0 ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlk KTsKKwltdGtfY3J0Y19kZHBfY2xrX2Rpc2FibGUobXRrX2NydGMpOworCW10a19kaXNwX211dGV4 X3VucHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJcG1fcnVudGltZV9wdXQoZHJtLT5kZXYp OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNy dGMpOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsK KwlpbnQgcmV0OworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRj LT5iYXNlLmlkKTsKKworCXJldCA9IG10a19zbWlfbGFyYl9nZXQob3ZsLT5sYXJiX2Rldik7CisJ aWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7 CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfaHdfaW5pdChtdGtfY3J0Yyk7 CisJaWYgKHJldCkgeworCQltdGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9kZXYpOworCQlyZXR1 cm47CisJfQorCisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOworCW10a19jcnRjLT5lbmFibGVk ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRr X2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9j b21wWzBdOworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19f LCBjcnRjLT5iYXNlLmlkKTsKKwlpZiAoV0FSTl9PTighbXRrX2NydGMtPmVuYWJsZWQpKQorCQly ZXR1cm47CisKKwkvKiBTZXQgYWxsIHBlbmRpbmcgcGxhbmUgc3RhdGUgdG8gZGlzYWJsZWQgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQlzdHJ1Y3QgbXRrX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0 ZShwbGFuZS0+c3RhdGUpOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsK KwkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1ZTsKKwl9CisJbXRrX2NydGMtPnBl bmRpbmdfcGxhbmVzID0gdHJ1ZTsKKworCS8qIFdhaXQgZm9yIHBsYW5lcyB0byBiZSBkaXNhYmxl ZCAqLworCWRybV9jcnRjX3dhaXRfb25lX3ZibGFuayhjcnRjKTsKKworCWRybV9jcnRjX3ZibGFu a19vZmYoY3J0Yyk7CisJbXRrX2NydGNfZGRwX2h3X2ZpbmkobXRrX2NydGMpOworCW10a19zbWlf bGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7CisKKwltdGtfY3J0Yy0+ZW5hYmxlZCA9IGZhbHNlOwor fQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRl KQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShj cnRjLT5zdGF0ZSk7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0 YyhjcnRjKTsKKworCWlmIChtdGtfY3J0Yy0+ZXZlbnQgJiYgc3RhdGUtPmJhc2UuZXZlbnQpCisJ CURSTV9FUlJPUigibmV3IGV2ZW50IHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEgcGVuZGluZyBldmVu dFxuIik7CisKKwlpZiAoc3RhdGUtPmJhc2UuZXZlbnQpIHsKKwkJc3RhdGUtPmJhc2UuZXZlbnQt PnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKKwkJV0FSTl9PTihkcm1fY3J0Y192Ymxhbmtf Z2V0KGNydGMpICE9IDApOworCQltdGtfY3J0Yy0+ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsK KwkJc3RhdGUtPmJhc2UuZXZlbnQgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2Ry bV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9j cnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXVuc2lnbmVkIGludCBwZW5kaW5n X3BsYW5lcyA9IDA7CisJaW50IGk7CisKKwlpZiAobXRrX2NydGMtPmV2ZW50KQorCQltdGtfY3J0 Yy0+cGVuZGluZ19uZWVkc192YmxhbmsgPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZ RVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxh bmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJ CXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCWlmIChw bGFuZV9zdGF0ZS0+cGVuZGluZy5kaXJ0eSkgeworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29u ZmlnID0gdHJ1ZTsKKwkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5ID0gZmFsc2U7CisJCQlw ZW5kaW5nX3BsYW5lcyB8PSBCSVQoaSk7CisJCX0KKwl9CisJaWYgKHBlbmRpbmdfcGxhbmVzKQor CQltdGtfY3J0Yy0+cGVuZGluZ19wbGFuZXMgPSB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jcnRjX2Z1bmNzIG10a19jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnCQk9IGRy bV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hl bHBlcl9wYWdlX2ZsaXAsCisJLmRlc3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ksCisJLnJl c2V0CQkJPSBtdGtfZHJtX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBt dGtfZHJtX2NydGNfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IG10 a19kcm1fY3J0Y19kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y3J0Y19oZWxwZXJfZnVuY3MgbXRrX2NydGNfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVw CT0gbXRrX2RybV9jcnRjX21vZGVfZml4dXAsCisJLm1vZGVfc2V0X25vZmIJPSBtdGtfZHJtX2Ny dGNfbW9kZV9zZXRfbm9mYiwKKwkuZW5hYmxlCQk9IG10a19kcm1fY3J0Y19lbmFibGUsCisJLmRp c2FibGUJPSBtdGtfZHJtX2NydGNfZGlzYWJsZSwKKwkuYXRvbWljX2JlZ2luCT0gbXRrX2RybV9j cnRjX2F0b21pY19iZWdpbiwKKwkuYXRvbWljX2ZsdXNoCT0gbXRrX2RybV9jcnRjX2F0b21pY19m bHVzaCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RybV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRybSwKKwkJCSAgICAgc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMsCisJCQkgICAg IHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCisJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmUgKmN1 cnNvciwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9jcnRj X2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmbXRrX2NydGMtPmJhc2UsIHByaW1hcnksIGN1cnNvciwK KwkJCQkJJm10a19jcnRjX2Z1bmNzLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGVh bnVwX2NydGM7CisKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZtdGtfY3J0Yy0+YmFzZSwgJm10a19j cnRjX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2NsZWFudXBfY3J0YzoKKwlk cm1fY3J0Y19jbGVhbnVwKCZtdGtfY3J0Yy0+YmFzZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9p ZCBtdGtfY3J0Y19kZHBfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IG10a19kZHBf Y29tcCAqb3ZsKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2Ny dGMoY3J0Yyk7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0 YXRlKG10a19jcnRjLT5iYXNlLnN0YXRlKTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qCisJICog VE9ETzogaW5zdGVhZCBvZiB1cGRhdGluZyB0aGUgcmVnaXN0ZXJzIGhlcmUsIHdlIHNob3VsZCBw cmVwYXJlCisJICogd29ya2luZyByZWdpc3RlcnMgaW4gYXRvbWljX2NvbW1pdCBhbmQgbGV0IHRo ZSBoYXJkd2FyZSBjb21tYW5kCisJICogcXVldWUgdXBkYXRlIG1vZHVsZSByZWdpc3RlcnMgb24g dmJsYW5rLgorCSAqLworCWlmIChzdGF0ZS0+cGVuZGluZ19jb25maWcpIHsKKwkJbXRrX2RkcF9j b21wX2NvbmZpZyhvdmwsIHN0YXRlLT5wZW5kaW5nX3dpZHRoLAorCQkJCSAgICBzdGF0ZS0+cGVu ZGluZ19oZWlnaHQsCisJCQkJICAgIHN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNoKTsKKworCQlzdGF0 ZS0+cGVuZGluZ19jb25maWcgPSBmYWxzZTsKKwl9CisKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdf cGxhbmVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQkJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQkJc3Ry dWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJCXBsYW5lX3N0YXRlID0gdG9f bXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisKKwkJCWlmIChwbGFuZV9zdGF0ZS0+cGVu ZGluZy5jb25maWcpIHsKKwkJCQltdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKG92bCwgaSwgcGxh bmVfc3RhdGUpOworCQkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZyA9IGZhbHNlOworCQkJ fQorCQl9CisJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IGZhbHNlOworCX0KKworCW10a19k cm1fZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfY3Jl YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LAorCQkJY29uc3QgZW51bSBtdGtfZGRwX2Nv bXBfaWQgKnBhdGgsIHVuc2lnbmVkIGludCBwYXRoX2xlbikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w cml2YXRlICpwcml2ID0gZHJtX2Rldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gZHJtX2Rldi0+ZGV2OworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjOworCWVudW0g ZHJtX3BsYW5lX3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgenBvczsKKwlpbnQgcGlwZSA9IHBy aXYtPm51bV9waXBlczsKKwlpbnQgcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBh dGhfbGVuOyBpKyspIHsKKwkJZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCA9IHBhdGhbaV07 CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2Rl W2NvbXBfaWRdOworCQlpZiAoIW5vZGUpIHsKKwkJCWRldl9pbmZvKGRldiwKKwkJCQkgIk5vdCBj cmVhdGluZyBjcnRjICVkIGJlY2F1c2UgY29tcG9uZW50ICVkIGlzIGRpc2FibGVkIG9yIG1pc3Np bmdcbiIsCisJCQkJIHBpcGUsIGNvbXBfaWQpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlt dGtfY3J0YyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbXRrX2NydGMpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIW10a19jcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW10a19jcnRjLT5jb25m aWdfcmVncyA9IHByaXYtPmNvbmZpZ19yZWdzOworCW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBh dGhfbGVuOworCW10a19jcnRjLT5kZHBfY29tcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIG10 a19jcnRjLT5kZHBfY29tcF9uciwKKwkJCQkJCXNpemVvZigqbXRrX2NydGMtPmRkcF9jb21wKSwK KwkJCQkJCUdGUF9LRVJORUwpOworCisJbXRrX2NydGMtPm11dGV4ID0gbXRrX2Rpc3BfbXV0ZXhf Z2V0KHByaXYtPm11dGV4X2RldiwgcGlwZSk7CisJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgp KSB7CisJCXJldCA9IFBUUl9FUlIobXRrX2NydGMtPm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gZ2V0IG11dGV4OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJZW51bSBtdGtf ZGRwX2NvbXBfaWQgY29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv bXA7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9u b2RlW2NvbXBfaWRdOworCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9pZF07CisJCWlmICgh Y29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21wb25lbnQgJXMgbm90IGluaXRpYWxpemVkXG4i LAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byB1bnBy ZXBhcmU7CisJCX0KKworCQlyZXQgPSBjbGtfcHJlcGFyZShjb21wLT5jbGspOworCQlpZiAocmV0 KSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUgY2xvY2sgZm9yIGNv bXBvbmVudCAlczogJWRcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQkJZ290byB1 bnByZXBhcmU7CisJCX0KKworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBjb21wOworCX0KKwor CWZvciAoenBvcyA9IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykgeworCQl0eXBlID0g KHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQkoenBvcyA9PSAxKSA/ IERSTV9QTEFORV9UWVBFX0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZOwor CQlyZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBsYW5lc1t6cG9zXSwK KwkJCQkgICAgIEJJVChwaXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVu cHJlcGFyZTsKKwl9CisKKwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1fZGV2LCBtdGtfY3J0 YywgJm10a19jcnRjLT5wbGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMtPnBsYW5lc1sxXS5i YXNlLCBwaXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7CisKKwlwcml2LT5j cnRjW3BpcGVdID0gJm10a19jcnRjLT5iYXNlOworCXByaXYtPm51bV9waXBlcysrOworCisJcmV0 dXJuIDA7CisKK3VucHJlcGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa191bnByZXBhcmUo bXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi44MWU1NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fY3J0Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisjZGVmaW5lIE1US19E Uk1fQ1JUQ19ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlICJtdGtfZHJt X2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisjZGVmaW5lIE9WTF9M QVlFUl9OUgk0CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxl X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lk IG10a19kcm1fY3J0Y19jaGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBt dGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19jcnRj X2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwp OworaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJ CQljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAqcGF0aCwKKwkJCXVuc2lnbmVkIGludCBwYXRo X2xlbik7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0NSVENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9kZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU4 NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZGRwLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFU ZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlICJtdGtfZHJt X2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JF R19DT05GSUdfRElTUF9PVkwwX01PVVRfRU4JMHgwNDAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklH X0RJU1BfT1ZMMV9NT1VUX0VOCTB4MDQ0CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09E X01PVVRfRU4JCTB4MDQ4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRf RU4JMHgwNGMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOCTB4MDUw CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU4JMHgwODQKKyNkZWZp bmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IxX1NFTF9JTgkweDA4OAorI2RlZmluZSBESVNQ X1JFR19DT05GSUdfRFBJX1NFTF9JTgkJMHgwYWMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJ U1BfUkRNQTFfTU9VVF9FTgkweDBjOAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfTU1TWVNfQ0df Q09OMAkJMHgxMDAKKworI2RlZmluZSBESVNQX1JFR19NVVRFWF9FTihuKQkoMHgyMCArIDB4MjAg KiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCArIDB4MjAgKiAobikp CisjZGVmaW5lIERJU1BfUkVHX01VVEVYX01PRChuKQkoMHgyYyArIDB4MjAgKiAobikpCisjZGVm aW5lIERJU1BfUkVHX01VVEVYX1NPRihuKQkoMHgzMCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUg TVVURVhfTU9EX0RJU1BfT1ZMMAkJQklUKDExKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkwx CQlCSVQoMTIpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQoMTMpCisjZGVmaW5l IE1VVEVYX01PRF9ESVNQX1JETUExCQlCSVQoMTQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JE TUEyCQlCSVQoMTUpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlCSVQoMTYpCisjZGVm aW5lIE1VVEVYX01PRF9ESVNQX1dETUExCQlCSVQoMTcpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQ X0NPTE9SMAkJQklUKDE4KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjEJCUJJVCgxOSkK KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQUFMCQlCSVQoMjApCisjZGVmaW5lIE1VVEVYX01PRF9E SVNQX0dBTU1BCQlCSVQoMjEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VGT0UJCUJJVCgyMikK KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMAkJQklUKDIzKQorI2RlZmluZSBNVVRFWF9NT0Rf RElTUF9QV00xCQlCSVQoMjQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09ECQlCSVQoMjUpCisK KyNkZWZpbmUgTVVURVhfU09GX1NJTkdMRV9NT0RFCQkwCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kw CQkJMQorI2RlZmluZSBNVVRFWF9TT0ZfRFNJMQkJCTIKKyNkZWZpbmUgTVVURVhfU09GX0RQSTAJ CQkzCisKKyNkZWZpbmUgT1ZMMF9NT1VUX0VOX0NPTE9SMAkJMHgxCisjZGVmaW5lIE9EX01PVVRf RU5fUkRNQTAJCTB4MQorI2RlZmluZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgxCisjZGVmaW5lIENP TE9SMF9TRUxfSU5fT1ZMMAkJMHgxCisjZGVmaW5lIE9WTDFfTU9VVF9FTl9DT0xPUjEJCTB4MQor I2RlZmluZSBHQU1NQV9NT1VUX0VOX1JETUExCQkweDEKKyNkZWZpbmUgUkRNQTFfTU9VVF9EUEkw CQkJMHgyCisjZGVmaW5lIERQSTBfU0VMX0lOX1JETUExCQkweDEKKyNkZWZpbmUgQ09MT1IxX1NF TF9JTl9PVkwxCQkweDEKKworc3RydWN0IG10a19kaXNwX211dGV4IHsKKwlpbnQgaWQ7CisJYm9v bCBjbGFpbWVkOworfTsKKworc3RydWN0IG10a19kZHAgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2 OworCXN0cnVjdCBjbGsJCQkqY2xrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworCXN0cnVjdCBt dGtfZGlzcF9tdXRleAkJbXV0ZXhbMTBdOworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu dCBtdXRleF9tb2RbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0geworCVtERFBfQ09NUE9ORU5UX0FB TF0gPSBNVVRFWF9NT0RfRElTUF9BQUwsCisJW0REUF9DT01QT05FTlRfQ09MT1IwXSA9IE1VVEVY X01PRF9ESVNQX0NPTE9SMCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdID0gTVVURVhfTU9EX0RJ U1BfQ09MT1IxLAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXSA9IE1VVEVYX01PRF9ESVNQX0dBTU1B LAorCVtERFBfQ09NUE9ORU5UX09EXSA9IE1VVEVYX01PRF9ESVNQX09ELAorCVtERFBfQ09NUE9O RU5UX09WTDBdID0gTVVURVhfTU9EX0RJU1BfT1ZMMCwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXSA9 IE1VVEVYX01PRF9ESVNQX09WTDEsCisJW0REUF9DT01QT05FTlRfUFdNMF0gPSBNVVRFWF9NT0Rf RElTUF9QV00wLAorCVtERFBfQ09NUE9ORU5UX1BXTTFdID0gTVVURVhfTU9EX0RJU1BfUFdNMSwK KwlbRERQX0NPTVBPTkVOVF9SRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMCwKKwlbRERQX0NP TVBPTkVOVF9SRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMSwKKwlbRERQX0NPTVBPTkVOVF9S RE1BMl0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMiwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXSA9IE1V VEVYX01PRF9ESVNQX1VGT0UsCisJW0REUF9DT01QT05FTlRfV0RNQTBdID0gTVVURVhfTU9EX0RJ U1BfV0RNQTAsCisJW0REUF9DT01QT05FTlRfV0RNQTFdID0gTVVURVhfTU9EX0RJU1BfV0RNQTEs Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfbW91dF9lbihlbnVtIG10a19kZHBf Y29tcF9pZCBjdXIsCisJCQkJICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAg IHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlpZiAoY3Vy ID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7 CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VOOworCQl2YWx1ZSA9 IE9WTDBfTU9VVF9FTl9DT0xPUjA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9P RCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRNQTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19D T05GSUdfRElTUF9PRF9NT1VUX0VOOworCQl2YWx1ZSA9IE9EX01PVVRfRU5fUkRNQTA7CisJfSBl bHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9VRk9FICYmIG5leHQgPT0gRERQX0NPTVBPTkVO VF9EU0kwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOOwor CQl2YWx1ZSA9IFVGT0VfTU9VVF9FTl9EU0kwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01Q T05FTlRfT1ZMMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7CisJCSphZGRyID0g RElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDFfTU9VVF9F Tl9DT0xPUjE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9HQU1NQSAmJiBuZXh0 ID09IEREUF9DT01QT05FTlRfUkRNQTEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElT UF9HQU1NQV9NT1VUX0VOOworCQl2YWx1ZSA9IEdBTU1BX01PVVRfRU5fUkRNQTE7CisJfSBlbHNl IGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRf RFBJMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01PVVRfRU47CisJ CXZhbHVlID0gUkRNQTFfTU9VVF9EUEkwOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisK KwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxfaW4o ZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5l eHQsCisJCQkJICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsK KworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVO VF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjBfU0VMX0lO OworCQl2YWx1ZSA9IENPTE9SMF9TRUxfSU5fT1ZMMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBf Q09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRy ID0gRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU47CisJCXZhbHVlID0gRFBJMF9TRUxfSU5fUkRN QTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQ X0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xP UjFfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMV9TRUxfSU5fT1ZMMTsKKwl9IGVsc2UgeworCQl2 YWx1ZSA9IDA7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIG10a19kZHBfYWRkX2Nv bXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtf ZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sK Kwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0 X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxh eGVkKGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBj b25maWdfcmVncyArIGFkZHIpOworCX0KKworCXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBu ZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmln X3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdz ICsgYWRkcik7CisJfQorfQorCit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZv aWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3Vy LAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5zaWduZWQgaW50IGFk ZHIsIHZhbHVlLCByZWc7CisKKwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIsIG5leHQsICZh ZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyAr IGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRk cik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlp ZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYg fnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQor fQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaWQgPj0gMTApCisJCXJldHVybiBFUlJfUFRSKC1F SU5WQUwpOworCWlmIChkZHAtPm11dGV4W2lkXS5jbGFpbWVkKQorCQlyZXR1cm4gRVJSX1BUUigt RUJVU1kpOworCisJZGRwLT5tdXRleFtpZF0uY2xhaW1lZCA9IHRydWU7CisKKwlyZXR1cm4gJmRk cC0+bXV0ZXhbaWRdOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rp c3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2Yo bXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdB Uk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwltdXRleC0+Y2xhaW1l ZCA9IGZhbHNlOworfQorCitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rp c3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2Yo bXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwlyZXR1 cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRl eF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKK3sKKwlzdHJ1Y3QgbXRr X2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAg bXV0ZXhbbXV0ZXgtPmlkXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRkcC0+Y2xrKTsKK30K Kwordm9pZCBtdGtfZGlzcF9tdXRleF9hZGRfY29tcChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11 dGV4LAorCQkJICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2Rk cCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0 ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0 ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09N UE9ORU5UX0RTSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9EU0kwOworCQlicmVhazsKKwljYXNlIERE UF9DT01QT05FTlRfRFNJMToKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNh c2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFBJMDsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAtPnJlZ3MgKyBESVNQX1JFR19N VVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJlZyB8PSBtdXRleF9tb2RbaWRdOworCQl3cml0ZWxf cmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsK KwkJcmV0dXJuOworCX0KKworCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9S RUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3JlbW92 ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2Nv bXBfaWQgaWQpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwg c3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXVuc2lnbmVkIGlu dCByZWc7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOworCisJ c3dpdGNoIChpZCkgeworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kwOgorCWNhc2UgRERQX0NPTVBP TkVOVF9EU0kxOgorCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQl3cml0ZWxfcmVsYXhlZChN VVRFWF9TT0ZfU0lOR0xFX01PREUsCisJCQkgICAgICAgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVU RVhfU09GKG11dGV4LT5pZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9y ZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVn ICY9IH5tdXRleF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJ U1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIG10 a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0 cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAor CQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgt PmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwoMSwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhf RU4obXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShzdHJ1Y3Qg bXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWlu ZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsK KworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwo MCwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cit9CisKK3N0YXRp YyBpbnQgbXRrX2RkcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kZHAgKmRkcDsKKwlz dHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGk7CisKKwlkZHAgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKmRkcCksIEdGUF9LRVJORUwpOworCWlmICghZGRwKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQlkZHAtPm11dGV4W2ldLmlkID0gaTsK KworCWRkcC0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkZHAt PmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0 dXJuIFBUUl9FUlIoZGRwLT5jbGspOworCX0KKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRkcC0+cmVncyA9IGRldm1faW9yZW1hcF9y ZXNvdXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19FUlIoZGRwLT5yZWdzKSkgeworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBtYXAgbXV0ZXggcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuIFBUUl9F UlIoZGRwLT5yZWdzKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZHApOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgZGRwX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUg PSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtbXV0ZXgiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgZGRwX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG10a19kZHBfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGRwX3Byb2JlLAor CS5yZW1vdmUJCT0gbXRrX2RkcF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1l ZGlhdGVrLWRkcCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUg PSBkZHBfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVy KG10a19kZHBfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2RkcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjMTE3NQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCkBAIC0wLDAgKzEsNDEg QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19E Uk1fRERQX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBfSAorCisjaW5jbHVkZSAibXRrX2RybV9kZHBf Y29tcC5oIgorCitzdHJ1Y3QgcmVnbWFwOworc3RydWN0IGRldmljZTsKK3N0cnVjdCBtdGtfZGlz cF9tdXRleDsKKwordm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgodm9pZCBfX2lvbWVtICpj b25maWdfcmVncywKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCSAgICAg IGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOwordm9pZCBtdGtfZGRwX3JlbW92ZV9jb21wX2Zy b21fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJCSAgIGVudW0gbXRrX2RkcF9j b21wX2lkIGN1ciwKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KTsKKworc3RydWN0 IG10a19kaXNwX211dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCB1 bnNpZ25lZCBpbnQgaWQpOworaW50IG10a19kaXNwX211dGV4X3ByZXBhcmUoc3RydWN0IG10a19k aXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBt dGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsK K3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgp Owordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0 ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChzdHJ1Y3QgbXRrX2Rpc3BfbXV0 ZXggKm11dGV4LAorCQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rpc3Bf bXV0ZXhfdW5wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtf ZGlzcF9tdXRleF9wdXQoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7CisKKyNlbmRpZiAv KiBNVEtfRFJNX0REUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kZHBfY29tcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw X2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTcwZmNmCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAu YwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ bmMuCisgKiBBdXRob3JzOgorICoJWVQgU2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+CisgKglD SyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVk ZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1 ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorI2luY2x1ZGUg Im10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX09EX0VOCQkJCTB4MDAwMAorI2Rl ZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAorI2RlZmluZSBESVNQX09EX0lOVFNUQQkJCQkw eDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCisjZGVmaW5lIERJU1BfT0RfU0la RQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJCQkweDAwMDAKKworI2Rl ZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgwNDAwCisjZGVmaW5lIERJU1BfQ09MT1JfU1RB UlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4MGM1MAorI2RlZmluZSBE SVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisjZGVmaW5lCU9EX1JFTEFZX01PREUJCUJJVCgw KQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgyKQorCisjZGVmaW5lCUNPTE9SX0JZUEFTU19B TEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykKKworc3RhdGljIHZvaWQg bXRrX2NvbG9yX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQg dywKKwkJCSAgICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl3 cml0ZWwodywgY29tcC0+cmVncyArIERJU1BfQ09MT1JfV0lEVEgpOworCXdyaXRlbChoLCBjb21w LT5yZWdzICsgRElTUF9DT0xPUl9IRUlHSFQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfY29sb3Jf c3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoQ09MT1JfQllQQVNT X0FMTCB8IENPTE9SX1NFUV9TRUwsCisJICAgICAgIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX0NG R19NQUlOKTsKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9TVEFSVCk7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwg dW5zaWduZWQgaW50IHcsCisJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJl c2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsgRElTUF9PRF9TSVpFKTsK K30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp Cit7CisJd3JpdGVsKE9EX1JFTEFZX01PREUsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0NGRyk7CisJ d3JpdGVsKDEsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRr X3Vmb2Vfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoVUZPX0JZ UEFTUywgY29tcC0+cmVncyArIERJU1BfUkVHX1VGT19TVEFSVCk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvciA9IHsKKwkuY29uZmlnID0gbXRr X2NvbG9yX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfY29sb3Jfc3RhcnQsCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfb2QgPSB7CisJLmNvbmZpZyA9IG10 a19vZF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7CisJLnN0YXJ0ID0gbXRrX3Vm b2Vfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19kZHBfY29tcF9z dGVtW01US19ERFBfQ09NUF9UWVBFX01BWF0gPSB7CisJW01US19ESVNQX09WTF0gPSAib3ZsIiwK KwlbTVRLX0RJU1BfUkRNQV0gPSAicmRtYSIsCisJW01US19ESVNQX1dETUFdID0gIndkbWEiLAor CVtNVEtfRElTUF9DT0xPUl0gPSAiY29sb3IiLAorCVtNVEtfRElTUF9BQUxdID0gImFhbCIsCisJ W01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIsCisJW01US19ESVNQX1VGT0VdID0gInVmb2UiLAor CVtNVEtfRFNJXSA9ICJkc2kiLAorCVtNVEtfRFBJXSA9ICJkcGkiLAorCVtNVEtfRElTUF9QV01d ID0gInB3bSIsCisJW01US19ESVNQX01VVEVYXSA9ICJtdXRleCIsCisJW01US19ESVNQX09EXSA9 ICJvZCIsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKKwllbnVtIG10a19kZHBf Y29tcF90eXBlIHR5cGU7CisJaW50IGFsaWFzX2lkOworCWNvbnN0IHN0cnVjdCBtdGtfZGRwX2Nv bXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBf bWF0Y2ggbXRrX2RkcF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKKwlbRERQX0NP TVBPTkVOVF9BQUxdCT0geyBNVEtfRElTUF9BQUwsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVO VF9DT0xPUjBdCT0geyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9LAorCVtERFBfQ09N UE9ORU5UX0NPTE9SMV0JPSB7IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2NvbG9yIH0sCisJW0RE UF9DT01QT05FTlRfRFBJMF0JPSB7IE1US19EUEksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05F TlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfRFNJMV0J PSB7IE1US19EU0ksCQkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfR0FNTUFdCT0geyBNVEtf RElTUF9HQU1NQSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9IHsgTVRLX0RJU1Bf T0QsCTAsICZkZHBfb2QgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsgTVRLX0RJU1BfT1ZM LAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMV0JPSB7IE1US19ESVNQX09WTCwJMSwg TlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9QV00sCTAsIE5VTEwg fSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEsCTAsIE5VTEwgfSwK KwlbRERQX0NPTVBPTkVOVF9SRE1BMV0JPSB7IE1US19ESVNQX1JETUEsCTEsIE5VTEwgfSwKKwlb RERQX0NPTVBPTkVOVF9SRE1BMl0JPSB7IE1US19ESVNQX1JETUEsCTIsIE5VTEwgfSwKKwlbRERQ X0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRkcF91Zm9lIH0sCisJW0RE UF9DT01QT05FTlRfV0RNQTBdCT0geyBNVEtfRElTUF9XRE1BLAkwLCBOVUxMIH0sCisJW0REUF9D T01QT05FTlRfV0RNQTFdCT0geyBNVEtfRElTUF9XRE1BLAkxLCBOVUxMIH0sCit9OworCitpbnQg bXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQllbnVtIG10 a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBvZl9hbGlhc19nZXRfaWQo bm9kZSwgbXRrX2RkcF9jb21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50IGk7CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsKKwkJaWYgKGNvbXBf dHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAgKGlkIDwgMCB8fCBpZCA9 PSBtdGtfZGRwX21hdGNoZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0 dXJuIC1FSU5WQUw7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29t cCAqY29tcCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJICAgICAgY29uc3Qgc3Ry dWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3MpCit7CisJZW51bSBtdGtfZGRwX2NvbXBfdHlw ZSB0eXBlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlOworCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKmxhcmJfcGRldjsKKworCWlmIChjb21wX2lkIDwgMCB8fCBjb21wX2lkID49IERE UF9DT01QT05FTlRfSURfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbXAtPmlkID0gY29t cF9pZDsKKwljb21wLT5mdW5jcyA9IGZ1bmNzID86IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS5m dW5jczsKKworCWlmIChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJMCB8fAorCSAgICBjb21w X2lkID09IEREUF9DT01QT05FTlRfRFNJMCB8fAorCSAgICBjb21wX2lkID09IEREUF9DT01QT05F TlRfUFdNMCkgeworCQljb21wLT5yZWdzID0gTlVMTDsKKwkJY29tcC0+Y2xrID0gTlVMTDsKKwkJ Y29tcC0+aXJxID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcC0+cmVncyA9IG9mX2lvbWFw KG5vZGUsIDApOworCWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwgMCk7CisJY29tcC0+Y2xr ID0gb2ZfY2xrX2dldChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNvbXAtPmNsaykpCisJCWNvbXAt PmNsayA9IE5VTEw7CisKKwl0eXBlID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBfaWRdLnR5cGU7CisK KwkvKiBPbmx5IERNQSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUgTEFSQiBwcm9wZXJ0eSAq LworCWNvbXAtPmxhcmJfZGV2ID0gTlVMTDsKKwlpZiAodHlwZSAhPSBNVEtfRElTUF9PVkwgJiYK KwkgICAgdHlwZSAhPSBNVEtfRElTUF9SRE1BICYmCisJICAgIHR5cGUgIT0gTVRLX0RJU1BfV0RN QSkKKwkJcmV0dXJuIDA7CisKKwlsYXJiX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5vZGUsICJt ZWRpYXRlayxsYXJiIiwgMCk7CisJaWYgKCFsYXJiX25vZGUpIHsKKwkJZGV2X2VycihkZXYsCisJ CQkiTWlzc2luZyBtZWRpYWRlayxsYXJiIHBoYW5kbGUgaW4gJXMgbm9kZVxuIiwKKwkJCW5vZGUt PmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxhcmJfcGRldiA9IG9mX2Zp bmRfZGV2aWNlX2J5X25vZGUobGFyYl9ub2RlKTsKKwlpZiAoIWxhcmJfcGRldikgeworCQlkZXZf d2FybihkZXYsICJXYWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwKKwkJCSBsYXJiX25vZGUt PmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisJCXJldHVybiAtRVBST0JF X0RFRkVSOworCX0KKwlvZl9ub2RlX3B1dChsYXJiX25vZGUpOworCisJY29tcC0+bGFyYl9kZXYg PSAmbGFyYl9wZGV2LT5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19kZHBfY29tcF9y ZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRl OworCisJaWYgKHByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKKwkJcmV0dXJuIC1FQlVTWTsK KworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7CisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2 YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9 IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k ZHBfY29tcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzYmE5Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApAQCAtMCww ICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5k ZWYgTVRLX0RSTV9ERFBfQ09NUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0NPTVBfSAorCisjaW5j bHVkZSA8bGludXgvaW8uaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsK K3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IG10a19wbGFuZV9z dGF0ZTsKKworZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB7CisJTVRLX0RJU1BfT1ZMLAorCU1US19E SVNQX1JETUEsCisJTVRLX0RJU1BfV0RNQSwKKwlNVEtfRElTUF9DT0xPUiwKKwlNVEtfRElTUF9B QUwsCisJTVRLX0RJU1BfR0FNTUEsCisJTVRLX0RJU1BfVUZPRSwKKwlNVEtfRFNJLAorCU1US19E UEksCisJTVRLX0RJU1BfUFdNLAorCU1US19ESVNQX01VVEVYLAorCU1US19ESVNQX09ELAorCU1U S19ERFBfQ09NUF9UWVBFX01BWCwKK307CisKK2VudW0gbXRrX2RkcF9jb21wX2lkIHsKKwlERFBf Q09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMCwKKwlERFBfQ09NUE9ORU5UX0NP TE9SMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCisJRERQX0NPTVBPTkVOVF9EU0kwLAorCUREUF9D T01QT05FTlRfRFNJMSwKKwlERFBfQ09NUE9ORU5UX0dBTU1BLAorCUREUF9DT01QT05FTlRfT0Qs CisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9DT01QT05FTlRfT1ZMMSwKKwlERFBfQ09NUE9O RU5UX1BXTTAsCisJRERQX0NPTVBPTkVOVF9QV00xLAorCUREUF9DT01QT05FTlRfUkRNQTAsCisJ RERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX1JETUEyLAorCUREUF9DT01QT05F TlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX1dETUEwLAorCUREUF9DT01QT05FTlRfV0RNQTEsCisJ RERQX0NPTVBPTkVOVF9JRF9NQVgsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wOworCitzdHJ1 Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKKwl2b2lkICgqY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJICAgICAgIHVuc2lnbmVkIGludCBoLCB1bnNp Z25lZCBpbnQgdnJlZnJlc2gpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IG10a19kZHBfY29tcCAq Y29tcCk7CisJdm9pZCAoKnN0b3ApKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCXZvaWQg KCplbmFibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpOworCXZvaWQgKCpkaXNhYmxlX3ZibGFuaykoc3RydWN0IG10a19kZHBfY29tcCAq Y29tcCk7CisJdm9pZCAoKmxheWVyX29uKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNp Z25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfb2ZmKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfY29uZmlnKShzdHJ1Y3QgbXRr X2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJICAgICBzdHJ1Y3QgbXRrX3Bs YW5lX3N0YXRlICpzdGF0ZSk7Cit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wIHsKKwlzdHJ1Y3Qg Y2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWludCBpcnE7CisJc3RydWN0IGRldmlj ZSAqbGFyYl9kZXY7CisJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQ7CisJY29uc3Qgc3RydWN0IG10 a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2Rk cF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCSAgICAgICB1bnNp Z25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2cmVm cmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmNvbmZpZykKKwkJY29t cC0+ZnVuY3MtPmNvbmZpZyhjb21wLCB3LCBoLCB2cmVmcmVzaCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sK KwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPnN0YXJ0KQorCQljb21wLT5mdW5jcy0+ c3RhcnQoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RvcChz dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5m dW5jcy0+c3RvcCkKKwkJY29tcC0+ZnVuY3MtPnN0b3AoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBtdGtfZGRwX2NvbXBfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wLAorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaWYgKGNvbXAtPmZ1 bmNzICYmIGNvbXAtPmZ1bmNzLT5lbmFibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+ZW5hYmxl X3ZibGFuayhjb21wLCBjcnRjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29t cF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21w LT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCisJCWNvbXAtPmZ1bmNzLT5k aXNhYmxlX3ZibGFuayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29t cF9sYXllcl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgdW5zaWduZWQgaW50 IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX29uKQorCQlj b21wLT5mdW5jcy0+bGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lk IG10a19kZHBfY29tcF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJ ICB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ bGF5ZXJfb2ZmKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKGNvbXAsIGlkeCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRw X2NvbXAgKmNvbXAsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1 Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ ZnVuY3MtPmxheWVyX2NvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZyhjb21wLCBp ZHgsIHN0YXRlKTsKK30KKworaW50IG10a19kZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9u b2RlICpub2RlLAorCQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUpOworaW50IG10 a19kZHBfY29tcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpj b21wX25vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIGVudW0gbXRrX2Rk cF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVu Y3MgKmZ1bmNzKTsKK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19kZHBfY29tcF91bnJl Z2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp OworCisjZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjFj YTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k cnYuYwpAQCAtMCwwICsxLDU5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRl ayBJbmMuCisgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgor I2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgor I2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGlt ZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAu aCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYu aCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKwor I2RlZmluZSBEUklWRVJfTkFNRSAibWVkaWF0ZWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRp YXRlayBTb0MgRFJNIgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxNTA1MTMiCisjZGVmaW5lIERS SVZFUl9NQUpPUiAxCisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisKK3N0YXRpYyB2b2lkIG10a19h dG9taWNfc2NoZWR1bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJcHJpdmF0ZS0+Y29tbWl0LnN0YXRlID0g c3RhdGU7CisJc2NoZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0LndvcmspOworfQorCitzdGF0 aWMgdm9pZCBtdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0 ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBpKQorCQltdGtfZmJfd2FpdChwbGFuZS0+c3Rh dGUtPmZiKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRr X2RybV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJbXRrX2F0 b21pY193YWl0X2Zvcl9mZW5jZXMoc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0 X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0 X3BsYW5lcyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21v ZGVzZXRfZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92 YmxhbmtzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRy bSwgc3RhdGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2 b2lkIG10a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0 IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0 IG10a19kcm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShw cml2YXRlLCBwcml2YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9t aWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2Ry bV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0 ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsK KwlmbHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBl cl9zd2FwX3N0YXRlKGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3Nj aGVkdWxlKHByaXZhdGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJp dmF0ZSwgc3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVu Y3MgbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9t b2RlX2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ss CisJLmF0b21pY19jb21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25z dCBlbnVtIG10a19kZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5U X09WTDAsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQ X0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZP RSwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3Rh dGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NP TVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FN TUEsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitz dGF0aWMgaW50IG10a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlz dHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50 IHJldDsKKworCWlmICghaW9tbXVfcHJlc2VudCgmcGxhdGZvcm1fYnVzX3R5cGUpKQorCQlyZXR1 cm4gLUVQUk9CRV9ERUZFUjsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZh dGUtPm11dGV4X25vZGUpOworCWlmICghcGRldikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiV2Fp dGluZyBmb3IgZGlzcC1tdXRleCBkZXZpY2UgJXNcbiIsCisJCQlwcml2YXRlLT5tdXRleF9ub2Rl LT5mdWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwkJcmV0 dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7 CisKKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOworCisJZHJtLT5tb2RlX2NvbmZpZy5taW5f d2lkdGggPSA2NDsKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKKworCS8qCisJ ICogc2V0IG1heCB3aWR0aCBhbmQgaGVpZ2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4K KwkgKiB0aGlzIHZhbHVlIHdvdWxkIGJlIHVzZWQgdG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBs aW1pdGF0aW9uCisJICogYXQgZHJtX21vZGVfYWRkZmIoKS4KKwkgKi8KKwlkcm0tPm1vZGVfY29u ZmlnLm1heF93aWR0aCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5 NjsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJm10a19kcm1fbW9kZV9jb25maWdfZnVuY3M7 CisKKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJaWYgKHJldCkK KwkJZ290byBlcnJfY29uZmlnX2NsZWFudXA7CisKKwkvKgorCSAqIFdlIGN1cnJlbnRseSBzdXBw b3J0IHR3byBmaXhlZCBkYXRhIHN0cmVhbXMsIGVhY2ggb3B0aW9uYWwsCisJICogYW5kIGVhY2gg c3RhdGljYWxseSBhc3NpZ25lZCB0byBhIGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFM IC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBtdGtfZHJt X2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBfbWFpbikp OworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCS8qIC4uLiBh bmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBt dGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9l eHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKworCS8q IFVzZSBPVkwgZGV2aWNlIGZvciBhbGwgRE1BIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworCW5wID0g cHJpdmF0ZS0+Y29tcF9ub2RlW210a19kZHBfbWFpblswXV0gPzoKKwkgICAgIHByaXZhdGUtPmNv bXBfbm9kZVttdGtfZGRwX2V4dFswXV07CisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUo bnApOworCWlmICghcGRldikgeworCQlyZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKGRybS0+ZGV2 LCAiTmVlZCBhdCBsZWFzdCBvbmUgT1ZMIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2NvbXBvbmVu dF91bmJpbmQ7CisJfQorCisJcHJpdmF0ZS0+ZG1hX2RldiA9ICZwZGV2LT5kZXY7CisKKwkvKgor CSAqIFdlIGRvbid0IHVzZSB0aGUgZHJtX2lycV9pbnN0YWxsKCkgaGVscGVycyBwcm92aWRlZCBi eSB0aGUgRFJNCisJICogY29yZSwgc28gd2UgbmVlZCB0byBzZXQgdGhpcyBtYW51YWxseSBpbiBv cmRlciB0byBhbGxvdyB0aGUKKwkgKiBEUk1fSU9DVExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBj b3JyZWN0bHkuCisJICovCisJZHJtLT5pcnFfZW5hYmxlZCA9IHRydWU7CisJcmV0ID0gZHJtX3Zi bGFua19pbml0KGRybSwgTUFYX0NSVEMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21w b25lbnRfdW5iaW5kOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7CisJZHJtX21v ZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2NvbXBvbmVudF91bmJp bmQ6CisJY29tcG9uZW50X3VuYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CitlcnJfY29uZmlnX2Ns ZWFudXA6CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19kcm1fa21zX2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt KQoreworCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0pOworCisJZHJtX3ZibGFua19jbGVh bnVwKGRybSk7CisJY29tcG9uZW50X3VuYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJZHJtX21v ZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKK30KKworc3RhdGljIGludCBtdGtfZHJtX3VubG9hZChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCW10a19kcm1fa21zX2RlaW5pdChkcm0pOworCWRy bS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXRrX2RybV9nZW1fdm1fb3BzID0geworCS5vcGVu ID0gZHJtX2dlbV92bV9vcGVuLAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtdGtfZHJtX2ZvcHMgPSB7CisJLm93 bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9y ZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkubW1hcCA9IG10a19kcm1f Z2VtX21tYXAsCisJLnBvbGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFkLAorI2lmZGVm IENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRp ZgorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG10a19kcm1fZHJpdmVyID0geworCS5k cml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJ TUUgfAorCQkJICAgRFJJVkVSX0FUT01JQywKKwkudW5sb2FkID0gbXRrX2RybV91bmxvYWQsCisK KwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19jb3VudCwKKwkuZW5hYmxlX3ZibGFu ayA9IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19k cm1fY3J0Y19kaXNhYmxlX3ZibGFuaywKKworCS5nZW1fZnJlZV9vYmplY3QgPSBtdGtfZHJtX2dl bV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZtdGtfZHJtX2dlbV92bV9vcHMsCisJLmR1 bWJfY3JlYXRlID0gbXRrX2RybV9nZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9 IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9k dW1iX2Rlc3Ryb3ksCisKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5k bGVfdG9fZmQsCisJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFu ZGxlLAorCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9w cmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2dldF9zZ190 YWJsZSA9IG10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3Nn X3RhYmxlID0gbXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9tbWFw ID0gbXRrX2RybV9nZW1fbW1hcF9idWYsCisJLmZvcHMgPSAmbXRrX2RybV9mb3BzLAorCisJLm5h bWUgPSBEUklWRVJfTkFNRSwKKwkuZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVS X0RBVEUsCisJLm1ham9yID0gRFJJVkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwK K307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEpCit7CisJcmV0dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRhOworfQorCitzdGF0aWMgaW50IG10 a19kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0 ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpk cm07CisJaW50IHJldDsKKworCWRybSA9IGRybV9kZXZfYWxsb2MoJm10a19kcm1fZHJpdmVyLCBk ZXYpOworCWlmICghZHJtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9kZXZfc2V0X3VuaXF1 ZShkcm0sIGRldl9uYW1lKGRldikpOworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDAp OworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9 IHByaXZhdGU7CisJcHJpdmF0ZS0+ZHJtID0gZHJtOworCisJcmV0ID0gbXRrX2RybV9rbXNfaW5p dChkcm0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCisJcmV0dXJu IDA7CisKK2Vycl91bnJlZ2lzdGVyOgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX2Zy ZWU6CisJZHJtX2Rldl91bnJlZihkcm0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IG10a19kcm1fdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w cml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1fcHV0X2Rldihw cml2YXRlLT5kcm0pOworCXByaXZhdGUtPmRybSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgbXRrX2RybV9vcHMgPSB7CisJLmJpbmQJCT0gbXRr X2RybV9iaW5kLAorCS51bmJpbmQJCT0gbXRrX2RybV91bmJpbmQsCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZGRwX2NvbXBfZHRfaWRzW10gPSB7CisJeyAuY29t cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCAgIC5kYXRhID0gKHZvaWQgKilN VEtfRElTUF9PVkwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJk bWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1JETUEgfSwKKwl7IC5jb21wYXRpYmxlID0g Im1lZGlhdGVrLG10ODE3My1kaXNwLXdkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1dE TUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRh dGEgPSAodm9pZCAqKU1US19ESVNQX0NPTE9SIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxtdDgxNzMtZGlzcC1hYWwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9BQUx9LAorCXsg LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtZ2FtbWEiLCAuZGF0YSA9ICh2b2lk ICopTVRLX0RJU1BfR0FNTUEsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt ZGlzcC11Zm9lIiwgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9VRk9FIH0sCisJeyAuY29tcGF0 aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHNpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtf RFNJIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHBpIiwgICAgICAgIC5k YXRhID0gKHZvaWQgKilNVEtfRFBJIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgx NzMtZGlzcC1tdXRleCIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9NVVRFWCB9LAorCXsgLmNv bXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICop TVRLX0RJU1BfUFdNIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1v ZCIsICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PRCB9LAorCXsgfQorfTsKKworc3RhdGlj IGludCBtdGtfZHJtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw cml2YXRlOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9k ZTsKKwlzdHJ1Y3QgY29tcG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7CisJaW50IHJldDsKKwlp bnQgaTsKKworCXByaXZhdGUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXZhdGUpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIXByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhf aW5pdCgmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOworCUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0 LndvcmssIG10a19hdG9taWNfd29yayk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uo cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXByaXZhdGUtPmNvbmZpZ19yZWdzID0gZGV2bV9p b3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19y ZWdzKSkgeworCQlyZXQgPSBQVFJfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKTsKKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtbXN5cy1jb25maWcgcmVzb3VyY2U6ICVkXG4iLAor CQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBE SVNQIGZ1bmN0aW9uIGJsb2NrcyAqLworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9u b2RlLT5wYXJlbnQsIG5vZGUpIHsKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7 CisJCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBlOworCQlpbnQgY29tcF9pZDsKKwor CQlvZl9pZCA9IG9mX21hdGNoX25vZGUobXRrX2RkcF9jb21wX2R0X2lkcywgbm9kZSk7CisJCWlm ICghb2ZfaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUo bm9kZSkpIHsKKwkJCWRldl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVz XG4iLAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBf dHlwZSA9IChlbnVtIG10a19kZHBfY29tcF90eXBlKW9mX2lkLT5kYXRhOworCisJCWlmIChjb21w X3R5cGUgPT0gTVRLX0RJU1BfTVVURVgpIHsKKwkJCXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9u b2RlX2dldChub2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF9pZCA9IG10a19kZHBf Y29tcF9nZXRfaWQobm9kZSwgY29tcF90eXBlKTsKKwkJaWYgKGNvbXBfaWQgPCAwKSB7CisJCQlk ZXZfd2FybihkZXYsICJTa2lwcGluZyB1bmtub3duIGNvbXBvbmVudCAlc1xuIiwKKwkJCQkgbm9k ZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJpdmF0ZS0+Y29tcF9ub2Rl W2NvbXBfaWRdID0gb2Zfbm9kZV9nZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3VycmVudGx5IG9u bHkgdGhlIE9WTCwgUkRNQSwgRFNJLCBhbmQgRFBJIGJsb2NrcyBoYXZlCisJCSAqIHNlcGFyYXRl IGNvbXBvbmVudCBwbGF0Zm9ybSBkcml2ZXJzIGFuZCBpbml0aWFsaXplIHRoZWlyIG93bgorCQkg KiBERFAgY29tcG9uZW50IHN0cnVjdHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVy ZS4KKwkJICovCisJCWlmIChjb21wX3R5cGUgPT0gTVRLX0RJU1BfT1ZMIHx8CisJCSAgICBjb21w X3R5cGUgPT0gTVRLX0RJU1BfUkRNQSB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EU0kgfHwK KwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRFBJKSB7CisJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcg Y29tcG9uZW50IG1hdGNoIGZvciAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNv bXBvbmVudF9tYXRjaF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIG5vZGUpOworCQl9IGVs c2UgeworCQkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcDsKKworCQkJY29tcCA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqY29tcCksIEdGUF9LRVJORUwpOworCQkJaWYgKCFjb21wKSB7CisJ CQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIGVycl9ub2RlOworCQkJfQorCisJCQlyZXQgPSBt dGtfZGRwX2NvbXBfaW5pdChkZXYsIG5vZGUsIGNvbXAsIGNvbXBfaWQsIE5VTEwpOworCQkJaWYg KHJldCkKKwkJCQlnb3RvIGVycl9ub2RlOworCisJCQlwcml2YXRlLT5kZHBfY29tcFtjb21wX2lk XSA9IGNvbXA7CisJCX0KKwl9CisKKwlpZiAoIXByaXZhdGUtPm11dGV4X25vZGUpIHsKKwkJZGV2 X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCBkaXNwLW11dGV4IG5vZGVcbiIpOworCQlyZXQgPSAt RU5PREVWOworCQlnb3RvIGVycl9ub2RlOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7 CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2YXRlKTsKKworCXJldCA9IGNvbXBv bmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goZGV2LCAmbXRrX2RybV9vcHMsIG1hdGNoKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycl9wbTsKKworCXJldHVybiAwOworCitlcnJfcG06CisJcG1fcnVu dGltZV9kaXNhYmxlKGRldik7CitlcnJfbm9kZToKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRl eF9ub2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJ b2Zfbm9kZV9wdXQocHJpdmF0ZS0+Y29tcF9ub2RlW2ldKTsKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IG10a19kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOworCWludCBpOworCisJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm10 a19kcm1fb3BzKTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJb2Zfbm9kZV9w dXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJZm9yIChpID0gMDsgaSA8IEREUF9DT01QT05FTlRf SURfTUFYOyBpKyspCisJCW9mX25vZGVfcHV0KHByaXZhdGUtPmNvbXBfbm9kZVtpXSk7CisKKwly ZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBtdGtfZHJt X3N5c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2 YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybSA9IHByaXZhdGUtPmRybTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKKworCWRy bV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkcm0pOworCisJZHJtX21vZGVzZXRfbG9ja19hbGwo ZHJtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sICZkcm0tPm1vZGVfY29uZmlnLmNvbm5l Y3Rvcl9saXN0LCBoZWFkKSB7CisJCWludCBvbGRfZHBtcyA9IGNvbm4tPmRwbXM7CisKKwkJaWYg KGNvbm4tPmZ1bmNzLT5kcG1zKQorCQkJY29ubi0+ZnVuY3MtPmRwbXMoY29ubiwgRFJNX01PREVf RFBNU19PRkYpOworCisJCS8qIFNldCB0aGUgb2xkIG1vZGUgYmFjayB0byB0aGUgY29ubmVjdG9y IGZvciByZXN1bWUgKi8KKwkJY29ubi0+ZHBtcyA9IG9sZF9kcG1zOworCX0KKwlkcm1fbW9kZXNl dF91bmxvY2tfYWxsKGRybSk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtdGtfZHJtX3N5c19zdXNw ZW5kXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX3N5c19yZXN1bWUo c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0 ZS0+ZHJtOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOworCisJZHJtX21vZGVzZXRfbG9j a19hbGwoZHJtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sICZkcm0tPm1vZGVfY29uZmln LmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWludCBkZXNpcmVkX21vZGUgPSBjb25uLT5kcG1z OworCisJCS8qCisJCSAqIGF0IHN1c3BlbmQgdGltZSwgd2Ugc2F2ZSBkcG1zIHRvIGNvbm5lY3Rv ci0+ZHBtcywKKwkJICogcmVzdG9yZSB0aGUgb2xkX2RwbXMsIGFuZCBhdCBjdXJyZW50IHRpbWUs IHRoZSBjb25uZWN0b3IKKwkJICogZHBtcyBzdGF0dXMgbXVzdCBiZSBEUk1fTU9ERV9EUE1TX09G Ri4KKwkJICovCisJCWNvbm4tPmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKKworCQkvKgorCQkg KiBJZiB0aGUgY29ubmVjdG9yIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBkdXJpbmcgc3VzcGVuZCwK KwkJICogZGlzY29ubmVjdCBpdCBmcm9tIHRoZSBlbmNvZGVyIGFuZCBsZWF2ZSBpdCBvZmYuIFdl J2xsIG5vdGlmeQorCQkgKiB1c2Vyc3BhY2UgYXQgdGhlIGVuZC4KKwkJICovCisJCWlmIChjb25u LT5mdW5jcy0+ZHBtcykKKwkJCWNvbm4tPmZ1bmNzLT5kcG1zKGNvbm4sIGRlc2lyZWRfbW9kZSk7 CisJfQorCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZHJtKTsKKworCWRybV9rbXNfaGVscGVyX3Bv bGxfZW5hYmxlKGRybSk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtdGtfZHJtX3N5c19yZXN1bWVc biIpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyht dGtfZHJtX3BtX29wcywgbXRrX2RybV9zeXNfc3VzcGVuZCwKKwkJCSBtdGtfZHJtX3N5c19yZXN1 bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHJtX29mX2lkc1td ID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLW1tc3lzIiwgfSwKKwl7IH0K K307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kcm1fcGxhdGZvcm1fZHJp dmVyID0geworCS5wcm9iZQk9IG10a19kcm1fcHJvYmUsCisJLnJlbW92ZQk9IG10a19kcm1fcmVt b3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRybSIsCisJCS5vZl9tYXRj aF90YWJsZSA9IG10a19kcm1fb2ZfaWRzLAorCQkucG0gICAgID0gJm10a19kcm1fcG1fb3BzLAor CX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19kcm1f ZHJpdmVyc1tdID0geworCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKKwkmbXRrX2Rpc3Bfb3Zs X2RyaXZlciwKKwkmbXRrX2Rpc3BfcmRtYV9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IF9faW5p dCBtdGtfZHJtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUobXRrX2RybV9kcml2ZXJzKTsgaSsrKSB7CisJCXJldCA9IHBsYXRm b3JtX2RyaXZlcl9yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0pOworCQlpZiAocmV0IDwgMCkg eworCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgJXMgZHJpdmVyOiAlZFxuIiwKKwkJCSAg ICAgICBtdGtfZHJtX2RyaXZlcnNbaV0tPmRyaXZlci5uYW1lLCByZXQpOworCQkJZ290byBlcnI7 CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJcGxh dGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2RybV9kcml2ZXJzW2ldKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtfZHJtX2V4aXQodm9pZCkKK3sKKwlpbnQg aTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUobXRrX2RybV9kcml2ZXJzKSAtIDE7IGkgPj0gMDsg aS0tKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0pOwor fQorCittb2R1bGVfaW5pdChtdGtfZHJtX2luaXQpOworbW9kdWxlX2V4aXQobXRrX2RybV9leGl0 KTsKKworTU9EVUxFX0FVVEhPUigiWVQgU0hFTiA8eXQuc2hlbkBtZWRpYXRlay5jb20+Iik7CitN T0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhdGVrIFNvQyBEUk0gZHJpdmVyIik7CitNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjc0NGMKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaApAQCAtMCwwICsxLDU0IEBA CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBNVEtfRFJN X0RSVl9ICisjZGVmaW5lIE1US19EUk1fRFJWX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cisj aW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIE1BWF9DUlRDCTIKKyNkZWZp bmUgTUFYX0NPTk5FQ1RPUgkyCisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNlX25vZGU7 CitzdHJ1Y3QgZHJtX2NydGM7CitzdHJ1Y3QgZHJtX2RldmljZTsKK3N0cnVjdCBkcm1fZmJfaGVs cGVyOworc3RydWN0IGRybV9wcm9wZXJ0eTsKK3N0cnVjdCByZWdtYXA7CisKK3N0cnVjdCBtdGtf ZHJtX3ByaXZhdGUgeworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJc3RydWN0IGRldmljZSAq ZG1hX2RldjsKKworCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y1tNQVhfQ1JUQ107CisJdW5zaWduZWQg aW50IG51bV9waXBlczsKKworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbXV0ZXhfbm9kZTsKKwlzdHJ1 Y3QgZGV2aWNlICptdXRleF9kZXY7CisJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKmNvbXBfbm9kZVtERFBfQ09NUE9ORU5UX0lEX01BWF07CisJc3RydWN0 IG10a19kZHBfY29tcCAqZGRwX2NvbXBbRERQX0NPTVBPTkVOVF9JRF9NQVhdOworCisJc3RydWN0 IHsKKwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCQlzdHJ1Y3Qgd29ya19zdHJ1 Y3Qgd29yazsKKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBjb21taXQ7Cit9OworCitleHRlcm4g c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtf RFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoK KyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Zi X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1h LWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRlICJtdGtf ZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dl bS5oIgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisg KiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2Vt IG9iamVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyCWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8K KwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19m Yih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBk cm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJ cmV0dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0 ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1 Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2Vt X2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisK K3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRy bV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNl X3VubG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0g eworCS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95 ID0gbXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICpt dGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJY29u c3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50IHJldDsKKwor CWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtf ZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+YmFzZSwgbW9k ZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJf aW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJcbiIpOworCQlr ZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtf ZmI7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGluIGZiJ3MgZ2Vt IG9iamVjdCdzIHJlc2VydmF0aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1FUkVTVEFSVFNZ UyBpZiBpbnRlcnJ1cHRlZCwgZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3Ry dWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlmICghZmIpCisJ CXJldHVybiAwOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlpZiAoIWdlbSB8 fCAhZ2VtLT5kbWFfYnVmIHx8ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVybiAwOworCisJ cmVzdiA9IGdlbS0+ZG1hX2J1Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2Fp dF90aW1lb3V0X3JjdShyZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJ TUVPVVQpOworCS8qIE1BWF9TQ0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1FUkVTVEFSVFNZ UyBpZiBpbnRlcnJ1cHRlZCAqLworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQlyZXR1cm4gcmV0 OworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9k ZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy ICpjbWQpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVk IGludCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWlu dCByZXQ7CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAh PSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0 X2xvb2t1cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVy biBFUlJfUFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5w aXhlbF9mb3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0g KyB3aWR0aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNp emUgPCBzaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQor CisJbXRrX2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlm IChJU19FUlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5y ZWZlcmVuY2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgor CWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9Q VFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAor I2RlZmluZSBNVEtfRFJNX0ZCX0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0 X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19mYl93YWl0KHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19k cm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9m Yl9jbWQyICpjbWQpOworCisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmE3NzNiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9nZW0uYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBN ZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2Vt Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kcnYu aCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCitzdGF0aWMgc3RydWN0IG10a19kcm1fZ2Vt X29iaiAqbXRrX2RybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJdW5z aWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW1fb2Jq OworCWludCByZXQ7CisKKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKworCW10 a19nZW1fb2JqID0ga3phbGxvYyhzaXplb2YoKm10a19nZW1fb2JqKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFtdGtfZ2VtX29iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBk cm1fZ2VtX29iamVjdF9pbml0KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXplKTsKKwlpZiAo cmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGdlbSBvYmplY3Rc biIpOworCQlrZnJlZShtdGtfZ2VtX29iaik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQor CisJcmV0dXJuIG10a19nZW1fb2JqOworfQorCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtf ZHJtX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc2l6ZV90IHNp emUsIGJvb2wgYWxsb2Nfa21hcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwltdGtfZ2VtID0gbXRrX2Ry bV9nZW1faW5pdChkZXYsIHNpemUpOworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBF UlJfQ0FTVChtdGtfZ2VtKTsKKworCW9iaiA9ICZtdGtfZ2VtLT5iYXNlOworCisJaW5pdF9kbWFf YXR0cnMoJm10a19nZW0tPmRtYV9hdHRycyk7CisJZG1hX3NldF9hdHRyKERNQV9BVFRSX1dSSVRF X0NPTUJJTkUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJaWYgKCFhbGxvY19rbWFwKQorCQlk bWFfc2V0X2F0dHIoRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcsICZtdGtfZ2VtLT5kbWFfYXR0 cnMpOworCisJbXRrX2dlbS0+Y29va2llID0gZG1hX2FsbG9jX2F0dHJzKHByaXYtPmRtYV9kZXYs IG9iai0+c2l6ZSwKKwkJCQkJICAmbXRrX2dlbS0+ZG1hX2FkZHIsIEdGUF9LRVJORUwsCisJCQkJ CSAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKCFtdGtfZ2VtLT5jb29raWUpIHsKKwkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgJXp4IGJ5dGUgZG1hIGJ1ZmZlciIsIG9iai0+c2l6 ZSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2dlbV9mcmVlOworCX0KKworCWlmIChh bGxvY19rbWFwKQorCQltdGtfZ2VtLT5rdmFkZHIgPSBtdGtfZ2VtLT5jb29raWU7CisKKwlEUk1f REVCVUdfRFJJVkVSKCJjb29raWUgPSAlcCBkbWFfYWRkciA9ICVwYWQgc2l6ZSA9ICV6dVxuIiwK KwkJCSBtdGtfZ2VtLT5jb29raWUsICZtdGtfZ2VtLT5kbWFfYWRkciwKKwkJCSBzaXplKTsKKwor CXJldHVybiBtdGtfZ2VtOworCitlcnJfZ2VtX2ZyZWU6CisJZHJtX2dlbV9vYmplY3RfcmVsZWFz ZShvYmopOworCWtmcmVlKG10a19nZW0pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3Zv aWQgbXRrX2RybV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7 CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7 CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsK KworCWlmIChtdGtfZ2VtLT5zZykKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dl bS0+c2cpOworCWVsc2UKKwkJZG1hX2ZyZWVfYXR0cnMocHJpdi0+ZG1hX2Rldiwgb2JqLT5zaXpl LCBtdGtfZ2VtLT5jb29raWUsCisJCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2Vt LT5kbWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4g Ki8KKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30K KworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVf ZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCBy ZXQ7CisKKwlhcmdzLT5waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJw cCwgOCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRr X2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAo SVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICog YWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJ ICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9 IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+ aGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJv cCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJt X2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0 dXJuIDA7CisKK2Vycl9oYW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZt dGtfZ2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9t YXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29i amVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAo cmV0KQorCQlnb3RvIG91dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIo Jm9iai0+dm1hX25vZGUpOworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9m ZnNldCk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmop OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0 ICp2bWEpCisKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0g PSB0b19tdGtfZ2VtX29iaihvYmopOworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBv YmotPmRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKgorCSAqIGRtYV9hbGxvY19hdHRycygpIGFsbG9j YXRlZCBhIHN0cnVjdCBwYWdlIHRhYmxlIGZvciBtdGtfZ2VtLCBzbyBjbGVhcgorCSAqIFZNX1BG Tk1BUCBmbGFnIHRoYXQgd2FzIHNldCBieSBkcm1fZ2VtX21tYXBfb2JqKCkvZHJtX2dlbV9tbWFw KCkuCisJICovCisJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+dm1fcGdvZmYg PSAwOworCisJcmV0ID0gZG1hX21tYXBfYXR0cnMocHJpdi0+ZG1hX2Rldiwgdm1hLCBtdGtfZ2Vt LT5jb29raWUsCisJCQkgICAgIG10a19nZW0tPmRtYV9hZGRyLCBvYmotPnNpemUsICZtdGtfZ2Vt LT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKworCXJl dHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKwor CXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChvYmosIHZt YSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlp bnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG10 a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEg c2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhlIHRhYmxlJ3Mg Y29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQgYnkKKyAqICAg ICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2Nh dGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVjdCBzZ190YWJs ZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmop Cit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9i aik7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0 ZTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwlpbnQgcmV0OworCisJc2d0ID0ga3phbGxvYyhz aXplb2YoKnNndCksIEdGUF9LRVJORUwpOworCWlmICghc2d0KQorCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKKworCXJldCA9IGRtYV9nZXRfc2d0YWJsZV9hdHRycyhwcml2LT5kbWFfZGV2LCBz Z3QsIG10a19nZW0tPmNvb2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6 ZSwKKwkJCQkgICAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJS T1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOwor CQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0cnVjdCBk cm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0 IHNnX3RhYmxlICpzZykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWlu dCByZXQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOworCWRtYV9h ZGRyX3QgZXhwZWN0ZWQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIGF0dGFj aC0+ZG1hYnVmLT5zaXplKTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJf UFRSKFBUUl9FUlIobXRrX2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzZy0+ c2dsKTsKKwlmb3JfZWFjaF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJaWYgKHNn X2RtYV9hZGRyZXNzKHMpICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3RhYmxlIGlz IG5vdCBjb250aWd1b3VzIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfZ2VtX2Zy ZWU7CisJCX0KKwkJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9sZW4ocyk7 CisJfQorCisJbXRrX2dlbS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwlt dGtfZ2VtLT5zZyA9IHNnOworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJfZ2VtX2Zy ZWU6CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uM2EyYTU2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2dlbS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBfTVRLX0RS TV9HRU1fSF8KKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsgZHJtIGJ1 ZmZlciBzdHJ1Y3R1cmUuCisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0gYSBuZXcg aGFuZGxlIHRvIHRoaXMgZ2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBkcm1fZ2Vt X2hhbmRsZV9jcmVhdGUoKS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2Fs bG9jX2F0dHJzKCksIGtlZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFkZHI6IGtl cm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjogZG1hIGFk ZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdl bSBidWZmZXIuCisgKgorICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2ZlcnJlZCB0 byB1c2VyIGFzIGttc19iby5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVy IHRocm91Z2gga21zX2JvLmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29iaiB7CisJ c3RydWN0IGRybV9nZW1fb2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9pZAkJCSpr dmFkZHI7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlkbWFfYXR0 cnM7CisJc3RydWN0IHNnX3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19nZW1fb2Jq KHgpCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQorCit2b2lk IG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKTsKK3N0 cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgYm9vbCBhbGxvY19rbWFwKTsKK2ludCBtdGtf ZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3Mp OworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUsCisJCQkJ dWludDY0X3QgKm9mZnNldCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmls cCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2VtX21tYXBfYnVm KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZ2VtX3By aW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5jODk4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5o dUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2lu Y2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2lu Y2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorI2luY2x1ZGUg Im10a19kcm1fcGxhbmUuaCIKKworc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10gPSB7CisJRFJN X0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfUkdC NTY1LAorfTsKKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9w bGFuZSAqbXRrX3BsYW5lLCBib29sIGVuYWJsZSwKKwkJCSAgICAgZG1hX2FkZHJfdCBhZGRyLCBz dHJ1Y3QgZHJtX3JlY3QgKmRlc3QpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRr X3BsYW5lLT5iYXNlOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3Bs YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoLCBmb3JtYXQ7CisJ aW50IHgsIHk7CisKKwlpZiAoV0FSTl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFibGUgJiYgIXBs YW5lLT5zdGF0ZS0+ZmIpKSkKKwkJcmV0dXJuOworCisJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpIHsK KwkJcGl0Y2ggPSBwbGFuZS0+c3RhdGUtPmZiLT5waXRjaGVzWzBdOworCQlmb3JtYXQgPSBwbGFu ZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGl0Y2ggPSAwOworCQlm b3JtYXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4OworCX0KKworCXggPSBwbGFuZS0+c3RhdGUtPmNy dGNfeDsKKwl5ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3k7CisKKwlpZiAoeCA8IDApIHsKKwkJYWRk ciAtPSB4ICogNDsKKwkJeCA9IDA7CisJfQorCisJaWYgKHkgPCAwKSB7CisJCWFkZHIgLT0geSAq IHBpdGNoOworCQl5ID0gMDsKKwl9CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBlbmFibGU7 CisJc3RhdGUtPnBlbmRpbmcucGl0Y2ggPSBwaXRjaDsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQg PSBmb3JtYXQ7CisJc3RhdGUtPnBlbmRpbmcuYWRkciA9IGFkZHI7CisJc3RhdGUtPnBlbmRpbmcu eCA9IHg7CisJc3RhdGUtPnBlbmRpbmcueSA9IHk7CisJc3RhdGUtPnBlbmRpbmcud2lkdGggPSBk ZXN0LT54MiAtIGRlc3QtPngxOworCXN0YXRlLT5wZW5kaW5nLmhlaWdodCA9IGRlc3QtPnkyIC0g ZGVzdC0+eTE7CisJd21iKCk7IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBhcmUg c2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7Cit9CisK K3N0YXRpYyB2b2lkIG10a19wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sK KwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCWlmIChwbGFuZS0+c3RhdGUpIHsK KwkJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2Uo cGxhbmUtPnN0YXRlLT5mYik7CisKKwkJc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUt PnN0YXRlKTsKKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBlbHNlIHsK KwkJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFz dGF0ZSkKKwkJCXJldHVybjsKKwkJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNlOworCX0KKwor CXN0YXRlLT5iYXNlLnBsYW5lID0gcGxhbmU7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gRFJN X0ZPUk1BVF9SR0I1NjU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICptdGtf cGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVj dCBtdGtfcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+ c3RhdGUpOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFs bG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4g TlVMTDsKKworCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5l LCAmc3RhdGUtPmJhc2UpOworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5wbGFuZSAhPSBwbGFuZSk7 CisKKwlzdGF0ZS0+cGVuZGluZyA9IG9sZF9zdGF0ZS0+cGVuZGluZzsKKworCXJldHVybiAmc3Rh dGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh dGUpCit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHBsYW5lLCBz dGF0ZSk7CisJa2ZyZWUodG9fbXRrX3BsYW5lX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG10a19wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRl X3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5l ID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGRybV9wbGFu ZV9jbGVhbnVwLAorCS5yZXNldCA9IG10a19wbGFuZV9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0 ZV9zdGF0ZSA9IG10a19wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0 YXRlID0gbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBtdGtf cGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wg dmlzaWJsZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmNydGNf eCwKKwkJLnkxID0gc3RhdGUtPmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmNydGNfeCArIHN0YXRl LT5jcnRjX3csCisJCS55MiA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oLAorCX07CisJ c3RydWN0IGRybV9yZWN0IHNyYyA9IHsKKwkJLyogMTYuMTYgZml4ZWQgcG9pbnQgKi8KKwkJLngx ID0gc3RhdGUtPnNyY194LAorCQkueTEgPSBzdGF0ZS0+c3JjX3ksCisJCS54MiA9IHN0YXRlLT5z cmNfeCArIHN0YXRlLT5zcmNfdywKKwkJLnkyID0gc3RhdGUtPnNyY195ICsgc3RhdGUtPnNyY19o LAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWZiKQorCQly ZXR1cm4gMDsKKworCWlmICghbXRrX2ZiX2dldF9nZW1fb2JqKGZiKSkgeworCQlEUk1fREVCVUdf S01TKCJidWZmZXIgaXMgbnVsbFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICgh c3RhdGUtPmNydGMpCisJCXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElTX0VSUihjcnRj X3N0YXRlKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwljbGlwLngyID0gY3J0 Y19zdGF0ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+bW9kZS52ZGlz cGxheTsKKworCXJldHVybiBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgc3Rh dGUtPmNydGMsIGZiLAorCQkJCQkgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAgICBE Uk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCSAgICAgRFJNX1BMQU5FX0hFTFBFUl9O T19TQ0FMSU5HLAorCQkJCQkgICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30KKworc3RhdGlj IHZvaWQgbXRrX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJ CQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRr X3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwor CXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1 Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsKKwlzdHJ1 Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194LAorCQkueTEg PSBzdGF0ZS0+YmFzZS5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNfeCArIHN0YXRl LT5iYXNlLmNydGNfdywKKwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3RhdGUtPmJhc2Uu Y3J0Y19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWNy dGMpCisJCXJldHVybjsKKworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9k ZS5oZGlzcGxheTsKKwljbGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUudmRp c3BsYXk7CisJZHJtX3JlY3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwlnZW0gPSBtdGtf ZmJfZ2V0X2dlbV9vYmooc3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19tdGtfZ2VtX29i aihnZW0pOworCW10a19wbGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtfZ2VtLT5kbWFf YWRkciwgJmRlc3QpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtf cGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZh bHNlOworCXdtYigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBpcyBzZXQgYmVm b3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxwZXJfZnVu Y3MgPSB7CisJLmF0b21pY19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ssCisJLmF0b21p Y191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBt dGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsCit9OworCitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAg dW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAor CQkgICB1bnNpZ25lZCBpbnQgenBvcykKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZHJtX3VuaXZl cnNhbF9wbGFuZV9pbml0KGRldiwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVfY3J0Y3MsCisJ CQkJICAgICAgICZtdGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAgIEFSUkFZX1NJ WkUoZm9ybWF0cyksIHR5cGUsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZHJtX3Bs YW5lX2hlbHBlcl9hZGQoJm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxwZXJfZnVuY3Mp OworCW10a19wbGFuZS0+aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNzJhN2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX3BsYW5lLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5jb20+ CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpZm5kZWYgX01US19EUk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExBTkVfSF8KKwor I2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0 cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVuc2lnbmVk IGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7CisJYm9v bAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJdW5z aWduZWQgaW50CQkJcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVuc2lnbmVkIGlu dAkJCXg7CisJdW5zaWduZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0aDsKKwl1bnNp Z25lZCBpbnQJCQloZWlnaHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVjdCBtdGtfcGxh bmVfc3RhdGUgeworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3RydWN0IG10a19w bGFuZV9wZW5kaW5nX3N0YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBt dGtfZHJtX3BsYW5lICp0b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJ cmV0dXJuIGNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUsIGJhc2UpOwor fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9fbXRrX3BsYW5l X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBjb250YWlu ZXJfb2Yoc3RhdGUsIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQorCitpbnQgbXRr X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUg Km10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1f cGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRpZgotLSAK Mi43LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=