From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC v6 04/11] drm/i915/pmu: Expose a PMU interface for perf queries Date: Wed, 13 Sep 2017 09:54:14 +0100 Message-ID: <20170913085414.23488-1-tvrtko.ursulin@linux.intel.com> References: <1505224750.6296.13.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x22d.google.com (mail-wr0-x22d.google.com [IPv6:2a00:1450:400c:c0c::22d]) by gabe.freedesktop.org (Postfix) with ESMTPS id D327F89BD5 for ; Wed, 13 Sep 2017 08:54:22 +0000 (UTC) Received: by mail-wr0-x22d.google.com with SMTP id v109so27264790wrc.1 for ; Wed, 13 Sep 2017 01:54:22 -0700 (PDT) In-Reply-To: <1505224750.6296.13.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org Cc: Peter Zijlstra List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyb206IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpGcm9tOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0 cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgoKVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0 byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCndpdGhvdXQgaGF2aW5n IHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJz CmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwpydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBB cyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQpwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJm YWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5CmFuZCBzZW5kIHRo b3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKVG8gYmUgYWJsZSB0byBkbyBzbywgd2UgbmVlZCB0 byBleHBvcnQgdGhlIHR3byBzeW1ib2xzIGZyb20Ka2VybmVsL2V2ZW50cy9jb3JlLmMgdG8gcmVn aXN0ZXIgYW5kIHVucmVnaXN0ZXIgYSBQTVUgZGV2aWNlLgoKdjEtdjIgKENocmlzIFdpbHNvbik6 Cgp2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOiAoVHZy dGtvIFVyc3VsaW4pCiAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBpZHMuCiAqIENv bXBsZXRlIHVBUEkgZGVmaW5lcy4KICogUmVmYWN0b3Igc29tZSBjb2RlIHRvIGhlbHBlcnMgZm9y IGNsYXJpdHkuCiAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5lcy4KICogRXhwb3NlIGNv dW50ZXJzIGluIHN5c2ZzLgogKiBQYXNzIGluIGZha2UgcmVncyB0byBhdm9pZCBudWxsIHB0ciBk ZXJlZiBpbiBwZXJmIGNvcmUuCiAqIENvbnZlcnQgdG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4KICog VXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZyZXF1 ZW5jeS4KCnY0OiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmVnaXN0ZXIgUE1VIHdpdGggLnRhc2tf Y3R4X25yPXBlcmZfaW52YWxpZF9jb250ZXh0CiAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUgUE1V IHdpdGggdGhlIHNpbmdsZSBDUFUgaW4gdGhlIG1hc2sKICogUHJvcGVybHkgc3VwcG9ydCBwbXUt PnN0b3AoKTogaXQgc2hvdWxkIGNhbGwgcG11LT5yZWFkKCkKICogUHJvcGVybHkgc3VwcG9ydCBw bXUtPmRlbCgpOiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkKICog SW50cm9kdWNlIHJlZmNvdW50aW5nIG9mIGV2ZW50IHN1YnNjcmlwdGlvbnMuCiAqIE1ha2UgcG11 LmJ1c3lfc3RhdHMgYSByZWZjb3VudGVyIHRvIGF2b2lkIGJ1c3kgc3RhdHMgZ29pbmcgYXdheQog ICB3aXRoIHNvbWUgZGVsZXRlZCBldmVudC4KICogRXhwb3NlIGNwdW1hc2sgZm9yIGk5MTUgUE1V IHRvIGF2b2lkIG11bHRpcGxlIGV2ZW50cyBjcmVhdGlvbiBvZgogICB0aGUgc2FtZSB0eXBlIGZv bGxvd2VkIGJ5IGNvdW50ZXIgYWdncmVnYXRpb24gYnkgcGVyZi1zdGF0LgogKiBUcmFjayBDUFVz IGdldHRpbmcgb25saW5lL29mZmxpbmUgdG8gbWlncmF0ZSBwZXJmIGNvbnRleHQuIElmIChsaWtl bHkpCiAgIGNwdW1hc2sgd2lsbCBpbml0aWFsbHkgc2V0IENQVTAsIENPTkZJR19CT09UUEFSQU1f SE9UUExVR19DUFUwIHdpbGwgYmUKICAgbmVlZGVkIHRvIHNlZSBlZmZlY3Qgb2YgQ1BVIHN0YXR1 cyB0cmFja2luZy4KICogRW5kIHJlc3VsdCBpcyB0aGF0IG9ubHkgZ2xvYmFsIGV2ZW50cyBhcmUg c3VwcG9ydGVkIGFuZCBwZXJmIHN0YXQKICAgd29ya3MgY29ycmVjdGx5LgogKiBEZW55IHBlcmYg ZHJpdmVyIGxldmVsIHNhbXBsaW5nIC0gaXQgaXMgcHJvaGliaXRlZCBmb3IgdW5jb3JlIFBNVS4K CnY1OiAoVHZydGtvIFVyc3VsaW4pCgogKiBEb24ndCBoYXJkY29kZSBudW1iZXIgb2YgZW5naW5l IHNhbXBsZXJzLgogKiBSZXdyaXRlIGV2ZW50IHJlZi1jb3VudGluZyBmb3IgY29ycmVjdG5lc3Mg YW5kIHNpbXBsaWNpdHkuCiAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1ZSB3aGVuIHN0YXJ0 aW5nIGFscmVhZHkgZW5hYmxlZCBldmVudHMKICAgdG8gY29ycmVjdGx5IHJlcG9ydCB2YWx1ZXMg dG8gYWxsIGxpc3RlbmVycy4KICogRml4IFJDNiByZXNpZGVuY3kgcmVhZG91dC4KICogQ29tbWVu dHMsIEdQTCBoZWFkZXIuCgp2NjoKICogQWRkIG1pc3NpbmcgZW50cnkgdG8gdjQgY2hhbmdlbG9n LgogKiBGaXggYWNjb3VudGluZyBpbiBDUFUgaG90cGx1ZyBjYXNlIGJ5IGNvcHlpbmcgdGhlIGFw cHJvYWNoIGZyb20KICAgYXJjaC94ODYvZXZlbnRzL2ludGVsL2NzdGF0ZS5jLiAoRG1pdHJ5IFJv Z296aGtpbikKClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29u LmNvLnVrPgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50 ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBEbWl0cnkgUm9nb3poa2luIDxkbWl0cnkudi5yb2dvemhr aW5AaW50ZWwuY29tPgpDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNv bT4KQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogRG1pdHJ5 IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4KQ2M6IFBldGVyIFppamxz dHJhIDxwZXRlcnpAaW5mcmFkZWFkLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAg ICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8 ICA3NiArKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jICAgICAgICAgfCA2OTMg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmggICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdp bmVfY3MuYyAgfCAgMTAgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5j IHwgIDI1ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggfCAgMjUg KysKIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICB8ICA1OCArKysKIDkg ZmlsZXMgY2hhbmdlZCwgODkzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCAxY2I4 MDU5YTNhMTYuLjdiM2EwZWNhNjJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTI2LDYgKzI2 LDcgQEAgaTkxNS15IDo9IGk5MTVfZHJ2Lm8gXAogCiBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICAr PSBpOTE1X2lvYzMyLm8KIGk5MTUtJChDT05GSUdfREVCVUdfRlMpICs9IGk5MTVfZGVidWdmcy5v IGludGVsX3BpcGVfY3JjLm8KK2k5MTUtJChDT05GSUdfUEVSRl9FVkVOVFMpICs9IGk5MTVfcG11 Lm8KIAogIyBHRU0gY29kZQogaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5jCmluZGV4IDVjMTExZWE5NmU4MC4uYjFmOTZlYjFiZTE2IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmMKQEAgLTExOTYsNiArMTE5Niw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJp dmVyX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07CiAKIAlpOTE1X2dlbV9zaHJpbmtlcl9p bml0KGRldl9wcml2KTsKKwlpOTE1X3BtdV9yZWdpc3RlcihkZXZfcHJpdik7CiAKIAkvKgogCSAq IE5vdGlmeSBhIHZhbGlkIHN1cmZhY2UgYWZ0ZXIgbW9kZXNldHRpbmcsCkBAIC0xMjUwLDYgKzEy NTEsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIAlpbnRlbF9vcHJlZ2lvbl91bnJlZ2lzdGVyKGRldl9wcml2 KTsKIAogCWk5MTVfcGVyZl91bnJlZ2lzdGVyKGRldl9wcml2KTsKKwlpOTE1X3BtdV91bnJlZ2lz dGVyKGRldl9wcml2KTsKIAogCWk5MTVfdGVhcmRvd25fc3lzZnMoZGV2X3ByaXYpOwogCWk5MTVf Z3VjX2xvZ191bnJlZ2lzdGVyKGRldl9wcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4 IDQ4ZGFmOTU1MjE2My4uNjI2NDZiOGRmYjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAg LTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgv aW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgv cGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgogI2luY2x1ZGUgPGxpbnV4 L3Jlc2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KQEAgLTIxOTAsNiAr MjE5MSw2OSBAQCBzdHJ1Y3QgaW50ZWxfY2RjbGtfc3RhdGUgewogCXVuc2lnbmVkIGludCBjZGNs aywgdmNvLCByZWY7CiB9OwogCitlbnVtIHsKKwlfX0k5MTVfU0FNUExFX0ZSRVFfQUNUID0gMCwK KwlfX0k5MTVfU0FNUExFX0ZSRVFfUkVRLAorCV9fSTkxNV9OVU1fUE1VX1NBTVBMRVJTCit9Owor CisvKioKKyAqIEhvdyBtYW55IGRpZmZlcmVudCBldmVudHMgd2UgdHJhY2sgaW4gdGhlIGdsb2Jh bCBQTVUgbWFzay4KKyAqCisgKiBJdCBpcyBhbHNvIHVzZWQgdG8ga25vdyB0byBuZWVkZWQgbnVt YmVyIG9mIGV2ZW50IHJlZmVyZW5jZSBjb3VudGVycy4KKyAqLworI2RlZmluZSBJOTE1X1BNVV9N QVNLX0JJVFMgXAorCSgxIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTKSArIChJOTE1X1BNVV9MQVNU ICsgMSAtIF9fSTkxNV9QTVVfT1RIRVIoMCkpCisKK3N0cnVjdCBpOTE1X3BtdSB7CisJLyoqCisJ ICogQG5vZGU6IExpc3Qgbm9kZSBmb3IgQ1BVIGhvdHBsdWcgaGFuZGxpbmcuCisJICovCisJc3Ry dWN0IGhsaXN0X25vZGUgbm9kZTsKKwkvKioKKwkgKiBAYmFzZTogUE1VIGJhc2UuCisJICovCisJ c3RydWN0IHBtdSBiYXNlOworCS8qKgorCSAqIEBsb2NrOiBMb2NrIHByb3RlY3RpbmcgZW5hYmxl IG1hc2sgYW5kIHJlZiBjb3VudCBoYW5kbGluZy4KKwkgKi8KKwlzcGlubG9ja190IGxvY2s7CisJ LyoqCisJICogQHRpbWVyOiBUaW1lciBmb3IgaW50ZXJuYWwgaTkxNSBQTVUgc2FtcGxpbmcuCisJ ICovCisJc3RydWN0IGhydGltZXIgdGltZXI7CisJLyoqCisJICogQGVuYWJsZTogQml0bWFzayBv ZiBhbGwgY3VycmVudGx5IGVuYWJsZWQgZXZlbnRzLgorCSAqCisJICogQml0cyBhcmUgZGVyaXZl ZCBmcm9tIHVBUEkgZXZlbnQgbnVtYmVycyBpbiBhIHdheSB0aGF0IGxvdyAxNiBiaXRzCisJICog Y29ycmVzcG9uZCB0byBlbmdpbmUgZXZlbnQgX3NhbXBsZV8gX3R5cGVfIChJOTE1X1NBTVBMRV9R VUVVRUQgaXMKKwkgKiBiaXQgMCksIGFuZCBoaWdoZXIgYml0cyBjb3JyZXNwb25kIHRvIG90aGVy IGV2ZW50cyAoZm9yIGluc3RhbmNlCisJICogSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSBpcyBi aXQgMTYgZXRjKS4KKwkgKgorCSAqIEluIG90aGVyIHdvcmRzLCBsb3cgMTYgYml0cyBhcmUgbm90 IHBlciBlbmdpbmUgYnV0IHBlciBlbmdpbmUKKwkgKiBzYW1wbGVyIHR5cGUsIHdoaWxlIHRoZSB1 cHBlciBiaXRzIGFyZSBkaXJlY3RseSBtYXBwZWQgdG8gb3RoZXIKKwkgKiBldmVudCB0eXBlcy4K KwkgKi8KKwl1NjQgZW5hYmxlOworCS8qKgorCSAqIEBlbmFibGVfY291bnQ6IFJlZmVyZW5jZSBj b3VudHMgZm9yIHRoZSBlbmFibGVkIGV2ZW50cy4KKwkgKgorCSAqIEFycmF5IGluZGljZXMgYXJl IG1hcHBlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYml0cyBpbiB0aGUgQGVuYWJsZSBmaWVsZAorCSAq IGFuZCB0aGV5IGFyZSB1c2VkIHRvIGNvbnRyb2wgc2FtcGxpbmcgb24vb2ZmIHdoZW4gbXVsdGlw bGUgY2xpZW50cworCSAqIGFyZSB1c2luZyB0aGUgUE1VIEFQSS4KKwkgKi8KKwl1bnNpZ25lZCBp bnQgZW5hYmxlX2NvdW50W0k5MTVfUE1VX01BU0tfQklUU107CisJLyoqCisJICogQHNhbXBsZTog Q3VycmVudCBjb3VudGVyIHZhbHVlIGZvciBpOTE1IGV2ZW50cyB3aGljaCBuZWVkIHNhbXBsaW5n LgorCSAqCisJICogVGhlc2UgY291bnRlcnMgYXJlIHVwZGF0ZWQgZnJvbSB0aGUgaTkxNSBQTVUg c2FtcGxpbmcgdGltZXIuCisJICoKKwkgKiBPbmx5IGdsb2JhbCBjb3VudGVycyBhcmUgaGVsZCBo ZXJlLCB3aGlsZSB0aGUgcGVyLWVuZ2luZSBvbmVzIGFyZSBpbgorCSAqIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MuCisJICovCisJdTY0IHNhbXBsZVtfX0k5MTVfTlVNX1BNVV9TQU1QTEVSU107Cit9 OworCiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0IGRybV9kZXZpY2UgZHJtOwog CkBAIC0yMjM4LDYgKzIzMDIsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0 IHBjaV9kZXYgKmJyaWRnZV9kZXY7CiAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmtlcm5lbF9j b250ZXh0OwogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZVtJOTE1X05VTV9FTkdJTkVT XTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmVfY2xhc3NbTUFYX0VOR0lORV9DTEFT UyArIDFdW01BWF9FTkdJTkVfSU5TVEFOQ0UgKyAxXTsKIAlzdHJ1Y3QgaTkxNV92bWEgKnNlbWFw aG9yZTsKIAogCXN0cnVjdCBkcm1fZG1hX2hhbmRsZSAqc3RhdHVzX3BhZ2VfZG1haDsKQEAgLTI2 OTgsNiArMjc2Myw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAkJaW50CWlycTsKIAl9 IGxwZV9hdWRpbzsKIAorCXN0cnVjdCBpOTE1X3BtdSBwbXU7CisKIAkvKgogCSAqIE5PVEU6IFRo aXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZb3VyIHBh dGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29rIGZvciBhIGJldHRlciBwbGFj ZS4KQEAgLTM5MTgsNiArMzk4NSwxNSBAQCBleHRlcm4gdm9pZCBpOTE1X3BlcmZfZmluaShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9wZXJmX3Jl Z2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBleHRlcm4gdm9pZCBp OTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwog CisvKiBpOTE1X3BtdS5jICovCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCitleHRlcm4gdm9p ZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CitleHRl cm4gdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfdW5y ZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30KKyNlbmRpZgorCiAvKiBp OTE1X3N1c3BlbmQuYyAqLwogZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3BtdS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAyMGJlNTgzM2VlNgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKQEAgLTAsMCAr MSw2OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+ CisKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX3JpbmdidWZmZXIuaCIK KworLyogRnJlcXVlbmN5IGZvciB0aGUgc2FtcGxpbmcgdGltZXIgZm9yIGV2ZW50cyB3aGljaCBu ZWVkIGl0LiAqLworI2RlZmluZSBGUkVRVUVOQ1kgMjAwCisjZGVmaW5lIFBFUklPRCBtYXhfdCh1 NjQsIDEwMDAwLCBOU0VDX1BFUl9TRUMgLyBGUkVRVUVOQ1kpCisKKyNkZWZpbmUgRU5HSU5FX1NB TVBMRV9NQVNLIFwKKwkoQklUKEk5MTVfU0FNUExFX1FVRVVFRCkgfCBcCisJIEJJVChJOTE1X1NB TVBMRV9CVVNZKSB8IFwKKwkgQklUKEk5MTVfU0FNUExFX1dBSVQpIHwgXAorCSBCSVQoSTkxNV9T QU1QTEVfU0VNQSkpCisKKyNkZWZpbmUgRU5HSU5FX1NBTVBMRV9CSVRTICgxIDw8IEk5MTVfUE1V X1NBTVBMRV9CSVRTKQorCitzdGF0aWMgY3B1bWFza190IGk5MTVfcG11X2NwdW1hc2sgPSBDUFVf TUFTS19OT05FOworCitzdGF0aWMgdTggZW5naW5lX2NvbmZpZ19zYW1wbGUodTY0IGNvbmZpZykK K3sKKwlyZXR1cm4gY29uZmlnICYgSTkxNV9QTVVfU0FNUExFX01BU0s7Cit9CisKK3N0YXRpYyB1 OCBlbmdpbmVfZXZlbnRfc2FtcGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1 cm4gZW5naW5lX2NvbmZpZ19zYW1wbGUoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGlj IHU4IGVuZ2luZV9ldmVudF9jbGFzcyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0 dXJuIChldmVudC0+YXR0ci5jb25maWcgPj4gSTkxNV9QTVVfQ0xBU1NfU0hJRlQpICYgMHhmZjsK K30KKworc3RhdGljIHU4IGVuZ2luZV9ldmVudF9pbnN0YW5jZShzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQpCit7CisJcmV0dXJuIChldmVudC0+YXR0ci5jb25maWcgPj4gSTkxNV9QTVVfU0FNUExF X0JJVFMpICYgMHhmZjsKK30KKworc3RhdGljIGJvb2wgaXNfZW5naW5lX2NvbmZpZyh1NjQgY29u ZmlnKQoreworCXJldHVybiBjb25maWcgPCBfX0k5MTVfUE1VX09USEVSKDApOworfQorCitzdGF0 aWMgdW5zaWduZWQgaW50IGNvbmZpZ19lbmFibGVkX2JpdCh1NjQgY29uZmlnKQoreworCWlmIChp c19lbmdpbmVfY29uZmlnKGNvbmZpZykpCisJCXJldHVybiBlbmdpbmVfY29uZmlnX3NhbXBsZShj b25maWcpOworCWVsc2UKKwkJcmV0dXJuIEVOR0lORV9TQU1QTEVfQklUUyArIChjb25maWcgLSBf X0k5MTVfUE1VX09USEVSKDApKTsKK30KKworc3RhdGljIHU2NCBjb25maWdfZW5hYmxlZF9tYXNr KHU2NCBjb25maWcpCit7CisJcmV0dXJuIEJJVF9VTEwoY29uZmlnX2VuYWJsZWRfYml0KGNvbmZp ZykpOworfQorCitzdGF0aWMgYm9vbCBpc19lbmdpbmVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQg KmV2ZW50KQoreworCXJldHVybiBpc19lbmdpbmVfY29uZmlnKGV2ZW50LT5hdHRyLmNvbmZpZyk7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXZlbnRfZW5hYmxlZF9iaXQoc3RydWN0IHBlcmZf ZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBjb25maWdfZW5hYmxlZF9iaXQoZXZlbnQtPmF0dHIu Y29uZmlnKTsKK30KKworc3RhdGljIGJvb2wgZ3JhYl9mb3JjZXdha2Uoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsIGJvb2wgZncpCit7CisJaWYgKCFmdykKKwkJaW50ZWxfdW5jb3JlX2Zv cmNld2FrZV9nZXQoaTkxNSwgRk9SQ0VXQUtFX0FMTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIHZvaWQgZW5naW5lc19zYW1wbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwllbnVtIGludGVsX2Vu Z2luZV9pZCBpZDsKKwlib29sIGZ3ID0gZmFsc2U7CisKKwlpZiAoKGRldl9wcml2LT5wbXUuZW5h YmxlICYgRU5HSU5FX1NBTVBMRV9NQVNLKSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoIWRldl9w cml2LT5ndC5hd2FrZSkKKwkJcmV0dXJuOworCisJaWYgKCFpbnRlbF9ydW50aW1lX3BtX2dldF9p Zl9pbl91c2UoZGV2X3ByaXYpKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5l LCBkZXZfcHJpdiwgaWQpIHsKKwkJdTMyIGVuYWJsZSA9IGVuZ2luZS0+cG11LmVuYWJsZTsKKwor CQlpZiAoaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfZW5naW5lX2dldF9zZXFubyhlbmdpbmUpLAor CQkJCSAgICAgIGludGVsX2VuZ2luZV9sYXN0X3N1Ym1pdChlbmdpbmUpKSkKKwkJCWNvbnRpbnVl OworCisJCWlmIChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfUVVFVUVEKSkKKwkJCWVuZ2luZS0+ cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9RVUVVRURdICs9IFBFUklPRDsKKworCQlpZiAoZW5hYmxl ICYgQklUKEk5MTVfU0FNUExFX0JVU1kpKSB7CisJCQl1MzIgdmFsOworCisJCQlmdyA9IGdyYWJf Zm9yY2V3YWtlKGRldl9wcml2LCBmdyk7CisJCQl2YWwgPSBJOTE1X1JFQURfRlcoUklOR19NSV9N T0RFKGVuZ2luZS0+bW1pb19iYXNlKSk7CisJCQlpZiAoISh2YWwgJiBNT0RFX0lETEUpKQorCQkJ CWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9CVVNZXSArPSBQRVJJT0Q7CisJCX0KKwor CQlpZiAoZW5hYmxlICYgKEJJVChJOTE1X1NBTVBMRV9XQUlUKSB8IEJJVChJOTE1X1NBTVBMRV9T RU1BKSkpIHsKKwkJCXUzMiB2YWw7CisKKwkJCWZ3ID0gZ3JhYl9mb3JjZXdha2UoZGV2X3ByaXYs IGZ3KTsKKwkJCXZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX0NUTChlbmdpbmUtPm1taW9fYmFzZSkp OworCQkJaWYgKChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfV0FJVCkpICYmCisJCQkgICAgKHZh bCAmIFJJTkdfV0FJVCkpCisJCQkJZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX1dBSVRd ICs9IFBFUklPRDsKKwkJCWlmICgoZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX1NFTUEpKSAmJgor CQkJICAgICh2YWwgJiBSSU5HX1dBSVRfU0VNQVBIT1JFKSkKKwkJCQllbmdpbmUtPnBtdS5zYW1w bGVbSTkxNV9TQU1QTEVfU0VNQV0gKz0gUEVSSU9EOworCQl9CisJfQorCisJaWYgKGZ3KQorCQlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7CisJaW50 ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworfQorCitzdGF0aWMgdm9pZCBmcmVxdWVuY3lf c2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoZGV2X3By aXYtPnBtdS5lbmFibGUgJgorCSAgICBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX0FDVFVB TF9GUkVRVUVOQ1kpKSB7CisJCXU2NCB2YWw7CisKKwkJdmFsID0gZGV2X3ByaXYtPnJwcy5jdXJf ZnJlcTsKKwkJaWYgKGRldl9wcml2LT5ndC5hd2FrZSAmJgorCQkgICAgaW50ZWxfcnVudGltZV9w bV9nZXRfaWZfaW5fdXNlKGRldl9wcml2KSkgeworCQkJdmFsID0gaW50ZWxfZ2V0X2NhZ2YoZGV2 X3ByaXYsCisJCQkJCSAgICAgSTkxNV9SRUFEX05PVFJBQ0UoR0VONl9SUFNUQVQxKSk7CisJCQlp bnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7CisJCX0KKwkJdmFsID0gaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsIHZhbCk7CisJCWRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVf RlJFUV9BQ1RdICs9IHZhbCAqIFBFUklPRDsKKwl9CisKKwlpZiAoZGV2X3ByaXYtPnBtdS5lbmFi bGUgJgorCSAgICBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVO Q1kpKSB7CisJCXU2NCB2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgZGV2X3ByaXYtPnJw cy5jdXJfZnJlcSk7CisJCWRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9S RVFdICs9IHZhbCAqIFBFUklPRDsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFy dCBpOTE1X3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihocnRpbWVyLCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSwgcG11LnRpbWVyKTsKKworCWlmIChpOTE1LT5wbXUuZW5hYmxlID09IDApCisJ CXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKworCWVuZ2luZXNfc2FtcGxlKGk5MTUpOworCWZy ZXF1ZW5jeV9zYW1wbGUoaTkxNSk7CisKKwlocnRpbWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5z X3RvX2t0aW1lKFBFUklPRCkpOworCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7Cit9CisKK3N0YXRp YyB1NjQgY291bnRfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sK KwkvKiBvcGVuLWNvZGVkIGtzdGF0X2lycXMoKSAqLworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9 IGlycV90b19kZXNjKGk5MTUtPmRybS5wZGV2LT5pcnEpOworCXU2NCBzdW0gPSAwOworCWludCBj cHU7CisKKwlpZiAoIWRlc2MgfHwgIWRlc2MtPmtzdGF0X2lycXMpCisJCXJldHVybiAwOworCisJ Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJc3VtICs9ICpwZXJfY3B1X3B0cihkZXNjLT5r c3RhdF9pcnFzLCBjcHUpOworCisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9w bXVfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJV0FSTl9PTihl dmVudC0+cGFyZW50KTsKK30KKworc3RhdGljIGludCBlbmdpbmVfZXZlbnRfaW5pdChzdHJ1Y3Qg cGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQor CQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCisJ aWYgKCFpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwgZW5naW5lX2V2ZW50X2NsYXNzKGV2 ZW50KSwKKwkJCQkgICAgICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKSkKKwkJcmV0dXJu IC1FTk9ERVY7CisKKwlzd2l0Y2ggKGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpKSB7CisJY2Fz ZSBJOTE1X1NBTVBMRV9RVUVVRUQ6CisJY2FzZSBJOTE1X1NBTVBMRV9CVVNZOgorCWNhc2UgSTkx NV9TQU1QTEVfV0FJVDoKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1NBTVBMRV9TRU1BOgorCQlpZiAo SU5URUxfR0VOKGk5MTUpIDwgNikKKwkJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBpOTE1X3BtdV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0 eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJaW50IGNwdSwgcmV0OworCisJaWYgKGV2ZW50LT5h dHRyLnR5cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwkvKiB1 bnN1cHBvcnRlZCBtb2RlcyBhbmQgZmlsdGVycyAqLworCWlmIChldmVudC0+YXR0ci5zYW1wbGVf cGVyaW9kKSAvKiBubyBzYW1wbGluZyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChoYXNf YnJhbmNoX3N0YWNrKGV2ZW50KSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGV2ZW50 LT5jcHUgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdSA9IGNwdW1hc2tfYW55X2FuZCgm aTkxNV9wbXVfY3B1bWFzaywKKwkJCSAgICAgIHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayhldmVu dC0+Y3B1KSk7CisJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwor CXJldCA9IDA7CisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJcmV0ID0gZW5naW5l X2V2ZW50X2luaXQoZXZlbnQpOworCX0gZWxzZSBzd2l0Y2ggKGV2ZW50LT5hdHRyLmNvbmZpZykg eworCWNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWToKKwkJaWYgKElTX1ZBTExFWVZJRVco aTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJCXJldCA9IC1FTk9ERVY7IC8qIHJlcXVp cmVzIGEgbXV0ZXggZm9yIHNhbXBsaW5nISAqLworCWNhc2UgSTkxNV9QTVVfUkVRVUVTVEVEX0ZS RVFVRU5DWToKKwljYXNlIEk5MTVfUE1VX0VORVJHWToKKwljYXNlIEk5MTVfUE1VX1JDNl9SRVNJ REVOQ1k6CisJY2FzZSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWToKKwljYXNlIEk5MTVfUE1VX1JD NnBwX1JFU0lERU5DWToKKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCisJCQlyZXQgPSAtRU5P REVWOworCQlicmVhazsKKwl9CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWV2ZW50LT5j cHUgPSBjcHU7CisJaWYgKCFldmVudC0+cGFyZW50KQorCQlldmVudC0+ZGVzdHJveSA9IGk5MTVf cG11X2V2ZW50X2Rlc3Ryb3k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBfX2k5MTVf cG11X2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigq aTkxNSksIHBtdS5iYXNlKTsKKwl1NjQgdmFsID0gMDsKKworCWlmIChpc19lbmdpbmVfZXZlbnQo ZXZlbnQpKSB7CisJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpOworCQlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5naW5lID0gaW50ZWxfZW5naW5l X2xvb2t1cF91c2VyKGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJ CQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOworCisJCWlmIChXQVJOX09OX09O Q0UoIWVuZ2luZSkpIHsKKwkJCS8qIERvIG5vdGhpbmcgKi8KKwkJfSBlbHNlIHsKKwkJCXZhbCA9 IGVuZ2luZS0+cG11LnNhbXBsZVtzYW1wbGVdOworCQl9CisJfSBlbHNlIHN3aXRjaCAoZXZlbnQt PmF0dHIuY29uZmlnKSB7CisJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZOgorCQl2YWwg PSBpOTE1LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdOworCQlicmVhazsKKwlj YXNlIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1k6CisJCXZhbCA9IGk5MTUtPnBtdS5zYW1w bGVbX19JOTE1X1NBTVBMRV9GUkVRX1JFUV07CisJCWJyZWFrOworCWNhc2UgSTkxNV9QTVVfRU5F UkdZOgorCQl2YWwgPSBpbnRlbF9lbmVyZ3lfdUooaTkxNSk7CisJCWJyZWFrOworCWNhc2UgSTkx NV9QTVVfSU5URVJSVVBUUzoKKwkJdmFsID0gY291bnRfaW50ZXJydXB0cyhpOTE1KTsKKwkJYnJl YWs7CisJY2FzZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZOgorCQl2YWwgPSBpbnRlbF9yYzZfcmVz aWRlbmN5X25zKGk5MTUsCisJCQkJCSAgICAgSVNfVkFMTEVZVklFVyhpOTE1KSA/CisJCQkJCSAg ICAgVkxWX0dUX1JFTkRFUl9SQzYgOgorCQkJCQkgICAgIEdFTjZfR1RfR0ZYX1JDNik7CisJCWJy ZWFrOworCWNhc2UgSTkxNV9QTVVfUkM2cF9SRVNJREVOQ1k6CisJCWlmICghSVNfVkFMTEVZVklF VyhpOTE1KSkKKwkJCXZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMoaTkxNSwgR0VONl9HVF9H RlhfUkM2cCk7CisJCWJyZWFrOworCWNhc2UgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZOgorCQlp ZiAoIUlTX1ZBTExFWVZJRVcoaTkxNSkpCisJCQl2YWwgPSBpbnRlbF9yYzZfcmVzaWRlbmN5X25z KGk5MTUsIEdFTjZfR1RfR0ZYX1JDNnBwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHZhbDsK K30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0 IHByZXYsIG5ldzsKKworYWdhaW46CisJcHJldiA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wcmV2X2Nv dW50KTsKKwluZXcgPSBfX2k5MTVfcG11X2V2ZW50X3JlYWQoZXZlbnQpOworCisJaWYgKGxvY2Fs NjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2LCBuZXcpICE9IHByZXYpCisJCWdvdG8g YWdhaW47CisKKwlsb2NhbDY0X2FkZChuZXcgLSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKK30KKwor c3RhdGljIHZvaWQgaTkxNV9wbXVfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+ cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJdW5zaWduZWQgaW50IGJpdCA9IGV2ZW50 X2VuYWJsZWRfYml0KGV2ZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFN0YXJ0IHRoZSBz YW1wbGluZyB0aW1lciB3aGVuIGVuYWJsaW5nIHRoZSBmaXJzdCBldmVudC4KKwkgKi8KKwlpZiAo aTkxNS0+cG11LmVuYWJsZSA9PSAwKQorCQlocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZpOTE1LT5w bXUudGltZXIsCisJCQkJICAgICAgIG5zX3RvX2t0aW1lKFBFUklPRCksIDAsCisJCQkJICAgICAg IEhSVElNRVJfTU9ERV9SRUxfUElOTkVEKTsKKworCS8qCisJICogVXBkYXRlIHRoZSBiaXRtYXNr IG9mIGVuYWJsZWQgZXZlbnRzIGFuZCBpbmNyZW1lbnQKKwkgKiB0aGUgZXZlbnQgcmVmZXJlbmNl IGNvdW50ZXIuCisJICovCisJR0VNX0JVR19PTihiaXQgPj0gSTkxNV9QTVVfTUFTS19CSVRTKTsK KwlHRU1fQlVHX09OKGk5MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSA9PSB+MCk7CisJaTkxNS0+ cG11LmVuYWJsZSB8PSBCSVRfVUxMKGJpdCk7CisJaTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRd Kys7CisKKwkvKgorCSAqIEZvciBwZXItZW5naW5lIGV2ZW50cyB0aGUgYml0bWFzayBhbmQgcmVm ZXJlbmNlIGNvdW50aW5nCisJICogaXMgc3RvcmVkIHBlciBlbmdpbmUuCisJICovCisJaWYgKGlz X2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBs ZShldmVudCk7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCQllbmdpbmUg PSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2Ns YXNzKGV2ZW50KSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisJCUdF TV9CVUdfT04oIWVuZ2luZSk7CisJCWVuZ2luZS0+cG11LmVuYWJsZSB8PSBCSVQoc2FtcGxlKTsK KworCQlHRU1fQlVHX09OKHNhbXBsZSA+PSBJOTE1X1BNVV9TQU1QTEVfQklUUyk7CisJCUdFTV9C VUdfT04oZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0gPT0gfjApOworCQllbmdpbmUt PnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSsrOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIGN1 cnJlbnQgY291bnRlciB2YWx1ZSBzbyB3ZSBjYW4gcmVwb3J0IHRoZSBjb3JyZWN0IGRlbHRhCisJ ICogZm9yIGFsbCBsaXN0ZW5lcnMuIEV2ZW4gd2hlbiB0aGUgZXZlbnQgd2FzIGFscmVhZHkgZW5h YmxlZCBhbmQgaGFzCisJICogYW4gZXhpc3Rpbmcgbm9uLXplcm8gdmFsdWUuCisJICovCisJbG9j YWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBfX2k5MTVfcG11X2V2ZW50X3JlYWQoZXZl bnQpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7 Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29m KGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwl1bnNpZ25lZCBpbnQgYml0 ID0gZXZlbnRfZW5hYmxlZF9iaXQoZXZlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKKworCWlmIChpc19lbmdp bmVfZXZlbnQoZXZlbnQpKSB7CisJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9zYW1wbGUoZXZl bnQpOworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5naW5lID0gaW50 ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFzcyhl dmVudCksCisJCQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOworCQlHRU1fQlVH X09OKCFlbmdpbmUpOworCQlHRU1fQlVHX09OKHNhbXBsZSA+PSBJOTE1X1BNVV9TQU1QTEVfQklU Uyk7CisJCUdFTV9CVUdfT04oZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0gPT0gMCk7 CisJCS8qCisJCSAqIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IGFuZCBjbGVhciB0aGUg ZW5hYmxlZAorCQkgKiBiaXRtYXNrIHdoZW4gdGhlIGxhc3QgbGlzdGVuZXIgb24gYW4gZXZlbnQg Z29lcyBhd2F5LgorCQkgKi8KKwkJaWYgKC0tZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBs ZV0gPT0gMCkKKwkJCWVuZ2luZS0+cG11LmVuYWJsZSAmPSB+QklUKHNhbXBsZSk7CisJfQorCisJ R0VNX0JVR19PTihiaXQgPj0gSTkxNV9QTVVfTUFTS19CSVRTKTsKKwlHRU1fQlVHX09OKGk5MTUt PnBtdS5lbmFibGVfY291bnRbYml0XSA9PSAwKTsKKwkvKgorCSAqIERlY3JlbWVudCB0aGUgcmVm ZXJlbmNlIGNvdW50IGFuZCBjbGVhciB0aGUgZW5hYmxlZAorCSAqIGJpdG1hc2sgd2hlbiB0aGUg bGFzdCBsaXN0ZW5lciBvbiBhbiBldmVudCBnb2VzIGF3YXkuCisJICovCisJaWYgKC0taTkxNS0+ cG11LmVuYWJsZV9jb3VudFtiaXRdID09IDApCisJCWk5MTUtPnBtdS5lbmFibGUgJj0gfkJJVF9V TEwoYml0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFn cyk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3N0YXJ0KHN0cnVjdCBwZXJmX2V2 ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWk5MTVfcG11X2VuYWJsZShldmVudCk7CisJZXZl bnQtPmh3LnN0YXRlID0gMDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RvcChz dHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBQRVJG X0VGX1VQREFURSkKKwkJaTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCk7CisJaTkxNV9wbXVfZGlz YWJsZShldmVudCk7CisJZXZlbnQtPmh3LnN0YXRlID0gUEVSRl9IRVNfU1RPUFBFRDsKK30KKwor c3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9hZGQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBp bnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgUEVSRl9FRl9TVEFSVCkKKwkJaTkxNV9wbXVfZXZl bnRfc3RhcnQoZXZlbnQsIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBp OTE1X3BtdV9ldmVudF9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7 CisJaTkxNV9wbXVfZXZlbnRfc3RvcChldmVudCwgUEVSRl9FRl9VUERBVEUpOworfQorCitzdGF0 aWMgaW50IGk5MTVfcG11X2V2ZW50X2V2ZW50X2lkeChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQp Cit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGk5MTVfcG11X2Zvcm1hdF9zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0 dHIsIGNoYXIgKmJ1ZikKK3sKKyAgICAgICAgc3RydWN0IGRldl9leHRfYXR0cmlidXRlICplYXR0 cjsKKworICAgICAgICBlYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZGV2X2V4dF9h dHRyaWJ1dGUsIGF0dHIpOworICAgICAgICByZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgKGNo YXIgKikgZWF0dHItPnZhcik7Cit9CisKKyNkZWZpbmUgSTkxNV9QTVVfRk9STUFUX0FUVFIoX25h bWUsIF9jb25maWcpICAgICAgICAgICBcCisgICAgICAgICgmKChzdHJ1Y3QgZGV2X2V4dF9hdHRy aWJ1dGVbXSkgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB7IC5hdHRyID0gX19B VFRSKF9uYW1lLCBTX0lSVUdPLCBpOTE1X3BtdV9mb3JtYXRfc2hvdywgTlVMTCksIFwKKyAgICAg ICAgICAgICAgICAgIC52YXIgPSAodm9pZCAqKSBfY29uZmlnLCB9ICAgICAgICAgICAgXAorICAg ICAgICB9KVswXS5hdHRyLmF0dHIpCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X3Bt dV9mb3JtYXRfYXR0cnNbXSA9IHsKKyAgICAgICAgSTkxNV9QTVVfRk9STUFUX0FUVFIoaTkxNV9l dmVudGlkLCAiY29uZmlnOjAtNDIiKSwKKyAgICAgICAgTlVMTCwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGk5MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwID0gewor ICAgICAgICAubmFtZSA9ICJmb3JtYXQiLAorICAgICAgICAuYXR0cnMgPSBpOTE1X3BtdV9mb3Jt YXRfYXR0cnMsCit9OworCitzdGF0aWMgc3NpemVfdCBpOTE1X3BtdV9ldmVudF9zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hh ciAqYnVmKQoreworICAgICAgICBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUgKmVhdHRyOworCisg ICAgICAgIGVhdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0 ZSwgYXR0cik7CisgICAgICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgImNvbmZpZz0weCVseFxuIiwg KHVuc2lnbmVkIGxvbmcpIGVhdHRyLT52YXIpOworfQorCisjZGVmaW5lIEk5MTVfUE1VX0VWRU5U X0FUVFIoX25hbWUsIF9jb25maWcpICAgICAgICAgICAgXAorICAgICAgICAoJigoc3RydWN0IGRl dl9leHRfYXR0cmlidXRlW10pIHsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgeyAu YXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVHTywgaTkxNV9wbXVfZXZlbnRfc2hvdywgTlVMTCks IFwKKyAgICAgICAgICAgICAgICAgIC52YXIgPSAodm9pZCAqKSBfY29uZmlnLCB9ICAgICAgICAg ICAgXAorICAgICAgICAgfSlbMF0uYXR0ci5hdHRyKQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0 ZSAqaTkxNV9wbXVfZXZlbnRzX2F0dHJzW10gPSB7CisJSTkxNV9QTVVfRVZFTlRfQVRUUihyY3Mw LXF1ZXVlZCwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNT X1JFTkRFUiwgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIocmNzMC1idXN5LAorCQkJICAgIEk5 MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCkpLAorCUk5MTVf UE1VX0VWRU5UX0FUVFIocmNzMC13YWl0LAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9XQUlUKEk5 MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIocmNzMC1z ZW1hLAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9TRU1BKEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRF UiwgMCkpLAorCisJSTkxNV9QTVVfRVZFTlRfQVRUUihiY3MwLXF1ZXVlZCwKKwkJCSAgICBJOTE1 X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApKSwKKwlJOTE1X1BN VV9FVkVOVF9BVFRSKGJjczAtYnVzeSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfQlVTWShJOTE1 X0VOR0lORV9DTEFTU19DT1BZLCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUihiY3MwLXdhaXQs CisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1dBSVQoSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCkp LAorCUk5MTVfUE1VX0VWRU5UX0FUVFIoYmNzMC1zZW1hLAorCQkJICAgIEk5MTVfUE1VX0VOR0lO RV9TRU1BKEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApKSwKKworCUk5MTVfUE1VX0VWRU5UX0FU VFIodmNzMC1xdWV1ZWQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChJOTE1X0VOR0lO RV9DTEFTU19WSURFTywgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMC1idXN5LAorCQkJ ICAgIEk5MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAwKSksCisJ STkxNV9QTVVfRVZFTlRfQVRUUih2Y3MwLXdhaXQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1dB SVQoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDApKSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZj czAtc2VtYSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfU0VNQShJOTE1X0VOR0lORV9DTEFTU19W SURFTywgMCkpLAorCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3MxLXF1ZXVlZCwKKwkJCSAgICBJ OTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAxKSksCisJSTkx NV9QTVVfRVZFTlRfQVRUUih2Y3MxLWJ1c3ksCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX0JVU1ko STkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEpKSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZjczEt d2FpdCwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfV0FJVChJOTE1X0VOR0lORV9DTEFTU19WSURF TywgMSkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMS1zZW1hLAorCQkJICAgIEk5MTVfUE1V X0VOR0lORV9TRU1BKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAxKSksCisKKwlJOTE1X1BNVV9F VkVOVF9BVFRSKHZlY3MwLXF1ZXVlZCwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5 MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRS KHZlY3MwLWJ1c3ksCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX0JVU1koSTkxNV9FTkdJTkVfQ0xB U1NfVklERU9fRU5IQU5DRSwgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmVjczAtd2FpdCwK KwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfV0FJVChJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhB TkNFLCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2ZWNzMC1zZW1hLAorCQkJICAgIEk5MTVf UE1VX0VOR0lORV9TRU1BKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwKKwor ICAgICAgICBJOTE1X1BNVV9FVkVOVF9BVFRSKGFjdHVhbC1mcmVxdWVuY3ksCSBJOTE1X1BNVV9B Q1RVQUxfRlJFUVVFTkNZKSwKKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRUUihyZXF1ZXN0ZWQt ZnJlcXVlbmN5LCBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZKSwKKyAgICAgICAgSTkxNV9Q TVVfRVZFTlRfQVRUUihlbmVyZ3ksCQkgSTkxNV9QTVVfRU5FUkdZKSwKKyAgICAgICAgSTkxNV9Q TVVfRVZFTlRfQVRUUihpbnRlcnJ1cHRzLAkJIEk5MTVfUE1VX0lOVEVSUlVQVFMpLAorICAgICAg ICBJOTE1X1BNVV9FVkVOVF9BVFRSKHJjNi1yZXNpZGVuY3ksCSBJOTE1X1BNVV9SQzZfUkVTSURF TkNZKSwKKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRUUihyYzZwLXJlc2lkZW5jeSwJIEk5MTVf UE1VX1JDNnBfUkVTSURFTkNZKSwKKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRUUihyYzZwcC1y ZXNpZGVuY3ksCSBJOTE1X1BNVV9SQzZwcF9SRVNJREVOQ1kpLAorCisgICAgICAgIE5VTEwsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9ldmVudHNf YXR0cl9ncm91cCA9IHsKKyAgICAgICAgLm5hbWUgPSAiZXZlbnRzIiwKKyAgICAgICAgLmF0dHJz ID0gaTkxNV9wbXVfZXZlbnRzX2F0dHJzLAorfTsKKworc3RhdGljIHNzaXplX3QKK2k5MTVfcG11 X2dldF9hdHRyX2NwdW1hc2soc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZGV2aWNl X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXJldHVybiBjcHVtYXBfcHJp bnRfdG9fcGFnZWJ1Zih0cnVlLCBidWYsICZpOTE1X3BtdV9jcHVtYXNrKTsKK30KKworc3RhdGlj IERFVklDRV9BVFRSKGNwdW1hc2ssIFNfSVJVR08sIGk5MTVfcG11X2dldF9hdHRyX2NwdW1hc2ss IE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9jcHVtYXNrX2F0dHJzW10g PSB7CisJJmRldl9hdHRyX2NwdW1hc2suYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVj dCBhdHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwID0geworCS5hdHRy cyA9IGk5MTVfY3B1bWFza19hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmli dXRlX2dyb3VwICppOTE1X3BtdV9hdHRyX2dyb3Vwc1tdID0geworICAgICAgICAmaTkxNV9wbXVf Zm9ybWF0X2F0dHJfZ3JvdXAsCisgICAgICAgICZpOTE1X3BtdV9ldmVudHNfYXR0cl9ncm91cCwK KwkmaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwLAorICAgICAgICBOVUxMCit9OworCitzdGF0 aWMgaW50IGk5MTVfcG11X2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0 X25vZGUgKm5vZGUpCit7CisJdW5zaWduZWQgaW50IHRhcmdldDsKKworCXRhcmdldCA9IGNwdW1h c2tfYW55X2FuZCgmaTkxNV9wbXVfY3B1bWFzaywgJmk5MTVfcG11X2NwdW1hc2spOworCS8qIFNl bGVjdCB0aGUgZmlyc3Qgb25saW5lIENQVSBhcyBhIGRlc2lnbmF0ZWQgcmVhZGVyLiAqLworCWlm ICh0YXJnZXQgPj0gbnJfY3B1X2lkcykKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgJmk5MTVfcG11 X2NwdW1hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfY3B1X29m ZmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCit7CisJc3Ry dWN0IGk5MTVfcG11ICpwbXUgPSBobGlzdF9lbnRyeV9zYWZlKG5vZGUsIHR5cGVvZigqcG11KSwg bm9kZSk7CisJdW5zaWduZWQgaW50IHRhcmdldDsKKworCWlmIChjcHVtYXNrX3Rlc3RfYW5kX2Ns ZWFyX2NwdShjcHUsICZpOTE1X3BtdV9jcHVtYXNrKSkgeworCQl0YXJnZXQgPSBjcHVtYXNrX2Fu eV9idXQodG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKGNwdSksIGNwdSk7CisJCS8qIE1pZ3JhdGUg ZXZlbnRzIGlmIHRoZXJlIGlzIGEgdmFsaWQgdGFyZ2V0ICovCisJCWlmICh0YXJnZXQgPCBucl9j cHVfaWRzKSB7CisJCQljcHVtYXNrX3NldF9jcHUodGFyZ2V0LCAmaTkxNV9wbXVfY3B1bWFzayk7 CisJCQlwZXJmX3BtdV9taWdyYXRlX2NvbnRleHQoJnBtdS0+YmFzZSwgY3B1LCB0YXJnZXQpOwor CQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJaW50IHJldCA9IEVOT1RTVVBQOworCisJaWYg KElOVEVMX0dFTihpOTE1KSA8PSAyKQorCQlnb3RvIGVycjsKKworCXJldCA9IGNwdWhwX3NldHVw X3N0YXRlX211bHRpKENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9PTkxJTkUsCisJCQkJICAgICAg InBlcmYveDg2L2ludGVsL2k5MTU6b25saW5lIiwKKwkJCQkgICAgICBpOTE1X3BtdV9jcHVfb25s aW5lLAorCQkJICAgICAgICAgICAgICBpOTE1X3BtdV9jcHVfb2ZmbGluZSk7CisJaWYgKHJldCkK KwkJZ290byBlcnI7CisKKwlyZXQgPSBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoQ1BVSFBfQVBf UEVSRl9YODZfVU5DT1JFX09OTElORSwKKwkJCQkgICAgICAgJmk5MTUtPnBtdS5ub2RlKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycjsKKworCWk5MTUtPnBtdS5iYXNlLmF0dHJfZ3JvdXBzCT0gaTkx NV9wbXVfYXR0cl9ncm91cHM7CisJaTkxNS0+cG11LmJhc2UudGFza19jdHhfbnIJPSBwZXJmX2lu dmFsaWRfY29udGV4dDsKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0CT0gaTkxNV9wbXVfZXZl bnRfaW5pdDsKKwlpOTE1LT5wbXUuYmFzZS5hZGQJCT0gaTkxNV9wbXVfZXZlbnRfYWRkOworCWk5 MTUtPnBtdS5iYXNlLmRlbAkJPSBpOTE1X3BtdV9ldmVudF9kZWw7CisJaTkxNS0+cG11LmJhc2Uu c3RhcnQJCT0gaTkxNV9wbXVfZXZlbnRfc3RhcnQ7CisJaTkxNS0+cG11LmJhc2Uuc3RvcAkJPSBp OTE1X3BtdV9ldmVudF9zdG9wOworCWk5MTUtPnBtdS5iYXNlLnJlYWQJCT0gaTkxNV9wbXVfZXZl bnRfcmVhZDsKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pZHgJPSBpOTE1X3BtdV9ldmVudF9ldmVu dF9pZHg7CisKKwlzcGluX2xvY2tfaW5pdCgmaTkxNS0+cG11LmxvY2spOworCWhydGltZXJfaW5p dCgmaTkxNS0+cG11LnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwor CWk5MTUtPnBtdS50aW1lci5mdW5jdGlvbiA9IGk5MTVfc2FtcGxlOworCWk5MTUtPnBtdS5lbmFi bGUgPSAwOworCisJaWYgKHBlcmZfcG11X3JlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSwgImk5MTUi LCAtMSkpCisJCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQgPSBOVUxMOworCitlcnI6CisJRFJN X0lORk8oIkZhaWxlZCB0byByZWdpc3RlciBQTVUgKGVycj0lZClcbiIsIHJldCk7Cit9CisKK3Zv aWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sK KwlpZiAoIWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQpCisJCXJldHVybjsKKworCWk5MTUtPnBt dS5lbmFibGUgPSAwOworCisJcGVyZl9wbXVfdW5yZWdpc3RlcigmaTkxNS0+cG11LmJhc2UpOwor CWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQgPSBOVUxMOworCisJaHJ0aW1lcl9jYW5jZWwoJmk5 MTUtPnBtdS50aW1lcik7CisKKwljcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfQVBf UEVSRl9YODZfVU5DT1JFX09OTElORSwKKwkJCQkgICAgJmk5MTUtPnBtdS5ub2RlKTsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDBiMDMyNjBhMzk2Ny4uOGMzNjJlMDQ1MWMxIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTE4Niw2ICsxODYsOSBAQCBzdGF0aWMgaW5saW5lIGJv b2wgaTkxNV9tbWlvX3JlZ192YWxpZChpOTE1X3JlZ190IHJlZykKICNkZWZpbmUgVklERU9fRU5I QU5DRU1FTlRfQ0xBU1MJMgogI2RlZmluZSBDT1BZX0VOR0lORV9DTEFTUwkzCiAjZGVmaW5lIE9U SEVSX0NMQVNTCQk0CisjZGVmaW5lIE1BWF9FTkdJTkVfQ0xBU1MJNAorCisjZGVmaW5lIE1BWF9F TkdJTkVfSU5TVEFOQ0UgICAgMQogCiAvKiBQQ0kgY29uZmlnIHNwYWNlICovCiAKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKaW5kZXggM2FlODlhOWQ2MjQxLi5kYmM3YWJkNjVm MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCkBAIC0xOTgsNiArMTk4 LDE1IEBAIGludGVsX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCiAJR0VNX0JVR19PTihpbmZvLT5jbGFzcyA+PSBBUlJBWV9TSVpFKGludGVsX2VuZ2luZV9j bGFzc2VzKSk7CiAJY2xhc3NfaW5mbyA9ICZpbnRlbF9lbmdpbmVfY2xhc3Nlc1tpbmZvLT5jbGFz c107CiAKKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+Y2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+aW5zdGFuY2UgPiBN QVhfRU5HSU5FX0lOU1RBTkNFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoR0VNX1dBUk5f T04oZGV2X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11baW5mby0+aW5zdGFuY2VdKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKIAlHRU1fQlVHX09OKGRldl9wcml2LT5lbmdpbmVbaWRdKTsK IAllbmdpbmUgPSBremFsbG9jKHNpemVvZigqZW5naW5lKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFl bmdpbmUpCkBAIC0yMjUsNiArMjM0LDcgQEAgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAogCUFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoJmVu Z2luZS0+Y29udGV4dF9zdGF0dXNfbm90aWZpZXIpOwogCisJZGV2X3ByaXYtPmVuZ2luZV9jbGFz c1tpbmZvLT5jbGFzc11baW5mby0+aW5zdGFuY2VdID0gZW5naW5lOwogCWRldl9wcml2LT5lbmdp bmVbaWRdID0gZW5naW5lOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5jCmluZGV4IDI2ODM0MjQzM2E4ZS4uN2RiNGM1NzJlZjc2IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCkBAIC0yMjgzLDMgKzIyODMsMjggQEAgaW50 IGludGVsX2luaXRfdmVib3hfcmluZ19idWZmZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQogCiAJcmV0dXJuIGludGVsX2luaXRfcmluZ19idWZmZXIoZW5naW5lKTsKIH0KKworc3Rh dGljIHU4IHVzZXJfY2xhc3NfbWFwW0k5MTVfRU5HSU5FX0NMQVNTX01BWF0gPSB7CisJW0k5MTVf RU5HSU5FX0NMQVNTX09USEVSXSA9IE9USEVSX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19S RU5ERVJdID0gUkVOREVSX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19DT1BZXSA9IENPUFlf RU5HSU5FX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19WSURFT10gPSBWSURFT19ERUNPREVf Q0xBU1MsCisJW0k5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0VdID0gVklERU9fRU5IQU5D RU1FTlRfQ0xBU1MsCit9OworCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVsX2VuZ2lu ZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xhc3MsIHU4 IGluc3RhbmNlKQoreworCWlmIChjbGFzcyA+PSBBUlJBWV9TSVpFKHVzZXJfY2xhc3NfbWFwKSkK KwkJcmV0dXJuIE5VTEw7CisKKwljbGFzcyA9IHVzZXJfY2xhc3NfbWFwW2NsYXNzXTsKKworCWlm IChXQVJOX09OX09OQ0UoY2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKSkKKwkJcmV0dXJuIE5VTEw7 CisKKwlpZiAoaW5zdGFuY2UgPiBNQVhfRU5HSU5FX0lOU1RBTkNFKQorCQlyZXR1cm4gTlVMTDsK KworCXJldHVybiBpOTE1LT5lbmdpbmVfY2xhc3NbY2xhc3NdW2luc3RhbmNlXTsKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCA3OWMwMDIxZjM3MDAuLmNmMDk1 YjkzODZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaApAQCAtMjQ1 LDYgKzI0NSwyOCBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKIAkJSTkxNV9TRUxGVEVTVF9E RUNMQVJFKGJvb2wgbW9jayA6IDEpOwogCX0gYnJlYWRjcnVtYnM7CiAKKwlzdHJ1Y3QgeworCQkv KioKKwkJICogQGVuYWJsZTogQml0bWFzayBvZiBlbmFibGUgc2FtcGxlIGV2ZW50cyBvbiB0aGlz IGVuZ2luZS4KKwkJICoKKwkJICogQml0cyBjb3JyZXNwb25kIHRvIHNhbXBsZSBldmVudCB0eXBl cywgZm9yIGluc3RhbmNlCisJCSAqIEk5MTVfU0FNUExFX1FVRVVFRCBpcyBiaXQgMCBldGMuCisJ CSAqLworCQl1MzIgZW5hYmxlOworCQkvKioKKwkJICogQGVuYWJsZV9jb3VudDogUmVmZXJlbmNl IGNvdW50IGZvciB0aGUgZW5hYmxlZCBzYW1wbGVycy4KKwkJICoKKwkJICogSW5kZXggbnVtYmVy IGNvcnJlc3BvbmRzIHRvIHRoZSBiaXQgbnVtYmVyIGZyb20gQGVuYWJsZS4KKwkJICovCisJCXVu c2lnbmVkIGludCBlbmFibGVfY291bnRbSTkxNV9QTVVfU0FNUExFX0JJVFNdOworCQkvKioKKwkJ ICogQHNhbXBsZTogQ291bnRlciB2YWx1ZSBmb3Igc2FtcGxpbmcgZXZlbnRzLgorCQkgKgorCQkg KiBPdXIgaW50ZXJuYWwgdGltZXIgc3RvcmVzIHRoZSBjdXJyZW50IGNvdW50ZXIgaW4gdGhpcyBm aWVsZC4KKwkJICovCisJCXU2NCBzYW1wbGVbSTkxNV9FTkdJTkVfU0FNUExFX01BWF07CisJfSBw bXU7CisKIAkvKgogCSAqIEEgcG9vbCBvZiBvYmplY3RzIHRvIHVzZSBhcyBzaGFkb3cgY29waWVz IG9mIGNsaWVudCBiYXRjaCBidWZmZXJzCiAJICogd2hlbiB0aGUgY29tbWFuZCBwYXJzZXIgaXMg ZW5hYmxlZC4gUHJldmVudHMgdGhlIGNsaWVudCBmcm9tCkBAIC03MzcsNCArNzU5LDcgQEAgdm9p ZCBpbnRlbF9lbmdpbmVzX3Jlc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSk7CiAKIGJvb2wgaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoK K2ludGVsX2VuZ2luZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwg dTggY2xhc3MsIHU4IGluc3RhbmNlKTsKKwogI2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVSX0hf ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3Vh cGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggZDhkMTBkOTMyNzU5Li42ZGMwZDZmZDRlNGMgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJt L2k5MTVfZHJtLmgKQEAgLTg2LDYgKzg2LDY0IEBAIGVudW0gaTkxNV9tb2NzX3RhYmxlX2luZGV4 IHsKIAlJOTE1X01PQ1NfQ0FDSEVELAogfTsKIAorZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2Ns YXNzIHsKKwlJOTE1X0VOR0lORV9DTEFTU19PVEhFUiA9IDAsCisJSTkxNV9FTkdJTkVfQ0xBU1Nf UkVOREVSID0gMSwKKwlJOTE1X0VOR0lORV9DTEFTU19DT1BZID0gMiwKKwlJOTE1X0VOR0lORV9D TEFTU19WSURFTyA9IDMsCisJSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRSA9IDQsCisJ STkxNV9FTkdJTkVfQ0xBU1NfTUFYIC8qIG5vbi1BQkkgKi8KK307CisKKy8qKgorICogRE9DOiBw ZXJmX2V2ZW50cyBleHBvc2VkIGJ5IGk5MTUgdGhyb3VnaCAvc3lzL2J1cy9ldmVudF9zb3VyY2Vz L2RyaXZlcnMvaTkxNQorICoKKyAqLworCitlbnVtIGRybV9pOTE1X3BtdV9lbmdpbmVfc2FtcGxl IHsKKwlJOTE1X1NBTVBMRV9RVUVVRUQgPSAwLAorCUk5MTVfU0FNUExFX0JVU1kgPSAxLAorCUk5 MTVfU0FNUExFX1dBSVQgPSAyLAorCUk5MTVfU0FNUExFX1NFTUEgPSAzLAorCUk5MTVfRU5HSU5F X1NBTVBMRV9NQVggLyogbm9uLUFCSSAqLworfTsKKworI2RlZmluZSBJOTE1X1BNVV9TQU1QTEVf QklUUyAoNCkKKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX01BU0sgKDB4ZikKKyNkZWZpbmUgSTkx NV9QTVVfU0FNUExFX0lOU1RBTkNFX0JJVFMgKDgpCisjZGVmaW5lIEk5MTVfUE1VX0NMQVNTX1NI SUZUIFwKKwkoSTkxNV9QTVVfU0FNUExFX0JJVFMgKyBJOTE1X1BNVV9TQU1QTEVfSU5TVEFOQ0Vf QklUUykKKworI2RlZmluZSBfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIHNhbXBs ZSkgXAorCSgoY2xhc3MpIDw8IEk5MTVfUE1VX0NMQVNTX1NISUZUIHwgXAorCShpbnN0YW5jZSkg PDwgSTkxNV9QTVVfU0FNUExFX0JJVFMgfCBcCisJKHNhbXBsZSkpCisKKyNkZWZpbmUgSTkxNV9Q TVVfRU5HSU5FX1FVRVVFRChjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VOR0lORShj bGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX1FVRVVFRCkKKworI2RlZmluZSBJOTE1X1BNVV9F TkdJTkVfQlVTWShjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywg aW5zdGFuY2UsIEk5MTVfU0FNUExFX0JVU1kpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX1dB SVQoY2xhc3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNl LCBJOTE1X1NBTVBMRV9XQUlUKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9TRU1BKGNsYXNz LCBpbnN0YW5jZSkgXAorCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9T QU1QTEVfU0VNQSkKKworI2RlZmluZSBfX0k5MTVfUE1VX09USEVSKHgpIChfX0k5MTVfUE1VX0VO R0lORSgweGZmLCAweGZmLCAweGYpICsgMSArICh4KSkKKworI2RlZmluZSBJOTE1X1BNVV9BQ1RV QUxfRlJFUVVFTkNZIAlfX0k5MTVfUE1VX09USEVSKDApCisjZGVmaW5lIEk5MTVfUE1VX1JFUVVF U1RFRF9GUkVRVUVOQ1kJX19JOTE1X1BNVV9PVEhFUigxKQorI2RlZmluZSBJOTE1X1BNVV9FTkVS R1kJCQlfX0k5MTVfUE1VX09USEVSKDIpCisjZGVmaW5lIEk5MTVfUE1VX0lOVEVSUlVQVFMJCV9f STkxNV9QTVVfT1RIRVIoMykKKworI2RlZmluZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZCQlfX0k5 MTVfUE1VX09USEVSKDQpCisjZGVmaW5lIEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZCQlfX0k5MTVf UE1VX09USEVSKDUpCisjZGVmaW5lIEk5MTVfUE1VX1JDNnBwX1JFU0lERU5DWQlfX0k5MTVfUE1V X09USEVSKDYpCisKKyNkZWZpbmUgSTkxNV9QTVVfTEFTVCBJOTE1X1BNVV9SQzZwcF9SRVNJREVO Q1kKKwogLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDE2aywgYW5kIHRoZXJlIGFyZSBh dCBtb3N0IDI1NSBvZiB0aGVtLgogICovCiAjZGVmaW5lIEk5MTVfTlJfVEVYX1JFR0lPTlMgMjU1 CS8qIHRhYmxlIHNpemUgMmsgLSBtYXhpbXVtIGR1ZSB0byB1c2UKLS0gCjIuOS41CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK