From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 02/10] drm/i915/pmu: Expose a PMU interface for perf queries Date: Fri, 29 Sep 2017 13:34:52 +0100 Message-ID: <20170929123500.3186-3-tvrtko.ursulin@linux.intel.com> References: <20170929123500.3186-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-wr0-x229.google.com (mail-wr0-x229.google.com [IPv6:2a00:1450:400c:c0c::229]) by gabe.freedesktop.org (Postfix) with ESMTPS id 324386EB66 for ; Fri, 29 Sep 2017 12:35:11 +0000 (UTC) Received: by mail-wr0-x229.google.com with SMTP id l39so2175324wrl.12 for ; Fri, 29 Sep 2017 05:35:10 -0700 (PDT) In-Reply-To: <20170929123500.3186-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 Cc: Peter Zijlstra List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyb206IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpGcm9tOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0 cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgoKVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0 byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCndpdGhvdXQgaGF2aW5n IHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJz CmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwpydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBB cyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQpwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJm YWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5CmFuZCBzZW5kIHRo b3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKRnVuY3Rpb25hbGl0eSB3ZSBhcmUgZXhwb3J0aW5n IHRvIHVzZXJzcGFjZSBpcyB2aWEgdGhlIGV4aXN0aW5nIHBlcmYgUE1VCkFQSSBhbmQgY2FuIGJl IGV4ZXJjaXNlZCB2aWEgdGhlIGV4aXN0aW5nIHRvb2xzLiBGb3IgZXhhbXBsZToKCiAgcGVyZiBz dGF0IC1hIC1lIGk5MTUvcmNzMC1idXN5LyAtSSAxMDAwCgpXaWxsIHByaW50IHRoZSByZW5kZXIg ZW5naW5lIGJ1c3lubmVzIG9uY2UgcGVyIHNlY29uZC4gQWxsIHRoZSBwZXJmb3JtYW5jZQpjb3Vu dGVycyBjYW4gYmUgZW51bWVyYXRlZCAocGVyZiBsaXN0KSBhbmQgaGF2ZSB0aGVpciB1bml0IG9m IG1lYXN1cmUKY29ycmVjdGx5IHJlcG9ydGVkIGluIHN5c2ZzLgoKdjEtdjIgKENocmlzIFdpbHNv bik6Cgp2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOiAo VHZydGtvIFVyc3VsaW4pCiAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBpZHMuCiAq IENvbXBsZXRlIHVBUEkgZGVmaW5lcy4KICogUmVmYWN0b3Igc29tZSBjb2RlIHRvIGhlbHBlcnMg Zm9yIGNsYXJpdHkuCiAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5lcy4KICogRXhwb3Nl IGNvdW50ZXJzIGluIHN5c2ZzLgogKiBQYXNzIGluIGZha2UgcmVncyB0byBhdm9pZCBudWxsIHB0 ciBkZXJlZiBpbiBwZXJmIGNvcmUuCiAqIENvbnZlcnQgdG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4K ICogVXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZy ZXF1ZW5jeS4KCnY0OiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmVnaXN0ZXIgUE1VIHdpdGggLnRh c2tfY3R4X25yPXBlcmZfaW52YWxpZF9jb250ZXh0CiAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUg UE1VIHdpdGggdGhlIHNpbmdsZSBDUFUgaW4gdGhlIG1hc2sKICogUHJvcGVybHkgc3VwcG9ydCBw bXUtPnN0b3AoKTogaXQgc2hvdWxkIGNhbGwgcG11LT5yZWFkKCkKICogUHJvcGVybHkgc3VwcG9y dCBwbXUtPmRlbCgpOiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkK ICogSW50cm9kdWNlIHJlZmNvdW50aW5nIG9mIGV2ZW50IHN1YnNjcmlwdGlvbnMuCiAqIE1ha2Ug cG11LmJ1c3lfc3RhdHMgYSByZWZjb3VudGVyIHRvIGF2b2lkIGJ1c3kgc3RhdHMgZ29pbmcgYXdh eQogICB3aXRoIHNvbWUgZGVsZXRlZCBldmVudC4KICogRXhwb3NlIGNwdW1hc2sgZm9yIGk5MTUg UE1VIHRvIGF2b2lkIG11bHRpcGxlIGV2ZW50cyBjcmVhdGlvbiBvZgogICB0aGUgc2FtZSB0eXBl IGZvbGxvd2VkIGJ5IGNvdW50ZXIgYWdncmVnYXRpb24gYnkgcGVyZi1zdGF0LgogKiBUcmFjayBD UFVzIGdldHRpbmcgb25saW5lL29mZmxpbmUgdG8gbWlncmF0ZSBwZXJmIGNvbnRleHQuIElmIChs aWtlbHkpCiAgIGNwdW1hc2sgd2lsbCBpbml0aWFsbHkgc2V0IENQVTAsIENPTkZJR19CT09UUEFS QU1fSE9UUExVR19DUFUwIHdpbGwgYmUKICAgbmVlZGVkIHRvIHNlZSBlZmZlY3Qgb2YgQ1BVIHN0 YXR1cyB0cmFja2luZy4KICogRW5kIHJlc3VsdCBpcyB0aGF0IG9ubHkgZ2xvYmFsIGV2ZW50cyBh cmUgc3VwcG9ydGVkIGFuZCBwZXJmIHN0YXQKICAgd29ya3MgY29ycmVjdGx5LgogKiBEZW55IHBl cmYgZHJpdmVyIGxldmVsIHNhbXBsaW5nIC0gaXQgaXMgcHJvaGliaXRlZCBmb3IgdW5jb3JlIFBN VS4KCnY1OiAoVHZydGtvIFVyc3VsaW4pCgogKiBEb24ndCBoYXJkY29kZSBudW1iZXIgb2YgZW5n aW5lIHNhbXBsZXJzLgogKiBSZXdyaXRlIGV2ZW50IHJlZi1jb3VudGluZyBmb3IgY29ycmVjdG5l c3MgYW5kIHNpbXBsaWNpdHkuCiAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1ZSB3aGVuIHN0 YXJ0aW5nIGFscmVhZHkgZW5hYmxlZCBldmVudHMKICAgdG8gY29ycmVjdGx5IHJlcG9ydCB2YWx1 ZXMgdG8gYWxsIGxpc3RlbmVycy4KICogRml4IFJDNiByZXNpZGVuY3kgcmVhZG91dC4KICogQ29t bWVudHMsIEdQTCBoZWFkZXIuCgp2NjoKICogQWRkIG1pc3NpbmcgZW50cnkgdG8gdjQgY2hhbmdl bG9nLgogKiBGaXggYWNjb3VudGluZyBpbiBDUFUgaG90cGx1ZyBjYXNlIGJ5IGNvcHlpbmcgdGhl IGFwcHJvYWNoIGZyb20KICAgYXJjaC94ODYvZXZlbnRzL2ludGVsL2NzdGF0ZS5jLiAoRG1pdHJ5 IFJvZ296aGtpbikKCnY3OgogKiBMb2cgZmFpbHVyZSBtZXNzYWdlIG9ubHkgb24gZmFpbHVyZS4K ICogUmVtb3ZlIENQVSBob3RwbHVnIG5vdGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgoK djg6CiAqIEZpeCBlcnJvciB1bndpbmQgb24gZmFpbGVkIHJlZ2lzdHJhdGlvbi4KICogQ2hlY2tw YXRjaCBjbGVhbnVwLgoKdjk6CiAqIERyb3AgdGhlIGVuZXJneSBtZXRyaWMsIGl0IGlzIGF2YWls YWJsZSB2aWEgaW50ZWxfcmFwbF9wZXJmLgogICAoVmlsbGUgU3lyasOkbMOkKQogKiBVc2UgSEFT X1JDNihwKS4gKENocmlzIFdpbHNvbikKICogSGFuZGxlIHVuc3VwcG9ydGVkIG5vbi1lbmdpbmUg ZXZlbnRzLiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmViYXNlIGZvciBpbnRlbF9yYzZfcmVzaWRl bmN5X25zIG5lZWRpbmcgY2FsbGVyIG1hbmFnZWQKICAgcnVudGltZSBwbS4KICogRHJvcCBIQVNf UkM2IGNoZWNrcyBmcm9tIHRoZSByZWFkIGNhbGxiYWNrIHNpbmNlIGNyZWF0aW5nIHRob3NlCiAg IGV2ZW50cyB3aWxsIGJlIHJlamVjdGVkIGF0IGluaXQgdGltZSBhbHJlYWR5LgogKiBBZGQgY291 bnRlciB1bml0cyB0byBzeXNmcyBzbyBwZXJmIHN0YXQgb3V0cHV0IGlzIG5pY2VyLgogKiBDbGVh bnVwIHRoZSBhdHRyaWJ1dGUgdGFibGVzIGZvciBicmV2aXR5IGFuZCByZWFkYWJpbGl0eS4KCnYx MDoKICogRml4ZWQgcXVldWVkIGFjY291bnRpbmcuCgp2MTE6CiAqIE1vdmUgaW50ZWxfZW5naW5l X2xvb2t1cF91c2VyIHRvIGludGVsX2VuZ2luZV9jcy5jCiAqIENvbW1pdCB1cGRhdGUuIChKb29u YXMgTGFodGluZW4pCgp2MTI6CiAqIE1vcmUgYWNjdXJhdGUgc2FtcGxpbmcuIChDaHJpcyBXaWxz b24pCiAqIFN0b3JlIGFuZCByZXBvcnQgZnJlcXVlbmN5IGluIE1IeiBmb3IgYmV0dGVyIHVzYWJp bGl0eSBmcm9tCiAgIHBlcmYgc3RhdC4KICogUmVtb3ZlZCBtZXRyaWNzOiBxdWV1ZWQsIGludGVy cnVwdHMsIHJjNiBjb3VudGVycy4KICogU2FtcGxlIGVuZ2luZSBidXN5bmVzcyBiYXNlZCBvbiBz ZXFubyBkaWZmZXJlbmNlIG9ubHkKICAgZm9yIGxlc3MgTU1JTyAoYW5kIGZvcmNld2FrZSkgb24g YWxsIHBsYXRmb3Jtcy4gKENocmlzIFdpbHNvbikKClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBEbWl0cnkgUm9nb3po a2luIDxkbWl0cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgpDYzogVHZydGtvIFVyc3VsaW4gPHR2 cnRrby51cnN1bGluQGludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2ls c29uLmNvLnVrPgpDYzogRG1pdHJ5IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9nb3poa2luQGludGVs LmNvbT4KQ2M6IFBldGVyIFppamxzdHJhIDxwZXRlcnpAaW5mcmFkZWFkLm9yZz4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggICAgICAgICB8ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Bt dS5jICAgICAgICAgfCA2NTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmggICAgICAgICB8ICA5NiArKysrKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2VuZ2luZV9jcy5jICB8ICAzNSArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5oIHwgIDI2ICsrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAg ICAgICAgICAgfCAgNDggKysrCiA5IGZpbGVzIGNoYW5nZWQsIDg4MyBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmgKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCmluZGV4IDUxODJlM2Q1NTU3ZC4uNWM2MDEzOTYxYjNiIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZQpAQCAtMjYsNiArMjYsNyBAQCBpOTE1LXkgOj0gaTkxNV9kcnYubyBcCiAKIGk5MTUtJChD T05GSUdfQ09NUEFUKSAgICs9IGk5MTVfaW9jMzIubwogaTkxNS0kKENPTkZJR19ERUJVR19GUykg Kz0gaTkxNV9kZWJ1Z2ZzLm8gaW50ZWxfcGlwZV9jcmMubworaTkxNS0kKENPTkZJR19QRVJGX0VW RU5UUykgKz0gaTkxNV9wbXUubwogCiAjIEdFTSBjb2RlCiBpOTE1LXkgKz0gaTkxNV9jbWRfcGFy c2VyLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNTlhYzkxOTliMzVkLi4xODdjMGZh ZDFiNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTIwNCw2ICsxMjA0LDcgQEAgc3Rh dGljIHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKIAogCWk5 MTVfZ2VtX3Nocmlua2VyX2luaXQoZGV2X3ByaXYpOworCWk5MTVfcG11X3JlZ2lzdGVyKGRldl9w cml2KTsKIAogCS8qCiAJICogTm90aWZ5IGEgdmFsaWQgc3VyZmFjZSBhZnRlciBtb2Rlc2V0dGlu ZywKQEAgLTEyNTgsNiArMTI1OSw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3VucmVnaXN0 ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWludGVsX29wcmVnaW9uX3Vu cmVnaXN0ZXIoZGV2X3ByaXYpOwogCiAJaTkxNV9wZXJmX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwor CWk5MTVfcG11X3VucmVnaXN0ZXIoZGV2X3ByaXYpOwogCiAJaTkxNV90ZWFyZG93bl9zeXNmcyhk ZXZfcHJpdik7CiAJaTkxNV9ndWNfbG9nX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKaW5kZXggNWM5MWFkNjI2M2EwLi4xZjNmYTQ2ZTEwZDMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4K ICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4K KyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+ CiAjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9m cy5oPgpAQCAtMjI1Myw2ICsyMjU0LDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCXN0 cnVjdCBwY2lfZGV2ICpicmlkZ2VfZGV2OwogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICprZXJu ZWxfY29udGV4dDsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmVbSTkxNV9OVU1fRU5H SU5FU107CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lX2NsYXNzW01BWF9FTkdJTkVf Q0xBU1MgKyAxXQorCQkJCQkgICAgW01BWF9FTkdJTkVfSU5TVEFOQ0UgKyAxXTsKIAlzdHJ1Y3Qg aTkxNV92bWEgKnNlbWFwaG9yZTsKIAogCXN0cnVjdCBkcm1fZG1hX2hhbmRsZSAqc3RhdHVzX3Bh Z2VfZG1haDsKQEAgLTI3MTUsNiArMjcxOCw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsK IAkJaW50CWlycTsKIAl9IGxwZV9hdWRpbzsKIAorCXN0cnVjdCBpOTE1X3BtdSBwbXU7CisKIAkv KgogCSAqIE5PVEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVm ZiBoZXJlLiBZb3VyIHBhdGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29rIGZv ciBhIGJldHRlciBwbGFjZS4KQEAgLTM5NDMsNiArMzk0OCwxNSBAQCBleHRlcm4gdm9pZCBpOTE1 X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZv aWQgaTkxNV9wZXJmX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 CiBleHRlcm4gdm9pZCBpOTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwogCisvKiBpOTE1X3BtdS5jICovCisjaWZkZWYgQ09ORklHX1BFUkZfRVZF TlRTCit2b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KTsKK3ZvaWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KSB7fQorc3RhdGljIGlubGluZSB2b2lkIGk5MTVfcG11X3Vu cmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpIHt9CisjZW5kaWYKKwogLyog aTkxNV9zdXNwZW5kLmMgKi8KIGV4dGVybiBpbnQgaTkxNV9zYXZlX3N0YXRlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBleHRlcm4gaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9wbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lMTcwZTE5MzU0NzAKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCkBAIC0wLDAg KzEsNjU4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNp bmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5o PgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X3BtdS5oIgorI2luY2x1 ZGUgImludGVsX3JpbmdidWZmZXIuaCIKKworLyogRnJlcXVlbmN5IGZvciB0aGUgc2FtcGxpbmcg dGltZXIgZm9yIGV2ZW50cyB3aGljaCBuZWVkIGl0LiAqLworI2RlZmluZSBGUkVRVUVOQ1kgMjAw CisjZGVmaW5lIFBFUklPRCBtYXhfdCh1NjQsIDEwMDAwLCBOU0VDX1BFUl9TRUMgLyBGUkVRVUVO Q1kpCisKKyNkZWZpbmUgRU5HSU5FX1NBTVBMRV9NQVNLIFwKKwkoQklUKEk5MTVfU0FNUExFX0JV U1kpIHwgXAorCSBCSVQoSTkxNV9TQU1QTEVfV0FJVCkgfCBcCisJIEJJVChJOTE1X1NBTVBMRV9T RU1BKSkKKworI2RlZmluZSBFTkdJTkVfU0FNUExFX0JJVFMgKDEgPDwgSTkxNV9QTVVfU0FNUExF X0JJVFMpCisKK3N0YXRpYyBjcHVtYXNrX3QgaTkxNV9wbXVfY3B1bWFzayA9IENQVV9NQVNLX05P TkU7CisKK3N0YXRpYyB1OCBlbmdpbmVfY29uZmlnX3NhbXBsZSh1NjQgY29uZmlnKQoreworCXJl dHVybiBjb25maWcgJiBJOTE1X1BNVV9TQU1QTEVfTUFTSzsKK30KKworc3RhdGljIHU4IGVuZ2lu ZV9ldmVudF9zYW1wbGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBlbmdp bmVfY29uZmlnX3NhbXBsZShldmVudC0+YXR0ci5jb25maWcpOworfQorCitzdGF0aWMgdTggZW5n aW5lX2V2ZW50X2NsYXNzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gKGV2 ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9DTEFTU19TSElGVCkgJiAweGZmOworfQorCitz dGF0aWMgdTggZW5naW5lX2V2ZW50X2luc3RhbmNlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkK K3sKKwlyZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9TQU1QTEVfQklUUykg JiAweGZmOworfQorCitzdGF0aWMgYm9vbCBpc19lbmdpbmVfY29uZmlnKHU2NCBjb25maWcpCit7 CisJcmV0dXJuIGNvbmZpZyA8IF9fSTkxNV9QTVVfT1RIRVIoMCk7Cit9CisKK3N0YXRpYyB1bnNp Z25lZCBpbnQgY29uZmlnX2VuYWJsZWRfYml0KHU2NCBjb25maWcpCit7CisJaWYgKGlzX2VuZ2lu ZV9jb25maWcoY29uZmlnKSkKKwkJcmV0dXJuIGVuZ2luZV9jb25maWdfc2FtcGxlKGNvbmZpZyk7 CisJZWxzZQorCQlyZXR1cm4gRU5HSU5FX1NBTVBMRV9CSVRTICsgKGNvbmZpZyAtIF9fSTkxNV9Q TVVfT1RIRVIoMCkpOworfQorCitzdGF0aWMgdTY0IGNvbmZpZ19lbmFibGVkX21hc2sodTY0IGNv bmZpZykKK3sKKwlyZXR1cm4gQklUX1VMTChjb25maWdfZW5hYmxlZF9iaXQoY29uZmlnKSk7Cit9 CisKK3N0YXRpYyBib29sIGlzX2VuZ2luZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQp Cit7CisJcmV0dXJuIGlzX2VuZ2luZV9jb25maWcoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKwor c3RhdGljIHVuc2lnbmVkIGludCBldmVudF9lbmFibGVkX2JpdChzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQpCit7CisJcmV0dXJuIGNvbmZpZ19lbmFibGVkX2JpdChldmVudC0+YXR0ci5jb25maWcp OworfQorCitzdGF0aWMgYm9vbCBncmFiX2ZvcmNld2FrZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSwgYm9vbCBmdykKK3sKKwlpZiAoIWZ3KQorCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtl X2dldChpOTE1LCBGT1JDRVdBS0VfQUxMKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMg dm9pZAordXBkYXRlX3NhbXBsZShzdHJ1Y3QgaTkxNV9wbXVfc2FtcGxlICpzYW1wbGUsIHUzMiB1 bml0LCB1MzIgdmFsKQoreworCS8qCisJICogU2luY2Ugd2UgYXJlIGRvaW5nIHN0b2hhc3RpY2Fs IHNhbXBsaW5nIGZvciB0aGVzZSBjb3VudGVyLAorCSAqIGF2ZXJhZ2UgdGhlIGRlbHRhIHdpdGgg dGhlIHByZXZpb3VzIHZhbHVlIGZvciBiZXR0ZXIgYWNjdXJhY3kuCisJICovCisJc2FtcGxlLT5j dXIgKz0gZGl2X3U2NCgodTY0KShzYW1wbGUtPnByZXYgKyB2YWwpICogdW5pdCwgMik7CisJc2Ft cGxlLT5wcmV2ID0gdmFsOworfQorCitzdGF0aWMgdm9pZCBlbmdpbmVzX3NhbXBsZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lOworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOworCWJvb2wgZncgPSBmYWxzZTsKKwor CWlmICgoZGV2X3ByaXYtPnBtdS5lbmFibGUgJiBFTkdJTkVfU0FNUExFX01BU0spID09IDApCisJ CXJldHVybjsKKworCWlmICghZGV2X3ByaXYtPmd0LmF3YWtlKQorCQlyZXR1cm47CisKKwlpZiAo IWludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpCisJCXJldHVybjsKKwor CWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgeworCQl1MzIgY3VycmVudF9z ZXFubyA9IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKKwkJdTMyIGxhc3Rfc2Vxbm8g PSBpbnRlbF9lbmdpbmVfbGFzdF9zdWJtaXQoZW5naW5lKTsKKwkJdTMyIHZhbDsKKworCQl2YWwg PSAhaTkxNV9zZXFub19wYXNzZWQoY3VycmVudF9zZXFubywgbGFzdF9zZXFubyk7CisKKwkJdXBk YXRlX3NhbXBsZSgmZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX0JVU1ldLCBQRVJJT0Qs CisJCQkgICAgICB2YWwpOworCisJCWlmICh2YWwgJiYgKGVuZ2luZS0+cG11LmVuYWJsZSAmCisJ CSAgICAoQklUKEk5MTVfU0FNUExFX1dBSVQpIHwgQklUKEk5MTVfU0FNUExFX1NFTUEpKSkpIHsK KwkJCWZ3ID0gZ3JhYl9mb3JjZXdha2UoZGV2X3ByaXYsIGZ3KTsKKworCQkJdmFsID0gSTkxNV9S RUFEX0ZXKFJJTkdfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSk7CisJCX0gZWxzZSB7CisJCQl2YWwg PSAwOworCQl9CisKKwkJdXBkYXRlX3NhbXBsZSgmZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FN UExFX1dBSVRdLCBQRVJJT0QsCisJCQkgICAgICAhISh2YWwgJiBSSU5HX1dBSVQpKTsKKworCQl1 cGRhdGVfc2FtcGxlKCZlbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfU0VNQV0sIFBFUklP RCwKKwkJCSAgICAgICEhKHZhbCAmIFJJTkdfV0FJVF9TRU1BUEhPUkUpKTsKKwl9CisKKwlpZiAo ZncpCisJCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxM KTsKKworCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKK30KKworc3RhdGljIHZvaWQg ZnJlcXVlbmN5X3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJ aWYgKGRldl9wcml2LT5wbXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJOTE1 X1BNVV9BQ1RVQUxfRlJFUVVFTkNZKSkgeworCQl1MzIgdmFsOworCisJCXZhbCA9IGRldl9wcml2 LT5ycHMuY3VyX2ZyZXE7CisJCWlmIChkZXZfcHJpdi0+Z3QuYXdha2UgJiYKKwkJICAgIGludGVs X3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpIHsKKwkJCXZhbCA9IGludGVsX2dl dF9jYWdmKGRldl9wcml2LAorCQkJCQkgICAgIEk5MTVfUkVBRF9OT1RSQUNFKEdFTjZfUlBTVEFU MSkpOworCQkJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworCQl9CisKKwkJdXBkYXRl X3NhbXBsZSgmZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF0sIDEs CisJCQkgICAgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKSk7CisJfQorCisJaWYgKGRl dl9wcml2LT5wbXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9S RVFVRVNURURfRlJFUVVFTkNZKSkgeworCQl1cGRhdGVfc2FtcGxlKCZkZXZfcHJpdi0+cG11LnNh bXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfUkVRXSwgMSwKKwkJCSAgICAgIGludGVsX2dwdV9mcmVx KGRldl9wcml2LCBkZXZfcHJpdi0+cnBzLmN1cl9mcmVxKSk7CisJfQorfQorCitzdGF0aWMgZW51 bSBocnRpbWVyX3Jlc3RhcnQgaTkxNV9zYW1wbGUoc3RydWN0IGhydGltZXIgKmhydGltZXIpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoaHJ0aW1l ciwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsIHBtdS50aW1lcik7CisKKwlpZiAoaTkxNS0+cG11 LmVuYWJsZSA9PSAwKQorCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwllbmdpbmVzX3Nh bXBsZShpOTE1KTsKKwlmcmVxdWVuY3lfc2FtcGxlKGk5MTUpOworCisJaHJ0aW1lcl9mb3J3YXJk X25vdyhocnRpbWVyLCBuc190b19rdGltZShQRVJJT0QpKTsKKwlyZXR1cm4gSFJUSU1FUl9SRVNU QVJUOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJm X2V2ZW50ICpldmVudCkKK3sKKwlXQVJOX09OKGV2ZW50LT5wYXJlbnQpOworfQorCitzdGF0aWMg aW50IGVuZ2luZV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0 eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisKKwlpZiAoIWludGVsX2VuZ2luZV9sb29rdXBfdXNl cihpOTE1LCBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLAorCQkJCSAgICAgIGVuZ2luZV9ldmVu dF9pbnN0YW5jZShldmVudCkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoZW5naW5l X2V2ZW50X3NhbXBsZShldmVudCkpIHsKKwljYXNlIEk5MTVfU0FNUExFX0JVU1k6CisJY2FzZSBJ OTE1X1NBTVBMRV9XQUlUOgorCQlicmVhazsKKwljYXNlIEk5MTVfU0FNUExFX1NFTUE6CisJCWlm IChJTlRFTF9HRU4oaTkxNSkgPCA2KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IGk5MTVfcG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUs IHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwlpbnQgY3B1LCByZXQ7CisKKwlpZiAoZXZlbnQt PmF0dHIudHlwZSAhPSBldmVudC0+cG11LT50eXBlKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCS8q IHVuc3VwcG9ydGVkIG1vZGVzIGFuZCBmaWx0ZXJzICovCisJaWYgKGV2ZW50LT5hdHRyLnNhbXBs ZV9wZXJpb2QpIC8qIG5vIHNhbXBsaW5nICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGhh c19icmFuY2hfc3RhY2soZXZlbnQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoZXZl bnQtPmNwdSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY3B1ID0gY3B1bWFza19hbnlfYW5k KCZpOTE1X3BtdV9jcHVtYXNrLAorCQkJICAgICAgdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKGV2 ZW50LT5jcHUpKTsKKwlpZiAoY3B1ID49IG5yX2NwdV9pZHMpCisJCXJldHVybiAtRU5PREVWOwor CisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJcmV0ID0gZW5naW5lX2V2ZW50X2lu aXQoZXZlbnQpOworCX0gZWxzZSB7CisJCXJldCA9IDA7CisJCXN3aXRjaCAoZXZlbnQtPmF0dHIu Y29uZmlnKSB7CisJCWNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWToKKwkJCWlmIChJU19W QUxMRVlWSUVXKGk5MTUpIHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCQkJIC8qIFJlcXVpcmVz IGEgbXV0ZXggZm9yIHNhbXBsaW5nISAqLworCQkJCXJldCA9IC1FTk9ERVY7CisJCWNhc2UgSTkx NV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToKKwkJCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA2KQor CQkJCXJldCA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FTk9F TlQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZXZl bnQtPmNwdSA9IGNwdTsKKwlpZiAoIWV2ZW50LT5wYXJlbnQpCisJCWV2ZW50LT5kZXN0cm95ID0g aTkxNV9wbXVfZXZlbnRfZGVzdHJveTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IF9f aTkxNV9wbXVfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlw ZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXU2NCB2YWwgPSAwOworCisJaWYgKGlzX2VuZ2luZV9l dmVudChldmVudCkpIHsKKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCk7 CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCQllbmdpbmUgPSBpbnRlbF9l bmdpbmVfbG9va3VwX3VzZXIoaTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50 KSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisKKwkJaWYgKFdBUk5f T05fT05DRSghZW5naW5lKSkgeworCQkJLyogRG8gbm90aGluZyAqLworCQl9IGVsc2UgeworCQkJ dmFsID0gZW5naW5lLT5wbXUuc2FtcGxlW3NhbXBsZV0uY3VyOworCQl9CisJfSBlbHNlIHsKKwkJ c3dpdGNoIChldmVudC0+YXR0ci5jb25maWcpIHsKKwkJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJF UVVFTkNZOgorCQkJdmFsID0KKwkJCSAgIGRpdl91NjQoaTkxNS0+cG11LnNhbXBsZVtfX0k5MTVf U0FNUExFX0ZSRVFfQUNUXS5jdXIsCisJCQkJICAgRlJFUVVFTkNZKTsKKwkJCWJyZWFrOworCQlj YXNlIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1k6CisJCQl2YWwgPQorCQkJICAgZGl2X3U2 NChpOTE1LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9SRVFdLmN1ciwKKwkJCQkgICBG UkVRVUVOQ1kpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0 aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sK KwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwl1NjQgcHJldiwgbmV3 OworCithZ2FpbjoKKwlwcmV2ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOworCW5l dyA9IF9faTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCk7CisKKwlpZiAobG9jYWw2NF9jbXB4Y2hn KCZod2MtPnByZXZfY291bnQsIHByZXYsIG5ldykgIT0gcHJldikKKwkJZ290byBhZ2FpbjsKKwor CWxvY2FsNjRfYWRkKG5ldyAtIHByZXYsICZldmVudC0+Y291bnQpOworfQorCitzdGF0aWMgdm9p ZCBpOTE1X3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVv ZigqaTkxNSksIHBtdS5iYXNlKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gZXZlbnRfZW5hYmxlZF9i aXQoZXZlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgm aTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogU3RhcnQgdGhlIHNhbXBsaW5nIHRp bWVyIHdoZW4gZW5hYmxpbmcgdGhlIGZpcnN0IGV2ZW50LgorCSAqLworCWlmIChpOTE1LT5wbXUu ZW5hYmxlID09IDApCisJCWhydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmk5MTUtPnBtdS50aW1lciwK KwkJCQkgICAgICAgbnNfdG9fa3RpbWUoUEVSSU9EKSwgMCwKKwkJCQkgICAgICAgSFJUSU1FUl9N T0RFX1JFTF9QSU5ORUQpOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIGJpdG1hc2sgb2YgZW5hYmxl ZCBldmVudHMgYW5kIGluY3JlbWVudAorCSAqIHRoZSBldmVudCByZWZlcmVuY2UgY291bnRlci4K KwkgKi8KKwlHRU1fQlVHX09OKGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOworCUdFTV9CVUdf T04oaTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRdID09IH4wKTsKKwlpOTE1LT5wbXUuZW5hYmxl IHw9IEJJVF9VTEwoYml0KTsKKwlpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0rKzsKKworCS8q CisJICogRm9yIHBlci1lbmdpbmUgZXZlbnRzIHRoZSBiaXRtYXNrIGFuZCByZWZlcmVuY2UgY291 bnRpbmcKKwkgKiBpcyBzdG9yZWQgcGVyIGVuZ2luZS4KKwkgKi8KKwlpZiAoaXNfZW5naW5lX2V2 ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KTsK KwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCisJCWVuZ2luZSA9IGludGVsX2Vu Z2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQp LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsKKwkJR0VNX0JVR19PTigh ZW5naW5lKTsKKwkJZW5naW5lLT5wbXUuZW5hYmxlIHw9IEJJVChzYW1wbGUpOworCisJCUdFTV9C VUdfT04oc2FtcGxlID49IEk5MTVfUE1VX1NBTVBMRV9CSVRTKTsKKwkJR0VNX0JVR19PTihlbmdp bmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSB+MCk7CisJCWVuZ2luZS0+cG11LmVuYWJs ZV9jb3VudFtzYW1wbGVdKys7CisJfQorCisJLyoKKwkgKiBTdG9yZSB0aGUgY3VycmVudCBjb3Vu dGVyIHZhbHVlIHNvIHdlIGNhbiByZXBvcnQgdGhlIGNvcnJlY3QgZGVsdGEKKwkgKiBmb3IgYWxs IGxpc3RlbmVycy4gRXZlbiB3aGVuIHRoZSBldmVudCB3YXMgYWxyZWFkeSBlbmFibGVkIGFuZCBo YXMKKwkgKiBhbiBleGlzdGluZyBub24temVybyB2YWx1ZS4KKwkgKi8KKwlsb2NhbDY0X3NldCgm ZXZlbnQtPmh3LnByZXZfY291bnQsIF9faTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCkpOworCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKK30KKworc3Rh dGljIHZvaWQgaTkxNV9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBt dSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXVuc2lnbmVkIGludCBiaXQgPSBldmVudF9l bmFibGVkX2JpdChldmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworCisJaWYgKGlzX2VuZ2luZV9ldmVudChl dmVudCkpIHsKKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCk7CisJCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCQllbmdpbmUgPSBpbnRlbF9lbmdpbmVf bG9va3VwX3VzZXIoaTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwKKwkJ CQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisJCUdFTV9CVUdfT04oIWVuZ2lu ZSk7CisJCUdFTV9CVUdfT04oc2FtcGxlID49IEk5MTVfUE1VX1NBTVBMRV9CSVRTKTsKKwkJR0VN X0JVR19PTihlbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSAwKTsKKwkJLyoKKwkJ ICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5kIGNsZWFyIHRoZSBlbmFibGVkCisJ CSAqIGJpdG1hc2sgd2hlbiB0aGUgbGFzdCBsaXN0ZW5lciBvbiBhbiBldmVudCBnb2VzIGF3YXku CisJCSAqLworCQlpZiAoLS1lbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSA9PSAwKQor CQkJZW5naW5lLT5wbXUuZW5hYmxlICY9IH5CSVQoc2FtcGxlKTsKKwl9CisKKwlHRU1fQlVHX09O KGJpdCA+PSBJOTE1X1BNVV9NQVNLX0JJVFMpOworCUdFTV9CVUdfT04oaTkxNS0+cG11LmVuYWJs ZV9jb3VudFtiaXRdID09IDApOworCS8qCisJICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291 bnQgYW5kIGNsZWFyIHRoZSBlbmFibGVkCisJICogYml0bWFzayB3aGVuIHRoZSBsYXN0IGxpc3Rl bmVyIG9uIGFuIGV2ZW50IGdvZXMgYXdheS4KKwkgKi8KKwlpZiAoLS1pOTE1LT5wbXUuZW5hYmxl X2NvdW50W2JpdF0gPT0gMCkKKwkJaTkxNS0+cG11LmVuYWJsZSAmPSB+QklUX1VMTChiaXQpOwor CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKK30KKwor c3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50 LCBpbnQgZmxhZ3MpCit7CisJaTkxNV9wbXVfZW5hYmxlKGV2ZW50KTsKKwlldmVudC0+aHcuc3Rh dGUgPSAwOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdG9wKHN0cnVjdCBwZXJm X2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFBFUkZfRUZfVVBEQVRF KQorCQlpOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KTsKKwlpOTE1X3BtdV9kaXNhYmxlKGV2ZW50 KTsKKwlldmVudC0+aHcuc3RhdGUgPSBQRVJGX0hFU19TVE9QUEVEOworfQorCitzdGF0aWMgaW50 IGk5MTVfcG11X2V2ZW50X2FkZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykK K3sKKwlpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQorCQlpOTE1X3BtdV9ldmVudF9zdGFydChl dmVudCwgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2 ZW50X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpOTE1X3Bt dV9ldmVudF9zdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSk7Cit9CisKK3N0YXRpYyBpbnQgaTkx NV9wbXVfZXZlbnRfZXZlbnRfaWR4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaTkxNV9wbXVfZm9ybWF0X3Nob3coc3RydWN0IGRl dmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAq YnVmKQoreworCXN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7CisKKwllYXR0ciA9IGNv bnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIpOworCXJldHVy biBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY2hhciAqKWVhdHRyLT52YXIpOworfQorCisjZGVmaW5l IEk5MTVfUE1VX0ZPUk1BVF9BVFRSKF9uYW1lLCBfY29uZmlnKSBcCisJKCYoKHN0cnVjdCBkZXZf ZXh0X2F0dHJpYnV0ZVtdKSB7IFwKKwkJeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgMDQ0NCwgaTkx NV9wbXVfZm9ybWF0X3Nob3csIE5VTEwpLCBcCisJCSAgLnZhciA9ICh2b2lkICopX2NvbmZpZywg fSBcCisJfSlbMF0uYXR0ci5hdHRyKQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9w bXVfZm9ybWF0X2F0dHJzW10gPSB7CisJSTkxNV9QTVVfRk9STUFUX0FUVFIoaTkxNV9ldmVudGlk LCAiY29uZmlnOjAtMjAiKSwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRy aWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZm9ybWF0X2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSAiZm9y bWF0IiwKKwkuYXR0cnMgPSBpOTE1X3BtdV9mb3JtYXRfYXR0cnMsCit9OworCitzdGF0aWMgc3Np emVfdCBpOTE1X3BtdV9ldmVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkZXZfZXh0 X2F0dHJpYnV0ZSAqZWF0dHI7CisKKwllYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3Qg ZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgImNvbmZpZz0w eCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpZWF0dHItPnZhcik7Cit9CisKKyNkZWZpbmUgSTkxNV9F VkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSBcCisJKCYoKHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0 ZVtdKSB7IFwKKwkJeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgMDQ0NCwgaTkxNV9wbXVfZXZlbnRf c2hvdywgTlVMTCksIFwKKwkJICAudmFyID0gKHZvaWQgKilfY29uZmlnLCB9IFwKKwl9KVswXS5h dHRyLmF0dHIpCisKKyNkZWZpbmUgSTkxNV9FVkVOVF9TVFIoX25hbWUsIF9zdHIpIFwKKwkoJigo c3RydWN0IHBlcmZfcG11X2V2ZW50c19hdHRyW10pIHsgXAorCQl7IC5hdHRyCSAgICAgPSBfX0FU VFIoX25hbWUsIDA0NDQsIHBlcmZfZXZlbnRfc3lzZnNfc2hvdywgTlVMTCksIFwKKwkJICAuaWQJ ICAgICA9IDAsIFwKKwkJICAuZXZlbnRfc3RyID0gX3N0ciwgfSBcCisJfSlbMF0uYXR0ci5hdHRy KQorCisjZGVmaW5lIEk5MTVfRVZFTlQoX25hbWUsIF9jb25maWcsIF91bml0KSBcCisJSTkxNV9F VkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSwgXAorCUk5MTVfRVZFTlRfU1RSKF9uYW1lLnVuaXQs IF91bml0KQorCisjZGVmaW5lIEk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lLCBfY2xhc3MsIF9pbnN0 YW5jZSwgX3NhbXBsZSkgXAorCUk5MTVfRVZFTlRfQVRUUihfbmFtZSwgX19JOTE1X1BNVV9FTkdJ TkUoX2NsYXNzLCBfaW5zdGFuY2UsIF9zYW1wbGUpKSwgXAorCUk5MTVfRVZFTlRfU1RSKF9uYW1l LnVuaXQsICJucyIpCisKKyNkZWZpbmUgSTkxNV9FTkdJTkVfRVZFTlRTKF9uYW1lLCBfY2xhc3Ms IF9pbnN0YW5jZSkgXAorCUk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFuY2UtYnVzeSwg X2NsYXNzLCBfaW5zdGFuY2UsIEk5MTVfU0FNUExFX0JVU1kpLCBcCisJSTkxNV9FTkdJTkVfRVZF TlQoX25hbWUjI19pbnN0YW5jZS1zZW1hLCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9TQU1QTEVf U0VNQSksIFwKKwlJOTE1X0VOR0lORV9FVkVOVChfbmFtZSMjX2luc3RhbmNlLXdhaXQsIF9jbGFz cywgX2luc3RhbmNlLCBJOTE1X1NBTVBMRV9XQUlUKQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0 ZSAqaTkxNV9wbXVfZXZlbnRzX2F0dHJzW10gPSB7CisJSTkxNV9FTkdJTkVfRVZFTlRTKHJjcywg STkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVOVFMoYmNzLCBJ OTE1X0VOR0lORV9DTEFTU19DT1BZLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVOVFModmNzLCBJOTE1 X0VOR0lORV9DTEFTU19WSURFTywgMCksCisJSTkxNV9FTkdJTkVfRVZFTlRTKHZjcywgSTkxNV9F TkdJTkVfQ0xBU1NfVklERU8sIDEpLAorCUk5MTVfRU5HSU5FX0VWRU5UUyh2ZWNzLCBJOTE1X0VO R0lORV9DTEFTU19WSURFT19FTkhBTkNFLCAwKSwKKworCUk5MTVfRVZFTlQoYWN0dWFsLWZyZXF1 ZW5jeSwgICAgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSwgICAgIk1IeiIpLAorCUk5MTVfRVZF TlQocmVxdWVzdGVkLWZyZXF1ZW5jeSwgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWSwgIk1I eiIpLAorCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3Vw IGk5MTVfcG11X2V2ZW50c19hdHRyX2dyb3VwID0geworCS5uYW1lID0gImV2ZW50cyIsCisJLmF0 dHJzID0gaTkxNV9wbXVfZXZlbnRzX2F0dHJzLAorfTsKKworc3RhdGljIHNzaXplX3QKK2k5MTVf cG11X2dldF9hdHRyX2NwdW1hc2soc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXJldHVybiBjcHVtYXBf cHJpbnRfdG9fcGFnZWJ1Zih0cnVlLCBidWYsICZpOTE1X3BtdV9jcHVtYXNrKTsKK30KKworc3Rh dGljIERFVklDRV9BVFRSKGNwdW1hc2ssIDA0NDQsIGk5MTVfcG11X2dldF9hdHRyX2NwdW1hc2ss IE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9jcHVtYXNrX2F0dHJzW10g PSB7CisJJmRldl9hdHRyX2NwdW1hc2suYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVj dCBhdHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwID0geworCS5hdHRy cyA9IGk5MTVfY3B1bWFza19hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmli dXRlX2dyb3VwICppOTE1X3BtdV9hdHRyX2dyb3Vwc1tdID0geworCSZpOTE1X3BtdV9mb3JtYXRf YXR0cl9ncm91cCwKKwkmaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3JvdXAsCisJJmk5MTVfcG11X2Nw dW1hc2tfYXR0cl9ncm91cCwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGk5MTVfcG11X2NwdV9v bmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCit7CisJdW5z aWduZWQgaW50IHRhcmdldDsKKworCXRhcmdldCA9IGNwdW1hc2tfYW55X2FuZCgmaTkxNV9wbXVf Y3B1bWFzaywgJmk5MTVfcG11X2NwdW1hc2spOworCS8qIFNlbGVjdCB0aGUgZmlyc3Qgb25saW5l IENQVSBhcyBhIGRlc2lnbmF0ZWQgcmVhZGVyLiAqLworCWlmICh0YXJnZXQgPj0gbnJfY3B1X2lk cykKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgJmk5MTVfcG11X2NwdW1hc2spOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfY3B1X29mZmxpbmUodW5zaWduZWQgaW50IGNw dSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCit7CisJc3RydWN0IGk5MTVfcG11ICpwbXUgPSBo bGlzdF9lbnRyeV9zYWZlKG5vZGUsIHR5cGVvZigqcG11KSwgbm9kZSk7CisJdW5zaWduZWQgaW50 IHRhcmdldDsKKworCWlmIChjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdShjcHUsICZpOTE1X3Bt dV9jcHVtYXNrKSkgeworCQl0YXJnZXQgPSBjcHVtYXNrX2FueV9idXQodG9wb2xvZ3lfc2libGlu Z19jcHVtYXNrKGNwdSksIGNwdSk7CisJCS8qIE1pZ3JhdGUgZXZlbnRzIGlmIHRoZXJlIGlzIGEg dmFsaWQgdGFyZ2V0ICovCisJCWlmICh0YXJnZXQgPCBucl9jcHVfaWRzKSB7CisJCQljcHVtYXNr X3NldF9jcHUodGFyZ2V0LCAmaTkxNV9wbXVfY3B1bWFzayk7CisJCQlwZXJmX3BtdV9taWdyYXRl X2NvbnRleHQoJnBtdS0+YmFzZSwgY3B1LCB0YXJnZXQpOworCQl9CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3ZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCit7CisJaW50IHJldDsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPD0gMikgeworCQlEUk1f SU5GTygiUE1VIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgR1BVLiIpOworCQlyZXR1cm47CisJfQor CisJcmV0ID0gY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JF X09OTElORSwKKwkJCQkgICAgICAicGVyZi94ODYvaW50ZWwvaTkxNTpvbmxpbmUiLAorCQkJCSAg ICAgIGk5MTVfcG11X2NwdV9vbmxpbmUsCisJCQkJICAgICAgaTkxNV9wbXVfY3B1X29mZmxpbmUp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2hwX3N0YXRlOworCisJcmV0ID0gY3B1aHBfc3RhdGVf YWRkX2luc3RhbmNlKENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9PTkxJTkUsCisJCQkJICAgICAg ICZpOTE1LT5wbXUubm9kZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaHBfaW5zdGFuY2U7CisK KwlpOTE1LT5wbXUuYmFzZS5hdHRyX2dyb3Vwcwk9IGk5MTVfcG11X2F0dHJfZ3JvdXBzOworCWk5 MTUtPnBtdS5iYXNlLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQ7CisJaTkxNS0+ cG11LmJhc2UuZXZlbnRfaW5pdAk9IGk5MTVfcG11X2V2ZW50X2luaXQ7CisJaTkxNS0+cG11LmJh c2UuYWRkCQk9IGk5MTVfcG11X2V2ZW50X2FkZDsKKwlpOTE1LT5wbXUuYmFzZS5kZWwJCT0gaTkx NV9wbXVfZXZlbnRfZGVsOworCWk5MTUtPnBtdS5iYXNlLnN0YXJ0CQk9IGk5MTVfcG11X2V2ZW50 X3N0YXJ0OworCWk5MTUtPnBtdS5iYXNlLnN0b3AJCT0gaTkxNV9wbXVfZXZlbnRfc3RvcDsKKwlp OTE1LT5wbXUuYmFzZS5yZWFkCQk9IGk5MTVfcG11X2V2ZW50X3JlYWQ7CisJaTkxNS0+cG11LmJh c2UuZXZlbnRfaWR4CT0gaTkxNV9wbXVfZXZlbnRfZXZlbnRfaWR4OworCisJc3Bpbl9sb2NrX2lu aXQoJmk5MTUtPnBtdS5sb2NrKTsKKwlocnRpbWVyX2luaXQoJmk5MTUtPnBtdS50aW1lciwgQ0xP Q0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlpOTE1LT5wbXUudGltZXIuZnVuY3Rp b24gPSBpOTE1X3NhbXBsZTsKKwlpOTE1LT5wbXUuZW5hYmxlID0gMDsKKworCXJldCA9IHBlcmZf cG11X3JlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSwgImk5MTUiLCAtMSk7CisJaWYgKHJldCA9PSAw KQorCQlyZXR1cm47CisKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0ID0gTlVMTDsKKworCVdB Uk5fT04oY3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX0FQX1BFUkZfWDg2X1VOQ09S RV9PTkxJTkUsCisJCQkJCSAgICAmaTkxNS0+cG11Lm5vZGUpKTsKKworZXJyX2hwX2luc3RhbmNl OgorCWNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9BUF9QRVJGX1g4Nl9VTkNPUkVfT05M SU5FKTsKKworZXJyX2hwX3N0YXRlOgorCURSTV9OT1RFKCJGYWlsZWQgdG8gcmVnaXN0ZXIgUE1V ISAoZXJyPSVkKVxuIiwgcmV0KTsKK30KKwordm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCWlmICghaTkxNS0+cG11LmJhc2UuZXZlbnRf aW5pdCkKKwkJcmV0dXJuOworCisJV0FSTl9PTihjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2Uo Q1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElORSwKKwkJCQkJICAgICZpOTE1LT5wbXUubm9k ZSkpOworCWNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9BUF9QRVJGX1g4Nl9VTkNPUkVf T05MSU5FKTsKKworCWk5MTUtPnBtdS5lbmFibGUgPSAwOworCisJaHJ0aW1lcl9jYW5jZWwoJmk5 MTUtPnBtdS50aW1lcik7CisKKwlwZXJmX3BtdV91bnJlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSk7 CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w bXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBmODg0ZGQzNDk2 YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmgKQEAg LTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLwor I2lmbmRlZiBfX0k5MTVfUE1VX0hfXworI2RlZmluZSBfX0k5MTVfUE1VX0hfXworCitlbnVtIHsK KwlfX0k5MTVfU0FNUExFX0ZSRVFfQUNUID0gMCwKKwlfX0k5MTVfU0FNUExFX0ZSRVFfUkVRLAor CV9fSTkxNV9OVU1fUE1VX1NBTVBMRVJTCit9OworCisvKioKKyAqIEhvdyBtYW55IGRpZmZlcmVu dCBldmVudHMgd2UgdHJhY2sgaW4gdGhlIGdsb2JhbCBQTVUgbWFzay4KKyAqCisgKiBJdCBpcyBh bHNvIHVzZWQgdG8ga25vdyB0byBuZWVkZWQgbnVtYmVyIG9mIGV2ZW50IHJlZmVyZW5jZSBjb3Vu dGVycy4KKyAqLworI2RlZmluZSBJOTE1X1BNVV9NQVNLX0JJVFMgXAorCSgoMSA8PCBJOTE1X1BN VV9TQU1QTEVfQklUUykgKyBcCisJIChJOTE1X1BNVV9MQVNUICsgMSAtIF9fSTkxNV9QTVVfT1RI RVIoMCkpKQorCitzdHJ1Y3QgaTkxNV9wbXVfc2FtcGxlIHsKKwl1NjQgY3VyOworCXUzMiBwcmV2 OworfTsKKworc3RydWN0IGk5MTVfcG11IHsKKwkvKioKKwkgKiBAbm9kZTogTGlzdCBub2RlIGZv ciBDUFUgaG90cGx1ZyBoYW5kbGluZy4KKwkgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOwor CS8qKgorCSAqIEBiYXNlOiBQTVUgYmFzZS4KKwkgKi8KKwlzdHJ1Y3QgcG11IGJhc2U7CisJLyoq CisJICogQGxvY2s6IExvY2sgcHJvdGVjdGluZyBlbmFibGUgbWFzayBhbmQgcmVmIGNvdW50IGhh bmRsaW5nLgorCSAqLworCXNwaW5sb2NrX3QgbG9jazsKKwkvKioKKwkgKiBAdGltZXI6IFRpbWVy IGZvciBpbnRlcm5hbCBpOTE1IFBNVSBzYW1wbGluZy4KKwkgKi8KKwlzdHJ1Y3QgaHJ0aW1lciB0 aW1lcjsKKwkvKioKKwkgKiBAZW5hYmxlOiBCaXRtYXNrIG9mIGFsbCBjdXJyZW50bHkgZW5hYmxl ZCBldmVudHMuCisJICoKKwkgKiBCaXRzIGFyZSBkZXJpdmVkIGZyb20gdUFQSSBldmVudCBudW1i ZXJzIGluIGEgd2F5IHRoYXQgbG93IDE2IGJpdHMKKwkgKiBjb3JyZXNwb25kIHRvIGVuZ2luZSBl dmVudCBfc2FtcGxlXyBfdHlwZV8gKEk5MTVfU0FNUExFX1FVRVVFRCBpcworCSAqIGJpdCAwKSwg YW5kIGhpZ2hlciBiaXRzIGNvcnJlc3BvbmQgdG8gb3RoZXIgZXZlbnRzIChmb3IgaW5zdGFuY2UK KwkgKiBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZIGlzIGJpdCAxNiBldGMpLgorCSAqCisJICog SW4gb3RoZXIgd29yZHMsIGxvdyAxNiBiaXRzIGFyZSBub3QgcGVyIGVuZ2luZSBidXQgcGVyIGVu Z2luZQorCSAqIHNhbXBsZXIgdHlwZSwgd2hpbGUgdGhlIHVwcGVyIGJpdHMgYXJlIGRpcmVjdGx5 IG1hcHBlZCB0byBvdGhlcgorCSAqIGV2ZW50IHR5cGVzLgorCSAqLworCXU2NCBlbmFibGU7CisJ LyoqCisJICogQGVuYWJsZV9jb3VudDogUmVmZXJlbmNlIGNvdW50cyBmb3IgdGhlIGVuYWJsZWQg ZXZlbnRzLgorCSAqCisJICogQXJyYXkgaW5kaWNlcyBhcmUgbWFwcGVkIGluIHRoZSBzYW1lIHdh eSBhcyBiaXRzIGluIHRoZSBAZW5hYmxlIGZpZWxkCisJICogYW5kIHRoZXkgYXJlIHVzZWQgdG8g Y29udHJvbCBzYW1wbGluZyBvbi9vZmYgd2hlbiBtdWx0aXBsZSBjbGllbnRzCisJICogYXJlIHVz aW5nIHRoZSBQTVUgQVBJLgorCSAqLworCXVuc2lnbmVkIGludCBlbmFibGVfY291bnRbSTkxNV9Q TVVfTUFTS19CSVRTXTsKKwkvKioKKwkgKiBAc2FtcGxlOiBDdXJyZW50IGFuZCBwcmV2aW91cyAo cmF3KSBjb3VudGVycyBmb3Igc2FtcGxpbmcgZXZlbnRzLgorCSAqCisJICogVGhlc2UgY291bnRl cnMgYXJlIHVwZGF0ZWQgZnJvbSB0aGUgaTkxNSBQTVUgc2FtcGxpbmcgdGltZXIuCisJICoKKwkg KiBPbmx5IGdsb2JhbCBjb3VudGVycyBhcmUgaGVsZCBoZXJlLCB3aGlsZSB0aGUgcGVyLWVuZ2lu ZSBvbmVzIGFyZSBpbgorCSAqIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MuCisJICovCisJc3RydWN0 IGk5MTVfcG11X3NhbXBsZSBzYW1wbGVbX19JOTE1X05VTV9QTVVfU0FNUExFUlNdOworfTsKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCBlZTBkNGYxNGFjOTguLjc0YWY3YTYz M2ZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0xODYsNiArMTg2LDkgQEAgc3RhdGlj IGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVmaW5l IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTCTIKICNkZWZpbmUgQ09QWV9FTkdJTkVfQ0xBU1MJMwog I2RlZmluZSBPVEhFUl9DTEFTUwkJNAorI2RlZmluZSBNQVhfRU5HSU5FX0NMQVNTCTQKKworI2Rl ZmluZSBNQVhfRU5HSU5FX0lOU1RBTkNFICAgIDEKIAogLyogUENJIGNvbmZpZyBzcGFjZSAqLwog CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCmluZGV4IGEyOGUyYTg2NGNmMS4u MzVjMTE3YzNmYTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdp bmVfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwpAQCAt MjAwLDYgKzIwMCwxNSBAQCBpbnRlbF9lbmdpbmVfc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAogCUdFTV9CVUdfT04oaW5mby0+Y2xhc3MgPj0gQVJSQVlfU0laRShpbnRl bF9lbmdpbmVfY2xhc3NlcykpOwogCWNsYXNzX2luZm8gPSAmaW50ZWxfZW5naW5lX2NsYXNzZXNb aW5mby0+Y2xhc3NdOwogCisJaWYgKEdFTV9XQVJOX09OKGluZm8tPmNsYXNzID4gTUFYX0VOR0lO RV9DTEFTUykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKEdFTV9XQVJOX09OKGluZm8tPmlu c3RhbmNlID4gTUFYX0VOR0lORV9JTlNUQU5DRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYg KEdFTV9XQVJOX09OKGRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmlu c3RhbmNlXSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJR0VNX0JVR19PTihkZXZfcHJpdi0+ZW5n aW5lW2lkXSk7CiAJZW5naW5lID0ga3phbGxvYyhzaXplb2YoKmVuZ2luZSksIEdGUF9LRVJORUwp OwogCWlmICghZW5naW5lKQpAQCAtMjI3LDYgKzIzNiw3IEBAIGludGVsX2VuZ2luZV9zZXR1cChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAKIAlBVE9NSUNfSU5JVF9OT1RJRklF Ul9IRUFEKCZlbmdpbmUtPmNvbnRleHRfc3RhdHVzX25vdGlmaWVyKTsKIAorCWRldl9wcml2LT5l bmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3RhbmNlXSA9IGVuZ2luZTsKIAlkZXZf cHJpdi0+ZW5naW5lW2lkXSA9IGVuZ2luZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1NzgsNiArMTU4 OCwzMSBAQCBib29sIGludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQogCX0KIH0KIAorc3RhdGljIHU4IHVzZXJfY2xhc3NfbWFwW0k5MTVf RU5HSU5FX0NMQVNTX01BWF0gPSB7CisJW0k5MTVfRU5HSU5FX0NMQVNTX09USEVSXSA9IE9USEVS X0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19SRU5ERVJdID0gUkVOREVSX0NMQVNTLAorCVtJ OTE1X0VOR0lORV9DTEFTU19DT1BZXSA9IENPUFlfRU5HSU5FX0NMQVNTLAorCVtJOTE1X0VOR0lO RV9DTEFTU19WSURFT10gPSBWSURFT19ERUNPREVfQ0xBU1MsCisJW0k5MTVfRU5HSU5FX0NMQVNT X1ZJREVPX0VOSEFOQ0VdID0gVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MsCit9OworCitzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICoKK2ludGVsX2VuZ2luZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xhc3MsIHU4IGluc3RhbmNlKQoreworCWlmIChjbGFzcyA+ PSBBUlJBWV9TSVpFKHVzZXJfY2xhc3NfbWFwKSkKKwkJcmV0dXJuIE5VTEw7CisKKwljbGFzcyA9 IHVzZXJfY2xhc3NfbWFwW2NsYXNzXTsKKworCWlmIChXQVJOX09OX09OQ0UoY2xhc3MgPiBNQVhf RU5HSU5FX0NMQVNTKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoaW5zdGFuY2UgPiBNQVhfRU5H SU5FX0lOU1RBTkNFKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBpOTE1LT5lbmdpbmVfY2xh c3NbY2xhc3NdW2luc3RhbmNlXTsKK30KKwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1 X1NFTEZURVNUKQogI2luY2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5jIgogI2VuZGlmCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKaW5kZXggNTZkN2FlOWYyOThiLi43 ZTA3ZWMxYmZlZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAg LTUsNiArNSw3IEBACiAjaW5jbHVkZSAiaTkxNV9nZW1fYmF0Y2hfcG9vbC5oIgogI2luY2x1ZGUg Imk5MTVfZ2VtX3JlcXVlc3QuaCIKICNpbmNsdWRlICJpOTE1X2dlbV90aW1lbGluZS5oIgorI2lu Y2x1ZGUgImk5MTVfcG11LmgiCiAjaW5jbHVkZSAiaTkxNV9zZWxmdGVzdC5oIgogCiAjZGVmaW5l IEk5MTVfQ01EX0hBU0hfT1JERVIgOQpAQCAtMzMwLDYgKzMzMSwyOCBAQCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzIHsKIAkJSTkxNV9TRUxGVEVTVF9ERUNMQVJFKGJvb2wgbW9jayA6IDEpOwogCX0g YnJlYWRjcnVtYnM7CiAKKwlzdHJ1Y3QgeworCQkvKioKKwkJICogQGVuYWJsZTogQml0bWFzayBv ZiBlbmFibGUgc2FtcGxlIGV2ZW50cyBvbiB0aGlzIGVuZ2luZS4KKwkJICoKKwkJICogQml0cyBj b3JyZXNwb25kIHRvIHNhbXBsZSBldmVudCB0eXBlcywgZm9yIGluc3RhbmNlCisJCSAqIEk5MTVf U0FNUExFX1FVRVVFRCBpcyBiaXQgMCBldGMuCisJCSAqLworCQl1MzIgZW5hYmxlOworCQkvKioK KwkJICogQGVuYWJsZV9jb3VudDogUmVmZXJlbmNlIGNvdW50IGZvciB0aGUgZW5hYmxlZCBzYW1w bGVycy4KKwkJICoKKwkJICogSW5kZXggbnVtYmVyIGNvcnJlc3BvbmRzIHRvIHRoZSBiaXQgbnVt YmVyIGZyb20gQGVuYWJsZS4KKwkJICovCisJCXVuc2lnbmVkIGludCBlbmFibGVfY291bnRbSTkx NV9QTVVfU0FNUExFX0JJVFNdOworCQkvKioKKwkJICogQHNhbXBsZTogQ291bnRlciB2YWx1ZXMg Zm9yIHNhbXBsaW5nIGV2ZW50cy4KKwkJICoKKwkJICogT3VyIGludGVybmFsIHRpbWVyIHN0b3Jl cyB0aGUgY3VycmVudCBjb3VudGVycyBpbiB0aGlzIGZpZWxkLgorCQkgKi8KKwkJc3RydWN0IGk5 MTVfcG11X3NhbXBsZSBzYW1wbGVbSTkxNV9FTkdJTkVfU0FNUExFX01BWF07CisJfSBwbXU7CisK IAkvKgogCSAqIEEgcG9vbCBvZiBvYmplY3RzIHRvIHVzZSBhcyBzaGFkb3cgY29waWVzIG9mIGNs aWVudCBiYXRjaCBidWZmZXJzCiAJICogd2hlbiB0aGUgY29tbWFuZCBwYXJzZXIgaXMgZW5hYmxl ZC4gUHJldmVudHMgdGhlIGNsaWVudCBmcm9tCkBAIC04MzQsNCArODU3LDcgQEAgdm9pZCBpbnRl bF9lbmdpbmVzX3Jlc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSk7CiAKIGJvb2wgaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpOwogCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVs X2VuZ2luZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xh c3MsIHU4IGluc3RhbmNlKTsKKwogI2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVSX0hfICovCmRp ZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJt L2k5MTVfZHJtLmgKaW5kZXggZmUyNWEwMWM4MWYyLi45ZjEzOWY4YWQxOWEgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVf ZHJtLmgKQEAgLTg2LDYgKzg2LDU0IEBAIGVudW0gaTkxNV9tb2NzX3RhYmxlX2luZGV4IHsKIAlJ OTE1X01PQ1NfQ0FDSEVELAogfTsKIAorZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNzIHsK KwlJOTE1X0VOR0lORV9DTEFTU19PVEhFUiA9IDAsCisJSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVS ID0gMSwKKwlJOTE1X0VOR0lORV9DTEFTU19DT1BZID0gMiwKKwlJOTE1X0VOR0lORV9DTEFTU19W SURFTyA9IDMsCisJSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRSA9IDQsCisJSTkxNV9F TkdJTkVfQ0xBU1NfTUFYIC8qIG5vbi1BQkkgKi8KK307CisKKy8qKgorICogRE9DOiBwZXJmX2V2 ZW50cyBleHBvc2VkIGJ5IGk5MTUgdGhyb3VnaCAvc3lzL2J1cy9ldmVudF9zb3VyY2VzL2RyaXZl cnMvaTkxNQorICoKKyAqLworCitlbnVtIGRybV9pOTE1X3BtdV9lbmdpbmVfc2FtcGxlIHsKKwlJ OTE1X1NBTVBMRV9CVVNZID0gMCwKKwlJOTE1X1NBTVBMRV9XQUlUID0gMSwKKwlJOTE1X1NBTVBM RV9TRU1BID0gMiwKKwlJOTE1X0VOR0lORV9TQU1QTEVfTUFYIC8qIG5vbi1BQkkgKi8KK307CisK KyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX0JJVFMgKDQpCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBM RV9NQVNLICgweGYpCisjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRTICg4KQor I2RlZmluZSBJOTE1X1BNVV9DTEFTU19TSElGVCBcCisJKEk5MTVfUE1VX1NBTVBMRV9CSVRTICsg STkxNV9QTVVfU0FNUExFX0lOU1RBTkNFX0JJVFMpCisKKyNkZWZpbmUgX19JOTE1X1BNVV9FTkdJ TkUoY2xhc3MsIGluc3RhbmNlLCBzYW1wbGUpIFwKKwkoKGNsYXNzKSA8PCBJOTE1X1BNVV9DTEFT U19TSElGVCB8IFwKKwkoaW5zdGFuY2UpIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTIHwgXAorCShz YW1wbGUpKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9CVVNZKGNsYXNzLCBpbnN0YW5jZSkg XAorCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVfQlVTWSkK KworI2RlZmluZSBJOTE1X1BNVV9FTkdJTkVfV0FJVChjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5 MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX1dBSVQpCisKKyNkZWZp bmUgSTkxNV9QTVVfRU5HSU5FX1NFTUEoY2xhc3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9F TkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9TRU1BKQorCisjZGVmaW5lIF9fSTkx NV9QTVVfT1RIRVIoeCkgKF9fSTkxNV9QTVVfRU5HSU5FKDB4ZmYsIDB4ZmYsIDB4ZikgKyAxICsg KHgpKQorCisjZGVmaW5lIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kJX19JOTE1X1BNVV9PVEhF UigwKQorI2RlZmluZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZCV9fSTkxNV9QTVVfT1RI RVIoMSkKKworI2RlZmluZSBJOTE1X1BNVV9MQVNUIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVO Q1kKKwogLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDE2aywgYW5kIHRoZXJlIGFyZSBh dCBtb3N0IDI1NSBvZiB0aGVtLgogICovCiAjZGVmaW5lIEk5MTVfTlJfVEVYX1JFR0lPTlMgMjU1 CS8qIHRhYmxlIHNpemUgMmsgLSBtYXhpbXVtIGR1ZSB0byB1c2UKLS0gCjIuOS41CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK