From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v11 02/14] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Wed, 17 Feb 2016 12:28:42 +0100 Message-ID: <1455708534-20274-3-git-send-email-p.zabel@pengutronix.de> References: <1455708534-20274-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: <1455708534-20274-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala List-Id: linux-mediatek@lists.infradead.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0 aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0 IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8 ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjEwOgogLSBLZWVwIHRoZSBwbGFuZSdzIHBlbmRp bmcuZW5hYmxlIHN0YXRlIHdoZW4gZGlzYWJsaW5nIHRoZW0gaW5pdGlhbGx5LgotLS0KIGRyaXZl cnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAgIHwgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9NYWtlZmlsZSAgICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kaXNwX292bC5jICAgICB8IDMwMiArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMgICAgfCAyNDAgKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwgNTgwICsrKysrKysrKysr KysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMu aCAgICAgfCAgMzIgKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jICAg ICAgfCAzNTUgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2RkcC5oICAgICAgfCAgNDEgKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2RkcF9jb21wLmMgfCAyMjUgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2RkcF9jb21wLmggfCAxNTAgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZHJ2LmMgICAgICB8IDU3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTMgKysrCiBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAgIHwgIDIzICsrCiBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwgMjY2ICsrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTkgKysr CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQwICsrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCAgICB8ICA1 OSArKysKIDIwIGZpbGVzIGNoYW5nZWQsIDMzOTUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29t cC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZGRwX2NvbXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9mYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZmIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZHJtX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggOGFlN2FiNi4uZjdiMGQ3 OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcKQEAgLTI2OSwzICsyNjksNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9p bXgvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnIgogCiBzb3Vy Y2UgImRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNjE3NjZkZS4uN2IwZDFhYiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQpAQCAtNjksNiArNjksNyBAQCBvYmotJChDT05GSUdfRFJNX01TTSkgKz0gbXNt Lwogb2JqLSQoQ09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmotJChDT05GSUdfRFJNX1NU SSkgKz0gc3RpLwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8KK29iai0kKENPTkZJR19E Uk1fTUVESUFURUspICs9IG1lZGlhdGVrLwogb2JqLXkJCQkrPSBpMmMvCiBvYmoteQkJCSs9IHBh bmVsLwogb2JqLXkJCQkrPSBicmlkZ2UvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYWQ4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMCwwICsxLDEyIEBACitjb25maWcg RFJNX01FRElBVEVLCisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBNZWRpYXRlayBTb0NzIgor CWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYgQ09N UElMRV9URVNUKQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBJT01NVV9ETUEKKwlz ZWxlY3QgTVRLX1NNSQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBh IE1lZGlhdGVrIFNvQ3MuCisJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1lZGlhdGVrLWRy bQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0dGluZyBhbmQKKwkgIGJ1 ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJkZTdjCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAK K21lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKKwkJICBtdGtfZGlzcF9yZG1hLm8g XAorCQkgIG10a19kcm1fY3J0Yy5vIFwKKwkJICBtdGtfZHJtX2RkcC5vIFwKKwkJICBtdGtfZHJt X2RkcF9jb21wLm8gXAorCQkgIG10a19kcm1fZHJ2Lm8gXAorCQkgIG10a19kcm1fZmIubyBcCisJ CSAgbXRrX2RybV9nZW0ubyBcCisJCSAgbXRrX2RybV9wbGFuZS5vCisKK29iai0kKENPTkZJR19E Uk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2Rpc3Bfb3ZsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2MjY3MWYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3Zs LmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsg SW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq LworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs dWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2Nv bXAuaCIKKworI2RlZmluZSBESVNQX1JFR19PVkxfSU5URU4JCQkweDAwMDQKKyNkZWZpbmUgT1ZM X0ZNRV9DUExfSU5UCQkJCQlCSVQoMSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lOVFNUQQkJCTB4 MDAwOAorI2RlZmluZSBESVNQX1JFR19PVkxfRU4JCQkJMHgwMDBjCisjZGVmaW5lIERJU1BfUkVH X09WTF9SU1QJCQkweDAwMTQKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9TSVpFCQkJMHgwMDIw CisjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lfQkdDTFIJCQkweDAwMjgKKyNkZWZpbmUgRElTUF9S RUdfT1ZMX1NSQ19DT04JCQkweDAwMmMKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0NPTihuKQkJCSgw eDAwMzAgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfU1JDX1NJWkUobikJCSgw eDAwMzggKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfT0ZGU0VUKG4pCQkJKDB4 MDAzYyArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9QSVRDSChuKQkJCSgweDAw NDQgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUkRNQV9DVFJMKG4pCQkoMHgw MGMwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFfR01DKG4pCQkoMHgw MGM4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0FERFIobikJCQkoMHgwZjQw ICsgMHgyMCAqIChuKSkKKworI2RlZmluZQlPVkxfUkRNQV9NRU1fR01DCTB4NDA0MDIwMjAKKwor I2RlZmluZSBPVkxfQ09OX0JZVEVfU1dBUAlCSVQoMjQpCisjZGVmaW5lIE9WTF9DT05fQ0xSRk1U X1JHQjU2NQkoMCA8PCAxMikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCODg4CSgxIDw8IDEy KQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0JBODg4OAkoMiA8PCAxMikKKyNkZWZpbmUgT1ZM X0NPTl9DTFJGTVRfQVJHQjg4ODgJKDMgPDwgMTIpCisjZGVmaW5lCU9WTF9DT05fQUVOCQlCSVQo OCkKKyNkZWZpbmUJT1ZMX0NPTl9BTFBIQQkJMHhmZgorCisvKioKKyAqIHN0cnVjdCBtdGtfZGlz cF9vdmwgLSBESVNQX09WTCBkcml2ZXIgc3RydWN0dXJlCisgKiBAZGRwX2NvbXAgLSBzdHJ1Y3R1 cmUgY29udGFpbmluZyB0eXBlIGVudW0gYW5kIGhhcmR3YXJlIHJlc291cmNlcworICogQGNydGMg LSBhc3NvY2lhdGVkIGNydGMgdG8gcmVwb3J0IHZibGFuayBldmVudHMgdG8KKyAqLworc3RydWN0 IG10a19kaXNwX292bCB7CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJc3RydWN0 IGRybV9jcnRjCQkJKmNydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rpc3Bfb3Zs X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bf b3ZsICpwcml2ID0gZGV2X2lkOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9ICZwcml2LT5k ZHBfY29tcDsKKworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0ICovCisJd3Jp dGVsKDB4MCwgb3ZsLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVFNUQSk7CisKKwlpZiAoIXByaXYt PmNydGMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2RkcF9pcnEocHJpdi0+Y3J0 Yywgb3ZsKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbXRrX292 bF9lbmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICBzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGNvbnRhaW5l cl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsLAorCQkJCQkJIGRkcF9jb21wKTsKKworCXBy aXYtPmNydGMgPSBjcnRjOworCXdyaXRlbF9yZWxheGVkKE9WTF9GTUVfQ1BMX0lOVCwgY29tcC0+ cmVncyArIERJU1BfUkVHX09WTF9JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfZGlz YWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2Rp c3Bfb3ZsICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9vdmwsCisJ CQkJCQkgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IE5VTEw7CisJd3JpdGVsX3JlbGF4ZWQo MHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQg bXRrX292bF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbF9yZWxh eGVkKDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9CisKK3N0YXRpYyB2b2lk IG10a19vdmxfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbF9yZWxh eGVkKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9CisKK3N0YXRpYyB2b2lk IG10a19vdmxfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3 LAorCQkJICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAo dyAhPSAwICYmIGggIT0gMCkKKwkJd3JpdGVsX3JlbGF4ZWQoaCA8PCAxNiB8IHcsIGNvbXAtPnJl Z3MgKyBESVNQX1JFR19PVkxfUk9JX1NJWkUpOworCXdyaXRlbF9yZWxheGVkKDB4MCwgY29tcC0+ cmVncyArIERJU1BfUkVHX09WTF9ST0lfQkdDTFIpOworCisJd3JpdGVsKDB4MSwgY29tcC0+cmVn cyArIERJU1BfUkVHX09WTF9SU1QpOworCXdyaXRlbCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JF R19PVkxfUlNUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9vbihzdHJ1Y3QgbXRr X2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCByZWc7 CisKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgp KTsKKwl3cml0ZWwoT1ZMX1JETUFfTUVNX0dNQywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9S RE1BX0dNQyhpZHgpKTsKKworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxf U1JDX0NPTik7CisJcmVnID0gcmVnIHwgQklUKGlkeCk7CisJd3JpdGVsKHJlZywgY29tcC0+cmVn cyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXll cl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1 bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX09W TF9TUkNfQ09OKTsKKwlyZWcgPSByZWcgJiB+QklUKGlkeCk7CisJd3JpdGVsKHJlZywgY29tcC0+ cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKKworCXdyaXRlbCgweDAsIGNvbXAtPnJlZ3Mg KyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlkeCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50 IG92bF9mbXRfY29udmVydCh1bnNpZ25lZCBpbnQgZm10KQoreworCXN3aXRjaCAoZm10KSB7CisJ ZGVmYXVsdDoKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJG TVRfUkdCNTY1OworCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6CisJCXJldHVybiBPVkxfQ09OX0NM UkZNVF9SR0I1NjUgfCBPVkxfQ09OX0JZVEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfUkdCODg4 OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCODg4OworCWNhc2UgRFJNX0ZPUk1BVF9CR1I4 ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I4ODggfCBPVkxfQ09OX0JZVEVfU1dBUDsK KwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4Ogor CQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODg7CisJY2FzZSBEUk1fRk9STUFUX0JHUlg4 ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1U X0FSR0I4ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4 OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JH QkE4ODg4OworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJH Ujg4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0JBODg4OCB8IE9WTF9DT05fQllURV9T V0FQOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9jb25maWcoc3RydWN0IG10 a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkgc3RydWN0IG10a19wbGFu ZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlICpwZW5k aW5nID0gJnN0YXRlLT5wZW5kaW5nOworCXVuc2lnbmVkIGludCBhZGRyID0gcGVuZGluZy0+YWRk cjsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBwZW5kaW5nLT5waXRjaCAmIDB4ZmZmZjsKKwl1bnNp Z25lZCBpbnQgZm10ID0gcGVuZGluZy0+Zm9ybWF0OworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAo cGVuZGluZy0+eSA8PCAxNikgfCBwZW5kaW5nLT54OworCXVuc2lnbmVkIGludCBzcmNfc2l6ZSA9 IChwZW5kaW5nLT5oZWlnaHQgPDwgMTYpIHwgcGVuZGluZy0+d2lkdGg7CisJdW5zaWduZWQgaW50 IGNvbjsKKworCWlmICghcGVuZGluZy0+ZW5hYmxlKQorCQltdGtfb3ZsX2xheWVyX29mZihjb21w LCBpZHgpOworCisJY29uID0gb3ZsX2ZtdF9jb252ZXJ0KGZtdCk7CisJaWYgKGlkeCAhPSAwKQor CQljb24gfD0gT1ZMX0NPTl9BRU4gfCBPVkxfQ09OX0FMUEhBOworCisJd3JpdGVsX3JlbGF4ZWQo Y29uLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0NPTihpZHgpKTsKKwl3cml0ZWxfcmVsYXhl ZChwaXRjaCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9QSVRDSChpZHgpKTsKKwl3cml0ZWxf cmVsYXhlZChzcmNfc2l6ZSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfU0laRShpZHgp KTsKKwl3cml0ZWxfcmVsYXhlZChvZmZzZXQsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfT0ZG U0VUKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKGFkZHIsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P VkxfQUREUihpZHgpKTsKKworCWlmIChwZW5kaW5nLT5lbmFibGUpCisJCW10a19vdmxfbGF5ZXJf b24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVu Y3MgbXRrX2Rpc3Bfb3ZsX2Z1bmNzID0geworCS5jb25maWcgPSBtdGtfb3ZsX2NvbmZpZywKKwku c3RhcnQgPSBtdGtfb3ZsX3N0YXJ0LAorCS5zdG9wID0gbXRrX292bF9zdG9wLAorCS5lbmFibGVf dmJsYW5rID0gbXRrX292bF9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19v dmxfZGlzYWJsZV92YmxhbmssCisJLmxheWVyX29uID0gbXRrX292bF9sYXllcl9vbiwKKwkubGF5 ZXJfb2ZmID0gbXRrX292bF9sYXllcl9vZmYsCisJLmxheWVyX2NvbmZpZyA9IG10a19vdmxfbGF5 ZXJfY29uZmlnLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfYmluZChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sK KwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBtdGtf ZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKKwlpZiAocmV0IDwg MCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6ICVk XG4iLAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kaXNwX292bF91bmJpbmQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJdm9pZCAqZGF0YSkK K3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCisJbXRrX2RkcF9jb21wX3VucmVn aXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBjb21wb25lbnRfb3BzIG10a19kaXNwX292bF9jb21wb25lbnRfb3BzID0geworCS5iaW5kCT0g bXRrX2Rpc3Bfb3ZsX2JpbmQsCisJLnVuYmluZCA9IG10a19kaXNwX292bF91bmJpbmQsCit9Owor CitzdGF0aWMgaW50IG10a19kaXNwX292bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19k aXNwX292bCAqcHJpdjsKKwlpbnQgY29tcF9pZDsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwlw cml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRl diwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwlyZXQgPSBkZXZtX3JlcXVl c3RfaXJxKGRldiwgaXJxLCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJR Rl9UUklHR0VSX05PTkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxuIiwgaXJxLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCWNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0X2lkKGRl di0+b2Zfbm9kZSwgTVRLX0RJU1BfT1ZMKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJ cmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYt Pm9mX25vZGUsICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rpc3Bfb3ZsX2Z1 bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUg Y29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9z ZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRr X2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAiRmFp bGVkIHRvIGFkZCBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCBtdGtfZGlzcF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVu dF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0g Im1lZGlhdGVrLG10ODE3My1kaXNwLW92bCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3Bfb3Zs X3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2Rpc3Bfb3ZsX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsK KwkJLm5hbWUJPSAibWVkaWF0ZWstZGlzcC1vdmwiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwK KwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCwKKwl9LAor fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OGFlODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgor ICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+ CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cisj aW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+Cisj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Ny dGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdf UkRNQV9JTlRfRU5BQkxFCQkweDAwMDAKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9JTlRfU1RBVFVT CQkweDAwMDQKKyNkZWZpbmUgUkRNQV9UQVJHRVRfTElORV9JTlQJCQkJQklUKDUpCisjZGVmaW5l IFJETUFfRklGT19VTkRFUkZMT1dfSU5UCQkJCUJJVCg0KQorI2RlZmluZSBSRE1BX0VPRl9BQk5P Uk1BTF9JTlQJCQkJQklUKDMpCisjZGVmaW5lIFJETUFfRlJBTUVfRU5EX0lOVAkJCQlCSVQoMikK KyNkZWZpbmUgUkRNQV9GUkFNRV9TVEFSVF9JTlQJCQkJQklUKDEpCisjZGVmaW5lIFJETUFfUkVH X1VQREFURV9JTlQJCQkJQklUKDApCisjZGVmaW5lIERJU1BfUkVHX1JETUFfR0xPQkFMX0NPTgkJ MHgwMDEwCisjZGVmaW5lIFJETUFfRU5HSU5FX0VOCQkJCQlCSVQoMCkKKyNkZWZpbmUgRElTUF9S RUdfUkRNQV9TSVpFX0NPTl8wCQkweDAwMTQKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9TSVpFX0NP Tl8xCQkweDAwMTgKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9UQVJHRVRfTElORQkJMHgwMDFjCisj ZGVmaW5lIERJU1BfUkVHX1JETUFfRklGT19DT04JCQkweDAwNDAKKyNkZWZpbmUgUkRNQV9GSUZP X1VOREVSRkxPV19FTgkJCQlCSVQoMzEpCisjZGVmaW5lIFJETUFfRklGT19QU0VVRE9fU0laRShi eXRlcykJCQkoKChieXRlcykgLyAxNikgPDwgMTYpCisjZGVmaW5lIFJETUFfT1VUUFVUX1ZBTElE X0ZJRk9fVEhSRVNIT0xEKGJ5dGVzKQkJKChieXRlcykgLyAxNikKKworLyoqCisgKiBzdHJ1Y3Qg bXRrX2Rpc3BfcmRtYSAtIERJU1BfUkRNQSBkcml2ZXIgc3RydWN0dXJlCisgKiBAZGRwX2NvbXAg LSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0eXBlIGVudW0gYW5kIGhhcmR3YXJlIHJlc291cmNlcwor ICogQGNydGMgLSBhc3NvY2lhdGVkIGNydGMgdG8gcmVwb3J0IGlycSBldmVudHMgdG8KKyAqLwor c3RydWN0IG10a19kaXNwX3JkbWEgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAJCWRkcF9jb21wOwor CXN0cnVjdCBkcm1fY3J0YwkJCSpjcnRjOworfTsKKworc3RhdGljIGlycXJldHVybl90IG10a19k aXNwX3JkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBt dGtfZGlzcF9yZG1hICpwcml2ID0gZGV2X2lkOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKnJkbWEg PSAmcHJpdi0+ZGRwX2NvbXA7CisKKwkvKiBDbGVhciBmcmFtZSBjb21wbGV0aW9uIGludGVycnVw dCAqLworCXdyaXRlbCgweDAsIHJkbWEtPnJlZ3MgKyBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMp OworCisJaWYgKCFwcml2LT5jcnRjKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwltdGtfY3J0Y19k ZHBfaXJxKHByaXYtPmNydGMsIHJkbWEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitz dGF0aWMgdm9pZCByZG1hX3VwZGF0ZV9iaXRzKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVu c2lnbmVkIGludCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQg dmFsKQoreworCXVuc2lnbmVkIGludCB0bXAgPSByZWFkbChjb21wLT5yZWdzICsgcmVnKTsKKwor CXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgY29tcC0+ cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2VuYWJsZV92Ymxhbmsoc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7 CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0 IG10a19kaXNwX3JkbWEsCisJCQkJCQkgIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMgPSBjcnRj OworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFLCBSRE1B X0ZSQU1FX0VORF9JTlQsCisJCQkgUkRNQV9GUkFNRV9FTkRfSU5UKTsKK30KKworc3RhdGljIHZv aWQgbXRrX3JkbWFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sK KwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3Qg bXRrX2Rpc3BfcmRtYSwKKwkJCQkJCSAgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IE5VTEw7 CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUsIFJETUFf RlJBTUVfRU5EX0lOVCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX3N0YXJ0KHN0cnVj dCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JF R19SRE1BX0dMT0JBTF9DT04sIFJETUFfRU5HSU5FX0VOLAorCQkJIFJETUFfRU5HSU5FX0VOKTsK K30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w KQoreworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OLCBS RE1BX0VOR0lORV9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2NvbmZpZyhzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCB3aWR0aCwKKwkJCSAgICB1bnNpZ25lZCBo ZWlnaHQsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xk OworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVH X1JETUFfU0laRV9DT05fMCwgMHhmZmYsIHdpZHRoKTsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAs IERJU1BfUkVHX1JETUFfU0laRV9DT05fMSwgMHhmZmZmZiwgaGVpZ2h0KTsKKworCS8qCisJICog RW5hYmxlIEZJRk8gdW5kZXJmbG93IHNpbmNlIERTSSBhbmQgRFBJIGNhbid0IGJlIGJsb2NrZWQu CisJICogS2VlcCB0aGUgRklGTyBwc2V1ZG8gc2l6ZSByZXNldCBkZWZhdWx0IG9mIDggS2lCLiBT ZXQgdGhlCisJICogb3V0cHV0IHRocmVzaG9sZCB0byA2IG1pY3Jvc2Vjb25kcyB3aXRoIDcvNiBv dmVyaGVhZCB0bworCSAqIGFjY291bnQgZm9yIGJsYW5raW5nLCBhbmQgd2l0aCBhIHBpeGVsIGRl cHRoIG9mIDQgYnl0ZXM6CisJICovCisJdGhyZXNob2xkID0gd2lkdGggKiBoZWlnaHQgKiB2cmVm cmVzaCAqIDQgKiA3IC8gMTAwMDAwMDsKKwlyZWcgPSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0VOIHwK KwkgICAgICBSRE1BX0ZJRk9fUFNFVURPX1NJWkUoU1pfOEspIHwKKwkgICAgICBSRE1BX09VVFBV VF9WQUxJRF9GSUZPX1RIUkVTSE9MRCh0aHJlc2hvbGQpOworCXdyaXRlbChyZWcsIGNvbXAtPnJl Z3MgKyBESVNQX1JFR19SRE1BX0ZJRk9fQ09OKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBt dGtfZGRwX2NvbXBfZnVuY3MgbXRrX2Rpc3BfcmRtYV9mdW5jcyA9IHsKKwkuY29uZmlnID0gbXRr X3JkbWFfY29uZmlnLAorCS5zdGFydCA9IG10a19yZG1hX3N0YXJ0LAorCS5zdG9wID0gbXRrX3Jk bWFfc3RvcCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19yZG1hX2VuYWJsZV92YmxhbmssCisJLmRp c2FibGVfdmJsYW5rID0gbXRrX3JkbWFfZGlzYWJsZV92YmxhbmssCit9OworCitzdGF0aWMgaW50 IG10a19kaXNwX3JkbWFfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1h c3RlciwKKwkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnBy aXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9 IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1fZGV2 LCAmcHJpdi0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFp bGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1 bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitz dGF0aWMgdm9pZCBtdGtfZGlzcF9yZG1hX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2UgKm1hc3RlciwKKwkJCQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bf cmRtYSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpk cm1fZGV2ID0gZGF0YTsKKworCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZwcml2 LT5kZHBfY29tcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtf ZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQJPSBtdGtfZGlzcF9yZG1hX2JpbmQs CisJLnVuYmluZCA9IG10a19kaXNwX3JkbWFfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtf ZGlzcF9yZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdjsK KwlpbnQgY29tcF9pZDsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwlwcml2ID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGly cSA8IDApCisJCXJldHVybiBpcnE7CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChk ZXYtPm9mX25vZGUsIE1US19ESVNQX1JETUEpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOwor CQlyZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRl di0+b2Zfbm9kZSwgJnByaXYtPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9yZG1h X2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxp emUgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEaXNh YmxlIGFuZCBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KKwl3cml0ZWwoMHgwLCBwcml2LT5k ZHBfY29tcC5yZWdzICsgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFKTsKKwl3cml0ZWwoMHgwLCBw cml2LT5kZHBfY29tcC5yZWdzICsgRElTUF9SRUdfUkRNQV9JTlRfU1RBVFVTKTsKKworCXJldCA9 IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10a19kaXNwX3JkbWFfaXJxX2hhbmRsZXIsCisJ CQkgICAgICAgSVJRRl9UUklHR0VSX05PTkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChy ZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxu IiwgaXJxLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRh KHBkZXYsIHByaXYpOworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtfZGlzcF9yZG1h X2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFk ZCBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBtdGtfZGlzcF9yZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRr X2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlh dGVrLG10ODE3My1kaXNwLXJkbWEiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBtdGtfZGlzcF9yZG1hX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3BfcmRtYV9w cm9iZSwKKwkucmVtb3ZlCQk9IG10a19kaXNwX3JkbWFfcmVtb3ZlLAorCS5kcml2ZXIJCT0gewor CQkubmFtZQk9ICJtZWRpYXRlay1kaXNwLXJkbWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwK KwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2Rpc3BfcmRtYV9kcml2ZXJfZHRfbWF0Y2gsCisJfSwK K307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhYWJkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpAQCAtMCwwICsxLDU4MCBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxhc20vYmFycmllci5o PgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f cGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv cG1fcnVudGltZS5oPgorI2luY2x1ZGUgPHNvYy9tZWRpYXRlay9zbWkuaD4KKworI2luY2x1ZGUg Im10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRr X2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRr X2RybV9nZW0uaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisKKy8qKgorICogc3RydWN0 IG10a19kcm1fY3J0YyAtIE1lZGlhVGVrIHNwZWNpZmljIGNydGMgc3RydWN0dXJlLgorICogQGJh c2U6IGNydGMgb2JqZWN0LgorICogQGVuYWJsZWQ6IHJlY29yZHMgd2hldGhlciBjcnRjX2VuYWJs ZSBzdWNjZWVkZWQKKyAqIEBwbGFuZXM6IGFycmF5IG9mIDQgbXRrX2RybV9wbGFuZSBzdHJ1Y3R1 cmVzLCBvbmUgZm9yIGVhY2ggb3ZlcmxheSBwbGFuZQorICogQHBlbmRpbmdfcGxhbmVzOiB3aGV0 aGVyIGFueSBwbGFuZSBoYXMgcGVuZGluZyBjaGFuZ2VzIHRvIGJlIGFwcGxpZWQKKyAqIEBjb25m aWdfcmVnczogbWVtb3J5IG1hcHBlZCBtbXN5cyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwYWNl CisgKiBAbXV0ZXg6IGhhbmRsZSB0byBvbmUgb2YgdGhlIHRlbiBkaXNwX211dGV4IHN0cmVhbXMK KyAqIEBkZHBfY29tcF9ucjogbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gZGRwX2NvbXAKKyAqIEBk ZHBfY29tcDogYXJyYXkgb2YgcG9pbnRlcnMgdGhlIG10a19kZHBfY29tcCBzdHJ1Y3R1cmVzIHVz ZWQgYnkgdGhpcyBjcnRjCisgKi8KK3N0cnVjdCBtdGtfZHJtX2NydGMgeworCXN0cnVjdCBkcm1f Y3J0YwkJCWJhc2U7CisJYm9vbAkJCQllbmFibGVkOworCisJYm9vbAkJCQlwZW5kaW5nX25lZWRz X3ZibGFuazsKKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50CSpldmVudDsKKworCXN0 cnVjdCBtdGtfZHJtX3BsYW5lCQlwbGFuZXNbT1ZMX0xBWUVSX05SXTsKKwlib29sCQkJCXBlbmRp bmdfcGxhbmVzOworCisJdm9pZCBfX2lvbWVtCQkJKmNvbmZpZ19yZWdzOworCXN0cnVjdCBtdGtf ZGlzcF9tdXRleAkJKm11dGV4OworCXVuc2lnbmVkIGludAkJCWRkcF9jb21wX25yOworCXN0cnVj dCBtdGtfZGRwX2NvbXAJCSoqZGRwX2NvbXA7Cit9OworCitzdHJ1Y3QgbXRrX2NydGNfc3RhdGUg eworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZQkJYmFzZTsKKworCWJvb2wJCQkJcGVuZGluZ19jb25m aWc7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQlwZW5k aW5nX2hlaWdodDsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX3ZyZWZyZXNoOworfTsKKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgbXRrX2RybV9jcnRjICp0b19tdGtfY3J0YyhzdHJ1Y3QgZHJtX2Ny dGMgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RybV9jcnRjLCBi YXNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnRvX210a19j cnRjX3N0YXRlKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqcykKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKHMsIHN0cnVjdCBtdGtfY3J0Y19zdGF0ZSwgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10 a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRj KQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNydGMtPmRldi0+ZXZlbnRfbG9j aywgZmxhZ3MpOworCWRybV9zZW5kX3ZibGFua19ldmVudChjcnRjLT5kZXYsIG10a19jcnRjLT5l dmVudC0+cGlwZSwgbXRrX2NydGMtPmV2ZW50KTsKKwlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMp OworCW10a19jcnRjLT5ldmVudCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0 Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmlu aXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlkcm1fY3J0 Y19oYW5kbGVfdmJsYW5rKCZtdGtfY3J0Yy0+YmFzZSk7CisJaWYgKG10a19jcnRjLT5wZW5kaW5n X25lZWRzX3ZibGFuaykgeworCQltdGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0 Yyk7CisJCW10a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuayA9IGZhbHNlOworCX0KK30KKwor c3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQor eworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJ CWNsa191bnByZXBhcmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCisJbXRrX2Rpc3Bf bXV0ZXhfcHV0KG10a19jcnRjLT5tdXRleCk7CisKKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwor fQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRj KQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlpZiAoY3J0Yy0+c3RhdGUp IHsKKwkJaWYgKGNydGMtPnN0YXRlLT5tb2RlX2Jsb2IpCisJCQlkcm1fcHJvcGVydHlfdW5yZWZl cmVuY2VfYmxvYihjcnRjLT5zdGF0ZS0+bW9kZV9ibG9iKTsKKworCQlzdGF0ZSA9IHRvX210a19j cnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRl KSk7CisJfSBlbHNlIHsKKwkJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VS TkVMKTsKKwkJaWYgKCFzdGF0ZSkKKwkJCXJldHVybjsKKwkJY3J0Yy0+c3RhdGUgPSAmc3RhdGUt PmJhc2U7CisJfQorCisJc3RhdGUtPmJhc2UuY3J0YyA9IGNydGM7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKm10a19kcm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlzdGF0 ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJ CXJldHVybiBOVUxMOworCisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0 ZShjcnRjLCAmc3RhdGUtPmJhc2UpOworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5jcnRjICE9IGNy dGMpOworCXN0YXRlLT5iYXNlLmNydGMgPSBjcnRjOworCisJcmV0dXJuICZzdGF0ZS0+YmFzZTsK K30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9j cnRjICpjcnRjLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQorewor CV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKGNydGMsIHN0YXRlKTsKKwlr ZnJlZSh0b19tdGtfY3J0Y19zdGF0ZShzdGF0ZSkpOworfQorCitzdGF0aWMgYm9vbCBtdGtfZHJt X2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgIGNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvIGhlcmUsIGJ1dCB0aGlz IGNhbGxiYWNrIGlzIG1hbmRhdG9yeS4gKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZv aWQgbXRrX2RybV9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQorewor CXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7CisKKwlzdGF0ZS0+cGVuZGluZ193aWR0aCA9IGNydGMtPm1vZGUuaGRpc3BsYXk7CisJ c3RhdGUtPnBlbmRpbmdfaGVpZ2h0ID0gY3J0Yy0+bW9kZS52ZGlzcGxheTsKKwlzdGF0ZS0+cGVu ZGluZ192cmVmcmVzaCA9IGNydGMtPm1vZGUudnJlZnJlc2g7CisJd21iKCk7CS8qIE1ha2Ugc3Vy ZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBhcmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+ cGVuZGluZ19jb25maWcgPSB0cnVlOworfQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxh bmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0 IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19k cm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1 Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRw X2NvbXBfZW5hYmxlX3ZibGFuayhvdmwsICZtdGtfY3J0Yy0+YmFzZSk7CisKKwlyZXR1cm4gMDsK K30KKwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2Ug KmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp diA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0 b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwg PSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZGlzYWJsZV92Ymxhbmso b3ZsKTsKK30KKworc3RhdGljIGludCBtdGtfY3J0Y19kZHBfY2xrX2VuYWJsZShzdHJ1Y3QgbXRr X2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVH X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk cF9jb21wX25yOyBpKyspIHsKKwkJcmV0ID0gY2xrX2VuYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBb aV0tPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBj bG9jayAlZDogJWRcbiIsIGksIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVy biAwOworZXJyOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJY2xrX2Rpc2FibGUobXRrX2NydGMtPmRk cF9jb21wW2ldLT5jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRj X2RkcF9jbGtfZGlzYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQg aTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsg aSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+ ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2NydGNfZGRwX2h3X2luaXQo c3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRj ID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0LCB2cmVmcmVz aDsKKwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVu Y19fKTsKKwlpZiAoV0FSTl9PTighY3J0Yy0+c3RhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXdpZHRoID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUuaGRpc3BsYXk7CisJaGVpZ2h0ID0g Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXk7CisJdnJlZnJlc2ggPSBjcnRjLT5z dGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVmcmVzaDsKKworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5 bmMoY3J0Yy0+ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVk IHRvIGVuYWJsZSBwb3dlciBkb21haW46ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCXJldCA9IG10a19kaXNwX211dGV4X3ByZXBhcmUobXRrX2NydGMtPm11dGV4KTsKKwlpZiAo cmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgbXV0ZXggY2xvY2s6ICVk XG4iLCByZXQpOworCQlnb3RvIGVycl9wbV9ydW50aW1lX3B1dDsKKwl9CisKKwlyZXQgPSBtdGtf Y3J0Y19kZHBfY2xrX2VuYWJsZShtdGtfY3J0Yyk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNvbXBvbmVudCBjbG9ja3M6ICVkXG4iLCByZXQpOworCQln b3RvIGVycl9tdXRleF91bnByZXBhcmU7CisJfQorCisJRFJNX0RFQlVHX0RSSVZFUigibWVkaWF0 ZWtfZGRwX2RkcF9wYXRoX3NldHVwXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk cF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10a19kZHBfYWRkX2NvbXBfdG9fcGF0aChtdGtfY3J0 Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAorCQkJCQkg bXRrX2NydGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9hZGRfY29t cChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCW10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0K KwltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBf Y29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2VuYWJsZShtdGtfY3J0Yy0+bXV0ZXgpOwor CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCXN0cnVj dCBtdGtfZGRwX2NvbXAgKmNvbXAgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV07CisKKwkJbXRrX2Rk cF9jb21wX2NvbmZpZyhjb21wLCB3aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaCk7CisJCW10a19kZHBf Y29tcF9zdGFydChjb21wKTsKKwl9CisKKwkvKiBJbml0aWFsbHkgZGlzYWJsZSBhbGwgcGxhbmVz LCBrZWVwIHRoZSBwZW5kaW5nIHBsYW5lIHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IE9WTF9M QVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5w bGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJ CWJvb2wgZW5hYmxlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5l LT5zdGF0ZSk7CisJCWVuYWJsZSA9IHBsYW5lX3N0YXRlLT5wZW5kaW5nLmVuYWJsZTsKKwkJcGxh bmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZmFsc2U7CisJCW10a19kZHBfY29tcF9sYXllcl9j b25maWcobXRrX2NydGMtPmRkcF9jb21wWzBdLCBpLAorCQkJCQkgIHBsYW5lX3N0YXRlKTsKKwkJ cGxhbmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZW5hYmxlOworCX0KKworCXJldHVybiAwOwor CitlcnJfbXV0ZXhfdW5wcmVwYXJlOgorCW10a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0 Yy0+bXV0ZXgpOworZXJyX3BtX3J1bnRpbWVfcHV0OgorCXBtX3J1bnRpbWVfcHV0KGNydGMtPmRl di0+ZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaHdf ZmluaShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gbXRrX2NydGMtPmJhc2UuZGV2OworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZF UigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21w X25yOyBpKyspCisJCW10a19kZHBfY29tcF9zdG9wKG10a19jcnRjLT5kZHBfY29tcFtpXSk7CisJ Zm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtfZGlzcF9t dXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBf Y29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2Rpc2FibGUobXRrX2NydGMtPm11dGV4KTsK Kwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10 a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywKKwkJCQkJ ICAgICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJICAgICAgbXRrX2NydGMtPmRk cF9jb21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0 Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtf ZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBfY29t cFtpXS0+aWQpOworCW10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShtdGtfY3J0Yyk7CisJbXRrX2Rp c3BfbXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisKKwlwbV9ydW50aW1lX3B1dChk cm0tPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19lbmFibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRr X2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9j b21wWzBdOworCWludCByZXQ7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwgX19mdW5j X18sIGNydGMtPmJhc2UuaWQpOworCisJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChvdmwtPmxhcmJf ZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsYXJiOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9od19pbml0KG10 a19jcnRjKTsKKwlpZiAocmV0KSB7CisJCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7 CisJCXJldHVybjsKKwl9CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJbXRrX2NydGMt PmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMg PSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0 Yy0+ZGRwX2NvbXBbMF07CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwg X19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCWlmIChXQVJOX09OKCFtdGtfY3J0Yy0+ZW5hYmxl ZCkpCisJCXJldHVybjsKKworCS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0ZSB0byBkaXNh YmxlZCAqLworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBt dGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3Bs YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmVuYWJsZSA9 IGZhbHNlOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCX0KKwltdGtf Y3J0Yy0+cGVuZGluZ19wbGFuZXMgPSB0cnVlOworCisJLyogV2FpdCBmb3IgcGxhbmVzIHRvIGJl IGRpc2FibGVkICovCisJZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOworCisJZHJtX2Ny dGNfdmJsYW5rX29mZihjcnRjKTsKKwltdGtfY3J0Y19kZHBfaHdfZmluaShtdGtfY3J0Yyk7CisJ bXRrX3NtaV9sYXJiX3B1dChvdmwtPmxhcmJfZGV2KTsKKworCW10a19jcnRjLT5lbmFibGVkID0g ZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0 IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2Ny dGNfc3RhdGUpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRj X3N0YXRlKGNydGMtPnN0YXRlKTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRv X210a19jcnRjKGNydGMpOworCisJaWYgKG10a19jcnRjLT5ldmVudCAmJiBzdGF0ZS0+YmFzZS5l dmVudCkKKwkJRFJNX0VSUk9SKCJuZXcgZXZlbnQgd2hpbGUgdGhlcmUgaXMgc3RpbGwgYSBwZW5k aW5nIGV2ZW50XG4iKTsKKworCWlmIChzdGF0ZS0+YmFzZS5ldmVudCkgeworCQlzdGF0ZS0+YmFz ZS5ldmVudC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNydGMpOworCQlXQVJOX09OKGRybV9jcnRj X3ZibGFua19nZXQoY3J0YykgIT0gMCk7CisJCW10a19jcnRjLT5ldmVudCA9IHN0YXRlLT5iYXNl LmV2ZW50OworCQlzdGF0ZS0+YmFzZS5ldmVudCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9p ZCBtdGtfZHJtX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkg ICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBt dGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJdW5zaWduZWQgaW50 IHBlbmRpbmdfcGxhbmVzID0gMDsKKwlpbnQgaTsKKworCWlmIChtdGtfY3J0Yy0+ZXZlbnQpCisJ CW10a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuayA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8 IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19j cnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsK KwkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5KSB7CisJCQlwbGFuZV9zdGF0ZS0+cGVu ZGluZy5jb25maWcgPSB0cnVlOworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuZGlydHkgPSBmYWxz ZTsKKwkJCXBlbmRpbmdfcGxhbmVzIHw9IEJJVChpKTsKKwkJfQorCX0KKwlpZiAocGVuZGluZ19w bGFuZXMpCisJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgbXRrX2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25m aWcJCT0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwCQk9IGRybV9h dG9taWNfaGVscGVyX3BhZ2VfZmxpcCwKKwkuZGVzdHJveQkJPSBtdGtfZHJtX2NydGNfZGVzdHJv eSwKKwkucmVzZXQJCQk9IG10a19kcm1fY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZQk9IG10a19kcm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0 YXRlCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLm1v ZGVfZml4dXAJPSBtdGtfZHJtX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9mYgk9IG10 a19kcm1fY3J0Y19tb2RlX3NldF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRjX2VuYWJs ZSwKKwkuZGlzYWJsZQk9IG10a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVnaW4JPSBt dGtfZHJtX2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJtX2NydGNf YXRvbWljX2ZsdXNoLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLAorCQkJICAgICBzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YywK KwkJCSAgICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKKwkJCSAgICAgc3RydWN0IGRybV9w bGFuZSAqY3Vyc29yLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0g ZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZtdGtfY3J0Yy0+YmFzZSwgcHJpbWFyeSwg Y3Vyc29yLAorCQkJCQkmbXRrX2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8g ZXJyX2NsZWFudXBfY3J0YzsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm10a19jcnRjLT5iYXNl LCAmbXRrX2NydGNfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiAwOworCitlcnJfY2xlYW51cF9j cnRjOgorCWRybV9jcnRjX2NsZWFudXAoJm10a19jcnRjLT5iYXNlKTsKKwlyZXR1cm4gcmV0Owor fQorCit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3Qg bXRrX2RkcF9jb21wICpvdmwpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0 b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRr X2NydGNfc3RhdGUobXRrX2NydGMtPmJhc2Uuc3RhdGUpOworCXVuc2lnbmVkIGludCBpOworCisJ LyoKKwkgKiBUT0RPOiBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlcnMgaGVyZSwgd2Ug c2hvdWxkIHByZXBhcmUKKwkgKiB3b3JraW5nIHJlZ2lzdGVycyBpbiBhdG9taWNfY29tbWl0IGFu ZCBsZXQgdGhlIGhhcmR3YXJlIGNvbW1hbmQKKwkgKiBxdWV1ZSB1cGRhdGUgbW9kdWxlIHJlZ2lz dGVycyBvbiB2YmxhbmsuCisJICovCisJaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykgeworCQlt dGtfZGRwX2NvbXBfY29uZmlnKG92bCwgc3RhdGUtPnBlbmRpbmdfd2lkdGgsCisJCQkJICAgIHN0 YXRlLT5wZW5kaW5nX2hlaWdodCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gpOwor CisJCXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOworCX0KKworCWlmIChtdGtfY3J0Yy0+ cGVuZGluZ19wbGFuZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7 CisJCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7 CisJCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQkJcGxhbmVfc3Rh dGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQkJaWYgKHBsYW5lX3N0 YXRlLT5wZW5kaW5nLmNvbmZpZykgeworCQkJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcob3Zs LCBpLCBwbGFuZV9zdGF0ZSk7CisJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gZmFs c2U7CisJCQl9CisJCX0KKwkJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gZmFsc2U7CisJfQor CisJbXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKK30KKworaW50IG10a19kcm1f Y3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBlbnVtIG10 a19kZHBfY29tcF9pZCAqcGF0aCwgdW5zaWduZWQgaW50IHBhdGhfbGVuKQoreworCXN0cnVjdCBt dGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBkcm1fZGV2LT5kZXY7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGM7 CisJZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB6cG9zOworCWludCBw aXBlID0gcHJpdi0+bnVtX3BpcGVzOworCWludCByZXQ7CisJaW50IGk7CisKKwltdGtfY3J0YyA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbXRrX2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IW10a19jcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW10a19jcnRjLT5jb25maWdfcmVncyA9 IHByaXYtPmNvbmZpZ19yZWdzOworCW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBhdGhfbGVuOwor CW10a19jcnRjLT5kZHBfY29tcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIG10a19jcnRjLT5k ZHBfY29tcF9uciwKKwkJCQkJCXNpemVvZigqbXRrX2NydGMtPmRkcF9jb21wKSwKKwkJCQkJCUdG UF9LRVJORUwpOworCisJbXRrX2NydGMtPm11dGV4ID0gbXRrX2Rpc3BfbXV0ZXhfZ2V0KHByaXYt Pm11dGV4X2RldiwgcGlwZSk7CisJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgpKSB7CisJCXJl dCA9IFBUUl9FUlIobXRrX2NydGMtPm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g Z2V0IG11dGV4OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAw OyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJZW51bSBtdGtfZGRwX2NvbXBf aWQgY29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXA7CisJCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBf aWRdOworCQlpZiAoIW5vZGUpIHsKKwkJCWRldl9lcnIoZGV2LCAiQ29tcG9uZW50ICVkIGlzIGRp c2FibGVkIG9yIG1pc3NpbmdcbiIsCisJCQkJY29tcF9pZCk7CisJCQlyZXQgPSAtRU5PREVWOwor CQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9p ZF07CisJCWlmICghY29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21wb25lbnQgJXMgbm90IGlu aXRpYWxpemVkXG4iLAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOwor CQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQlyZXQgPSBjbGtfcHJlcGFyZShjb21wLT5jbGsp OworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUg Y2xvY2sgZm9yIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lLCByZXQp OworCQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBj b21wOworCX0KKworCWZvciAoenBvcyA9IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykg eworCQl0eXBlID0gKHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQko enBvcyA9PSAxKSA/IERSTV9QTEFORV9UWVBFX0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQ RV9PVkVSTEFZOworCQlyZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBs YW5lc1t6cG9zXSwKKwkJCQkgICAgIEJJVChwaXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQp CisJCQlnb3RvIHVucHJlcGFyZTsKKwl9CisKKwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1f ZGV2LCBtdGtfY3J0YywgJm10a19jcnRjLT5wbGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMt PnBsYW5lc1sxXS5iYXNlLCBwaXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7 CisKKwlwcml2LT5jcnRjW3BpcGVdID0gJm10a19jcnRjLT5iYXNlOworCXByaXYtPm51bV9waXBl cysrOworCisJcmV0dXJuIDA7CisKK3VucHJlcGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNs a191bnByZXBhcmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCisJcmV0dXJuIHJldDsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi44MWU1NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisj ZGVmaW5lIE1US19EUk1fQ1JUQ19ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNs dWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisj ZGVmaW5lIE9WTF9MQVlFUl9OUgk0CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhz dHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1f Y3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQg cGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19jaGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpOwordm9pZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2 b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2Rk cF9jb21wICpvdmwpOworaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug KmRybV9kZXYsCisJCQljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAqcGF0aCwKKwkJCXVuc2ln bmVkIGludCBwYXRoX2xlbik7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0NSVENfSCAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4xNjU4NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZGRwLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNs dWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2Rl ZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRfRU4JMHgwNDAKKyNkZWZpbmUgRElT UF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOCTB4MDQ0CisjZGVmaW5lIERJU1BfUkVHX0NP TkZJR19ESVNQX09EX01PVVRfRU4JCTB4MDQ4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQ X0dBTU1BX01PVVRfRU4JMHgwNGMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9N T1VUX0VOCTB4MDUwCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU4J MHgwODQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IxX1NFTF9JTgkweDA4OAor I2RlZmluZSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTgkJMHgwYWMKKyNkZWZpbmUgRElTUF9S RUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTgkweDBjOAorI2RlZmluZSBESVNQX1JFR19DT05G SUdfTU1TWVNfQ0dfQ09OMAkJMHgxMDAKKworI2RlZmluZSBESVNQX1JFR19NVVRFWF9FTihuKQko MHgyMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCAr IDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX01PRChuKQkoMHgyYyArIDB4MjAg KiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX1NPRihuKQkoMHgzMCArIDB4MjAgKiAobikp CisKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZMMAkJQklUKDExKQorI2RlZmluZSBNVVRFWF9N T0RfRElTUF9PVkwxCQlCSVQoMTIpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQo MTMpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUExCQlCSVQoMTQpCisjZGVmaW5lIE1VVEVY X01PRF9ESVNQX1JETUEyCQlCSVQoMTUpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlC SVQoMTYpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUExCQlCSVQoMTcpCisjZGVmaW5lIE1V VEVYX01PRF9ESVNQX0NPTE9SMAkJQklUKDE4KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xP UjEJCUJJVCgxOSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQUFMCQlCSVQoMjApCisjZGVmaW5l IE1VVEVYX01PRF9ESVNQX0dBTU1BCQlCSVQoMjEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VG T0UJCUJJVCgyMikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMAkJQklUKDIzKQorI2RlZmlu ZSBNVVRFWF9NT0RfRElTUF9QV00xCQlCSVQoMjQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09E CQlCSVQoMjUpCisKKyNkZWZpbmUgTVVURVhfU09GX1NJTkdMRV9NT0RFCQkwCisjZGVmaW5lIE1V VEVYX1NPRl9EU0kwCQkJMQorI2RlZmluZSBNVVRFWF9TT0ZfRFNJMQkJCTIKKyNkZWZpbmUgTVVU RVhfU09GX0RQSTAJCQkzCisKKyNkZWZpbmUgT1ZMMF9NT1VUX0VOX0NPTE9SMAkJMHgxCisjZGVm aW5lIE9EX01PVVRfRU5fUkRNQTAJCTB4MQorI2RlZmluZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgx CisjZGVmaW5lIENPTE9SMF9TRUxfSU5fT1ZMMAkJMHgxCisjZGVmaW5lIE9WTDFfTU9VVF9FTl9D T0xPUjEJCTB4MQorI2RlZmluZSBHQU1NQV9NT1VUX0VOX1JETUExCQkweDEKKyNkZWZpbmUgUkRN QTFfTU9VVF9EUEkwCQkJMHgyCisjZGVmaW5lIERQSTBfU0VMX0lOX1JETUExCQkweDEKKyNkZWZp bmUgQ09MT1IxX1NFTF9JTl9PVkwxCQkweDEKKworc3RydWN0IG10a19kaXNwX211dGV4IHsKKwlp bnQgaWQ7CisJYm9vbCBjbGFpbWVkOworfTsKKworc3RydWN0IG10a19kZHAgeworCXN0cnVjdCBk ZXZpY2UJCQkqZGV2OworCXN0cnVjdCBjbGsJCQkqY2xrOworCXZvaWQgX19pb21lbQkJCSpyZWdz OworCXN0cnVjdCBtdGtfZGlzcF9tdXRleAkJbXV0ZXhbMTBdOworfTsKKworc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGludCBtdXRleF9tb2RbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0geworCVtERFBf Q09NUE9ORU5UX0FBTF0gPSBNVVRFWF9NT0RfRElTUF9BQUwsCisJW0REUF9DT01QT05FTlRfQ09M T1IwXSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdID0g TVVURVhfTU9EX0RJU1BfQ09MT1IxLAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXSA9IE1VVEVYX01P RF9ESVNQX0dBTU1BLAorCVtERFBfQ09NUE9ORU5UX09EXSA9IE1VVEVYX01PRF9ESVNQX09ELAor CVtERFBfQ09NUE9ORU5UX09WTDBdID0gTVVURVhfTU9EX0RJU1BfT1ZMMCwKKwlbRERQX0NPTVBP TkVOVF9PVkwxXSA9IE1VVEVYX01PRF9ESVNQX09WTDEsCisJW0REUF9DT01QT05FTlRfUFdNMF0g PSBNVVRFWF9NT0RfRElTUF9QV00wLAorCVtERFBfQ09NUE9ORU5UX1BXTTFdID0gTVVURVhfTU9E X0RJU1BfUFdNMSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1B MCwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMSwKKwlbRERQ X0NPTVBPTkVOVF9SRE1BMl0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMiwKKwlbRERQX0NPTVBPTkVO VF9VRk9FXSA9IE1VVEVYX01PRF9ESVNQX1VGT0UsCisJW0REUF9DT01QT05FTlRfV0RNQTBdID0g TVVURVhfTU9EX0RJU1BfV0RNQTAsCisJW0REUF9DT01QT05FTlRfV0RNQTFdID0gTVVURVhfTU9E X0RJU1BfV0RNQTEsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfbW91dF9lbihl bnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5l eHQsCisJCQkJICAgIHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7 CisKKwlpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05F TlRfQ09MT1IwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VO OworCQl2YWx1ZSA9IE9WTDBfTU9VVF9FTl9DT0xPUjA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQ X0NPTVBPTkVOVF9PRCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRNQTApIHsKKwkJKmFkZHIg PSBESVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VUX0VOOworCQl2YWx1ZSA9IE9EX01PVVRfRU5f UkRNQTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9VRk9FICYmIG5leHQgPT0g RERQX0NPTVBPTkVOVF9EU0kwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfVUZP RV9NT1VUX0VOOworCQl2YWx1ZSA9IFVGT0VfTU9VVF9FTl9EU0kwOworCX0gZWxzZSBpZiAoY3Vy ID09IEREUF9DT01QT05FTlRfT1ZMMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7 CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOOworCQl2YWx1ZSA9 IE9WTDFfTU9VVF9FTl9DT0xPUjE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9H QU1NQSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRNQTEpIHsKKwkJKmFkZHIgPSBESVNQX1JF R19DT05GSUdfRElTUF9HQU1NQV9NT1VUX0VOOworCQl2YWx1ZSA9IEdBTU1BX01PVVRfRU5fUkRN QTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IERE UF9DT01QT05FTlRfRFBJMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUEx X01PVVRfRU47CisJCXZhbHVlID0gUkRNQTFfTU9VVF9EUEkwOworCX0gZWxzZSB7CisJCXZhbHVl ID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRr X2RkcF9zZWxfaW4oZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2Rk cF9jb21wX2lkIG5leHQsCisJCQkJICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVk IGludCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0g RERQX0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9D T0xPUjBfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMF9TRUxfSU5fT1ZMMDsKKwl9IGVsc2UgaWYg KGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkw KSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU47CisJCXZhbHVlID0gRFBJ MF9TRUxfSU5fUkRNQTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYm IG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05G SUdfRElTUF9DT0xPUjFfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMV9TRUxfSU5fT1ZMMTsKKwl9 IGVsc2UgeworCQl2YWx1ZSA9IDA7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIG10 a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAg ICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBf aWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0g bXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcg PSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKKwkJd3JpdGVsX3Jl bGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOworCX0KKworCXZhbHVlID0gbXRrX2RkcF9z ZWxfaW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3Jl bGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcs IGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQorCit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBf ZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRw X2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5z aWduZWQgaW50IGFkZHIsIHZhbHVlLCByZWc7CisKKwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihj dXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChj b25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZp Z19yZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQs ICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVn cyArIGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsg YWRkcik7CisJfQorfQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dl dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2Rk cCAqZGRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaWQgPj0gMTApCisJCXJldHVy biBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChkZHAtPm11dGV4W2lkXS5jbGFpbWVkKQorCQlyZXR1 cm4gRVJSX1BUUigtRUJVU1kpOworCisJZGRwLT5tdXRleFtpZF0uY2xhaW1lZCA9IHRydWU7CisK KwlyZXR1cm4gJmRkcC0+bXV0ZXhbaWRdOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3B1dChz dHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBj b250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+ aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlt dXRleC0+Y2xhaW1lZCA9IGZhbHNlOworfQorCitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShz dHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBj b250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+ aWRdKTsKKwlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBt dGtfZGlzcF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKK3sK KwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2Rk cCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRk cC0+Y2xrKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9hZGRfY29tcChzdHJ1Y3QgbXRrX2Rp c3BfbXV0ZXggKm11dGV4LAorCQkJICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlz dHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwK KwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5f T04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJ Y2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9EU0kwOworCQlicmVh azsKKwljYXNlIEREUF9DT01QT05FTlRfRFNJMToKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJ CWJyZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFBJ MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAtPnJlZ3Mg KyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJlZyB8PSBtdXRleF9tb2RbaWRd OworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRCht dXRleC0+aWQpKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5y ZWdzICsgRElTUF9SRUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworfQorCit2b2lkIG10a19kaXNw X211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51 bSBtdGtfZGRwX2NvbXBfaWQgaWQpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5l cl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOwor CXVuc2lnbmVkIGludCByZWc7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0g bXV0ZXgpOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kwOgorCWNh c2UgRERQX0NPTVBPTkVOVF9EU0kxOgorCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQl3cml0 ZWxfcmVsYXhlZChNVVRFWF9TT0ZfU0lOR0xFX01PREUsCisJCQkgICAgICAgZGRwLT5yZWdzICsg RElTUF9SRUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQly ZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+ aWQpKTsKKwkJcmVnICY9IH5tdXRleF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRk cC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJYnJlYWs7CisJfQor fQorCit2b2lkIG10a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11 dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVj dCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+ bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwoMSwgZGRwLT5yZWdzICsgRElT UF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZGlz YWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpk ZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFtt dXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7 CisKKwl3cml0ZWwoMCwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7 Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19k ZHAgKmRkcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGk7CisKKwlkZHAgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKmRkcCksIEdGUF9LRVJORUwpOworCWlmICghZGRwKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQlkZHAtPm11dGV4 W2ldLmlkID0gaTsKKworCWRkcC0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYg KElTX0VSUihkZHAtPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2Nr XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGRwLT5jbGspOworCX0KKworCXJlZ3MgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRkcC0+cmVncyA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19FUlIoZGRwLT5yZWdzKSkg eworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBtYXAgbXV0ZXggcmVnaXN0ZXJzXG4iKTsKKwkJ cmV0dXJuIFBUUl9FUlIoZGRwLT5yZWdzKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCBkZHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZGRwX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsg LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtbXV0ZXgiIH0sCisJe30sCit9Owor TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZGRwX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kZHBfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtf ZGRwX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2RkcF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJ CS5uYW1lCT0gIm1lZGlhdGVrLWRkcCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2Zf bWF0Y2hfdGFibGUgPSBkZHBfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxh dGZvcm1fZHJpdmVyKG10a19kZHBfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZGRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjMTE3NQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCkBA IC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj aWZuZGVmIE1US19EUk1fRERQX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBfSAorCisjaW5jbHVkZSAi bXRrX2RybV9kZHBfY29tcC5oIgorCitzdHJ1Y3QgcmVnbWFwOworc3RydWN0IGRldmljZTsKK3N0 cnVjdCBtdGtfZGlzcF9tdXRleDsKKwordm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgodm9p ZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1 ciwKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOwordm9pZCBtdGtfZGRwX3Jl bW92ZV9jb21wX2Zyb21fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJCSAgIGVu dW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0 KTsKKworc3RydWN0IG10a19kaXNwX211dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpOworaW50IG10a19kaXNwX211dGV4X3ByZXBhcmUo c3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2FkZF9j b21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9j b21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9t dXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlz cF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChzdHJ1Y3Qg bXRrX2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3Zv aWQgbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgp Owordm9pZCBtdGtfZGlzcF9tdXRleF9wdXQoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7 CisKKyNlbmRpZiAvKiBNVEtfRFJNX0REUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZGRwX2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z OTcwZmNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZGRwX2NvbXAuYwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx NSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3JzOgorICoJWVQgU2hlbiA8eXQuc2hlbkBtZWRpYXRl ay5jb20+CisgKglDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xr Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0u aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5o IgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX09EX0VOCQkJ CTB4MDAwMAorI2RlZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAorI2RlZmluZSBESVNQX09E X0lOVFNUQQkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCisjZGVmaW5l IERJU1BfT0RfU0laRQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJCQkw eDAwMDAKKworI2RlZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgwNDAwCisjZGVmaW5lIERJ U1BfQ09MT1JfU1RBUlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4MGM1 MAorI2RlZmluZSBESVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisjZGVmaW5lCU9EX1JFTEFZ X01PREUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgyKQorCisjZGVmaW5lCUNP TE9SX0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykKKwor c3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1 bnNpZ25lZCBpbnQgdywKKwkJCSAgICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVm cmVzaCkKK3sKKwl3cml0ZWwodywgY29tcC0+cmVncyArIERJU1BfQ09MT1JfV0lEVEgpOworCXdy aXRlbChoLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9IRUlHSFQpOworfQorCitzdGF0aWMgdm9p ZCBtdGtfY29sb3Jfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwo Q09MT1JfQllQQVNTX0FMTCB8IENPTE9SX1NFUV9TRUwsCisJICAgICAgIGNvbXAtPnJlZ3MgKyBE SVNQX0NPTE9SX0NGR19NQUlOKTsKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9DT0xP Ul9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19kZHBf Y29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25l ZCBpbnQgdnJlZnJlc2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsgRElT UF9PRF9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtfZGRw X2NvbXAgKmNvbXApCit7CisJd3JpdGVsKE9EX1JFTEFZX01PREUsIGNvbXAtPnJlZ3MgKyBESVNQ X09EX0NGRyk7CisJd3JpdGVsKDEsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKK30KKworc3Rh dGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3 cml0ZWwoVUZPX0JZUEFTUywgY29tcC0+cmVncyArIERJU1BfUkVHX1VGT19TVEFSVCk7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvciA9IHsKKwku Y29uZmlnID0gbXRrX2NvbG9yX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfY29sb3Jfc3RhcnQsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfb2QgPSB7CisJ LmNvbmZpZyA9IG10a19vZF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7CisJLnN0 YXJ0ID0gbXRrX3Vmb2Vfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10 a19kZHBfY29tcF9zdGVtW01US19ERFBfQ09NUF9UWVBFX01BWF0gPSB7CisJW01US19ESVNQX09W TF0gPSAib3ZsIiwKKwlbTVRLX0RJU1BfUkRNQV0gPSAicmRtYSIsCisJW01US19ESVNQX1dETUFd ID0gIndkbWEiLAorCVtNVEtfRElTUF9DT0xPUl0gPSAiY29sb3IiLAorCVtNVEtfRElTUF9BQUxd ID0gImFhbCIsCisJW01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIsCisJW01US19ESVNQX1VGT0Vd ID0gInVmb2UiLAorCVtNVEtfRFNJXSA9ICJkc2kiLAorCVtNVEtfRFBJXSA9ICJkcGkiLAorCVtN VEtfRElTUF9QV01dID0gInB3bSIsCisJW01US19ESVNQX01VVEVYXSA9ICJtdXRleCIsCisJW01U S19ESVNQX09EXSA9ICJvZCIsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKKwll bnVtIG10a19kZHBfY29tcF90eXBlIHR5cGU7CisJaW50IGFsaWFzX2lkOworCWNvbnN0IHN0cnVj dCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBt dGtfZGRwX2NvbXBfbWF0Y2ggbXRrX2RkcF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9 IHsKKwlbRERQX0NPTVBPTkVOVF9BQUxdCT0geyBNVEtfRElTUF9BQUwsCTAsIE5VTEwgfSwKKwlb RERQX0NPTVBPTkVOVF9DT0xPUjBdCT0geyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9 LAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0JPSB7IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2Nv bG9yIH0sCisJW0REUF9DT01QT05FTlRfRFBJMF0JPSB7IE1US19EUEksCQkwLCBOVUxMIH0sCisJ W0REUF9DT01QT05FTlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCBOVUxMIH0sCisJW0REUF9DT01Q T05FTlRfRFNJMV0JPSB7IE1US19EU0ksCQkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfR0FN TUFdCT0geyBNVEtfRElTUF9HQU1NQSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9 IHsgTVRLX0RJU1BfT0QsCTAsICZkZHBfb2QgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsg TVRLX0RJU1BfT1ZMLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMV0JPSB7IE1US19E SVNQX09WTCwJMSwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9Q V00sCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEs CTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0JPSB7IE1US19ESVNQX1JETUEsCTEs IE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0JPSB7IE1US19ESVNQX1JETUEsCTIsIE5V TEwgfSwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRkcF91 Zm9lIH0sCisJW0REUF9DT01QT05FTlRfV0RNQTBdCT0geyBNVEtfRElTUF9XRE1BLAkwLCBOVUxM IH0sCisJW0REUF9DT01QT05FTlRfV0RNQTFdCT0geyBNVEtfRElTUF9XRE1BLAkxLCBOVUxMIH0s Cit9OworCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUs CisJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBvZl9h bGlhc19nZXRfaWQobm9kZSwgbXRrX2RkcF9jb21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50IGk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsK KwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAgKGlk IDwgMCB8fCBpZCA9PSBtdGtfZGRwX21hdGNoZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJuIGk7 CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3RydWN0 IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJICAg ICAgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3MpCit7CisJZW51bSBtdGtf ZGRwX2NvbXBfdHlwZSB0eXBlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlOworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxhcmJfcGRldjsKKworCWlmIChjb21wX2lkIDwgMCB8fCBj b21wX2lkID49IEREUF9DT01QT05FTlRfSURfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNv bXAtPmlkID0gY29tcF9pZDsKKwljb21wLT5mdW5jcyA9IGZ1bmNzID86IG10a19kZHBfbWF0Y2hl c1tjb21wX2lkXS5mdW5jczsKKworCWlmIChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJMCB8 fAorCSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfRFNJMCB8fAorCSAgICBjb21wX2lkID09 IEREUF9DT01QT05FTlRfUFdNMCkgeworCQljb21wLT5yZWdzID0gTlVMTDsKKwkJY29tcC0+Y2xr ID0gTlVMTDsKKwkJY29tcC0+aXJxID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcC0+cmVn cyA9IG9mX2lvbWFwKG5vZGUsIDApOworCWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwgMCk7 CisJY29tcC0+Y2xrID0gb2ZfY2xrX2dldChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNvbXAtPmNs aykpCisJCWNvbXAtPmNsayA9IE5VTEw7CisKKwl0eXBlID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBf aWRdLnR5cGU7CisKKwkvKiBPbmx5IERNQSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUgTEFS QiBwcm9wZXJ0eSAqLworCWNvbXAtPmxhcmJfZGV2ID0gTlVMTDsKKwlpZiAodHlwZSAhPSBNVEtf RElTUF9PVkwgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9SRE1BICYmCisJICAgIHR5cGUgIT0g TVRLX0RJU1BfV0RNQSkKKwkJcmV0dXJuIDA7CisKKwlsYXJiX25vZGUgPSBvZl9wYXJzZV9waGFu ZGxlKG5vZGUsICJtZWRpYXRlayxsYXJiIiwgMCk7CisJaWYgKCFsYXJiX25vZGUpIHsKKwkJZGV2 X2VycihkZXYsCisJCQkiTWlzc2luZyBtZWRpYWRlayxsYXJiIHBoYW5kbGUgaW4gJXMgbm9kZVxu IiwKKwkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxhcmJf cGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobGFyYl9ub2RlKTsKKwlpZiAoIWxhcmJfcGRl dikgeworCQlkZXZfd2FybihkZXYsICJXYWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwKKwkJ CSBsYXJiX25vZGUtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisJCXJl dHVybiAtRVBST0JFX0RFRkVSOworCX0KKwlvZl9ub2RlX3B1dChsYXJiX25vZGUpOworCisJY29t cC0+bGFyYl9kZXYgPSAmbGFyYl9wZGV2LT5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10 a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0t PmRldl9wcml2YXRlOworCisJaWYgKHByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKKwkJcmV0 dXJuIC1FQlVTWTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7CisJcmV0 dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZp Y2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w cml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXByaXZhdGUtPmRkcF9jb21w W2NvbXAtPmlkXSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9kZHBfY29tcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZGRwX2NvbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzYmE5Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2Nv bXAuaApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRl ayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICovCisKKyNpZm5kZWYgTVRLX0RSTV9ERFBfQ09NUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0NP TVBfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBk ZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0 IG10a19wbGFuZV9zdGF0ZTsKKworZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB7CisJTVRLX0RJU1Bf T1ZMLAorCU1US19ESVNQX1JETUEsCisJTVRLX0RJU1BfV0RNQSwKKwlNVEtfRElTUF9DT0xPUiwK KwlNVEtfRElTUF9BQUwsCisJTVRLX0RJU1BfR0FNTUEsCisJTVRLX0RJU1BfVUZPRSwKKwlNVEtf RFNJLAorCU1US19EUEksCisJTVRLX0RJU1BfUFdNLAorCU1US19ESVNQX01VVEVYLAorCU1US19E SVNQX09ELAorCU1US19ERFBfQ09NUF9UWVBFX01BWCwKK307CisKK2VudW0gbXRrX2RkcF9jb21w X2lkIHsKKwlERFBfQ09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMCwKKwlERFBf Q09NUE9ORU5UX0NPTE9SMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCisJRERQX0NPTVBPTkVOVF9E U0kwLAorCUREUF9DT01QT05FTlRfRFNJMSwKKwlERFBfQ09NUE9ORU5UX0dBTU1BLAorCUREUF9D T01QT05FTlRfT0QsCisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9DT01QT05FTlRfT1ZMMSwK KwlERFBfQ09NUE9ORU5UX1BXTTAsCisJRERQX0NPTVBPTkVOVF9QV00xLAorCUREUF9DT01QT05F TlRfUkRNQTAsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX1JETUEyLAor CUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX1dETUEwLAorCUREUF9DT01QT05F TlRfV0RNQTEsCisJRERQX0NPTVBPTkVOVF9JRF9NQVgsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9j b21wOworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKKwl2b2lkICgqY29uZmlnKShzdHJ1 Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJICAgICAgIHVuc2lnbmVk IGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IG10 a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKnN0b3ApKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv bXApOworCXZvaWQgKCplbmFibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBz dHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCXZvaWQgKCpkaXNhYmxlX3ZibGFuaykoc3RydWN0IG10 a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKmxheWVyX29uKShzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfb2ZmKShzdHJ1Y3QgbXRr X2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfY29uZmln KShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJICAgICBz dHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21w IHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWludCBpcnE7CisJ c3RydWN0IGRldmljZSAqbGFyYl9kZXY7CisJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQ7CisJY29u c3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgaW5saW5l IHZvaWQgbXRrX2RkcF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJ CSAgICAgICB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgsCisJCQkJICAgICAgIHVuc2ln bmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmNv bmZpZykKKwkJY29tcC0+ZnVuY3MtPmNvbmZpZyhjb21wLCB3LCBoLCB2cmVmcmVzaCk7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RhcnQoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPnN0YXJ0KQorCQlj b21wLT5mdW5jcy0+c3RhcnQoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRw X2NvbXBfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5j cyAmJiBjb21wLT5mdW5jcy0+c3RvcCkKKwkJY29tcC0+ZnVuY3MtPnN0b3AoY29tcCk7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRr X2RkcF9jb21wICpjb21wLAorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ aWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5lbmFibGVfdmJsYW5rKQorCQljb21wLT5m dW5jcy0+ZW5hYmxlX3ZibGFuayhjb21wLCBjcnRjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk IG10a19kZHBfY29tcF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQor eworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCisJCWNv bXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFuayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk IG10a19kZHBfY29tcF9sYXllcl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkg dW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxh eWVyX29uKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAq Y29tcCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBj b21wLT5mdW5jcy0+bGF5ZXJfb2ZmKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKGNvbXAsIGlk eCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0 cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCwKKwkJ CQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoY29tcC0+ZnVu Y3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmxheWVyX2Nv bmZpZyhjb21wLCBpZHgsIHN0YXRlKTsKK30KKworaW50IG10a19kZHBfY29tcF9nZXRfaWQoc3Ry dWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5 cGUpOworaW50IG10a19kZHBfY29tcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl dmljZV9ub2RlICpjb21wX25vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs IGVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtf ZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKTsKK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0 IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19k ZHBfY29tcF91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRw X2NvbXAgKmNvbXApOworCisjZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmQyNjhlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9kcnYuYwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsu Y29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq LworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgor I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0 Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nv bXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvb2Zf YWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGlu dXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAi bXRrX2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAi bXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2Ry bV9nZW0uaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAibWVkaWF0ZWsiCisjZGVmaW5lIERSSVZF Ul9ERVNDICJNZWRpYXRlayBTb0MgRFJNIgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxNTA1MTMi CisjZGVmaW5lIERSSVZFUl9NQUpPUiAxCisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisKK3N0YXRp YyB2b2lkIG10a19hdG9taWNfc2NoZWR1bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0 ZSwKKwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJcHJpdmF0ZS0+Y29t bWl0LnN0YXRlID0gc3RhdGU7CisJc2NoZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0Lndvcmsp OworfQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9w bGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBpKQorCQltdGtfZmJfd2Fp dChwbGFuZS0+c3RhdGUtPmZiKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19jb21wbGV0 ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJt OworCisJbXRrX2F0b21pY193YWl0X2Zvcl9mZW5jZXMoc3RhdGUpOworCisJZHJtX2F0b21pY19o ZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19o ZWxwZXJfY29tbWl0X3BsYW5lcyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBl cl93YWl0X2Zvcl92YmxhbmtzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFu dXBfcGxhbmVzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Cit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3Jr LAorCQkJc3RydWN0IG10a19kcm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21p Y19jb21wbGV0ZShwcml2YXRlLCBwcml2YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMg aW50IG10a19hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlz dHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQg cmV0OworCisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0 ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNv bW1pdC5sb2NrKTsKKwlmbHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1f YXRvbWljX2hlbHBlcl9zd2FwX3N0YXRlKGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQlt dGtfYXRvbWljX3NjaGVkdWxlKHByaXZhdGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNf Y29tcGxldGUocHJpdmF0ZSwgc3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21t aXQubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9k ZV9jb25maWdfZnVuY3MgbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRl ID0gbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19o ZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisK K3N0YXRpYyBjb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlE RFBfQ09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVO VF9BQUwsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9D T01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00w LAorfTsKKworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10g PSB7CisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9D T01QT05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQ STAsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRybSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJp dmF0ZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXQ7CisKKwlpZiAo IWlvbW11X3ByZXNlbnQoJnBsYXRmb3JtX2J1c190eXBlKSkKKwkJcmV0dXJuIC1FUFJPQkVfREVG RVI7CisKKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9ub2Rl KTsKKwlpZiAoIXBkZXYpIHsKKwkJZGV2X2Vycihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3At bXV0ZXggZGV2aWNlICVzXG4iLAorCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsK KwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RF RkVSOworCX0KKwlwcml2YXRlLT5tdXRleF9kZXYgPSAmcGRldi0+ZGV2OworCisJZHJtX21vZGVf Y29uZmlnX2luaXQoZHJtKTsKKworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQ7CisJ ZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gNjQ7CisKKwkvKgorCSAqIHNldCBtYXggd2lk dGggYW5kIGhlaWdodCBhcyBkZWZhdWx0IHZhbHVlKDQwOTZ4NDA5NikuCisJICogdGhpcyB2YWx1 ZSB3b3VsZCBiZSB1c2VkIHRvIGNoZWNrIGZyYW1lYnVmZmVyIHNpemUgbGltaXRhdGlvbgorCSAq IGF0IGRybV9tb2RlX2FkZGZiKCkuCisJICovCisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgg PSA0MDk2OworCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDQwOTY7CisJZHJtLT5tb2Rl X2NvbmZpZy5mdW5jcyA9ICZtdGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzOworCisJcmV0ID0gY29t cG9uZW50X2JpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Nv bmZpZ19jbGVhbnVwOworCisJLyoKKwkgKiBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gZml4ZWQg ZGF0YSBzdHJlYW1zLCBlYWNoIHN0YXRpY2FsbHkKKwkgKiBhc3NpZ25lZCB0byBhIGNydGM6CisJ ICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMCAu Li4KKwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9tYWluLCBB UlJBWV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21w b25lbnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4gUkRN QTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9l eHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJf Y29tcG9uZW50X3VuYmluZDsKKworCS8qCisJICogV2UgZG9uJ3QgdXNlIHRoZSBkcm1faXJxX2lu c3RhbGwoKSBoZWxwZXJzIHByb3ZpZGVkIGJ5IHRoZSBEUk0KKwkgKiBjb3JlLCBzbyB3ZSBuZWVk IHRvIHNldCB0aGlzIG1hbnVhbGx5IGluIG9yZGVyIHRvIGFsbG93IHRoZQorCSAqIERSTV9JT0NU TF9XQUlUX1ZCTEFOSyB0byBvcGVyYXRlIGNvcnJlY3RseS4KKwkgKi8KKwlkcm0tPmlycV9lbmFi bGVkID0gdHJ1ZTsKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBNQVhfQ1JUQyk7CisJaWYg KHJldCA8IDApCisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisKKwlkcm1fa21zX2hlbHBl cl9wb2xsX2luaXQoZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKKworCXJldHVy biAwOworCitlcnJfY29tcG9uZW50X3VuYmluZDoKKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0t PmRldiwgZHJtKTsKK2Vycl9jb25maWdfY2xlYW51cDoKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51 cChkcm0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9rbXNfZGVp bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5p KGRybSk7CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKKwljb21wb25lbnRfdW5iaW5kX2Fs bChkcm0tPmRldiwgZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworfQorCitz dGF0aWMgaW50IG10a19kcm1fdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJbXRr X2RybV9rbXNfZGVpbml0KGRybSk7CisJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtdGtf ZHJtX2dlbV92bV9vcHMgPSB7CisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0g ZHJtX2dlbV92bV9jbG9zZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIG10a19kcm1fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRy bV9vcGVuLAorCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gZHJt X2lvY3RsLAorCS5tbWFwID0gbXRrX2RybV9nZW1fbW1hcCwKKwkucG9sbCA9IGRybV9wb2xsLAor CS5yZWFkID0gZHJtX3JlYWQsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwg PSBkcm1fY29tcGF0X2lvY3RsLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2 ZXIgbXRrX2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VU IHwgRFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSB8CisJCQkgICBEUklWRVJfQVRPTUlDLAorCS51 bmxvYWQgPSBtdGtfZHJtX3VubG9hZCwKKworCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBkcm1fdmJs YW5rX2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmss CisJLmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rLAorCisJLmdl bV9mcmVlX29iamVjdCA9IG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0g Jm10a19kcm1fZ2VtX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUgPSBtdGtfZHJtX2dlbV9kdW1iX2Ny ZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gbXRrX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0LAor CS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKKworCS5wcmltZV9oYW5kbGVf dG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxl ID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1f Z2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1w b3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFi bGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBtdGtfZ2VtX3ByaW1lX2ltcG9ydF9z Z190YWJsZSwKKwkuZ2VtX3ByaW1lX21tYXAgPSBtdGtfZHJtX2dlbV9tbWFwX2J1ZiwKKwkuZm9w cyA9ICZtdGtfZHJtX2ZvcHMsCisKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5kZXNjID0gRFJJ VkVSX0RFU0MsCisJLmRhdGUgPSBEUklWRVJfREFURSwKKwkubWFqb3IgPSBEUklWRVJfTUFKT1Is CisJLm1pbm9yID0gRFJJVkVSX01JTk9SLAorfTsKKworc3RhdGljIGludCBjb21wYXJlX29mKHN0 cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09 IGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRl dik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlpbnQgcmV0OworCisJZHJtID0gZHJtX2Rl dl9hbGxvYygmbXRrX2RybV9kcml2ZXIsIGRldik7CisJaWYgKCFkcm0pCisJCXJldHVybiAtRU5P TUVNOworCisJZHJtX2Rldl9zZXRfdW5pcXVlKGRybSwgZGV2X25hbWUoZGV2KSk7CisKKwlyZXQg PSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2Zy ZWU7CisKKwlkcm0tPmRldl9wcml2YXRlID0gcHJpdmF0ZTsKKwlwcml2YXRlLT5kcm0gPSBkcm07 CisKKwlyZXQgPSBtdGtfZHJtX2ttc19pbml0KGRybSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8g ZXJyX3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0ZXI6CisJZHJtX2Rl dl91bnJlZ2lzdGVyKGRybSk7CitlcnJfZnJlZToKKwlkcm1fZGV2X3VucmVmKGRybSk7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV91bmJpbmQoc3RydWN0IGRldmljZSAq ZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKworCWRybV9wdXRfZGV2KHByaXZhdGUtPmRybSk7CisJcHJpdmF0ZS0+ZHJtID0g TlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyBtdGtf ZHJtX29wcyA9IHsKKwkuYmluZAkJPSBtdGtfZHJtX2JpbmQsCisJLnVuYmluZAkJPSBtdGtfZHJt X3VuYmluZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kZHBf Y29tcF9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNw LW92bCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09WTCB9LAorCXsgLmNvbXBhdGlibGUg PSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcmRtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1Bf UkRNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atd2RtYSIsICAu ZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfV0RNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0 ZWssbXQ4MTczLWRpc3AtY29sb3IiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfQ09MT1IgfSwK Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWFhbCIsICAgLmRhdGEgPSAo dm9pZCAqKU1US19ESVNQX0FBTH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt ZGlzcC1nYW1tYSIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9HQU1NQSwgfSwKKwl7IC5jb21w YXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXVmb2UiLCAgLmRhdGEgPSAodm9pZCAqKU1U S19ESVNQX1VGT0UgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kc2kiLCAg ICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EU0kgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlh dGVrLG10ODE3My1kcGkiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EUEkgfSwKKwl7IC5j b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW11dGV4IiwgLmRhdGEgPSAodm9pZCAq KU1US19ESVNQX01VVEVYIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlz cC1wd20iLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9QV00gfSwKKwl7IC5jb21wYXRpYmxl ID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW9kIiwgICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQ X09EIH0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IG10a19kcm1fcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owor CXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IHJlc291cmNlICptZW07 CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1h dGNoID0gTlVMTDsKKwlpbnQgcmV0OworCWludCBpOworCisJcHJpdmF0ZSA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdmF0ZSkKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZwcml2YXRlLT5jb21taXQubG9jayk7CisJ SU5JVF9XT1JLKCZwcml2YXRlLT5jb21taXQud29yaywgbXRrX2F0b21pY193b3JrKTsKKworCW1l bSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcHJp dmF0ZS0+Y29uZmlnX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlm IChJU19FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIocHJpdmF0 ZS0+Y29uZmlnX3JlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1tc3lz LWNvbmZpZyByZXNvdXJjZTogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor CS8qIEl0ZXJhdGUgb3ZlciBzaWJsaW5nIERJU1AgZnVuY3Rpb24gYmxvY2tzICovCisJZm9yX2Vh Y2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVudCwgbm9kZSkgeworCQljb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21w X3R5cGU7CisJCWludCBjb21wX2lkOworCisJCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShtdGtfZGRw X2NvbXBfZHRfaWRzLCBub2RlKTsKKwkJaWYgKCFvZl9pZCkKKwkJCWNvbnRpbnVlOworCisJCWlm ICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkgeworCQkJZGV2X2RiZyhkZXYsICJTa2lw cGluZyBkaXNhYmxlZCBjb21wb25lbnQgJXNcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJY29tcF90eXBlID0gKGVudW0gbXRrX2RkcF9jb21wX3R5cGUp b2ZfaWQtPmRhdGE7CisKKwkJaWYgKGNvbXBfdHlwZSA9PSBNVEtfRElTUF9NVVRFWCkgeworCQkJ cHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9mX25vZGVfZ2V0KG5vZGUpOworCQkJY29udGludWU7CisJ CX0KKworCQljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChub2RlLCBjb21wX3R5cGUpOwor CQlpZiAoY29tcF9pZCA8IDApIHsKKwkJCWRldl93YXJuKGRldiwgIlNraXBwaW5nIHVua25vd24g Y29tcG9uZW50ICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJY29udGludWU7CisJ CX0KKworCQlwcml2YXRlLT5jb21wX25vZGVbY29tcF9pZF0gPSBvZl9ub2RlX2dldChub2RlKTsK KworCQkvKgorCQkgKiBDdXJyZW50bHkgb25seSB0aGUgT1ZMLCBSRE1BLCBEU0ksIGFuZCBEUEkg YmxvY2tzIGhhdmUKKwkJICogc2VwYXJhdGUgY29tcG9uZW50IHBsYXRmb3JtIGRyaXZlcnMgYW5k IGluaXRpYWxpemUgdGhlaXIgb3duCisJCSAqIEREUCBjb21wb25lbnQgc3RydWN0dXJlLiBUaGUg b3RoZXJzIGFyZSBpbml0aWFsaXplZCBoZXJlLgorCQkgKi8KKwkJaWYgKGNvbXBfdHlwZSA9PSBN VEtfRElTUF9PVkwgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRElTUF9SRE1BIHx8CisJCSAg ICBjb21wX3R5cGUgPT0gTVRLX0RTSSB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EUEkpIHsK KwkJCWRldl9pbmZvKGRldiwgIkFkZGluZyBjb21wb25lbnQgbWF0Y2ggZm9yICVzXG4iLAorCQkJ CSBub2RlLT5mdWxsX25hbWUpOworCQkJY29tcG9uZW50X21hdGNoX2FkZChkZXYsICZtYXRjaCwg Y29tcGFyZV9vZiwgbm9kZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wOworCisJCQljb21wID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjb21wKSwgR0ZQX0tF Uk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJy X25vZGU7CisJCQl9CisKKwkJCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRldiwgbm9kZSwgY29t cCwgY29tcF9pZCwgTlVMTCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX25vZGU7CisKKwkJ CXByaXZhdGUtPmRkcF9jb21wW2NvbXBfaWRdID0gY29tcDsKKwkJfQorCX0KKworCWlmICghcHJp dmF0ZS0+bXV0ZXhfbm9kZSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGRpc3At bXV0ZXggbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX25vZGU7CisJfQor CisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IHByaXZhdGUpOworCisJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYs ICZtdGtfZHJtX29wcywgbWF0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BtOworCisJcmV0 dXJuIDA7CisKK2Vycl9wbToKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKK2Vycl9ub2RlOgor CW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCWZvciAoaSA9IDA7IGkgPCBERFBf Q09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlvZl9ub2RlX3B1dChwcml2YXRlLT5jb21wX25vZGVb aV0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2 YXRlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwljb21wb25lbnRf bWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RybV9vcHMpOworCXBtX3J1bnRpbWVfZGlzYWJs ZSgmcGRldi0+ZGV2KTsKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3Ig KGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJp dmF0ZS0+Y29tcF9ub2RlW2ldKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BN X1NMRUVQCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2 KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKGRybSk7 CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29u biwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50IG9sZF9k cG1zID0gY29ubi0+ZHBtczsKKworCQlpZiAoY29ubi0+ZnVuY3MtPmRwbXMpCisJCQljb25uLT5m dW5jcy0+ZHBtcyhjb25uLCBEUk1fTU9ERV9EUE1TX09GRik7CisKKwkJLyogU2V0IHRoZSBvbGQg bW9kZSBiYWNrIHRvIHRoZSBjb25uZWN0b3IgZm9yIHJlc3VtZSAqLworCQljb25uLT5kcG1zID0g b2xkX2RwbXM7CisJfQorCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZHJtKTsKKworCURSTV9ERUJV R19EUklWRVIoIm10a19kcm1fc3lzX3N1c3BlbmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IG10a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVj dCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm47CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOworCWxpc3RfZm9yX2VhY2hfZW50 cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50 IGRlc2lyZWRfbW9kZSA9IGNvbm4tPmRwbXM7CisKKwkJLyoKKwkJICogYXQgc3VzcGVuZCB0aW1l LCB3ZSBzYXZlIGRwbXMgdG8gY29ubmVjdG9yLT5kcG1zLAorCQkgKiByZXN0b3JlIHRoZSBvbGRf ZHBtcywgYW5kIGF0IGN1cnJlbnQgdGltZSwgdGhlIGNvbm5lY3RvcgorCQkgKiBkcG1zIHN0YXR1 cyBtdXN0IGJlIERSTV9NT0RFX0RQTVNfT0ZGLgorCQkgKi8KKwkJY29ubi0+ZHBtcyA9IERSTV9N T0RFX0RQTVNfT0ZGOworCisJCS8qCisJCSAqIElmIHRoZSBjb25uZWN0b3IgaGFzIGJlZW4gZGlz Y29ubmVjdGVkIGR1cmluZyBzdXNwZW5kLAorCQkgKiBkaXNjb25uZWN0IGl0IGZyb20gdGhlIGVu Y29kZXIgYW5kIGxlYXZlIGl0IG9mZi4gV2UnbGwgbm90aWZ5CisJCSAqIHVzZXJzcGFjZSBhdCB0 aGUgZW5kLgorCQkgKi8KKwkJaWYgKGNvbm4tPmZ1bmNzLT5kcG1zKQorCQkJY29ubi0+ZnVuY3Mt PmRwbXMoY29ubiwgZGVzaXJlZF9tb2RlKTsKKwl9CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChk cm0pOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZHJtKTsKKworCURSTV9ERUJVR19E UklWRVIoIm10a19kcm1fc3lzX3Jlc3VtZVxuIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwor c3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19kcm1fcG1fb3BzLCBtdGtfZHJtX3N5c19zdXNw ZW5kLAorCQkJIG10a19kcm1fc3lzX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIG10a19kcm1fb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxtdDgxNzMtbW1zeXMiLCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCT0gbXRrX2RybV9wcm9i ZSwKKwkucmVtb3ZlCT0gbXRrX2RybV9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAi bWVkaWF0ZWstZHJtIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2RybV9vZl9pZHMsCisJCS5w bSAgICAgPSAmbXRrX2RybV9wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyICogY29uc3QgbXRrX2RybV9kcml2ZXJzW10gPSB7CisJJm10a19kcm1fcGxhdGZv cm1fZHJpdmVyLAorCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAorCSZtdGtfZGlzcF9yZG1hX2RyaXZl ciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQoreworCWludCBy ZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJtX2RyaXZl cnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10a19kcm1fZHJp dmVyc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3Rl ciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10a19kcm1fZHJpdmVyc1tpXS0+ZHJpdmVy Lm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6 CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJt X2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG10 a19kcm1fZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0laRShtdGtf ZHJtX2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lz dGVyKG10a19kcm1fZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19kcm1faW5pdCk7 Cittb2R1bGVfZXhpdChtdGtfZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJZVCBTSEVOIDx5 dC5zaGVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgU29D IERSTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u N2E1Y2IxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2Rydi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVk aWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRFJWX0gKKyNkZWZpbmUgTVRLX0RSTV9EUlZfSAor CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisK KyNkZWZpbmUgTUFYX0NSVEMJMgorI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKKworc3RydWN0IGRl dmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1f ZGV2aWNlOworc3RydWN0IGRybV9mYl9oZWxwZXI7CitzdHJ1Y3QgZHJtX3Byb3BlcnR5Oworc3Ry dWN0IHJlZ21hcDsKKworc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRybTsKKworCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y1tNQVhfQ1JUQ107CisJdW5zaWduZWQg aW50IG51bV9waXBlczsKKworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbXV0ZXhfbm9kZTsKKwlzdHJ1 Y3QgZGV2aWNlICptdXRleF9kZXY7CisJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKmNvbXBfbm9kZVtERFBfQ09NUE9ORU5UX0lEX01BWF07CisJc3RydWN0 IG10a19kZHBfY29tcCAqZGRwX2NvbXBbRERQX0NPTVBPTkVOVF9JRF9NQVhdOworCisJc3RydWN0 IHsKKwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCQlzdHJ1Y3Qgd29ya19zdHJ1 Y3Qgd29yazsKKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBjb21taXQ7Cit9OworCitleHRlcm4g c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtf RFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoK KyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Zi X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1h LWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRlICJtdGtf ZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dl bS5oIgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisg KiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2Vt IG9iamVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyCWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8K KwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19m Yih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBk cm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJ cmV0dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0 ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1 Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2Vt X2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisK K3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRy bV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNl X3VubG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0g eworCS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95 ID0gbXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICpt dGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJY29u c3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50IHJldDsKKwor CWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtf ZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+YmFzZSwgbW9k ZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJf aW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJcbiIpOworCQlr ZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtf ZmI7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGluIGZiJ3MgZ2Vt IG9iamVjdCdzIHJlc2VydmF0aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1FUkVTVEFSVFNZ UyBpZiBpbnRlcnJ1cHRlZCwgZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3Ry dWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlmICghZmIpCisJ CXJldHVybiAwOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlpZiAoIWdlbSB8 fCAhZ2VtLT5kbWFfYnVmIHx8ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVybiAwOworCisJ cmVzdiA9IGdlbS0+ZG1hX2J1Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2Fp dF90aW1lb3V0X3JjdShyZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJ TUVPVVQpOworCS8qIE1BWF9TQ0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1FUkVTVEFSVFNZ UyBpZiBpbnRlcnJ1cHRlZCAqLworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQlyZXR1cm4gcmV0 OworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9k ZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy ICpjbWQpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVk IGludCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWlu dCByZXQ7CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAh PSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0 X2xvb2t1cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVy biBFUlJfUFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5w aXhlbF9mb3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0g KyB3aWR0aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNp emUgPCBzaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQor CisJbXRrX2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlm IChJU19FUlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5y ZWZlcmVuY2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgor CWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9Q VFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAor I2RlZmluZSBNVEtfRFJNX0ZCX0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0 X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19mYl93YWl0KHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19k cm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9m Yl9jbWQyICpjbWQpOworCisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjZiYzQ5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9nZW0uYwpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBN ZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2Vt Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRrX2RybV9nZW0u aCIKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1 Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtX29iajsKKwlpbnQgcmV0OworCisJc2l6ZSA9IHJv dW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisKKwltdGtfZ2VtX29iaiA9IGt6YWxsb2Moc2l6ZW9m KCptdGtfZ2VtX29iaiksIEdGUF9LRVJORUwpOworCWlmICghbXRrX2dlbV9vYmopCisJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsICZt dGtfZ2VtX29iai0+YmFzZSwgc2l6ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gaW5pdGlhbGl6ZSBnZW0gb2JqZWN0XG4iKTsKKwkJa2ZyZWUobXRrX2dlbV9vYmop OworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtfZ2VtX29iajsKK30K Kworc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9nZW1fY3JlYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCisJCQkJCSAgIHNpemVfdCBzaXplLCBib29sIGFsbG9jX2ttYXApCit7CisJ c3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iajsKKwlpbnQgcmV0OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2luaXQoZGV2LCBzaXpl KTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4gRVJSX0NBU1QobXRrX2dlbSk7CisK KwlvYmogPSAmbXRrX2dlbS0+YmFzZTsKKworCWluaXRfZG1hX2F0dHJzKCZtdGtfZ2VtLT5kbWFf YXR0cnMpOworCWRtYV9zZXRfYXR0cihETUFfQVRUUl9XUklURV9DT01CSU5FLCAmbXRrX2dlbS0+ ZG1hX2F0dHJzKTsKKworCWlmICghYWxsb2Nfa21hcCkKKwkJZG1hX3NldF9hdHRyKERNQV9BVFRS X05PX0tFUk5FTF9NQVBQSU5HLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKworCW10a19nZW0tPmNv b2tpZSA9IGRtYV9hbGxvY19hdHRycyhkZXYtPmRldiwgb2JqLT5zaXplLAorCQkJCQkgICZtdGtf Z2VtLT5kbWFfYWRkciwgR0ZQX0tFUk5FTCwKKwkJCQkJICAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsK KwlpZiAoIW10a19nZW0tPmNvb2tpZSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0 ZSAlenggYnl0ZSBkbWEgYnVmZmVyIiwgb2JqLT5zaXplKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJ Z290byBlcnJfZ2VtX2ZyZWU7CisJfQorCisJaWYgKGFsbG9jX2ttYXApCisJCW10a19nZW0tPmt2 YWRkciA9IG10a19nZW0tPmNvb2tpZTsKKworCURSTV9ERUJVR19EUklWRVIoImNvb2tpZSA9ICVw IGRtYV9hZGRyID0gJXBhZCBzaXplID0gJXp1XG4iLAorCQkJIG10a19nZW0tPmNvb2tpZSwgJm10 a19nZW0tPmRtYV9hZGRyLAorCQkJIHNpemUpOworCisJcmV0dXJuIG10a19nZW07CisKK2Vycl9n ZW1fZnJlZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJa2ZyZWUobXRrX2dlbSk7 CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVj dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2Jq ICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKworCWlmIChtdGtfZ2VtLT5zZykKKwkJ ZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dlbS0+c2cpOworCWVsc2UKKwkJZG1hX2Zy ZWVfYXR0cnMob2JqLT5kZXYtPmRldiwgb2JqLT5zaXplLCBtdGtfZ2VtLT5jb29raWUsCisJCQkg ICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJLyogcmVs ZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8KKwlkcm1fZ2VtX29iamVjdF9yZWxl YXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKworaW50IG10a19kcm1fZ2VtX2R1bWJf Y3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3Qg bXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisKKwlhcmdzLT5waXRjaCA9IERJ Vl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+c2l6ZSA9IGFy Z3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0 ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1 cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICogYWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFi bGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlk IHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShm aWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlpZiAocmV0KQorCQln b3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0 ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf dW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9oYW5kbGVfY3Jl YXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsKKwlyZXR1cm4g cmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRs ZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq OworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3By aXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9va3Vw IGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZHJtX2dl bV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCSpv ZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9iai0+dm1hX25vZGUpOworCURSTV9E RUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNldCk7CisKK291dDoKKwlkcm1fZ2Vt X29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCisKK3sKKwlpbnQgcmV0Owor CXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBvYmotPmRldjsKKworCS8qCisJICogZG1hX2FsbG9j X2F0dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0IHBhZ2UgdGFibGUgZm9yIG10a19nZW0sIHNvIGNs ZWFyCisJICogVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcF9vYmoo KS9kcm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJ dm1hLT52bV9wZ29mZiA9IDA7CisKKwlyZXQgPSBkbWFfbW1hcF9hdHRycyhkcm0tPmRldiwgdm1h LCBtdGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRyLAorCQkJICAgICBvYmotPnNpemUs ICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1h KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50 IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1h cChvYmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxw LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJ cmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFs bG9jYXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhl IHRhYmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQg YnkKKyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3 bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVj dCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19n ZW1fb2JqKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG9iai0+ZGV2OworCXN0cnVj dCBzZ190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3QgPSBremFsbG9jKHNpemVvZigqc2d0 KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwor CisJcmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKGRybS0+ZGV2LCBzZ3QsIG10a19nZW0tPmNv b2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwKKwkJCQkgICAgJm10 a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBh bGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOworCQlyZXR1cm4gRVJSX1BU UihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAq bXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZykK K3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisJc3RydWN0 IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOworCWRtYV9hZGRyX3QgZXhwZWN0ZWQ7 CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXpl KTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIobXRr X2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwlmb3JfZWFj aF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJaWYgKHNnX2RtYV9hZGRyZXNzKHMp ICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3RhYmxlIGlzIG5vdCBjb250aWd1b3Vz Iik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfZ2VtX2ZyZWU7CisJCX0KKwkJZXhw ZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9sZW4ocyk7CisJfQorCisJbXRrX2dl bS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwltdGtfZ2VtLT5zZyA9IHNn OworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJfZ2VtX2ZyZWU6CisJa2ZyZWUobXRr X2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyNzI1YQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5o CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5j LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor CisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBfTVRLX0RSTV9HRU1fSF8KKworI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsgZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUu CisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0gYSBuZXcgaGFuZGxlIHRvIHRoaXMg Z2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUo KS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2FsbG9jX2F0dHJzKCksIGtl ZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFkZHI6IGtlcm5lbCB2aXJ0dWFsIGFk ZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjogZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1 ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdlbSBidWZmZXIuCisgKgor ICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2ZlcnJlZCB0byB1c2VyIGFzIGttc19i by5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVyIHRocm91Z2gga21zX2Jv LmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29iaiB7CisJc3RydWN0IGRybV9nZW1f b2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9pZAkJCSprdmFkZHI7CisJZG1hX2Fk ZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlkbWFfYXR0cnM7CisJc3RydWN0IHNn X3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19nZW1fb2JqKHgpCWNvbnRhaW5lcl9v Zih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQorCit2b2lkIG10a19kcm1fZ2VtX2Zy ZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKTsKK3N0cnVjdCBtdGtfZHJtX2dl bV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkg ICB1bnNpZ25lZCBsb25nIHNpemUsIGJvb2wgYWxsb2Nfa21hcCk7CitpbnQgbXRrX2RybV9nZW1f ZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKK2ludCBt dGtfZHJtX2dlbV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJ CQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgaGFuZGxlLAorCQkJCXVpbnQ2NF90 ICpvZmZzZXQpOworaW50IG10a19kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Citz dHJ1Y3Qgc2dfdGFibGUgKm10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKTsKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBv cnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZyk7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYzg5ODc4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmln aHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBDSyBIdSA8Y2suaHVAbWVkaWF0 ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5o PgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f cGxhbmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJt dGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJt dGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKyNpbmNsdWRlICJtdGtfZHJt X3BsYW5lLmgiCisKK3N0YXRpYyBjb25zdCB1MzIgZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRf WFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKK307 CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9lbmFibGUoc3RydWN0IG10a19kcm1fcGxhbmUgKm10 a19wbGFuZSwgYm9vbCBlbmFibGUsCisJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwgc3RydWN0IGRy bV9yZWN0ICpkZXN0KQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19wbGFuZS0+ YmFzZTsKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0 ZShwbGFuZS0+c3RhdGUpOworCXVuc2lnbmVkIGludCBwaXRjaCwgZm9ybWF0OworCWludCB4LCB5 OworCisJaWYgKFdBUk5fT04oIXBsYW5lLT5zdGF0ZSB8fCAoZW5hYmxlICYmICFwbGFuZS0+c3Rh dGUtPmZiKSkpCisJCXJldHVybjsKKworCWlmIChwbGFuZS0+c3RhdGUtPmZiKSB7CisJCXBpdGNo ID0gcGxhbmUtPnN0YXRlLT5mYi0+cGl0Y2hlc1swXTsKKwkJZm9ybWF0ID0gcGxhbmUtPnN0YXRl LT5mYi0+cGl4ZWxfZm9ybWF0OworCX0gZWxzZSB7CisJCXBpdGNoID0gMDsKKwkJZm9ybWF0ID0g RFJNX0ZPUk1BVF9SR0JBODg4ODsKKwl9CisKKwl4ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3g7CisJ eSA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y195OworCisJaWYgKHggPCAwKSB7CisJCWFkZHIgLT0geCAq IDQ7CisJCXggPSAwOworCX0KKworCWlmICh5IDwgMCkgeworCQlhZGRyIC09IHkgKiBwaXRjaDsK KwkJeSA9IDA7CisJfQorCisJc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZW5hYmxlOworCXN0YXRl LT5wZW5kaW5nLnBpdGNoID0gcGl0Y2g7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gZm9ybWF0 OworCXN0YXRlLT5wZW5kaW5nLmFkZHIgPSBhZGRyOworCXN0YXRlLT5wZW5kaW5nLnggPSB4Owor CXN0YXRlLT5wZW5kaW5nLnkgPSB5OworCXN0YXRlLT5wZW5kaW5nLndpZHRoID0gZGVzdC0+eDIg LSBkZXN0LT54MTsKKwlzdGF0ZS0+cGVuZGluZy5oZWlnaHQgPSBkZXN0LT55MiAtIGRlc3QtPnkx OworCXdtYigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlcnMgYXJlIHNldCBiZWZv cmUgdXBkYXRlICovCisJc3RhdGUtPnBlbmRpbmcuZGlydHkgPSB0cnVlOworfQorCitzdGF0aWMg dm9pZCBtdGtfcGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0 IG10a19wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlpZiAocGxhbmUtPnN0YXRlKSB7CisJCWlmIChw bGFuZS0+c3RhdGUtPmZiKQorCQkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKHBsYW5lLT5z dGF0ZS0+ZmIpOworCisJCXN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7 CisJCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOworCX0gZWxzZSB7CisJCXN0YXRl ID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3RhdGUpCisJ CQlyZXR1cm47CisJCXBsYW5lLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKwl9CisKKwlzdGF0ZS0+ YmFzZS5wbGFuZSA9IHBsYW5lOworCXN0YXRlLT5wZW5kaW5nLmZvcm1hdCA9IERSTV9GT1JNQVRf UkdCNTY1OworfQorCitzdGF0aWMgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbXRrX3BsYW5lX2R1 cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgbXRrX3Bs YW5lX3N0YXRlICpvbGRfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsK KwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhzaXpl b2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisK KwlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgJnN0YXRl LT5iYXNlKTsKKworCVdBUk5fT04oc3RhdGUtPmJhc2UucGxhbmUgIT0gcGxhbmUpOworCisJc3Rh dGUtPnBlbmRpbmcgPSBvbGRfc3RhdGUtPnBlbmRpbmc7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNl OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCisJCQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQorewor CV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShwbGFuZSwgc3RhdGUpOwor CWtmcmVlKHRvX210a19wbGFuZV9zdGF0ZShzdGF0ZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9wbGFuZV9mdW5jcyBtdGtfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9 IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9h dG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBkcm1fcGxhbmVfY2xlYW51 cCwKKwkucmVzZXQgPSBtdGtfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg PSBtdGtfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IG10 a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgbXRrX3BsYW5lX2F0 b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgIHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUt PmZiOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlib29sIHZpc2libGU7 CisJc3RydWN0IGRybV9yZWN0IGRlc3QgPSB7CisJCS54MSA9IHN0YXRlLT5jcnRjX3gsCisJCS55 MSA9IHN0YXRlLT5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+Y3J0Y193 LAorCQkueTIgPSBzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNfaCwKKwl9OworCXN0cnVjdCBk cm1fcmVjdCBzcmMgPSB7CisJCS8qIDE2LjE2IGZpeGVkIHBvaW50ICovCisJCS54MSA9IHN0YXRl LT5zcmNfeCwKKwkJLnkxID0gc3RhdGUtPnNyY195LAorCQkueDIgPSBzdGF0ZS0+c3JjX3ggKyBz dGF0ZS0+c3JjX3csCisJCS55MiA9IHN0YXRlLT5zcmNfeSArIHN0YXRlLT5zcmNfaCwKKwl9Owor CXN0cnVjdCBkcm1fcmVjdCBjbGlwID0geyAwLCB9OworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7 CisKKwlpZiAoIW10a19mYl9nZXRfZ2VtX29iaihmYikpIHsKKwkJRFJNX0RFQlVHX0tNUygiYnVm ZmVyIGlzIG51bGxcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXN0YXRlLT5j cnRjKQorCQlyZXR1cm4gMDsKKworCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0 YXRlKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmNydGMpOworCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkp CisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJY2xpcC54MiA9IGNydGNfc3RhdGUt Pm1vZGUuaGRpc3BsYXk7CisJY2xpcC55MiA9IGNydGNfc3RhdGUtPm1vZGUudmRpc3BsYXk7CisK KwlyZXR1cm4gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIHN0YXRlLT5jcnRj LCBmYiwKKwkJCQkJICAgICAmc3JjLCAmZGVzdCwgJmNsaXAsCisJCQkJCSAgICAgRFJNX1BMQU5F X0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJCQkgICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElO RywKKwkJCQkJICAgICB0cnVlLCB0cnVlLCAmdmlzaWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10 a19wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9z dGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOworCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqZ2VtOworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW07CisJc3RydWN0IG10a19k cm1fcGxhbmUgKm10a19wbGFuZSA9IHRvX210a19wbGFuZShwbGFuZSk7CisJc3RydWN0IGRybV9y ZWN0IGRlc3QgPSB7CisJCS54MSA9IHN0YXRlLT5iYXNlLmNydGNfeCwKKwkJLnkxID0gc3RhdGUt PmJhc2UuY3J0Y195LAorCQkueDIgPSBzdGF0ZS0+YmFzZS5jcnRjX3ggKyBzdGF0ZS0+YmFzZS5j cnRjX3csCisJCS55MiA9IHN0YXRlLT5iYXNlLmNydGNfeSArIHN0YXRlLT5iYXNlLmNydGNfaCwK Kwl9OworCXN0cnVjdCBkcm1fcmVjdCBjbGlwID0geyAwLCB9OworCisJaWYgKCFjcnRjKQorCQly ZXR1cm47CisKKwljbGlwLngyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUuaGRpc3Bs YXk7CisJY2xpcC55MiA9IHN0YXRlLT5iYXNlLmNydGMtPnN0YXRlLT5tb2RlLnZkaXNwbGF5Owor CWRybV9yZWN0X2ludGVyc2VjdCgmZGVzdCwgJmNsaXApOworCisJZ2VtID0gbXRrX2ZiX2dldF9n ZW1fb2JqKHN0YXRlLT5iYXNlLmZiKTsKKwltdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmooZ2VtKTsK KwltdGtfcGxhbmVfZW5hYmxlKG10a19wbGFuZSwgdHJ1ZSwgbXRrX2dlbS0+ZG1hX2FkZHIsICZk ZXN0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0 YXRlKQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0 YXRlKHBsYW5lLT5zdGF0ZSk7CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsKKwl3 bWIoKTsgLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0ZXIgaXMgc2V0IGJlZm9yZSB1cGRh dGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBtdGtfcGxhbmVfaGVscGVyX2Z1bmNzID0gewor CS5hdG9taWNfY2hlY2sgPSBtdGtfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5hdG9taWNfdXBkYXRl ID0gbXRrX3BsYW5lX2F0b21pY191cGRhdGUsCisJLmF0b21pY19kaXNhYmxlID0gbXRrX3BsYW5l X2F0b21pY19kaXNhYmxlLAorfTsKKworaW50IG10a19wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUsCisJCSAgIHVuc2lnbmVk IGxvbmcgcG9zc2libGVfY3J0Y3MsIGVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZSwKKwkJICAgdW5z aWduZWQgaW50IHpwb3MpCit7CisJaW50IGVycjsKKworCWVyciA9IGRybV91bml2ZXJzYWxfcGxh bmVfaW5pdChkZXYsICZtdGtfcGxhbmUtPmJhc2UsIHBvc3NpYmxlX2NydGNzLAorCQkJCSAgICAg ICAmbXRrX3BsYW5lX2Z1bmNzLCBmb3JtYXRzLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGZvcm1h dHMpLCB0eXBlLCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGlu aXRpYWxpemUgcGxhbmVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRybV9wbGFuZV9oZWxw ZXJfYWRkKCZtdGtfcGxhbmUtPmJhc2UsICZtdGtfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwltdGtf cGxhbmUtPmlkeCA9IHpwb3M7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9wbGFuZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcy YTdiM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9wbGFuZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVk aWFUZWsgSW5jLgorICogQXV0aG9yOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVm IF9NVEtfRFJNX1BMQU5FX0hfCisjZGVmaW5lIF9NVEtfRFJNX1BMQU5FX0hfCisKKyNpbmNsdWRl IDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgbXRr X2RybV9wbGFuZSB7CisJc3RydWN0IGRybV9wbGFuZQkJYmFzZTsKKwl1bnNpZ25lZCBpbnQJCQlp ZHg7Cit9OworCitzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgeworCWJvb2wJCQkJY29u ZmlnOworCWJvb2wJCQkJZW5hYmxlOworCWRtYV9hZGRyX3QJCQlhZGRyOworCXVuc2lnbmVkIGlu dAkJCXBpdGNoOworCXVuc2lnbmVkIGludAkJCWZvcm1hdDsKKwl1bnNpZ25lZCBpbnQJCQl4Owor CXVuc2lnbmVkIGludAkJCXk7CisJdW5zaWduZWQgaW50CQkJd2lkdGg7CisJdW5zaWduZWQgaW50 CQkJaGVpZ2h0OworCWJvb2wJCQkJZGlydHk7Cit9OworCitzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRl IHsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlCQliYXNlOworCXN0cnVjdCBtdGtfcGxhbmVfcGVu ZGluZ19zdGF0ZQlwZW5kaW5nOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RybV9w bGFuZSAqdG9fbXRrX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXJldHVybiBj b250YWluZXJfb2YocGxhbmUsIHN0cnVjdCBtdGtfZHJtX3BsYW5lLCBiYXNlKTsKK30KKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICoKK3RvX210a19wbGFuZV9zdGF0ZShz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHN0 YXRlLCBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlLCBiYXNlKTsKK30KKworaW50IG10a19wbGFuZV9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxh bmUsCisJCSAgIHVuc2lnbmVkIGxvbmcgcG9zc2libGVfY3J0Y3MsIGVudW0gZHJtX3BsYW5lX3R5 cGUgdHlwZSwKKwkJICAgdW5zaWduZWQgaW50IHpwb3MpOworCisjZW5kaWYKLS0gCjIuNy4wCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK