From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [RFC 2/6] drm: Add support for userspace drivers Date: Wed, 4 Jan 2017 14:34:38 +0100 Message-ID: <20170104133442.4534-3-noralf@tronnes.org> References: <20170104133442.4534-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id 595E86E723 for ; Wed, 4 Jan 2017 14:10:03 +0000 (UTC) In-Reply-To: <20170104133442.4534-1-noralf@tronnes.org> 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 List-Id: dri-devel@lists.freedesktop.org QWRkIHN1cHBvcnQgZm9yIHdyaXRpbmcgZHJtIHVzZXJzcGFjZSBkcml2ZXJzLgoKVXNlcnNwYWNl IGRyaXZlciB1c2FnZToKT3BlbiAvZGV2L3Vkcm0KSW9jdGwgY3JlYXRlIGRybSBkcml2ZXIvZGV2 aWNlIHBhc3NpbmcgaW4gbW9kZSwgZm9ybWF0cyBhbmQgb3B0aW9uYWwKICAgIGRtYS1idWYgYXMg dHJhbnNmZXIgYnVmZmVyClJlYWQvcG9sbCBmb3IgZXZlbnRzOgogICAgZnJhbWVidWZmZXI6IGNy ZWF0ZSwgZGVzdHJveSwgZGlydHkKICAgIHBpcGU6IGVuYWJsZSwgZGlzYWJsZQpXcml0ZSBiYWNr IHN0YXR1cyB2YWx1ZSBmcm9tIHRoZSBldmVudCBleGVjdXRpb24KQ2xvc2luZyBmaWxlIHdpbGwg ZGVsZXRlIHRoZSBkcm0gZHJpdmVyLgoKVGhlIHJlYXNvbiBmb3IgZG9pbmcgYnVmZmVyIGNvcHkg aW4gdGhlIGtlcm5lbCBpcyB0aGF0IG9uIGEgUmFzcGJlcnJ5IFBpCmNvcHlpbmcgKGFjdHVhbGx5 IHJlYWRpbmcpIGEgbW1hcCdlZCAxNTBrIGRtYS1idWYgaW4gdXNlcnNwYWNlIHRvb2sgMzJtcwp3 aGlsZSBpbi1rZXJuZWwgd2FzIDEzbXMuCgpTaWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMg PG5vcmFsZkB0cm9ubmVzLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAg ICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICB8ICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vdWRybS9LY29uZmlnICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vdWRy bS9NYWtlZmlsZSAgICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vdWRybS91ZHJtLWRldi5jICB8 IDI3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3Vkcm0v dWRybS1kcnYuYyAgfCAzMjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL3Vkcm0vdWRybS1mYi5jICAgfCAzNjkgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdWRybS91ZHJtLXBpcGUuYyB8IDE3 MCArKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS91ZHJtL3Vkcm0uaCAgICAgIHwg IDg0ICsrKysrKysrKwogaW5jbHVkZS91YXBpL2RybS91ZHJtLmggICAgICAgICAgfCAgNzggKysr KysrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCAxMzE3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdWRybS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3Vkcm0vTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdWRybS91ZHJtLWRldi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3Vkcm0vdWRybS1kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS91 ZHJtL3Vkcm0tZmIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS91ZHJtL3Vk cm0tcGlwZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Vkcm0vdWRybS5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2RybS91ZHJtLmgKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4 IDQ4MzA1OWEuLmIzNTE3OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0yMjMsNiArMjIzLDggQEAgc291cmNlICJk cml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL0tjb25maWciCgogc291cmNlICJkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvS2NvbmZpZyIKCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS91ZHJtL0tjb25m aWciCisKICMgS2VlcCBsZWdhY3kgZHJpdmVycyBsYXN0CgogbWVudWNvbmZpZyBEUk1fTEVHQUNZ CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUKaW5kZXggMjVjNzIwNC4uMjkxNzViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtODYsMyArODYs NCBAQCBvYmotJChDT05GSUdfRFJNX0ZTTF9EQ1UpICs9IGZzbC1kY3UvCiBvYmotJChDT05GSUdf RFJNX0VUTkFWSVYpICs9IGV0bmF2aXYvCiBvYmotJChDT05GSUdfRFJNX0FSQ1BHVSkrPSBhcmMv CiBvYmoteQkJCSs9IGhpc2lsaWNvbi8KK29iai15CQkJKz0gdWRybS8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS91ZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vdWRybS9LY29uZmln Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZmFhNGIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRybS9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29u ZmlnIERSTV9VU0VSCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIHVzZXJzcGFjZSBEUk0gZHJpdmVy cyIKKwlkZXBlbmRzIG9uIERSTQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1f S01TX0NNQV9IRUxQRVIKKwlzZWxlY3QgVklERU9NT0RFX0hFTFBFUlMKKwloZWxwCisJICBDaG9v c2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSB1c2Vyc3BhY2UgRFJNIGRyaXZlci4KKwkgIElm IE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aW55ZHJtLgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3Vkcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdWRy bS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWI4YzI3Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Vkcm0vTWFrZWZpbGUKQEAgLTAsMCAr MSw0IEBACitjY2ZsYWdzLXkgKz0gLUkkKHNyYykvaW5jbHVkZQorCit1ZHJtLXkgOj0gdWRybS1k ZXYubyB1ZHJtLWRydi5vIHVkcm0tZmIubyB1ZHJtLXBpcGUubworb2JqLSQoQ09ORklHX0RSTV9V U0VSKSArPSB1ZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS91ZHJtL3Vkcm0tZGV2 LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRybS91ZHJtLWRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmViMTliN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vdWRybS91ZHJtLWRldi5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogQ29weXJpZ2h0IChD KSAyMDE2IE5vcmFsZiBUcsO4bm5lcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEt YnVmLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNp bmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRl IDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHVh cGkvZHJtL3Vkcm0uaD4KKworI2luY2x1ZGUgInVkcm0uaCIKKworc3RhdGljIHN0cnVjdCBtaXNj ZGV2aWNlIHVkcm1fbWlzYzsKKworaW50IHVkcm1fc2VuZF9ldmVudChzdHJ1Y3QgdWRybV9kZXZp Y2UgKnVkZXYsIHZvaWQgKmV2X2luKQoreworCXN0cnVjdCB1ZHJtX2V2ZW50ICpldiA9IGV2X2lu OworCXVuc2lnbmVkIGxvbmcgdGltZV9sZWZ0OworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9j aygmdWRldi0+ZGV2X2xvY2spOworCisJRFJNX0RFQlVHKCJJTiBldi0+dHlwZT0ldSwgZXYtPmxl bmd0aD0ldVxuIiwgZXYtPnR5cGUsIGV2LT5sZW5ndGgpOworCisJaWYgKCF1ZGV2LT5pbml0aWFs aXplZCkgeworCQlEUk1fRVJST1IoIk5vdCBpbml0aWFsaXplZFxuIik7CisJCXJldCA9IC1FTk9E RVY7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlldiA9IGttZW1kdXAoZXYsIGV2LT5sZW5n dGgsIEdGUF9LRVJORUwpOworCWlmICghZXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBv dXRfdW5sb2NrOworCX0KKworCXJlaW5pdF9jb21wbGV0aW9uKCZ1ZGV2LT5jb21wbGV0aW9uKTsK KworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdWRldi0+bXV0ZXgpOworCWlmIChy ZXQpIHsKKwkJa2ZyZWUoZXYpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCXVkZXYtPmV2ID0g ZXY7CisJbXV0ZXhfdW5sb2NrKCZ1ZGV2LT5tdXRleCk7CisKKwl3YWtlX3VwX2ludGVycnVwdGli bGUoJnVkZXYtPndhaXRxKTsKKworCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGlt ZW91dCgmdWRldi0+Y29tcGxldGlvbiwgNSAqIEhaKTsKKwlyZXQgPSB1ZGV2LT5ldmVudF9yZXQ7 CisJaWYgKCF0aW1lX2xlZnQpIHsKKwkJRFJNX0VSUk9SKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHJl cGx5XG4iKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhf dW5sb2NrKCZ1ZGV2LT5kZXZfbG9jayk7CisKKwlEUk1fREVCVUcoIk9VVCByZXQ9JWQsIGV2ZW50 X3JldD0lZFxuIiwgcmV0LCB1ZGV2LT5ldmVudF9yZXQpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgdWRybV9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQor eworCXN0cnVjdCB1ZHJtX2RldmljZSAqdWRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg dWRybV9kZXZpY2UsCisJCQkJCQkgICAgcmVsZWFzZV93b3JrKTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gJnVkZXYtPmRybTsKKworCS8vZHJtX2RldmljZV9zZXRfdW5wbHVnZ2VkKGRybSk7 CisKKwl1ZGV2LT5pbml0aWFsaXplZCA9IGZhbHNlOworCXVkZXYtPmV2ZW50X3JldCA9IC1FTk9E RVY7CisJY29tcGxldGUoJnVkZXYtPmNvbXBsZXRpb24pOworCisJd2hpbGUgKGRybS0+b3Blbl9j b3VudCkgeworCQlEUk1fREVCVUdfS01TKCJvcGVuX2NvdW50PSVkXG4iLCBkcm0tPm9wZW5fY291 bnQpOworCQltc2xlZXAoMTAwMCk7CisJfQorCisJdWRybV9kcm1fdW5yZWdpc3Rlcih1ZGV2KTsK K30KKworc3RhdGljIGludCB1ZHJtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZp bGUgKmZpbGUpCit7CisJc3RydWN0IHVkcm1fZGV2aWNlICp1ZGV2OworCisJdWRldiA9IGt6YWxs b2Moc2l6ZW9mKCp1ZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1ZGV2KQorCQlyZXR1cm4gLUVO T01FTTsKKworCW11dGV4X2luaXQoJnVkZXYtPm11dGV4KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFk KCZ1ZGV2LT53YWl0cSk7CisJaW5pdF9jb21wbGV0aW9uKCZ1ZGV2LT5jb21wbGV0aW9uKTsKKwlp ZHJfaW5pdCgmdWRldi0+aWRyKTsKKwlJTklUX1dPUksoJnVkZXYtPnJlbGVhc2Vfd29yaywgdWRy bV9yZWxlYXNlX3dvcmspOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdWRldjsKKwlub25zZWVr YWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVf dCB1ZHJtX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVy LAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVkcm1fZGV2 aWNlICp1ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQsIGV2ZW50X3JldDsKKwor CWlmICghdWRldi0+aW5pdGlhbGl6ZWQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFjb3Vu dCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY291bnQgIT0gc2l6ZW9mKGludCkpCisJCXJldHVybiAt RUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZldmVudF9yZXQsIGJ1ZmZlciwgc2l6ZW9m KGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0 aWJsZSgmdWRldi0+bXV0ZXgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl1ZGV2LT5l dmVudF9yZXQgPSBldmVudF9yZXQ7CisJY29tcGxldGUoJnVkZXYtPmNvbXBsZXRpb24pOworCisJ bXV0ZXhfdW5sb2NrKCZ1ZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRp YyBzc2l6ZV90IHVkcm1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZl ciwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVkcm1fZGV2 aWNlICp1ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QgcmV0OworCisJaWYgKCFj b3VudCkKKwkJcmV0dXJuIDA7CisKKwlkbyB7CisJCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0 aWJsZSgmdWRldi0+bXV0ZXgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAo IXVkZXYtPmV2ICYmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKKwkJCXJldCA9IC1F QUdBSU47CisJCX0gZWxzZSBpZiAodWRldi0+ZXYpIHsKKwkJCWlmIChjb3VudCA8IHVkZXYtPmV2 LT5sZW5ndGgpCisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWVsc2UgaWYgKGNvcHlfdG9fdXNlcihi dWZmZXIsIHVkZXYtPmV2LCB1ZGV2LT5ldi0+bGVuZ3RoKSkKKwkJCQlyZXQgPSAtRUZBVUxUOwor CQkJZWxzZQorCQkJCXJldCA9IHVkZXYtPmV2LT5sZW5ndGg7CisJCQlrZnJlZSh1ZGV2LT5ldik7 CisJCQl1ZGV2LT5ldiA9IE5VTEw7CisJCX0KKworCQltdXRleF91bmxvY2soJnVkZXYtPm11dGV4 KTsKKworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKKwkJaWYgKCEoZmlsZS0+Zl9mbGFncyAmIE9f Tk9OQkxPQ0spKQorCQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHVkZXYtPndhaXRx LCB1ZGV2LT5ldik7CisJfSB3aGlsZSAocmV0ID09IDApOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHVuc2lnbmVkIGludCB1ZHJtX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFi bGUgKndhaXQpCit7CisJc3RydWN0IHVkcm1fZGV2aWNlICp1ZGV2ID0gZmlsZS0+cHJpdmF0ZV9k YXRhOworCisJcG9sbF93YWl0KGZpbGUsICZ1ZGV2LT53YWl0cSwgd2FpdCk7CisKKwlpZiAodWRl di0+ZXYpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgdWRybV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxl ICpmaWxlKQoreworCXN0cnVjdCB1ZHJtX2RldmljZSAqdWRldiA9IGZpbGUtPnByaXZhdGVfZGF0 YTsKKworCWlmICh1ZGV2LT5pbml0aWFsaXplZCkKKwkJc2NoZWR1bGVfd29yaygmdWRldi0+cmVs ZWFzZV93b3JrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyB1ZHJtX2lvY3RsKHN0 cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sK KwlzdHJ1Y3QgdWRybV9kZXZpY2UgKnVkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0 IHVkcm1fZGV2X2NyZWF0ZSBkZXZfY3JlYXRlOworCXVpbnQzMl90ICpmb3JtYXRzOworCWludCBy ZXQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVURSTV9ERVZfQ1JFQVRFOgorCQlpZiAoY29w eV9mcm9tX3VzZXIoJmRldl9jcmVhdGUsICh2b2lkIF9fdXNlciAqKWFyZywKKwkJCQkgICBzaXpl b2YoZGV2X2NyZWF0ZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKCFkZXZfY3JlYXRl LmZvcm1hdHMgfHwgIWRldl9jcmVhdGUubnVtX2Zvcm1hdHMpCisJCQlyZXR1cm4gLUVJTlZBTDsK KworCQlmb3JtYXRzID0gbWVtZHVwX3VzZXIoKHZvaWQgX191c2VyICopCisJCQkJICAgICAgKHVp bnRwdHJfdCkgZGV2X2NyZWF0ZS5mb3JtYXRzLAorCQkJCSAgICAgIGRldl9jcmVhdGUubnVtX2Zv cm1hdHMgKiBzaXplb2YoKmZvcm1hdHMpKTsKKwkJaWYgKElTX0VSUihmb3JtYXRzKSkKKwkJCXJl dHVybiBQVFJfRVJSKGZvcm1hdHMpOworCisJCXVkZXYtPmluaXRpYWxpemVkID0gdHJ1ZTsKKwkJ cmV0ID0gdWRybV9kcm1fcmVnaXN0ZXIodWRldiwgJmRldl9jcmVhdGUsIGZvcm1hdHMsCisJCQkJ CWRldl9jcmVhdGUubnVtX2Zvcm1hdHMpOworCQlrZnJlZShmb3JtYXRzKTsKKwkJaWYgKHJldCkg eworCQkJdWRldi0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwor CQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmRldl9jcmVhdGUsCisJCQkJ IHNpemVvZihkZXZfY3JlYXRlKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcmV0ID0gLUVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRybV9mb3BzID0geworCS5v d25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB1ZHJtX29wZW4sCisJLnJlbGVhc2UJPSB1 ZHJtX3JlbGVhc2UsCisJLnJlYWQJCT0gdWRybV9yZWFkLAorCS53cml0ZQkJPSB1ZHJtX3dyaXRl LAorCS5wb2xsCQk9IHVkcm1fcG9sbCwKKworCS51bmxvY2tlZF9pb2N0bAk9IHVkcm1faW9jdGws CisvKiBGSVhNRQorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gdWRybV9j b21wYXRfaW9jdGwsCisjZW5kaWYKKyovCisJLmxsc2VlawkJPSBub19sbHNlZWssCit9OworCitz dGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdWRybV9taXNjID0geworCS5mb3BzCQk9ICZ1ZHJtX2Zv cHMsCisJLm1pbm9yCQk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKKwkubmFtZQkJPSAidWRybSIsCit9 OworbW9kdWxlX21pc2NfZGV2aWNlKHVkcm1fbWlzYyk7CisKK01PRFVMRV9BVVRIT1IoIk5vcmFs ZiBUcsO4bm5lcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVc2Vyc3BhY2UgZHJpdmVyIHN1cHBv cnQgZm9yIERSTSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3Vkcm0vdWRybS1kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS91ZHJtL3Vkcm0tZHJ2 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzNjNjMwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS91ZHJtL3Vkcm0tZHJ2LmMKQEAgLTAsMCArMSwzMjQg QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cisj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSA8dWFwaS9kcm0vdWRybS5oPgor CisjaW5jbHVkZSAidWRybS5oIgorCitzdGF0aWMgdm9pZCB1ZHJtX2xhc3RjbG9zZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCB1ZHJtX2RldmljZSAqdWRldiA9IGRybV90b191 ZHJtKGRybSk7CisKKwlEUk1fREVCVUdfS01TKCJpbml0aWFsaXplZD0ldSwgZmJkZXZfdXNlZD0l dVxuIiwgdWRldi0+aW5pdGlhbGl6ZWQsCisJCSAgICAgIHVkZXYtPmZiZGV2X3VzZWQpOworCisJ aWYgKHVkZXYtPmZiZGV2X3VzZWQpCisJCWRybV9mYmRldl9jbWFfcmVzdG9yZV9tb2RlKHVkZXYt PmZiZGV2X2NtYSk7CisJZWxzZQorCQlkcm1fY3J0Y19mb3JjZV9kaXNhYmxlX2FsbChkcm0pOwor fQorCitzdGF0aWMgdm9pZCB1ZHJtX2dlbV9jbWFfZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpnZW1fb2JqKQoreworCWlmIChnZW1fb2JqLT5pbXBvcnRfYXR0YWNoKSB7CisJCXN0 cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7CisKKwkJY21hX29iaiA9IHRvX2RybV9n ZW1fY21hX29iaihnZW1fb2JqKTsKKwkJZG1hX2J1Zl92dW5tYXAoZ2VtX29iai0+aW1wb3J0X2F0 dGFjaC0+ZG1hYnVmLCBjbWFfb2JqLT52YWRkcik7CisJCWNtYV9vYmotPnZhZGRyID0gTlVMTDsK Kwl9CisKKwlkcm1fZ2VtX2NtYV9mcmVlX29iamVjdChnZW1fb2JqKTsKK30KKworc3RhdGljIHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqCit1ZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxl KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkJICAgICAgc3RydWN0IGRtYV9idWZfYXR0YWNo bWVudCAqYXR0YWNoLAorCQkJCSAgICAgIHN0cnVjdCBzZ190YWJsZSAqc2d0KQoreworCXN0cnVj dCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv Ymo7CisJdm9pZCAqdmFkZHI7CisKKwl2YWRkciA9IGRtYV9idWZfdm1hcChhdHRhY2gtPmRtYWJ1 Zik7CisJaWYgKCF2YWRkcikgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byB2bWFwIFBSSU1FIGJ1 ZmZlclxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCW9iaiA9IGRybV9n ZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZShkcm0sIGF0dGFjaCwgc2d0KTsKKwlpZiAoSVNf RVJSKG9iaikpIHsKKwkJZG1hX2J1Zl92dW5tYXAoYXR0YWNoLT5kbWFidWYsIHZhZGRyKTsKKwkJ cmV0dXJuIG9iajsKKwl9CisKKwljbWFfb2JqID0gdG9fZHJtX2dlbV9jbWFfb2JqKG9iaik7CisJ Y21hX29iai0+dmFkZHIgPSB2YWRkcjsKKworCXJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBpbnQg dWRybV9wcmltZV9oYW5kbGVfdG9fZmRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1 Y3QgZHJtX3ByaW1lX2hhbmRsZSAqYXJncyA9IGRhdGE7CisKKwkvKiBGSVhNRTogb25seSB0aGUg dXNlcnNwYWNlIGRyaXZlciBzaG91bGQgdXNlIHRoaXMgKi8KKworCS8qIGNoZWNrIGZsYWdzIGFy ZSB2YWxpZCAqLworCWlmIChhcmdzLT5mbGFncyAmIH4oRFJNX0NMT0VYRUMgfCBEUk1fUkRXUikp CisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGRldi0+ZHJpdmVyLT5wcmltZV9oYW5kbGVf dG9fZmQoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSwKKwkJCQkJICAgICAgIGFyZ3MtPmZs YWdzLCAmYXJncy0+ZmQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNj IHVkcm1faW9jdGxzW10gPSB7CisJRFJNX0lPQ1RMX0RFRl9EUlYoVURSTV9QUklNRV9IQU5ETEVf VE9fRkQsIHVkcm1fcHJpbWVfaGFuZGxlX3RvX2ZkX2lvY3RsLCBEUk1fQ09OVFJPTF9BTExPV3xE Uk1fVU5MT0NLRUQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg dWRybV9kcm1fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZHJt X29wZW4sCisJLnJlbGVhc2UJPSBkcm1fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwJPSBkcm1f aW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwJPSBkcm1fY29tcGF0 X2lvY3RsLAorI2VuZGlmCisJLnBvbGwJCT0gZHJtX3BvbGwsCisJLnJlYWQJCT0gZHJtX3JlYWQs CisJLmxsc2VlawkJPSBub19sbHNlZWssCisJLm1tYXAJCT0gZHJtX2dlbV9jbWFfbW1hcCwKK307 CisKK3N0YXRpYyB2b2lkIHVkcm1fZGlydHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Cit7CisJc3RydWN0IHVkcm1fZGV2aWNlICp1ZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVj dCB1ZHJtX2RldmljZSwKKwkJCQkJCSAgIGRpcnR5X3dvcmspOworCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gdWRldi0+cGlwZS5wbGFuZS5mYjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMg PSAmdWRldi0+cGlwZS5jcnRjOworCisJaWYgKGZiKQorCQlmYi0+ZnVuY3MtPmRpcnR5KGZiLCBO VUxMLCAwLCAwLCBOVUxMLCAwKTsKKworCWlmICh1ZGV2LT5ldmVudCkgeworCQlEUk1fREVCVUdf S01TKCJjcnRjIGV2ZW50XG4iKTsKKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9s b2NrKTsKKwkJZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoY3J0YywgdWRldi0+ZXZlbnQpOwor CQlzcGluX3VubG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7CisJCXVkZXYtPmV2ZW50 ID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1 bmNzIHVkcm1fbW9kZV9jb25maWdfZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9IHVkcm1fZmJfY3Jl YXRlLAorCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWlj X2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKK307CisKK3N0YXRpYyBpbnQgdWRy bV9kcm1faW5pdChzdHJ1Y3QgdWRybV9kZXZpY2UgKnVkZXYsIGNoYXIgKmRydl9uYW1lKQorewor CXN0cnVjdCBkcm1fZHJpdmVyICpkcnYgPSAmdWRldi0+ZHJpdmVyOworCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm0gPSAmdWRldi0+ZHJtOworCWludCByZXQ7CisKKwlkcnYtPm5hbWUgPSBrc3RyZHVw KGRydl9uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRydi0+bmFtZSkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlkcnYtPmRyaXZlcl9mZWF0dXJlcwk9IERSSVZFUl9HRU0gfCBEUklWRVJfTU9ERVNF VCB8IERSSVZFUl9QUklNRSB8CisJCQkJICBEUklWRVJfQVRPTUlDOworCWRydi0+Z2VtX2ZyZWVf b2JqZWN0CQk9IHVkcm1fZ2VtX2NtYV9mcmVlX29iamVjdDsKKwlkcnYtPmdlbV92bV9vcHMJCQk9 ICZkcm1fZ2VtX2NtYV92bV9vcHM7CisJZHJ2LT5wcmltZV9oYW5kbGVfdG9fZmQJCT0gZHJtX2dl bV9wcmltZV9oYW5kbGVfdG9fZmQ7CisJZHJ2LT5wcmltZV9mZF90b19oYW5kbGUJCT0gZHJtX2dl bV9wcmltZV9mZF90b19oYW5kbGU7CisJZHJ2LT5nZW1fcHJpbWVfaW1wb3J0CQk9IGRybV9nZW1f cHJpbWVfaW1wb3J0OworCWRydi0+Z2VtX3ByaW1lX2V4cG9ydAkJPSBkcm1fZ2VtX3ByaW1lX2V4 cG9ydDsKKwlkcnYtPmdlbV9wcmltZV9nZXRfc2dfdGFibGUJPSBkcm1fZ2VtX2NtYV9wcmltZV9n ZXRfc2dfdGFibGU7CisJZHJ2LT5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlCT0gdWRybV9nZW1f Y21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZTsKKwlkcnYtPmdlbV9wcmltZV92bWFwCQk9IGRybV9n ZW1fY21hX3ByaW1lX3ZtYXA7CisJZHJ2LT5nZW1fcHJpbWVfdnVubWFwCQk9IGRybV9nZW1fY21h X3ByaW1lX3Z1bm1hcDsKKwlkcnYtPmdlbV9wcmltZV9tbWFwCQk9IGRybV9nZW1fY21hX3ByaW1l X21tYXA7CisJZHJ2LT5kdW1iX2NyZWF0ZQkJPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZTsKKwlk cnYtPmR1bWJfbWFwX29mZnNldAkJPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQ7CisJZHJ2 LT5kdW1iX2Rlc3Ryb3kJCT0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3k7CisJZHJ2LT5mb3BzCQkJPSAm dWRybV9kcm1fZm9wczsKKwlkcnYtPmxhc3RjbG9zZQkJCT0gdWRybV9sYXN0Y2xvc2U7CisKKwlk cnYtPmlvY3RscwkJPSB1ZHJtX2lvY3RsczsKKwlkcnYtPm51bV9pb2N0bHMJCT0gQVJSQVlfU0la RSh1ZHJtX2lvY3Rscyk7CisKKwlkcnYtPmRlc2MJCT0gIkRSTSB1c2Vyc3BhY2UgZHJpdmVyIHN1 cHBvcnQiOworCWRydi0+ZGF0ZQkJPSAiMjAxNjExMTkiOworCWRydi0+bWFqb3IJCT0gMTsKKwlk cnYtPm1pbm9yCQk9IDA7CisKKwlJTklUX1dPUksoJnVkZXYtPmRpcnR5X3dvcmssIHVkcm1fZGly dHlfd29yayk7CisJbXV0ZXhfaW5pdCgmdWRldi0+ZGV2X2xvY2spOworCisJcmV0ID0gZHJtX2Rl dl9pbml0KGRybSwgZHJ2LCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZHJt X21vZGVfY29uZmlnX2luaXQoZHJtKTsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJnVkcm1f bW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdWRybV9k cm1fZmluaShzdHJ1Y3QgdWRybV9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybSA9ICZ1ZGV2LT5kcm07CisKKwlEUk1fREVCVUdfS01TKCJ1ZHJtX2RybV9maW5pXG4iKTsK KworCW11dGV4X2Rlc3Ryb3koJnVkZXYtPmRldl9sb2NrKTsKKwlkcm1fbW9kZV9jb25maWdfY2xl YW51cChkcm0pOworCWRybV9kZXZfdW5yZWYoZHJtKTsKK30KKworc3RhdGljIGludCB1ZHJtX2J1 Zl9nZXQoc3RydWN0IHVkcm1fZGV2aWNlICp1ZGV2LCBpbnQgZmQsIHUzMiBtb2RlLAorCQkJICAg dWludDMyX3QgKmZvcm1hdHMsIHVuc2lnbmVkIGludCBudW1fZm9ybWF0cykKK3sKKwlpbnQgaSwg bWF4X2NwcCA9IDA7CisJc2l6ZV90IGxlbjsKKworCWlmIChtb2RlICYgVURSTV9CVUZfTU9ERV9F TVVMX1hSR0I4ODg4KSB7CisJCWlmIChmb3JtYXRzWzBdICE9IERSTV9GT1JNQVRfUkdCNTY1KQor CQkJcmV0dXJuIC1FSU5WQUw7CisJCXVkZXYtPmVtdWxhdGVfeHJnYjg4ODhfZm9ybWF0ID0gZm9y bWF0c1swXTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Zvcm1hdHM7IGkrKykgeworCQlp ZiAodWRldi0+ZW11bGF0ZV94cmdiODg4OF9mb3JtYXQgJiYKKwkJICAgIGZvcm1hdHNbaV0gPT0g RFJNX0ZPUk1BVF9YUkdCODg4OCkKKwkJCWNvbnRpbnVlOworCQltYXhfY3BwID0gbWF4KG1heF9j cHAsIGRybV9mb3JtYXRfcGxhbmVfY3BwKGZvcm1hdHNbaV0sIDApKTsKKwl9CisKKwlpZiAoIW1h eF9jcHApCisJCXJldHVybiAtRUlOVkFMOworCisJbGVuID0gdWRldi0+ZGlzcGxheV9tb2RlLmhk aXNwbGF5ICogdWRldi0+ZGlzcGxheV9tb2RlLnZkaXNwbGF5ICogbWF4X2NwcDsKKworCXVkZXYt PmRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTsKKwlpZiAoSVNfRVJSKHVkZXYtPmRtYWJ1ZikpCisJ CXJldHVybiBQVFJfRVJSKHVkZXYtPmRtYWJ1Zik7CisKKwlpZiAobGVuID4gdWRldi0+ZG1hYnVm LT5zaXplKSB7CisJCWRtYV9idWZfcHV0KHVkZXYtPmRtYWJ1Zik7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCS8qIEZJWE1FIGlzIGRtYV9idWZfYXR0YWNoKCkgbmVjZXNzYXJ5IHdoZW4gdGhl cmUncyBubyBkZXZpY2U/ICovCisKKwl1ZGV2LT5idWZfbW9kZSA9IG1vZGU7CisJdWRldi0+YnVm X2ZkID0gZmQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmJkZXZfaW5pdF93b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdWRybV9kZXZpY2UgKnVkZXYg PSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVkcm1fZGV2aWNlLAorCQkJCQkJZmJkZXZfaW5p dF93b3JrKTsKKwlpbnQgcmV0OworCisJcmV0ID0gdWRybV9mYmRldl9pbml0KHVkZXYpOworCWlm IChyZXQpCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgZmJkZXY6ICVkXG4iLCBy ZXQpOworCit9CisKK2ludCB1ZHJtX2RybV9yZWdpc3RlcihzdHJ1Y3QgdWRybV9kZXZpY2UgKnVk ZXYsCisJCSAgICAgIHN0cnVjdCB1ZHJtX2Rldl9jcmVhdGUgKmRldl9jcmVhdGUsCisJCSAgICAg IHVpbnQzMl90ICpmb3JtYXRzLCB1bnNpZ25lZCBpbnQgbnVtX2Zvcm1hdHMpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRybTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX21vZGVfY29udmVydF91 bW9kZSgmdWRldi0+ZGlzcGxheV9tb2RlLCAmZGV2X2NyZWF0ZS0+bW9kZSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoJnVkZXYtPmRp c3BsYXlfbW9kZSk7CisKKwlpZiAoZGV2X2NyZWF0ZS0+YnVmX21vZGUpIHsKKwkJcmV0ID0gdWRy bV9idWZfZ2V0KHVkZXYsIGRldl9jcmVhdGUtPmJ1Zl9mZCwgZGV2X2NyZWF0ZS0+YnVmX21vZGUs CisJCQkJICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXQgPSB1ZHJtX2RybV9pbml0KHVkZXYsIGRldl9jcmVhdGUtPm5hbWUpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX3B1dF9kbWFidWY7CisKKwlkcm0gPSAmdWRldi0+ZHJtOwor CWRybS0+bW9kZV9jb25maWcuZnVuY3MgPSAmdWRybV9tb2RlX2NvbmZpZ19mdW5jczsKKworCXJl dCA9IHVkcm1fZGlzcGxheV9waXBlX2luaXQodWRldiwgRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRV QUwsCisJCQkJICAgICBmb3JtYXRzLCBudW1fZm9ybWF0cyk7CisJaWYgKHJldCkKKwkJZ290byBl cnJfZmluaTsKKworCWRybS0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoID0gZHJtX2Zvcm1h dF9wbGFuZV9jcHAoZm9ybWF0c1swXSwgMCkgKiA4OworCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0 KGRybSk7CisKKwlEUk1fREVCVUdfS01TKCJwcmVmZXJyZWRfZGVwdGg9JXVcbiIsIGRybS0+bW9k ZV9jb25maWcucHJlZmVycmVkX2RlcHRoKTsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJt LCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9maW5pOworCisJLyoKKwkgKiBmYmRldiBpbml0 aWFsaXphdGlvbiBnZW5lcmF0ZXMgZXZlbnRzLCBzbyB0byBhdm9pZCBoYXZpbmcgdG8gcXVldWUK KwkgKiB1cCBldmVudHMgb3IgdXNlIGEgbXVsdGl0aHJlYWRpbmcgdXNlcnNwYWNlIGRyaXZlciwg bGV0IGEgd29ya2VyIGRvCisJICogaXQgc28gdXNlcnNwYWNlIGNhbiBiZSByZWFkeSBmb3IgdGhl IGV2ZW50cy4KKwkgKi8KKwlJTklUX1dPUksoJnVkZXYtPmZiZGV2X2luaXRfd29yaywgZmJkZXZf aW5pdF93b3JrKTsKKwlzY2hlZHVsZV93b3JrKCZ1ZGV2LT5mYmRldl9pbml0X3dvcmspOworCisJ ZGV2X2NyZWF0ZS0+aW5kZXggPSBkcm0tPnByaW1hcnktPmluZGV4OworCisJcmV0dXJuIDA7CisK K2Vycl9wdXRfZG1hYnVmOgorCWlmICh1ZGV2LT5kbWFidWYpCisJCWRtYV9idWZfcHV0KHVkZXYt PmRtYWJ1Zik7CitlcnJfZmluaToKKwl1ZHJtX2RybV9maW5pKHVkZXYpOworCisJcmV0dXJuIHJl dDsKK30KKwordm9pZCB1ZHJtX2RybV91bnJlZ2lzdGVyKHN0cnVjdCB1ZHJtX2RldmljZSAqdWRl dikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gJnVkZXYtPmRybTsKKworCURSTV9ERUJV R19LTVMoInVkcm1fZHJtX3VucmVnaXN0ZXJcbiIpOworCisJY2FuY2VsX3dvcmtfc3luYygmdWRl di0+ZmJkZXZfaW5pdF93b3JrKTsKKwlkcm1fY3J0Y19mb3JjZV9kaXNhYmxlX2FsbChkcm0pOwor CWNhbmNlbF93b3JrX3N5bmMoJnVkZXYtPmRpcnR5X3dvcmspOworCXVkcm1fZmJkZXZfZmluaSh1 ZGV2KTsKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKKworCWlmICh1ZGV2LT5kbWFidWYpCisJ CWRtYV9idWZfcHV0KHVkZXYtPmRtYWJ1Zik7CisKKwl1ZHJtX2RybV9maW5pKHVkZXYpOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Vkcm0vdWRybS1mYi5jIGIvZHJpdmVycy9ncHUv ZHJtL3Vkcm0vdWRybS1mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJj NmEzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRybS91ZHJtLWZiLmMK QEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hu bmVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICog KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8ZHJt L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Zi X2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYuaD4KKworI2luY2x1ZGUgPHVhcGkvZHJtL3Vkcm0uaD4KKworI2luY2x1 ZGUgInVkcm0uaCIKKworc3RhdGljIHZvaWQgdGlueWRybV9tZXJnZV9jbGlwcyhzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqZHN0LAorCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpzcmMsIHVuc2lnbmVk IGludCBudW1fY2xpcHMsCisJCQkgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgbWF4X3dpZHRoLCB1 MzIgbWF4X2hlaWdodCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghc3JjIHx8ICFudW1f Y2xpcHMpIHsKKwkJZHN0LT54MSA9IDA7CisJCWRzdC0+eDIgPSBtYXhfd2lkdGg7CisJCWRzdC0+ eTEgPSAwOworCQlkc3QtPnkyID0gbWF4X2hlaWdodDsKKwkJcmV0dXJuOworCX0KKworCWRzdC0+ eDEgPSB+MDsKKwlkc3QtPnkxID0gfjA7CisJZHN0LT54MiA9IDA7CisJZHN0LT55MiA9IDA7CisK Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsaXBzOyBpKyspIHsKKwkJaWYgKGZsYWdzICYgRFJNX01P REVfRkJfRElSVFlfQU5OT1RBVEVfQ09QWSkKKwkJCWkrKzsKKwkJZHN0LT54MSA9IG1pbihkc3Qt PngxLCBzcmNbaV0ueDEpOworCQlkc3QtPngyID0gbWF4KGRzdC0+eDIsIHNyY1tpXS54Mik7CisJ CWRzdC0+eTEgPSBtaW4oZHN0LT55MSwgc3JjW2ldLnkxKTsKKwkJZHN0LT55MiA9IG1heChkc3Qt PnkyLCBzcmNbaV0ueTIpOworCX0KKworCWlmIChkc3QtPngyID4gbWF4X3dpZHRoIHx8IGRzdC0+ eTIgPiBtYXhfaGVpZ2h0IHx8CisJICAgIGRzdC0+eDEgPj0gZHN0LT54MiB8fCBkc3QtPnkxID49 IGRzdC0+eTIpIHsKKwkJRFJNX0RFQlVHX0tNUygiSWxsZWdhbCBjbGlwOiB4MT0ldSwgeDI9JXUs IHkxPSV1LCB5Mj0ldVxuIiwKKwkJCSAgICAgIGRzdC0+eDEsIGRzdC0+eDIsIGRzdC0+eTEsIGRz dC0+eTIpOworCQlkc3QtPngxID0gMDsKKwkJZHN0LT55MSA9IDA7CisJCWRzdC0+eDIgPSBtYXhf d2lkdGg7CisJCWRzdC0+eTIgPSBtYXhfaGVpZ2h0OworCX0KK30KKworc3RhdGljIHZvaWQgdWRy bV9idWZfbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBwaXRjaCwK KwkJCSAgICB1bnNpZ25lZCBpbnQgY3BwLCBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCkKK3sK Kwl2b2lkICpzcmMgPSB2YWRkciArIChjbGlwLT55MSAqIHBpdGNoKSArIChjbGlwLT54MSAqIGNw cCk7CisJc2l6ZV90IGxlbiA9IChjbGlwLT54MiAtIGNsaXAtPngxKSAqIGNwcDsKKwl1bnNpZ25l ZCBpbnQgeTsKKworCWZvciAoeSA9IGNsaXAtPnkxOyB5IDwgY2xpcC0+eTI7IHkrKykgeworCQlt ZW1jcHkoZHN0LCBzcmMsIGxlbik7CisJCXNyYyArPSBwaXRjaDsKKwkJZHN0ICs9IGxlbjsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkIHVkcm1fYnVmX3N3YWIxNih1MTYgKmRzdCwgdm9pZCAqdmFkZHIs IHVuc2lnbmVkIGludCBwaXRjaCwKKwkJCSAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCkK K3sKKwl1bnNpZ25lZCBpbnQgeCwgeTsKKwl1MTYgKnNyYzsKKworCWZvciAoeSA9IGNsaXAtPnkx OyB5IDwgY2xpcC0+eTI7IHkrKykgeworCQlzcmMgPSB2YWRkciArICh5ICogcGl0Y2gpOworCQlz cmMgKz0gY2xpcC0+eDE7CisJCWZvciAoeCA9IGNsaXAtPngxOyB4IDwgY2xpcC0+eDI7IHgrKykK KwkJCSpkc3QrKyA9IHN3YWIxNigqc3JjKyspOworCX0KK30KKworc3RhdGljIHZvaWQgdWRybV9i dWZfZW11bF94cmdiODg4KHZvaWQgKmRzdCwgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBwaXRj aCwKKwkJCXUzMiBidWZfbW9kZSwgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXApCit7CisJYm9v bCBzd2FwID0gKGJ1Zl9tb2RlICYgNykgPT0gVURSTV9CVUZfTU9ERV9TV0FQX0JZVEVTOworCXUx NiB2YWwxNiwgKmRzdDE2ID0gZHN0OworCXVuc2lnbmVkIGludCB4LCB5OworCXUzMiAqc3JjOwor CisJZm9yICh5ID0gY2xpcC0+eTE7IHkgPCBjbGlwLT55MjsgeSsrKSB7CisJCXNyYyA9IHZhZGRy ICsgKHkgKiBwaXRjaCk7CisJCXNyYyArPSBjbGlwLT54MTsKKwkJZm9yICh4ID0gY2xpcC0+eDE7 IHggPCBjbGlwLT54MjsgeCsrKSB7CisJCQl2YWwxNiA9ICgoKnNyYyAmIDB4MDBGODAwMDApID4+ IDgpIHwKKwkJCQkoKCpzcmMgJiAweDAwMDBGQzAwKSA+PiA1KSB8CisJCQkJKCgqc3JjICYgMHgw MDAwMDBGOCkgPj4gMyk7CisJCQlzcmMrKzsKKwkJCWlmIChzd2FwKQorCQkJCSpkc3QxNisrID0g c3dhYjE2KHZhbDE2KTsKKwkJCWVsc2UKKwkJCQkqZHN0MTYrKyA9IHZhbDE2OworCQl9CisJfQor fQorCitzdGF0aWMgYm9vbCB1ZHJtX2ZiX2RpcnR5X2J1Zl9jb3B5KHN0cnVjdCB1ZHJtX2Rldmlj ZSAqdWRldiwKKwkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgICBzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpj bWFfb2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7CisJdW5zaWduZWQgaW50IGNw cCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOworCXVuc2lnbmVk IGludCBwaXRjaCA9IGZiLT5waXRjaGVzWzBdOworCXZvaWQgKmRzdCwgKnNyYyA9IGNtYV9vYmot PnZhZGRyOworCWludCByZXQgPSAwOworCisJaWYgKGNtYV9vYmotPmJhc2UuaW1wb3J0X2F0dGFj aCkgeworCQlyZXQgPSBkbWFfYnVmX2JlZ2luX2NwdV9hY2Nlc3MoY21hX29iai0+YmFzZS5pbXBv cnRfYXR0YWNoLT5kbWFidWYsCisJCQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAo cmV0KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWRzdCA9IGRtYV9idWZfdm1hcCh1ZGV2LT5k bWFidWYpOworCWlmICghZHN0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2VuZF9h Y2Nlc3M7CisJfQorCisJaWYgKHVkZXYtPmVtdWxhdGVfeHJnYjg4ODhfZm9ybWF0ICYmCisJICAg IGZiLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9YUkdCODg4OCkgeworCQl1ZHJtX2J1Zl9l bXVsX3hyZ2I4ODgoZHN0LCBzcmMsIHBpdGNoLCB1ZGV2LT5idWZfbW9kZSwgY2xpcCk7CisJCWdv dG8gb3V0OworCX0KKworCXN3aXRjaCAodWRldi0+YnVmX21vZGUgJiA3KSB7CisJY2FzZSBVRFJN X0JVRl9NT0RFX1BMQUlOX0NPUFk6CisJCXVkcm1fYnVmX21lbWNweShkc3QsIHNyYywgcGl0Y2gs IGNwcCwgY2xpcCk7CisJCWJyZWFrOworCWNhc2UgVURSTV9CVUZfTU9ERV9TV0FQX0JZVEVTOgor CQkvKiBGSVhNRSBzdXBwb3J0IG1vcmUgKi8KKwkJaWYgKGNwcCA9PSAyKQorCQkJdWRybV9idWZf c3dhYjE2KGRzdCwgc3JjLCBwaXRjaCwgY2xpcCk7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK291 dDoKKwlkbWFfYnVmX3Z1bm1hcCh1ZGV2LT5kbWFidWYsIGRzdCk7CitvdXRfZW5kX2FjY2VzczoK KwlpZiAoY21hX29iai0+YmFzZS5pbXBvcnRfYXR0YWNoKQorCQlyZXQgPSBkbWFfYnVmX2VuZF9j cHVfYWNjZXNzKGNtYV9vYmotPmJhc2UuaW1wb3J0X2F0dGFjaC0+ZG1hYnVmLAorCQkJCQkgICAg IERNQV9GUk9NX0RFVklDRSk7CisKKwlyZXR1cm4gcmV0ID8gZmFsc2UgOiB0cnVlOworfQorCitz dGF0aWMgaW50IHVkcm1fZmJfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkg ICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAgICB1bnNpZ25lZCBpbnQgZmxh Z3MsIHVuc2lnbmVkIGludCBjb2xvciwKKwkJCSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNs aXBzLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbnVtX2NsaXBzKQoreworCXN0cnVjdCB1ZHJtX2Rl dmljZSAqdWRldiA9IGRybV90b191ZHJtKGZiLT5kZXYpOworCXN0cnVjdCBkcm1fbW9kZV9mYl9k aXJ0eV9jbWQgKmRpcnR5OworCXN0cnVjdCB1ZHJtX2V2ZW50X2ZiX2RpcnR5ICpldjsKKwlzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOworCXNpemVfdCBzaXplX2NsaXBzLCBzaXplOworCWludCBy ZXQ7CisKKwkvKiBkb24ndCByZXR1cm4gLUVJTlZBTCwgeG9yZyB3aWxsIHN0b3AgZmx1c2hpbmcg Ki8KKwlpZiAoIXVkZXYtPnByZXBhcmVkKQorCQlyZXR1cm4gMDsKKworCS8qIGZiZGV2IGNhbiBm bHVzaCBldmVuIHdoZW4gd2UncmUgbm90IGludGVyZXN0ZWQgKi8KKwlpZiAodWRldi0+cGlwZS5w bGFuZS5mYiAhPSBmYikKKwkJcmV0dXJuIDA7CisKKwkvKiBNYWtlIHN1cmUgdG8gZmx1c2ggZXZl cnl0aGluZyB0aGUgZmlyc3QgdGltZSAqLworCWlmICghdWRldi0+ZW5hYmxlZCkgeworCQljbGlw cyA9IE5VTEw7CisJCW51bV9jbGlwcyA9IDA7CisJfQorCisJdWRldi0+ZW5hYmxlZCA9IHRydWU7 CisKKwkvKgorCSAqIEZJWE1FOiBhcmUgdGhlcmUgYW55IGFwcHMvbGlicyB0aGF0IHBhc3MgbW9y ZSB0aGFuIG9uZSBjbGlwIHJlY3Q/CisJICogICAgICAgIHNob3VsZCB3ZSBzdXBwb3J0IHBhc3Np bmcgbXVsdGkgY2xpcHMgdG8gdGhlIGRyaXZlcj8KKwkgKi8KKwl0aW55ZHJtX21lcmdlX2NsaXBz KCZjbGlwLCBjbGlwcywgbnVtX2NsaXBzLCBmbGFncywKKwkJCSAgICBmYi0+d2lkdGgsIGZiLT5o ZWlnaHQpOworCWNsaXBzID0gJmNsaXA7CisJbnVtX2NsaXBzID0gMTsKKworCURSTV9ERUJVRygi Rmx1c2hpbmcgW0ZCOiVkXSB4MT0ldSwgeDI9JXUsIHkxPSV1LCB5Mj0ldVxuIiwgZmItPmJhc2Uu aWQsCisJCSAgY2xpcHMtPngxLCBjbGlwcy0+eDIsIGNsaXBzLT55MSwgY2xpcHMtPnkyKTsKKwor CWlmICh1ZGV2LT5kbWFidWYgJiYgbnVtX2NsaXBzID09IDEpCisJCXVkcm1fZmJfZGlydHlfYnVm X2NvcHkodWRldiwgZmIsIGNsaXBzKTsKKworCXNpemVfY2xpcHMgPSBudW1fY2xpcHMgKiBzaXpl b2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpOworCXNpemUgPSBzaXplb2Yoc3RydWN0IHVkcm1fZXZl bnRfZmJfZGlydHkpICsgc2l6ZV9jbGlwczsKKwlldiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlldi0+YmFzZS50eXBlID0gVURS TV9FVkVOVF9GQl9ESVJUWTsKKwlldi0+YmFzZS5sZW5ndGggPSBzaXplOworCWRpcnR5ID0gJmV2 LT5mYl9kaXJ0eV9jbWQ7CisKKwlkaXJ0eS0+ZmJfaWQgPSBmYi0+YmFzZS5pZDsKKwlkaXJ0eS0+ ZmxhZ3MgPSBmbGFnczsKKwlkaXJ0eS0+Y29sb3IgPSBjb2xvcjsKKwlkaXJ0eS0+bnVtX2NsaXBz ID0gbnVtX2NsaXBzOworCisJaWYgKG51bV9jbGlwcykKKwkJbWVtY3B5KGV2LT5jbGlwcywgY2xp cHMsIHNpemVfY2xpcHMpOworCisJcmV0ID0gdWRybV9zZW5kX2V2ZW50KHVkZXYsIGV2KTsKKwlp ZiAocmV0KQorCQlwcl9lcnJfcmF0ZWxpbWl0ZWQoIkZhaWxlZCB0byB1cGRhdGUgZGlzcGxheSAl ZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHVkcm1fZmJfZGVz dHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgdWRybV9kZXZpY2Ug KnVkZXYgPSBkcm1fdG9fdWRybShmYi0+ZGV2KTsKKwlzdHJ1Y3QgdWRybV9ldmVudF9mYiBldiA9 IHsKKwkJLmJhc2UgPSB7CisJCQkudHlwZSA9IFVEUk1fRVZFTlRfRkJfREVTVFJPWSwKKwkJCS5s ZW5ndGggPSBzaXplb2YoZXYpLAorCQl9LAorCX07CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq aXRlcjsKKwlpbnQgaWQ7CisKKwlEUk1fREVCVUdfS01TKCJbRkI6JWRdXG4iLCBmYi0+YmFzZS5p ZCk7CisKKwlpZHJfZm9yX2VhY2hfZW50cnkoJnVkZXYtPmlkciwgaXRlciwgaWQpIHsKKwkJaWYg KGZiID09IGl0ZXIpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIWl0ZXIpIHsKKwkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gZmluZCBpZHJcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlldi5mYl9pZCA9 IGlkOworCWlkcl9yZW1vdmUoJnVkZXYtPmlkciwgaWQpOworCisJdWRybV9zZW5kX2V2ZW50KHVk ZXYsICZldik7CitvdXQ6CisJZHJtX2ZiX2NtYV9kZXN0cm95KGZiKTsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgdWRybV9mYl9mdW5jcyA9IHsKKwkuZGVz dHJveQk9IHVkcm1fZmJfZGVzdHJveSwKKwkuY3JlYXRlX2hhbmRsZQk9IGRybV9mYl9jbWFfY3Jl YXRlX2hhbmRsZSwKKwkuZGlydHkJCT0gdWRybV9mYl9kaXJ0eSwKK307CisKK3N0YXRpYyBpbnQg dWRybV9mYl9jcmVhdGVfZXZlbnQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3Ry dWN0IHVkcm1fZGV2aWNlICp1ZGV2ID0gZHJtX3RvX3Vkcm0oZmItPmRldik7CisJc3RydWN0IHVk cm1fZXZlbnRfZmIgZXYgPSB7CisJCS5iYXNlID0geworCQkJLnR5cGUgPSBVRFJNX0VWRU5UX0ZC X0NSRUFURSwKKwkJCS5sZW5ndGggPSBzaXplb2YoZXYpLAorCQl9LAorCQkuZmJfaWQgPSBmYi0+ YmFzZS5pZCwKKwl9OworCWludCByZXQ7CisKKwlEUk1fREVCVUdfS01TKCJbRkI6JWRdXG4iLCBm Yi0+YmFzZS5pZCk7CisKKwkvKiBOZWVkZWQgYmVjYXVzZSB0aGUgaWQgaXMgZ29uZSBpbiAmZHJt X2ZyYW1lYnVmZmVyX2Z1bmNzLT5kZXN0cm95ICovCisJcmV0ID0gaWRyX2FsbG9jKCZ1ZGV2LT5p ZHIsIGZiLCBmYi0+YmFzZS5pZCwgZmItPmJhc2UuaWQgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAo cmV0IDwgMSkgeworCQlEUk1fRVJST1IoIltGQjolZF06IGZhaWxlZCB0byBhbGxvY2F0ZSBpZHIg JWRcbiIsIGZiLT5iYXNlLmlkLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVk cm1fc2VuZF9ldmVudCh1ZGV2LCAmZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqCit1ZHJtX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2Zi X2NtZDIgKm1vZGVfY21kKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCWludCBy ZXQ7CisKKwlmYiA9IGRybV9mYl9jbWFfY3JlYXRlX3dpdGhfZnVuY3MoZHJtLCBmaWxlX3ByaXYs IG1vZGVfY21kLAorCQkJCQkgICZ1ZHJtX2ZiX2Z1bmNzKTsKKwlpZiAoSVNfRVJSKGZiKSkKKwkJ cmV0dXJuIGZiOworCisJRFJNX0RFQlVHX0tNUygiW0ZCOiVkXSBwaXhlbF9mb3JtYXQ6ICVzXG4i LCBmYi0+YmFzZS5pZCwKKwkJICAgICAgZHJtX2dldF9mb3JtYXRfbmFtZShmYi0+cGl4ZWxfZm9y bWF0KSk7CisKKwlyZXQgPSB1ZHJtX2ZiX2NyZWF0ZV9ldmVudChmYik7CisKKwlyZXR1cm4gZmI7 Cit9CisKK3N0YXRpYyBpbnQgdWRybV9mYmRldl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIg KmhlbHBlciwKKwkJCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgKnNpemVzKQor eworCXN0cnVjdCB1ZHJtX2RldmljZSAqdWRldiA9IGRybV90b191ZHJtKGhlbHBlci0+ZGV2KTsK KwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2ZiZGV2X2NtYV9jcmVhdGVfd2l0aF9mdW5jcyhoZWxw ZXIsIHNpemVzLCAmdWRybV9mYl9mdW5jcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXN0cm5jcHkoaGVscGVyLT5mYmRldi0+Zml4LmlkLCBoZWxwZXItPmRldi0+ZHJpdmVyLT5uYW1l LCAxNik7CisJdWRldi0+ZmJkZXZfaGVscGVyID0gaGVscGVyOworCisJRFJNX0RFQlVHX0tNUygi ZmJkZXY6IFtGQjolZF0gcGl4ZWxfZm9ybWF0PSVzXG4iLCBoZWxwZXItPmZiLT5iYXNlLmlkLAor CQkgICAgICBkcm1fZ2V0X2Zvcm1hdF9uYW1lKGhlbHBlci0+ZmItPnBpeGVsX2Zvcm1hdCkpOwor CisJdWRybV9mYl9jcmVhdGVfZXZlbnQoaGVscGVyLT5mYik7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIHVkcm1fZmJfaGVscGVyX2Z1 bmNzID0geworCS5mYl9wcm9iZSA9IHVkcm1fZmJkZXZfY3JlYXRlLAorfTsKKworaW50IHVkcm1f ZmJkZXZfaW5pdChzdHJ1Y3QgdWRybV9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRybSA9ICZ1ZGV2LT5kcm07CisJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2OworCWlu dCBicHA7CisKKwlEUk1fREVCVUdfS01TKCJcbiIpOworCisJYnBwID0gZHJtLT5tb2RlX2NvbmZp Zy5wcmVmZXJyZWRfZGVwdGg7CisJZmJkZXYgPSBkcm1fZmJkZXZfY21hX2luaXRfd2l0aF9mdW5j cyhkcm0sIGJwcCA/IGJwcCA6IDMyLAorCQkJCQkgICAgICBkcm0tPm1vZGVfY29uZmlnLm51bV9j cnRjLAorCQkJCQkgICAgICBkcm0tPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IsCisJCQkJCSAg ICAgICZ1ZHJtX2ZiX2hlbHBlcl9mdW5jcyk7CisJaWYgKElTX0VSUihmYmRldikpCisJCXJldHVy biBQVFJfRVJSKGZiZGV2KTsKKworCXVkZXYtPmZiZGV2X2NtYSA9IGZiZGV2OworCisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgdWRybV9mYmRldl9maW5pKHN0cnVjdCB1ZHJtX2RldmljZSAqdWRldikK K3sKKwlkcm1fZmJkZXZfY21hX2ZpbmkodWRldi0+ZmJkZXZfY21hKTsKKwl1ZGV2LT5mYmRldl9j bWEgPSBOVUxMOworCXVkZXYtPmZiZGV2X2hlbHBlciA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdWRybS91ZHJtLXBpcGUuYyBiL2RyaXZlcnMvZ3B1L2RybS91ZHJtL3Vk cm0tcGlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTEwY2QKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRybS91ZHJtLXBpcGUuYwpAQCAtMCww ICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBOb3JhbGYgVHLDuG5uZXMKKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fbW9kZXMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+ CisKKyNpbmNsdWRlIDx1YXBpL2RybS91ZHJtLmg+CisKKyNpbmNsdWRlICJ1ZHJtLmgiCisKK3N0 YXRpYyBpbnQgdWRybV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJc3RydWN0IHVkcm1fZGV2aWNlICp1ZGV2ID0gZHJtX3RvX3Vkcm0oY29u bmVjdG9yLT5kZXYpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJnVkZXYtPmRp c3BsYXlfbW9kZTsKKworCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoY29ubmVjdG9yLT5kZXYs IG1vZGUpOworCWlmICghbW9kZSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBkdXBsaWNhdGUg bW9kZVxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChtb2RlLT5uYW1lWzBdID09ICdcMCcp CisJCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOworCisJbW9kZS0+dHlwZSB8PSBEUk1fTU9ERV9U WVBFX1BSRUZFUlJFRDsKKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisK KwlpZiAobW9kZS0+d2lkdGhfbW0pIHsKKwkJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhf bW0gPSBtb2RlLT53aWR0aF9tbTsKKwkJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21t ID0gbW9kZS0+aGVpZ2h0X21tOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHVkcm1fY29ubmVjdG9yX2hmdW5jcyA9 IHsKKwkuZ2V0X21vZGVzID0gdWRybV9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29k ZXIgPSBkcm1fYXRvbWljX2hlbHBlcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgZW51bSBk cm1fY29ubmVjdG9yX3N0YXR1cwordWRybV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJaWYgKGRybV9kZXZpY2VfaXNfdW5w bHVnZ2VkKGNvbm5lY3Rvci0+ZGV2KSkKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29u bmVjdGVkOworCisJcmV0dXJuIGNvbm5lY3Rvci0+c3RhdHVzOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgdWRybV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRw bXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkucmVzZXQgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmRldGVjdCA9IHVkcm1fY29ubmVjdG9yX2Rl dGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9t b2RlcywKKwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKKwkuYXRvbWljX2R1cGxp Y2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUs CisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rl c3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgdm9pZCB1ZHJtX2Rpc3BsYXlfcGlwZV9lbmFibGUo c3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJCSAgICAgc3RydWN0IGRy bV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCB1ZHJtX2RldmljZSAqdWRldiA9 IHBpcGVfdG9fdWRybShwaXBlKTsKKwlzdHJ1Y3QgdWRybV9ldmVudCBldiA9IHsKKwkJLnR5cGUg PSBVRFJNX0VWRU5UX1BJUEVfRU5BQkxFLAorCQkubGVuZ3RoID0gc2l6ZW9mKGV2KSwKKwl9Owor CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKKwl1ZGV2LT5wcmVwYXJlZCA9IHRydWU7CisJdWRybV9z ZW5kX2V2ZW50KHVkZXYsICZldik7Cit9CisKK3N0YXRpYyB2b2lkIHVkcm1fZGlzcGxheV9waXBl X2Rpc2FibGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlKQoreworCXN0cnVj dCB1ZHJtX2RldmljZSAqdWRldiA9IHBpcGVfdG9fdWRybShwaXBlKTsKKwlzdHJ1Y3QgdWRybV9l dmVudCBldiA9IHsKKwkJLnR5cGUgPSBVRFJNX0VWRU5UX1BJUEVfRElTQUJMRSwKKwkJLmxlbmd0 aCA9IHNpemVvZihldiksCisJfTsKKworCURSTV9ERUJVR19LTVMoIlxuIik7CisJdWRldi0+cHJl cGFyZWQgPSBmYWxzZTsKKwl1ZGV2LT5lbmFibGVkID0gZmFsc2U7CisJdWRybV9zZW5kX2V2ZW50 KHVkZXYsICZldik7Cit9CisKK3N0YXRpYyB2b2lkIHVkcm1fZGlzcGxheV9waXBlX3VwZGF0ZShz dHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJCQkJIHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgdWRybV9kZXZpY2UgKnVkZXYgPSBwaXBl X3RvX3Vkcm0ocGlwZSk7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwaXBlLT5wbGFu ZS5zdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJnVkZXYtPnBpcGUuY3J0YzsK KworCWlmICghZmIpCisJCURSTV9ERUJVR19LTVMoImZiIHVuc2V0XG4iKTsKKwllbHNlIGlmIChm YiAhPSBvbGRfc3RhdGUtPmZiKQorCQlEUk1fREVCVUdfS01TKCJmYiBjaGFuZ2VkXG4iKTsKKwll bHNlCisJCURSTV9ERUJVR19LTVMoIk5vIGZiIGNoYW5nZVxuIik7CisKKwlpZiAoZmIgJiYgKGZi ICE9IG9sZF9zdGF0ZS0+ZmIpKSB7CisJCXBpcGUtPnBsYW5lLmZiID0gZmI7CisKKwkJaWYgKGNy dGMtPnN0YXRlLT5ldmVudCkgeworCQkJdWRldi0+ZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7 CisJCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOworCQl9CisKKwkJc2NoZWR1bGVfd29yaygm dWRldi0+ZGlydHlfd29yayk7CisJfQorCisJaWYgKGNydGMtPnN0YXRlLT5ldmVudCkgeworCQlE Uk1fREVCVUdfS01TKCJjcnRjIGV2ZW50XG4iKTsKKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2 LT5ldmVudF9sb2NrKTsKKwkJZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoY3J0YywgY3J0Yy0+ c3RhdGUtPmV2ZW50KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2sp OworCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOworCX0KKworCWlmICh1ZGV2LT5mYmRldl9o ZWxwZXIgJiYgZmIgPT0gdWRldi0+ZmJkZXZfaGVscGVyLT5mYikKKwkJdWRldi0+ZmJkZXZfdXNl ZCA9IHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3Bp cGVfZnVuY3MgdWRybV9waXBlX2Z1bmNzID0geworCS5lbmFibGUgPSB1ZHJtX2Rpc3BsYXlfcGlw ZV9lbmFibGUsCisJLmRpc2FibGUgPSB1ZHJtX2Rpc3BsYXlfcGlwZV9kaXNhYmxlLAorCS51cGRh dGUgPSB1ZHJtX2Rpc3BsYXlfcGlwZV91cGRhdGUsCit9OworCitpbnQgdWRybV9kaXNwbGF5X3Bp cGVfaW5pdChzdHJ1Y3QgdWRybV9kZXZpY2UgKnVkZXYsCisJCQkgIGludCBjb25uZWN0b3JfdHlw ZSwKKwkJCSAgY29uc3QgdWludDMyX3QgKmZvcm1hdHMsCisJCQkgIHVuc2lnbmVkIGludCBmb3Jt YXRfY291bnQpCit7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmdWRl di0+ZGlzcGxheV9tb2RlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSAmdWRl di0+Y29ubmVjdG9yOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSAmdWRldi0+ZHJtOworCWlu dCByZXQ7CisKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IG1vZGUtPmhkaXNwbGF5Owor CWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gbW9kZS0+aGRpc3BsYXk7CisJZHJtLT5tb2Rl X2NvbmZpZy5taW5faGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7CisJZHJtLT5tb2RlX2NvbmZpZy5t YXhfaGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQo Y29ubmVjdG9yLCAmdWRybV9jb25uZWN0b3JfaGZ1bmNzKTsKKwlyZXQgPSBkcm1fY29ubmVjdG9y X2luaXQoZHJtLCBjb25uZWN0b3IsICZ1ZHJtX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgY29ubmVj dG9yX3R5cGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwljb25uZWN0b3ItPnN0YXR1 cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCisJcmV0ID0gZHJtX3NpbXBsZV9kaXNw bGF5X3BpcGVfaW5pdChkcm0sICZ1ZGV2LT5waXBlLCAmdWRybV9waXBlX2Z1bmNzLAorCQkJCQkg ICBmb3JtYXRzLCBmb3JtYXRfY291bnQsIGNvbm5lY3Rvcik7CisJaWYgKHJldCkKKwkJZHJtX2Nv bm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3Vkcm0vdWRybS5oIGIvZHJpdmVycy9ncHUvZHJtL3Vkcm0vdWRy bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYTAxOTEKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRybS91ZHJtLmgKQEAgLTAsMCArMSw4NCBAQAor LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBOb3JhbGYgVHLDuG5uZXMKKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9USU5ZRFJNX0gKKyNkZWZp bmUgX19MSU5VWF9USU5ZRFJNX0gKKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9r bXNfaGVscGVyLmg+CisKK3N0cnVjdCB1ZHJtX2RldmljZSB7CisJc3RydWN0IGRybV9kZXZpY2Ug ZHJtOworCXN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKKwlzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNw bGF5X3BpcGUgcGlwZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQlkaXNwbGF5X21vZGU7CisJ c3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOworCXN0cnVjdCB3b3JrX3N0cnVjdCBkaXJ0 eV93b3JrOworCXN0cnVjdCBtdXRleCBkZXZfbG9jazsKKwlib29sIHByZXBhcmVkOworCWJvb2wg ZW5hYmxlZDsKKworCXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldl9jbWE7CisJc3RydWN0IGRy bV9mYl9oZWxwZXIgKmZiZGV2X2hlbHBlcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmJkZXZfaW5p dF93b3JrOworCWJvb2wgZmJkZXZfdXNlZDsKKworCXN0cnVjdCBkcm1fcGVuZGluZ192Ymxhbmtf ZXZlbnQgKmV2ZW50OworCisJc3RydWN0IGlkcgkJaWRyOworCisJc3RydWN0IG11dGV4CQltdXRl eDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0cTsKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0 aW9uOworCisJc3RydWN0IHVkcm1fZXZlbnQJKmV2OworCWludAkJCWV2ZW50X3JldDsKKworCXUz MiBidWZfbW9kZTsKKwl1MzIgZW11bGF0ZV94cmdiODg4OF9mb3JtYXQ7CisJc3RydWN0IGRtYV9i dWYgKmRtYWJ1ZjsKKwlpbnQgYnVmX2ZkOworCisJYm9vbAkJCWluaXRpYWxpemVkOworCXN0cnVj dCB3b3JrX3N0cnVjdAlyZWxlYXNlX3dvcms7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1 ZHJtX2RldmljZSAqCitkcm1fdG9fdWRybShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXJl dHVybiBjb250YWluZXJfb2YoZHJtLCBzdHJ1Y3QgdWRybV9kZXZpY2UsIGRybSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IHVkcm1fZGV2aWNlICoKK3BpcGVfdG9fdWRybShzdHJ1Y3QgZHJt X3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwaXBl LCBzdHJ1Y3QgdWRybV9kZXZpY2UsIHBpcGUpOworfQorCitpbnQgdWRybV9zZW5kX2V2ZW50KHN0 cnVjdCB1ZHJtX2RldmljZSAqdWRldiwgdm9pZCAqZXZfaW4pOworCitpbnQgdWRybV9kcm1fcmVn aXN0ZXIoc3RydWN0IHVkcm1fZGV2aWNlICp1ZGV2LAorCQkgICAgICBzdHJ1Y3QgdWRybV9kZXZf Y3JlYXRlICpkZXZfY3JlYXRlLAorCQkgICAgICB1aW50MzJfdCAqZm9ybWF0cywgdW5zaWduZWQg aW50IG51bV9mb3JtYXRzKTsKK3ZvaWQgdWRybV9kcm1fdW5yZWdpc3RlcihzdHJ1Y3QgdWRybV9k ZXZpY2UgKnVkZXYpOworCitpbnQKK3Vkcm1fZGlzcGxheV9waXBlX2luaXQoc3RydWN0IHVkcm1f ZGV2aWNlICp0ZGV2LAorCQkJICBpbnQgY29ubmVjdG9yX3R5cGUsCisJCQkgIGNvbnN0IHVpbnQz Ml90ICpmb3JtYXRzLAorCQkJICB1bnNpZ25lZCBpbnQgZm9ybWF0X2NvdW50KTsKKworc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqCit1ZHJtX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICBjb25zdCBzdHJ1Y3QgZHJtX21vZGVf ZmJfY21kMiAqbW9kZV9jbWQpOworaW50IHVkcm1fZmJkZXZfaW5pdChzdHJ1Y3QgdWRybV9kZXZp Y2UgKnRkZXYpOwordm9pZCB1ZHJtX2ZiZGV2X2Zpbmkoc3RydWN0IHVkcm1fZGV2aWNlICp0ZGV2 KTsKKworI2VuZGlmIC8qIF9fTElOVVhfVElOWURSTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRl L3VhcGkvZHJtL3Vkcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vdWRybS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Y2QyYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS91YXBpL2RybS91ZHJtLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfVUFQSV9fVURSTV9IXworI2RlZmluZSBfVUFQSV9f VURSTV9IXworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorI2luY2x1ZGUgPHVhcGkvZHJtL2Ry bV9tb2RlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21vZGUuaD4KKyNlbmRpZgorCisjaWYgZGVm aW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgVURSTV9N QVhfTkFNRV9TSVpFICAgIDgwCisKKy8qIEZJWE1FOiBVcGRhdGUgRG9jdW1lbnRhdGlvbi9pb2N0 bC9pb2N0bC1udW1iZXIudHh0ICovCisjZGVmaW5lIFVEUk1fSU9DVExfQkFTRSAgICAgICAweEI1 CisKKyNkZWZpbmUgVURSTV9CVUZfTU9ERV9OT05FCQkwCisjZGVmaW5lIFVEUk1fQlVGX01PREVf UExBSU5fQ09QWQkxCisjZGVmaW5lIFVEUk1fQlVGX01PREVfU1dBUF9CWVRFUwkyCisKKyNkZWZp bmUgVURSTV9CVUZfTU9ERV9FTVVMX1hSR0I4ODg4CUJJVCg4KQorCitzdHJ1Y3QgdWRybV9kZXZf Y3JlYXRlIHsKKwljaGFyIG5hbWVbVURSTV9NQVhfTkFNRV9TSVpFXTsKKwlzdHJ1Y3QgZHJtX21v ZGVfbW9kZWluZm8gbW9kZTsKKwlfX3U2NCBmb3JtYXRzOworCV9fdTMyIG51bV9mb3JtYXRzOwor CV9fdTMyIGJ1Zl9tb2RlOworCV9fczMyIGJ1Zl9mZDsKKworCV9fdTMyIGluZGV4OworfTsKKwor I2RlZmluZSBVRFJNX0RFVl9DUkVBVEUgICAgICAgX0lPV1IoVURSTV9JT0NUTF9CQVNFLCAxLCBz dHJ1Y3QgdWRybV9kZXZfY3JlYXRlKQorCitzdHJ1Y3QgdWRybV9ldmVudCB7CisJX191MzIgdHlw ZTsKKwlfX3UzMiBsZW5ndGg7Cit9OworCisjZGVmaW5lIFVEUk1fRVZFTlRfUElQRV9FTkFCTEUJ MQorI2RlZmluZSBVRFJNX0VWRU5UX1BJUEVfRElTQUJMRQkyCisKKyNkZWZpbmUgVURSTV9FVkVO VF9GQl9DUkVBVEUJMworI2RlZmluZSBVRFJNX0VWRU5UX0ZCX0RFU1RST1kJNAorCitzdHJ1Y3Qg dWRybV9ldmVudF9mYiB7CisJc3RydWN0IHVkcm1fZXZlbnQgYmFzZTsKKwlfX3UzMiBmYl9pZDsK K307CisKKyNkZWZpbmUgVURSTV9FVkVOVF9GQl9ESVJUWSAJNQorCitzdHJ1Y3QgdWRybV9ldmVu dF9mYl9kaXJ0eSB7CisJc3RydWN0IHVkcm1fZXZlbnQgYmFzZTsKKwlzdHJ1Y3QgZHJtX21vZGVf ZmJfZGlydHlfY21kIGZiX2RpcnR5X2NtZDsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwc1td OworfTsKKworI2RlZmluZSBVRFJNX1BSSU1FX0hBTkRMRV9UT19GRCAweDAxCisjZGVmaW5lIERS TV9JT0NUTF9VRFJNX1BSSU1FX0hBTkRMRV9UT19GRCAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9C QVNFICsgVURSTV9QUklNRV9IQU5ETEVfVE9fRkQsIHN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlKQor CisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1VBUElf X1VEUk1fSF8gKi8KLS0KMi4xMC4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK