From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC 04/10] drm/i915: Expose a PMU interface for perf queries Date: Wed, 2 Aug 2017 13:32:44 +0100 Message-ID: <20170802123249.14194-5-tvrtko.ursulin@linux.intel.com> References: <20170802123249.14194-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id BD5FC6F0F0 for ; Wed, 2 Aug 2017 12:32:59 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id q189so7026268wmd.0 for ; Wed, 02 Aug 2017 05:32:59 -0700 (PDT) In-Reply-To: <20170802123249.14194-1-tvrtko.ursulin@linux.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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpUaGUgZmlyc3Qg Z29hbCBpcyB0byBiZSBhYmxlIHRvIG1lYXN1cmUgR1BVIChhbmQgaW52aWR1YWwgcmluZykgYnVz eW5lc3MKd2l0aG91dCBoYXZpbmcgdG8gcG9sbCByZWdpc3RlcnMgZnJvbSB1c2Vyc3BhY2UuIChX aGljaCBub3Qgb25seSBpbmN1cnMKaG9sZGluZyB0aGUgZm9yY2V3YWtlIGxvY2sgaW5kZWZpbml0 ZWx5LCBwZXJ0dXJiaW5nIHRoZSBzeXN0ZW0sIGJ1dCBhbHNvCnJ1bnMgdGhlIHJpc2sgb2YgaGFu Z2luZyB0aGUgbWFjaGluZS4pIEFzIGFuIGFsdGVybmF0aXZlIHdlIGNhbiB1c2UgdGhlCnBlcmYg ZXZlbnQgY291bnRlciBpbnRlcmZhY2UgdG8gc2FtcGxlIHRoZSByaW5nIHJlZ2lzdGVycyBwZXJp b2RpY2FsbHkKYW5kIHNlbmQgdGhvc2UgcmVzdWx0cyB0byB1c2Vyc3BhY2UuCgpUbyBiZSBhYmxl IHRvIGRvIHNvLCB3ZSBuZWVkIHRvIGV4cG9ydCB0aGUgdHdvIHN5bWJvbHMgZnJvbQprZXJuZWwv ZXZlbnRzL2NvcmUuYyB0byByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBhIFBNVSBkZXZpY2UuCgp2 MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOgogKiBEZWNv dXBsZSB1QVBJIGZyb20gaTkxNSBlbmdpbmUgaWRzLgogKiBDb21wbGV0ZSB1QVBJIGRlZmluZXMu CiAqIFJlZmFjdG9yIHNvbWUgY29kZSB0byBoZWxwZXJzIGZvciBjbGFyaXR5LgogKiBTa2lwIHNh bXBsaW5nIGRpc2FibGVkIGVuZ2luZXMuCiAqIEV4cG9zZSBjb3VudGVycyBpbiBzeXNmcy4KICog UGFzcyBpbiBmYWtlIHJlZ3MgdG8gYXZvaWQgbnVsbCBwdHIgZGVyZWYgaW4gcGVyZiBjb3JlLgog KiBDb252ZXJ0IHRvIGNsYXNzL2luc3RhbmNlIHVBUEkuCiAqIFVzZSBzaGFyZWQgZHJpdmVyIGNv ZGUgZm9yIHJjNiByZXNpZGVuY3ksIHBvd2VyIGFuZCBmcmVxdWVuY3kuCgpTaWduZWQtb2ZmLWJ5 OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KU2lnbmVkLW9mZi1ieTog VHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmggICAgICAgICB8ICAyNSArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyAg ICAgICAgIHwgNjI5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZW5naW5lX2NzLmMgIHwgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuYyB8ICAyNSArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5oIHwgICA4ICsKIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICB8 ICA1NSArKysKIGtlcm5lbC9ldmVudHMvY29yZS5jICAgICAgICAgICAgICAgICAgICB8ICAgMSAr CiAxMCBmaWxlcyBjaGFuZ2VkLCA3NTkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4 IGY4MjI3MzE4ZGNhZi4uMWM3MjAwMTNkYzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMjYs NiArMjYsNyBAQCBpOTE1LXkgOj0gaTkxNV9kcnYubyBcCiAKIGk5MTUtJChDT05GSUdfQ09NUEFU KSAgICs9IGk5MTVfaW9jMzIubwogaTkxNS0kKENPTkZJR19ERUJVR19GUykgKz0gaTkxNV9kZWJ1 Z2ZzLm8gaW50ZWxfcGlwZV9jcmMubworaTkxNS0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gaTkx NV9wbXUubwogCiAjIEdFTSBjb2RlCiBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggMjE0NTU1ZTgxM2YxLi5kNzVjMmQ3OTA4NzUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTE5NCw2ICsxMTk0LDcgQEAgc3RhdGljIHZvaWQgaTkx NV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKIAogCWk5MTVfZ2VtX3Nocmlu a2VyX2luaXQoZGV2X3ByaXYpOworCWk5MTVfcG11X3JlZ2lzdGVyKGRldl9wcml2KTsKIAogCS8q CiAJICogTm90aWZ5IGEgdmFsaWQgc3VyZmFjZSBhZnRlciBtb2Rlc2V0dGluZywKQEAgLTEyNDgs NiArMTI0OSw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWludGVsX29wcmVnaW9uX3VucmVnaXN0ZXIoZGV2 X3ByaXYpOwogCiAJaTkxNV9wZXJmX3VucmVnaXN0ZXIoZGV2X3ByaXYpOworCWk5MTVfcG11X3Vu cmVnaXN0ZXIoZGV2X3ByaXYpOwogCiAJaTkxNV90ZWFyZG93bl9zeXNmcyhkZXZfcHJpdik7CiAJ aTkxNV9ndWNfbG9nX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK aW5kZXggMGM4YmQxY2RjYmJkLi4xNDI4MjY3NDJiODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxs aW51eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxs aW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+CiAjaW5jbHVkZSA8 bGludXgvcmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgpAQCAtMjEx MSw2ICsyMTEyLDEyIEBAIHN0cnVjdCBpbnRlbF9jZGNsa19zdGF0ZSB7CiAJdW5zaWduZWQgaW50 IGNkY2xrLCB2Y28sIHJlZjsKIH07CiAKK2VudW0geworCV9fSTkxNV9TQU1QTEVfRlJFUV9BQ1Qg PSAwLAorCV9fSTkxNV9TQU1QTEVfRlJFUV9SRVEsCisJX19JOTE1X05VTV9QTVVfU0FNUExFUlMK K307CisKIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSBkcm07 CiAKQEAgLTIxNTgsNiArMjE2NSw3IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1 Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqa2VybmVs X2NvbnRleHQ7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lW0k5MTVfTlVNX0VOR0lO RVNdOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZV9jbGFzc1tNQVhfRU5HSU5FX0NM QVNTICsgMV1bTUFYX0VOR0lORV9JTlNUQU5DRSArIDFdOwogCXN0cnVjdCBpOTE1X3ZtYSAqc2Vt YXBob3JlOwogCiAJc3RydWN0IGRybV9kbWFfaGFuZGxlICpzdGF0dXNfcGFnZV9kbWFoOwpAQCAt MjYwNSw2ICsyNjEzLDE0IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAkJaW50CWlycTsK IAl9IGxwZV9hdWRpbzsKIAorCXN0cnVjdCB7CisJCXN0cnVjdCBwbXUgYmFzZTsKKwkJc3Bpbmxv Y2tfdCBsb2NrOworCQlzdHJ1Y3QgaHJ0aW1lciB0aW1lcjsKKwkJdTY0IGVuYWJsZTsKKwkJdTY0 IHNhbXBsZVtfX0k5MTVfTlVNX1BNVV9TQU1QTEVSU107CisJfSBwbXU7CisKIAkvKgogCSAqIE5P VEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZ b3VyIHBhdGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29rIGZvciBhIGJldHRl ciBwbGFjZS4KQEAgLTM4MTMsNiArMzgyOSwxNSBAQCBleHRlcm4gdm9pZCBpOTE1X3BlcmZfZmlu aShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9w ZXJmX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBleHRlcm4g dm9pZCBpOTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwogCisvKiBpOTE1X3BtdS5jICovCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCitleHRl cm4gdm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7 CitleHRlcm4gdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9w bXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30KKyNlbmRpZgor CiAvKiBpOTE1X3N1c3BlbmQuYyAqLwogZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0 YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w bXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjYyYzUyN2MxMjY0 MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKQEAg LTAsMCArMSw2MjkgQEAKKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8 bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJp bnRlbF9yaW5nYnVmZmVyLmgiCisKKyNkZWZpbmUgRlJFUVVFTkNZIDIwMAorI2RlZmluZSBQRVJJ T0QgbWF4X3QodTY0LCAxMDAwMCwgTlNFQ19QRVJfU0VDIC8gRlJFUVVFTkNZKQorCisjZGVmaW5l IEVOR0lORV9TQU1QTEVfTUFTSyBcCisJKEJJVChJOTE1X1NBTVBMRV9RVUVVRUQpIHwgXAorCSBC SVQoSTkxNV9TQU1QTEVfQlVTWSkgfCBcCisJIEJJVChJOTE1X1NBTVBMRV9XQUlUKSB8IFwKKwkg QklUKEk5MTVfU0FNUExFX1NFTUEpKQorCisjZGVmaW5lIEVOR0lORV9TQU1QTEVfQklUUyAoMTYp CisKK3N0YXRpYyB1OCBlbmdpbmVfY29uZmlnX3NhbXBsZSh1NjQgY29uZmlnKQoreworCXJldHVy biBjb25maWcgJiBJOTE1X1BNVV9TQU1QTEVfTUFTSzsKK30KKworc3RhdGljIHU4IGVuZ2luZV9l dmVudF9zYW1wbGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBlbmdpbmVf Y29uZmlnX3NhbXBsZShldmVudC0+YXR0ci5jb25maWcpOworfQorCitzdGF0aWMgdTggZW5naW5l X2V2ZW50X2NsYXNzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gKGV2ZW50 LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9DTEFTU19TSElGVCkgJiAweGZmOworfQorCitzdGF0 aWMgdTggZW5naW5lX2V2ZW50X2luc3RhbmNlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sK KwlyZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9TQU1QTEVfQklUUykgJiAw eGZmOworfQorCitzdGF0aWMgYm9vbCBpc19lbmdpbmVfY29uZmlnKHU2NCBjb25maWcpCit7CisJ cmV0dXJuIGNvbmZpZyA8IF9fSTkxNV9QTVVfT1RIRVIoMCk7Cit9CisKK3N0YXRpYyB1NjQgY29u ZmlnX2VuYWJsZWRfbWFzayh1NjQgY29uZmlnKQoreworCWlmIChpc19lbmdpbmVfY29uZmlnKGNv bmZpZykpCisJCXJldHVybiBCSVRfVUxMKGVuZ2luZV9jb25maWdfc2FtcGxlKGNvbmZpZykpOwor CWVsc2UKKwkJcmV0dXJuIEJJVF9VTEwoY29uZmlnIC0gX19JOTE1X1BNVV9PVEhFUigwKSkgPDwK KwkJICAgICAgIEVOR0lORV9TQU1QTEVfQklUUzsKK30KKworc3RhdGljIGJvb2wgaXNfZW5naW5l X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gaXNfZW5naW5lX2Nv bmZpZyhldmVudC0+YXR0ci5jb25maWcpOworfQorCitzdGF0aWMgdTY0IGV2ZW50X2VuYWJsZWRf bWFzayhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGNvbmZpZ19lbmFibGVk X21hc2soZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIGJvb2wgZ3JhYl9mb3JjZXdh a2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgZncpCit7CisJaWYgKCFmdykK KwkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoaTkxNSwgRk9SQ0VXQUtFX0FMTCk7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZW5naW5lc19zYW1wbGUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKKwlib29sIGZ3ID0gZmFsc2U7CisKKwlpZiAo KGRldl9wcml2LT5wbXUuZW5hYmxlICYgRU5HSU5FX1NBTVBMRV9NQVNLKSA9PSAwKQorCQlyZXR1 cm47CisKKwlpZiAoIWRldl9wcml2LT5ndC5hd2FrZSkKKwkJcmV0dXJuOworCisJaWYgKCFpbnRl bF9ydW50aW1lX3BtX2dldF9pZl9pbl91c2UoZGV2X3ByaXYpKQorCQlyZXR1cm47CisKKwlmb3Jf ZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKKwkJdTMyIGVuYWJsZSA9IGVuZ2lu ZS0+cG11LmVuYWJsZTsKKworCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfZW5naW5lX2dl dF9zZXFubyhlbmdpbmUpLAorCQkJCSAgICAgIGludGVsX2VuZ2luZV9sYXN0X3N1Ym1pdChlbmdp bmUpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfUVVF VUVEKSkKKwkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9RVUVVRURdICs9IFBFUklP RDsKKworCQlpZiAoZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX0JVU1kpKSB7CisJCQl1MzIgdmFs OworCisJCQlmdyA9IGdyYWJfZm9yY2V3YWtlKGRldl9wcml2LCBmdyk7CisJCQl2YWwgPSBJOTE1 X1JFQURfRlcoUklOR19NSV9NT0RFKGVuZ2luZS0+bW1pb19iYXNlKSk7CisJCQlpZiAoISh2YWwg JiBNT0RFX0lETEUpKQorCQkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9CVVNZXSAr PSBQRVJJT0Q7CisJCX0KKworCQlpZiAoZW5hYmxlICYgKEJJVChJOTE1X1NBTVBMRV9XQUlUKSB8 IEJJVChJOTE1X1NBTVBMRV9TRU1BKSkpIHsKKwkJCXUzMiB2YWw7CisKKwkJCWZ3ID0gZ3JhYl9m b3JjZXdha2UoZGV2X3ByaXYsIGZ3KTsKKwkJCXZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX0NUTChl bmdpbmUtPm1taW9fYmFzZSkpOworCQkJaWYgKChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfV0FJ VCkpICYmCisJCQkgICAgKHZhbCAmIFJJTkdfV0FJVCkpCisJCQkJZW5naW5lLT5wbXUuc2FtcGxl W0k5MTVfU0FNUExFX1dBSVRdICs9IFBFUklPRDsKKwkJCWlmICgoZW5hYmxlICYgQklUKEk5MTVf U0FNUExFX1NFTUEpKSAmJgorCQkJICAgICh2YWwgJiBSSU5HX1dBSVRfU0VNQVBIT1JFKSkKKwkJ CQllbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfU0VNQV0gKz0gUEVSSU9EOworCQl9CisJ fQorCisJaWYgKGZ3KQorCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9S Q0VXQUtFX0FMTCk7CisJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworfQorCitzdGF0 aWMgdm9pZCBmcmVxdWVuY3lfc2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKK3sKKwlpZiAoZGV2X3ByaXYtPnBtdS5lbmFibGUgJgorCSAgICBjb25maWdfZW5hYmxlZF9t YXNrKEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kpKSB7CisJCXU2NCB2YWw7CisKKwkJdmFsID0g ZGV2X3ByaXYtPnJwcy5jdXJfZnJlcTsKKwkJaWYgKGRldl9wcml2LT5ndC5hd2FrZSAmJgorCQkg ICAgaW50ZWxfcnVudGltZV9wbV9nZXRfaWZfaW5fdXNlKGRldl9wcml2KSkgeworCQkJdmFsID0g aW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsCisJCQkJCSAgICAgSTkxNV9SRUFEX05PVFJBQ0UoR0VO Nl9SUFNUQVQxKSk7CisJCQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7CisJCX0KKwkJ dmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7CisJCWRldl9wcml2LT5wbXUuc2Ft cGxlW19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdICs9IHZhbCAqIFBFUklPRDsKKwl9CisKKwlpZiAo ZGV2X3ByaXYtPnBtdS5lbmFibGUgJgorCSAgICBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1V X1JFUVVFU1RFRF9GUkVRVUVOQ1kpKSB7CisJCXU2NCB2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZf cHJpdiwgZGV2X3ByaXYtPnJwcy5jdXJfZnJlcSk7CisJCWRldl9wcml2LT5wbXUuc2FtcGxlW19f STkxNV9TQU1QTEVfRlJFUV9SRVFdICs9IHZhbCAqIFBFUklPRDsKKwl9Cit9CisKK3N0YXRpYyBl bnVtIGhydGltZXJfcmVzdGFydCBpOTE1X3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihocnRp bWVyLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgcG11LnRpbWVyKTsKKworCWlmIChpOTE1LT5w bXUuZW5hYmxlID09IDApCisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKworCWVuZ2luZXNf c2FtcGxlKGk5MTUpOworCWZyZXF1ZW5jeV9zYW1wbGUoaTkxNSk7CisKKwlocnRpbWVyX2Zvcndh cmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKFBFUklPRCkpOworCXJldHVybiBIUlRJTUVSX1JF U1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBl cmZfZXZlbnQgKmV2ZW50KQoreworCVdBUk5fT04oZXZlbnQtPnBhcmVudCk7Cit9CisKK3N0YXRp YyBpbnQgZW5naW5lX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUs IHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKworCWlmICghaW50ZWxfZW5naW5lX2xvb2t1cF91 c2VyKGk5MTUsIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJCQkJICAgICAgZW5naW5lX2V2 ZW50X2luc3RhbmNlKGV2ZW50KSkpCisJCXJldHVybiAtRU5PREVWOworCisJc3dpdGNoIChlbmdp bmVfZXZlbnRfc2FtcGxlKGV2ZW50KSkgeworCWNhc2UgSTkxNV9TQU1QTEVfUVVFVUVEOgorCWNh c2UgSTkxNV9TQU1QTEVfQlVTWToKKwljYXNlIEk5MTVfU0FNUExFX1dBSVQ6CisJCWJyZWFrOwor CWNhc2UgSTkxNV9TQU1QTEVfU0VNQToKKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCisJCQly ZXR1cm4gLUVOT0RFVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9FTlQ7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHRfcmVn cywgaTkxNV9wbXVfcHRfcmVncyk7CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBocnRp bWVyX3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKK3sKKwlzdHJ1Y3QgcHRfcmVncyAq cmVncyA9IHRoaXNfY3B1X3B0cigmaTkxNV9wbXVfcHRfcmVncyk7CisJc3RydWN0IHBlcmZfc2Ft cGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJdTY0IHBlcmlvZDsK KworCWV2ZW50ID0gY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVjdCBwZXJmX2V2ZW50LCBody5o cnRpbWVyKTsKKwlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQor CQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwlldmVudC0+cG11LT5yZWFkKGV2ZW50KTsK KworCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgMCwgZXZlbnQtPmh3Lmxhc3RfcGVyaW9k KTsKKwlwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAmZGF0YSwgcmVncyk7CisKKwlwZXJpb2Qg PSBtYXhfdCh1NjQsIDEwMDAwLCBldmVudC0+aHcuc2FtcGxlX3BlcmlvZCk7CisJaHJ0aW1lcl9m b3J3YXJkX25vdyhocnRpbWVyLCBuc190b19rdGltZShwZXJpb2QpKTsKKwlyZXR1cm4gSFJUSU1F Ul9SRVNUQVJUOworfQorCitzdGF0aWMgdm9pZCBpbml0X2hydGltZXIoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owor CisJaWYgKCFpc19zYW1wbGluZ19ldmVudChldmVudCkpCisJCXJldHVybjsKKworCWhydGltZXJf aW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwor CWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IGhydGltZXJfc2FtcGxlOworCisJaWYgKGV2ZW50LT5h dHRyLmZyZXEpIHsKKwkJbG9uZyBmcmVxID0gZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXE7CisKKwkJ ZXZlbnQtPmF0dHIuc2FtcGxlX3BlcmlvZCA9IE5TRUNfUEVSX1NFQyAvIGZyZXE7CisJCWh3Yy0+ c2FtcGxlX3BlcmlvZCA9IGV2ZW50LT5hdHRyLnNhbXBsZV9wZXJpb2Q7CisJCWxvY2FsNjRfc2V0 KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOworCQlod2MtPmxhc3RfcGVy aW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOworCQlldmVudC0+YXR0ci5mcmVxID0gMDsKKwl9Cit9 CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZl bnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2Yo ZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCWludCByZXQ7CisKKwkvKiBY WFggaWRlYWxseSBvbmx5IHdhbnQgcGlkID09IC0xICYmIGNwdSA9PSAtMSAqLworCisJaWYgKGV2 ZW50LT5hdHRyLnR5cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisK KwlpZiAoaGFzX2JyYW5jaF9zdGFjayhldmVudCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwor CXJldCA9IDA7CisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJcmV0ID0gZW5naW5l X2V2ZW50X2luaXQoZXZlbnQpOworCX0gZWxzZSBzd2l0Y2ggKGV2ZW50LT5hdHRyLmNvbmZpZykg eworCWNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWToKKwkJaWYgKElTX1ZBTExFWVZJRVco aTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJCXJldCA9IC1FTk9ERVY7IC8qIHJlcXVp cmVzIGEgbXV0ZXggZm9yIHNhbXBsaW5nISAqLworCWNhc2UgSTkxNV9QTVVfUkVRVUVTVEVEX0ZS RVFVRU5DWToKKwljYXNlIEk5MTVfUE1VX0VORVJHWToKKwljYXNlIEk5MTVfUE1VX1JDNl9SRVNJ REVOQ1k6CisJY2FzZSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWToKKwljYXNlIEk5MTVfUE1VX1JD NnBwX1JFU0lERU5DWToKKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCisJCQlyZXQgPSAtRU5P REVWOworCQlicmVhazsKKwl9CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghZXZl bnQtPnBhcmVudCkKKwkJZXZlbnQtPmRlc3Ryb3kgPSBpOTE1X3BtdV9ldmVudF9kZXN0cm95Owor CisJaW5pdF9ocnRpbWVyKGV2ZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBp OTE1X3BtdV90aW1lcl9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0 IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJczY0IHBlcmlvZDsKKworCWlmICgh aXNfc2FtcGxpbmdfZXZlbnQoZXZlbnQpKQorCQlyZXR1cm47CisKKwlwZXJpb2QgPSBsb2NhbDY0 X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOworCWlmIChwZXJpb2QpIHsKKwkJaWYgKHBlcmlvZCA8 IDApCisJCQlwZXJpb2QgPSAxMDAwMDsKKworCQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVm dCwgMCk7CisJfSBlbHNlIHsKKwkJcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1w bGVfcGVyaW9kKTsKKwl9CisKKwlocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZod2MtPmhydGltZXIs CisJCQkgICAgICAgbnNfdG9fa3RpbWUocGVyaW9kKSwgMCwKKwkJCSAgICAgICBIUlRJTUVSX01P REVfUkVMX1BJTk5FRCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X3RpbWVyX2NhbmNlbChz dHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9 ICZldmVudC0+aHc7CisKKwlpZiAoIWlzX3NhbXBsaW5nX2V2ZW50KGV2ZW50KSkKKwkJcmV0dXJu OworCisJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsCisJCSAgICBrdGltZV90b19ucyho cnRpbWVyX2dldF9yZW1haW5pbmcoJmh3Yy0+aHJ0aW1lcikpKTsKKwlocnRpbWVyX2NhbmNlbCgm aHdjLT5ocnRpbWVyKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZW5hYmxlKHN0cnVjdCBw ZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJ CWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpOTE1LT5wbXUubG9jaywg ZmxhZ3MpOworCisJaWYgKGk5MTUtPnBtdS5lbmFibGUgPT0gMCkKKwkJaHJ0aW1lcl9zdGFydF9y YW5nZV9ucygmaTkxNS0+cG11LnRpbWVyLAorCQkJCSAgICAgICBuc190b19rdGltZShQRVJJT0Qp LCAwLAorCQkJCSAgICAgICBIUlRJTUVSX01PREVfUkVMX1BJTk5FRCk7CisKKwlpOTE1LT5wbXUu ZW5hYmxlIHw9IGV2ZW50X2VuYWJsZWRfbWFzayhldmVudCk7CisKKwlpZiAoaXNfZW5naW5lX2V2 ZW50KGV2ZW50KSkgeworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5n aW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVu dF9jbGFzcyhldmVudCksCisJCQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOwor CQlHRU1fQlVHX09OKCFlbmdpbmUpOworCQllbmdpbmUtPnBtdS5lbmFibGUgfD0gQklUKGVuZ2lu ZV9ldmVudF9zYW1wbGUoZXZlbnQpKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZp OTE1LT5wbXUubG9jaywgZmxhZ3MpOworCisJaTkxNV9wbXVfdGltZXJfc3RhcnQoZXZlbnQpOwor fQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihl dmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJdW5zaWduZWQgbG9uZyBmbGFn czsKKwl1NjQgbWFzazsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpOTE1LT5wbXUubG9jaywgZmxh Z3MpOworCisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lOworCQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKKworCQllbmdpbmUg PSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2Ns YXNzKGV2ZW50KSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisJCUdF TV9CVUdfT04oIWVuZ2luZSk7CisJCWVuZ2luZS0+cG11LmVuYWJsZSAmPSB+QklUKGVuZ2luZV9l dmVudF9zYW1wbGUoZXZlbnQpKTsKKwkJbWFzayA9IDA7CisJCWZvcl9lYWNoX2VuZ2luZShlbmdp bmUsIGk5MTUsIGlkKQorCQkJbWFzayB8PSBlbmdpbmUtPnBtdS5lbmFibGU7CisJCW1hc2sgPSB+ bWFzazsKKwl9IGVsc2UgeworCQltYXNrID0gZXZlbnRfZW5hYmxlZF9tYXNrKGV2ZW50KTsKKwl9 CisKKwlpOTE1LT5wbXUuZW5hYmxlICY9IH5tYXNrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKKworCWk5MTVfcG11X3RpbWVyX2NhbmNlbChldmVu dCk7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfYWRkKHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZl bnQtPmh3OworCisJaWYgKGZsYWdzICYgUEVSRl9FRl9TVEFSVCkKKwkJaTkxNV9wbXVfZW5hYmxl KGV2ZW50KTsKKworCWh3Yy0+c3RhdGUgPSAhKGZsYWdzICYgUEVSRl9FRl9TVEFSVCk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBwZXJm X2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWk5MTVfcG11X2Rpc2FibGUoZXZlbnQpOwor fQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQsIGludCBmbGFncykKK3sKKwlpOTE1X3BtdV9lbmFibGUoZXZlbnQpOworfQorCitzdGF0 aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50 IGZsYWdzKQoreworCWk5MTVfcG11X2Rpc2FibGUoZXZlbnQpOworfQorCitzdGF0aWMgdTY0IGNv dW50X2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJLyogb3Bl bi1jb2RlZCBrc3RhdF9pcnFzKCkgKi8KKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9f ZGVzYyhpOTE1LT5kcm0ucGRldi0+aXJxKTsKKwl1NjQgc3VtID0gMDsKKwlpbnQgY3B1OworCisJ aWYgKCFkZXNjIHx8ICFkZXNjLT5rc3RhdF9pcnFzKQorCQlyZXR1cm4gMDsKKworCWZvcl9lYWNo X3Bvc3NpYmxlX2NwdShjcHUpCisJCXN1bSArPSAqcGVyX2NwdV9wdHIoZGVzYy0+a3N0YXRfaXJx cywgY3B1KTsKKworCXJldHVybiBzdW07Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50 X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBt dS5iYXNlKTsKKwl1NjQgdmFsID0gMDsKKworCWlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7 CisJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpOworCQlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91 c2VyKGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJCQkJCQkgIGVu Z2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOworCisJCWlmIChXQVJOX09OX09OQ0UoIWVuZ2lu ZSkpIHsKKwkJCS8qIERvIG5vdGhpbmcgKi8KKwkJfSBlbHNlIHsKKwkJCXZhbCA9IGVuZ2luZS0+ cG11LnNhbXBsZVtzYW1wbGVdOworCQl9CisJfSBlbHNlIHN3aXRjaCAoZXZlbnQtPmF0dHIuY29u ZmlnKSB7CisJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZOgorCQl2YWwgPSBpOTE1LT5w bXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdOworCQlicmVhazsKKwljYXNlIEk5MTVf UE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1k6CisJCXZhbCA9IGk5MTUtPnBtdS5zYW1wbGVbX19JOTE1 X1NBTVBMRV9GUkVRX1JFUV07CisJCWJyZWFrOworCWNhc2UgSTkxNV9QTVVfRU5FUkdZOgorCQl2 YWwgPSBpbnRlbF9lbmVyZ3lfdUooaTkxNSk7CisJCWJyZWFrOworCWNhc2UgSTkxNV9QTVVfSU5U RVJSVVBUUzoKKwkJdmFsID0gY291bnRfaW50ZXJydXB0cyhpOTE1KTsKKwkJYnJlYWs7CisKKwlj YXNlIEk5MTVfUE1VX1JDNl9SRVNJREVOQ1k6CisJCWlmICghaTkxNS0+Z3QuYXdha2UpCisJCQly ZXR1cm47CisKKwkJdmFsID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhpOTE1LAorCQkJCQkgICAg IElTX1ZBTExFWVZJRVcoaTkxNSkgPworCQkJCQkgICAgIFZMVl9HVF9SRU5ERVJfUkM2IDoKKwkJ CQkJICAgICBHRU42X0dUX0dGWF9SQzYpOworCQlicmVhazsKKworCWNhc2UgSTkxNV9QTVVfUkM2 cF9SRVNJREVOQ1k6CisJCWlmICghaTkxNS0+Z3QuYXdha2UpCisJCQlyZXR1cm47CisKKwkJaWYg KCFJU19WQUxMRVlWSUVXKGk5MTUpKQorCQkJdmFsID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhp OTE1LCBHRU42X0dUX0dGWF9SQzZwKTsKKwkJYnJlYWs7CisKKwljYXNlIEk5MTVfUE1VX1JDNnBw X1JFU0lERU5DWToKKwkJaWYgKCFpOTE1LT5ndC5hd2FrZSkKKwkJCXJldHVybjsKKworCQlpZiAo IUlTX1ZBTExFWVZJRVcoaTkxNSkpCisJCQl2YWwgPSBpbnRlbF9yYzZfcmVzaWRlbmN5X25zKGk5 MTUsIEdFTjZfR1RfR0ZYX1JDNnBwKTsKKwkJYnJlYWs7CisJfQorCisJbG9jYWw2NF9zZXQoJmV2 ZW50LT5jb3VudCwgdmFsKTsKK30KKworc3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9ldmVudF9p ZHgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMg c3NpemVfdCBpOTE1X3BtdV9mb3JtYXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAg IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisgICAgICAgIHN0 cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7CisKKyAgICAgICAgZWF0dHIgPSBjb250YWlu ZXJfb2YoYXR0ciwgc3RydWN0IGRldl9leHRfYXR0cmlidXRlLCBhdHRyKTsKKyAgICAgICAgcmV0 dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIChjaGFyICopIGVhdHRyLT52YXIpOworfQorCisjZGVm aW5lIEk5MTVfUE1VX0ZPUk1BVF9BVFRSKF9uYW1lLCBfY29uZmlnKSAgICAgICAgICAgXAorICAg ICAgICAoJigoc3RydWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgICAgICAgICAgICAgICBcCisg ICAgICAgICAgICAgICAgeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVHTywgaTkxNV9wbXVf Zm9ybWF0X3Nob3csIE5VTEwpLCBcCisgICAgICAgICAgICAgICAgICAudmFyID0gKHZvaWQgKikg X2NvbmZpZywgfSAgICAgICAgICAgIFwKKyAgICAgICAgfSlbMF0uYXR0ci5hdHRyKQorCitzdGF0 aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9wbXVfZm9ybWF0X2F0dHJzW10gPSB7CisgICAgICAg IEk5MTVfUE1VX0ZPUk1BVF9BVFRSKGk5MTVfZXZlbnRpZCwgImNvbmZpZzowLTQyIiksCisgICAg ICAgIE5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1 X3BtdV9mb3JtYXRfYXR0cl9ncm91cCA9IHsKKyAgICAgICAgLm5hbWUgPSAiZm9ybWF0IiwKKyAg ICAgICAgLmF0dHJzID0gaTkxNV9wbXVfZm9ybWF0X2F0dHJzLAorfTsKKworc3RhdGljIHNzaXpl X3QgaTkxNV9wbXVfZXZlbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKyAgICAgICAgc3RydWN0IGRl dl9leHRfYXR0cmlidXRlICplYXR0cjsKKworICAgICAgICBlYXR0ciA9IGNvbnRhaW5lcl9vZihh dHRyLCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIpOworICAgICAgICByZXR1cm4gc3By aW50ZihidWYsICJjb25maWc9MHglbHhcbiIsICh1bnNpZ25lZCBsb25nKSBlYXR0ci0+dmFyKTsK K30KKworI2RlZmluZSBJOTE1X1BNVV9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSAgICAgICAg ICAgIFwKKyAgICAgICAgKCYoKHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7ICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgIHsgLmF0dHIgPSBfX0FUVFIoX25hbWUsIFNfSVJVR08s IGk5MTVfcG11X2V2ZW50X3Nob3csIE5VTEwpLCBcCisgICAgICAgICAgICAgICAgICAudmFyID0g KHZvaWQgKikgX2NvbmZpZywgfSAgICAgICAgICAgIFwKKyAgICAgICAgIH0pWzBdLmF0dHIuYXR0 cikKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmk5MTVfcG11X2V2ZW50c19hdHRyc1tdID0g eworCUk5MTVfUE1VX0VWRU5UX0FUVFIocmNzMC1xdWV1ZWQsCisJCQkgICAgSTkxNV9QTVVfRU5H SU5FX1FVRVVFRChJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApKSwKKwlJOTE1X1BNVV9FVkVO VF9BVFRSKHJjczAtYnVzeSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfQlVTWShJOTE1X0VOR0lO RV9DTEFTU19SRU5ERVIsIDApKSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHJjczAtd2FpdCwKKwkJ CSAgICBJOTE1X1BNVV9FTkdJTkVfV0FJVChJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApKSwK KwlJOTE1X1BNVV9FVkVOVF9BVFRSKHJjczAtc2VtYSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVf U0VNQShJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApKSwKKworCUk5MTVfUE1VX0VWRU5UX0FU VFIoYmNzMC1xdWV1ZWQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChJOTE1X0VOR0lO RV9DTEFTU19DT1BZLCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUihiY3MwLWJ1c3ksCisJCQkg ICAgSTkxNV9QTVVfRU5HSU5FX0JVU1koSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCkpLAorCUk5 MTVfUE1VX0VWRU5UX0FUVFIoYmNzMC13YWl0LAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9XQUlU KEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApKSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKGJjczAt c2VtYSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfU0VNQShJOTE1X0VOR0lORV9DTEFTU19DT1BZ LCAwKSksCisKKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZjczAtcXVldWVkLAorCQkJICAgIEk5MTVf UE1VX0VOR0lORV9RVUVVRUQoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDApKSwKKwlJOTE1X1BN VV9FVkVOVF9BVFRSKHZjczAtYnVzeSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfQlVTWShJOTE1 X0VOR0lORV9DTEFTU19WSURFTywgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMC13YWl0 LAorCQkJICAgIEk5MTVfUE1VX0VOR0lORV9XQUlUKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAw KSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3MwLXNlbWEsCisJCQkgICAgSTkxNV9QTVVfRU5H SU5FX1NFTUEoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDApKSwKKworCUk5MTVfUE1VX0VWRU5U X0FUVFIodmNzMS1xdWV1ZWQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChJOTE1X0VO R0lORV9DTEFTU19WSURFTywgMSkpLAorCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMS1idXN5LAor CQkJICAgIEk5MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAxKSks CisJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3MxLXdhaXQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5F X1dBSVQoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEpKSwKKwlJOTE1X1BNVV9FVkVOVF9BVFRS KHZjczEtc2VtYSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfU0VNQShJOTE1X0VOR0lORV9DTEFT U19WSURFTywgMSkpLAorCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2ZWNzMC1xdWV1ZWQsCisJCQkg ICAgSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNF LCAwKSksCisJSTkxNV9QTVVfRVZFTlRfQVRUUih2ZWNzMC1idXN5LAorCQkJICAgIEk5MTVfUE1V X0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwKKwlJOTE1 X1BNVV9FVkVOVF9BVFRSKHZlY3MwLXdhaXQsCisJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1dBSVQo STkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRSwgMCkpLAorCUk5MTVfUE1VX0VWRU5UX0FU VFIodmVjczAtc2VtYSwKKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfU0VNQShJOTE1X0VOR0lORV9D TEFTU19WSURFT19FTkhBTkNFLCAwKSksCisKKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRUUihh Y3R1YWwtZnJlcXVlbmN5LAkgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSksCisgICAgICAgIEk5 MTVfUE1VX0VWRU5UX0FUVFIocmVxdWVzdGVkLWZyZXF1ZW5jeSwgSTkxNV9QTVVfUkVRVUVTVEVE X0ZSRVFVRU5DWSksCisgICAgICAgIEk5MTVfUE1VX0VWRU5UX0FUVFIoZW5lcmd5LAkJIEk5MTVf UE1VX0VORVJHWSksCisgICAgICAgIEk5MTVfUE1VX0VWRU5UX0FUVFIoaW50ZXJydXB0cywJCSBJ OTE1X1BNVV9JTlRFUlJVUFRTKSwKKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRUUihyYzYtcmVz aWRlbmN5LAkgSTkxNV9QTVVfUkM2X1JFU0lERU5DWSksCisgICAgICAgIEk5MTVfUE1VX0VWRU5U X0FUVFIocmM2cC1yZXNpZGVuY3ksCSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWSksCisgICAgICAg IEk5MTVfUE1VX0VWRU5UX0FUVFIocmM2cHAtcmVzaWRlbmN5LAkgSTkxNV9QTVVfUkM2cHBfUkVT SURFTkNZKSwKKworICAgICAgICBOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRy aWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3JvdXAgPSB7CisgICAgICAgIC5uYW1l ID0gImV2ZW50cyIsCisgICAgICAgIC5hdHRycyA9IGk5MTVfcG11X2V2ZW50c19hdHRycywKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICppOTE1X3BtdV9hdHRyX2dy b3Vwc1tdID0geworICAgICAgICAmaTkxNV9wbXVfZm9ybWF0X2F0dHJfZ3JvdXAsCisgICAgICAg ICZpOTE1X3BtdV9ldmVudHNfYXR0cl9ncm91cCwKKyAgICAgICAgTlVMTAorfTsKKwordm9pZCBp OTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlpZiAo SU5URUxfR0VOKGk5MTUpIDw9IDIpCisJCXJldHVybjsKKworCWk5MTUtPnBtdS5iYXNlLmF0dHJf Z3JvdXBzCT0gaTkxNV9wbXVfYXR0cl9ncm91cHM7CisJaTkxNS0+cG11LmJhc2UudGFza19jdHhf bnIJPSBwZXJmX3N3X2NvbnRleHQ7CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdAk9IGk5MTVf cG11X2V2ZW50X2luaXQ7CisJaTkxNS0+cG11LmJhc2UuYWRkCQk9IGk5MTVfcG11X2V2ZW50X2Fk ZDsKKwlpOTE1LT5wbXUuYmFzZS5kZWwJCT0gaTkxNV9wbXVfZXZlbnRfZGVsOworCWk5MTUtPnBt dS5iYXNlLnN0YXJ0CQk9IGk5MTVfcG11X2V2ZW50X3N0YXJ0OworCWk5MTUtPnBtdS5iYXNlLnN0 b3AJCT0gaTkxNV9wbXVfZXZlbnRfc3RvcDsKKwlpOTE1LT5wbXUuYmFzZS5yZWFkCQk9IGk5MTVf cG11X2V2ZW50X3JlYWQ7CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaWR4CT0gaTkxNV9wbXVfZXZl bnRfZXZlbnRfaWR4OworCisJc3Bpbl9sb2NrX2luaXQoJmk5MTUtPnBtdS5sb2NrKTsKKwlocnRp bWVyX2luaXQoJmk5MTUtPnBtdS50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVf UkVMKTsKKwlpOTE1LT5wbXUudGltZXIuZnVuY3Rpb24gPSBpOTE1X3NhbXBsZTsKKwlpOTE1LT5w bXUuZW5hYmxlID0gMDsKKworCWlmIChwZXJmX3BtdV9yZWdpc3RlcigmaTkxNS0+cG11LmJhc2Us ICJpOTE1IiwgLTEpKQorCQlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0ID0gTlVMTDsKK30KKwor dm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQor eworCWlmICghaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCkKKwkJcmV0dXJuOworCisJaTkxNS0+ cG11LmVuYWJsZSA9IDA7CisKKwlwZXJmX3BtdV91bnJlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSk7 CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7CisKKwlocnRpbWVyX2NhbmNlbCgm aTkxNS0+cG11LnRpbWVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDFkYzdlN2Ey YTIzYi4uMjZiY2U3NjZhYjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTk1LDYgKzk1 LDkgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCBy ZWcpCiAjZGVmaW5lIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTCTIKICNkZWZpbmUgQ09QWV9FTkdJ TkVfQ0xBU1MJMwogI2RlZmluZSBPVEhFUl9DTEFTUwkJNAorI2RlZmluZSBNQVhfRU5HSU5FX0NM QVNTCTQKKworI2RlZmluZSBNQVhfRU5HSU5FX0lOU1RBTkNFICAgIDEKIAogLyogUENJIGNvbmZp ZyBzcGFjZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdp bmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCmluZGV4IDlh YjU5Njk0MTM3Mi4uMTQ2MzA2MTIzMjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9lbmdpbmVfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdp bmVfY3MuYwpAQCAtMTk4LDYgKzE5OCwxNSBAQCBpbnRlbF9lbmdpbmVfc2V0dXAoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCUdFTV9CVUdfT04oaW5mby0+Y2xhc3MgPj0gQVJS QVlfU0laRShpbnRlbF9lbmdpbmVfY2xhc3NlcykpOwogCWNsYXNzX2luZm8gPSAmaW50ZWxfZW5n aW5lX2NsYXNzZXNbaW5mby0+Y2xhc3NdOwogCisJaWYgKEdFTV9XQVJOX09OKGluZm8tPmNsYXNz ID4gTUFYX0VOR0lORV9DTEFTUykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKEdFTV9XQVJO X09OKGluZm8tPmluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkpCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKEdFTV9XQVJOX09OKGRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xh c3NdW2luZm8tPmluc3RhbmNlXSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJR0VNX0JVR19PTihk ZXZfcHJpdi0+ZW5naW5lW2lkXSk7CiAJZW5naW5lID0ga3phbGxvYyhzaXplb2YoKmVuZ2luZSks IEdGUF9LRVJORUwpOwogCWlmICghZW5naW5lKQpAQCAtMjI1LDYgKzIzNCw3IEBAIGludGVsX2Vu Z2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAKIAlBVE9NSUNf SU5JVF9OT1RJRklFUl9IRUFEKCZlbmdpbmUtPmNvbnRleHRfc3RhdHVzX25vdGlmaWVyKTsKIAor CWRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3RhbmNlXSA9IGVu Z2luZTsKIAlkZXZfcHJpdi0+ZW5naW5lW2lkXSA9IGVuZ2luZTsKIAlyZXR1cm4gMDsKIH0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwppbmRleCBjZGYwODRlZjVhYWUuLmFm OGQ4NTc5NGM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAt MjI4MiwzICsyMjgyLDI4IEBAIGludCBpbnRlbF9pbml0X3ZlYm94X3JpbmdfYnVmZmVyKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCXJldHVybiBpbnRlbF9pbml0X3JpbmdfYnVm ZmVyKGVuZ2luZSk7CiB9CisKK3N0YXRpYyB1OCB1c2VyX2NsYXNzX21hcFtJOTE1X0VOR0lORV9D TEFTU19NQVhdID0geworCVtJOTE1X0VOR0lORV9DTEFTU19PVEhFUl0gPSBPVEhFUl9DTEFTUywK KwlbSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSXSA9IFJFTkRFUl9DTEFTUywKKwlbSTkxNV9FTkdJ TkVfQ0xBU1NfQ09QWV0gPSBDT1BZX0VOR0lORV9DTEFTUywKKwlbSTkxNV9FTkdJTkVfQ0xBU1Nf VklERU9dID0gVklERU9fREVDT0RFX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19WSURFT19F TkhBTkNFXSA9IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTLAorfTsKKworc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqCitpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0YW5jZSkKK3sKKwlpZiAoY2xhc3MgPj0gQVJSQVlf U0laRSh1c2VyX2NsYXNzX21hcCkpCisJCXJldHVybiBOVUxMOworCisJY2xhc3MgPSB1c2VyX2Ns YXNzX21hcFtjbGFzc107CisKKwlpZiAoV0FSTl9PTl9PTkNFKGNsYXNzID4gTUFYX0VOR0lORV9D TEFTUykpCisJCXJldHVybiBOVUxMOworCisJaWYgKGluc3RhbmNlID4gTUFYX0VOR0lORV9JTlNU QU5DRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaTkxNS0+ZW5naW5lX2NsYXNzW2NsYXNz XVtpbnN0YW5jZV07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y aW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKaW5k ZXggZDMzYzkzNDQ0YzBkLi45ZmRmMGNkZjYyMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmgKQEAgLTI0NSw2ICsyNDUsMTEgQEAgc3RydWN0IGludGVsX2VuZ2luZV9j cyB7CiAJCUk5MTVfU0VMRlRFU1RfREVDTEFSRShib29sIG1vY2sgOiAxKTsKIAl9IGJyZWFkY3J1 bWJzOwogCisJc3RydWN0IHsKKwkJdTMyIGVuYWJsZTsKKwkJdTY0IHNhbXBsZVs0XTsKKwl9IHBt dTsKKwogCS8qCiAJICogQSBwb29sIG9mIG9iamVjdHMgdG8gdXNlIGFzIHNoYWRvdyBjb3BpZXMg b2YgY2xpZW50IGJhdGNoIGJ1ZmZlcnMKIAkgKiB3aGVuIHRoZSBjb21tYW5kIHBhcnNlciBpcyBl bmFibGVkLiBQcmV2ZW50cyB0aGUgY2xpZW50IGZyb20KQEAgLTczNSw0ICs3NDAsNyBAQCBib29s IGludGVsX2VuZ2luZXNfYXJlX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKIHZvaWQgaW50ZWxfZW5naW5lc19tYXJrX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpOwogdm9pZCBpbnRlbF9lbmdpbmVzX3Jlc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CiAKK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgor aW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1 OCBjbGFzcywgdTggaW5zdGFuY2UpOworCiAjZW5kaWYgLyogX0lOVEVMX1JJTkdCVUZGRVJfSF8g Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFw aS9kcm0vaTkxNV9kcm0uaAppbmRleCA3Y2NiZDZhMmJiZTAuLjEwMzg3NDQ3NmE2ZCAxMDA2NDQK LS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0v aTkxNV9kcm0uaApAQCAtODYsNiArODYsNjEgQEAgZW51bSBpOTE1X21vY3NfdGFibGVfaW5kZXgg ewogCUk5MTVfTU9DU19DQUNIRUQsCiB9OwogCitlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xh c3MgeworCUk5MTVfRU5HSU5FX0NMQVNTX09USEVSID0gMCwKKwlJOTE1X0VOR0lORV9DTEFTU19S RU5ERVIgPSAxLAorCUk5MTVfRU5HSU5FX0NMQVNTX0NPUFkgPSAyLAorCUk5MTVfRU5HSU5FX0NM QVNTX1ZJREVPID0gMywKKwlJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFID0gNCwKKwlJ OTE1X0VOR0lORV9DTEFTU19NQVggLyogbm9uLUFCSSAqLworfTsKKworLyoqCisgKiBET0M6IHBl cmZfZXZlbnRzIGV4cG9zZWQgYnkgaTkxNSB0aHJvdWdoIC9zeXMvYnVzL2V2ZW50X3NvdXJjZXMv ZHJpdmVycy9pOTE1CisgKgorICovCisKK2VudW0gZHJtX2k5MTVfcG11X2VuZ2luZV9zYW1wbGUg eworCUk5MTVfU0FNUExFX1FVRVVFRCA9IDAsCisJSTkxNV9TQU1QTEVfQlVTWSA9IDEsCisJSTkx NV9TQU1QTEVfV0FJVCA9IDIsCisJSTkxNV9TQU1QTEVfU0VNQSA9IDMKK307CisKKyNkZWZpbmUg STkxNV9QTVVfU0FNUExFX0JJVFMgKDQpCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9NQVNLICgw eGYpCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRTICg4KQorI2RlZmluZSBJ OTE1X1BNVV9DTEFTU19TSElGVCBcCisJKEk5MTVfUE1VX1NBTVBMRV9CSVRTICsgSTkxNV9QTVVf U0FNUExFX0lOU1RBTkNFX0JJVFMpCisKKyNkZWZpbmUgX19JOTE1X1BNVV9FTkdJTkUoY2xhc3Ms IGluc3RhbmNlLCBzYW1wbGUpIFwKKwkoKGNsYXNzKSA8PCBJOTE1X1BNVV9DTEFTU19TSElGVCB8 IFwKKwkoaW5zdGFuY2UpIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTIHwgXAorCShzYW1wbGUpKQor CisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9RVUVVRUQoY2xhc3MsIGluc3RhbmNlKSBcCisJX19J OTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9RVUVVRUQpCisKKyNk ZWZpbmUgSTkxNV9QTVVfRU5HSU5FX0JVU1koY2xhc3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BN VV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9CVVNZKQorCisjZGVmaW5lIEk5 MTVfUE1VX0VOR0lORV9XQUlUKGNsYXNzLCBpbnN0YW5jZSkgXAorCV9fSTkxNV9QTVVfRU5HSU5F KGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVfV0FJVCkKKworI2RlZmluZSBJOTE1X1BNVV9F TkdJTkVfU0VNQShjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywg aW5zdGFuY2UsIEk5MTVfU0FNUExFX1NFTUEpCisKKyNkZWZpbmUgX19JOTE1X1BNVV9PVEhFUih4 KSAoX19JOTE1X1BNVV9FTkdJTkUoMHhmZiwgMHhmZiwgMHhmKSArIDEgKyAoeCkpCisKKyNkZWZp bmUgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSAJX19JOTE1X1BNVV9PVEhFUigwKQorI2RlZmlu ZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZCV9fSTkxNV9QTVVfT1RIRVIoMSkKKyNkZWZp bmUgSTkxNV9QTVVfRU5FUkdZCQkJX19JOTE1X1BNVV9PVEhFUigyKQorI2RlZmluZSBJOTE1X1BN VV9JTlRFUlJVUFRTCQlfX0k5MTVfUE1VX09USEVSKDMpCisKKyNkZWZpbmUgSTkxNV9QTVVfUkM2 X1JFU0lERU5DWQkJX19JOTE1X1BNVV9PVEhFUig0KQorI2RlZmluZSBJOTE1X1BNVV9SQzZwX1JF U0lERU5DWQkJX19JOTE1X1BNVV9PVEhFUig1KQorI2RlZmluZSBJOTE1X1BNVV9SQzZwcF9SRVNJ REVOQ1kJX19JOTE1X1BNVV9PVEhFUig2KQorCiAvKiBFYWNoIHJlZ2lvbiBpcyBhIG1pbmltdW0g b2YgMTZrLCBhbmQgdGhlcmUgYXJlIGF0IG1vc3QgMjU1IG9mIHRoZW0uCiAgKi8KICNkZWZpbmUg STkxNV9OUl9URVhfUkVHSU9OUyAyNTUJLyogdGFibGUgc2l6ZSAyayAtIG1heGltdW0gZHVlIHRv IHVzZQpkaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2Nv cmUuYwppbmRleCA3ZDM0YmMxNmNhMWMuLjNiNmViMDEzMTIwNCAxMDA2NDQKLS0tIGEva2VybmVs L2V2ZW50cy9jb3JlLmMKKysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKQEAgLTczODIsNiArNzM4 Miw3IEBAIGludCBwZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwK IHsKIAlyZXR1cm4gX19wZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCBkYXRhLCByZWdzKTsK IH0KK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfZXZlbnRfb3ZlcmZsb3cpOwogCiAvKgogICogR2Vu ZXJpYyBzb2Z0d2FyZSBldmVudCBpbmZyYXN0cnVjdHVyZQotLSAKMi45LjQKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=