From: Sameer Goel Subject: [RFC v3 4/4] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Mon, 4 Dec 2017 20:59:26 -0700 Message-ID: <1512446366-21877-5-git-send-email-sgoel@codeaurora.org> References: <1512446366-21877-1-git-send-email-sgoel@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eM4OR-0005z8-8m for xen-devel@lists.xenproject.org; Tue, 05 Dec 2017 03:59:39 +0000 In-Reply-To: <1512446366-21877-1-git-send-email-sgoel@codeaurora.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, julien.grall@arm.com, mjaggi@caviumnetworks.com Cc: Sameer Goel , sstabellini@kernel.org, shankerd@codeaurora.org List-Id: xen-devel@lists.xenproject.org VGhpcyBkcml2ZXIgZm9sbG93cyBhbiBhcHByb2FjaCBzaW1pbGFyIHRvIHNtbXUgZHJpdmVyLiBU aGUgaW50ZW50IGhlcmUKaXMgdG8gcmV1c2UgYXMgbXVjaCBMaW51eCBjb2RlIGFzIHBvc3NpYmxl LgotIEdsdWUgY29kZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGhlYWRlcnMgdG8gYnJpZGdlIHRo ZSBBUEkgY2FsbHMuCi0gQ2FsbGVkIExpbnV4IGZ1bmN0aW9ucyBmcm9tIHRoZSBYZW4gSU9NTVUg ZnVuY3Rpb24gY2FsbHMuCi0gWGVuIG1vZGlmaWNhdGlvbnMgYXJlIHByZWNlZGVkIGJ5IC8qWGVu OiBjb21tZW50ICovCi0gTmV3IGNvbmZpZyBpdGVtcyBmb3IgU01NVXYzIGFuZCBsZWdhY3kgU01N VSBoYXZlIGJlZW4gZGVmaW5lZC4KClNpZ25lZC1vZmYtYnk6IFNhbWVlciBHb2VsIDxzZ29lbEBj b2RlYXVyb3JhLm9yZz4KLS0tCiB4ZW4vZHJpdmVycy9LY29uZmlnICAgICAgICAgICAgICAgICAg ICB8ICAgMiArCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZyAgICB8ICAxNCAr CiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUgICB8ICAgMyArLQogeGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvYXJtL2FybV9zbW11LmggfCAxODkgKysrKysrKysrKwogeGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYyAgfCA2MTkgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDc2OCBpbnNlcnRpb25zKCspLCA1OSBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9h cm0vS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2Fy bS9hcm1fc21tdS5oCgpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvS2NvbmZpZyBiL3hlbi9kcml2 ZXJzL0tjb25maWcKaW5kZXggYmMzYTU0Zi4uNjEyNjU1MyAxMDA2NDQKLS0tIGEveGVuL2RyaXZl cnMvS2NvbmZpZworKysgYi94ZW4vZHJpdmVycy9LY29uZmlnCkBAIC0xMiw0ICsxMiw2IEBAIHNv dXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3ZpZGVvL0tjb25m aWciCiAKK3NvdXJjZSAiZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZyIKKwogZW5kbWVu dQpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcgYi94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi45YWM0Y2VhCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvYXJtL0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorCitjb25maWcgQVJNX1NNTVUKKwli b29sICJBUk0gU01NVSB2MS8yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUk1fNjQKKwloZWxwCisJ IFN1cHBvcnQgZm9yIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgQVJNIFN5c3RlbSBNTVUgYXJjaGl0 ZWN0dXJlLiAoMS8yKQorCitjb25maWcgQVJNX1NNTVVfdjMKKwlib29sICJBUk0gU01NVXYzIFN1 cHBvcnQiCisJZGVwZW5kcyBvbiBBUk1fNjQKKwloZWxwCisJIFN1cHBvcnQgZm9yIGltcGxlbWVu dGF0aW9ucyBvZiB0aGUgQVJNIFN5c3RlbSBNTVUgYXJjaGl0ZWN0dXJlCisJIHZlcnNpb24gMy4K KwpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlIGIveGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCmluZGV4IGY0Y2QyNmUuLjViM2ViMTUg MTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtlZmlsZQorKysgYi94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUKQEAgLTEsMiArMSwzIEBACiBvYmot eSArPSBpb21tdS5vCi1vYmoteSArPSBzbW11Lm8KK29iai0kKENPTkZJR19BUk1fU01NVSkgKz0g c21tdS5vCitvYmotJChDT05GSUdfQVJNX1NNTVVfdjMpICs9IHNtbXUtdjMubwpkaWZmIC0tZ2l0 IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL2FybV9zbW11LmggYi94ZW4vZHJpdmVycy9w YXNzdGhyb3VnaC9hcm0vYXJtX3NtbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5iNWUxNjFmCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gv YXJtL2FybV9zbW11LmgKQEAgLTAsMCArMSwxODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqIC4vYXJtX3NtbXUuaAorICoKKyAqIENvbW1vbiBjb21wYXRpYmlsaXR5IGRlZmluZXMgYW5k IGRhdGFfc3RydWN0dXJlcyBmb3IgcG9ydGluZyBhcm0gc21tdQorICogZHJpdmVycyBmcm9tIExp bnV4LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNyBMaW5hcm8gTGltaXRlZAorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9fQVJNX1NNTVVfSF9fCisj ZGVmaW5lIF9fQVJNX1NNTVVfSF9fCisKKy8qIFhlbjogSGVscGVycyB0byBnZXQgZGV2aWNlIE1N SU8gYW5kIElSUXMgKi8KK3N0cnVjdCByZXNvdXJjZSB7CisJdTY0IGFkZHI7CisJdTY0IHNpemU7 CisJdW5zaWduZWQgaW50IHR5cGU7Cit9OworCisjZGVmaW5lIHJlc291cmNlX3NpemUocmVzKSAo KHJlcyktPnNpemUpCisKKyNkZWZpbmUgcGxhdGZvcm1fZGV2aWNlIGRldmljZQorCisjZGVmaW5l IElPUkVTT1VSQ0VfTUVNIDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlEgMQorCitzdGF0aWMgc3Ry dWN0IHJlc291cmNlICpwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUsCisJCQkJCSAgICAgIHVuc2ln bmVkIGludCBudW0pCit7CisJLyoKKwkgKiBUaGUgcmVzb3VyY2UgaXMgb25seSB1c2VkIGJldHdl ZW4gMiBjYWxscyBvZiBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UuCisJICogSXQncyBxdWl0ZSB1Z2x5 IGJ1dCBpdCdzIGF2b2lkIHRvIGFkZCB0b28gbXVjaCBjb2RlIGluIHRoZSBwYXJ0CisJICogaW1w b3J0ZWQgZnJvbSBMaW51eAorCSAqLworCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCXN0 cnVjdCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlOworCXN0cnVjdCBhY3BpX2lvcnRfc21tdV92 MyAqbm9kZV9zbW11X2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZXMudHlwZSA9IHR5cGU7CisK Kwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElPUkVTT1VSQ0VfTUVNOgorCQlpZiAocGRldi0+dHlw ZSA9PSBERVZfQUNQSSkgeworCQkJcmV0ID0gMTsKKwkJCWlvcnRfbm9kZSA9IHBkZXYtPmFjcGlf bm9kZTsKKwkJCW5vZGVfc21tdV9kYXRhID0KKwkJCQkoc3RydWN0IGFjcGlfaW9ydF9zbW11X3Yz ICopaW9ydF9ub2RlLT5ub2RlX2RhdGE7CisKKwkJCWlmIChub2RlX3NtbXVfZGF0YSAhPSBOVUxM KSB7CisJCQkJcmVzLmFkZHIgPSBub2RlX3NtbXVfZGF0YS0+YmFzZV9hZGRyZXNzOworCQkJCXJl cy5zaXplID0gU1pfMTI4SzsKKwkJCQlyZXQgPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0 ID0gZHRfZGV2aWNlX2dldF9hZGRyZXNzKGRldl90b19kdChwZGV2KSwgbnVtLAorCQkJCQkJICAg ICZyZXMuYWRkciwgJnJlcy5zaXplKTsKKwkJfQorCisJCXJldHVybiAoKHJldCkgPyBOVUxMIDog JnJlcyk7CisKKwljYXNlIElPUkVTT1VSQ0VfSVJROgorCQkvKiBBQ1BJIGNhc2Ugbm90IGltcGxl bWVudGVkIGFzIHRoZXJlIGlzIG5vIHVzZSBjYXNlIGZvciBpdCAqLworCQlyZXQgPSBwbGF0Zm9y bV9nZXRfaXJxKGRldl90b19kdChwZGV2KSwgbnVtKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCXJl dHVybiBOVUxMOworCisJCXJlcy5hZGRyID0gcmV0OworCQlyZXMuc2l6ZSA9IDE7CisKKwkJcmV0 dXJuICZyZXM7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBp bnQgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwg Y29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHRfcHJvcGVydHkgKmR0cHJvcDsK KwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfbm9kZTsKKwlzdHJ1Y3QgYWNwaV9pb3J0X3Nt bXVfdjMgKm5vZGVfc21tdV9kYXRhOworCWludCByZXQgPSAwOworCisJaWYgKHBkZXYtPnR5cGUg PT0gREVWX0FDUEkpIHsKKwkJaW9ydF9ub2RlID0gcGRldi0+YWNwaV9ub2RlOworCQlub2RlX3Nt bXVfZGF0YSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilpb3J0X25vZGUtPm5vZGVfZGF0 YTsKKworCQlpZiAobm9kZV9zbW11X2RhdGEgIT0gTlVMTCkgeworCQkJaWYgKCFzdHJjbXAobmFt ZSwgImV2ZW50cSIpKQorCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5ldmVudF9nc2l2OworCQkJ ZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAicHJpcSIpKQorCQkJCXJldCA9IG5vZGVfc21tdV9kYXRh LT5wcmlfZ3NpdjsKKwkJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNtZHEtc3luYyIpKQorCQkJ CXJldCA9IG5vZGVfc21tdV9kYXRhLT5zeW5jX2dzaXY7CisJCQllbHNlIGlmICghc3RyY21wKG5h bWUsICJnZXJyb3IiKSkKKwkJCQlyZXQgPSBub2RlX3NtbXVfZGF0YS0+Z2Vycl9nc2l2OworCQkJ ZWxzZQorCQkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlkdHByb3AgPSBkdF9m aW5kX3Byb3BlcnR5KGRldl90b19kdChwZGV2KSwgImludGVycnVwdC1uYW1lcyIsIE5VTEwpOwor CQlpZiAoIWR0cHJvcCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICghZHRwcm9wLT52YWx1 ZSkKKwkJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBYZW46 IFN0dWIgb3V0IERNQSBkb21haW4gcmVsYXRlZCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgaW9tbXVf Z2V0X2RtYV9jb29raWUoZG9tKSAwCisjZGVmaW5lIGlvbW11X3B1dF9kbWFfY29va2llKGRvbSkg MAorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpkZXZtX2lvcmVtYXBfcmVzb3VyY2Uoc3RydWN0IGRl dmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwl2b2lkIF9faW9t ZW0gKnB0cjsKKworCWlmICghcmVzIHx8IHJlcy0+dHlwZSAhPSBJT1JFU09VUkNFX01FTSkgewor CQlkZXZfZXJyKGRldiwgIkludmFsaWQgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsKKwl9CisKKwlwdHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5hZGRyLCByZXMtPnNp emUpOworCWlmICghcHRyKSB7CisJCWRldl9lcnIoZGV2LAorCQkJImlvcmVtYXAgZmFpbGVkIChh ZGRyIDB4JSJQUkl4NjQiIHNpemUgMHglIlBSSXg2NCIpXG4iLAorCQkJcmVzLT5hZGRyLCByZXMt PnNpemUpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlyZXR1cm4gcHRyOwor fQorCisvKiBYZW46IER1bW15IGlvbW11X2RvbWFpbiAqLworc3RydWN0IGlvbW11X2RvbWFpbiB7 CisJLyogUnVudGltZSBTTU1VIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgaW9tbXVfZG9tYWluICov CisJc3RydWN0IGFybV9zbW11X2RvbWFpbgkJKnByaXY7CisJdW5zaWduZWQgaW50CQkJdHlwZTsK KworCWF0b21pY190IHJlZjsKKwkvKiBVc2VkIHRvIGxpbmsgaW9tbXVfZG9tYWluIGNvbnRleHRz IGZvciBhIHNhbWUgZG9tYWluLgorCSAqIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwZXItU01NVSB0 byB1c2VkIGJ5IHRoZSBkb21haW4uCisJICovCisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKK307 CisvKiBYZW46IERvbWFpbiB0eXBlIGRlZmluaXRpb25zLiBOb3QgcmVhbGx5IG5lZWRlZCBmb3Ig WGVuLCBkZWZpbmluZyB0byBwb3J0CisgKiBMaW51eCBjb2RlIGFzLWlzCisgKi8KKyNkZWZpbmUg SU9NTVVfRE9NQUlOX1VOTUFOQUdFRCAwCisjZGVmaW5lIElPTU1VX0RPTUFJTl9ETUEgMQorI2Rl ZmluZSBJT01NVV9ET01BSU5fSURFTlRJVFkgMgorCisvKiBYZW46IERlc2NyaWJlcyBpbmZvcm1h dGlvbiByZXF1aXJlZCBmb3IgYSBYZW4gZG9tYWluICovCitzdHJ1Y3QgYXJtX3NtbXVfeGVuX2Rv bWFpbiB7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJLyogTGlzdCBvZiBpb21tdSBkb21haW5zIGFz c29jaWF0ZWQgdG8gdGhpcyBkb21haW4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQlpb21tdV9kb21h aW5zOworfTsKKworLyoKKyAqIFhlbjogSW5mb3JtYXRpb24gYWJvdXQgZWFjaCBkZXZpY2Ugc3Rv cmVkIGluIGRldi0+YXJjaGRhdGEuaW9tbXUKKyAqCisgKiBUaGUgZGV2LT5hcmNoZGF0YS5pb21t dSBzdG9yZXMgdGhlIGlvbW11X2RvbWFpbiAocnVudGltZSBjb25maWd1cmF0aW9uIG9mCisgKiB0 aGUgU01NVSkuCisgKi8KK3N0cnVjdCBhcm1fc21tdV94ZW5fZGV2aWNlIHsKKwlzdHJ1Y3QgaW9t bXVfZG9tYWluICpkb21haW47Cit9OworCisjZW5kaWYgLyogX19BUk1fU01NVV9IX18gKi8KZGlm ZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMgYi94ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jCmluZGV4IGU2N2JhNmMuLmM2YzFiOTkgMTAw NjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMKKysrIGIveGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYwpAQCAtMTgsMjggKzE4LDM4IEBACiAg KiBBdXRob3I6IFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgogICoKICAqIFRoaXMg ZHJpdmVyIGlzIHBvd2VyZWQgYnkgYmFkIGNvZmZlZSBhbmQgYm9tYmF5IG1peC4KKyAqCisgKgor ICogQmFzZWQgb24gTGludXggZHJpdmVycy9pb21tdS9hcm0tc21tdS12My5jCisgKiA9PiBjb21t aXQgN2FhODYxOWE2NmFlYTUyYjE0NWUwNGNiYWI0ZjhkNmE0ZTVmM2YzYgorICoKKyAqIFhlbiBt b2RpZmljYXRpb25zOgorICogU2FtZWVyIEdvZWwgPHNhbWVlci5nb2VsQGxpbmFyby5vcmc+Cisg KiBDb3B5cmlnaHQgKEMpIDIwMTcsIFRoZSBMaW51eCBGb3VuZGF0aW9uLCBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxp bnV4L2FjcGlfaW9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGlu dXgvZG1hLWlvbW11Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgv aW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9p b3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tc2ku aD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4K LSNpbmNsdWRlIDxsaW51eC9vZl9pb21tdS5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3Jt Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgotCi0jaW5jbHVkZSAiaW8tcGd0 YWJsZS5oIgorI2luY2x1ZGUgPHhlbi9hY3BpLmg+CisjaW5jbHVkZSA8eGVuL2NvbmZpZy5oPgor I2luY2x1ZGUgPHhlbi9kZWxheS5oPgorI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUg PHhlbi9lcnIuaD4KKyNpbmNsdWRlIDx4ZW4vaXJxLmg+CisjaW5jbHVkZSA8eGVuL2xpYi5oPgor I2luY2x1ZGUgPHhlbi9saW51eF9jb21wYXQuaD4KKyNpbmNsdWRlIDx4ZW4vbGlzdC5oPgorI2lu Y2x1ZGUgPHhlbi9tbS5oPgorI2luY2x1ZGUgPHhlbi9yYnRyZWUuaD4KKyNpbmNsdWRlIDx4ZW4v c2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vc2l6ZXMuaD4KKyNpbmNsdWRlIDx4ZW4vdm1hcC5oPgor I2luY2x1ZGUgPGFjcGkvYWNwaV9pb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2lu Y2x1ZGUgPGFzbS9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20v cGxhdGZvcm0uaD4KKworI2luY2x1ZGUgImFybV9zbW11LmgiIC8qIE5vdCBhIHNlbGYgY29udGFp bmVkIGhlYWRlci4gU28gbGFzdCBpbiB0aGUgbGlzdCAqLwogCiAvKiBNTUlPIHJlZ2lzdGVycyAq LwogI2RlZmluZSBBUk1fU01NVV9JRFIwCQkJMHgwCkBAIC00MjMsOSArNDMzLDEyIEBACiAjZW5k aWYKIAogc3RhdGljIGJvb2wgZGlzYWJsZV9ieXBhc3M7CisKKyNpZiAwIC8qIFhlbjogTm90IGFw cGxpY2FibGUgZm9yIFhlbiAqLwogbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGVfYnlwYXNzLCBk aXNhYmxlX2J5cGFzcywgYm9vbCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVf YnlwYXNzLAogCSJEaXNhYmxlIGJ5cGFzcyBzdHJlYW1zIHN1Y2ggdGhhdCBpbmNvbWluZyB0cmFu c2FjdGlvbnMgZnJvbSBkZXZpY2VzIHRoYXQgYXJlIG5vdCBhdHRhY2hlZCB0byBhbiBpb21tdSBk b21haW4gd2lsbCByZXBvcnQgYW4gYWJvcnQgYmFjayB0byB0aGUgZGV2aWNlIGFuZCB3aWxsIG5v dCBiZSBhbGxvd2VkIHRvIHBhc3MgdGhyb3VnaCB0aGUgU01NVS4iKTsKKyNlbmRpZgogCiBlbnVt IHByaV9yZXNwIHsKIAlQUklfUkVTUF9ERU5ZLApAQCAtNDMzLDYgKzQ0Niw3IEBAIGVudW0gcHJp X3Jlc3AgewogCVBSSV9SRVNQX1NVQ0MsCiB9OwogCisjaWYgMCAvKiBYZW46IE5vIE1TSSBzdXBw b3J0IGluIHRoaXMgaXRlcmF0aW9uICovCiBlbnVtIGFybV9zbW11X21zaV9pbmRleCB7CiAJRVZU UV9NU0lfSU5ERVgsCiAJR0VSUk9SX01TSV9JTkRFWCwKQEAgLTQ1Nyw2ICs0NzEsNyBAQCBzdGF0 aWMgcGh5c19hZGRyX3QgYXJtX3NtbXVfbXNpX2NmZ1tBUk1fU01NVV9NQVhfTVNJU11bM10gPSB7 CiAJCUFSTV9TTU1VX1BSSVFfSVJRX0NGRzIsCiAJfSwKIH07CisjZW5kaWYKIAogc3RydWN0IGFy bV9zbW11X2NtZHFfZW50IHsKIAkvKiBDb21tb24gZmllbGRzICovCkBAIC01NjEsNiArNTc2LDgg QEAgc3RydWN0IGFybV9zbW11X3MyX2NmZyB7CiAJdTE2CQkJCXZtaWQ7CiAJdTY0CQkJCXZ0dGJy OwogCXU2NAkJCQl2dGNyOworCS8qIFhlbjogRG9tYWluIGFzc29jaWF0ZWQgdG8gdGhpcyBjb25m aWd1cmF0aW9uICovCisJc3RydWN0IGRvbWFpbgkJCSpkb21haW47CiB9OwogCiBzdHJ1Y3QgYXJt X3NtbXVfc3RydGFiX2VudCB7CkBAIC02MzUsOSArNjUyLDIxIEBAIHN0cnVjdCBhcm1fc21tdV9k ZXZpY2UgewogCXN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfY2ZnCXN0cnRhYl9jZmc7CiAKIAkvKiBJ T01NVSBjb3JlIGNvZGUgaGFuZGxlICovCisjaWYgMCAvKlhlbjogR2VuZXJpYyBpb21tdV9kZXZp Y2UgcmVmIG5vdCBuZWVkZWQgaGVyZSAqLwogCXN0cnVjdCBpb21tdV9kZXZpY2UJCWlvbW11Owor I2VuZGlmCisJLyogWGVuOiBOZWVkIHRvIGtlZXAgYSBsaXN0IG9mIFNNTVUgZGV2aWNlcyAqLwor CXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgZGV2aWNlczsKIH07CiAKKy8qIFhlbjog S2VlcCBhIGxpc3Qgb2YgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0 YXRpYyBERUZJTkVfU1BJTkxPQ0soYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKK3N0YXRpYyBMSVNU X0hFQUQoYXJtX3NtbXVfZGV2aWNlcyk7CisvKiBYZW46IEhlbHBlciBmb3IgZmluZGluZyBhIGRl dmljZSB1c2luZyBmd25vZGUgKi8KK3N0YXRpYworc3RydWN0IGFybV9zbW11X2RldmljZSAqYXJt X3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTsKKworCiAv KiBTTU1VIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBtYXN0ZXIgKi8KIHN0cnVjdCBhcm1fc21tdV9t YXN0ZXJfZGF0YSB7CiAJc3RydWN0IGFybV9zbW11X2RldmljZQkJKnNtbXU7CkBAIC02NTQsNyAr NjgzLDcgQEAgZW51bSBhcm1fc21tdV9kb21haW5fc3RhZ2UgewogCiBzdHJ1Y3QgYXJtX3NtbXVf ZG9tYWluIHsKIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlCQkqc21tdTsKLQlzdHJ1Y3QgbXV0ZXgJ CQlpbml0X211dGV4OyAvKiBQcm90ZWN0cyBzbW11IHBvaW50ZXIgKi8KKwltdXRleAkJCWluaXRf bXV0ZXg7IC8qIFByb3RlY3RzIHNtbXUgcG9pbnRlciAqLwogCiAJc3RydWN0IGlvX3BndGFibGVf b3BzCQkqcGd0Ymxfb3BzOwogCkBAIC05NjEsNiArOTkwLDcgQEAgc3RhdGljIHZvaWQgYXJtX3Nt bXVfY21kcV9pc3N1ZV9jbWQoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwKIAlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZzbW11LT5jbWRxLmxvY2ssIGZsYWdzKTsKIH0KIAorI2lmIDAgLypY ZW46IENvbW1lbnQgb3V0IGZ1bmN0aW9ucyB0aGF0IHNldCB1cCBTMSB0cmFuc2xhdGlvbnMgKi8K IC8qIENvbnRleHQgZGVzY3JpcHRvciBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICovCiBzdGF0aWMg dTY0IGFybV9zbW11X2NwdV90Y3JfdG9fY2QodTY0IHRjcikKIHsKQEAgLTEwMDMsNiArMTAzMyw3 IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X3dyaXRlX2N0eF9kZXNjKHN0cnVjdCBhcm1fc21tdV9k ZXZpY2UgKnNtbXUsCiAKIAljZmctPmNkcHRyWzNdID0gY3B1X3RvX2xlNjQoY2ZnLT5jZC5tYWly IDw8IENUWERFU0NfQ0RfM19NQUlSX1NISUZUKTsKIH0KKyNlbmRpZgogCiAvKiBTdHJlYW0gdGFi bGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQKQEAgLTExNjQsNiArMTE5 NSw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5pdF9sMl9zdHJ0YWIoc3RydWN0IGFybV9zbW11 X2RldmljZSAqc21tdSwgdTMyIHNpZCkKIAl2b2lkICpzdHJ0YWI7CiAJc3RydWN0IGFybV9zbW11 X3N0cnRhYl9jZmcgKmNmZyA9ICZzbW11LT5zdHJ0YWJfY2ZnOwogCXN0cnVjdCBhcm1fc21tdV9z dHJ0YWJfbDFfZGVzYyAqZGVzYyA9ICZjZmctPmwxX2Rlc2Nbc2lkID4+IFNUUlRBQl9TUExJVF07 CisJdTMyIGFsaWdubWVudCA9IDA7CiAKIAlpZiAoZGVzYy0+bDJwdHIpCiAJCXJldHVybiAwOwpA QCAtMTE3MiwxNCArMTIwNCwxNiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2luaXRfbDJfc3RydGFi KHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzaWQpCiAJc3RydGFiID0gJmNmZy0+ c3RydGFiWyhzaWQgPj4gU1RSVEFCX1NQTElUKSAqIFNUUlRBQl9MMV9ERVNDX0RXT1JEU107CiAK IAlkZXNjLT5zcGFuID0gU1RSVEFCX1NQTElUICsgMTsKLQlkZXNjLT5sMnB0ciA9IGRtYW1fYWxs b2NfY29oZXJlbnQoc21tdS0+ZGV2LCBzaXplLCAmZGVzYy0+bDJwdHJfZG1hLAotCQkJCQkgIEdG UF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwkvKiBBbGlnbm1lbnQgcGlja2VkIGZyb20gQVJNIFNN TVUgYXJjaCB2ZXJzaW9uIDMueC4gTDFTVC5MMlB0ciAqLworCWFsaWdubWVudCA9IDEgPDwgKCg1 ICsgKGRlc2MtPnNwYW4gLSAxKSkpOworCWRlc2MtPmwycHRyID0gX3h6YWxsb2Moc2l6ZSwgYWxp Z25tZW50KTsKIAlpZiAoIWRlc2MtPmwycHRyKSB7CiAJCWRldl9lcnIoc21tdS0+ZGV2LAogCQkJ ImZhaWxlZCB0byBhbGxvY2F0ZSBsMiBzdHJlYW0gdGFibGUgZm9yIFNJRCAldVxuIiwKIAkJCXNp ZCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwlkZXNjLT5sMnB0cl9kbWEgPSB2aXJ0X3RvX21h ZGRyKGRlc2MtPmwycHRyKTsKIAogCWFybV9zbW11X2luaXRfYnlwYXNzX3N0ZXMoZGVzYy0+bDJw dHIsIDEgPDwgU1RSVEFCX1NQTElUKTsKIAlhcm1fc21tdV93cml0ZV9zdHJ0YWJfbDFfZGVzYyhz dHJ0YWIsIGRlc2MpOwpAQCAtMTIzMiw3ICsxMjY2LDcgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVf aGFuZGxlX3BwcihzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LCB1NjQgKmV2dCkKIAogCWRl dl9pbmZvKHNtbXUtPmRldiwgInVuZXhwZWN0ZWQgUFJJIHJlcXVlc3QgcmVjZWl2ZWQ6XG4iKTsK IAlkZXZfaW5mbyhzbW11LT5kZXYsCi0JCSAiXHRzaWQgMHglMDh4LjB4JTA1eDogWyV1JXNdICVz cHJpdmlsZWdlZCAlcyVzJXMgYWNjZXNzIGF0IGlvdmEgMHglMDE2bGx4XG4iLAorCQkgIlx0c2lk IDB4JTA4eC4weCUwNXg6IFsldSVzXSAlc3ByaXZpbGVnZWQgJXMlcyVzIGFjY2VzcyBhdCBpb3Zh ICUjIiBQUkl4NjQgIlxuIiwKIAkJIHNpZCwgc3NpZCwgZ3JwaWQsIGxhc3QgPyAiTCIgOiAiIiwK IAkJIGV2dFswXSAmIFBSSVFfMF9QRVJNX1BSSVYgPyAiIiA6ICJ1biIsCiAJCSBldnRbMF0gJiBQ UklRXzBfUEVSTV9SRUFEID8gIlIiIDogIiIsCkBAIC0xMzQ2LDYgKzEzODAsOCBAQCBzdGF0aWMg aXJxcmV0dXJuX3QgYXJtX3NtbXVfY29tYmluZWRfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAq ZGV2KQogewogCWFybV9zbW11X2dlcnJvcl9oYW5kbGVyKGlycSwgZGV2KTsKIAlhcm1fc21tdV9j bWRxX3N5bmNfaGFuZGxlcihpcnEsIGRldik7CisJLypYZW46IE5vIHRocmVhZGVkIGlycS4gU28g Y2FsbCB0aGUgcmVxdWlyZWQgZnVuY3Rpb24gZnJvbSBoZXJlICovCisJYXJtX3NtbXVfY29tYmlu ZWRfaXJxX3RocmVhZChpcnEsIGRldik7CiAJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKIH0KIApA QCAtMTM1OCwxMSArMTM5NCw0OSBAQCBzdGF0aWMgdm9pZCBfX2FybV9zbW11X3RsYl9zeW5jKHN0 cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCiAJYXJtX3NtbXVfY21kcV9pc3N1ZV9jbWQoc21t dSwgJmNtZCk7CiB9CiAKK3N0YXRpYyB2b2lkIGFybV9zbW11X2V2dHFfdGhyZWFkX3hlbihpbnQg aXJxLCB2b2lkICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQor eworCWFybV9zbW11X2V2dHFfdGhyZWFkKGlycSwgZGV2KTsKK30KKworc3RhdGljIHZvaWQgYXJt X3NtbXVfcHJpcV90aHJlYWRfeGVuKGludCBpcnEsIHZvaWQgKmRldiwKKwkJCQkgICAgICAgc3Ry dWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisJYXJtX3NtbXVfcHJpcV90aHJlYWQoaXJxLCBk ZXYpOworfQorCitzdGF0aWMgdm9pZCBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlcl94ZW4oaW50 IGlycSwgdm9pZCAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykK K3sKKwlhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlcihpcnEsIGRldik7Cit9CisKK3N0YXRpYyB2 b2lkIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCisJCQkJ ICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQoreworCWFybV9zbW11X2dlcnJvcl9o YW5kbGVyKGlycSwgZGV2KTsKK30KKworc3RhdGljIHZvaWQgYXJtX3NtbXVfY29tYmluZWRfaXJx X2hhbmRsZXJfeGVuKGludCBpcnEsIHZvaWQgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGNwdV91 c2VyX3JlZ3MgKnJlZ3MpCit7CisJYXJtX3NtbXVfY29tYmluZWRfaXJxX2hhbmRsZXIoaXJxLCBk ZXYpOworfQorCisjZGVmaW5lIGFybV9zbW11X2V2dHFfdGhyZWFkIGFybV9zbW11X2V2dHFfdGhy ZWFkX3hlbgorI2RlZmluZSBhcm1fc21tdV9wcmlxX3RocmVhZCBhcm1fc21tdV9wcmlxX3RocmVh ZF94ZW4KKyNkZWZpbmUgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIgYXJtX3NtbXVfY21kcV9z eW5jX2hhbmRsZXJfeGVuCisjZGVmaW5lIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyIGFybV9zbW11 X2dlcnJvcl9oYW5kbGVyX3hlbgorI2RlZmluZSBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxl ciBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcl94ZW4KKworI2lmIDAgLypYZW46IFVudXNl ZCBmdW5jdGlvbiAqLwogc3RhdGljIHZvaWQgYXJtX3NtbXVfdGxiX3N5bmModm9pZCAqY29va2ll KQogewogCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluID0gY29va2llOwogCV9f YXJtX3NtbXVfdGxiX3N5bmMoc21tdV9kb21haW4tPnNtbXUpOwogfQorI2VuZGlmCiAKIHN0YXRp YyB2b2lkIGFybV9zbW11X3RsYl9pbnZfY29udGV4dCh2b2lkICpjb29raWUpCiB7CkBAIC0xMzgz LDYgKzE0NTcsNyBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV90bGJfaW52X2NvbnRleHQodm9pZCAq Y29va2llKQogCV9fYXJtX3NtbXVfdGxiX3N5bmMoc21tdSk7CiB9CiAKKyNpZiAwIC8qWGVuOiBV bnVzZWQgZnVuY3Rpb25hbGl0eSAqLwogc3RhdGljIHZvaWQgYXJtX3NtbXVfdGxiX2ludl9yYW5n ZV9ub3N5bmModW5zaWduZWQgbG9uZyBpb3ZhLCBzaXplX3Qgc2l6ZSwKIAkJCQkJICBzaXplX3Qg Z3JhbnVsZSwgYm9vbCBsZWFmLCB2b2lkICpjb29raWUpCiB7CkBAIC0xNDI3LDYgKzE1MDIsNyBA QCBzdGF0aWMgYm9vbCBhcm1fc21tdV9jYXBhYmxlKGVudW0gaW9tbXVfY2FwIGNhcCkKIAkJcmV0 dXJuIGZhbHNlOwogCX0KIH0KKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFpbiAq YXJtX3NtbXVfZG9tYWluX2FsbG9jKHVuc2lnbmVkIHR5cGUpCiB7CkBAIC0xNDc0LDYgKzE1NTAs NyBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9iaXRtYXBfZnJlZSh1bnNpZ25lZCBsb25nICptYXAs IGludCBpZHgpCiAJY2xlYXJfYml0KGlkeCwgbWFwKTsKIH0KIAorI2lmIDAKIHN0YXRpYyB2b2lk IGFybV9zbW11X2RvbWFpbl9mcmVlKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKIHsKIAlz dHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbiA9IHRvX3NtbXVfZG9tYWluKGRvbWFp bik7CkBAIC0xNTAyLDcgKzE1NzksMjMgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfZG9tYWluX2Zy ZWUoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQogCiAJa2ZyZWUoc21tdV9kb21haW4pOwog fQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGFybV9zbW11X2RvbWFpbl9mcmVlKHN0cnVjdCBpb21t dV9kb21haW4gKmRvbWFpbikKK3sKKwlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFp biA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbik7CisJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21t dSA9IHNtbXVfZG9tYWluLT5zbW11OworCXN0cnVjdCBhcm1fc21tdV9zMl9jZmcgKmNmZyA9ICZz bW11X2RvbWFpbi0+czJfY2ZnOworCS8qCisJICogWGVuOiBSZW1vdmUgdGhlIGZyZWUgZnVuY3Rp b25zIHRoYXQgYXJlIG5vdCB1c2VkIGFuZCBjb2RlIHJlbGF0ZWQKKwkgKiB0byBTMSB0cmFuc2xh dGlvbi4gV2UganVzdCBuZWVkIHRvIGZyZWUgdGhlIGRvbWFpbiBhbmQgdm1pZCBoZXJlLgorCSAq LworCWlmIChjZmctPnZtaWQpCisJCWFybV9zbW11X2JpdG1hcF9mcmVlKHNtbXUtPnZtaWRfbWFw LCBjZmctPnZtaWQpOworCWtmcmVlKHNtbXVfZG9tYWluKTsKK30KIAorI2lmIDAgLypYZW46IFRo ZSBmaW5hbGl6ZSBkb21haW4gZnVuY3Rpb25zIGFyZSBub3QgbmVlZGVkIGluIGN1cnJlbnQgZm9y bSAqLwogc3RhdGljIGludCBhcm1fc21tdV9kb21haW5fZmluYWxpc2VfczEoc3RydWN0IGFybV9z bW11X2RvbWFpbiAqc21tdV9kb21haW4sCiAJCQkJICAgICAgIHN0cnVjdCBpb19wZ3RhYmxlX2Nm ZyAqcGd0YmxfY2ZnKQogewpAQCAtMTU1MSwxNiArMTY0NCw0MSBAQCBzdGF0aWMgaW50IGFybV9z bW11X2RvbWFpbl9maW5hbGlzZV9zMihzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFp biwKIAljZmctPnZ0Y3IJPSBwZ3RibF9jZmctPmFybV9scGFlX3MyX2NmZy52dGNyOwogCXJldHVy biAwOwogfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgYXJtX3NtbXVfZG9tYWluX2ZpbmFsaXNlX3My KHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluKQoreworCWludCB2bWlkOworCXN0 cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBzbW11X2RvbWFpbi0+c21tdTsKKwlzdHJ1Y3Qg YXJtX3NtbXVfczJfY2ZnICpjZmcgPSAmc21tdV9kb21haW4tPnMyX2NmZzsKKworCXZtaWQgPSBh cm1fc21tdV9iaXRtYXBfYWxsb2Moc21tdS0+dm1pZF9tYXAsIHNtbXUtPnZtaWRfYml0cyk7CisJ aWYgKHZtaWQgPCAwKQorCQlyZXR1cm4gdm1pZDsKKworCS8qIFhlbjogR2V0IHRoZSB0dGJyIGFu ZCB2dGNyIHZhbHVlcworCSAqIHZ0dGJyOiBUaGlzIGlzIGEgc2hhcmVkIHZhbHVlIHdpdGggdGhl IGRvbWFpbiBwYWdlIHRhYmxlCisJICogdnRjcjogVGhlIFRDUiBzZXR0aW5ncyBhcmUgdGhlIHNh bWUgYXMgQ1BVIHNpbmNlIGhlIHBhZ2UKKwkgKiB0YWJsZXMgYXJlIHNoYXJlZAorCSAqLworCisJ Y2ZnLT52bWlkCT0gdm1pZDsKKwljZmctPnZ0dGJyCT0gcGFnZV90b19tYWRkcihjZmctPmRvbWFp bi0+YXJjaC5wMm0ucm9vdCk7CisJY2ZnLT52dGNyCT0gUkVBRF9TWVNSRUczMihWVENSX0VMMikg JiBTVFJUQUJfU1RFXzJfVlRDUl9NQVNLOworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IGFy bV9zbW11X2RvbWFpbl9maW5hbGlzZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCiB7CiAJ aW50IHJldDsKKyNpZiAwCS8qIFhlbjogcGd0YmxfY2ZnIG5vdCBuZWVkZWQuIFNvIG1vZGlmeSB0 aGUgZnVuY3Rpb24gYXMgbmVlZGVkICovCiAJdW5zaWduZWQgbG9uZyBpYXMsIG9hczsKIAllbnVt IGlvX3BndGFibGVfZm10IGZtdDsKIAlzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcgcGd0YmxfY2ZnOwog CXN0cnVjdCBpb19wZ3RhYmxlX29wcyAqcGd0Ymxfb3BzOwogCWludCAoKmZpbmFsaXNlX3N0YWdl X2ZuKShzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICosCiAJCQkJIHN0cnVjdCBpb19wZ3RhYmxlX2Nm ZyAqKTsKKyNlbmRpZgogCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluID0gdG9f c21tdV9kb21haW4oZG9tYWluKTsKIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gc21t dV9kb21haW4tPnNtbXU7CiAKQEAgLTE1NzUsNiArMTY5Myw3IEBAIHN0YXRpYyBpbnQgYXJtX3Nt bXVfZG9tYWluX2ZpbmFsaXNlKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKIAlpZiAoIShz bW11LT5mZWF0dXJlcyAmIEFSTV9TTU1VX0ZFQVRfVFJBTlNfUzIpKQogCQlzbW11X2RvbWFpbi0+ c3RhZ2UgPSBBUk1fU01NVV9ET01BSU5fUzE7CiAKKyNpZiAwCiAJc3dpdGNoIChzbW11X2RvbWFp bi0+c3RhZ2UpIHsKIAljYXNlIEFSTV9TTU1VX0RPTUFJTl9TMToKIAkJaWFzID0gVkFfQklUUzsK QEAgLTE2MTYsNyArMTczNSw5IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZG9tYWluX2ZpbmFsaXNl KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKIAlyZXQgPSBmaW5hbGlzZV9zdGFnZV9mbihz bW11X2RvbWFpbiwgJnBndGJsX2NmZyk7CiAJaWYgKHJldCA8IDApCiAJCWZyZWVfaW9fcGd0YWJs ZV9vcHMocGd0Ymxfb3BzKTsKKyNlbmRpZgogCisJcmV0ID0gYXJtX3NtbXVfZG9tYWluX2ZpbmFs aXNlX3MyKHNtbXVfZG9tYWluKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzA5LDcgKzE4MzAs OSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2F0dGFjaF9kZXYoc3RydWN0IGlvbW11X2RvbWFpbiAq ZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJfSBlbHNlIGlmIChzbW11X2RvbWFpbi0+c3Rh Z2UgPT0gQVJNX1NNTVVfRE9NQUlOX1MxKSB7CiAJCXN0ZS0+czFfY2ZnID0gJnNtbXVfZG9tYWlu LT5zMV9jZmc7CiAJCXN0ZS0+czJfY2ZnID0gTlVMTDsKKyNpZiAwIC8qWGVuOiBTMSBjb25maWd1 cmF0aW8gbm90IG5lZWRlZCAqLwogCQlhcm1fc21tdV93cml0ZV9jdHhfZGVzYyhzbW11LCBzdGUt PnMxX2NmZyk7CisjZW5kaWYKIAl9IGVsc2UgewogCQlzdGUtPnMxX2NmZyA9IE5VTEw7CiAJCXN0 ZS0+czJfY2ZnID0gJnNtbXVfZG9tYWluLT5zMl9jZmc7CkBAIC0xNzIxLDYgKzE4NDQsNyBAQCBv dXRfdW5sb2NrOgogCXJldHVybiByZXQ7CiB9CiAKKyNpZiAwCiBzdGF0aWMgaW50IGFybV9zbW11 X21hcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKIAkJ CXBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpCiB7CkBAIC0xNzcyLDYg KzE4OTYsNyBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2Rl KHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCiAJcHV0X2RldmljZShkZXYpOwogCXJldHVy biBkZXYgPyBkZXZfZ2V0X2RydmRhdGEoZGV2KSA6IE5VTEw7CiB9CisjZW5kaWYKIAogc3RhdGlj IGJvb2wgYXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUs IHUzMiBzaWQpCiB7CkBAIC0xNzgyLDggKzE5MDcsOSBAQCBzdGF0aWMgYm9vbCBhcm1fc21tdV9z aWRfaW5fcmFuZ2Uoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKIAogCXJl dHVybiBzaWQgPCBsaW1pdDsKIH0KLQorI2lmIDAKIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3BzIGFy bV9zbW11X29wczsKKyNlbmRpZgogCiBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3Ry dWN0IGRldmljZSAqZGV2KQogewpAQCAtMTc5MSw5ICsxOTE3LDEyIEBAIHN0YXRpYyBpbnQgYXJt X3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJc3RydWN0IGFybV9zbW11X2Rl dmljZSAqc21tdTsKIAlzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgKm1hc3RlcjsKIAlzdHJ1 Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsKKyNpZiAwIC8qWGVu OiBpb21tdV9ncm91cCBpcyBub3QgbmVlZGVkICovCiAJc3RydWN0IGlvbW11X2dyb3VwICpncm91 cDsKKyNlbmRpZgogCi0JaWYgKCFmd3NwZWMgfHwgZndzcGVjLT5vcHMgIT0gJmFybV9zbW11X29w cykKKwkvKiBYZW46IGZ3c3BlYy0+b3BzIGFyZSBub3QgbmVlZGVkICovCisJaWYgKCFmd3NwZWMp CiAJCXJldHVybiAtRU5PREVWOwogCS8qCiAJICogV2UgX2Nhbl8gYWN0dWFsbHkgd2l0aHN0YW5k IGRvZGd5IGJ1cyBjb2RlIHJlLWNhbGxpbmcgYWRkX2RldmljZSgpCkBAIC0xODMwLDYgKzE5NTks MTIgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikK IAkJfQogCX0KIAorI2lmIDAKKy8qCisgKiBYZW46IERvIG5vdCBuZWVkIGFuIGlvbW11IGdyb3Vw IGFzIHRoZSBzdHJlYW0gZGF0YSBpcyBjYXJyaWVkIGJ5IHRoZSBTTU1VCisgKiBtYXN0ZXIgZGV2 aWNlIG9iamVjdAorICovCisKIAlncm91cCA9IGlvbW11X2dyb3VwX2dldF9mb3JfZGV2KGRldik7 CiAJaWYgKCFJU19FUlIoZ3JvdXApKSB7CiAJCWlvbW11X2dyb3VwX3B1dChncm91cCk7CkBAIC0x ODM3LDggKzE5NzIsMTYgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBk ZXZpY2UgKmRldikKIAl9CiAKIAlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGdyb3VwKTsKKyNlbmRp ZgorCXJldHVybiAwOwogfQogCisvKgorICogWGVuOiBXZSBjYW4gcG90ZW50aWFsbHkgc3VwcG9y dCB0aGlzIGZ1bmN0aW9uIGFuZCBkZXN0cm95IGEgZGV2aWNlLiBUaGlzCisgKiB3aWxsIGJlIHJl bGV2YW50IGZvciBQQ0kgaG90cGx1Zy4gU28sIHdpbGwgYmUgaW1wbGVtZW50ZWQgYXMgbmVlZGVk IGFmdGVyCisgKiBwYXNzdGhyb3VnaCBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KKyAqLworI2lmIDAK IHN0YXRpYyB2b2lkIGFybV9zbW11X3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQog ewogCXN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYyA9IGRldi0+aW9tbXVfZndzcGVjOwpAQCAt MTk3NCw3ICsyMTE3LDcgQEAgc3RhdGljIHN0cnVjdCBpb21tdV9vcHMgYXJtX3NtbXVfb3BzID0g ewogCS5wdXRfcmVzdl9yZWdpb25zCT0gYXJtX3NtbXVfcHV0X3Jlc3ZfcmVnaW9ucywKIAkucGdz aXplX2JpdG1hcAkJPSAtMVVMLCAvKiBSZXN0cmljdGVkIGR1cmluZyBkZXZpY2UgYXR0YWNoICov CiB9OwotCisjZW5kaWYKIC8qIFByb2JpbmcgYW5kIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAq Lwogc3RhdGljIGludCBhcm1fc21tdV9pbml0X29uZV9xdWV1ZShzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11LAogCQkJCSAgIHN0cnVjdCBhcm1fc21tdV9xdWV1ZSAqcSwKQEAgLTE5ODQsMTMg KzIxMjcsMTkgQEAgc3RhdGljIGludCBhcm1fc21tdV9pbml0X29uZV9xdWV1ZShzdHJ1Y3QgYXJt X3NtbXVfZGV2aWNlICpzbW11LAogewogCXNpemVfdCBxc3ogPSAoKDEgPDwgcS0+bWF4X25fc2hp ZnQpICogZHdvcmRzKSA8PCAzOwogCi0JcS0+YmFzZSA9IGRtYW1fYWxsb2NfY29oZXJlbnQoc21t dS0+ZGV2LCBxc3osICZxLT5iYXNlX2RtYSwgR0ZQX0tFUk5FTCk7CisJLyogVGhlIFNNTVUgY2Fj aGUgY29oZXJlbmN5IHByb3BlcnR5IGlzIGFsd2F5cyBzZXQuIFNpbmNlIHdlIGFyZSBzaGFyaW5n IHRoZSBDUFUgdHJhbnNsYXRpb24gdGFibGVzCisJICoganVzdCBtYWtlIGEgcmVndWxhciBhbGxv Y2F0aW9uLgorCSAqLworCXEtPmJhc2UgPSBfeHphbGxvYyhxc3osIHNpemVvZih2b2lkICopKTsK KwogCWlmICghcS0+YmFzZSkgewogCQlkZXZfZXJyKHNtbXUtPmRldiwgImZhaWxlZCB0byBhbGxv Y2F0ZSBxdWV1ZSAoMHglenggYnl0ZXMpXG4iLAogCQkJcXN6KTsKIAkJcmV0dXJuIC1FTk9NRU07 CiAJfQogCisJcS0+YmFzZV9kbWEgPSB2aXJ0X3RvX21hZGRyKHEtPmJhc2UpOworCiAJcS0+cHJv ZF9yZWcJPSBhcm1fc21tdV9wYWdlMV9maXh1cChwcm9kX29mZiwgc21tdSk7CiAJcS0+Y29uc19y ZWcJPSBhcm1fc21tdV9wYWdlMV9maXh1cChjb25zX29mZiwgc21tdSk7CiAJcS0+ZW50X2R3b3Jk cwk9IGR3b3JkczsKQEAgLTIwNTYsNiArMjIwNSw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5p dF9zdHJ0YWJfMmx2bChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQogCXU2NCByZWc7CiAJ dTMyIHNpemUsIGwxc2l6ZTsKIAlzdHJ1Y3QgYXJtX3NtbXVfc3RydGFiX2NmZyAqY2ZnID0gJnNt bXUtPnN0cnRhYl9jZmc7CisJdTMyIGFsaWdubWVudDsKIAogCS8qIENhbGN1bGF0ZSB0aGUgTDEg c2l6ZSwgY2FwcGVkIHRvIHRoZSBTSURTSVpFLiAqLwogCXNpemUgPSBTVFJUQUJfTDFfU1pfU0hJ RlQgLSAoaWxvZzIoU1RSVEFCX0wxX0RFU0NfRFdPUkRTKSArIDMpOwpAQCAtMjA2OSwxNCArMjIx OSwxNyBAQCBzdGF0aWMgaW50IGFybV9zbW11X2luaXRfc3RydGFiXzJsdmwoc3RydWN0IGFybV9z bW11X2RldmljZSAqc21tdSkKIAkJCSBzaXplLCBzbW11LT5zaWRfYml0cyk7CiAKIAlsMXNpemUg PSBjZmctPm51bV9sMV9lbnRzICogKFNUUlRBQl9MMV9ERVNDX0RXT1JEUyA8PCAzKTsKLQlzdHJ0 YWIgPSBkbWFtX2FsbG9jX2NvaGVyZW50KHNtbXUtPmRldiwgbDFzaXplLCAmY2ZnLT5zdHJ0YWJf ZG1hLAotCQkJCSAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCWFsaWdubWVudCA9IG1h eF90KHUzMiwgY2ZnLT5udW1fbDFfZW50cywgNjQpOworCXN0cnRhYiA9IF94emFsbG9jKGwxc2l6 ZSwgbDFzaXplKTsKKwogCWlmICghc3RydGFiKSB7CiAJCWRldl9lcnIoc21tdS0+ZGV2LAogCQkJ ImZhaWxlZCB0byBhbGxvY2F0ZSBsMSBzdHJlYW0gdGFibGUgKCV1IGJ5dGVzKVxuIiwKIAkJCXNp emUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisKKwljZmctPnN0cnRhYl9kbWEgPSB2aXJ0X3Rv X21hZGRyKHN0cnRhYik7CiAJY2ZnLT5zdHJ0YWIgPSBzdHJ0YWI7CiAKIAkvKiBDb25maWd1cmUg c3RydGFiX2Jhc2VfY2ZnIGZvciAyIGxldmVscyAqLwpAQCAtMjA5OCwxNCArMjI1MSwxNiBAQCBz dGF0aWMgaW50IGFybV9zbW11X2luaXRfc3RydGFiX2xpbmVhcihzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11KQogCXN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfY2ZnICpjZmcgPSAmc21tdS0+c3Ry dGFiX2NmZzsKIAogCXNpemUgPSAoMSA8PCBzbW11LT5zaWRfYml0cykgKiAoU1RSVEFCX1NURV9E V09SRFMgPDwgMyk7Ci0Jc3RydGFiID0gZG1hbV9hbGxvY19jb2hlcmVudChzbW11LT5kZXYsIHNp emUsICZjZmctPnN0cnRhYl9kbWEsCi0JCQkJICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7 CisJc3RydGFiID0gX3h6YWxsb2Moc2l6ZSwgc2l6ZSk7CisKIAlpZiAoIXN0cnRhYikgewogCQlk ZXZfZXJyKHNtbXUtPmRldiwKIAkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgbGluZWFyIHN0cmVhbSB0 YWJsZSAoJXUgYnl0ZXMpXG4iLAogCQkJc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwor CWNmZy0+c3RydGFiX2RtYSA9IHZpcnRfdG9fbWFkZHIoc3RydGFiKTsKIAljZmctPnN0cnRhYiA9 IHN0cnRhYjsKIAljZmctPm51bV9sMV9lbnRzID0gMSA8PCBzbW11LT5zaWRfYml0czsKIApAQCAt MjE4Miw2ICsyMzM3LDcgQEAgc3RhdGljIGludCBhcm1fc21tdV91cGRhdGVfZ2JwYShzdHJ1Y3Qg YXJtX3NtbXVfZGV2aWNlICpzbW11LCB1MzIgc2V0LCB1MzIgY2xyKQogCQkJCQkgIDEsIEFSTV9T TU1VX1BPTExfVElNRU9VVF9VUyk7CiB9CiAKKyNpZiAwIC8qIFhlbjogVGhlcmUgaXMgbm8gTVNJ IHN1cHBvcnQgYXMgeWV0ICovCiBzdGF0aWMgdm9pZCBhcm1fc21tdV9mcmVlX21zaXModm9pZCAq ZGF0YSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOwpAQCAtMjI0NywzNiArMjQwMywz OSBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9zZXR1cF9tc2lzKHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKnNtbXUpCiAJLyogQWRkIGNhbGxiYWNrIHRvIGZyZWUgTVNJcyBvbiB0ZWFyZG93biAqLwog CWRldm1fYWRkX2FjdGlvbihkZXYsIGFybV9zbW11X2ZyZWVfbXNpcywgZGV2KTsKIH0KKyNlbmRp ZgogCiBzdGF0aWMgdm9pZCBhcm1fc21tdV9zZXR1cF91bmlxdWVfaXJxcyhzdHJ1Y3QgYXJtX3Nt bXVfZGV2aWNlICpzbW11KQogewogCWludCBpcnEsIHJldDsKIAorI2lmIDAgLypYZW46IENhbm5v dCBzZXR1cCBtc2lzIGZvciBub3cgKi8KIAlhcm1fc21tdV9zZXR1cF9tc2lzKHNtbXUpOworI2Vu ZGlmCiAKIAkvKiBSZXF1ZXN0IGludGVycnVwdCBsaW5lcyAqLwogCWlycSA9IHNtbXUtPmV2dHEu cS5pcnE7CiAJaWYgKGlycSkgewotCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKHNt bXUtPmRldiwgaXJxLCBOVUxMLAotCQkJCQkJYXJtX3NtbXVfZXZ0cV90aHJlYWQsCi0JCQkJCQlJ UlFGX09ORVNIT1QsCi0JCQkJCQkiYXJtLXNtbXUtdjMtZXZ0cSIsIHNtbXUpOworCQlpcnFfc2V0 X3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOworCQlyZXQgPSByZXF1ZXN0X2lycShpcnEs IGFybV9zbW11X2V2dHFfdGhyZWFkLAorCQkJCQkJMCwgImFybS1zbW11LXYzLWV2dHEiLCBzbW11 KTsKIAkJaWYgKHJldCA8IDApCiAJCQlkZXZfd2FybihzbW11LT5kZXYsICJmYWlsZWQgdG8gZW5h YmxlIGV2dHEgaXJxXG4iKTsKIAl9CiAKIAlpcnEgPSBzbW11LT5jbWRxLnEuaXJxOwogCWlmIChp cnEpIHsKLQkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShzbW11LT5kZXYsIGlycSwKLQkJCQkgICAg ICAgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIsIDAsCi0JCQkJICAgICAgICJhcm0tc21tdS12 My1jbWRxLXN5bmMiLCBzbW11KTsKKwkJaXJxX3NldF90eXBlKGlycSwgSVJRX1RZUEVfRURHRV9C T1RIKTsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxl ciwKKwkJCQkwLCAiYXJtLXNtbXUtdjMtY21kcS1zeW5jIiwgc21tdSk7CiAJCWlmIChyZXQgPCAw KQogCQkJZGV2X3dhcm4oc21tdS0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbWRxLXN5bmMgaXJx XG4iKTsKIAl9CiAKIAlpcnEgPSBzbW11LT5nZXJyX2lycTsKIAlpZiAoaXJxKSB7Ci0JCXJldCA9 IGRldm1fcmVxdWVzdF9pcnEoc21tdS0+ZGV2LCBpcnEsIGFybV9zbW11X2dlcnJvcl9oYW5kbGVy LAorCQlpcnFfc2V0X3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOworCQlyZXQgPSByZXF1 ZXN0X2lycShpcnEsIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyLAogCQkJCSAgICAgICAwLCAiYXJt LXNtbXUtdjMtZ2Vycm9yIiwgc21tdSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZGV2X3dhcm4oc21t dS0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBnZXJyb3IgaXJxXG4iKTsKQEAgLTIyODQsMTIgKzI0 NDMsMTMgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfc2V0dXBfdW5pcXVlX2lycXMoc3RydWN0IGFy bV9zbW11X2RldmljZSAqc21tdSkKIAogCWlmIChzbW11LT5mZWF0dXJlcyAmIEFSTV9TTU1VX0ZF QVRfUFJJKSB7CiAJCWlycSA9IHNtbXUtPnByaXEucS5pcnE7CisJCWlycV9zZXRfdHlwZShpcnEs IElSUV9UWVBFX0VER0VfQk9USCk7CiAJCWlmIChpcnEpIHsKLQkJCXJldCA9IGRldm1fcmVxdWVz dF90aHJlYWRlZF9pcnEoc21tdS0+ZGV2LCBpcnEsIE5VTEwsCi0JCQkJCQkJYXJtX3NtbXVfcHJp cV90aHJlYWQsCi0JCQkJCQkJSVJRRl9PTkVTSE9ULAotCQkJCQkJCSJhcm0tc21tdS12My1wcmlx IiwKLQkJCQkJCQlzbW11KTsKKwkJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwKKwkJCQkJICBhcm1f c21tdV9wcmlxX3RocmVhZCwKKwkJCQkJICAwLAorCQkJCQkgICJhcm0tc21tdS12My1wcmlxIiwK KwkJCQkJICBzbW11KTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWRldl93YXJuKHNtbXUtPmRldiwK IAkJCQkJICJmYWlsZWQgdG8gZW5hYmxlIHByaXEgaXJxXG4iKTsKQEAgLTIzMTYsMTEgKzI0NzYs MTEgQEAgc3RhdGljIGludCBhcm1fc21tdV9zZXR1cF9pcnFzKHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKnNtbXUpCiAJCSAqIENhdml1bSBUaHVuZGVyWDIgaW1wbGVtZW50YXRpb24gZG9lc24ndCBu b3Qgc3VwcG9ydCB1bmlxdWUKIAkJICogaXJxIGxpbmVzLiBVc2Ugc2luZ2xlIGlycSBsaW5lIGZv ciBhbGwgdGhlIFNNTVV2MyBpbnRlcnJ1cHRzLgogCQkgKi8KLQkJcmV0ID0gZGV2bV9yZXF1ZXN0 X3RocmVhZGVkX2lycShzbW11LT5kZXYsIGlycSwKLQkJCQkJYXJtX3NtbXVfY29tYmluZWRfaXJx X2hhbmRsZXIsCi0JCQkJCWFybV9zbW11X2NvbWJpbmVkX2lycV90aHJlYWQsCi0JCQkJCUlSUUZf T05FU0hPVCwKLQkJCQkJImFybS1zbW11LXYzLWNvbWJpbmVkLWlycSIsIHNtbXUpOworCQlyZXQg PSByZXF1ZXN0X2lycShpcnEsCisJCQkJICBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlciwK KwkJCQkgIDAsCisJCQkJICAiYXJtLXNtbXUtdjMtY29tYmluZWQtaXJxIiwKKwkJCQkgIHNtbXUp OwogCQlpZiAocmV0IDwgMCkKIAkJCWRldl93YXJuKHNtbXUtPmRldiwgImZhaWxlZCB0byBlbmFi bGUgY29tYmluZWQgaXJxXG4iKTsKIAl9IGVsc2UKQEAgLTI1NDIsOCArMjcwMiwxMSBAQCBzdGF0 aWMgaW50IGFybV9zbW11X2RldmljZV9od19wcm9iZShzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpz bW11KQogCQlzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1NUQUxMUzsKIAl9CiAKKyNp ZiAwLyogWGVuOiBEbyBub3QgZW5hYmxlIFN0YWdlIDEgdHJhbnNsYXRpb25zICovCisKIAlpZiAo cmVnICYgSURSMF9TMVApCiAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfVFJBTlNf UzE7CisjZW5kaWYKIAogCWlmIChyZWcgJiBJRFIwX1MyUCkKIAkJc21tdS0+ZmVhdHVyZXMgfD0g QVJNX1NNTVVfRkVBVF9UUkFOU19TMjsKQEAgLTI2MTYsMTAgKzI3NzksMTIgQEAgc3RhdGljIGlu dCBhcm1fc21tdV9kZXZpY2VfaHdfcHJvYmUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkK IAlpZiAocmVnICYgSURSNV9HUkFONEspCiAJCXNtbXUtPnBnc2l6ZV9iaXRtYXAgfD0gU1pfNEsg fCBTWl8yTSB8IFNaXzFHOwogCisjaWYgMCAvKiBYZW46IFNNTVUgb3BzIGRvIG5vdCBoYXZlIGEg cGdzaXplX2JpdG1hcCBtZW1iZXIgZm9yIFhlbiAqLwogCWlmIChhcm1fc21tdV9vcHMucGdzaXpl X2JpdG1hcCA9PSAtMVVMKQogCQlhcm1fc21tdV9vcHMucGdzaXplX2JpdG1hcCA9IHNtbXUtPnBn c2l6ZV9iaXRtYXA7CiAJZWxzZQogCQlhcm1fc21tdV9vcHMucGdzaXplX2JpdG1hcCB8PSBzbW11 LT5wZ3NpemVfYml0bWFwOworI2VuZGlmCiAKIAkvKiBPdXRwdXQgYWRkcmVzcyBzaXplICovCiAJ c3dpdGNoIChyZWcgJiBJRFI1X09BU19NQVNLIDw8IElEUjVfT0FTX1NISUZUKSB7CkBAIC0yNjQ2 LDEwICsyODExLDEyIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVj dCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCiAJCXNtbXUtPm9hcyA9IDQ4OwogCX0KIAorI2lmIDAg LyogWGVuOiBUaGVyZSBpcyBubyBzdXBwb3J0IGZvciBETUEgbWFzayAqLwogCS8qIFNldCB0aGUg RE1BIG1hc2sgZm9yIG91ciB0YWJsZSB3YWxrZXIgKi8KIAlpZiAoZG1hX3NldF9tYXNrX2FuZF9j b2hlcmVudChzbW11LT5kZXYsIERNQV9CSVRfTUFTSyhzbW11LT5vYXMpKSkKIAkJZGV2X3dhcm4o c21tdS0+ZGV2LAogCQkJICJmYWlsZWQgdG8gc2V0IERNQSBtYXNrIGZvciB0YWJsZSB3YWxrZXJc biIpOworI2VuZGlmCiAKIAlzbW11LT5pYXMgPSBtYXgoc21tdS0+aWFzLCBzbW11LT5vYXMpOwog CkBAIC0yNjgwLDcgKzI4NDcsOCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9hY3BpX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJc3RydWN0IGRldmljZSAqZGV2ID0g c21tdS0+ZGV2OwogCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZTsKIAotCW5vZGUgPSAqKHN0 cnVjdCBhY3BpX2lvcnRfbm9kZSAqKilkZXZfZ2V0X3BsYXRkYXRhKGRldik7CisJLyogWGVuOiBN b2RpZmljYXRpb24gdG8gZ2V0IGlvcnRfbm9kZSAqLworCW5vZGUgPSAoc3RydWN0IGFjcGlfaW9y dF9ub2RlICopZGV2LT5hY3BpX25vZGU7CiAKIAkvKiBSZXRyaWV2ZSBTTU1VdjMgc3BlY2lmaWMg ZGF0YSAqLwogCWlvcnRfc21tdSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilub2RlLT5u b2RlX2RhdGE7CkBAIC0yNzAzLDcgKzI4NzEsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcm1fc21t dV9kZXZpY2VfYWNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogc3RhdGlj IGludCBhcm1fc21tdV9kZXZpY2VfZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diwKIAkJCQkgICAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIHsKLQlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXY7CiAJdTMy IGNlbGxzOwogCWludCByZXQgPSAtRUlOVkFMOwogCkBAIC0yNzE2LDggKzI4ODQsOCBAQCBzdGF0 aWMgaW50IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LAogCiAJcGFyc2VfZHJpdmVyX29wdGlvbnMoc21tdSk7CiAKLQlpZiAob2ZfZG1hX2lzX2Nv aGVyZW50KGRldi0+b2Zfbm9kZSkpCi0JCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRf Q09IRVJFTkNZOworCS8qIFhlbjogU2V0IHRoZSBDT0hFUk5FQ1kgZmVhdHVyZSAqLworCXNtbXUt PmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfQ09IRVJFTkNZOwogCiAJcmV0dXJuIHJldDsKIH0K QEAgLTI3MzQsOSArMjkwMiwxMSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCBpcnEsIHJldDsKIAlzdHJ1Y3Qg cmVzb3VyY2UgKnJlczsKKyNpZiAwIC8qWGVuOiBEbyBub3QgbmVlZCB0byBzZXR1cCBzeXNmcyAq LwogCXJlc291cmNlX3NpemVfdCBpb2FkZHI7CisjZW5kaWYKIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gcGRldjsvKiBYZW46IGRldiBpcyBpZ25vcmVkICovCiAJYm9vbCBieXBhc3M7 CiAKIAlzbW11ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzbW11KSwgR0ZQX0tFUk5FTCk7 CkBAIC0yNzYzLDggKzI5MzMsOSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlkZXZfZXJyKGRldiwgIk1NSU8gcmVnaW9u IHRvbyBzbWFsbCAoJXByKVxuIiwgcmVzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorI2lmIDAg LypYZW46IERvIG5vdCBuZWVkIHRvIHNldHVwIHN5c2ZzICovCiAJaW9hZGRyID0gcmVzLT5zdGFy dDsKLQorI2VuZGlmCiAJc21tdS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJl cyk7CiAJaWYgKElTX0VSUihzbW11LT5iYXNlKSkKIAkJcmV0dXJuIFBUUl9FUlIoc21tdS0+YmFz ZSk7CkBAIC0yODAyLDEzICsyOTczLDE2IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBS ZWNvcmQgb3VyIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZSAqLworI2lmIDAgLyogWGVuOiBTTU1V IGlzIG5vdCB0cmVhdGVkIGEgYSBwbGF0Zm9ybSBkZXZpY2UqLwogCXBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIHNtbXUpOwotCisjZW5kaWYKIAkvKiBSZXNldCB0aGUgZGV2aWNlICovCiAJcmV0 ID0gYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KHNtbXUsIGJ5cGFzcyk7CiAJaWYgKHJldCkKIAkJcmV0 dXJuIHJldDsKIAorLyogWGVuOiBOb3QgY3JlYXRpbmcgYW4gSU9NTVUgZGV2aWNlIGxpc3QgZm9y IFhlbiAqLworI2lmIDAKIAkvKiBBbmQgd2UncmUgdXAuIEdvIGdvIGdvISAqLwogCXJldCA9IGlv bW11X2RldmljZV9zeXNmc19hZGQoJnNtbXUtPmlvbW11LCBkZXYsIE5VTEwsCiAJCQkJICAgICAi c21tdTMuJXBhIiwgJmlvYWRkcik7CkBAIC0yODQ0LDkgKzMwMTgsMTggQEAgc3RhdGljIGludCBh cm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJaWYg KHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQorI2VuZGlmCisJLyoKKwkgKiBYZW46IEtlZXAgYSBs aXN0IG9mIGFsbCBwcm9iZWQgZGV2aWNlcy4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcXVlcnkKKwkg KiB0aGUgc21tdSBkZXZpY2VzIGJhc2VkIG9uIHRoZSBmd25vZGUuCisJICovCisJSU5JVF9MSVNU X0hFQUQoJnNtbXUtPmRldmljZXMpOworCXNwaW5fbG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2Nr KTsKKwlsaXN0X2FkZCgmc21tdS0+ZGV2aWNlcywgJmFybV9zbW11X2RldmljZXMpOworCXNwaW5f dW5sb2NrKCZhcm1fc21tdV9kZXZpY2VzX2xvY2spOwogCXJldHVybiAwOwogfQotCisjaWYgMAog c3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCiB7CiAJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOwpAQCAtMjg2MCw2ICszMDQzLDEwIEBAIHN0YXRpYyB2b2lkIGFybV9zbW11 X2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWFybV9z bW11X2RldmljZV9yZW1vdmUocGRldik7CiB9CisjZW5kaWYKKworI2RlZmluZSBNT0RVTEVfREVW SUNFX1RBQkxFKHR5cGUsIG5hbWUpCisjZGVmaW5lIG9mX2RldmljZV9pZCBkdF9kZXZpY2VfbWF0 Y2gKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hb XSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImFybSxzbW11LXYzIiwgfSwKQEAgLTI4NjcsNiArMzA1 NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFybV9zbW11X29mX21hdGNo W10gPSB7CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXJtX3NtbXVfb2ZfbWF0Y2gpOwog CisjaWYgMAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXJtX3NtbXVfZHJpdmVyID0g ewogCS5kcml2ZXIJPSB7CiAJCS5uYW1lCQk9ICJhcm0tc21tdS12MyIsCkBAIC0yODgzLDMgKzMw NzEsMzE4IEBAIElPTU1VX09GX0RFQ0xBUkUoYXJtX3NtbXV2MywgImFybSxzbW11LXYzIiwgTlVM TCk7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklPTU1VIEFQSSBmb3IgQVJNIGFyY2hpdGVjdGVkIFNN TVV2MyBpbXBsZW1lbnRhdGlvbnMiKTsKIE1PRFVMRV9BVVRIT1IoIldpbGwgRGVhY29uIDx3aWxs LmRlYWNvbkBhcm0uY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworI2VuZGlmCisK Ky8qKioqKiBTdGFydCBvZiBYZW4gc3BlY2lmaWMgY29kZSAqKioqKi8KKworc3RhdGljIGludCBf X211c3RfY2hlY2sgYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKHN0cnVjdCBkb21haW4gKmQpCit7 CisJc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnNtbXVfZG9tYWluID0gZG9tX2lvbW11KGQp LT5hcmNoLnByaXY7CisJc3RydWN0IGlvbW11X2RvbWFpbiAqY2ZnOworCisJc3Bpbl9sb2NrKCZz bW11X2RvbWFpbi0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjZmcsICZzbW11X2RvbWFp bi0+aW9tbXVfZG9tYWlucywgbGlzdCkgeworCQkvKgorCQkgKiBPbmx5IGludmFsaWRhdGUgdGhl IGNvbnRleHQgd2hlbiBTTU1VIGlzIHByZXNlbnQuCisJCSAqIFRoaXMgaXMgYmVjYXVzZSB0aGUg Y29udGV4dCBpbml0aWFsaXphdGlvbiBpcyBkZWxheWVkCisJCSAqIHVudGlsIGEgbWFzdGVyIGhh cyBiZWVuIGFkZGVkLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KCFBQ0NFU1NfT05DRShjZmctPnBy aXYtPnNtbXUpKSkKKwkJCWNvbnRpbnVlOworCQlhcm1fc21tdV90bGJfaW52X2NvbnRleHQoY2Zn LT5wcml2KTsKKwl9CisJc3Bpbl91bmxvY2soJnNtbXVfZG9tYWluLT5sb2NrKTsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBfX211c3RfY2hlY2sgYXJtX3NtbXVfaW90bGJfZmx1c2goc3Ry dWN0IGRvbWFpbiAqZCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGdmbiwKKwkJCQkJICAgICB1 bnNpZ25lZCBpbnQgcGFnZV9jb3VudCkKK3sKKwlyZXR1cm4gYXJtX3NtbXVfaW90bGJfZmx1c2hf YWxsKGQpOworfQorCitzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFpbiAqYXJtX3NtbXVfZ2V0X2Rv bWFpbihzdHJ1Y3QgZG9tYWluICpkLAorCQkJCQkJc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0 cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAq eGVuX2RvbWFpbjsKKwlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11OworCXN0cnVjdCBhcm1f c21tdV9kb21haW4gKnNtbXVfZG9tYWluOworCisJeGVuX2RvbWFpbiA9IGRvbV9pb21tdShkKS0+ YXJjaC5wcml2OworCisJc21tdSA9IGFybV9zbW11X2dldF9ieV9md25vZGUoZGV2LT5pb21tdV9m d3NwZWMtPmlvbW11X2Z3bm9kZSk7CisJaWYgKCFzbW11KQorCQlyZXR1cm4gTlVMTDsKKworCS8q CisJICogTG9vcCB0aHJvdWdoIHRoZSAmeGVuX2RvbWFpbi0+Y29udGV4dHMgdG8gbG9jYXRlIGEg Y29udGV4dAorCSAqIGFzc2lnbmVkIHRvIHRoaXMgU01NVQorCSAqLworCWxpc3RfZm9yX2VhY2hf ZW50cnkoZG9tYWluLCAmeGVuX2RvbWFpbi0+aW9tbXVfZG9tYWlucywgbGlzdCkgeworCQlzbW11 X2RvbWFpbiA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbik7CisJCWlmIChzbW11X2RvbWFpbi0+c21t dSA9PSBzbW11KQorCQkJcmV0dXJuIGRvbWFpbjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwor c3RhdGljIHZvaWQgYXJtX3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oc3RydWN0IGlvbW11X2Rv bWFpbiAqZG9tYWluKQoreworCWxpc3RfZGVsKCZkb21haW4tPmxpc3QpOworCWFybV9zbW11X2Rv bWFpbl9mcmVlKGRvbWFpbik7Cit9CisKK3N0YXRpYyBpbnQgYXJtX3NtbXVfYXNzaWduX2Rldihz dHJ1Y3QgZG9tYWluICpkLCB1OCBkZXZmbiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYs IHUzMiBmbGFnKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFp bjsKKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKKwlzdHJ1Y3QgYXJt X3NtbXVfZG9tYWluICphcm1fc21tdTsKKworCXhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFy Y2gucHJpdjsKKworCWlmICghZGV2LT5hcmNoZGF0YS5pb21tdSkgeworCQlkZXYtPmFyY2hkYXRh LmlvbW11ID0geHphbGxvYyhzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RldmljZSk7CisJCWlmICghZGV2 LT5hcmNoZGF0YS5pb21tdSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IGFybV9z bW11X2FkZF9kZXZpY2UoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3Bpbl9s b2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKKworCS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIGFuIGlv bW11X2RvbWFpbiBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyB4ZW4gZG9tYWluCisJICogdW5kZXIg dGhlIHNhbWUgU01NVQorCSAqLworCWRvbWFpbiA9IGFybV9zbW11X2dldF9kb21haW4oZCwgZGV2 KTsKKwlpZiAoIWRvbWFpbikgeworCisJCWRvbWFpbiA9IGFybV9zbW11X2RvbWFpbl9hbGxvYyhJ T01NVV9ET01BSU5fRE1BKTsKKwkJaWYgKCFkb21haW4pIHsKKwkJCXJldCA9IC1FTk9NRU07CisJ CQlnb3RvIG91dDsKKwkJfQorCisJCWFybV9zbW11ID0gdG9fc21tdV9kb21haW4oZG9tYWluKTsK KwkJYXJtX3NtbXUtPnMyX2NmZy5kb21haW4gPSBkOworCisJCS8qIENoYWluIHRoZSBuZXcgY29u dGV4dCB0byB0aGUgZG9tYWluICovCisJCWxpc3RfYWRkKCZkb21haW4tPmxpc3QsICZ4ZW5fZG9t YWluLT5pb21tdV9kb21haW5zKTsKKworCX0KKworCXJldCA9IGFybV9zbW11X2F0dGFjaF9kZXYo ZG9tYWluLCBkZXYpOworCWlmIChyZXQpIHsKKwkJaWYgKGRvbWFpbi0+cmVmLmNvdW50ZXIgPT0g MCkKKwkJCWFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9tYWluKGRvbWFpbik7CisJfSBlbHNlIHsK KwkJYXRvbWljX2luYygmZG9tYWluLT5yZWYpOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrKCZ4 ZW5fZG9tYWluLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFybV9zbW11 X2RlYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJ c3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluID0gYXJtX3NtbXVfZ2V0X2RvbWFpbihkLCBkZXYp OworCXN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICp4ZW5fZG9tYWluOworCXN0cnVjdCBhcm1f c21tdV9kb21haW4gKmFybV9zbW11ID0gdG9fc21tdV9kb21haW4oZG9tYWluKTsKKworCXhlbl9k b21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKKworCWlmICghYXJtX3NtbXUgfHwgYXJt X3NtbXUtPnMyX2NmZy5kb21haW4gIT0gZCkgeworCQlkZXZfZXJyKGRldiwgIiBub3QgYXR0YWNo ZWQgdG8gZG9tYWluICVkXG4iLCBkLT5kb21haW5faWQpOworCQlyZXR1cm4gLUVTUkNIOworCX0K KworCXNwaW5fbG9jaygmeGVuX2RvbWFpbi0+bG9jayk7CisKKwlhcm1fc21tdV9kZXRhY2hfZGV2 KGRldik7CisJYXRvbWljX2RlYygmZG9tYWluLT5yZWYpOworCisJaWYgKGRvbWFpbi0+cmVmLmNv dW50ZXIgPT0gMCkKKwkJYXJtX3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oZG9tYWluKTsKKwor CXNwaW5fdW5sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKKworCisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBhcm1fc21tdV9yZWFzc2lnbl9kZXYoc3RydWN0IGRvbWFpbiAqcywgc3RydWN0 IGRvbWFpbiAqdCwKKwkJCQkgdTggZGV2Zm4sICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50 IHJldCA9IDA7CisKKwkvKiBEb24ndCBhbGxvdyByZW1hcHBpbmcgb24gb3RoZXIgZG9tYWluIHRo YW4gaHdkb20gKi8KKwlpZiAodCAmJiB0ICE9IGhhcmR3YXJlX2RvbWFpbikKKwkJcmV0dXJuIC1F UEVSTTsKKworCWlmICh0ID09IHMpCisJCXJldHVybiAwOworCisJcmV0ID0gYXJtX3NtbXVfZGVh c3NpZ25fZGV2KHMsIGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh0KSB7 CisJCS8qIE5vIGZsYWdzIGFyZSBkZWZpbmVkIGZvciBBUk0uICovCisJCXJldCA9IGFybV9zbW11 X2Fzc2lnbl9kZXYodCwgZGV2Zm4sIGRldiwgMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0 OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFybV9zbW11X2lvbW11X2RvbWFp bl9pbml0KHN0cnVjdCBkb21haW4gKmQpCit7CisJc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4g Knhlbl9kb21haW47CisKKwl4ZW5fZG9tYWluID0geHphbGxvYyhzdHJ1Y3QgYXJtX3NtbXVfeGVu X2RvbWFpbik7CisJaWYgKCF4ZW5fZG9tYWluKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5f bG9ja19pbml0KCZ4ZW5fZG9tYWluLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmeGVuX2RvbWFp bi0+aW9tbXVfZG9tYWlucyk7CisKKwlkb21faW9tbXUoZCktPmFyY2gucHJpdiA9IHhlbl9kb21h aW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19od2RvbV9pbml0IGFybV9zbW11 X2lvbW11X2h3ZG9tX2luaXQoc3RydWN0IGRvbWFpbiAqZCkKK3sKK30KKworc3RhdGljIHZvaWQg YXJtX3NtbXVfaW9tbXVfZG9tYWluX3RlYXJkb3duKHN0cnVjdCBkb21haW4gKmQpCit7CisJc3Ry dWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gu cHJpdjsKKworCUFTU0VSVChsaXN0X2VtcHR5KCZ4ZW5fZG9tYWluLT5pb21tdV9kb21haW5zKSk7 CisJeGZyZWUoeGVuX2RvbWFpbik7Cit9CisKK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9z bW11X21hcF9wYWdlKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLAorCQkJdW5z aWduZWQgbG9uZyBtZm4sIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlwMm1fdHlwZV90IHQ7CisK KwkvKgorCSAqIEdyYW50IG1hcHBpbmdzIGNhbiBiZSB1c2VkIGZvciBETUEgcmVxdWVzdHMuIFRo ZSBkZXZfYnVzX2FkZHIKKwkgKiByZXR1cm5lZCBieSB0aGUgaHlwZXJjYWxsIGlzIHRoZSBNRk4g KG5vdCB0aGUgSVBBKS4gRm9yIGRldmljZQorCSAqIHByb3RlY3RlZCBieSBhbiBJT01NVSwgWGVu IG5lZWRzIHRvIGFkZCBhIDE6MSBtYXBwaW5nIGluIHRoZSBkb21haW4KKwkgKiBwMm0gdG8gYWxs b3cgRE1BIHJlcXVlc3QgdG8gd29yay4KKwkgKiBUaGlzIGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUg ZG9tYWluIGlzIGRpcmVjdGVkIG1hcHBlZC4gSGVuY2UgdGhpcworCSAqIGZ1bmN0aW9uIHNob3Vs ZCBvbmx5IGJlIHVzZWQgYnkgZ250dGFiIGNvZGUgd2l0aCBnZm4gPT0gbWZuLgorCSAqLworCUJV R19PTighaXNfZG9tYWluX2RpcmVjdF9tYXBwZWQoZCkpOworCUJVR19PTihtZm4gIT0gZ2ZuKTsK KworCS8qIFdlIG9ubHkgc3VwcG9ydCByZWFkYWJsZSBhbmQgd3JpdGFibGUgZmxhZ3MgKi8KKwlp ZiAoIShmbGFncyAmIChJT01NVUZfcmVhZGFibGUgfCBJT01NVUZfd3JpdGFibGUpKSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwl0ID0gKGZsYWdzICYgSU9NTVVGX3dyaXRhYmxlKSA/IHAybV9pb21t dV9tYXBfcncgOiBwMm1faW9tbXVfbWFwX3JvOworCisJLyoKKwkgKiBUaGUgZnVuY3Rpb24gZ3Vl c3RfcGh5c21hcF9hZGRfZW50cnkgcmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFwcGluZworCSAqIGlm IHRoZXJlIGlzIGFscmVhZHkgb25lLi4uCisJICovCisJcmV0dXJuIGd1ZXN0X3BoeXNtYXBfYWRk X2VudHJ5KGQsIF9nZm4oZ2ZuKSwgX21mbihtZm4pLCAwLCB0KTsKK30KKworc3RhdGljIGludCBf X211c3RfY2hlY2sgYXJtX3NtbXVfdW5tYXBfcGFnZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25l ZCBsb25nIGdmbikKK3sKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNl ZCBieSBnbnR0YWIgY29kZSB3aGVuIHRoZSBkb21haW4KKwkgKiBpcyBkaXJlY3QgbWFwcGVkCisJ ICovCisJaWYgKCFpc19kb21haW5fZGlyZWN0X21hcHBlZChkKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlyZXR1cm4gZ3Vlc3RfcGh5c21hcF9yZW1vdmVfcGFnZShkLCBfZ2ZuKGdmbiksIF9tZm4o Z2ZuKSwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X2lv bW11X29wcyA9IHsKKwkuaW5pdCA9IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0LAorCS5od2Rv bV9pbml0ID0gYXJtX3NtbXVfaW9tbXVfaHdkb21faW5pdCwKKwkudGVhcmRvd24gPSBhcm1fc21t dV9pb21tdV9kb21haW5fdGVhcmRvd24sCisJLmlvdGxiX2ZsdXNoID0gYXJtX3NtbXVfaW90bGJf Zmx1c2gsCisJLmlvdGxiX2ZsdXNoX2FsbCA9IGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbCwKKwku YXNzaWduX2RldmljZSA9IGFybV9zbW11X2Fzc2lnbl9kZXYsCisJLnJlYXNzaWduX2RldmljZSA9 IGFybV9zbW11X3JlYXNzaWduX2RldiwKKwkubWFwX3BhZ2UgPSBhcm1fc21tdV9tYXBfcGFnZSwK KwkudW5tYXBfcGFnZSA9IGFybV9zbW11X3VubWFwX3BhZ2UsCit9OworCitzdGF0aWMKK3N0cnVj dCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3RydWN0IGZ3bm9kZV9o YW5kbGUgKmZ3bm9kZSkKK3sKKwlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gTlVMTDsK KworCXNwaW5fbG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHNtbXUsICZhcm1fc21tdV9kZXZpY2VzLCBkZXZpY2VzKSB7CisJCWlmIChzbW11LT5kZXYt PmZ3bm9kZSA9PSBmd25vZGUpCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJmFybV9zbW11 X2RldmljZXNfbG9jayk7CisKKwlyZXR1cm4gc21tdTsKK30KKworc3RhdGljIF9faW5pdCBpbnQg YXJtX3NtbXVfZHRfaW5pdChzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKmRldiwKKwkJCQkgICBjb25z dCB2b2lkICpkYXRhKQoreworCWludCByYzsKKworCS8qCisJICogRXZlbiBpZiB0aGUgZGV2aWNl IGNhbid0IGJlIGluaXRpYWxpemVkLCB3ZSBkb24ndCB3YW50IHRvCisJICogZ2l2ZSB0aGUgU01N VSBkZXZpY2UgdG8gZG9tMC4KKwkgKi8KKwlkdF9kZXZpY2Vfc2V0X3VzZWRfYnkoZGV2LCBET01J RF9YRU4pOworCisJcmMgPSBhcm1fc21tdV9kZXZpY2VfcHJvYmUoZHRfdG9fZGV2KGRldikpOwor CWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaW9tbXVfc2V0X29wcygmYXJtX3NtbXVfaW9tbXVf b3BzKTsKKworCXJldHVybiAwOworfQorCitEVF9ERVZJQ0VfU1RBUlQoc21tdXYzLCAiQVJNIFNN TVUgVjMiLCBERVZJQ0VfSU9NTVUpCisJLmR0X21hdGNoID0gYXJtX3NtbXVfb2ZfbWF0Y2gsCisJ LmluaXQgPSBhcm1fc21tdV9kdF9pbml0LAorRFRfREVWSUNFX0VORAorCisjaWZkZWYgQ09ORklH X0FDUEkKKy8qIFNldCB1cCB0aGUgSU9NTVUgKi8KK3N0YXRpYyBpbnQgX19pbml0IGFybV9zbW11 X2FjcGlfaW5pdChjb25zdCB2b2lkICpkYXRhKQoreworCWludCByYzsKKwlyYyA9IGFybV9zbW11 X2RldmljZV9wcm9iZSgoc3RydWN0IGRldmljZSAqKWRhdGEpOworCisJaWYgKHJjKQorCQlyZXR1 cm4gcmM7CisKKwlpb21tdV9zZXRfb3BzKCZhcm1fc21tdV9pb21tdV9vcHMpOworCXJldHVybiAw OworfQorCitBQ1BJX0RFVklDRV9TVEFSVChhc21tdXYzLCAiQVJNIFNNTVUgVjMiLCBERVZJQ0Vf SU9NTVUpCisJLmNsYXNzX3R5cGUgPSBBQ1BJX0lPUlRfTk9ERV9TTU1VX1YzLAorCS5pbml0ID0g YXJtX3NtbXVfYWNwaV9pbml0LAorQUNQSV9ERVZJQ0VfRU5ECisKKyNlbmRpZgotLSAKUXVhbGNv bW0gRGF0YWNlbnRlciBUZWNobm9sb2dpZXMgYXMgYW4gYWZmaWxpYXRlIG9mIFF1YWxjb21tIFRl Y2hub2xvZ2llcywgSW5jLiBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gaXMgYSBtZW1iZXIg b2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLCBhIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2 ZSBQcm9qZWN0LgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=