From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v10 02/13] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Wed, 3 Feb 2016 20:25:51 +0100 Message-ID: <1454527562-28154-3-git-send-email-p.zabel@pengutronix.de> References: <1454527562-28154-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: <1454527562-28154-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 , 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 , Stephen Boyd , Tomasz Figa , Kumar Gala List-Id: linux-mediatek@lists.infradead.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0 aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0 IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8 ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2Ugdjk6CiAtIGluaXRpYWxseSBkaXNhYmxlIGFsbCBw bGFuZXMgdG8gZml4IGFuIGlvbW11IHdhcm5pbmcgaXNzdWUKIC0gc3RvcmUgY3J0YyBpbiBvdmwg c28gd2UgZG9uJ3QgaGF2ZSB0byBsb29rIGl0IHVwIGV2ZXJ5IGlycQogLSBjaGFuZ2UgdGhlIG92 bCBpbnB1dCBjb2xvciBmb3JtYXQgc2V0dXAKIC0gbWVyZ2UgbGF5ZXJfb24vb2ZmIGNvbXBvbmVu dCBvcHMgaW50byBsYXllcl9jb25maWcKIC0gb25seSBzZXQgcGVuZGluZyBwbGFuZXMgaWYgYXQg bGVhc3Qgb25lIHBsYW5lIGhhcyBwZW5kaW5nLmNvbmZpZyBzZXQKIC0gYWRkIHN1cHBvcnQgZm9y IHRoZSBwcmltZSBmZCBpbXBvcnQgaW9jdGwKIC0gcmVtb3ZlIG10a19kcm1fY3J0Y19jaGVja19m bHVzaAogLSBmaXggYSBjcmFzaCB3aGVuIGNvbXBvbmVudHMgYXJlIGRpc2FibGVkIGluIHRoZSBk ZXZpY2UgdHJlZQogLSBtb3ZlIHRoZSByZG1hIGNvZGUgb3V0IGludG8gYSBzZXBhcmF0ZSBkcml2 ZXIKIC0gZHJvcCBzZXRfYnVzaWQKIC0gdmFyaW91cyBmaXhlcwotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvS2NvbmZpZyAgICAgICAgICAgIHwgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9N YWtlZmlsZSAgICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k aXNwX292bC5jICAgICB8IDMwMiArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZGlzcF9yZG1hLmMgICAgfCAyNDAgKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwgNTc2ICsrKysrKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oICAgICB8ICAz MiArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgICAgICB8IDM1NSAr KysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgg ICAgICB8ICA0MSArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAu YyB8IDIyNSArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw X2NvbXAuaCB8IDE1MCArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k cnYuYyAgICAgIHwgNTc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTMgKysrCiBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAgIHwgIDIzICsrCiBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwgMjY2ICsrKysrKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTkgKysrCiBkcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQwICsrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCAgICB8ICA1OSArKysKIDIw IGZpbGVzIGNoYW5nZWQsIDMzOTEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry di5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9mYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZmIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fcGxhbmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggOGFlN2FiNi4uZjdiMGQ3OSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25m aWcKQEAgLTI2OSwzICsyNjksNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZp ZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZl cnMvZ3B1L2RybS9ldG5hdml2L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNjE3NjZkZS4uN2IwZDFhYiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQpAQCAtNjksNiArNjksNyBAQCBvYmotJChDT05GSUdfRFJNX01TTSkgKz0gbXNtLwogb2JqLSQo Q09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmotJChDT05GSUdfRFJNX1NUSSkgKz0gc3Rp Lwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8KK29iai0kKENPTkZJR19EUk1fTUVESUFU RUspICs9IG1lZGlhdGVrLwogb2JqLXkJCQkrPSBpMmMvCiBvYmoteQkJCSs9IHBhbmVsLwogb2Jq LXkJCQkrPSBicmlkZ2UvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2Nv bmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjhkYWQ4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMCwwICsxLDEyIEBACitjb25maWcgRFJNX01FRElB VEVLCisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBNZWRpYXRlayBTb0NzIgorCWRlcGVuZHMg b24gRFJNCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYgQ09NUElMRV9URVNU KQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBJT01NVV9ETUEKKwlzZWxlY3QgTVRL X1NNSQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIE1lZGlhdGVr IFNvQ3MuCisJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1lZGlhdGVrLWRybQorCSAgVGhp cyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0dGluZyBhbmQKKwkgIGJ1ZmZlciBtYW5h Z2VtZW50IHRvIHVzZXJzcGFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJkZTdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKK21lZGlhdGVr LWRybS15IDo9IG10a19kaXNwX292bC5vIFwKKwkJICBtdGtfZGlzcF9yZG1hLm8gXAorCQkgIG10 a19kcm1fY3J0Yy5vIFwKKwkJICBtdGtfZHJtX2RkcC5vIFwKKwkJICBtdGtfZHJtX2RkcF9jb21w Lm8gXAorCQkgIG10a19kcm1fZHJ2Lm8gXAorCQkgIG10a19kcm1fZmIubyBcCisJCSAgbXRrX2Ry bV9nZW0ubyBcCisJCSAgbXRrX2RybV9wbGFuZS5vCisKK29iai0kKENPTkZJR19EUk1fTUVESUFU RUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2Rpc3Bfb3ZsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3Zs LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2MjY3MWYKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMKQEAgLTAs MCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5j bHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51 eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxs aW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2lu Y2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKwor I2RlZmluZSBESVNQX1JFR19PVkxfSU5URU4JCQkweDAwMDQKKyNkZWZpbmUgT1ZMX0ZNRV9DUExf SU5UCQkJCQlCSVQoMSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lOVFNUQQkJCTB4MDAwOAorI2Rl ZmluZSBESVNQX1JFR19PVkxfRU4JCQkJMHgwMDBjCisjZGVmaW5lIERJU1BfUkVHX09WTF9SU1QJ CQkweDAwMTQKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9TSVpFCQkJMHgwMDIwCisjZGVmaW5l IERJU1BfUkVHX09WTF9ST0lfQkdDTFIJCQkweDAwMjgKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1NS Q19DT04JCQkweDAwMmMKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0NPTihuKQkJCSgweDAwMzAgKyAw eDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfU1JDX1NJWkUobikJCSgweDAwMzggKyAw eDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfT0ZGU0VUKG4pCQkJKDB4MDAzYyArIDB4 MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9QSVRDSChuKQkJCSgweDAwNDQgKyAweDIw ICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUkRNQV9DVFJMKG4pCQkoMHgwMGMwICsgMHgy MCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFfR01DKG4pCQkoMHgwMGM4ICsgMHgy MCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0FERFIobikJCQkoMHgwZjQwICsgMHgyMCAq IChuKSkKKworI2RlZmluZQlPVkxfUkRNQV9NRU1fR01DCTB4NDA0MDIwMjAKKworI2RlZmluZSBP VkxfQ09OX0JZVEVfU1dBUAlCSVQoMjQpCisjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX1JHQjU2NQko MCA8PCAxMikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCODg4CSgxIDw8IDEyKQorI2RlZmlu ZSBPVkxfQ09OX0NMUkZNVF9SR0JBODg4OAkoMiA8PCAxMikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJG TVRfQVJHQjg4ODgJKDMgPDwgMTIpCisjZGVmaW5lCU9WTF9DT05fQUVOCQlCSVQoOCkKKyNkZWZp bmUJT1ZMX0NPTl9BTFBIQQkJMHhmZgorCisvKioKKyAqIHN0cnVjdCBtdGtfZGlzcF9vdmwgLSBE SVNQX09WTCBkcml2ZXIgc3RydWN0dXJlCisgKiBAZGRwX2NvbXAgLSBzdHJ1Y3R1cmUgY29udGFp bmluZyB0eXBlIGVudW0gYW5kIGhhcmR3YXJlIHJlc291cmNlcworICogQGNydGMgLSBhc3NvY2lh dGVkIGNydGMgdG8gcmVwb3J0IHZibGFuayBldmVudHMgdG8KKyAqLworc3RydWN0IG10a19kaXNw X292bCB7CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJc3RydWN0IGRybV9jcnRj CQkJKmNydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rpc3Bfb3ZsX2lycV9oYW5k bGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2 ID0gZGV2X2lkOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9ICZwcml2LT5kZHBfY29tcDsK KworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0ICovCisJd3JpdGVsKDB4MCwg b3ZsLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVFNUQSk7CisKKwlpZiAoIXByaXYtPmNydGMpCisJ CXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2RkcF9pcnEocHJpdi0+Y3J0Yywgb3ZsKTsK KworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9lbmFibGVf dmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICBzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21w LCBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsLAorCQkJCQkJIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMg PSBjcnRjOworCXdyaXRlbF9yZWxheGVkKE9WTF9GTUVfQ1BMX0lOVCwgY29tcC0+cmVncyArIERJ U1BfUkVHX09WTF9JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfZGlzYWJsZV92Ymxh bmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpw cml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9vdmwsCisJCQkJCQkgZGRw X2NvbXApOworCisJcHJpdi0+Y3J0YyA9IE5VTEw7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21w LT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9z dGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbF9yZWxheGVkKDB4MSwg Y29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxf c3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbF9yZWxheGVkKDB4MCwg Y29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxf Y29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3LAorCQkJICAg dW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAodyAhPSAwICYm IGggIT0gMCkKKwkJd3JpdGVsX3JlbGF4ZWQoaCA8PCAxNiB8IHcsIGNvbXAtPnJlZ3MgKyBESVNQ X1JFR19PVkxfUk9JX1NJWkUpOworCXdyaXRlbF9yZWxheGVkKDB4MCwgY29tcC0+cmVncyArIERJ U1BfUkVHX09WTF9ST0lfQkdDTFIpOworCisJd3JpdGVsKDB4MSwgY29tcC0+cmVncyArIERJU1Bf UkVHX09WTF9SU1QpOworCXdyaXRlbCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUlNU KTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwl3cml0 ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgpKTsKKwl3cml0 ZWwoT1ZMX1JETUFfTUVNX0dNQywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SRE1BX0dNQyhp ZHgpKTsKKworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7 CisJcmVnID0gcmVnIHwgQklUKGlkeCk7CisJd3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJU1Bf UkVHX09WTF9TUkNfQ09OKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9vZmYoc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBp bnQgcmVnOworCisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09O KTsKKwlyZWcgPSByZWcgJiB+QklUKGlkeCk7CisJd3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJ U1BfUkVHX09WTF9TUkNfQ09OKTsKKworCXdyaXRlbCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JF R19PVkxfUkRNQV9DVFJMKGlkeCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG92bF9mbXRf Y29udmVydCh1bnNpZ25lZCBpbnQgZm10KQoreworCXN3aXRjaCAoZm10KSB7CisJZGVmYXVsdDoK KwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCNTY1 OworCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I1 NjUgfCBPVkxfQ09OX0JZVEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfUkdCODg4OgorCQlyZXR1 cm4gT1ZMX0NPTl9DTFJGTVRfUkdCODg4OworCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6CisJCXJl dHVybiBPVkxfQ09OX0NMUkZNVF9SR0I4ODggfCBPVkxfQ09OX0JZVEVfU1dBUDsKKwljYXNlIERS TV9GT1JNQVRfUkdCWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4OgorCQlyZXR1cm4g T1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODg7CisJY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4OgorCWNh c2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4 IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2Ug RFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQkE4ODg4Owor CWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJ CXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0JBODg4OCB8IE9WTF9DT05fQllURV9TV0FQOworCX0K K30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9jb25maWcoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAq c3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlICpwZW5kaW5nID0gJnN0 YXRlLT5wZW5kaW5nOworCXVuc2lnbmVkIGludCBhZGRyID0gcGVuZGluZy0+YWRkcjsKKwl1bnNp Z25lZCBpbnQgcGl0Y2ggPSBwZW5kaW5nLT5waXRjaCAmIDB4ZmZmZjsKKwl1bnNpZ25lZCBpbnQg Zm10ID0gcGVuZGluZy0+Zm9ybWF0OworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAocGVuZGluZy0+ eSA8PCAxNikgfCBwZW5kaW5nLT54OworCXVuc2lnbmVkIGludCBzcmNfc2l6ZSA9IChwZW5kaW5n LT5oZWlnaHQgPDwgMTYpIHwgcGVuZGluZy0+d2lkdGg7CisJdW5zaWduZWQgaW50IGNvbjsKKwor CWlmICghcGVuZGluZy0+ZW5hYmxlKQorCQltdGtfb3ZsX2xheWVyX29mZihjb21wLCBpZHgpOwor CisJY29uID0gb3ZsX2ZtdF9jb252ZXJ0KGZtdCk7CisJaWYgKGlkeCAhPSAwKQorCQljb24gfD0g T1ZMX0NPTl9BRU4gfCBPVkxfQ09OX0FMUEhBOworCisJd3JpdGVsX3JlbGF4ZWQoY29uLCBjb21w LT5yZWdzICsgRElTUF9SRUdfT1ZMX0NPTihpZHgpKTsKKwl3cml0ZWxfcmVsYXhlZChwaXRjaCwg Y29tcC0+cmVncyArIERJU1BfUkVHX09WTF9QSVRDSChpZHgpKTsKKwl3cml0ZWxfcmVsYXhlZChz cmNfc2l6ZSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfU0laRShpZHgpKTsKKwl3cml0 ZWxfcmVsYXhlZChvZmZzZXQsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfT0ZGU0VUKGlkeCkp OworCXdyaXRlbF9yZWxheGVkKGFkZHIsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfQUREUihp ZHgpKTsKKworCWlmIChwZW5kaW5nLT5lbmFibGUpCisJCW10a19vdmxfbGF5ZXJfb24oY29tcCwg aWR4KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgbXRrX2Rp c3Bfb3ZsX2Z1bmNzID0geworCS5jb25maWcgPSBtdGtfb3ZsX2NvbmZpZywKKwkuc3RhcnQgPSBt dGtfb3ZsX3N0YXJ0LAorCS5zdG9wID0gbXRrX292bF9zdG9wLAorCS5lbmFibGVfdmJsYW5rID0g bXRrX292bF9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19vdmxfZGlzYWJs ZV92YmxhbmssCisJLmxheWVyX29uID0gbXRrX292bF9sYXllcl9vbiwKKwkubGF5ZXJfb2ZmID0g bXRrX292bF9sYXllcl9vZmYsCisJLmxheWVyX2NvbmZpZyA9IG10a19vdmxfbGF5ZXJfY29uZmln LAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg bXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBf cmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJ ZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kaXNwX292bF91bmJpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1 Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJt X2RldiwgJnByaXYtPmRkcF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25l bnRfb3BzIG10a19kaXNwX292bF9jb21wb25lbnRfb3BzID0geworCS5iaW5kCT0gbXRrX2Rpc3Bf b3ZsX2JpbmQsCisJLnVuYmluZCA9IG10a19kaXNwX292bF91bmJpbmQsCit9OworCitzdGF0aWMg aW50IG10a19kaXNwX292bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kaXNwX292bCAq cHJpdjsKKwlpbnQgY29tcF9pZDsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwlwcml2ID0gZGV2 bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQor CQlyZXR1cm4gLUVOT01FTTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJ aWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRl diwgaXJxLCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9UUklHR0VS X05PTkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxuIiwgaXJxLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0X2lkKGRldi0+b2Zfbm9k ZSwgTVRLX0RJU1BfT1ZMKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJcmV0dXJuIGNv bXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYtPm9mX25vZGUs ICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rpc3Bfb3ZsX2Z1bmNzKTsKKwlp ZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50 OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRrX2Rpc3Bfb3Zs X2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFk ZCBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBtdGtfZGlzcF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ Y29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19k aXNwX292bF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr LG10ODE3My1kaXNwLW92bCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg bXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg bXRrX2Rpc3Bfb3ZsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3Bfb3ZsX3Byb2JlLAor CS5yZW1vdmUJCT0gbXRrX2Rpc3Bfb3ZsX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJ PSAibWVkaWF0ZWstZGlzcC1vdmwiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9mX21h dGNoX3RhYmxlID0gbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCwKKwl9LAorfTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjM2OGFlODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNp bmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9JTlRf RU5BQkxFCQkweDAwMDAKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9JTlRfU1RBVFVTCQkweDAwMDQK KyNkZWZpbmUgUkRNQV9UQVJHRVRfTElORV9JTlQJCQkJQklUKDUpCisjZGVmaW5lIFJETUFfRklG T19VTkRFUkZMT1dfSU5UCQkJCUJJVCg0KQorI2RlZmluZSBSRE1BX0VPRl9BQk5PUk1BTF9JTlQJ CQkJQklUKDMpCisjZGVmaW5lIFJETUFfRlJBTUVfRU5EX0lOVAkJCQlCSVQoMikKKyNkZWZpbmUg UkRNQV9GUkFNRV9TVEFSVF9JTlQJCQkJQklUKDEpCisjZGVmaW5lIFJETUFfUkVHX1VQREFURV9J TlQJCQkJQklUKDApCisjZGVmaW5lIERJU1BfUkVHX1JETUFfR0xPQkFMX0NPTgkJMHgwMDEwCisj ZGVmaW5lIFJETUFfRU5HSU5FX0VOCQkJCQlCSVQoMCkKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9T SVpFX0NPTl8wCQkweDAwMTQKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9TSVpFX0NPTl8xCQkweDAw MTgKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9UQVJHRVRfTElORQkJMHgwMDFjCisjZGVmaW5lIERJ U1BfUkVHX1JETUFfRklGT19DT04JCQkweDAwNDAKKyNkZWZpbmUgUkRNQV9GSUZPX1VOREVSRkxP V19FTgkJCQlCSVQoMzEpCisjZGVmaW5lIFJETUFfRklGT19QU0VVRE9fU0laRShieXRlcykJCQko KChieXRlcykgLyAxNikgPDwgMTYpCisjZGVmaW5lIFJETUFfT1VUUFVUX1ZBTElEX0ZJRk9fVEhS RVNIT0xEKGJ5dGVzKQkJKChieXRlcykgLyAxNikKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2Rpc3Bf cmRtYSAtIERJU1BfUkRNQSBkcml2ZXIgc3RydWN0dXJlCisgKiBAZGRwX2NvbXAgLSBzdHJ1Y3R1 cmUgY29udGFpbmluZyB0eXBlIGVudW0gYW5kIGhhcmR3YXJlIHJlc291cmNlcworICogQGNydGMg LSBhc3NvY2lhdGVkIGNydGMgdG8gcmVwb3J0IGlycSBldmVudHMgdG8KKyAqLworc3RydWN0IG10 a19kaXNwX3JkbWEgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAJCWRkcF9jb21wOworCXN0cnVjdCBk cm1fY3J0YwkJCSpjcnRjOworfTsKKworc3RhdGljIGlycXJldHVybl90IG10a19kaXNwX3JkbWFf aXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtdGtfZGlzcF9y ZG1hICpwcml2ID0gZGV2X2lkOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKnJkbWEgPSAmcHJpdi0+ ZGRwX2NvbXA7CisKKwkvKiBDbGVhciBmcmFtZSBjb21wbGV0aW9uIGludGVycnVwdCAqLworCXdy aXRlbCgweDAsIHJkbWEtPnJlZ3MgKyBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMpOworCisJaWYg KCFwcml2LT5jcnRjKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwltdGtfY3J0Y19kZHBfaXJxKHBy aXYtPmNydGMsIHJkbWEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9p ZCByZG1hX3VwZGF0ZV9iaXRzKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGlu dCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsKQorewor CXVuc2lnbmVkIGludCB0bXAgPSByZWFkbChjb21wLT5yZWdzICsgcmVnKTsKKworCXRtcCA9ICh0 bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgY29tcC0+cmVncyArIHJl Zyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2VuYWJsZV92Ymxhbmsoc3RydWN0IG10a19k ZHBfY29tcCAqY29tcCwKKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0 IG10a19kaXNwX3JkbWEgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNw X3JkbWEsCisJCQkJCQkgIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMgPSBjcnRjOworCXJkbWFf dXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFLCBSRE1BX0ZSQU1FX0VO RF9JTlQsCisJCQkgUkRNQV9GUkFNRV9FTkRfSU5UKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3Jk bWFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3Qg bXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3Bf cmRtYSwKKwkJCQkJCSAgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IE5VTEw7CisJcmRtYV91 cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUsIFJETUFfRlJBTUVfRU5E X0lOVCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX3N0YXJ0KHN0cnVjdCBtdGtfZGRw X2NvbXAgKmNvbXApCit7CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0dM T0JBTF9DT04sIFJETUFfRU5HSU5FX0VOLAorCQkJIFJETUFfRU5HSU5FX0VOKTsKK30KKworc3Rh dGljIHZvaWQgbXRrX3JkbWFfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXJk bWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OLCBSRE1BX0VOR0lO RV9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2NvbmZpZyhzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLCB1bnNpZ25lZCB3aWR0aCwKKwkJCSAgICB1bnNpZ25lZCBoZWlnaHQsIHVu c2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOworCXVuc2ln bmVkIGludCByZWc7CisKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfU0la RV9DT05fMCwgMHhmZmYsIHdpZHRoKTsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVH X1JETUFfU0laRV9DT05fMSwgMHhmZmZmZiwgaGVpZ2h0KTsKKworCS8qCisJICogRW5hYmxlIEZJ Rk8gdW5kZXJmbG93IHNpbmNlIERTSSBhbmQgRFBJIGNhbid0IGJlIGJsb2NrZWQuCisJICogS2Vl cCB0aGUgRklGTyBwc2V1ZG8gc2l6ZSByZXNldCBkZWZhdWx0IG9mIDggS2lCLiBTZXQgdGhlCisJ ICogb3V0cHV0IHRocmVzaG9sZCB0byA2IG1pY3Jvc2Vjb25kcyB3aXRoIDcvNiBvdmVyaGVhZCB0 bworCSAqIGFjY291bnQgZm9yIGJsYW5raW5nLCBhbmQgd2l0aCBhIHBpeGVsIGRlcHRoIG9mIDQg Ynl0ZXM6CisJICovCisJdGhyZXNob2xkID0gd2lkdGggKiBoZWlnaHQgKiB2cmVmcmVzaCAqIDQg KiA3IC8gMTAwMDAwMDsKKwlyZWcgPSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0VOIHwKKwkgICAgICBS RE1BX0ZJRk9fUFNFVURPX1NJWkUoU1pfOEspIHwKKwkgICAgICBSRE1BX09VVFBVVF9WQUxJRF9G SUZPX1RIUkVTSE9MRCh0aHJlc2hvbGQpOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQ X1JFR19SRE1BX0ZJRk9fQ09OKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2Nv bXBfZnVuY3MgbXRrX2Rpc3BfcmRtYV9mdW5jcyA9IHsKKwkuY29uZmlnID0gbXRrX3JkbWFfY29u ZmlnLAorCS5zdGFydCA9IG10a19yZG1hX3N0YXJ0LAorCS5zdG9wID0gbXRrX3JkbWFfc3RvcCwK KwkuZW5hYmxlX3ZibGFuayA9IG10a19yZG1hX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJs YW5rID0gbXRrX3JkbWFfZGlzYWJsZV92YmxhbmssCit9OworCitzdGF0aWMgaW50IG10a19kaXNw X3JkbWFfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJ CSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJ aW50IHJldDsKKworCXJldCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJl Z2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwg cmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgdm9p ZCBtdGtfZGlzcF9yZG1hX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Ug Km1hc3RlciwKKwkJCQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJp diA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0g ZGF0YTsKKworCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29t cCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZGlzcF9yZG1h X2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQJPSBtdGtfZGlzcF9yZG1hX2JpbmQsCisJLnVuYmlu ZCA9IG10a19kaXNwX3JkbWFfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9yZG1h X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdjsKKwlpbnQgY29t cF9pZDsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01F TTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJ CXJldHVybiBpcnE7CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25v ZGUsIE1US19ESVNQX1JETUEpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4g Y29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9k ZSwgJnByaXYtPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9yZG1hX2Z1bmNzKTsK KwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9u ZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEaXNhYmxlIGFuZCBj bGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KKwl3cml0ZWwoMHgwLCBwcml2LT5kZHBfY29tcC5y ZWdzICsgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFKTsKKwl3cml0ZWwoMHgwLCBwcml2LT5kZHBf Y29tcC5yZWdzICsgRElTUF9SRUdfUkRNQV9JTlRfU1RBVFVTKTsKKworCXJldCA9IGRldm1fcmVx dWVzdF9pcnEoZGV2LCBpcnEsIG10a19kaXNwX3JkbWFfaXJxX2hhbmRsZXIsCisJCQkgICAgICAg SVJRRl9UUklHR0VSX05PTkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChyZXQgPCAwKSB7 CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxuIiwgaXJxLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBy aXYpOworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVu dF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBjb21wb25l bnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfZGlz cF9yZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVu dF9kZWwoJnBkZXYtPmRldiwgJm10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2Rpc3BfcmRt YV9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3 My1kaXNwLXJkbWEiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19k aXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf ZGlzcF9yZG1hX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3BfcmRtYV9wcm9iZSwKKwku cmVtb3ZlCQk9IG10a19kaXNwX3JkbWFfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9 ICJtZWRpYXRlay1kaXNwLXJkbWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9mX21h dGNoX3RhYmxlID0gbXRrX2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNjM2OWVmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2NydGMuYwpAQCAtMCwwICsxLDU3NiBAQAorLyoKKyAqIENvcHlyaWdo dCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgorI2luY2x1 ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVs cGVyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGlt ZS5oPgorI2luY2x1ZGUgPHNvYy9tZWRpYXRlay9zbWkuaD4KKworI2luY2x1ZGUgIm10a19kcm1f ZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAu aCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0u aCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisKKy8qKgorICogc3RydWN0IG10a19kcm1f Y3J0YyAtIE1lZGlhVGVrIHNwZWNpZmljIGNydGMgc3RydWN0dXJlLgorICogQGJhc2U6IGNydGMg b2JqZWN0LgorICogQGVuYWJsZWQ6IHJlY29yZHMgd2hldGhlciBjcnRjX2VuYWJsZSBzdWNjZWVk ZWQKKyAqIEBwbGFuZXM6IGFycmF5IG9mIDQgbXRrX2RybV9wbGFuZSBzdHJ1Y3R1cmVzLCBvbmUg Zm9yIGVhY2ggb3ZlcmxheSBwbGFuZQorICogQHBlbmRpbmdfcGxhbmVzOiB3aGV0aGVyIGFueSBw bGFuZSBoYXMgcGVuZGluZyBjaGFuZ2VzIHRvIGJlIGFwcGxpZWQKKyAqIEBjb25maWdfcmVnczog bWVtb3J5IG1hcHBlZCBtbXN5cyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwYWNlCisgKiBAbXV0 ZXg6IGhhbmRsZSB0byBvbmUgb2YgdGhlIHRlbiBkaXNwX211dGV4IHN0cmVhbXMKKyAqIEBkZHBf Y29tcF9ucjogbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gZGRwX2NvbXAKKyAqIEBkZHBfY29tcDog YXJyYXkgb2YgcG9pbnRlcnMgdGhlIG10a19kZHBfY29tcCBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhp cyBjcnRjCisgKi8KK3N0cnVjdCBtdGtfZHJtX2NydGMgeworCXN0cnVjdCBkcm1fY3J0YwkJCWJh c2U7CisJYm9vbAkJCQllbmFibGVkOworCisJYm9vbAkJCQlwZW5kaW5nX25lZWRzX3ZibGFuazsK KwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50CSpldmVudDsKKworCXN0cnVjdCBtdGtf ZHJtX3BsYW5lCQlwbGFuZXNbT1ZMX0xBWUVSX05SXTsKKwlib29sCQkJCXBlbmRpbmdfcGxhbmVz OworCisJdm9pZCBfX2lvbWVtCQkJKmNvbmZpZ19yZWdzOworCXN0cnVjdCBtdGtfZGlzcF9tdXRl eAkJKm11dGV4OworCXVuc2lnbmVkIGludAkJCWRkcF9jb21wX25yOworCXN0cnVjdCBtdGtfZGRw X2NvbXAJCSoqZGRwX2NvbXA7Cit9OworCitzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgeworCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZQkJYmFzZTsKKworCWJvb2wJCQkJcGVuZGluZ19jb25maWc7CisJdW5z aWduZWQgaW50CQkJcGVuZGluZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX2hlaWdo dDsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX3ZyZWZyZXNoOworfTsKKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgbXRrX2RybV9jcnRjICp0b19tdGtfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmMpCit7 CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RybV9jcnRjLCBiYXNlKTsKK30K Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnRvX210a19jcnRjX3N0YXRl KHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqcykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHMsIHN0 cnVjdCBtdGtfY3J0Y19zdGF0ZSwgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0 Y19maW5pc2hfcGFnZV9mbGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNydGMtPmRldi0+ZXZlbnRfbG9jaywgZmxhZ3Mp OworCWRybV9zZW5kX3ZibGFua19ldmVudChjcnRjLT5kZXYsIG10a19jcnRjLT5ldmVudC0+cGlw ZSwgbXRrX2NydGMtPmV2ZW50KTsKKwlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOworCW10a19j cnRjLT5ldmVudCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0Yy0+ZGV2LT5l dmVudF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmluaXNoX3BhZ2Vf ZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlkcm1fY3J0Y19oYW5kbGVf dmJsYW5rKCZtdGtfY3J0Yy0+YmFzZSk7CisJaWYgKG10a19jcnRjLT5wZW5kaW5nX25lZWRzX3Zi bGFuaykgeworCQltdGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7CisJCW10 a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuayA9IGZhbHNlOworCX0KK30KKworc3RhdGljIHZv aWQgbXRrX2RybV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVj dCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJCWNsa191bnBy ZXBhcmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCisJbXRrX2Rpc3BfbXV0ZXhfcHV0 KG10a19jcnRjLT5tdXRleCk7CisKKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOworfQorCitzdGF0 aWMgdm9pZCBtdGtfZHJtX2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0 cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlpZiAoY3J0Yy0+c3RhdGUpIHsKKwkJaWYg KGNydGMtPnN0YXRlLT5tb2RlX2Jsb2IpCisJCQlkcm1fcHJvcGVydHlfdW5yZWZlcmVuY2VfYmxv YihjcnRjLT5zdGF0ZS0+bW9kZV9ibG9iKTsKKworCQlzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRl KGNydGMtPnN0YXRlKTsKKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBl bHNlIHsKKwkJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJ aWYgKCFzdGF0ZSkKKwkJCXJldHVybjsKKwkJY3J0Yy0+c3RhdGUgPSAmc3RhdGUtPmJhc2U7CisJ fQorCisJc3RhdGUtPmJhc2UuY3J0YyA9IGNydGM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKm10a19kcm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jcnRjICpj cnRjKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6YWxs b2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBO VUxMOworCisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShjcnRjLCAm c3RhdGUtPmJhc2UpOworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5jcnRjICE9IGNydGMpOworCXN0 YXRlLT5iYXNlLmNydGMgPSBjcnRjOworCisJcmV0dXJuICZzdGF0ZS0+YmFzZTsKK30KKworc3Rh dGljIHZvaWQgbXRrX2RybV9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRj LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCV9fZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKGNydGMsIHN0YXRlKTsKKwlrZnJlZSh0b19t dGtfY3J0Y19zdGF0ZShzdGF0ZSkpOworfQorCitzdGF0aWMgYm9vbCBtdGtfZHJtX2NydGNfbW9k ZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRq dXN0ZWRfbW9kZSkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvIGhlcmUsIGJ1dCB0aGlzIGNhbGxiYWNr IGlzIG1hbmRhdG9yeS4gKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2Ry bV9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBt dGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisK KwlzdGF0ZS0+cGVuZGluZ193aWR0aCA9IGNydGMtPm1vZGUuaGRpc3BsYXk7CisJc3RhdGUtPnBl bmRpbmdfaGVpZ2h0ID0gY3J0Yy0+bW9kZS52ZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGluZ192cmVm cmVzaCA9IGNydGMtPm1vZGUudnJlZnJlc2g7CisJd21iKCk7CS8qIE1ha2Ugc3VyZSB0aGUgYWJv dmUgcGFyYW1ldGVycyBhcmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+cGVuZGluZ19j b25maWcgPSB0cnVlOworfQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0 IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1f cHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAq bXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2Rk cF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZW5h YmxlX3ZibGFuayhvdmwsICZtdGtfY3J0Yy0+YmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9p ZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5z aWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0 Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0 Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZGlzYWJsZV92Ymxhbmsob3ZsKTsKK30K Kworc3RhdGljIGludCBtdGtfY3J0Y19kZHBfY2xrX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRj ICptdGtfY3J0YykKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigi JXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25y OyBpKyspIHsKKwkJcmV0ID0gY2xrX2VuYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7 CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBjbG9jayAlZDog JWRcbiIsIGksIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworZXJy OgorCXdoaWxlICgtLWkgPj0gMCkKKwkJY2xrX2Rpc2FibGUobXRrX2NydGMtPmRkcF9jb21wW2ld LT5jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9jbGtf ZGlzYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQgaTsKKworCURS TV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19j cnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBb aV0tPmNsayk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2NydGNfZGRwX2h3X2luaXQoc3RydWN0IG10 a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19j cnRjLT5iYXNlOworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaDsKKwlpbnQg cmV0OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlp ZiAoV0FSTl9PTighY3J0Yy0+c3RhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdpZHRoID0g Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUuaGRpc3BsYXk7CisJaGVpZ2h0ID0gY3J0Yy0+c3Rh dGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXk7CisJdnJlZnJlc2ggPSBjcnRjLT5zdGF0ZS0+YWRq dXN0ZWRfbW9kZS52cmVmcmVzaDsKKworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoY3J0Yy0+ ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJs ZSBwb3dlciBkb21haW46ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9 IG10a19kaXNwX211dGV4X3ByZXBhcmUobXRrX2NydGMtPm11dGV4KTsKKwlpZiAocmV0IDwgMCkg eworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgbXV0ZXggY2xvY2s6ICVkXG4iLCByZXQp OworCQlnb3RvIGVycl9wbV9ydW50aW1lX3B1dDsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBf Y2xrX2VuYWJsZShtdGtfY3J0Yyk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWls ZWQgdG8gZW5hYmxlIGNvbXBvbmVudCBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9t dXRleF91bnByZXBhcmU7CisJfQorCisJRFJNX0RFQlVHX0RSSVZFUigibWVkaWF0ZWtfZGRwX2Rk cF9wYXRoX3NldHVwXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25y IC0gMTsgaSsrKSB7CisJCW10a19kZHBfYWRkX2NvbXBfdG9fcGF0aChtdGtfY3J0Yy0+Y29uZmln X3JlZ3MsCisJCQkJCSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAorCQkJCQkgbXRrX2NydGMt PmRkcF9jb21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0 Yy0+bXV0ZXgsCisJCQkJCW10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtfZGlz cF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBfY29tcFtpXS0+ aWQpOworCW10a19kaXNwX211dGV4X2VuYWJsZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJZm9yIChp ID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCXN0cnVjdCBtdGtfZGRw X2NvbXAgKmNvbXAgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV07CisKKwkJbXRrX2RkcF9jb21wX2Nv bmZpZyhjb21wLCB3aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaCk7CisJCW10a19kZHBfY29tcF9zdGFy dChjb21wKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3Ry dWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19t dGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5l bmFibGUgPSBmYWxzZTsKKwkJbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhtdGtfY3J0Yy0+ZGRw X2NvbXBbMF0sIGksCisJCQkJCSAgcGxhbmVfc3RhdGUpOworCX0KKworCXJldHVybiAwOworCitl cnJfbXV0ZXhfdW5wcmVwYXJlOgorCW10a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0Yy0+ bXV0ZXgpOworZXJyX3BtX3J1bnRpbWVfcHV0OgorCXBtX3J1bnRpbWVfcHV0KGNydGMtPmRldi0+ ZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaHdfZmlu aShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gbXRrX2NydGMtPmJhc2UuZGV2OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigi JXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25y OyBpKyspCisJCW10a19kZHBfY29tcF9zdG9wKG10a19jcnRjLT5kZHBfY29tcFtpXSk7CisJZm9y IChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtfZGlzcF9tdXRl eF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29t cFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2Rpc2FibGUobXRrX2NydGMtPm11dGV4KTsKKwlm b3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10a19k ZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywKKwkJCQkJICAg ICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJICAgICAgbXRrX2NydGMtPmRkcF9j b21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+ bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtfZGlz cF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBfY29tcFtp XS0+aWQpOworCW10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShtdGtfY3J0Yyk7CisJbXRrX2Rpc3Bf bXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisKKwlwbV9ydW50aW1lX3B1dChkcm0t PmRldik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19lbmFibGUoc3RydWN0IGRybV9j cnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2Ny dGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21w WzBdOworCWludCByZXQ7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwgX19mdW5jX18s IGNydGMtPmJhc2UuaWQpOworCisJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChvdmwtPmxhcmJfZGV2 KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsYXJiOiAlZFxuIiwg cmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9od19pbml0KG10a19j cnRjKTsKKwlpZiAocmV0KSB7CisJCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7CisJ CXJldHVybjsKKwl9CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJbXRrX2NydGMtPmVu YWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZShzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0 b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ ZGRwX2NvbXBbMF07CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwgX19m dW5jX18sIGNydGMtPmJhc2UuaWQpOworCWlmIChXQVJOX09OKCFtdGtfY3J0Yy0+ZW5hYmxlZCkp CisJCXJldHVybjsKKworCS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0ZSB0byBkaXNhYmxl ZCAqLworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5l X3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZh bHNlOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCX0KKwltdGtfY3J0 Yy0+cGVuZGluZ19wbGFuZXMgPSB0cnVlOworCisJLyogV2FpdCBmb3IgcGxhbmVzIHRvIGJlIGRp c2FibGVkICovCisJZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOworCisJZHJtX2NydGNf dmJsYW5rX29mZihjcnRjKTsKKwltdGtfY3J0Y19kZHBfaHdfZmluaShtdGtfY3J0Yyk7CisJbXRr X3NtaV9sYXJiX3B1dChvdmwtPmxhcmJfZGV2KTsKKworCW10a19jcnRjLT5lbmFibGVkID0gZmFs c2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRy bV9jcnRjICpjcnRjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNf c3RhdGUpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0 YXRlKGNydGMtPnN0YXRlKTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210 a19jcnRjKGNydGMpOworCisJaWYgKG10a19jcnRjLT5ldmVudCAmJiBzdGF0ZS0+YmFzZS5ldmVu dCkKKwkJRFJNX0VSUk9SKCJuZXcgZXZlbnQgd2hpbGUgdGhlcmUgaXMgc3RpbGwgYSBwZW5kaW5n IGV2ZW50XG4iKTsKKworCWlmIChzdGF0ZS0+YmFzZS5ldmVudCkgeworCQlzdGF0ZS0+YmFzZS5l dmVudC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNydGMpOworCQlXQVJOX09OKGRybV9jcnRjX3Zi bGFua19nZXQoY3J0YykgIT0gMCk7CisJCW10a19jcnRjLT5ldmVudCA9IHN0YXRlLT5iYXNlLmV2 ZW50OworCQlzdGF0ZS0+YmFzZS5ldmVudCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBt dGtfZHJtX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAg ICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBtdGtf ZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJdW5zaWduZWQgaW50IHBl bmRpbmdfcGxhbmVzID0gMDsKKwlpbnQgaTsKKworCWlmIChtdGtfY3J0Yy0+ZXZlbnQpCisJCW10 a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuayA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8IE9W TF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRj LT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7 CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJ aWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5KSB7CisJCQlwbGFuZV9zdGF0ZS0+cGVuZGlu Zy5jb25maWcgPSB0cnVlOworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuZGlydHkgPSBmYWxzZTsK KwkJCXBlbmRpbmdfcGxhbmVzIHw9IEJJVChpKTsKKwkJfQorCX0KKwlpZiAocGVuZGluZ19wbGFu ZXMpCisJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgbXRrX2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcJ CT0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwCQk9IGRybV9hdG9t aWNfaGVscGVyX3BhZ2VfZmxpcCwKKwkuZGVzdHJveQkJPSBtdGtfZHJtX2NydGNfZGVzdHJveSwK KwkucmVzZXQJCQk9IG10a19kcm1fY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZQk9IG10a19kcm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRl CT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVf Zml4dXAJPSBtdGtfZHJtX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9mYgk9IG10a19k cm1fY3J0Y19tb2RlX3NldF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRjX2VuYWJsZSwK KwkuZGlzYWJsZQk9IG10a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVnaW4JPSBtdGtf ZHJtX2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJtX2NydGNfYXRv bWljX2ZsdXNoLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZHJtLAorCQkJICAgICBzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YywKKwkJ CSAgICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKKwkJCSAgICAgc3RydWN0IGRybV9wbGFu ZSAqY3Vyc29yLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJt X2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZtdGtfY3J0Yy0+YmFzZSwgcHJpbWFyeSwgY3Vy c29yLAorCQkJCQkmbXRrX2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gZXJy X2NsZWFudXBfY3J0YzsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm10a19jcnRjLT5iYXNlLCAm bXRrX2NydGNfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiAwOworCitlcnJfY2xlYW51cF9jcnRj OgorCWRybV9jcnRjX2NsZWFudXAoJm10a19jcnRjLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQor Cit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRr X2RkcF9jb21wICpvdmwpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19t dGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2Ny dGNfc3RhdGUobXRrX2NydGMtPmJhc2Uuc3RhdGUpOworCXVuc2lnbmVkIGludCBpOworCisJLyoK KwkgKiBUT0RPOiBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlcnMgaGVyZSwgd2Ugc2hv dWxkIHByZXBhcmUKKwkgKiB3b3JraW5nIHJlZ2lzdGVycyBpbiBhdG9taWNfY29tbWl0IGFuZCBs ZXQgdGhlIGhhcmR3YXJlIGNvbW1hbmQKKwkgKiBxdWV1ZSB1cGRhdGUgbW9kdWxlIHJlZ2lzdGVy cyBvbiB2YmxhbmsuCisJICovCisJaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykgeworCQltdGtf ZGRwX2NvbXBfY29uZmlnKG92bCwgc3RhdGUtPnBlbmRpbmdfd2lkdGgsCisJCQkJICAgIHN0YXRl LT5wZW5kaW5nX2hlaWdodCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gpOworCisJ CXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOworCX0KKworCWlmIChtdGtfY3J0Yy0+cGVu ZGluZ19wbGFuZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJ CQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJ CQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQkJcGxhbmVfc3RhdGUg PSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQkJaWYgKHBsYW5lX3N0YXRl LT5wZW5kaW5nLmNvbmZpZykgeworCQkJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcob3ZsLCBp LCBwbGFuZV9zdGF0ZSk7CisJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gZmFsc2U7 CisJCQl9CisJCX0KKwkJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gZmFsc2U7CisJfQorCisJ bXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKK30KKworaW50IG10a19kcm1fY3J0 Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBlbnVtIG10a19k ZHBfY29tcF9pZCAqcGF0aCwgdW5zaWduZWQgaW50IHBhdGhfbGVuKQoreworCXN0cnVjdCBtdGtf ZHJtX3ByaXZhdGUgKnByaXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBkcm1fZGV2LT5kZXY7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGM7CisJ ZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB6cG9zOworCWludCBwaXBl ID0gcHJpdi0+bnVtX3BpcGVzOworCWludCByZXQ7CisJaW50IGk7CisKKwltdGtfY3J0YyA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqbXRrX2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10 a19jcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW10a19jcnRjLT5jb25maWdfcmVncyA9IHBy aXYtPmNvbmZpZ19yZWdzOworCW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBhdGhfbGVuOworCW10 a19jcnRjLT5kZHBfY29tcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIG10a19jcnRjLT5kZHBf Y29tcF9uciwKKwkJCQkJCXNpemVvZigqbXRrX2NydGMtPmRkcF9jb21wKSwKKwkJCQkJCUdGUF9L RVJORUwpOworCisJbXRrX2NydGMtPm11dGV4ID0gbXRrX2Rpc3BfbXV0ZXhfZ2V0KHByaXYtPm11 dGV4X2RldiwgcGlwZSk7CisJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgpKSB7CisJCXJldCA9 IFBUUl9FUlIobXRrX2NydGMtPm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0 IG11dGV4OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJZW51bSBtdGtfZGRwX2NvbXBfaWQg Y29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXA7CisJCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRd OworCQlpZiAoIW5vZGUpIHsKKwkJCWRldl9lcnIoZGV2LCAiQ29tcG9uZW50ICVkIGlzIGRpc2Fi bGVkIG9yIG1pc3NpbmdcbiIsCisJCQkJY29tcF9pZCk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJ Z290byB1bnByZXBhcmU7CisJCX0KKworCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9pZF07 CisJCWlmICghY29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21wb25lbnQgJXMgbm90IGluaXRp YWxpemVkXG4iLAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJ Z290byB1bnByZXBhcmU7CisJCX0KKworCQlyZXQgPSBjbGtfcHJlcGFyZShjb21wLT5jbGspOwor CQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUgY2xv Y2sgZm9yIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lLCByZXQpOwor CQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBjb21w OworCX0KKworCWZvciAoenBvcyA9IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykgewor CQl0eXBlID0gKHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQkoenBv cyA9PSAxKSA/IERSTV9QTEFORV9UWVBFX0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQRV9P VkVSTEFZOworCQlyZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBsYW5l c1t6cG9zXSwKKwkJCQkgICAgIEJJVChwaXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQpCisJ CQlnb3RvIHVucHJlcGFyZTsKKwl9CisKKwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1fZGV2 LCBtdGtfY3J0YywgJm10a19jcnRjLT5wbGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMtPnBs YW5lc1sxXS5iYXNlLCBwaXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7CisK Kwlwcml2LT5jcnRjW3BpcGVdID0gJm10a19jcnRjLT5iYXNlOworCXByaXYtPm51bV9waXBlcysr OworCisJcmV0dXJuIDA7CisKK3VucHJlcGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa191 bnByZXBhcmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCisJcmV0dXJuIHJldDsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi44MWU1NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisjZGVm aW5lIE1US19EUk1fQ1JUQ19ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRl ICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisjZGVm aW5lIE9WTF9MQVlFUl9OUgk0CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0 Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlw ZSk7Cit2b2lkIG10a19kcm1fY3J0Y19jaGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Owordm9pZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lk IG10a19jcnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2RkcF9j b21wICpvdmwpOworaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRy bV9kZXYsCisJCQljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAqcGF0aCwKKwkJCXVuc2lnbmVk IGludCBwYXRoX2xlbik7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0NSVENfSCAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4xNjU4NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZGRwLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRl ICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmlu ZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRfRU4JMHgwNDAKKyNkZWZpbmUgRElTUF9S RUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOCTB4MDQ0CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJ R19ESVNQX09EX01PVVRfRU4JCTB4MDQ4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0dB TU1BX01PVVRfRU4JMHgwNGMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VU X0VOCTB4MDUwCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU4JMHgw ODQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IxX1NFTF9JTgkweDA4OAorI2Rl ZmluZSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTgkJMHgwYWMKKyNkZWZpbmUgRElTUF9SRUdf Q09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTgkweDBjOAorI2RlZmluZSBESVNQX1JFR19DT05GSUdf TU1TWVNfQ0dfQ09OMAkJMHgxMDAKKworI2RlZmluZSBESVNQX1JFR19NVVRFWF9FTihuKQkoMHgy MCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCArIDB4 MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX01PRChuKQkoMHgyYyArIDB4MjAgKiAo bikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX1NPRihuKQkoMHgzMCArIDB4MjAgKiAobikpCisK KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZMMAkJQklUKDExKQorI2RlZmluZSBNVVRFWF9NT0Rf RElTUF9PVkwxCQlCSVQoMTIpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQoMTMp CisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUExCQlCSVQoMTQpCisjZGVmaW5lIE1VVEVYX01P RF9ESVNQX1JETUEyCQlCSVQoMTUpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlCSVQo MTYpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUExCQlCSVQoMTcpCisjZGVmaW5lIE1VVEVY X01PRF9ESVNQX0NPTE9SMAkJQklUKDE4KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjEJ CUJJVCgxOSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQUFMCQlCSVQoMjApCisjZGVmaW5lIE1V VEVYX01PRF9ESVNQX0dBTU1BCQlCSVQoMjEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VGT0UJ CUJJVCgyMikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMAkJQklUKDIzKQorI2RlZmluZSBN VVRFWF9NT0RfRElTUF9QV00xCQlCSVQoMjQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09ECQlC SVQoMjUpCisKKyNkZWZpbmUgTVVURVhfU09GX1NJTkdMRV9NT0RFCQkwCisjZGVmaW5lIE1VVEVY X1NPRl9EU0kwCQkJMQorI2RlZmluZSBNVVRFWF9TT0ZfRFNJMQkJCTIKKyNkZWZpbmUgTVVURVhf U09GX0RQSTAJCQkzCisKKyNkZWZpbmUgT1ZMMF9NT1VUX0VOX0NPTE9SMAkJMHgxCisjZGVmaW5l IE9EX01PVVRfRU5fUkRNQTAJCTB4MQorI2RlZmluZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgxCisj ZGVmaW5lIENPTE9SMF9TRUxfSU5fT1ZMMAkJMHgxCisjZGVmaW5lIE9WTDFfTU9VVF9FTl9DT0xP UjEJCTB4MQorI2RlZmluZSBHQU1NQV9NT1VUX0VOX1JETUExCQkweDEKKyNkZWZpbmUgUkRNQTFf TU9VVF9EUEkwCQkJMHgyCisjZGVmaW5lIERQSTBfU0VMX0lOX1JETUExCQkweDEKKyNkZWZpbmUg Q09MT1IxX1NFTF9JTl9PVkwxCQkweDEKKworc3RydWN0IG10a19kaXNwX211dGV4IHsKKwlpbnQg aWQ7CisJYm9vbCBjbGFpbWVkOworfTsKKworc3RydWN0IG10a19kZHAgeworCXN0cnVjdCBkZXZp Y2UJCQkqZGV2OworCXN0cnVjdCBjbGsJCQkqY2xrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOwor CXN0cnVjdCBtdGtfZGlzcF9tdXRleAkJbXV0ZXhbMTBdOworfTsKKworc3RhdGljIGNvbnN0IHVu c2lnbmVkIGludCBtdXRleF9tb2RbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0geworCVtERFBfQ09N UE9ORU5UX0FBTF0gPSBNVVRFWF9NT0RfRElTUF9BQUwsCisJW0REUF9DT01QT05FTlRfQ09MT1Iw XSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdID0gTVVU RVhfTU9EX0RJU1BfQ09MT1IxLAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXSA9IE1VVEVYX01PRF9E SVNQX0dBTU1BLAorCVtERFBfQ09NUE9ORU5UX09EXSA9IE1VVEVYX01PRF9ESVNQX09ELAorCVtE RFBfQ09NUE9ORU5UX09WTDBdID0gTVVURVhfTU9EX0RJU1BfT1ZMMCwKKwlbRERQX0NPTVBPTkVO VF9PVkwxXSA9IE1VVEVYX01PRF9ESVNQX09WTDEsCisJW0REUF9DT01QT05FTlRfUFdNMF0gPSBN VVRFWF9NT0RfRElTUF9QV00wLAorCVtERFBfQ09NUE9ORU5UX1BXTTFdID0gTVVURVhfTU9EX0RJ U1BfUFdNMSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMCwK KwlbRERQX0NPTVBPTkVOVF9SRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMSwKKwlbRERQX0NP TVBPTkVOVF9SRE1BMl0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMiwKKwlbRERQX0NPTVBPTkVOVF9V Rk9FXSA9IE1VVEVYX01PRF9ESVNQX1VGT0UsCisJW0REUF9DT01QT05FTlRfV0RNQTBdID0gTVVU RVhfTU9EX0RJU1BfV0RNQTAsCisJW0REUF9DT01QT05FTlRfV0RNQTFdID0gTVVURVhfTU9EX0RJ U1BfV0RNQTEsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfbW91dF9lbihlbnVt IG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQs CisJCQkJICAgIHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisK KwlpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRf Q09MT1IwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VOOwor CQl2YWx1ZSA9IE9WTDBfTU9VVF9FTl9DT0xPUjA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NP TVBPTkVOVF9PRCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRNQTApIHsKKwkJKmFkZHIgPSBE SVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VUX0VOOworCQl2YWx1ZSA9IE9EX01PVVRfRU5fUkRN QTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9VRk9FICYmIG5leHQgPT0gRERQ X0NPTVBPTkVOVF9EU0kwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9N T1VUX0VOOworCQl2YWx1ZSA9IFVGT0VfTU9VVF9FTl9EU0kwOworCX0gZWxzZSBpZiAoY3VyID09 IEREUF9DT01QT05FTlRfT1ZMMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7CisJ CSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOOworCQl2YWx1ZSA9IE9W TDFfTU9VVF9FTl9DT0xPUjE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9HQU1N QSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRNQTEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19D T05GSUdfRElTUF9HQU1NQV9NT1VUX0VOOworCQl2YWx1ZSA9IEdBTU1BX01PVVRfRU5fUkRNQTE7 CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IEREUF9D T01QT05FTlRfRFBJMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01P VVRfRU47CisJCXZhbHVlID0gUkRNQTFfTU9VVF9EUEkwOworCX0gZWxzZSB7CisJCXZhbHVlID0g MDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2Rk cF9zZWxfaW4oZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9j b21wX2lkIG5leHQsCisJCQkJICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGlu dCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQ X0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xP UjBfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMF9TRUxfSU5fT1ZMMDsKKwl9IGVsc2UgaWYgKGN1 ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7 CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU47CisJCXZhbHVlID0gRFBJMF9T RUxfSU5fUkRNQTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5l eHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdf RElTUF9DT0xPUjFfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMV9TRUxfSU5fT1ZMMTsKKwl9IGVs c2UgeworCQl2YWx1ZSA9IDA7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIG10a19k ZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAg ZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg bmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRr X2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSBy ZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKKwkJd3JpdGVsX3JlbGF4 ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOworCX0KKworCXZhbHVlID0gbXRrX2RkcF9zZWxf aW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4 ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNv bmZpZ19yZWdzICsgYWRkcik7CisJfQorfQorCit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJv bV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2Nv bXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5zaWdu ZWQgaW50IGFkZHIsIHZhbHVlLCByZWc7CisKKwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIs IG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25m aWdfcmVncyArIGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19y ZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZh ZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyAr IGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRk cik7CisJfQorfQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChz dHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAq ZGRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaWQgPj0gMTApCisJCXJldHVybiBF UlJfUFRSKC1FSU5WQUwpOworCWlmIChkZHAtPm11dGV4W2lkXS5jbGFpbWVkKQorCQlyZXR1cm4g RVJSX1BUUigtRUJVU1kpOworCisJZGRwLT5tdXRleFtpZF0uY2xhaW1lZCA9IHRydWU7CisKKwly ZXR1cm4gJmRkcC0+bXV0ZXhbaWRdOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1 Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250 YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRd KTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwltdXRl eC0+Y2xhaW1lZCA9IGZhbHNlOworfQorCitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1 Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250 YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRd KTsKKwlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBtdGtf ZGlzcF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKK3sKKwlz dHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwK KwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRkcC0+ Y2xrKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9hZGRfY29tcChzdHJ1Y3QgbXRrX2Rpc3Bf bXV0ZXggKm11dGV4LAorCQkJICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1 Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJ CQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04o JmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2Fz ZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9EU0kwOworCQlicmVhazsK KwljYXNlIEREUF9DT01QT05FTlRfRFNJMToKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJy ZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFBJMDsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAtPnJlZ3MgKyBE SVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJlZyB8PSBtdXRleF9tb2RbaWRdOwor CQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRl eC0+aWQpKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdz ICsgRElTUF9SRUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworfQorCit2b2lkIG10a19kaXNwX211 dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51bSBt dGtfZGRwX2NvbXBfaWQgaWQpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9v ZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXVu c2lnbmVkIGludCByZWc7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0 ZXgpOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kwOgorCWNhc2Ug RERQX0NPTVBPTkVOVF9EU0kxOgorCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQl3cml0ZWxf cmVsYXhlZChNVVRFWF9TT0ZfU0lOR0xFX01PREUsCisJCQkgICAgICAgZGRwLT5yZWdzICsgRElT UF9SRUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcg PSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQp KTsKKwkJcmVnICY9IH5tdXRleF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+ cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJYnJlYWs7CisJfQorfQor Cit2b2lkIG10a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4 KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBt dGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0 ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwoMSwgZGRwLT5yZWdzICsgRElTUF9S RUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZGlzYWJs ZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAg PSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRl eC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisK Kwl3cml0ZWwoMCwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cit9 CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kZHAg KmRkcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGk7CisKKwlkZHAgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKmRkcCksIEdGUF9LRVJORUwpOworCWlmICghZGRwKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQlkZHAtPm11dGV4W2ld LmlkID0gaTsKKworCWRkcC0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElT X0VSUihkZHAtPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrXG4i KTsKKwkJcmV0dXJuIFBUUl9FUlIoZGRwLT5jbGspOworCX0KKworCXJlZ3MgPSBwbGF0Zm9ybV9n ZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRkcC0+cmVncyA9IGRldm1f aW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19FUlIoZGRwLT5yZWdzKSkgewor CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBtYXAgbXV0ZXggcmVnaXN0ZXJzXG4iKTsKKwkJcmV0 dXJuIFBUUl9FUlIoZGRwLT5yZWdzKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBkZHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZGRwX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNv bXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtbXV0ZXgiIH0sCisJe30sCit9OworTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgZGRwX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kZHBfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGRw X3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2RkcF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5u YW1lCT0gIm1lZGlhdGVrLWRkcCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0 Y2hfdGFibGUgPSBkZHBfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZv cm1fZHJpdmVyKG10a19kZHBfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2RkcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZGRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjMTE3NQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCkBAIC0w LDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZu ZGVmIE1US19EUk1fRERQX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBfSAorCisjaW5jbHVkZSAibXRr X2RybV9kZHBfY29tcC5oIgorCitzdHJ1Y3QgcmVnbWFwOworc3RydWN0IGRldmljZTsKK3N0cnVj dCBtdGtfZGlzcF9tdXRleDsKKwordm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgodm9pZCBf X2lvbWVtICpjb25maWdfcmVncywKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwK KwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOwordm9pZCBtdGtfZGRwX3JlbW92 ZV9jb21wX2Zyb21fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJCSAgIGVudW0g bXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KTsK Kworc3RydWN0IG10a19kaXNwX211dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRldmlj ZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpOworaW50IG10a19kaXNwX211dGV4X3ByZXBhcmUoc3Ry dWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21w KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21w X2lkIGlkKTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRl eCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9t dXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChzdHJ1Y3QgbXRr X2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3ZvaWQg bXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwor dm9pZCBtdGtfZGlzcF9tdXRleF9wdXQoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7CisK KyNlbmRpZiAvKiBNVEtfRFJNX0REUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZGRwX2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTcw ZmNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZGRwX2NvbXAuYwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBN ZWRpYVRlayBJbmMuCisgKiBBdXRob3JzOgorICoJWVQgU2hlbiA8eXQuc2hlbkBtZWRpYXRlay5j b20+CisgKglDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+ CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cisj aW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4K KyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgor I2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX09EX0VOCQkJCTB4 MDAwMAorI2RlZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAorI2RlZmluZSBESVNQX09EX0lO VFNUQQkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCisjZGVmaW5lIERJ U1BfT0RfU0laRQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJCQkweDAw MDAKKworI2RlZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgwNDAwCisjZGVmaW5lIERJU1Bf Q09MT1JfU1RBUlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4MGM1MAor I2RlZmluZSBESVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisjZGVmaW5lCU9EX1JFTEFZX01P REUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgyKQorCisjZGVmaW5lCUNPTE9S X0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykKKworc3Rh dGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNp Z25lZCBpbnQgdywKKwkJCSAgICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVz aCkKK3sKKwl3cml0ZWwodywgY29tcC0+cmVncyArIERJU1BfQ09MT1JfV0lEVEgpOworCXdyaXRl bChoLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9IRUlHSFQpOworfQorCitzdGF0aWMgdm9pZCBt dGtfY29sb3Jfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoQ09M T1JfQllQQVNTX0FMTCB8IENPTE9SX1NFUV9TRUwsCisJICAgICAgIGNvbXAtPnJlZ3MgKyBESVNQ X0NPTE9SX0NGR19NQUlOKTsKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9T VEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBp bnQgdnJlZnJlc2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsgRElTUF9P RF9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2Nv bXAgKmNvbXApCit7CisJd3JpdGVsKE9EX1JFTEFZX01PREUsIGNvbXAtPnJlZ3MgKyBESVNQX09E X0NGRyk7CisJd3JpdGVsKDEsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKK30KKworc3RhdGlj IHZvaWQgbXRrX3Vmb2Vfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0 ZWwoVUZPX0JZUEFTUywgY29tcC0+cmVncyArIERJU1BfUkVHX1VGT19TVEFSVCk7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvciA9IHsKKwkuY29u ZmlnID0gbXRrX2NvbG9yX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfY29sb3Jfc3RhcnQsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfb2QgPSB7CisJLmNv bmZpZyA9IG10a19vZF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAorfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7CisJLnN0YXJ0 ID0gbXRrX3Vmb2Vfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19k ZHBfY29tcF9zdGVtW01US19ERFBfQ09NUF9UWVBFX01BWF0gPSB7CisJW01US19ESVNQX09WTF0g PSAib3ZsIiwKKwlbTVRLX0RJU1BfUkRNQV0gPSAicmRtYSIsCisJW01US19ESVNQX1dETUFdID0g IndkbWEiLAorCVtNVEtfRElTUF9DT0xPUl0gPSAiY29sb3IiLAorCVtNVEtfRElTUF9BQUxdID0g ImFhbCIsCisJW01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIsCisJW01US19ESVNQX1VGT0VdID0g InVmb2UiLAorCVtNVEtfRFNJXSA9ICJkc2kiLAorCVtNVEtfRFBJXSA9ICJkcGkiLAorCVtNVEtf RElTUF9QV01dID0gInB3bSIsCisJW01US19ESVNQX01VVEVYXSA9ICJtdXRleCIsCisJW01US19E SVNQX09EXSA9ICJvZCIsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKKwllbnVt IG10a19kZHBfY29tcF90eXBlIHR5cGU7CisJaW50IGFsaWFzX2lkOworCWNvbnN0IHN0cnVjdCBt dGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtf ZGRwX2NvbXBfbWF0Y2ggbXRrX2RkcF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsK KwlbRERQX0NPTVBPTkVOVF9BQUxdCT0geyBNVEtfRElTUF9BQUwsCTAsIE5VTEwgfSwKKwlbRERQ X0NPTVBPTkVOVF9DT0xPUjBdCT0geyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9LAor CVtERFBfQ09NUE9ORU5UX0NPTE9SMV0JPSB7IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2NvbG9y IH0sCisJW0REUF9DT01QT05FTlRfRFBJMF0JPSB7IE1US19EUEksCQkwLCBOVUxMIH0sCisJW0RE UF9DT01QT05FTlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05F TlRfRFNJMV0JPSB7IE1US19EU0ksCQkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfR0FNTUFd CT0geyBNVEtfRElTUF9HQU1NQSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9IHsg TVRLX0RJU1BfT0QsCTAsICZkZHBfb2QgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsgTVRL X0RJU1BfT1ZMLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMV0JPSB7IE1US19ESVNQ X09WTCwJMSwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9QV00s CTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEsCTAs IE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0JPSB7IE1US19ESVNQX1JETUEsCTEsIE5V TEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0JPSB7IE1US19ESVNQX1JETUEsCTIsIE5VTEwg fSwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRkcF91Zm9l IH0sCisJW0REUF9DT01QT05FTlRfV0RNQTBdCT0geyBNVEtfRElTUF9XRE1BLAkwLCBOVUxMIH0s CisJW0REUF9DT01QT05FTlRfV0RNQTFdCT0geyBNVEtfRElTUF9XRE1BLAkxLCBOVUxMIH0sCit9 OworCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJ CQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBvZl9hbGlh c19nZXRfaWQobm9kZSwgbXRrX2RkcF9jb21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsKKwkJ aWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAgKGlkIDwg MCB8fCBpZCA9PSBtdGtfZGRwX21hdGNoZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJuIGk7CisJ fQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3RydWN0IG10 a19kZHBfY29tcCAqY29tcCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJICAgICAg Y29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3MpCit7CisJZW51bSBtdGtfZGRw X2NvbXBfdHlwZSB0eXBlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlOworCXN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKmxhcmJfcGRldjsKKworCWlmIChjb21wX2lkIDwgMCB8fCBjb21w X2lkID49IEREUF9DT01QT05FTlRfSURfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbXAt PmlkID0gY29tcF9pZDsKKwljb21wLT5mdW5jcyA9IGZ1bmNzID86IG10a19kZHBfbWF0Y2hlc1tj b21wX2lkXS5mdW5jczsKKworCWlmIChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJMCB8fAor CSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfRFNJMCB8fAorCSAgICBjb21wX2lkID09IERE UF9DT01QT05FTlRfUFdNMCkgeworCQljb21wLT5yZWdzID0gTlVMTDsKKwkJY29tcC0+Y2xrID0g TlVMTDsKKwkJY29tcC0+aXJxID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcC0+cmVncyA9 IG9mX2lvbWFwKG5vZGUsIDApOworCWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwgMCk7CisJ Y29tcC0+Y2xrID0gb2ZfY2xrX2dldChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNvbXAtPmNsaykp CisJCWNvbXAtPmNsayA9IE5VTEw7CisKKwl0eXBlID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBfaWRd LnR5cGU7CisKKwkvKiBPbmx5IERNQSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUgTEFSQiBw cm9wZXJ0eSAqLworCWNvbXAtPmxhcmJfZGV2ID0gTlVMTDsKKwlpZiAodHlwZSAhPSBNVEtfRElT UF9PVkwgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9SRE1BICYmCisJICAgIHR5cGUgIT0gTVRL X0RJU1BfV0RNQSkKKwkJcmV0dXJuIDA7CisKKwlsYXJiX25vZGUgPSBvZl9wYXJzZV9waGFuZGxl KG5vZGUsICJtZWRpYXRlayxsYXJiIiwgMCk7CisJaWYgKCFsYXJiX25vZGUpIHsKKwkJZGV2X2Vy cihkZXYsCisJCQkiTWlzc2luZyBtZWRpYWRlayxsYXJiIHBoYW5kbGUgaW4gJXMgbm9kZVxuIiwK KwkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxhcmJfcGRl diA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobGFyYl9ub2RlKTsKKwlpZiAoIWxhcmJfcGRldikg eworCQlkZXZfd2FybihkZXYsICJXYWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwKKwkJCSBs YXJiX25vZGUtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisJCXJldHVy biAtRVBST0JFX0RFRkVSOworCX0KKwlvZl9ub2RlX3B1dChsYXJiX25vZGUpOworCisJY29tcC0+ bGFyYl9kZXYgPSAmbGFyYl9wZGV2LT5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19k ZHBfY29tcF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRl dl9wcml2YXRlOworCisJaWYgKHByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKKwkJcmV0dXJu IC1FQlVTWTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7CisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2 YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXByaXZhdGUtPmRkcF9jb21wW2Nv bXAtPmlkXSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kZHBfY29tcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw X2NvbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzYmE5Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAu aApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpZm5kZWYgTVRLX0RSTV9ERFBfQ09NUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0NPTVBf SAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZp Y2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IG10 a19wbGFuZV9zdGF0ZTsKKworZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB7CisJTVRLX0RJU1BfT1ZM LAorCU1US19ESVNQX1JETUEsCisJTVRLX0RJU1BfV0RNQSwKKwlNVEtfRElTUF9DT0xPUiwKKwlN VEtfRElTUF9BQUwsCisJTVRLX0RJU1BfR0FNTUEsCisJTVRLX0RJU1BfVUZPRSwKKwlNVEtfRFNJ LAorCU1US19EUEksCisJTVRLX0RJU1BfUFdNLAorCU1US19ESVNQX01VVEVYLAorCU1US19ESVNQ X09ELAorCU1US19ERFBfQ09NUF9UWVBFX01BWCwKK307CisKK2VudW0gbXRrX2RkcF9jb21wX2lk IHsKKwlERFBfQ09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMCwKKwlERFBfQ09N UE9ORU5UX0NPTE9SMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCisJRERQX0NPTVBPTkVOVF9EU0kw LAorCUREUF9DT01QT05FTlRfRFNJMSwKKwlERFBfQ09NUE9ORU5UX0dBTU1BLAorCUREUF9DT01Q T05FTlRfT0QsCisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9DT01QT05FTlRfT1ZMMSwKKwlE RFBfQ09NUE9ORU5UX1BXTTAsCisJRERQX0NPTVBPTkVOVF9QV00xLAorCUREUF9DT01QT05FTlRf UkRNQTAsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX1JETUEyLAorCURE UF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX1dETUEwLAorCUREUF9DT01QT05FTlRf V0RNQTEsCisJRERQX0NPTVBPTkVOVF9JRF9NQVgsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21w OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKKwl2b2lkICgqY29uZmlnKShzdHJ1Y3Qg bXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJICAgICAgIHVuc2lnbmVkIGlu dCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IG10a19k ZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKnN0b3ApKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp OworCXZvaWQgKCplbmFibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpOworCXZvaWQgKCpkaXNhYmxlX3ZibGFuaykoc3RydWN0IG10a19k ZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKmxheWVyX29uKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfb2ZmKShzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfY29uZmlnKShz dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJICAgICBzdHJ1 Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wIHsK KwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWludCBpcnE7CisJc3Ry dWN0IGRldmljZSAqbGFyYl9kZXY7CisJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQ7CisJY29uc3Qg c3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZv aWQgbXRrX2RkcF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCSAg ICAgICB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgsCisJCQkJICAgICAgIHVuc2lnbmVk IGludCB2cmVmcmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmNvbmZp ZykKKwkJY29tcC0+ZnVuY3MtPmNvbmZpZyhjb21wLCB3LCBoLCB2cmVmcmVzaCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAq Y29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPnN0YXJ0KQorCQljb21w LT5mdW5jcy0+c3RhcnQoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2Nv bXBfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAm JiBjb21wLT5mdW5jcy0+c3RvcCkKKwkJY29tcC0+ZnVuY3MtPnN0b3AoY29tcCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLAorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaWYg KGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5lbmFibGVfdmJsYW5rKQorCQljb21wLT5mdW5j cy0+ZW5hYmxlX3ZibGFuayhjb21wLCBjcnRjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10 a19kZHBfY29tcF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQorewor CWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCisJCWNvbXAt PmZ1bmNzLT5kaXNhYmxlX3ZibGFuayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10 a19kZHBfY29tcF9sYXllcl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgdW5z aWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVy X29uKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29t cCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21w LT5mdW5jcy0+bGF5ZXJfb2ZmKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKGNvbXAsIGlkeCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0cnVj dCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkJ ICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoY29tcC0+ZnVuY3Mg JiYgY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZp Zyhjb21wLCBpZHgsIHN0YXRlKTsKK30KKworaW50IG10a19kZHBfY29tcF9nZXRfaWQoc3RydWN0 IGRldmljZV9ub2RlICpub2RlLAorCQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUp OworaW50IG10a19kZHBfY29tcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZV9ub2RlICpjb21wX25vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIGVu dW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtfZGRw X2NvbXBfZnVuY3MgKmZ1bmNzKTsKK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19kZHBf Y29tcF91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2Nv bXAgKmNvbXApOworCisjZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmQyNjhlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuYwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx NSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29t PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19o ZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBv bmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRk cmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgv cG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRr X2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRr X2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9n ZW0uaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAibWVkaWF0ZWsiCisjZGVmaW5lIERSSVZFUl9E RVNDICJNZWRpYXRlayBTb0MgRFJNIgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxNTA1MTMiCisj ZGVmaW5lIERSSVZFUl9NQUpPUiAxCisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisKK3N0YXRpYyB2 b2lkIG10a19hdG9taWNfc2NoZWR1bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwK KwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJcHJpdmF0ZS0+Y29tbWl0 LnN0YXRlID0gc3RhdGU7CisJc2NoZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0LndvcmspOwor fQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wbGFu ZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBpKQorCQltdGtfZmJfd2FpdChw bGFuZS0+c3RhdGUtPmZiKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19jb21wbGV0ZShz dHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOwor CisJbXRrX2F0b21pY193YWl0X2Zvcl9mZW5jZXMoc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X3BsYW5lcyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxwZXJf Y29tbWl0X21vZGVzZXRfZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl93 YWl0X2Zvcl92YmxhbmtzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBf cGxhbmVzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisK K3N0YXRpYyB2b2lkIG10a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7 CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAor CQkJc3RydWN0IG10a19kcm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21pY19j b21wbGV0ZShwcml2YXRlLCBwcml2YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMgaW50 IG10a19hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1 Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0 OworCisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1p dC5sb2NrKTsKKwlmbHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1fYXRv bWljX2hlbHBlcl9zd2FwX3N0YXRlKGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQltdGtf YXRvbWljX3NjaGVkdWxlKHByaXZhdGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNfY29t cGxldGUocHJpdmF0ZSwgc3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21taXQu bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9j b25maWdfZnVuY3MgbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0g bXRrX2RybV9tb2RlX2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxw ZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisKK3N0 YXRpYyBjb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlERFBf Q09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9B QUwsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9DT01Q T05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00wLAor fTsKKworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7 CisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01Q T05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAs Cit9OworCitzdGF0aWMgaW50IG10a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRy bSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0 ZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXQ7CisKKwlpZiAoIWlv bW11X3ByZXNlbnQoJnBsYXRmb3JtX2J1c190eXBlKSkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7 CisKKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9ub2RlKTsK KwlpZiAoIXBkZXYpIHsKKwkJZGV2X2Vycihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3AtbXV0 ZXggZGV2aWNlICVzXG4iLAorCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJ b2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVS OworCX0KKwlwcml2YXRlLT5tdXRleF9kZXYgPSAmcGRldi0+ZGV2OworCisJZHJtX21vZGVfY29u ZmlnX2luaXQoZHJtKTsKKworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQ7CisJZHJt LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gNjQ7CisKKwkvKgorCSAqIHNldCBtYXggd2lkdGgg YW5kIGhlaWdodCBhcyBkZWZhdWx0IHZhbHVlKDQwOTZ4NDA5NikuCisJICogdGhpcyB2YWx1ZSB3 b3VsZCBiZSB1c2VkIHRvIGNoZWNrIGZyYW1lYnVmZmVyIHNpemUgbGltaXRhdGlvbgorCSAqIGF0 IGRybV9tb2RlX2FkZGZiKCkuCisJICovCisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSA0 MDk2OworCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDQwOTY7CisJZHJtLT5tb2RlX2Nv bmZpZy5mdW5jcyA9ICZtdGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzOworCisJcmV0ID0gY29tcG9u ZW50X2JpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZp Z19jbGVhbnVwOworCisJLyoKKwkgKiBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gZml4ZWQgZGF0 YSBzdHJlYW1zLCBlYWNoIHN0YXRpY2FsbHkKKwkgKiBhc3NpZ25lZCB0byBhIGNydGM6CisJICog T1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4K KwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9tYWluLCBBUlJB WV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25l bnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4gUkRNQTEg LT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9leHQs IEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY29t cG9uZW50X3VuYmluZDsKKworCS8qCisJICogV2UgZG9uJ3QgdXNlIHRoZSBkcm1faXJxX2luc3Rh bGwoKSBoZWxwZXJzIHByb3ZpZGVkIGJ5IHRoZSBEUk0KKwkgKiBjb3JlLCBzbyB3ZSBuZWVkIHRv IHNldCB0aGlzIG1hbnVhbGx5IGluIG9yZGVyIHRvIGFsbG93IHRoZQorCSAqIERSTV9JT0NUTF9X QUlUX1ZCTEFOSyB0byBvcGVyYXRlIGNvcnJlY3RseS4KKwkgKi8KKwlkcm0tPmlycV9lbmFibGVk ID0gdHJ1ZTsKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBNQVhfQ1JUQyk7CisJaWYgKHJl dCA8IDApCisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisKKwlkcm1fa21zX2hlbHBlcl9w b2xsX2luaXQoZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKKworCXJldHVybiAw OworCitlcnJfY29tcG9uZW50X3VuYmluZDoKKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRl diwgZHJtKTsKK2Vycl9jb25maWdfY2xlYW51cDoKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChk cm0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9rbXNfZGVpbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRy bSk7CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKKwljb21wb25lbnRfdW5iaW5kX2FsbChk cm0tPmRldiwgZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworfQorCitzdGF0 aWMgaW50IG10a19kcm1fdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJbXRrX2Ry bV9rbXNfZGVpbml0KGRybSk7CisJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtdGtfZHJt X2dlbV92bV9vcHMgPSB7CisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJt X2dlbV92bV9jbG9zZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IG10a19kcm1fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRybV9v cGVuLAorCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lv Y3RsLAorCS5tbWFwID0gbXRrX2RybV9nZW1fbW1hcCwKKwkucG9sbCA9IGRybV9wb2xsLAorCS5y ZWFkID0gZHJtX3JlYWQsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSBk cm1fY29tcGF0X2lvY3RsLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIg bXRrX2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwg RFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSB8CisJCQkgICBEUklWRVJfQVRPTUlDLAorCS51bmxv YWQgPSBtdGtfZHJtX3VubG9hZCwKKworCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5r X2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2VuYWJsZV92YmxhbmssCisJ LmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rLAorCisJLmdlbV9m cmVlX29iamVjdCA9IG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0gJm10 a19kcm1fZ2VtX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUgPSBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0 ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gbXRrX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0LAorCS5k dW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKKworCS5wcmltZV9oYW5kbGVfdG9f ZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxlID0g ZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1fZ2Vt X3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0 LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUs CisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBtdGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190 YWJsZSwKKwkuZ2VtX3ByaW1lX21tYXAgPSBtdGtfZHJtX2dlbV9tbWFwX2J1ZiwKKwkuZm9wcyA9 ICZtdGtfZHJtX2ZvcHMsCisKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5kZXNjID0gRFJJVkVS X0RFU0MsCisJLmRhdGUgPSBEUklWRVJfREFURSwKKwkubWFqb3IgPSBEUklWRVJfTUFKT1IsCisJ Lm1pbm9yID0gRFJJVkVSX01JTk9SLAorfTsKKworc3RhdGljIGludCBjb21wYXJlX29mKHN0cnVj dCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IGRh dGE7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlpbnQgcmV0OworCisJZHJtID0gZHJtX2Rldl9h bGxvYygmbXRrX2RybV9kcml2ZXIsIGRldik7CisJaWYgKCFkcm0pCisJCXJldHVybiAtRU5PTUVN OworCisJZHJtX2Rldl9zZXRfdW5pcXVlKGRybSwgZGV2X25hbWUoZGV2KSk7CisKKwlyZXQgPSBk cm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZyZWU7 CisKKwlkcm0tPmRldl9wcml2YXRlID0gcHJpdmF0ZTsKKwlwcml2YXRlLT5kcm0gPSBkcm07CisK KwlyZXQgPSBtdGtfZHJtX2ttc19pbml0KGRybSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJy X3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0ZXI6CisJZHJtX2Rldl91 bnJlZ2lzdGVyKGRybSk7CitlcnJfZnJlZToKKwlkcm1fZGV2X3VucmVmKGRybSk7CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2 KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKKworCWRybV9wdXRfZGV2KHByaXZhdGUtPmRybSk7CisJcHJpdmF0ZS0+ZHJtID0gTlVM TDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyBtdGtfZHJt X29wcyA9IHsKKwkuYmluZAkJPSBtdGtfZHJtX2JpbmQsCisJLnVuYmluZAkJPSBtdGtfZHJtX3Vu YmluZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kZHBfY29t cF9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW92 bCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09WTCB9LAorCXsgLmNvbXBhdGlibGUgPSAi bWVkaWF0ZWssbXQ4MTczLWRpc3AtcmRtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUkRN QSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atd2RtYSIsICAuZGF0 YSA9ICh2b2lkICopTVRLX0RJU1BfV0RNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWss bXQ4MTczLWRpc3AtY29sb3IiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfQ09MT1IgfSwKKwl7 IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWFhbCIsICAgLmRhdGEgPSAodm9p ZCAqKU1US19ESVNQX0FBTH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlz cC1nYW1tYSIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9HQU1NQSwgfSwKKwl7IC5jb21wYXRp YmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXVmb2UiLCAgLmRhdGEgPSAodm9pZCAqKU1US19E SVNQX1VGT0UgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kc2kiLCAgICAg ICAgLmRhdGEgPSAodm9pZCAqKU1US19EU0kgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr LG10ODE3My1kcGkiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EUEkgfSwKKwl7IC5jb21w YXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW11dGV4IiwgLmRhdGEgPSAodm9pZCAqKU1U S19ESVNQX01VVEVYIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1w d20iLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9QV00gfSwKKwl7IC5jb21wYXRpYmxlID0g Im1lZGlhdGVrLG10ODE3My1kaXNwLW9kIiwgICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09E IH0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IG10a19kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0 cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IHJlc291cmNlICptZW07CisJ c3RydWN0IGRldmljZV9ub2RlICpub2RlOworCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNo ID0gTlVMTDsKKwlpbnQgcmV0OworCWludCBpOworCisJcHJpdmF0ZSA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdmF0ZSkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZwcml2YXRlLT5jb21taXQubG9jayk7CisJSU5J VF9XT1JLKCZwcml2YXRlLT5jb21taXQud29yaywgbXRrX2F0b21pY193b3JrKTsKKworCW1lbSA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcHJpdmF0 ZS0+Y29uZmlnX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJ U19FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIocHJpdmF0ZS0+ Y29uZmlnX3JlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1tc3lzLWNv bmZpZyByZXNvdXJjZTogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8q IEl0ZXJhdGUgb3ZlciBzaWJsaW5nIERJU1AgZnVuY3Rpb24gYmxvY2tzICovCisJZm9yX2VhY2hf Y2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVudCwgbm9kZSkgeworCQljb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5 cGU7CisJCWludCBjb21wX2lkOworCisJCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShtdGtfZGRwX2Nv bXBfZHRfaWRzLCBub2RlKTsKKwkJaWYgKCFvZl9pZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgh b2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkgeworCQkJZGV2X2RiZyhkZXYsICJTa2lwcGlu ZyBkaXNhYmxlZCBjb21wb25lbnQgJXNcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJY29tcF90eXBlID0gKGVudW0gbXRrX2RkcF9jb21wX3R5cGUpb2Zf aWQtPmRhdGE7CisKKwkJaWYgKGNvbXBfdHlwZSA9PSBNVEtfRElTUF9NVVRFWCkgeworCQkJcHJp dmF0ZS0+bXV0ZXhfbm9kZSA9IG9mX25vZGVfZ2V0KG5vZGUpOworCQkJY29udGludWU7CisJCX0K KworCQljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChub2RlLCBjb21wX3R5cGUpOworCQlp ZiAoY29tcF9pZCA8IDApIHsKKwkJCWRldl93YXJuKGRldiwgIlNraXBwaW5nIHVua25vd24gY29t cG9uZW50ICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJY29udGludWU7CisJCX0K KworCQlwcml2YXRlLT5jb21wX25vZGVbY29tcF9pZF0gPSBvZl9ub2RlX2dldChub2RlKTsKKwor CQkvKgorCQkgKiBDdXJyZW50bHkgb25seSB0aGUgT1ZMLCBSRE1BLCBEU0ksIGFuZCBEUEkgYmxv Y2tzIGhhdmUKKwkJICogc2VwYXJhdGUgY29tcG9uZW50IHBsYXRmb3JtIGRyaXZlcnMgYW5kIGlu aXRpYWxpemUgdGhlaXIgb3duCisJCSAqIEREUCBjb21wb25lbnQgc3RydWN0dXJlLiBUaGUgb3Ro ZXJzIGFyZSBpbml0aWFsaXplZCBoZXJlLgorCQkgKi8KKwkJaWYgKGNvbXBfdHlwZSA9PSBNVEtf RElTUF9PVkwgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRElTUF9SRE1BIHx8CisJCSAgICBj b21wX3R5cGUgPT0gTVRLX0RTSSB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EUEkpIHsKKwkJ CWRldl9pbmZvKGRldiwgIkFkZGluZyBjb21wb25lbnQgbWF0Y2ggZm9yICVzXG4iLAorCQkJCSBu b2RlLT5mdWxsX25hbWUpOworCQkJY29tcG9uZW50X21hdGNoX2FkZChkZXYsICZtYXRjaCwgY29t cGFyZV9vZiwgbm9kZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w OworCisJCQljb21wID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjb21wKSwgR0ZQX0tFUk5F TCk7CisJCQlpZiAoIWNvbXApIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyX25v ZGU7CisJCQl9CisKKwkJCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRldiwgbm9kZSwgY29tcCwg Y29tcF9pZCwgTlVMTCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX25vZGU7CisKKwkJCXBy aXZhdGUtPmRkcF9jb21wW2NvbXBfaWRdID0gY29tcDsKKwkJfQorCX0KKworCWlmICghcHJpdmF0 ZS0+bXV0ZXhfbm9kZSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGRpc3AtbXV0 ZXggbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX25vZGU7CisJfQorCisJ cG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBy aXZhdGUpOworCisJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsICZt dGtfZHJtX29wcywgbWF0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BtOworCisJcmV0dXJu IDA7CisKK2Vycl9wbToKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKK2Vycl9ub2RlOgorCW9m X25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCWZvciAoaSA9IDA7IGkgPCBERFBfQ09N UE9ORU5UX0lEX01BWDsgaSsrKQorCQlvZl9ub2RlX3B1dChwcml2YXRlLT5jb21wX25vZGVbaV0p OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9yZW1vdmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwljb21wb25lbnRfbWFz dGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RybV9vcHMpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgm cGRldi0+ZGV2KTsKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkg PSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0 ZS0+Y29tcF9ub2RlW2ldKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NM RUVQCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQor eworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKGRybSk7CisK Kwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwg JmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50IG9sZF9kcG1z ID0gY29ubi0+ZHBtczsKKworCQlpZiAoY29ubi0+ZnVuY3MtPmRwbXMpCisJCQljb25uLT5mdW5j cy0+ZHBtcyhjb25uLCBEUk1fTU9ERV9EUE1TX09GRik7CisKKwkJLyogU2V0IHRoZSBvbGQgbW9k ZSBiYWNrIHRvIHRoZSBjb25uZWN0b3IgZm9yIHJlc3VtZSAqLworCQljb25uLT5kcG1zID0gb2xk X2RwbXM7CisJfQorCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZHJtKTsKKworCURSTV9ERUJVR19E UklWRVIoIm10a19kcm1fc3lzX3N1c3BlbmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG10a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10 a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm47CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOworCWxpc3RfZm9yX2VhY2hfZW50cnko Y29ubiwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50IGRl c2lyZWRfbW9kZSA9IGNvbm4tPmRwbXM7CisKKwkJLyoKKwkJICogYXQgc3VzcGVuZCB0aW1lLCB3 ZSBzYXZlIGRwbXMgdG8gY29ubmVjdG9yLT5kcG1zLAorCQkgKiByZXN0b3JlIHRoZSBvbGRfZHBt cywgYW5kIGF0IGN1cnJlbnQgdGltZSwgdGhlIGNvbm5lY3RvcgorCQkgKiBkcG1zIHN0YXR1cyBt dXN0IGJlIERSTV9NT0RFX0RQTVNfT0ZGLgorCQkgKi8KKwkJY29ubi0+ZHBtcyA9IERSTV9NT0RF X0RQTVNfT0ZGOworCisJCS8qCisJCSAqIElmIHRoZSBjb25uZWN0b3IgaGFzIGJlZW4gZGlzY29u bmVjdGVkIGR1cmluZyBzdXNwZW5kLAorCQkgKiBkaXNjb25uZWN0IGl0IGZyb20gdGhlIGVuY29k ZXIgYW5kIGxlYXZlIGl0IG9mZi4gV2UnbGwgbm90aWZ5CisJCSAqIHVzZXJzcGFjZSBhdCB0aGUg ZW5kLgorCQkgKi8KKwkJaWYgKGNvbm4tPmZ1bmNzLT5kcG1zKQorCQkJY29ubi0+ZnVuY3MtPmRw bXMoY29ubiwgZGVzaXJlZF9tb2RlKTsKKwl9CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkcm0p OworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZHJtKTsKKworCURSTV9ERUJVR19EUklW RVIoIm10a19kcm1fc3lzX3Jlc3VtZVxuIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3Rh dGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19kcm1fcG1fb3BzLCBtdGtfZHJtX3N5c19zdXNwZW5k LAorCQkJIG10a19kcm1fc3lzX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIG10a19kcm1fb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxt dDgxNzMtbW1zeXMiLCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCT0gbXRrX2RybV9wcm9iZSwK KwkucmVtb3ZlCT0gbXRrX2RybV9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAibWVk aWF0ZWstZHJtIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2RybV9vZl9pZHMsCisJCS5wbSAg ICAgPSAmbXRrX2RybV9wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyICogY29uc3QgbXRrX2RybV9kcml2ZXJzW10gPSB7CisJJm10a19kcm1fcGxhdGZvcm1f ZHJpdmVyLAorCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAorCSZtdGtfZGlzcF9yZG1hX2RyaXZlciwK K307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQoreworCWludCByZXQ7 CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJtX2RyaXZlcnMp OyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10a19kcm1fZHJpdmVy c1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciAl cyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10a19kcm1fZHJpdmVyc1tpXS0+ZHJpdmVyLm5h bWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6CisJ d2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJtX2Ry aXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG10a19k cm1fZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0laRShtdGtfZHJt X2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVy KG10a19kcm1fZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19kcm1faW5pdCk7Citt b2R1bGVfZXhpdChtdGtfZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJZVCBTSEVOIDx5dC5z aGVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgU29DIERS TSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1 Y2IxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2Rydi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFU ZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqLworCisjaWZuZGVmIE1US19EUk1fRFJWX0gKKyNkZWZpbmUgTVRLX0RSTV9EUlZfSAorCisj aW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNk ZWZpbmUgTUFYX0NSVEMJMgorI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKKworc3RydWN0IGRldmlj ZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2 aWNlOworc3RydWN0IGRybV9mYl9oZWxwZXI7CitzdHJ1Y3QgZHJtX3Byb3BlcnR5Oworc3RydWN0 IHJlZ21hcDsKKworc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybTsKKworCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y1tNQVhfQ1JUQ107CisJdW5zaWduZWQgaW50 IG51bV9waXBlczsKKworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbXV0ZXhfbm9kZTsKKwlzdHJ1Y3Qg ZGV2aWNlICptdXRleF9kZXY7CisJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmNvbXBfbm9kZVtERFBfQ09NUE9ORU5UX0lEX01BWF07CisJc3RydWN0IG10 a19kZHBfY29tcCAqZGRwX2NvbXBbRERQX0NPTVBPTkVOVF9JRF9NQVhdOworCisJc3RydWN0IHsK KwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qg d29yazsKKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBjb21taXQ7Cit9OworCitleHRlcm4gc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtfRFJN X0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9m Yi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgor I2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1 Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRlICJtdGtfZHJt X2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5o IgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBA ZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2VtIG9i amVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy CWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8KKwlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19mYih4 KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBkcm1f Z2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi KQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJcmV0 dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0ZV9o YW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qg bXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2VtX2hh bmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisKK3N0 YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikK K3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRybV9m cmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3Vu bG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0gewor CS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95ID0g bXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICptdGtf ZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJY29uc3Qg c3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50IHJldDsKKworCWlm IChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtfZmIp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7 CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+YmFzZSwgbW9kZSk7 CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5p dChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJ CURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJcbiIpOworCQlrZnJl ZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtfZmI7 Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGluIGZiJ3MgZ2VtIG9i amVjdCdzIHJlc2VydmF0aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1FUkVTVEFSVFNZUyBp ZiBpbnRlcnJ1cHRlZCwgZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3RydWN0 IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlmICghZmIpCisJCXJl dHVybiAwOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlpZiAoIWdlbSB8fCAh Z2VtLT5kbWFfYnVmIHx8ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVybiAwOworCisJcmVz diA9IGdlbS0+ZG1hX2J1Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2FpdF90 aW1lb3V0X3JjdShyZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJTUVP VVQpOworCS8qIE1BWF9TQ0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1FUkVTVEFSVFNZUyBp ZiBpbnRlcnJ1cHRlZCAqLworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQlyZXR1cm4gcmV0Owor CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9kZV9m Yl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpj bWQpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVkIGlu dCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWludCBy ZXQ7CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAhPSAx KQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xv b2t1cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVybiBF UlJfUFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5waXhl bF9mb3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3 aWR0aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNpemUg PCBzaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJ bXRrX2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlmIChJ U19FUlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5yZWZl cmVuY2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgorCWRy bV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9QVFIo cmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Zi LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAorI2Rl ZmluZSBNVEtfRFJNX0ZCX0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0X2dl bV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19mYl93YWl0KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1f bW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9j bWQyICpjbWQpOworCisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZi YzQ5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9nZW0uYwpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRp YVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+ CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIK Kworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qg bXRrX2RybV9nZW1fb2JqICptdGtfZ2VtX29iajsKKwlpbnQgcmV0OworCisJc2l6ZSA9IHJvdW5k X3VwKHNpemUsIFBBR0VfU0laRSk7CisKKwltdGtfZ2VtX29iaiA9IGt6YWxsb2Moc2l6ZW9mKCpt dGtfZ2VtX29iaiksIEdGUF9LRVJORUwpOworCWlmICghbXRrX2dlbV9vYmopCisJCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsICZtdGtf Z2VtX29iai0+YmFzZSwgc2l6ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gaW5pdGlhbGl6ZSBnZW0gb2JqZWN0XG4iKTsKKwkJa2ZyZWUobXRrX2dlbV9vYmopOwor CQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtfZ2VtX29iajsKK30KKwor c3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCisJCQkJCSAgIHNpemVfdCBzaXplLCBib29sIGFsbG9jX2ttYXApCit7CisJc3Ry dWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i ajsKKwlpbnQgcmV0OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2luaXQoZGV2LCBzaXplKTsK KwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4gRVJSX0NBU1QobXRrX2dlbSk7CisKKwlv YmogPSAmbXRrX2dlbS0+YmFzZTsKKworCWluaXRfZG1hX2F0dHJzKCZtdGtfZ2VtLT5kbWFfYXR0 cnMpOworCWRtYV9zZXRfYXR0cihETUFfQVRUUl9XUklURV9DT01CSU5FLCAmbXRrX2dlbS0+ZG1h X2F0dHJzKTsKKworCWlmICghYWxsb2Nfa21hcCkKKwkJZG1hX3NldF9hdHRyKERNQV9BVFRSX05P X0tFUk5FTF9NQVBQSU5HLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKworCW10a19nZW0tPmNvb2tp ZSA9IGRtYV9hbGxvY19hdHRycyhkZXYtPmRldiwgb2JqLT5zaXplLAorCQkJCQkgICZtdGtfZ2Vt LT5kbWFfYWRkciwgR0ZQX0tFUk5FTCwKKwkJCQkJICAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKwlp ZiAoIW10a19nZW0tPmNvb2tpZSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSAl enggYnl0ZSBkbWEgYnVmZmVyIiwgb2JqLT5zaXplKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290 byBlcnJfZ2VtX2ZyZWU7CisJfQorCisJaWYgKGFsbG9jX2ttYXApCisJCW10a19nZW0tPmt2YWRk ciA9IG10a19nZW0tPmNvb2tpZTsKKworCURSTV9ERUJVR19EUklWRVIoImNvb2tpZSA9ICVwIGRt YV9hZGRyID0gJXBhZCBzaXplID0gJXp1XG4iLAorCQkJIG10a19nZW0tPmNvb2tpZSwgJm10a19n ZW0tPmRtYV9hZGRyLAorCQkJIHNpemUpOworCisJcmV0dXJuIG10a19nZW07CisKK2Vycl9nZW1f ZnJlZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJa2ZyZWUobXRrX2dlbSk7CisJ cmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVjdChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICpt dGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKworCWlmIChtdGtfZ2VtLT5zZykKKwkJZHJt X3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dlbS0+c2cpOworCWVsc2UKKwkJZG1hX2ZyZWVf YXR0cnMob2JqLT5kZXYtPmRldiwgb2JqLT5zaXplLCBtdGtfZ2VtLT5jb29raWUsCisJCQkgICAg ICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJLyogcmVsZWFz ZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8KKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNl KG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKworaW50IG10a19kcm1fZ2VtX2R1bWJfY3Jl YXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRr X2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisKKwlhcmdzLT5waXRjaCA9IERJVl9S T1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+c2l6ZSA9IGFyZ3Mt PnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0ZShk ZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4g UFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICogYWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFibGUg d2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdo YXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxl X3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAt IGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5s b2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9oYW5kbGVfY3JlYXRl OgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0 OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwK KwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwor CWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYs IGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9va3VwIGdl bSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZHJtX2dlbV9j cmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCSpvZmZz ZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9iai0+dm1hX25vZGUpOworCURSTV9ERUJV R19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNldCk7CisKK291dDoKKwlkcm1fZ2VtX29i amVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos CisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCisKK3sKKwlpbnQgcmV0OworCXN0 cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOworCXN0 cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBvYmotPmRldjsKKworCS8qCisJICogZG1hX2FsbG9jX2F0 dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0IHBhZ2UgdGFibGUgZm9yIG10a19nZW0sIHNvIGNsZWFy CisJICogVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcF9vYmooKS9k cm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJdm1h LT52bV9wZ29mZiA9IDA7CisKKwlyZXQgPSBkbWFfbW1hcF9hdHRycyhkcm0tPmRldiwgdm1hLCBt dGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRyLAorCQkJICAgICBvYmotPnNpemUsICZt dGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsK KworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJl dDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChv YmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i ajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0 dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFsbG9j YXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhlIHRh YmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQgYnkK KyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkg YWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVjdCBz Z190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1f b2JqKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG9iai0+ZGV2OworCXN0cnVjdCBz Z190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3QgPSBremFsbG9jKHNpemVvZigqc2d0KSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ cmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKGRybS0+ZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tp ZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwKKwkJCQkgICAgJm10a19n ZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxv Y2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOworCQlyZXR1cm4gRVJSX1BUUihy ZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRr X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZykKK3sK KwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisJc3RydWN0IHNj YXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOworCWRtYV9hZGRyX3QgZXhwZWN0ZWQ7CisK KwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsK KworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIobXRrX2dl bSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwlmb3JfZWFjaF9z ZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJaWYgKHNnX2RtYV9hZGRyZXNzKHMpICE9 IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3RhYmxlIGlzIG5vdCBjb250aWd1b3VzIik7 CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfZ2VtX2ZyZWU7CisJCX0KKwkJZXhwZWN0 ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9sZW4ocyk7CisJfQorCisJbXRrX2dlbS0+ ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwltdGtfZ2VtLT5zZyA9IHNnOwor CisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJfZ2VtX2ZyZWU6CisJa2ZyZWUobXRrX2dl bSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyNzI1YQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCkBA IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj aWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBfTVRLX0RSTV9HRU1fSF8KKworI2luY2x1 ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsgZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUuCisg KgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0gYSBuZXcgaGFuZGxlIHRvIHRoaXMgZ2Vt IG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoKS4K KyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2FsbG9jX2F0dHJzKCksIGtlZXAg aXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFkZHI6IGtlcm5lbCB2aXJ0dWFsIGFkZHJl c3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjogZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZl ci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdlbSBidWZmZXIuCisgKgorICog UC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2ZlcnJlZCB0byB1c2VyIGFzIGttc19iby5o YW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVyIHRocm91Z2gga21zX2JvLmhh bmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29iaiB7CisJc3RydWN0IGRybV9nZW1fb2Jq ZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9pZAkJCSprdmFkZHI7CisJZG1hX2FkZHJf dAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlkbWFfYXR0cnM7CisJc3RydWN0IHNnX3Rh YmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19nZW1fb2JqKHgpCWNvbnRhaW5lcl9vZih4 LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQorCit2b2lkIG10a19kcm1fZ2VtX2ZyZWVf b2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKTsKK3N0cnVjdCBtdGtfZHJtX2dlbV9v YmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICB1 bnNpZ25lZCBsb25nIHNpemUsIGJvb2wgYWxsb2Nfa21hcCk7CitpbnQgbXRrX2RybV9nZW1fZHVt Yl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKK2ludCBtdGtf ZHJtX2dlbV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJ c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgaGFuZGxlLAorCQkJCXVpbnQ2NF90ICpv ZmZzZXQpOworaW50IG10a19kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwKKwkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitzdHJ1 Y3Qgc2dfdGFibGUgKm10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBvcnRf c2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYzg5ODc4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX3BsYW5lLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsu Y29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq LworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgor I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxh bmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtf ZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtf ZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKyNpbmNsdWRlICJtdGtfZHJtX3Bs YW5lLmgiCisKK3N0YXRpYyBjb25zdCB1MzIgZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfWFJH Qjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKK307CisK K3N0YXRpYyB2b2lkIG10a19wbGFuZV9lbmFibGUoc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19w bGFuZSwgYm9vbCBlbmFibGUsCisJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwgc3RydWN0IGRybV9y ZWN0ICpkZXN0KQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19wbGFuZS0+YmFz ZTsKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShw bGFuZS0+c3RhdGUpOworCXVuc2lnbmVkIGludCBwaXRjaCwgZm9ybWF0OworCWludCB4LCB5Owor CisJaWYgKFdBUk5fT04oIXBsYW5lLT5zdGF0ZSB8fCAoZW5hYmxlICYmICFwbGFuZS0+c3RhdGUt PmZiKSkpCisJCXJldHVybjsKKworCWlmIChwbGFuZS0+c3RhdGUtPmZiKSB7CisJCXBpdGNoID0g cGxhbmUtPnN0YXRlLT5mYi0+cGl0Y2hlc1swXTsKKwkJZm9ybWF0ID0gcGxhbmUtPnN0YXRlLT5m Yi0+cGl4ZWxfZm9ybWF0OworCX0gZWxzZSB7CisJCXBpdGNoID0gMDsKKwkJZm9ybWF0ID0gRFJN X0ZPUk1BVF9SR0JBODg4ODsKKwl9CisKKwl4ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3g7CisJeSA9 IHBsYW5lLT5zdGF0ZS0+Y3J0Y195OworCisJaWYgKHggPCAwKSB7CisJCWFkZHIgLT0geCAqIDQ7 CisJCXggPSAwOworCX0KKworCWlmICh5IDwgMCkgeworCQlhZGRyIC09IHkgKiBwaXRjaDsKKwkJ eSA9IDA7CisJfQorCisJc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZW5hYmxlOworCXN0YXRlLT5w ZW5kaW5nLnBpdGNoID0gcGl0Y2g7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gZm9ybWF0Owor CXN0YXRlLT5wZW5kaW5nLmFkZHIgPSBhZGRyOworCXN0YXRlLT5wZW5kaW5nLnggPSB4OworCXN0 YXRlLT5wZW5kaW5nLnkgPSB5OworCXN0YXRlLT5wZW5kaW5nLndpZHRoID0gZGVzdC0+eDIgLSBk ZXN0LT54MTsKKwlzdGF0ZS0+cGVuZGluZy5oZWlnaHQgPSBkZXN0LT55MiAtIGRlc3QtPnkxOwor CXdtYigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlcnMgYXJlIHNldCBiZWZvcmUg dXBkYXRlICovCisJc3RhdGUtPnBlbmRpbmcuZGlydHkgPSB0cnVlOworfQorCitzdGF0aWMgdm9p ZCBtdGtfcGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IG10 a19wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlpZiAocGxhbmUtPnN0YXRlKSB7CisJCWlmIChwbGFu ZS0+c3RhdGUtPmZiKQorCQkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKHBsYW5lLT5zdGF0 ZS0+ZmIpOworCisJCXN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJ CW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOworCX0gZWxzZSB7CisJCXN0YXRlID0g a3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3RhdGUpCisJCQly ZXR1cm47CisJCXBsYW5lLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKwl9CisKKwlzdGF0ZS0+YmFz ZS5wbGFuZSA9IHBsYW5lOworCXN0YXRlLT5wZW5kaW5nLmZvcm1hdCA9IERSTV9GT1JNQVRfUkdC NTY1OworfQorCitzdGF0aWMgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbXRrX3BsYW5lX2R1cGxp Y2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5l X3N0YXRlICpvbGRfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlz dHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yo KnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlf X2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgJnN0YXRlLT5i YXNlKTsKKworCVdBUk5fT04oc3RhdGUtPmJhc2UucGxhbmUgIT0gcGxhbmUpOworCisJc3RhdGUt PnBlbmRpbmcgPSBvbGRfc3RhdGUtPnBlbmRpbmc7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOwor fQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCisJCQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCV9f ZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShwbGFuZSwgc3RhdGUpOworCWtm cmVlKHRvX210a19wbGFuZV9zdGF0ZShzdGF0ZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9mdW5jcyBtdGtfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IGRy bV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9t aWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBkcm1fcGxhbmVfY2xlYW51cCwK KwkucmVzZXQgPSBtdGtfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBt dGtfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IG10a19k cm1fcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgbXRrX3BsYW5lX2F0b21p Y19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgIHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZi OworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlib29sIHZpc2libGU7CisJ c3RydWN0IGRybV9yZWN0IGRlc3QgPSB7CisJCS54MSA9IHN0YXRlLT5jcnRjX3gsCisJCS55MSA9 IHN0YXRlLT5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+Y3J0Y193LAor CQkueTIgPSBzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNfaCwKKwl9OworCXN0cnVjdCBkcm1f cmVjdCBzcmMgPSB7CisJCS8qIDE2LjE2IGZpeGVkIHBvaW50ICovCisJCS54MSA9IHN0YXRlLT5z cmNfeCwKKwkJLnkxID0gc3RhdGUtPnNyY195LAorCQkueDIgPSBzdGF0ZS0+c3JjX3ggKyBzdGF0 ZS0+c3JjX3csCisJCS55MiA9IHN0YXRlLT5zcmNfeSArIHN0YXRlLT5zcmNfaCwKKwl9OworCXN0 cnVjdCBkcm1fcmVjdCBjbGlwID0geyAwLCB9OworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7CisK KwlpZiAoIW10a19mYl9nZXRfZ2VtX29iaihmYikpIHsKKwkJRFJNX0RFQlVHX0tNUygiYnVmZmVy IGlzIG51bGxcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXN0YXRlLT5jcnRj KQorCQlyZXR1cm4gMDsKKworCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRl KHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmNydGMpOworCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCisJ CXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJY2xpcC54MiA9IGNydGNfc3RhdGUtPm1v ZGUuaGRpc3BsYXk7CisJY2xpcC55MiA9IGNydGNfc3RhdGUtPm1vZGUudmRpc3BsYXk7CisKKwly ZXR1cm4gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIHN0YXRlLT5jcnRjLCBm YiwKKwkJCQkJICAgICAmc3JjLCAmZGVzdCwgJmNsaXAsCisJCQkJCSAgICAgRFJNX1BMQU5FX0hF TFBFUl9OT19TQ0FMSU5HLAorCQkJCQkgICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywK KwkJCQkJICAgICB0cnVlLCB0cnVlLCAmdmlzaWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19w bGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0 ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Z2VtOworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07CisJc3RydWN0IG10a19kcm1f cGxhbmUgKm10a19wbGFuZSA9IHRvX210a19wbGFuZShwbGFuZSk7CisJc3RydWN0IGRybV9yZWN0 IGRlc3QgPSB7CisJCS54MSA9IHN0YXRlLT5iYXNlLmNydGNfeCwKKwkJLnkxID0gc3RhdGUtPmJh c2UuY3J0Y195LAorCQkueDIgPSBzdGF0ZS0+YmFzZS5jcnRjX3ggKyBzdGF0ZS0+YmFzZS5jcnRj X3csCisJCS55MiA9IHN0YXRlLT5iYXNlLmNydGNfeSArIHN0YXRlLT5iYXNlLmNydGNfaCwKKwl9 OworCXN0cnVjdCBkcm1fcmVjdCBjbGlwID0geyAwLCB9OworCisJaWYgKCFjcnRjKQorCQlyZXR1 cm47CisKKwljbGlwLngyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUuaGRpc3BsYXk7 CisJY2xpcC55MiA9IHN0YXRlLT5iYXNlLmNydGMtPnN0YXRlLT5tb2RlLnZkaXNwbGF5OworCWRy bV9yZWN0X2ludGVyc2VjdCgmZGVzdCwgJmNsaXApOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1f b2JqKHN0YXRlLT5iYXNlLmZiKTsKKwltdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmooZ2VtKTsKKwlt dGtfcGxhbmVfZW5hYmxlKG10a19wbGFuZSwgdHJ1ZSwgbXRrX2dlbS0+ZG1hX2FkZHIsICZkZXN0 KTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAorCQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRl KQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRl KHBsYW5lLT5zdGF0ZSk7CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsKKwl3bWIo KTsgLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0ZXIgaXMgc2V0IGJlZm9yZSB1cGRhdGUg Ki8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBtdGtfcGxhbmVfaGVscGVyX2Z1bmNzID0geworCS5h dG9taWNfY2hlY2sgPSBtdGtfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5hdG9taWNfdXBkYXRlID0g bXRrX3BsYW5lX2F0b21pY191cGRhdGUsCisJLmF0b21pY19kaXNhYmxlID0gbXRrX3BsYW5lX2F0 b21pY19kaXNhYmxlLAorfTsKKworaW50IG10a19wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUsCisJCSAgIHVuc2lnbmVkIGxv bmcgcG9zc2libGVfY3J0Y3MsIGVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZSwKKwkJICAgdW5zaWdu ZWQgaW50IHpwb3MpCit7CisJaW50IGVycjsKKworCWVyciA9IGRybV91bml2ZXJzYWxfcGxhbmVf aW5pdChkZXYsICZtdGtfcGxhbmUtPmJhc2UsIHBvc3NpYmxlX2NydGNzLAorCQkJCSAgICAgICAm bXRrX3BsYW5lX2Z1bmNzLCBmb3JtYXRzLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGZvcm1hdHMp LCB0eXBlLCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRp YWxpemUgcGxhbmVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRybV9wbGFuZV9oZWxwZXJf YWRkKCZtdGtfcGxhbmUtPmJhc2UsICZtdGtfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwltdGtfcGxh bmUtPmlkeCA9IHpwb3M7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9wbGFuZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTdi M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9w bGFuZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFU ZWsgSW5jLgorICogQXV0aG9yOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9N VEtfRFJNX1BMQU5FX0hfCisjZGVmaW5lIF9NVEtfRFJNX1BMQU5FX0hfCisKKyNpbmNsdWRlIDxk cm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgbXRrX2Ry bV9wbGFuZSB7CisJc3RydWN0IGRybV9wbGFuZQkJYmFzZTsKKwl1bnNpZ25lZCBpbnQJCQlpZHg7 Cit9OworCitzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgeworCWJvb2wJCQkJY29uZmln OworCWJvb2wJCQkJZW5hYmxlOworCWRtYV9hZGRyX3QJCQlhZGRyOworCXVuc2lnbmVkIGludAkJ CXBpdGNoOworCXVuc2lnbmVkIGludAkJCWZvcm1hdDsKKwl1bnNpZ25lZCBpbnQJCQl4OworCXVu c2lnbmVkIGludAkJCXk7CisJdW5zaWduZWQgaW50CQkJd2lkdGg7CisJdW5zaWduZWQgaW50CQkJ aGVpZ2h0OworCWJvb2wJCQkJZGlydHk7Cit9OworCitzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlIHsK KwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlCQliYXNlOworCXN0cnVjdCBtdGtfcGxhbmVfcGVuZGlu Z19zdGF0ZQlwZW5kaW5nOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RybV9wbGFu ZSAqdG9fbXRrX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXJldHVybiBjb250 YWluZXJfb2YocGxhbmUsIHN0cnVjdCBtdGtfZHJtX3BsYW5lLCBiYXNlKTsKK30KKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICoKK3RvX210a19wbGFuZV9zdGF0ZShzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHN0YXRl LCBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlLCBiYXNlKTsKK30KKworaW50IG10a19wbGFuZV9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUs CisJCSAgIHVuc2lnbmVkIGxvbmcgcG9zc2libGVfY3J0Y3MsIGVudW0gZHJtX3BsYW5lX3R5cGUg dHlwZSwKKwkJICAgdW5zaWduZWQgaW50IHpwb3MpOworCisjZW5kaWYKLS0gCjIuNy4wLnJjMwoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK