From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Tyshchenko Subject: [RFC PATCH v1 2/7] iommu/arm: ipmmu-vmsa: Add Xen changes for main driver Date: Wed, 26 Jul 2017 18:09:59 +0300 Message-ID: <1501081804-4882-3-git-send-email-olekstysh@gmail.com> References: <1501081804-4882-1-git-send-email-olekstysh@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1daNx9-0008NB-6F for xen-devel@lists.xenproject.org; Wed, 26 Jul 2017 15:10:23 +0000 Received: by mail-lf0-f65.google.com with SMTP id y15so7159042lfd.5 for ; Wed, 26 Jul 2017 08:10:20 -0700 (PDT) In-Reply-To: <1501081804-4882-1-git-send-email-olekstysh@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Oleksandr Tyshchenko , Julien Grall , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0uY29t PgoKTW9kaWZ5IHRoZSBMaW51eCBJUE1NVSBkcml2ZXIgdG8gYmUgZnVuY3Rpb25hbCBpbnNpZGUg WGVuLgpBbGwgZGV2aWNlcyB3aXRoaW4gYSBzaW5nbGUgWGVuIGRvbWFpbiBtdXN0IHVzZSB0aGUg c2FtZQpJT01NVSBjb250ZXh0IG5vIG1hdHRlciB3aGF0IElPTU1VIGRvbWFpbnMgdGhleSBhcmUg YXR0YWNoZWQgdG8uClRoaXMgaXMgdGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGRyaXZlcnMg aW4gTGludXgKYW5kIFhlbi4gSGF2aW5nIDggc2VwYXJhdGUgY29udGV4dHMgYWxsb3cgdXMgdG8g cGFzc3Rocm91Z2gKZGV2aWNlcyB0byA4IGd1ZXN0IGRvbWFpbiBhdCB0aGUgc2FtZSB0aW1lLgoK QWxzbyB3cmFwIGZvbGxvd2luZyBjb2RlIGluICNpZiAwOgotIEFsbCBETUEgcmVsYXRlZCBzdHVm ZgotIExpbnV4IFBNIGNhbGxiYWNrcwotIERyaXZlciByZW1vdmUgY2FsbGJhY2sKLSBpb21tdV9n cm91cCBtYW5hZ2VtZW50CgpNYXliZSwgaXQgd291bGQgYmUgbW9yZSBjb3JyZWN0IHRvIG1vdmUg ZGlmZmVyZW50IExpbnV4MlhlbiB3cmFwcGVycywKZGVmaW5lLXMsIGhlbHBlcnMgZnJvbSBJUE1N VS1WTVNBIGFuZCBTTU1VIHRvIHNvbWUgY29tbW9uIGZpbGUKYmVmb3JlIGludHJvZHVjaW5nIElQ TU1VLVZNU0EgcGF0Y2ggc2VyaWVzLiBBbmQgdGhpcyBjb21tb24gZmlsZQptaWdodCBiZSByZXVz ZWQgYnkgcG9zc2libGUgZnV0dXJlIElPTU1VcyBvbiBBUk0uCgpTaWduZWQtb2ZmLWJ5OiBPbGVr c2FuZHIgVHlzaGNoZW5rbyA8b2xla3NhbmRyX3R5c2hjaGVua29AZXBhbS5jb20+CkNDOiBKdWxp ZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgpDQzogU3RlZmFubyBTdGFiZWxsaW5pIDxz c3RhYmVsbGluaUBrZXJuZWwub3JnPgotLS0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9p cG1tdS12bXNhLmMgfCA5ODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMSBmaWxl IGNoYW5nZWQsIDk0OCBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vaXBtbXUtdm1zYS5jIGIveGVuL2RyaXZlcnMv cGFzc3Rocm91Z2gvYXJtL2lwbW11LXZtc2EuYwppbmRleCAyYjM4MGZmLi5lNTRiNTA3IDEwMDY0 NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vaXBtbXUtdm1zYS5jCisrKyBiL3hl bi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9pcG1tdS12bXNhLmMKQEAgLTYsMzEgKzYsMjEyIEBA CiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBCYXNlZCBvbiBMaW51 eCBkcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYworICogPT4gY29tbWl0IGY0NzQ3ZWJhODljOWI1 ZDkwZmRmMGE1NDU4ODY2MjgzYzQ3Mzk1ZDgKKyAqIChpb21tdS9pcG1tdS12bXNhOiBSZXN0cmlj dCBJT01NVSBEb21haW4gR2VvbWV0cnkgdG8gMzItYml0IGFkZHJlc3Mgc3BhY2UpCisgKgorICog WGVuIG1vZGlmaWNhdGlvbjoKKyAqIE9sZWtzYW5kciBUeXNoY2hlbmtvIDxPbGVrc2FuZHJfVHlz aGNoZW5rb0BlcGFtLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEVQQU0gU3lzdGVt cyBJbmMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgotI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLWlvbW11Lmg+Ci0jaW5jbHVkZSA8bGludXgv ZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9l eHBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9p by5oPgotI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9pb21tdS5oPgotI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+ Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJNKSAmJiAh ZGVmaW5lZChDT05GSUdfSU9NTVVfRE1BKQotI2luY2x1ZGUgPGFzbS9kbWEtaW9tbXUuaD4KLSNp bmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2VuZGlmCisjaW5jbHVkZSA8eGVuL2NvbmZpZy5oPgor I2luY2x1ZGUgPHhlbi9kZWxheS5oPgorI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUg PHhlbi9lcnIuaD4KKyNpbmNsdWRlIDx4ZW4vaXJxLmg+CisjaW5jbHVkZSA8eGVuL2xpYi5oPgor I2luY2x1ZGUgPHhlbi9saXN0Lmg+CisjaW5jbHVkZSA8eGVuL21tLmg+CisjaW5jbHVkZSA8eGVu L3ZtYXAuaD4KKyNpbmNsdWRlIDx4ZW4vcmJ0cmVlLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+ CisjaW5jbHVkZSA8eGVuL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1 ZGUgPGFzbS9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGxh dGZvcm0uaD4KIAogI2luY2x1ZGUgImlvLXBndGFibGUuaCIKIAorLyogVE9ETzoKKyAqIDEuIE9w dGltaXplIHhlbl9kb21haW4tPmxvY2sgdXNhZ2UuCisgKiAyLiBTaG93IGRvbWFpbl9pZCBpbiBl dmVyeSBwcmludGsgd2hpY2ggaXMgcGVyIFhlbiBkb21haW4uCisgKgorICovCisKKy8qKioqKiBT dGFydCBvZiBYZW4gc3BlY2lmaWMgY29kZSAqKioqKi8KKworI2RlZmluZSBJT01NVV9SRUFECSgx IDw8IDApCisjZGVmaW5lIElPTU1VX1dSSVRFCSgxIDw8IDEpCisjZGVmaW5lIElPTU1VX0NBQ0hF CSgxIDw8IDIpIC8qIERNQSBjYWNoZSBjb2hlcmVuY3kgKi8KKyNkZWZpbmUgSU9NTVVfTk9FWEVD CSgxIDw8IDMpCisjZGVmaW5lIElPTU1VX01NSU8JKDEgPDwgNCkgLyogZS5nLiB0aGluZ3MgbGlr ZSBNU0kgZG9vcmJlbGxzICovCisKKyNkZWZpbmUgX19mbHMoeCkgKGZscyh4KSAtIDEpCisjZGVm aW5lIF9fZmZzKHgpIChmZnMoeCkgLSAxKQorCisjZGVmaW5lIElPX1BHVEFCTEVfUVVJUktfQVJN X05TCQlCSVQoMCkKKworI2RlZmluZSBpb3JlYWQzMiByZWFkbAorI2RlZmluZSBpb3dyaXRlMzIg d3JpdGVsCisKKyNkZWZpbmUgZGV2X2luZm8gZGV2X25vdGljZQorCisjZGVmaW5lIGRldm1fcmVx dWVzdF9pcnEodW51c2VkLCBpcnEsIGZ1bmMsIGZsYWdzLCBuYW1lLCBkZXYpIFwKKwlyZXF1ZXN0 X2lycShpcnEsIGZsYWdzLCBmdW5jLCBuYW1lLCBkZXYpCisKKy8qIEFsaWFzIHRvIFhlbiBkZXZp Y2UgdHJlZSBoZWxwZXJzICovCisjZGVmaW5lIGRldmljZV9ub2RlIGR0X2RldmljZV9ub2RlCisj ZGVmaW5lIG9mX3BoYW5kbGVfYXJncyBkdF9waGFuZGxlX2FyZ3MKKyNkZWZpbmUgb2ZfZGV2aWNl X2lkIGR0X2RldmljZV9tYXRjaAorI2RlZmluZSBvZl9tYXRjaF9ub2RlIGR0X21hdGNoX25vZGUK KyNkZWZpbmUgb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MgZHRfcGFyc2VfcGhhbmRsZV93aXRo X2FyZ3MKKyNkZWZpbmUgb2ZfZmluZF9wcm9wZXJ0eSBkdF9maW5kX3Byb3BlcnR5CisjZGVmaW5l IG9mX2NvdW50X3BoYW5kbGVfd2l0aF9hcmdzIGR0X2NvdW50X3BoYW5kbGVfd2l0aF9hcmdzCisK Ky8qIFhlbjogSGVscGVycyB0byBnZXQgZGV2aWNlIE1NSU8gYW5kIElSUXMgKi8KK3N0cnVjdCBy ZXNvdXJjZQoreworCXU2NCBhZGRyOworCXU2NCBzaXplOworCXVuc2lnbmVkIGludCB0eXBlOwor fTsKKworI2RlZmluZSByZXNvdXJjZV9zaXplKHJlcykgKHJlcyktPnNpemU7CisKKyNkZWZpbmUg cGxhdGZvcm1fZGV2aWNlIGR0X2RldmljZV9ub2RlCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU0g MAorI2RlZmluZSBJT1JFU09VUkNFX0lSUSAxCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKnBs YXRmb3JtX2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCQkg ICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IG51bSkKK3sK KwkvKgorCSAqIFRoZSByZXNvdXJjZSBpcyBvbmx5IHVzZWQgYmV0d2VlbiAyIGNhbGxzIG9mIHBs YXRmb3JtX2dldF9yZXNvdXJjZS4KKwkgKiBJdCdzIHF1aXRlIHVnbHkgYnV0IGl0J3MgYXZvaWQg dG8gYWRkIHRvbyBtdWNoIGNvZGUgaW4gdGhlIHBhcnQKKwkgKiBpbXBvcnRlZCBmcm9tIExpbnV4 CisJICovCisJc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXM7CisJaW50IHJldCA9IDA7CisKKwly ZXMudHlwZSA9IHR5cGU7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElPUkVTT1VSQ0VfTUVN OgorCQlyZXQgPSBkdF9kZXZpY2VfZ2V0X2FkZHJlc3MocGRldiwgbnVtLCAmcmVzLmFkZHIsICZy ZXMuc2l6ZSk7CisKKwkJcmV0dXJuICgocmV0KSA/IE5VTEwgOiAmcmVzKTsKKworCWNhc2UgSU9S RVNPVVJDRV9JUlE6CisJCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgbnVtKTsKKwkJaWYg KHJldCA8IDApCisJCQlyZXR1cm4gTlVMTDsKKworCQlyZXMuYWRkciA9IHJldDsKKwkJcmVzLnNp emUgPSAxOworCisJCXJldHVybiAmcmVzOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJ fQorfQorCitlbnVtIGlycXJldHVybiB7CisJSVJRX05PTkUJPSAoMCA8PCAwKSwKKwlJUlFfSEFO RExFRAk9ICgxIDw8IDApLAorfTsKKwordHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5f dDsKKworLyogRGV2aWNlIGxvZ2dlciBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgZGV2X3ByaW50KGRl diwgbHZsLCBmbXQsIC4uLikJCQkJCQlcCisJIHByaW50ayhsdmwgImlwbW11OiAlczogIiBmbXQs IGR0X25vZGVfZnVsbF9uYW1lKGRldl90b19kdChkZXYpKSwgIyMgX19WQV9BUkdTX18pCisKKyNk ZWZpbmUgZGV2X2RiZyhkZXYsIGZtdCwgLi4uKSBkZXZfcHJpbnQoZGV2LCBYRU5MT0dfREVCVUcs IGZtdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmbXQsIC4uLikg ZGV2X3ByaW50KGRldiwgWEVOTE9HX0lORk8sIGZtdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5l IGRldl93YXJuKGRldiwgZm10LCAuLi4pIGRldl9wcmludChkZXYsIFhFTkxPR19XQVJOSU5HLCBm bXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBkZXZfZXJyKGRldiwgZm10LCAuLi4pIGRldl9w cmludChkZXYsIFhFTkxPR19FUlIsIGZtdCwgIyMgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgZGV2 X2Vycl9yYXRlbGltaXRlZChkZXYsIGZtdCwgLi4uKQkJCQkJXAorCSBkZXZfcHJpbnQoZGV2LCBY RU5MT0dfRVJSLCBmbXQsICMjIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGRldl9uYW1lKGRldikg ZHRfbm9kZV9mdWxsX25hbWUoZGV2X3RvX2R0KGRldikpCisKKy8qIEFsaWFzIHRvIFhlbiBhbGxv Y2F0aW9uIGhlbHBlcnMgKi8KKyNkZWZpbmUga2ZyZWUgeGZyZWUKKyNkZWZpbmUga21hbGxvYyhz aXplLCBmbGFncykJCV94bWFsbG9jKHNpemUsIHNpemVvZih2b2lkICopKQorI2RlZmluZSBremFs bG9jKHNpemUsIGZsYWdzKQkJX3h6YWxsb2Moc2l6ZSwgc2l6ZW9mKHZvaWQgKikpCisjZGVmaW5l IGRldm1fa3phbGxvYyhkZXYsIHNpemUsIGZsYWdzKQlfeHphbGxvYyhzaXplLCBzaXplb2Yodm9p ZCAqKSkKKyNkZWZpbmUga21hbGxvY19hcnJheShzaXplLCBuLCBmbGFncykJX3htYWxsb2NfYXJy YXkoc2l6ZSwgc2l6ZW9mKHZvaWQgKiksIG4pCisjZGVmaW5lIGtjYWxsb2Moc2l6ZSwgbiwgZmxh Z3MpCQlfeHphbGxvY19hcnJheShzaXplLCBzaXplb2Yodm9pZCAqKSwgbikKKworc3RhdGljIHZv aWQgX19pb21lbSAqZGV2bV9pb3JlbWFwX3Jlc291cmNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ CQkJICAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJdm9pZCBfX2lvbWVtICpwdHI7CisKKwlp ZiAoIXJlcyB8fCByZXMtPnR5cGUgIT0gSU9SRVNPVVJDRV9NRU0pIHsKKwkJZGV2X2VycihkZXYs ICJJbnZhbGlkIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQor CisJcHRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+YWRkciwgcmVzLT5zaXplKTsKKwlpZiAoIXB0 cikgeworCQlkZXZfZXJyKGRldiwKKwkJCSJpb3JlbWFwIGZhaWxlZCAoYWRkciAweCUiUFJJeDY0 IiBzaXplIDB4JSJQUkl4NjQiKVxuIiwKKwkJCXJlcy0+YWRkciwgcmVzLT5zaXplKTsKKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJcmV0dXJuIHB0cjsKK30KKworLyogWGVuIGRv ZXNuJ3QgaGFuZGxlIElPTU1VIGZhdWx0ICovCisjZGVmaW5lIHJlcG9ydF9pb21tdV9mYXVsdCgu Li4pCTEKKworI2RlZmluZSBNT0RVTEVfREVWSUNFX1RBQkxFKHR5cGUsIG5hbWUpCisjZGVmaW5l IG1vZHVsZV9wYXJhbV9uYW1lZChuYW1lLCB2YWx1ZSwgdHlwZSwgcGVybSkKKyNkZWZpbmUgTU9E VUxFX1BBUk1fREVTQyhfcGFybSwgZGVzYykKKworLyogWGVuOiBEdW1teSBpb21tdV9kb21haW4g Ki8KK3N0cnVjdCBpb21tdV9kb21haW4KK3sKKwlhdG9taWNfdCByZWY7CisJLyogVXNlZCB0byBs aW5rIGlvbW11X2RvbWFpbiBjb250ZXh0cyBmb3IgYSBzYW1lIGRvbWFpbi4KKwkgKiBUaGVyZSBp cyBhdCBsZWFzdCBvbmUgcGVyLUlQTU1VIHRvIHVzZWQgYnkgdGhlIGRvbWFpbi4KKwkgKiAqLwor CXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7Cit9OworCisvKiBYZW46IERlc2NyaWJlcyBpbmZvcm1h dGlvbnMgcmVxdWlyZWQgZm9yIGEgWGVuIGRvbWFpbiAqLworc3RydWN0IGlwbW11X3Ztc2FfeGVu X2RvbWFpbiB7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJLyogTGlzdCBvZiBjb250ZXh0IChpLmUg aW9tbXVfZG9tYWluKSBhc3NvY2lhdGVkIHRvIHRoaXMgZG9tYWluICovCisJc3RydWN0IGxpc3Rf aGVhZAkJY29udGV4dHM7CisJc3RydWN0IGlvbW11X2RvbWFpbgkJKmJhc2VfY29udGV4dDsKK307 CisKKy8qCisgKiBYZW46IEluZm9ybWF0aW9uIGFib3V0IGVhY2ggZGV2aWNlIHN0b3JlZCBpbiBk ZXYtPmFyY2hkYXRhLmlvbW11CisgKgorICogT24gTGludXggdGhlIGRldi0+YXJjaGRhdGEuaW9t bXUgb25seSBzdG9yZXMgdGhlIGFyY2ggc3BlY2lmaWMgaW5mb3JtYXRpb24sCisgKiBidXQsIG9u IFhlbiwgd2UgYWxzbyBoYXZlIHRvIHN0b3JlIHRoZSBpb21tdSBkb21haW4uCisgKi8KK3N0cnVj dCBpcG1tdV92bXNhX3hlbl9kZXZpY2UgeworCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsK KwlzdHJ1Y3QgaXBtbXVfdm1zYV9hcmNoZGF0YSAqYXJjaGRhdGE7Cit9OworCisjZGVmaW5lIGRl dl9pb21tdShkZXYpICgoc3RydWN0IGlwbW11X3Ztc2FfeGVuX2RldmljZSAqKWRldi0+YXJjaGRh dGEuaW9tbXUpCisjZGVmaW5lIGRldl9pb21tdV9kb21haW4oZGV2KSAoZGV2X2lvbW11KGRldikt PmRvbWFpbikKKworLyoqKioqIFN0YXJ0IG9mIExpbnV4IElQTU1VIGNvZGUgKioqKiovCisKICNk ZWZpbmUgSVBNTVVfQ1RYX01BWCA4CiAKIHN0cnVjdCBpcG1tdV9mZWF0dXJlcyB7CkBAIC02NCw3 ICsyNDUsOSBAQCBzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgewogCXN0cnVjdCBod19yZWdpc3Rl ciAqcmVnX2JhY2t1cFtJUE1NVV9DVFhfTUFYXTsKICNlbmRpZgogCisjaWYgMCAvKiBYZW46IE5v dCBuZWVkZWQgKi8KIAlzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcgKm1hcHBpbmc7CisjZW5kaWYK IH07CiAKIHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiB7CkBAIC03Nyw2ICsyNjAsOSBAQCBzdHJ1 Y3QgaXBtbXVfdm1zYV9kb21haW4gewogCiAJdW5zaWduZWQgaW50IGNvbnRleHRfaWQ7CiAJc3Bp bmxvY2tfdCBsb2NrOwkJCS8qIFByb3RlY3RzIG1hcHBpbmdzICovCisKKwkvKiBYZW46IERvbWFp biBhc3NvY2lhdGVkIHRvIHRoaXMgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBkb21haW4gKmQ7 CiB9OwogCiBzdHJ1Y3QgaXBtbXVfdm1zYV9hcmNoZGF0YSB7CkBAIC05NCwxNCArMjgwLDIwIEBA IHN0cnVjdCBpcG1tdV92bXNhX2FyY2hkYXRhIHsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBt bXVfZGV2aWNlc19sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQoaXBtbXVfZGV2aWNlcyk7CiAKKyNp ZiAwIC8qIFhlbjogTm90IG5lZWRlZCAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhpcG1tdV9z bGF2ZV9kZXZpY2VzX2xvY2spOwogc3RhdGljIExJU1RfSEVBRChpcG1tdV9zbGF2ZV9kZXZpY2Vz KTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICp0b192bXNhX2Rv bWFpbihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb20pCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihk b20sIHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiwgaW9fZG9tYWluKTsKIH0KIAorLyoKKyAqIFhl bjogUmV3cml0ZSBMaW51eCBoZWxwZXJzIHRvIG1hbmlwdWxhdGUgd2l0aCBhcmNoZGF0YSBvbiBY ZW4uCisgKi8KKyNpZiAwCiAjaWYgZGVmaW5lZChDT05GSUdfQVJNKSB8fCBkZWZpbmVkKENPTkZJ R19BUk02NCkKIHN0YXRpYyBzdHJ1Y3QgaXBtbXVfdm1zYV9hcmNoZGF0YSAqdG9fYXJjaGRhdGEo c3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTIwLDYgKzMxMiwxNiBAQCBzdGF0aWMgdm9pZCBz ZXRfYXJjaGRhdGEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaXBtbXVfdm1zYV9hcmNoZGF0 YSAqcCkKIHsKIH0KICNlbmRpZgorI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgaXBtbXVfdm1zYV9hcmNo ZGF0YSAqdG9fYXJjaGRhdGEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXZfaW9t bXUoZGV2KS0+YXJjaGRhdGE7Cit9CitzdGF0aWMgdm9pZCBzZXRfYXJjaGRhdGEoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgaXBtbXVfdm1zYV9hcmNoZGF0YSAqcCkKK3sKKwlkZXZfaW9tbXUo ZGV2KS0+YXJjaGRhdGEgPSBwOworfQorI2VuZGlmCiAKICNkZWZpbmUgVExCX0xPT1BfVElNRU9V VAkJMTAwCS8qIDEwMHVzICovCiAKQEAgLTM1NSw2ICs1NTcsMTAgQEAgc3RhdGljIHN0cnVjdCBo d19yZWdpc3RlciAqcm9vdF9wZ3RhYmxlW0lQTU1VX0NUWF9NQVhdID0gewogCiBzdGF0aWMgYm9v bCBpcG1tdV9pc19yb290KHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11KQogeworCS8qIFhl bjogRml4ICovCisJaWYgKCFtbXUpCisJCXJldHVybiBmYWxzZTsKKwogCWlmIChtbXUtPmZlYXR1 cmVzLT5oYXNfY2FjaGVfbGVhZl9ub2RlcykKIAkJcmV0dXJuIG1tdS0+aXNfbGVhZiA/IGZhbHNl IDogdHJ1ZTsKIAllbHNlCkBAIC00MDUsMTQgKzYxMSwyOCBAQCBzdGF0aWMgdm9pZCBpcG1tdV9j dHhfd3JpdGUoc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBy ZWcsCiAJaXBtbXVfd3JpdGUoZG9tYWluLT5yb290LCBkb21haW4tPmNvbnRleHRfaWQgKiBJTV9D VFhfU0laRSArIHJlZywgZGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwbW11X2N0eF93cml0ZTIo c3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCByZWcsCisvKiBY ZW46IFdyaXRlIHRoZSBjb250ZXh0IGZvciBjYWNoZSBJUE1NVSBvbmx5LiAqLworc3RhdGljIHZv aWQgaXBtbXVfY3R4X3dyaXRlMShzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbiwgdW5z aWduZWQgaW50IHJlZywKIAkJCSAgICAgdTMyIGRhdGEpCiB7CiAJaWYgKGRvbWFpbi0+bW11ICE9 IGRvbWFpbi0+cm9vdCkKLQkJaXBtbXVfd3JpdGUoZG9tYWluLT5tbXUsCi0JCQkgICAgZG9tYWlu LT5jb250ZXh0X2lkICogSU1fQ1RYX1NJWkUgKyByZWcsIGRhdGEpOworCQlpcG1tdV93cml0ZShk b21haW4tPm1tdSwgZG9tYWluLT5jb250ZXh0X2lkICogSU1fQ1RYX1NJWkUgKyByZWcsIGRhdGEp OworfQogCi0JaXBtbXVfd3JpdGUoZG9tYWluLT5yb290LCBkb21haW4tPmNvbnRleHRfaWQgKiBJ TV9DVFhfU0laRSArIHJlZywgZGF0YSk7CisvKgorICogWGVuOiBXcml0ZSB0aGUgY29udGV4dCBm b3IgYm90aCByb290IElQTU1VIGFuZCBhbGwgY2FjaGUgSVBNTVVzCisgKiB0aGF0IGFzc2lnbmVk IHRvIHRoaXMgWGVuIGRvbWFpbi4KKyAqLworc3RhdGljIHZvaWQgaXBtbXVfY3R4X3dyaXRlMihz dHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHJlZywKKwkJCSAg ICAgdTMyIGRhdGEpCit7CisJc3RydWN0IGlwbW11X3Ztc2FfeGVuX2RvbWFpbiAqeGVuX2RvbWFp biA9IGRvbV9pb21tdShkb21haW4tPmQpLT5hcmNoLnByaXY7CisJc3RydWN0IGlvbW11X2RvbWFp biAqaW9fZG9tYWluOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpb19kb21haW4sICZ4ZW5fZG9t YWluLT5jb250ZXh0cywgbGlzdCkKKwkJaXBtbXVfY3R4X3dyaXRlMSh0b192bXNhX2RvbWFpbihp b19kb21haW4pLCByZWcsIGRhdGEpOworCisJaXBtbXVfY3R4X3dyaXRlKGRvbWFpbiwgcmVnLCBk YXRhKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4OCw2ICs3MDgsMTAgQEAg c3RhdGljIHZvaWQgaXBtbXVfdGxiX2ZsdXNoX2FsbCh2b2lkICpjb29raWUpCiB7CiAJc3RydWN0 IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4gPSBjb29raWU7CiAKKwkvKiBYZW46IEp1c3QgcmV0 dXJuIGlmIGNvbnRleHRfaWQgaGFzIG5vbi1leGlzdGVudCB2YWx1ZSAqLworCWlmIChkb21haW4t PmNvbnRleHRfaWQgPj0gZG9tYWluLT5yb290LT5udW1fY3R4KQorCQlyZXR1cm47CisKIAlpcG1t dV90bGJfaW52YWxpZGF0ZShkb21haW4pOwogfQogCkBAIC01NDksOCArNzczLDEwIEBAIHN0YXRp YyBpbnQgaXBtbXVfZG9tYWluX2luaXRfY29udGV4dChzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4g KmRvbWFpbikKIAlkb21haW4tPmNmZy5pYXMgPSAzMjsKIAlkb21haW4tPmNmZy5vYXMgPSA0MDsK IAlkb21haW4tPmNmZy50bGIgPSAmaXBtbXVfZ2F0aGVyX29wczsKKyNpZiAwIC8qIFhlbjogTm90 IG5lZWRlZCAqLwogCWRvbWFpbi0+aW9fZG9tYWluLmdlb21ldHJ5LmFwZXJ0dXJlX2VuZCA9IERN QV9CSVRfTUFTSygzMik7CiAJZG9tYWluLT5pb19kb21haW4uZ2VvbWV0cnkuZm9yY2VfYXBlcnR1 cmUgPSB0cnVlOworI2VuZGlmCiAJLyoKIAkgKiBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY29oZXJl bnQgd2FsayB0aHJvdWdoIENDSSB3aXRoIERWTSBhbmQgcmVtb3ZlCiAJICogY2FjaGUgaGFuZGxp bmcuIEZvciBub3csIGRlbGVnYXRlIGl0IHRvIHRoZSBpby1wZ3RhYmxlIGNvZGUuCkBAIC01NjIs NiArNzg4LDkgQEAgc3RhdGljIGludCBpcG1tdV9kb21haW5faW5pdF9jb250ZXh0KHN0cnVjdCBp cG1tdV92bXNhX2RvbWFpbiAqZG9tYWluKQogCWlmICghZG9tYWluLT5pb3ApCiAJCXJldHVybiAt RUlOVkFMOwogCisJLyogWGVuOiBJbml0aWFsaXplIGNvbnRleHRfaWQgd2l0aCBub24tZXhpc3Rl bnQgdmFsdWUgKi8KKwlkb21haW4tPmNvbnRleHRfaWQgPSBkb21haW4tPnJvb3QtPm51bV9jdHg7 CisKIAkvKgogCSAqIEZpbmQgYW4gdW51c2VkIGNvbnRleHQuCiAJICovCkBAIC01NzgsNiArODA3 LDExIEBAIHN0YXRpYyBpbnQgaXBtbXVfZG9tYWluX2luaXRfY29udGV4dChzdHJ1Y3QgaXBtbXVf dm1zYV9kb21haW4gKmRvbWFpbikKIAogCS8qIFRUQlIwICovCiAJdHRiciA9IGRvbWFpbi0+Y2Zn LmFybV9scGFlX3MxX2NmZy50dGJyWzBdOworCisJLyogWGVuOiAqLworCWRldl9ub3RpY2UoZG9t YWluLT5yb290LT5kZXYsICJkJWQ6IFNldCBJUE1NVSBjb250ZXh0ICV1IChwZ2QgMHglIlBSSXg2 NCIpXG4iLAorCQkJZG9tYWluLT5kLT5kb21haW5faWQsIGRvbWFpbi0+Y29udGV4dF9pZCwgdHRi cik7CisKIAlpcG1tdV9jdHhfd3JpdGUoZG9tYWluLCBJTVRUTEJSMCwgdHRicik7CiAJaXBtbXVf Y3R4X3dyaXRlKGRvbWFpbiwgSU1UVFVCUjAsIHR0YnIgPj4gMzIpOwogCkBAIC02MTYsOCArODUw LDkgQEAgc3RhdGljIGludCBpcG1tdV9kb21haW5faW5pdF9jb250ZXh0KHN0cnVjdCBpcG1tdV92 bXNhX2RvbWFpbiAqZG9tYWluKQogCSAqIHRyYW5zbGF0aW9uIHRhYmxlIGZvcm1hdCBkb2Vzbid0 IHVzZSBURVggcmVtYXBwaW5nLiBEb24ndCBlbmFibGUgQUYKIAkgKiBzb2Z0d2FyZSBtYW5hZ2Vt ZW50IGFzIHdlIGhhdmUgbm8gdXNlIGZvciBpdC4gRmx1c2ggdGhlIFRMQiBhcwogCSAqIHJlcXVp cmVkIHdoZW4gbW9kaWZ5aW5nIHRoZSBjb250ZXh0IHJlZ2lzdGVycy4KKwkgKiBYZW46IEVuYWJs ZSB0aGUgY29udGV4dCBmb3IgdGhlIHJvb3QgSVBNTVUgb25seS4KIAkgKi8KLQlpcG1tdV9jdHhf d3JpdGUyKGRvbWFpbiwgSU1DVFIsCisJaXBtbXVfY3R4X3dyaXRlKGRvbWFpbiwgSU1DVFIsCiAJ CQkgSU1DVFJfSU5URU4gfCBJTUNUUl9GTFVTSCB8IElNQ1RSX01NVUVOKTsKIAogCXJldHVybiAw OwpAQCAtNjM4LDEzICs4NzMsMTggQEAgc3RhdGljIHZvaWQgaXBtbXVfZG9tYWluX2ZyZWVfY29u dGV4dChzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKm1tdSwKIAogc3RhdGljIHZvaWQgaXBtbXVf ZG9tYWluX2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbikK IHsKKwkvKiBYZW46IEp1c3QgcmV0dXJuIGlmIGNvbnRleHRfaWQgaGFzIG5vbi1leGlzdGVudCB2 YWx1ZSAqLworCWlmIChkb21haW4tPmNvbnRleHRfaWQgPj0gZG9tYWluLT5yb290LT5udW1fY3R4 KQorCQlyZXR1cm47CisKIAkvKgogCSAqIERpc2FibGUgdGhlIGNvbnRleHQuIEZsdXNoIHRoZSBU TEIgYXMgcmVxdWlyZWQgd2hlbiBtb2RpZnlpbmcgdGhlCiAJICogY29udGV4dCByZWdpc3RlcnMu CiAJICoKIAkgKiBUT0RPOiBJcyBUTEIgZmx1c2ggcmVhbGx5IG5lZWRlZCA/CisJICogWGVuOiBE aXNhYmxlIHRoZSBjb250ZXh0IGZvciB0aGUgcm9vdCBJUE1NVSBvbmx5LgogCSAqLwotCWlwbW11 X2N0eF93cml0ZTIoZG9tYWluLCBJTUNUUiwgSU1DVFJfRkxVU0gpOworCWlwbW11X2N0eF93cml0 ZShkb21haW4sIElNQ1RSLCBJTUNUUl9GTFVTSCk7CiAJaXBtbXVfdGxiX3N5bmMoZG9tYWluKTsK IAogI2lmZGVmIENPTkZJR19SQ0FSX0REUl9CQUNLVVAKQEAgLTY1MiwxMiArODkyLDE2IEBAIHN0 YXRpYyB2b2lkIGlwbW11X2RvbWFpbl9kZXN0cm95X2NvbnRleHQoc3RydWN0IGlwbW11X3Ztc2Ff ZG9tYWluICpkb21haW4pCiAjZW5kaWYKIAogCWlwbW11X2RvbWFpbl9mcmVlX2NvbnRleHQoZG9t YWluLT5yb290LCBkb21haW4tPmNvbnRleHRfaWQpOworCisJLyogWGVuOiBJbml0aWFsaXplIGNv bnRleHRfaWQgd2l0aCBub24tZXhpc3RlbnQgdmFsdWUgKi8KKwlkb21haW4tPmNvbnRleHRfaWQg PSBkb21haW4tPnJvb3QtPm51bV9jdHg7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg KiBGYXVsdCBIYW5kbGluZwogICovCiAKKy8qIFhlbjogU2hvdyBkb21haW5faWQgaW4gZXZlcnkg cHJpbnRrICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgaXBtbXVfZG9tYWluX2lycShzdHJ1Y3QgaXBt bXVfdm1zYV9kb21haW4gKmRvbWFpbikKIHsKIAljb25zdCB1MzIgZXJyX21hc2sgPSBJTVNUUl9N SElUIHwgSU1TVFJfQUJPUlQgfCBJTVNUUl9QRiB8IElNU1RSX1RGOwpAQCAtNjgxLDExICs5MjUs MTEgQEAgc3RhdGljIGlycXJldHVybl90IGlwbW11X2RvbWFpbl9pcnEoc3RydWN0IGlwbW11X3Zt c2FfZG9tYWluICpkb21haW4pCiAKIAkvKiBMb2cgZmF0YWwgZXJyb3JzLiAqLwogCWlmIChzdGF0 dXMgJiBJTVNUUl9NSElUKQotCQlkZXZfZXJyX3JhdGVsaW1pdGVkKG1tdS0+ZGV2LCAiTXVsdGlw bGUgVExCIGhpdHMgQDB4JTA4eFxuIiwKLQkJCQkgICAgaW92YSk7CisJCWRldl9lcnJfcmF0ZWxp bWl0ZWQobW11LT5kZXYsICJkJWQ6IE11bHRpcGxlIFRMQiBoaXRzIEAweCUwOHhcbiIsCisJCQkJ ZG9tYWluLT5kLT5kb21haW5faWQsIGlvdmEpOwogCWlmIChzdGF0dXMgJiBJTVNUUl9BQk9SVCkK LQkJZGV2X2Vycl9yYXRlbGltaXRlZChtbXUtPmRldiwgIlBhZ2UgVGFibGUgV2FsayBBYm9ydCBA MHglMDh4XG4iLAotCQkJCSAgICBpb3ZhKTsKKwkJZGV2X2Vycl9yYXRlbGltaXRlZChtbXUtPmRl diwgImQlZDogUGFnZSBUYWJsZSBXYWxrIEFib3J0IEAweCUwOHhcbiIsCisJCQkJZG9tYWluLT5k LT5kb21haW5faWQsIGlvdmEpOwogCiAJaWYgKCEoc3RhdHVzICYgKElNU1RSX1BGIHwgSU1TVFJf VEYpKSkKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtNzAwLDggKzk0NCw4IEBAIHN0YXRpYyBpcnFy ZXR1cm5fdCBpcG1tdV9kb21haW5faXJxKHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWlu KQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIAlkZXZfZXJyX3JhdGVsaW1pdGVkKG1tdS0+ZGV2 LAotCQkJICAgICJVbmhhbmRsZWQgZmF1bHQ6IHN0YXR1cyAweCUwOHggaW92YSAweCUwOHhcbiIs Ci0JCQkgICAgc3RhdHVzLCBpb3ZhKTsKKwkJCSJkJWQ6IFVuaGFuZGxlZCBmYXVsdDogc3RhdHVz IDB4JTA4eCBpb3ZhIDB4JTA4eFxuIiwKKwkJCWRvbWFpbi0+ZC0+ZG9tYWluX2lkLCBzdGF0dXMs IGlvdmEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNzMwLDYgKzk3NCwxNiBAQCBz dGF0aWMgaXJxcmV0dXJuX3QgaXBtbXVfaXJxKGludCBpcnEsIHZvaWQgKmRldikKIAlyZXR1cm4g c3RhdHVzOwogfQogCisvKiBYZW46IEludGVycnVwdCBoYW5kbGVycyB3cmFwcGVyICovCitzdGF0 aWMgdm9pZCBpcG1tdV9pcnFfeGVuKGludCBpcnEsIHZvaWQgKmRldiwKKwkJCQkgICAgICBzdHJ1 Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKK3sKKwlpcG1tdV9pcnEoaXJxLCBkZXYpOworfQorCisj ZGVmaW5lIGlwbW11X2lycSBpcG1tdV9pcnFfeGVuCisKKyNpZiAwIC8qIFhlbjogTm90IG5lZWRl ZCAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIElPTU1VIE9wZXJhdGlvbnMKICAqLwpA QCAtNzU5LDYgKzEwMTMsNyBAQCBzdGF0aWMgdm9pZCBpcG1tdV9kb21haW5fZnJlZShzdHJ1Y3Qg aW9tbXVfZG9tYWluICppb19kb21haW4pCiAJZnJlZV9pb19wZ3RhYmxlX29wcyhkb21haW4tPmlv cCk7CiAJa2ZyZWUoZG9tYWluKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IGlwbW11X2F0dGFj aF9kZXZpY2Uoc3RydWN0IGlvbW11X2RvbWFpbiAqaW9fZG9tYWluLAogCQkJICAgICAgIHN0cnVj dCBkZXZpY2UgKmRldikKQEAgLTc4Nyw3ICsxMDQyLDIwIEBAIHN0YXRpYyBpbnQgaXBtbXVfYXR0 YWNoX2RldmljZShzdHJ1Y3QgaW9tbXVfZG9tYWluICppb19kb21haW4sCiAJCS8qIFRoZSBkb21h aW4gaGFzbid0IGJlZW4gdXNlZCB5ZXQsIGluaXRpYWxpemUgaXQuICovCiAJCWRvbWFpbi0+bW11 ID0gbW11OwogCQlkb21haW4tPnJvb3QgPSByb290OworCisvKgorICogWGVuOiBXZSBoYXZlIGFs cmVhZHkgaW5pdGlhbGl6ZWQgYW5kIGVuYWJsZWQgY29udGV4dCBmb3Igcm9vdCBJUE1NVQorICog Zm9yIHRoaXMgWGVuIGRvbWFpbi4gRW5hYmxlIGNvbnRleHQgZm9yIGdpdmVuIGNhY2hlIElQTU1V IG9ubHkuCisgKiBGbHVzaCB0aGUgVExCIGFzIHJlcXVpcmVkIHdoZW4gbW9kaWZ5aW5nIHRoZSBj b250ZXh0IHJlZ2lzdGVycy4KKyAqLworI2lmIDAKIAkJcmV0ID0gaXBtbXVfZG9tYWluX2luaXRf Y29udGV4dChkb21haW4pOworI2VuZGlmCisJCWlwbW11X2N0eF93cml0ZTEoZG9tYWluLCBJTUNU UiwKKwkJCQlpcG1tdV9jdHhfcmVhZChkb21haW4sIElNQ1RSKSB8IElNQ1RSX0ZMVVNIKTsKKwor CQlkZXZfaW5mbyhkZXYsICJVc2luZyBJUE1NVSBjb250ZXh0ICV1XG4iLCBkb21haW4tPmNvbnRl eHRfaWQpOworI2lmIDAgLyogWGVuOiBOb3QgbmVlZGVkICovCiAJCWlmIChyZXQgPCAwKSB7CiAJ CQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBpbml0aWFsaXplIElQTU1VIGNvbnRleHRcbiIpOwog CQkJZG9tYWluLT5tbXUgPSBOVUxMOwpAQCAtNzk1LDYgKzEwNjMsNyBAQCBzdGF0aWMgaW50IGlw bW11X2F0dGFjaF9kZXZpY2Uoc3RydWN0IGlvbW11X2RvbWFpbiAqaW9fZG9tYWluLAogCQkJZGV2 X2luZm8oZGV2LCAiVXNpbmcgSVBNTVUgY29udGV4dCAldVxuIiwKIAkJCQkgZG9tYWluLT5jb250 ZXh0X2lkKTsKIAkJfQorI2VuZGlmCiAJfSBlbHNlIGlmIChkb21haW4tPm1tdSAhPSBtbXUpIHsK IAkJLyoKIAkJICogU29tZXRoaW5nIGlzIHdyb25nLCB3ZSBjYW4ndCBhdHRhY2ggdHdvIGRldmlj ZXMgdXNpbmcKQEAgLTgzNCw2ICsxMTAzLDE0IEBAIHN0YXRpYyB2b2lkIGlwbW11X2RldGFjaF9k ZXZpY2Uoc3RydWN0IGlvbW11X2RvbWFpbiAqaW9fZG9tYWluLAogCSAqLwogfQogCisvKgorICog WGVuOiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBjYWxsYmFja3MgaXMgaW5z dWZmaWNpZW50IGZvciB1cworICogc2luY2UgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGVk IGZyb20gTGludXggSU9NTVUgY29yZSB0aGF0CisgKiBoYXMgYWxyZWFkeSBkb25lIGFsbCByZXF1 aXJlZCBhY3Rpb25zIHN1Y2ggYXMgZG9pbmcgdmFyaW91cyBjaGVja3MsCisgKiBzcGxpdHRpbmcg aW50byBtZW1vcnkgYmxvY2sgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIGFuZCBzbyBvbi4KKyAqIFNv LCBvdmVyd3JpdGUgdGhlbSB3aXRoIG1vcmUgY29tcGxldGVseSBmdW5jdGlvbnMuCisgKi8KKyNp ZiAwCiBzdGF0aWMgaW50IGlwbW11X21hcChzdHJ1Y3QgaW9tbXVfZG9tYWluICppb19kb21haW4s IHVuc2lnbmVkIGxvbmcgaW92YSwKIAkJICAgICBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNp emUsIGludCBwcm90KQogewpAQCAtODYyLDcgKzExMzksMTc3IEBAIHN0YXRpYyBwaHlzX2FkZHJf dCBpcG1tdV9pb3ZhX3RvX3BoeXMoc3RydWN0IGlvbW11X2RvbWFpbiAqaW9fZG9tYWluLAogCiAJ cmV0dXJuIGRvbWFpbi0+aW9wLT5pb3ZhX3RvX3BoeXMoZG9tYWluLT5pb3AsIGlvdmEpOwogfQor I2VuZGlmCisKK3N0YXRpYyBzaXplX3QgaXBtbXVfcGdzaXplKHN0cnVjdCBpb21tdV9kb21haW4g KmlvX2RvbWFpbiwKKwkJdW5zaWduZWQgbG9uZyBhZGRyX21lcmdlLCBzaXplX3Qgc2l6ZSkKK3sK KwlzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbiA9IHRvX3Ztc2FfZG9tYWluKGlvX2Rv bWFpbik7CisJdW5zaWduZWQgaW50IHBnc2l6ZV9pZHg7CisJc2l6ZV90IHBnc2l6ZTsKKworCS8q IE1heCBwYWdlIHNpemUgdGhhdCBzdGlsbCBmaXRzIGludG8gJ3NpemUnICovCisJcGdzaXplX2lk eCA9IF9fZmxzKHNpemUpOworCisJLyogbmVlZCB0byBjb25zaWRlciBhbGlnbm1lbnQgcmVxdWly ZW1lbnRzID8gKi8KKwlpZiAobGlrZWx5KGFkZHJfbWVyZ2UpKSB7CisJCS8qIE1heCBwYWdlIHNp emUgYWxsb3dlZCBieSBhZGRyZXNzICovCisJCXVuc2lnbmVkIGludCBhbGlnbl9wZ3NpemVfaWR4 ID0gX19mZnMoYWRkcl9tZXJnZSk7CisJCXBnc2l6ZV9pZHggPSBtaW4ocGdzaXplX2lkeCwgYWxp Z25fcGdzaXplX2lkeCk7CisJfQorCisJLyogYnVpbGQgYSBtYXNrIG9mIGFjY2VwdGFibGUgcGFn ZSBzaXplcyAqLworCXBnc2l6ZSA9ICgxVUwgPDwgKHBnc2l6ZV9pZHggKyAxKSkgLSAxOworCisJ LyogdGhyb3cgYXdheSBwYWdlIHNpemVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlICov CisJcGdzaXplICY9IGRvbWFpbi0+Y2ZnLnBnc2l6ZV9iaXRtYXA7CisKKwkvKiBtYWtlIHN1cmUg d2UncmUgc3RpbGwgc2FuZSAqLworCUJVR19PTighcGdzaXplKTsKKworCS8qIHBpY2sgdGhlIGJp Z2dlc3QgcGFnZSAqLworCXBnc2l6ZV9pZHggPSBfX2ZscyhwZ3NpemUpOworCXBnc2l6ZSA9IDFV TCA8PCBwZ3NpemVfaWR4OworCisJcmV0dXJuIHBnc2l6ZTsKK30KKworcGh5c19hZGRyX3QgaXBt bXVfaW92YV90b19waHlzKHN0cnVjdCBpb21tdV9kb21haW4gKmlvX2RvbWFpbiwgZG1hX2FkZHJf dCBpb3ZhKQoreworCXN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluID0gdG9fdm1zYV9k b21haW4oaW9fZG9tYWluKTsKKworCWlmICh1bmxpa2VseShkb21haW4tPmlvcC0+aW92YV90b19w aHlzID09IE5VTEwpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBkb21haW4tPmlvcC0+aW92YV90 b19waHlzKGRvbWFpbi0+aW9wLCBpb3ZhKTsKK30KKworc2l6ZV90IGlwbW11X3VubWFwKHN0cnVj dCBpb21tdV9kb21haW4gKmlvX2RvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLCBzaXplX3Qgc2l6 ZSkKK3sKKwlzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbiA9IHRvX3Ztc2FfZG9tYWlu KGlvX2RvbWFpbik7CisJc2l6ZV90IHVubWFwcGVkX3BhZ2UsIHVubWFwcGVkID0gMDsKKwlkbWFf YWRkcl90IG1heF9pb3ZhOworCXVuc2lnbmVkIGludCBtaW5fcGFnZXN6OworCisJaWYgKHVubGlr ZWx5KGRvbWFpbi0+aW9wLT51bm1hcCA9PSBOVUxMIHx8CisJCQlkb21haW4tPmNmZy5wZ3NpemVf Yml0bWFwID09IDBVTCkpCisJCXJldHVybiAtRU5PREVWOworCisJLyogZmluZCBvdXQgdGhlIG1p bmltdW0gcGFnZSBzaXplIHN1cHBvcnRlZCAqLworCW1pbl9wYWdlc3ogPSAxIDw8IF9fZmZzKGRv bWFpbi0+Y2ZnLnBnc2l6ZV9iaXRtYXApOworCisJLyoKKwkgKiBUaGUgdmlydHVhbCBhZGRyZXNz LCBhcyB3ZWxsIGFzIHRoZSBzaXplIG9mIHRoZSBtYXBwaW5nLCBtdXN0IGJlCisJICogYWxpZ25l ZCAoYXQgbGVhc3QpIHRvIHRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdCBwYWdlIHN1cHBvcnRlZAor CSAqIGJ5IHRoZSBoYXJkd2FyZQorCSAqLworCWlmICghSVNfQUxJR05FRChpb3ZhIHwgc2l6ZSwg bWluX3BhZ2VzeikpIHsKKwkJcHJpbnRrKCJ1bmFsaWduZWQ6IGlvdmEgMHglbHggc2l6ZSAweCV6 eCBtaW5fcGFnZXN6IDB4JXhcbiIsCisJCSAgICAgICBpb3ZhLCBzaXplLCBtaW5fcGFnZXN6KTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCisJLyoKKwkgKiB0aGUgc3VtIG9mIHZpcnR1YWwgYWRk cmVzcyBhbmQgc2l6ZSBtdXN0IGJlIGluc2lkZSB0aGUgSU9WQSBzcGFjZQorCSAqIHRoYXQgaGFy ZHdhcmUgc3VwcG9ydHMKKwkgKi8KKwltYXhfaW92YSA9ICgxVUwgPDwgZG9tYWluLT5jZmcuaWFz KSAtIDE7CisJaWYgKChkbWFfYWRkcl90KWlvdmEgKyBzaXplID4gbWF4X2lvdmEpIHsKKwkJcHJp bnRrKCJvdXQtb2YtYm91bmQ6IGlvdmEgMHglbHggKyBzaXplIDB4JXp4ID4gbWF4X2lvdmEgMHgl IlBSSXg2NCJcbiIsCisJCQkgICBpb3ZhLCBzaXplLCBtYXhfaW92YSk7CisJCS8qIFRPRE8gUmV0 dXJuIC1FSU5WQUwgaW5zdGVhZCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIEtlZXAg aXRlcmF0aW5nIHVudGlsIHdlIGVpdGhlciB1bm1hcCAnc2l6ZScgYnl0ZXMgKG9yIG1vcmUpCisJ ICogb3Igd2UgaGl0IGFuIGFyZWEgdGhhdCBpc24ndCBtYXBwZWQuCisJICovCisJd2hpbGUgKHVu bWFwcGVkIDwgc2l6ZSkgeworCQlzaXplX3QgcGdzaXplID0gaXBtbXVfcGdzaXplKGlvX2RvbWFp biwgaW92YSwgc2l6ZSAtIHVubWFwcGVkKTsKKworCQl1bm1hcHBlZF9wYWdlID0gZG9tYWluLT5p b3AtPnVubWFwKGRvbWFpbi0+aW9wLCBpb3ZhLCBwZ3NpemUpOworCQlpZiAoIXVubWFwcGVkX3Bh Z2UpCisJCQlicmVhazsKKworCQlpb3ZhICs9IHVubWFwcGVkX3BhZ2U7CisJCXVubWFwcGVkICs9 IHVubWFwcGVkX3BhZ2U7CisJfQorCisJcmV0dXJuIHVubWFwcGVkOworfQorCitpbnQgaXBtbXVf bWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmlvX2RvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAor CQlwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBwcm90KQoreworCXN0cnVjdCBp cG1tdV92bXNhX2RvbWFpbiAqZG9tYWluID0gdG9fdm1zYV9kb21haW4oaW9fZG9tYWluKTsKKwl1 bnNpZ25lZCBsb25nIG9yaWdfaW92YSA9IGlvdmE7CisJZG1hX2FkZHJfdCBtYXhfaW92YTsKKwl1 bnNpZ25lZCBpbnQgbWluX3BhZ2VzejsKKwlzaXplX3Qgb3JpZ19zaXplID0gc2l6ZTsKKwlpbnQg cmV0ID0gMDsKKworCWlmICh1bmxpa2VseShkb21haW4tPmlvcC0+bWFwID09IE5VTEwgfHwKKwkJ CWRvbWFpbi0+Y2ZnLnBnc2l6ZV9iaXRtYXAgPT0gMFVMKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisK KwkvKiBmaW5kIG91dCB0aGUgbWluaW11bSBwYWdlIHNpemUgc3VwcG9ydGVkICovCisJbWluX3Bh Z2VzeiA9IDEgPDwgX19mZnMoZG9tYWluLT5jZmcucGdzaXplX2JpdG1hcCk7CisKKwkvKgorCSAq IGJvdGggdGhlIHZpcnR1YWwgYWRkcmVzcyBhbmQgdGhlIHBoeXNpY2FsIG9uZSwgYXMgd2VsbCBh cworCSAqIHRoZSBzaXplIG9mIHRoZSBtYXBwaW5nLCBtdXN0IGJlIGFsaWduZWQgKGF0IGxlYXN0 KSB0byB0aGUKKwkgKiBzaXplIG9mIHRoZSBzbWFsbGVzdCBwYWdlIHN1cHBvcnRlZCBieSB0aGUg aGFyZHdhcmUKKwkgKi8KKwlpZiAoIUlTX0FMSUdORUQoaW92YSB8IHBhZGRyIHwgc2l6ZSwgbWlu X3BhZ2VzeikpIHsKKwkJcHJpbnRrKCJ1bmFsaWduZWQ6IGlvdmEgMHglbHggcGEgMHglIlBSSXg2 NCIgc2l6ZSAweCV6eCBtaW5fcGFnZXN6IDB4JXhcbiIsCisJCSAgICAgICBpb3ZhLCBwYWRkciwg c2l6ZSwgbWluX3BhZ2Vzeik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogdGhl IHN1bSBvZiB2aXJ0dWFsIGFkZHJlc3MgYW5kIHNpemUgbXVzdCBiZSBpbnNpZGUgdGhlIElPVkEg c3BhY2UKKwkgKiB0aGF0IGhhcmR3YXJlIHN1cHBvcnRzCisJICovCisJbWF4X2lvdmEgPSAoMVVM IDw8IGRvbWFpbi0+Y2ZnLmlhcykgLSAxOworCWlmICgoZG1hX2FkZHJfdClpb3ZhICsgc2l6ZSA+ IG1heF9pb3ZhKSB7CisJCXByaW50aygib3V0LW9mLWJvdW5kOiBpb3ZhIDB4JWx4ICsgc2l6ZSAw eCV6eCA+IG1heF9pb3ZhIDB4JSJQUkl4NjQiXG4iLAorCQkgICAgICAgaW92YSwgc2l6ZSwgbWF4 X2lvdmEpOworCQkvKiBUT0RPIFJldHVybiAtRUlOVkFMIGluc3RlYWQgKi8KKwkJcmV0dXJuIDA7 CisJfQorCisJd2hpbGUgKHNpemUpIHsKKwkJc2l6ZV90IHBnc2l6ZSA9IGlwbW11X3Bnc2l6ZShp b19kb21haW4sIGlvdmEgfCBwYWRkciwgc2l6ZSk7CisKKwkJcmV0ID0gZG9tYWluLT5pb3AtPm1h cChkb21haW4tPmlvcCwgaW92YSwgcGFkZHIsIHBnc2l6ZSwgcHJvdCk7CisJCWlmIChyZXQgPT0g LUVFWElTVCkgeworCQkJcGh5c19hZGRyX3QgZXhpc3RfcGFkZHIgPSBpcG1tdV9pb3ZhX3RvX3Bo eXMoaW9fZG9tYWluLCBpb3ZhKTsKKwkJCWlmIChleGlzdF9wYWRkciA9PSBwYWRkcikKKwkJCQly ZXQgPSAwOworCQkJZWxzZSBpZiAoZXhpc3RfcGFkZHIpIHsKKwkJCQlwcmludGsoInJlbWFwOiBp b3ZhIDB4JWx4IHBhIDB4JSJQUkl4NjQiIHBnc2l6ZSAweCV6eFxuIiwKKwkJCQkJCWlvdmEsIHBh ZGRyLCBwZ3NpemUpOworCQkJCWlwbW11X3VubWFwKGlvX2RvbWFpbiwgaW92YSwgcGdzaXplKTsK KwkJCQlyZXQgPSBkb21haW4tPmlvcC0+bWFwKGRvbWFpbi0+aW9wLCBpb3ZhLCBwYWRkciwgcGdz aXplLCBwcm90KTsKKwkJCX0KKwkJfQorCQlpZiAocmV0KQorCQkJYnJlYWs7CisKKwkJaW92YSAr PSBwZ3NpemU7CisJCXBhZGRyICs9IHBnc2l6ZTsKKwkJc2l6ZSAtPSBwZ3NpemU7CisJfQorCisJ LyogdW5yb2xsIG1hcHBpbmcgaW4gY2FzZSBzb21ldGhpbmcgd2VudCB3cm9uZyAqLworCWlmIChy ZXQgJiYgb3JpZ19zaXplICE9IHNpemUpCisJCWlwbW11X3VubWFwKGlvX2RvbWFpbiwgb3JpZ19p b3ZhLCBvcmlnX3NpemUgLSBzaXplKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZiAwIC8qIFhl bjogTm90IG5lZWRlZCAqLwogc3RhdGljIHN0cnVjdCBkZXZpY2UgKmlwbW11X2ZpbmRfc2libGlu Z19kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpcG1tdV92bXNhX2FyY2hk YXRhICphcmNoZGF0YSA9IGRldi0+YXJjaGRhdGEuaW9tbXU7CkBAIC04OTgsNiArMTM0NSw3IEBA IHN0YXRpYyBzdHJ1Y3QgaW9tbXVfZ3JvdXAgKmlwbW11X2ZpbmRfZ3JvdXAoc3RydWN0IGRldmlj ZSAqZGV2KQogCiAJcmV0dXJuIGdyb3VwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgaXBtbXVf ZmluZF91dGxicyhzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKm1tdSwgc3RydWN0IGRldmljZSAq ZGV2LAogCQkJICAgIHVuc2lnbmVkIGludCAqdXRsYnMsIHVuc2lnbmVkIGludCBudW1fdXRsYnMp CkBAIC05MTMsNyArMTM2MSw5IEBAIHN0YXRpYyBpbnQgaXBtbXVfZmluZF91dGxicyhzdHJ1Y3Qg aXBtbXVfdm1zYV9kZXZpY2UgKm1tdSwgc3RydWN0IGRldmljZSAqZGV2LAogCQlpZiAocmV0IDwg MCkKIAkJCXJldHVybiByZXQ7CiAKKyNpZiAwIC8qIFhlbjogTm90IG5lZWRlZCAqLwogCQlvZl9u b2RlX3B1dChhcmdzLm5wKTsKKyNlbmRpZgogCiAJCWlmIChhcmdzLm5wICE9IG1tdS0+ZGV2LT5v Zl9ub2RlIHx8IGFyZ3MuYXJnc19jb3VudCAhPSAxKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC05 MjQsNiArMTM3NCwxOSBAQCBzdGF0aWMgaW50IGlwbW11X2ZpbmRfdXRsYnMoc3RydWN0IGlwbW11 X3Ztc2FfZGV2aWNlICptbXUsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAlyZXR1cm4gMDsKIH0KIAor LyogWGVuOiBUbyByb2xsIGJhY2sgYWN0aW9ucyB0aGF0IHRvb2sgcGxhY2UgaXQgaW5pdCAqLwor c3RhdGljIF9fbWF5YmVfdW51c2VkIHZvaWQgaXBtbXVfZGVzdHJveV9wbGF0Zm9ybV9kZXZpY2Uo c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpcG1tdV92bXNhX2FyY2hkYXRhICphcmNo ZGF0YSA9IHRvX2FyY2hkYXRhKGRldik7CisKKwlpZiAoIWFyY2hkYXRhKQorCQlyZXR1cm47CisK KwlrZnJlZShhcmNoZGF0YS0+dXRsYnMpOworCWtmcmVlKGFyY2hkYXRhKTsKKwlzZXRfYXJjaGRh dGEoZGV2LCBOVUxMKTsKK30KKwogc3RhdGljIGludCBpcG1tdV9pbml0X3BsYXRmb3JtX2Rldmlj ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwbW11X3Ztc2FfYXJjaGRhdGEgKmFy Y2hkYXRhOwpAQCAtOTk2LDYgKzE0NTksMTEgQEAgc3RhdGljIGludCBpcG1tdV9pbml0X3BsYXRm b3JtX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJYXJjaGRhdGEtPm51bV91dGxicyA9IG51 bV91dGxiczsKIAlhcmNoZGF0YS0+ZGV2ID0gZGV2OwogCXNldF9hcmNoZGF0YShkZXYsIGFyY2hk YXRhKTsKKworCS8qIFhlbjogKi8KKwlkZXZfbm90aWNlKGRldiwgImluaXRpYWxpemVkIG1hc3Rl ciBkZXZpY2UgKElQTU1VICVzIG1pY3JvLVRMQnMgJXUpXG4iLAorCQkJZGV2X25hbWUobW11LT5k ZXYpLCBudW1fdXRsYnMpOworCiAJcmV0dXJuIDA7CiAKIGVycm9yOgpAQCAtMTAwMyw2ICsxNDcx LDcgQEAgZXJyb3I6CiAJcmV0dXJuIHJldDsKIH0KIAorI2lmIDAgLyogWGVuOiBOb3QgbmVlZGVk ICovCiAjaWYgZGVmaW5lZChDT05GSUdfQVJNKSAmJiAhZGVmaW5lZChDT05GSUdfSU9NTVVfRE1B KQogCiBzdGF0aWMgaW50IGlwbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQpAQCAt MTIzMyw2ICsxNzAyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9vcHMgaXBtbXVfb3Bz ID0gewogfTsKIAogI2VuZGlmIC8qIENPTkZJR19JT01NVV9ETUEgKi8KKyNlbmRpZgogCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICogUHJvYmUvcmVtb3ZlIGFuZCBpbml0CkBAIC0xMjc0LDEy ICsxNzQ0LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlwbW11X29mX2lk c1tdID0gewogCQkuY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlwbW11LXI4YTc3OTYiLAogCQkuZGF0 YSA9ICZpcG1tdV9mZWF0dXJlc19yY2FyX2dlbjMsCiAJfSwgeworCQkvKiBYZW46IEl0IGlzIG5v dCBjbGVhciBob3cgdG8gZGVhbCB3aXRoIGl0ICovCisJCS5jb21wYXRpYmxlID0gInJlbmVzYXMs aXBtbXUtcG1iLXI4YTc3OTUiLAorCQkuZGF0YSA9IE5VTEwsCisJfSwgewogCQkvKiBUZXJtaW5h dG9yICovCiAJfSwKIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlwbW11X29mX2lkcyk7 CiAKKy8qCisgKiBYZW46IFdlIGRvbid0IGhhdmUgcmVmY291bnQgZm9yIGFsbG9jYXRlZCBtZW1v cnkgc28gbWFudWFsbHkgZnJlZSBtZW1vcnkKKyAqIHdoZW4gYW4gZXJyb3Igb2NjdXJlZC4KKyAq Lwogc3RhdGljIGludCBpcG1tdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQog ewogCXN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11OwpAQCAtMTMwMywxMyArMTc4MSwxNyBA QCBzdGF0aWMgaW50IGlwbW11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJ c3Bpbl9sb2NrX2luaXQoJm1tdS0+bG9jayk7CiAJYml0bWFwX3plcm8obW11LT5jdHgsIElQTU1V X0NUWF9NQVgpOwogCW1tdS0+ZmVhdHVyZXMgPSBtYXRjaC0+ZGF0YTsKKyNpZiAwIC8qIFhlbjog Tm90IG5lZWRlZCAqLwogCWRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBkZXYtPmRldiwgRE1B X0JJVF9NQVNLKDY0KSk7CisjZW5kaWYKIAogCS8qIE1hcCBJL08gbWVtb3J5IGFuZCByZXF1ZXN0 IElSUS4gKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N RU0sIDApOwogCW1tdS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCBy ZXMpOwotCWlmIChJU19FUlIobW11LT5iYXNlKSkKLQkJcmV0dXJuIFBUUl9FUlIobW11LT5iYXNl KTsKKwlpZiAoSVNfRVJSKG1tdS0+YmFzZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihtbXUtPmJhc2Up OworCQlnb3RvIG91dDsKKwl9CiAKIAkvKgogCSAqIFRoZSBJUE1NVSBoYXMgdHdvIHJlZ2lzdGVy IGJhbmtzLCBmb3Igc2VjdXJlIGFuZCBub24tc2VjdXJlIG1vZGVzLgpAQCAtMTM1MSwxNCArMTgz MywxNSBAQCBzdGF0aWMgaW50IGlwbW11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCiAJaWYgKGlwbW11X2lzX3Jvb3QobW11KSkgewogCQlpZiAoaXJxIDwgMCkgewogCQkJZGV2 X2VycigmcGRldi0+ZGV2LCAibm8gSVJRIGZvdW5kXG4iKTsKLQkJCXJldHVybiBpcnE7CisJCQly ZXQgPSBpcnE7CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEo JnBkZXYtPmRldiwgaXJxLCBpcG1tdV9pcnEsIDAsCiAJCQkJICAgICAgIGRldl9uYW1lKCZwZGV2 LT5kZXYpLCBtbXUpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAi ZmFpbGVkIHRvIHJlcXVlc3QgSVJRICVkXG4iLCBpcnEpOwotCQkJcmV0dXJuIHJldDsKKwkJCWdv dG8gb3V0OwogCQl9CiAKIAkJaXBtbXVfZGV2aWNlX3Jlc2V0KG1tdSk7CkBAIC0xMzc0LDExICsx ODU3LDI1IEBAIHN0YXRpYyBpbnQgaXBtbXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKIAlsaXN0X2FkZCgmbW11LT5saXN0LCAmaXBtbXVfZGV2aWNlcyk7CiAJc3Bpbl91bmxv Y2soJmlwbW11X2RldmljZXNfbG9jayk7CiAKKyNpZiAwIC8qIFhlbjogTm90IG5lZWRlZCAqLwog CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tdSk7CisjZW5kaWYKKworCS8qIFhlbjogKi8K KwlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJyZWdpc3RlcmVkICVzIElQTU1VXG4iLAorCQlpcG1t dV9pc19yb290KG1tdSkgPyAicm9vdCIgOiAiY2FjaGUiKTsKIAogCXJldHVybiAwOworCitvdXQ6 CisJaWYgKCFJU19FUlIobW11LT5iYXNlKSkKKwkJaW91bm1hcChtbXUtPmJhc2UpOworCWtmcmVl KG1tdSk7CisKKwlyZXR1cm4gcmV0OwogfQogCisjaWYgMCAvKiBYZW46IE5vdCBuZWVkZWQgKi8K IHN0YXRpYyBpbnQgaXBtbXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7 CiAJc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw ZGV2KTsKQEAgLTE2NDUsMyArMjE0Miw0MTggQEAgSU9NTVVfT0ZfREVDTEFSRShpcG1tdV9yOGE3 Nzk2X2lvbW11X29mLCAicmVuZXNhcyxpcG1tdS1yOGE3Nzk2IiwKIE1PRFVMRV9ERVNDUklQVElP TigiSU9NTVUgQVBJIGZvciBSZW5lc2FzIFZNU0EtY29tcGF0aWJsZSBJUE1NVSIpOwogTU9EVUxF X0FVVEhPUigiTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQu Y29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworI2VuZGlmCisKKy8qKioqKiBTdGFy dCBvZiBYZW4gc3BlY2lmaWMgY29kZSAqKioqKi8KKworc3RhdGljIGludCBfX211c3RfY2hlY2sg aXBtbXVfdm1zYV9pb3RsYl9mbHVzaChzdHJ1Y3QgZG9tYWluICpkLAorCQl1bnNpZ25lZCBsb25n IGdmbiwgdW5zaWduZWQgaW50IHBhZ2VfY291bnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgaW9tbXVfZG9tYWluICppcG1tdV92bXNhX2dldF9kb21haW4oc3RydWN0IGRvbWFp biAqZCwKKwkJCQkJCXN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXBtbXVfdm1zYV94 ZW5fZG9tYWluICp4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7CisJc3RydWN0 IGlvbW11X2RvbWFpbiAqaW9fZG9tYWluOworCXN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11 OworCisJbW11ID0gdG9fYXJjaGRhdGEoZGV2KS0+bW11OworCWlmICghbW11KQorCQlyZXR1cm4g TlVMTDsKKworCS8qCisJICogTG9vcCB0aHJvdWdoIHRoZSAmeGVuX2RvbWFpbi0+Y29udGV4dHMg dG8gbG9jYXRlIGEgY29udGV4dAorCSAqIGFzc2lnbmVkIHRvIHRoaXMgSVBNTVUKKwkgKi8KKwls aXN0X2Zvcl9lYWNoX2VudHJ5KGlvX2RvbWFpbiwgJnhlbl9kb21haW4tPmNvbnRleHRzLCBsaXN0 KSB7CisJCWlmICh0b192bXNhX2RvbWFpbihpb19kb21haW4pLT5tbXUgPT0gbW11KQorCQkJcmV0 dXJuIGlvX2RvbWFpbjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaXBt bXVfdm1zYV9kZXN0cm95X2RvbWFpbihzdHJ1Y3QgaW9tbXVfZG9tYWluICppb19kb21haW4pCit7 CisJc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4gPSB0b192bXNhX2RvbWFpbihpb19k b21haW4pOworCisJbGlzdF9kZWwoJmlvX2RvbWFpbi0+bGlzdCk7CisKKwlpZiAoZG9tYWluLT5t bXUgIT0gZG9tYWluLT5yb290KSB7CisJCS8qCisJCSAqIERpc2FibGUgdGhlIGNvbnRleHQgZm9y IGNhY2hlIElQTU1VIG9ubHkuIEZsdXNoIHRoZSBUTEIgYXMgcmVxdWlyZWQKKwkJICogd2hlbiBt b2RpZnlpbmcgdGhlIGNvbnRleHQgcmVnaXN0ZXJzLgorCQkgKi8KKwkJaXBtbXVfY3R4X3dyaXRl MShkb21haW4sIElNQ1RSLCBJTUNUUl9GTFVTSCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRnJl ZSBtYWluIGRvbWFpbiByZXNvdXJjZXMuIFdlIGFzc3VtZSB0aGF0IGFsbCBkZXZpY2VzIGhhdmUg YWxyZWFkeQorCQkgKiBiZWVuIGRldGFjaGVkLgorCQkgKi8KKwkJaXBtbXVfZG9tYWluX2Rlc3Ry b3lfY29udGV4dChkb21haW4pOworCQlmcmVlX2lvX3BndGFibGVfb3BzKGRvbWFpbi0+aW9wKTsK Kwl9CisKKwlrZnJlZShkb21haW4pOworfQorCitzdGF0aWMgaW50IGlwbW11X3Ztc2FfYXNzaWdu X2RldihzdHJ1Y3QgZG9tYWluICpkLCB1OCBkZXZmbiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNl ICpkZXYsIHUzMiBmbGFnKQoreworCXN0cnVjdCBpcG1tdV92bXNhX3hlbl9kb21haW4gKnhlbl9k b21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpp b19kb21haW47CisJc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW47CisJaW50IHJldCA9 IDA7CisKKwlpZiAoIXhlbl9kb21haW4gfHwgIXhlbl9kb21haW4tPmJhc2VfY29udGV4dCkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWRldi0+YXJjaGRhdGEuaW9tbXUpIHsKKwkJZGV2LT5h cmNoZGF0YS5pb21tdSA9IHh6YWxsb2Moc3RydWN0IGlwbW11X3Ztc2FfeGVuX2RldmljZSk7CisJ CWlmICghZGV2LT5hcmNoZGF0YS5pb21tdSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlm ICghdG9fYXJjaGRhdGEoZGV2KSkgeworCQlyZXQgPSBpcG1tdV9pbml0X3BsYXRmb3JtX2Rldmlj ZShkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlzcGluX2xvY2soJnhl bl9kb21haW4tPmxvY2spOworCisJaWYgKGRldl9pb21tdV9kb21haW4oZGV2KSkgeworCQlkZXZf ZXJyKGRldiwgImFscmVhZHkgYXR0YWNoZWQgdG8gSVBNTVUgZG9tYWluXG4iKTsKKwkJcmV0ID0g LUVFWElTVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgYSBj b250ZXh0IGJhbmsgKGlvbW11X2RvbWFpbikgYWxyZWFkeSBleGlzdHMgZm9yCisJICogdGhpcyBY ZW4gZG9tYWluIHVuZGVyIHRoZSBzYW1lIElQTU1VCisJICovCisJaW9fZG9tYWluID0gaXBtbXVf dm1zYV9nZXRfZG9tYWluKGQsIGRldik7CisJaWYgKCFpb19kb21haW4pIHsKKwkJZG9tYWluID0g eHphbGxvYyhzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4pOworCQlpZiAoIWRvbWFpbikgeworCQkJ cmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNwaW5fbG9ja19pbml0KCZkb21h aW4tPmxvY2spOworCisJCWRvbWFpbi0+ZCA9IGQ7CisJCWRvbWFpbi0+Y29udGV4dF9pZCA9IHRv X3Ztc2FfZG9tYWluKHhlbl9kb21haW4tPmJhc2VfY29udGV4dCktPmNvbnRleHRfaWQ7CisKKwkJ aW9fZG9tYWluID0gJmRvbWFpbi0+aW9fZG9tYWluOworCisJCS8qIENoYWluIHRoZSBuZXcgY29u dGV4dCB0byB0aGUgWGVuIGRvbWFpbiAqLworCQlsaXN0X2FkZCgmaW9fZG9tYWluLT5saXN0LCAm eGVuX2RvbWFpbi0+Y29udGV4dHMpOworCX0KKworCXJldCA9IGlwbW11X2F0dGFjaF9kZXZpY2Uo aW9fZG9tYWluLCBkZXYpOworCWlmIChyZXQpIHsKKwkJaWYgKGlvX2RvbWFpbi0+cmVmLmNvdW50 ZXIgPT0gMCkKKwkJCWlwbW11X3Ztc2FfZGVzdHJveV9kb21haW4oaW9fZG9tYWluKTsKKwl9IGVs c2UgeworCQlhdG9taWNfaW5jKCZpb19kb21haW4tPnJlZik7CisJCWRldl9pb21tdV9kb21haW4o ZGV2KSA9IGlvX2RvbWFpbjsKKwl9CisKK291dDoKKwlzcGluX3VubG9jaygmeGVuX2RvbWFpbi0+ bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwbW11X3Ztc2FfZGVhc3Np Z25fZGV2KHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg aXBtbXVfdm1zYV94ZW5fZG9tYWluICp4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnBy aXY7CisJc3RydWN0IGlvbW11X2RvbWFpbiAqaW9fZG9tYWluID0gZGV2X2lvbW11X2RvbWFpbihk ZXYpOworCisJaWYgKCFpb19kb21haW4gfHwgdG9fdm1zYV9kb21haW4oaW9fZG9tYWluKS0+ZCAh PSBkKSB7CisJCWRldl9lcnIoZGV2LCAiIG5vdCBhdHRhY2hlZCB0byBkb21haW4gJWRcbiIsIGQt PmRvbWFpbl9pZCk7CisJCXJldHVybiAtRVNSQ0g7CisJfQorCisJc3Bpbl9sb2NrKCZ4ZW5fZG9t YWluLT5sb2NrKTsKKworCWlwbW11X2RldGFjaF9kZXZpY2UoaW9fZG9tYWluLCBkZXYpOworCWRl dl9pb21tdV9kb21haW4oZGV2KSA9IE5VTEw7CisJYXRvbWljX2RlYygmaW9fZG9tYWluLT5yZWYp OworCisJaWYgKGlvX2RvbWFpbi0+cmVmLmNvdW50ZXIgPT0gMCkKKwkJaXBtbXVfdm1zYV9kZXN0 cm95X2RvbWFpbihpb19kb21haW4pOworCisJc3Bpbl91bmxvY2soJnhlbl9kb21haW4tPmxvY2sp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBtbXVfdm1zYV9yZWFzc2lnbl9kZXYo c3RydWN0IGRvbWFpbiAqcywgc3RydWN0IGRvbWFpbiAqdCwKKwkJCQkgdTggZGV2Zm4sICBzdHJ1 Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldCA9IDA7CisKKwkvKiBEb24ndCBhbGxvdyByZW1h cHBpbmcgb24gb3RoZXIgZG9tYWluIHRoYW4gaHdkb20gKi8KKwlpZiAodCAmJiB0ICE9IGhhcmR3 YXJlX2RvbWFpbikKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICh0ID09IHMpCisJCXJldHVybiAw OworCisJcmV0ID0gaXBtbXVfdm1zYV9kZWFzc2lnbl9kZXYocywgZGV2KTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJaWYgKHQpIHsKKwkJLyogTm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9y IEFSTS4gKi8KKwkJcmV0ID0gaXBtbXVfdm1zYV9hc3NpZ25fZGV2KHQsIGRldmZuLCBkZXYsIDAp OworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBpcG1tdV92bXNhX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGRvbWFpbiAqZCkKK3sK KwlzdHJ1Y3QgaXBtbXVfdm1zYV94ZW5fZG9tYWluICp4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQp LT5hcmNoLnByaXY7CisJc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW47CisJc3RydWN0 IGlwbW11X3Ztc2FfZGV2aWNlICpyb290OworCWludCByZXQ7CisKKwlpZiAoeGVuX2RvbWFpbi0+ YmFzZV9jb250ZXh0KQorCQlyZXR1cm4gMDsKKworCXJvb3QgPSBpcG1tdV9maW5kX3Jvb3QoTlVM TCk7CisJaWYgKCFyb290KSB7CisJCXByaW50aygiZCVkOiBVbmFibGUgdG8gbG9jYXRlIHJvb3Qg SVBNTVVcbiIsIGQtPmRvbWFpbl9pZCk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCWRvbWFp biA9IHh6YWxsb2Moc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluKTsKKwlpZiAoIWRvbWFpbikKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmZG9tYWluLT5sb2NrKTsKKwlJTklU X0xJU1RfSEVBRCgmZG9tYWluLT5pb19kb21haW4ubGlzdCk7CisJZG9tYWluLT5kID0gZDsKKwlk b21haW4tPnJvb3QgPSByb290OworCisJc3Bpbl9sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKKwly ZXQgPSBpcG1tdV9kb21haW5faW5pdF9jb250ZXh0KGRvbWFpbik7CisJaWYgKHJldCA8IDApIHsK KwkJZGV2X2Vycihyb290LT5kZXYsICJkJWQ6IFVuYWJsZSB0byBpbml0aWFsaXplIElQTU1VIGNv bnRleHRcbiIsCisJCQkJZC0+ZG9tYWluX2lkKTsKKwkJc3Bpbl91bmxvY2soJnhlbl9kb21haW4t PmxvY2spOworCQl4ZnJlZShkb21haW4pOworCQlyZXR1cm4gcmV0OworCX0KKwl4ZW5fZG9tYWlu LT5iYXNlX2NvbnRleHQgPSAmZG9tYWluLT5pb19kb21haW47CisJc3Bpbl91bmxvY2soJnhlbl9k b21haW4tPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBtbXVfdm1zYV9k b21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkLCBib29sIHVzZV9pb21tdSkKK3sKKwlzdHJ1Y3Qg aXBtbXVfdm1zYV94ZW5fZG9tYWluICp4ZW5fZG9tYWluOworCisJeGVuX2RvbWFpbiA9IHh6YWxs b2Moc3RydWN0IGlwbW11X3Ztc2FfeGVuX2RvbWFpbik7CisJaWYgKCF4ZW5fZG9tYWluKQorCQly ZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZ4ZW5fZG9tYWluLT5sb2NrKTsKKwlJ TklUX0xJU1RfSEVBRCgmeGVuX2RvbWFpbi0+Y29udGV4dHMpOworCisJZG9tX2lvbW11KGQpLT5h cmNoLnByaXYgPSB4ZW5fZG9tYWluOworCisJaWYgKHVzZV9pb21tdSkgeworCQlpbnQgcmV0ID0g aXBtbXVfdm1zYV9hbGxvY19wYWdlX3RhYmxlKGQpOworCisJCWlmIChyZXQpIHsKKwkJCXhmcmVl KHhlbl9kb21haW4pOworCQkJZG9tX2lvbW11KGQpLT5hcmNoLnByaXYgPSBOVUxMOworCQkJcmV0 dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2h3ZG9t X2luaXQgaXBtbXVfdm1zYV9od2RvbV9pbml0KHN0cnVjdCBkb21haW4gKmQpCit7Cit9CisKK3N0 YXRpYyB2b2lkIGlwbW11X3Ztc2FfZG9tYWluX3RlYXJkb3duKHN0cnVjdCBkb21haW4gKmQpCit7 CisJc3RydWN0IGlwbW11X3Ztc2FfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbiA9IGRvbV9pb21tdShk KS0+YXJjaC5wcml2OworCisJaWYgKCF4ZW5fZG9tYWluKQorCQlyZXR1cm47CisKKwlzcGluX2xv Y2soJnhlbl9kb21haW4tPmxvY2spOworCWlmICh4ZW5fZG9tYWluLT5iYXNlX2NvbnRleHQpIHsK KwkJaXBtbXVfdm1zYV9kZXN0cm95X2RvbWFpbih4ZW5fZG9tYWluLT5iYXNlX2NvbnRleHQpOwor CQl4ZW5fZG9tYWluLT5iYXNlX2NvbnRleHQgPSBOVUxMOworCX0KKwlzcGluX3VubG9jaygmeGVu X2RvbWFpbi0+bG9jayk7CisKKwlBU1NFUlQobGlzdF9lbXB0eSgmeGVuX2RvbWFpbi0+Y29udGV4 dHMpKTsKKwl4ZnJlZSh4ZW5fZG9tYWluKTsKKwlkb21faW9tbXUoZCktPmFyY2gucHJpdiA9IE5V TEw7Cit9CisKK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGlwbW11X3Ztc2FfbWFwX3BhZ2VzKHN0 cnVjdCBkb21haW4gKmQsCisJCXVuc2lnbmVkIGxvbmcgZ2ZuLCB1bnNpZ25lZCBsb25nIG1mbiwg dW5zaWduZWQgaW50IG9yZGVyLAorCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGlw bW11X3Ztc2FfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5wcml2 OworCXNpemVfdCBzaXplID0gUEFHRV9TSVpFICogKDFVTCA8PCBvcmRlcik7CisJaW50IHJldCwg cHJvdCA9IDA7CisKKwlpZiAoIXhlbl9kb21haW4gfHwgIXhlbl9kb21haW4tPmJhc2VfY29udGV4 dCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmxhZ3MgJiBJT01NVUZfd3JpdGFibGUpCisJ CXByb3QgfD0gSU9NTVVfV1JJVEU7CisJaWYgKGZsYWdzICYgSU9NTVVGX3JlYWRhYmxlKQorCQlw cm90IHw9IElPTU1VX1JFQUQ7CisKKwlzcGluX2xvY2soJnhlbl9kb21haW4tPmxvY2spOworCXJl dCA9IGlwbW11X21hcCh4ZW5fZG9tYWluLT5iYXNlX2NvbnRleHQsIHBmbl90b19wYWRkcihnZm4p LAorCQkJcGZuX3RvX3BhZGRyKG1mbiksIHNpemUsIHByb3QpOworCXNwaW5fdW5sb2NrKCZ4ZW5f ZG9tYWluLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19tdXN0X2No ZWNrIGlwbW11X3Ztc2FfdW5tYXBfcGFnZXMoc3RydWN0IGRvbWFpbiAqZCwKKwkJdW5zaWduZWQg bG9uZyBnZm4sIHVuc2lnbmVkIGludCBvcmRlcikKK3sKKwlzdHJ1Y3QgaXBtbXVfdm1zYV94ZW5f ZG9tYWluICp4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7CisJc2l6ZV90IHJl dCwgc2l6ZSA9IFBBR0VfU0laRSAqICgxVUwgPDwgb3JkZXIpOworCisJaWYgKCF4ZW5fZG9tYWlu IHx8ICF4ZW5fZG9tYWluLT5iYXNlX2NvbnRleHQpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bp bl9sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKKwlyZXQgPSBpcG1tdV91bm1hcCh4ZW5fZG9tYWlu LT5iYXNlX2NvbnRleHQsIHBmbl90b19wYWRkcihnZm4pLCBzaXplKTsKKwlzcGluX3VubG9jaygm eGVuX2RvbWFpbi0+bG9jayk7CisKKwkvKgorCSAqIFdlIGRvbid0IGNoZWNrIGhvdyBtYW55IGJ5 dGVzIHdlcmUgYWN0dWFsbHkgdW5tYXBwZWQuIE90aGVyd2lzZSB3ZQorCSAqIHNob3VsZCBoYXZl IHJhaXNlZCBhbiBlcnJvciBldmVyeSB0aW1lIHdlIGhpdCBhbiBhcmVhIHRoYXQgaXNuJ3QgbWFw cGVkLgorCSAqIEFuZCB0aGUgcDJtJ3MgYXR0ZW1wdCB0byB1bm1hcCB0aGUgc2FtZSBwYWdlIHR3 aWNlIGNhbiBsZWFkIHRvIGNyYXNoIG9yCisJICogcGFuaWMuIFdlIHRoaW5rIGl0IGlzIGJldHRl ciB0byBoYXZlIGNvcnJlc3BvbmRpbmcgd2FybnMgaW5zaWRlCisJICogcGFnZSB0YWJsZSBhbGxv Y2F0b3IgZm9yIGNvbXBsYWluaW5nIGFib3V0IHRoYXQgcmF0aGVyIHRoYW4KKwkgKiBicmVha2lu ZyB0aGUgd2hvbGUgc3lzdGVtLgorCSAqLworCXJldHVybiBJU19FUlJfVkFMVUUocmV0KSA/IHJl dCA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwbW11X3Ztc2FfZHVtcF9wMm1fdGFibGUoc3RydWN0 IGRvbWFpbiAqZCkKK3sKKwkvKiBUT0RPOiBUaGlzIHBsYXRmb3JtIGNhbGxiYWNrIHNob3VsZCBi ZSBpbXBsZW1lbnRlZC4gKi8KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9vcHMgaXBt bXVfdm1zYV9pb21tdV9vcHMgPSB7CisJLmluaXQgPSBpcG1tdV92bXNhX2RvbWFpbl9pbml0LAor CS5od2RvbV9pbml0ID0gaXBtbXVfdm1zYV9od2RvbV9pbml0LAorCS50ZWFyZG93biA9IGlwbW11 X3Ztc2FfZG9tYWluX3RlYXJkb3duLAorCS5pb3RsYl9mbHVzaCA9IGlwbW11X3Ztc2FfaW90bGJf Zmx1c2gsCisJLmFzc2lnbl9kZXZpY2UgPSBpcG1tdV92bXNhX2Fzc2lnbl9kZXYsCisJLnJlYXNz aWduX2RldmljZSA9IGlwbW11X3Ztc2FfcmVhc3NpZ25fZGV2LAorCS5tYXBfcGFnZXMgPSBpcG1t dV92bXNhX21hcF9wYWdlcywKKwkudW5tYXBfcGFnZXMgPSBpcG1tdV92bXNhX3VubWFwX3BhZ2Vz LAorCS5kdW1wX3AybV90YWJsZSA9IGlwbW11X3Ztc2FfZHVtcF9wMm1fdGFibGUsCit9OworCitz dGF0aWMgX19pbml0IGNvbnN0IHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqZmluZF9pcG1tdShj b25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICpt bXU7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJc3Bpbl9sb2NrKCZpcG1tdV9kZXZpY2VzX2xv Y2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobW11LCAmaXBtbXVfZGV2aWNlcywgbGlzdCkgewor CQlpZiAobW11LT5kZXYgPT0gZGV2KSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJ fQorCX0KKwlzcGluX3VubG9jaygmaXBtbXVfZGV2aWNlc19sb2NrKTsKKworCXJldHVybiAoZm91 bmQpID8gbW11IDogTlVMTDsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIHBvcHVsYXRlX2lwbW11 X21hc3RlcnMoY29uc3Qgc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUpCit7CisJc3RydWN0 IGR0X2RldmljZV9ub2RlICpucDsKKworCWR0X2Zvcl9lYWNoX2RldmljZV9ub2RlKGR0X2hvc3Qs IG5wKSB7CisJCWlmIChtbXUtPmRldi0+b2Zfbm9kZSAhPSBkdF9wYXJzZV9waGFuZGxlKG5wLCAi aW9tbXVzIiwgMCkpCisJCQljb250aW51ZTsKKworCQkvKiBMZXQgWGVuIGtub3cgdGhhdCB0aGUg ZGV2aWNlIGlzIHByb3RlY3RlZCBieSBhbiBJUE1NVSAqLworCQlkdF9kZXZpY2Vfc2V0X3Byb3Rl Y3RlZChucCk7CisKKwkJZGV2X25vdGljZShtbXUtPmRldiwgImZvdW5kIG1hc3RlciBkZXZpY2Ug JXNcbiIsIGR0X25vZGVfZnVsbF9uYW1lKG5wKSk7CisJfQorfQorCisvKiBUT0RPOiBXaGF0IHRv IGRvIGlmIHdlIGZhaWxlZCB0byBpbml0IGNhY2hlL3Jvb3QgSVBNTVU/ICovCitzdGF0aWMgX19p bml0IGludCBpcG1tdV92bXNhX2luaXQoc3RydWN0IGR0X2RldmljZV9ub2RlICpkZXYsCisJCQkJ ICAgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmM7CisJY29uc3Qgc3RydWN0IGlwbW11X3Zt c2FfZGV2aWNlICptbXU7CisJc3RhdGljIGJvb2wgc2V0X29wc19kb25lID0gZmFsc2U7CisKKwkv KgorCSAqIEV2ZW4gaWYgdGhlIGRldmljZSBjYW4ndCBiZSBpbml0aWFsaXplZCwgd2UgZG9uJ3Qg d2FudCB0bworCSAqIGdpdmUgdGhlIElQTU1VIGRldmljZSB0byBkb20wLgorCSAqLworCWR0X2Rl dmljZV9zZXRfdXNlZF9ieShkZXYsIERPTUlEX1hFTik7CisKKwlyYyA9IGlwbW11X3Byb2JlKGRl dik7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgSVBN TVVcbiIpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyoKKwkgKiBTaW5jZSBJUE1NVSBpcyBjb21w b3NlZCBvZiB0d28gcGFydHMgKGEgbnVtYmVyIG9mIGNhY2hlIElQTU1VcyBhbmQKKwkgKiB0aGUg cm9vdCBJUE1NVSkgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4K KwkgKiBVc2UgdGhlIGZsYWcgYmVsb3cgdG8gYXZvaWQgc2V0dGluZyBJT01NVSBvcHMgaWYgdGhl eSBhbHJlYWR5IHNldC4KKwkgKi8KKwlpZiAoIXNldF9vcHNfZG9uZSkgeworCQlpb21tdV9zZXRf b3BzKCZpcG1tdV92bXNhX2lvbW11X29wcyk7CisJCXNldF9vcHNfZG9uZSA9IHRydWU7CisJfQor CisJLyogRmluZCB0aGUgbGFzdCBJUE1NVSBhZGRlZC4gKi8KKwltbXUgPSBmaW5kX2lwbW11KGR0 X3RvX2RldihkZXYpKTsKKwlCVUdfT04obW11ID09IE5VTEwpOworCisJLyogTWFyayBhbGwgbWFz dGVycyB0aGF0IGNvbm5lY3RlZCB0byB0aGUgbGFzdCBJUE1NVSBhcyBwcm90ZWN0ZWQuICovCisJ cG9wdWxhdGVfaXBtbXVfbWFzdGVycyhtbXUpOworCisJLyoKKwkgKiBUaGUgSVBNTVUgY2FuJ3Qg dXRpbGl6ZSBQMk0gdGFibGUgc2luY2UgaXQgZG9lc24ndCB1c2UgdGhlIHNhbWUKKwkgKiBwYWdl LXRhYmxlIGZvcm1hdCBhcyB0aGUgQ1BVLgorCSAqLworCWlmIChpb21tdV9oYXBfcHRfc2hhcmUp IHsKKwkJaW9tbXVfaGFwX3B0X3NoYXJlID0gZmFsc2U7CisJCWRldl9ub3RpY2UoJmRldi0+ZGV2 LAorCQkJImRpc2FibGUgc2hhcmluZyBQMk0gdGFibGUgYmV0d2VlbiB0aGUgQ1BVIGFuZCBJUE1N VVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK0RUX0RFVklDRV9TVEFSVChpcG1tdSwgIlJl bmVzYXMgSVBNTVUtVk1TQSIsIERFVklDRV9JT01NVSkKKwkuZHRfbWF0Y2ggPSBpcG1tdV9vZl9p ZHMsCisJLmluaXQgPSBpcG1tdV92bXNhX2luaXQsCitEVF9ERVZJQ0VfRU5ECi0tIAoyLjcuNAoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4u b3JnL3hlbi1kZXZlbAo=