From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC 02/17] drm/i915/pmu: Expose a PMU interface for perf queries Date: Wed, 25 Oct 2017 16:36:17 +0100 Message-ID: <20171025153632.557-3-tvrtko.ursulin@linux.intel.com> References: <20171025153632.557-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-x229.google.com (mail-wm0-x229.google.com [IPv6:2a00:1450:400c:c09::229]) by gabe.freedesktop.org (Postfix) with ESMTPS id 291296E6DA for ; Wed, 25 Oct 2017 15:36:44 +0000 (UTC) Received: by mail-wm0-x229.google.com with SMTP id u138so2679295wmu.5 for ; Wed, 25 Oct 2017 08:36:43 -0700 (PDT) In-Reply-To: <20171025153632.557-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 YWxsIHBsYXRmb3Jtcy4gKENocmlzIFdpbHNvbikKCnYxMzoKICogQ29tbWVudCBzcGVsbGluZywg dXNlIG11bF91MzJfdTMyIHRvIHdvcmsgYXJvdW5kIHBvdGVudGlhbCBHQ0MKICAgaXNzdWUgYW5k IHNvbW5lIGNvZGUgYWxpZ25tZW50IGNoYW5nZXMuIChDaHJpcyBXaWxzb24pCgp2MTQ6CiAqIFJl YmFzZS4KCnYxNToKICogUmViYXNlIGZvciBSUFMgcmVmYWN0b3JpbmcuCgp2MTY6CiAqIFVzZSB0 aGUgZHluYW1pYyBzbG90IGluIHRoZSBDUFUgaG90cGx1ZyBzdGF0ZSBtYWNoaW5lIHNvIHRoYXQg d2UgYXJlCiAgIGZyZWUgdG8gc2V0dXAgb3VyIHN0YXRlIGFzIG11bHRpLWluc3RhbmNlLiBQcmV2 aW91c2x5IHdlIHdlcmUgcmUtdXNpbmcKICAgdGhlIENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9P TkxJTkUgc2xvdCB3aGljaCBpcyBuZWl0aGVyIHVzZWQgYXMKICAgbXVsdGktaW5zdGFuY2UsIG5v ciBvd25lZCBieSBvdXIgZHJpdmVyIHRvIHN0YXJ0IHdpdGguCiAqIFJlZ2lzdGVyIHRoZSBDUFUg aG90cGx1ZyBoYW5kbGVycyBhZnRlciB0aGUgUE1VLCBvdGhlcndpc2UgdGhlIGNhbGxiYWNrCiAg IHdpbGwgZ2V0IGNhbGxlZCBiZWZvcmUgdGhlIFBNVSBpcyBpbml0aWFsaXplZCB3aGljaCBjYW4g ZW5kIHVwIGluCiAgIHBlcmZfcG11X21pZ3JhdGVfY29udGV4dCB3aXRoIGFuIHVuLWluaXRpYWxp emVkIGJhc2UuCiAqIEFkZGVkIHdvcmthcm91bmQgZm9yIGEgcHJvYmFibGUgYnVnIGluIGNwdWhw IGNvcmUuCgp2MTc6CiAqIFJlbW92ZSB3b3JrYXJvdW5kIGZvciB0aGUgY3B1aHAgYnVnLgoKU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ClNpZ25l ZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ClNpZ25l ZC1vZmYtYnk6IERtaXRyeSBSb2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+ CkNjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBEbWl0cnkgUm9nb3poa2luIDxk bWl0cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgpDYzogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBp bmZyYWRlYWQub3JnPgpSZXZpZXdlZC1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxz b24uY28udWs+ICh2MTUpCi0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAg ICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICB8ICAg MyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgIDUgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyAgICAgICAgIHwgNjg4ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5oICAgICAg ICAgfCAxMDQgKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAgICB8 ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyAgfCAgMzUgKysK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8ICAyNiArKwogaW5jbHVk ZS91YXBpL2RybS9pOTE1X2RybS5oICAgICAgICAgICAgIHwgIDQ4ICsrKwogOSBmaWxlcyBjaGFu Z2VkLCA5MTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcG11LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BtdS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA2YzNiMDQ4MWVmODIuLjg1OGNh OTJjZjkxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAgaTkxNS15IDo9 IGk5MTVfZHJ2Lm8gXAogCiBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBpOTE1X2lvYzMyLm8K IGk5MTUtJChDT05GSUdfREVCVUdfRlMpICs9IGk5MTVfZGVidWdmcy5vIGludGVsX3BpcGVfY3Jj Lm8KK2k5MTUtJChDT05GSUdfUEVSRl9FVkVOVFMpICs9IGk5MTVfcG11Lm8KIAogIyBHRU0gY29k ZQogaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmlu ZGV4IDNkYjU4NTE3NTZmMC4uYWFkNjc5Y2MxNWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMK QEAgLTQ4LDYgKzQ4LDcgQEAKIAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaTkx NV90cmFjZS5oIgorI2luY2x1ZGUgImk5MTVfcG11LmgiCiAjaW5jbHVkZSAiaTkxNV92Z3B1Lmgi CiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAjaW5jbHVkZSAiaW50ZWxfdWMuaCIKQEAgLTEyMTYs NiArMTIxNyw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9w cml2LT5kcm07CiAKIAlpOTE1X2dlbV9zaHJpbmtlcl9pbml0KGRldl9wcml2KTsKKwlpOTE1X3Bt dV9yZWdpc3RlcihkZXZfcHJpdik7CiAKIAkvKgogCSAqIE5vdGlmeSBhIHZhbGlkIHN1cmZhY2Ug YWZ0ZXIgbW9kZXNldHRpbmcsCkBAIC0xMjcwLDYgKzEyNzIsNyBAQCBzdGF0aWMgdm9pZCBpOTE1 X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlp bnRlbF9vcHJlZ2lvbl91bnJlZ2lzdGVyKGRldl9wcml2KTsKIAogCWk5MTVfcGVyZl91bnJlZ2lz dGVyKGRldl9wcml2KTsKKwlpOTE1X3BtdV91bnJlZ2lzdGVyKGRldl9wcml2KTsKIAogCWk5MTVf dGVhcmRvd25fc3lzZnMoZGV2X3ByaXYpOwogCWk5MTVfZ3VjX2xvZ191bnJlZ2lzdGVyKGRldl9w cml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGU4NTdmYjg2OTlkYS4uNDZlMjE2MmFj YmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRl IDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRl IDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUg PGxpbnV4L3BtX3Fvcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CiAjaW5jbHVk ZSA8bGludXgvc2htZW1fZnMuaD4KQEAgLTIyODEsNiArMjI4Miw4IEBAIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlIHsKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqa2VybmVsX2NvbnRleHQ7CiAJ LyogQ29udGV4dCBvbmx5IHRvIGJlIHVzZWQgZm9yIGluamVjdGluZyBwcmVlbXB0aW9uIGNvbW1h bmRzICovCiAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKnByZWVtcHRfY29udGV4dDsKKwlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmVfY2xhc3NbTUFYX0VOR0lORV9DTEFTUyArIDFdCisJ CQkJCSAgICBbTUFYX0VOR0lORV9JTlNUQU5DRSArIDFdOwogCXN0cnVjdCBpOTE1X3ZtYSAqc2Vt YXBob3JlOwogCiAJc3RydWN0IGRybV9kbWFfaGFuZGxlICpzdGF0dXNfcGFnZV9kbWFoOwpAQCAt Mjc1MSw2ICsyNzU0LDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCQlpbnQJaXJxOwog CX0gbHBlX2F1ZGlvOwogCisJc3RydWN0IGk5MTVfcG11IHBtdTsKKwogCS8qCiAJICogTk9URTog VGhpcyBpcyB0aGUgZHJpMS91bXMgZHVuZ2VvbiwgZG9uJ3QgYWRkIHN0dWZmIGhlcmUuIFlvdXIg cGF0Y2gKIAkgKiB3aWxsIGJlIHJlamVjdGVkLiBJbnN0ZWFkIGxvb2sgZm9yIGEgYmV0dGVyIHBs YWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi4wMWI1ZWU2N2MxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3BtdS5jCkBAIC0wLDAgKzEsNjg4IEBACisvKgorICogQ29weXJpZ2h0IMKp IDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBU SEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+Cisj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNp bmNsdWRlICJpOTE1X3BtdS5oIgorI2luY2x1ZGUgImludGVsX3JpbmdidWZmZXIuaCIKKworLyog RnJlcXVlbmN5IGZvciB0aGUgc2FtcGxpbmcgdGltZXIgZm9yIGV2ZW50cyB3aGljaCBuZWVkIGl0 LiAqLworI2RlZmluZSBGUkVRVUVOQ1kgMjAwCisjZGVmaW5lIFBFUklPRCBtYXhfdCh1NjQsIDEw MDAwLCBOU0VDX1BFUl9TRUMgLyBGUkVRVUVOQ1kpCisKKyNkZWZpbmUgRU5HSU5FX1NBTVBMRV9N QVNLIFwKKwkoQklUKEk5MTVfU0FNUExFX0JVU1kpIHwgXAorCSBCSVQoSTkxNV9TQU1QTEVfV0FJ VCkgfCBcCisJIEJJVChJOTE1X1NBTVBMRV9TRU1BKSkKKworI2RlZmluZSBFTkdJTkVfU0FNUExF X0JJVFMgKDEgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMpCisKK3N0YXRpYyBjcHVtYXNrX3QgaTkx NV9wbXVfY3B1bWFzayA9IENQVV9NQVNLX05PTkU7CisKK3N0YXRpYyB1OCBlbmdpbmVfY29uZmln X3NhbXBsZSh1NjQgY29uZmlnKQoreworCXJldHVybiBjb25maWcgJiBJOTE1X1BNVV9TQU1QTEVf TUFTSzsKK30KKworc3RhdGljIHU4IGVuZ2luZV9ldmVudF9zYW1wbGUoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQoreworCXJldHVybiBlbmdpbmVfY29uZmlnX3NhbXBsZShldmVudC0+YXR0ci5j b25maWcpOworfQorCitzdGF0aWMgdTggZW5naW5lX2V2ZW50X2NsYXNzKHN0cnVjdCBwZXJmX2V2 ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9D TEFTU19TSElGVCkgJiAweGZmOworfQorCitzdGF0aWMgdTggZW5naW5lX2V2ZW50X2luc3RhbmNl KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZp ZyA+PiBJOTE1X1BNVV9TQU1QTEVfQklUUykgJiAweGZmOworfQorCitzdGF0aWMgYm9vbCBpc19l bmdpbmVfY29uZmlnKHU2NCBjb25maWcpCit7CisJcmV0dXJuIGNvbmZpZyA8IF9fSTkxNV9QTVVf T1RIRVIoMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29uZmlnX2VuYWJsZWRfYml0KHU2 NCBjb25maWcpCit7CisJaWYgKGlzX2VuZ2luZV9jb25maWcoY29uZmlnKSkKKwkJcmV0dXJuIGVu Z2luZV9jb25maWdfc2FtcGxlKGNvbmZpZyk7CisJZWxzZQorCQlyZXR1cm4gRU5HSU5FX1NBTVBM RV9CSVRTICsgKGNvbmZpZyAtIF9fSTkxNV9QTVVfT1RIRVIoMCkpOworfQorCitzdGF0aWMgdTY0 IGNvbmZpZ19lbmFibGVkX21hc2sodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gQklUX1VMTChjb25m aWdfZW5hYmxlZF9iaXQoY29uZmlnKSk7Cit9CisKK3N0YXRpYyBib29sIGlzX2VuZ2luZV9ldmVu dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGlzX2VuZ2luZV9jb25maWco ZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBldmVudF9lbmFi bGVkX2JpdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGNvbmZpZ19lbmFi bGVkX2JpdChldmVudC0+YXR0ci5jb25maWcpOworfQorCitzdGF0aWMgYm9vbCBncmFiX2ZvcmNl d2FrZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgYm9vbCBmdykKK3sKKwlpZiAoIWZ3 KQorCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChpOTE1LCBGT1JDRVdBS0VfQUxMKTsKKwor CXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX3NhbXBsZShzdHJ1Y3QgaTkx NV9wbXVfc2FtcGxlICpzYW1wbGUsIHUzMiB1bml0LCB1MzIgdmFsKQoreworCS8qCisJICogU2lu Y2Ugd2UgYXJlIGRvaW5nIHN0b2NoYXN0aWMgc2FtcGxpbmcgZm9yIHRoZXNlIGNvdW50ZXJzLAor CSAqIGF2ZXJhZ2UgdGhlIGRlbHRhIHdpdGggdGhlIHByZXZpb3VzIHZhbHVlIGZvciBiZXR0ZXIg YWNjdXJhY3kuCisJICovCisJc2FtcGxlLT5jdXIgKz0gZGl2X3U2NChtdWxfdTMyX3UzMihzYW1w bGUtPnByZXYgKyB2YWwsIHVuaXQpLCAyKTsKKwlzYW1wbGUtPnByZXYgPSB2YWw7Cit9CisKK3N0 YXRpYyB2b2lkIGVuZ2luZXNfc2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJZW51bSBpbnRlbF9lbmdp bmVfaWQgaWQ7CisJYm9vbCBmdyA9IGZhbHNlOworCisJaWYgKChkZXZfcHJpdi0+cG11LmVuYWJs ZSAmIEVOR0lORV9TQU1QTEVfTUFTSykgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKCFkZXZfcHJp di0+Z3QuYXdha2UpCisJCXJldHVybjsKKworCWlmICghaW50ZWxfcnVudGltZV9wbV9nZXRfaWZf aW5fdXNlKGRldl9wcml2KSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwg ZGV2X3ByaXYsIGlkKSB7CisJCXUzMiBjdXJyZW50X3NlcW5vID0gaW50ZWxfZW5naW5lX2dldF9z ZXFubyhlbmdpbmUpOworCQl1MzIgbGFzdF9zZXFubyA9IGludGVsX2VuZ2luZV9sYXN0X3N1Ym1p dChlbmdpbmUpOworCQl1MzIgdmFsOworCisJCXZhbCA9ICFpOTE1X3NlcW5vX3Bhc3NlZChjdXJy ZW50X3NlcW5vLCBsYXN0X3NlcW5vKTsKKworCQl1cGRhdGVfc2FtcGxlKCZlbmdpbmUtPnBtdS5z YW1wbGVbSTkxNV9TQU1QTEVfQlVTWV0sCisJCQkgICAgICBQRVJJT0QsIHZhbCk7CisKKwkJaWYg KHZhbCAmJiAoZW5naW5lLT5wbXUuZW5hYmxlICYKKwkJICAgIChCSVQoSTkxNV9TQU1QTEVfV0FJ VCkgfCBCSVQoSTkxNV9TQU1QTEVfU0VNQSkpKSkgeworCQkJZncgPSBncmFiX2ZvcmNld2FrZShk ZXZfcHJpdiwgZncpOworCisJCQl2YWwgPSBJOTE1X1JFQURfRlcoUklOR19DVEwoZW5naW5lLT5t bWlvX2Jhc2UpKTsKKwkJfSBlbHNlIHsKKwkJCXZhbCA9IDA7CisJCX0KKworCQl1cGRhdGVfc2Ft cGxlKCZlbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfV0FJVF0sCisJCQkgICAgICBQRVJJ T0QsICEhKHZhbCAmIFJJTkdfV0FJVCkpOworCisJCXVwZGF0ZV9zYW1wbGUoJmVuZ2luZS0+cG11 LnNhbXBsZVtJOTE1X1NBTVBMRV9TRU1BXSwKKwkJCSAgICAgIFBFUklPRCwgISEodmFsICYgUklO R19XQUlUX1NFTUFQSE9SRSkpOworCX0KKworCWlmIChmdykKKwkJaW50ZWxfdW5jb3JlX2ZvcmNl d2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCisJaW50ZWxfcnVudGltZV9wbV9w dXQoZGV2X3ByaXYpOworfQorCitzdGF0aWMgdm9pZCBmcmVxdWVuY3lfc2FtcGxlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoZGV2X3ByaXYtPnBtdS5lbmFibGUg JgorCSAgICBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kpKSB7 CisJCXUzMiB2YWw7CisKKwkJdmFsID0gZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcTsKKwkJ aWYgKGRldl9wcml2LT5ndC5hd2FrZSAmJgorCQkgICAgaW50ZWxfcnVudGltZV9wbV9nZXRfaWZf aW5fdXNlKGRldl9wcml2KSkgeworCQkJdmFsID0gaW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsCisJ CQkJCSAgICAgSTkxNV9SRUFEX05PVFJBQ0UoR0VONl9SUFNUQVQxKSk7CisJCQlpbnRlbF9ydW50 aW1lX3BtX3B1dChkZXZfcHJpdik7CisJCX0KKworCQl1cGRhdGVfc2FtcGxlKCZkZXZfcHJpdi0+ cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfQUNUXSwKKwkJCSAgICAgIDEsIGludGVsX2dw dV9mcmVxKGRldl9wcml2LCB2YWwpKTsKKwl9CisKKwlpZiAoZGV2X3ByaXYtPnBtdS5lbmFibGUg JgorCSAgICBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kp KSB7CisJCXVwZGF0ZV9zYW1wbGUoJmRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVf RlJFUV9SRVFdLCAxLAorCQkJICAgICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCisJCQkJCSAg ICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcSkpOworCX0KK30KKworc3RhdGljIGVudW0g aHJ0aW1lcl9yZXN0YXJ0IGk5MTVfc2FtcGxlKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQorewor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGhydGltZXIs IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLCBwbXUudGltZXIpOworCisJaWYgKGk5MTUtPnBtdS5l bmFibGUgPT0gMCkKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCisJZW5naW5lc19zYW1w bGUoaTkxNSk7CisJZnJlcXVlbmN5X3NhbXBsZShpOTE1KTsKKworCWhydGltZXJfZm9yd2FyZF9u b3coaHJ0aW1lciwgbnNfdG9fa3RpbWUoUEVSSU9EKSk7CisJcmV0dXJuIEhSVElNRVJfUkVTVEFS VDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9l dmVudCAqZXZlbnQpCit7CisJV0FSTl9PTihldmVudC0+cGFyZW50KTsKK30KKworc3RhdGljIGlu dCBlbmdpbmVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlw ZW9mKCppOTE1KSwgcG11LmJhc2UpOworCisJaWYgKCFpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIo aTkxNSwgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwKKwkJCQkgICAgICBlbmdpbmVfZXZlbnRf aW5zdGFuY2UoZXZlbnQpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGVuZ2luZV9l dmVudF9zYW1wbGUoZXZlbnQpKSB7CisJY2FzZSBJOTE1X1NBTVBMRV9CVVNZOgorCWNhc2UgSTkx NV9TQU1QTEVfV0FJVDoKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1NBTVBMRV9TRU1BOgorCQlpZiAo SU5URUxfR0VOKGk5MTUpIDwgNikKKwkJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBpOTE1X3BtdV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0 eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJaW50IGNwdSwgcmV0OworCisJaWYgKGV2ZW50LT5h dHRyLnR5cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwkvKiB1 bnN1cHBvcnRlZCBtb2RlcyBhbmQgZmlsdGVycyAqLworCWlmIChldmVudC0+YXR0ci5zYW1wbGVf cGVyaW9kKSAvKiBubyBzYW1wbGluZyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChoYXNf YnJhbmNoX3N0YWNrKGV2ZW50KSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGV2ZW50 LT5jcHUgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdSA9IGNwdW1hc2tfYW55X2FuZCgm aTkxNV9wbXVfY3B1bWFzaywKKwkJCSAgICAgIHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayhldmVu dC0+Y3B1KSk7CisJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwor CWlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJCXJldCA9IGVuZ2luZV9ldmVudF9pbml0 KGV2ZW50KTsKKwl9IGVsc2UgeworCQlyZXQgPSAwOworCQlzd2l0Y2ggKGV2ZW50LT5hdHRyLmNv bmZpZykgeworCQljYXNlIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1k6CisJCQlpZiAoSVNfVkFM TEVZVklFVyhpOTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUpKQorCQkJCSAvKiBSZXF1aXJlcyBh IG11dGV4IGZvciBzYW1wbGluZyEgKi8KKwkJCQlyZXQgPSAtRU5PREVWOworCQljYXNlIEk5MTVf UE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1k6CisJCQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNikKKwkJ CQlyZXQgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRU5PRU5U OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWV2ZW50 LT5jcHUgPSBjcHU7CisJaWYgKCFldmVudC0+cGFyZW50KQorCQlldmVudC0+ZGVzdHJveSA9IGk5 MTVfcG11X2V2ZW50X2Rlc3Ryb3k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBfX2k5 MTVfcG11X2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVv ZigqaTkxNSksIHBtdS5iYXNlKTsKKwl1NjQgdmFsID0gMDsKKworCWlmIChpc19lbmdpbmVfZXZl bnQoZXZlbnQpKSB7CisJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpOwor CQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5naW5lID0gaW50ZWxfZW5n aW5lX2xvb2t1cF91c2VyKGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCks CisJCQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOworCisJCWlmIChXQVJOX09O X09OQ0UoIWVuZ2luZSkpIHsKKwkJCS8qIERvIG5vdGhpbmcgKi8KKwkJfSBlbHNlIHsKKwkJCXZh bCA9IGVuZ2luZS0+cG11LnNhbXBsZVtzYW1wbGVdLmN1cjsKKwkJfQorCX0gZWxzZSB7CisJCXN3 aXRjaCAoZXZlbnQtPmF0dHIuY29uZmlnKSB7CisJCWNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFV RU5DWToKKwkJCXZhbCA9CisJCQkgICBkaXZfdTY0KGk5MTUtPnBtdS5zYW1wbGVbX19JOTE1X1NB TVBMRV9GUkVRX0FDVF0uY3VyLAorCQkJCSAgIEZSRVFVRU5DWSk7CisJCQlicmVhazsKKwkJY2Fz ZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZOgorCQkJdmFsID0KKwkJCSAgIGRpdl91NjQo aTkxNS0+cG11LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfUkVRXS5jdXIsCisJCQkJICAgRlJF UVVFTkNZKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGlj IHZvaWQgaTkxNV9wbXVfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJ c3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0IHByZXYsIG5ldzsK KworYWdhaW46CisJcHJldiA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKKwluZXcg PSBfX2k5MTVfcG11X2V2ZW50X3JlYWQoZXZlbnQpOworCisJaWYgKGxvY2FsNjRfY21weGNoZygm aHdjLT5wcmV2X2NvdW50LCBwcmV2LCBuZXcpICE9IHByZXYpCisJCWdvdG8gYWdhaW47CisKKwls b2NhbDY0X2FkZChuZXcgLSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKK30KKworc3RhdGljIHZvaWQg aTkxNV9wbXVfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2Yo Kmk5MTUpLCBwbXUuYmFzZSk7CisJdW5zaWduZWQgaW50IGJpdCA9IGV2ZW50X2VuYWJsZWRfYml0 KGV2ZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmk5 MTUtPnBtdS5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFN0YXJ0IHRoZSBzYW1wbGluZyB0aW1l ciB3aGVuIGVuYWJsaW5nIHRoZSBmaXJzdCBldmVudC4KKwkgKi8KKwlpZiAoaTkxNS0+cG11LmVu YWJsZSA9PSAwKQorCQlocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZpOTE1LT5wbXUudGltZXIsCisJ CQkJICAgICAgIG5zX3RvX2t0aW1lKFBFUklPRCksIDAsCisJCQkJICAgICAgIEhSVElNRVJfTU9E RV9SRUxfUElOTkVEKTsKKworCS8qCisJICogVXBkYXRlIHRoZSBiaXRtYXNrIG9mIGVuYWJsZWQg ZXZlbnRzIGFuZCBpbmNyZW1lbnQKKwkgKiB0aGUgZXZlbnQgcmVmZXJlbmNlIGNvdW50ZXIuCisJ ICovCisJR0VNX0JVR19PTihiaXQgPj0gSTkxNV9QTVVfTUFTS19CSVRTKTsKKwlHRU1fQlVHX09O KGk5MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSA9PSB+MCk7CisJaTkxNS0+cG11LmVuYWJsZSB8 PSBCSVRfVUxMKGJpdCk7CisJaTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRdKys7CisKKwkvKgor CSAqIEZvciBwZXItZW5naW5lIGV2ZW50cyB0aGUgYml0bWFzayBhbmQgcmVmZXJlbmNlIGNvdW50 aW5nCisJICogaXMgc3RvcmVkIHBlciBlbmdpbmUuCisJICovCisJaWYgKGlzX2VuZ2luZV9ldmVu dChldmVudCkpIHsKKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCk7CisJ CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCQllbmdpbmUgPSBpbnRlbF9lbmdp bmVfbG9va3VwX3VzZXIoaTkxNSwKKwkJCQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwK KwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7CisJCUdFTV9CVUdfT04oIWVu Z2luZSk7CisJCWVuZ2luZS0+cG11LmVuYWJsZSB8PSBCSVQoc2FtcGxlKTsKKworCQlHRU1fQlVH X09OKHNhbXBsZSA+PSBJOTE1X1BNVV9TQU1QTEVfQklUUyk7CisJCUdFTV9CVUdfT04oZW5naW5l LT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0gPT0gfjApOworCQllbmdpbmUtPnBtdS5lbmFibGVf Y291bnRbc2FtcGxlXSsrOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIGN1cnJlbnQgY291bnRl ciB2YWx1ZSBzbyB3ZSBjYW4gcmVwb3J0IHRoZSBjb3JyZWN0IGRlbHRhCisJICogZm9yIGFsbCBs aXN0ZW5lcnMuIEV2ZW4gd2hlbiB0aGUgZXZlbnQgd2FzIGFscmVhZHkgZW5hYmxlZCBhbmQgaGFz CisJICogYW4gZXhpc3Rpbmcgbm9uLXplcm8gdmFsdWUuCisJICovCisJbG9jYWw2NF9zZXQoJmV2 ZW50LT5ody5wcmV2X2NvdW50LCBfX2k5MTVfcG11X2V2ZW50X3JlYWQoZXZlbnQpKTsKKworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRp YyB2b2lkIGk5MTVfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUs IHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gZXZlbnRfZW5h YmxlZF9iaXQoZXZlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsKKworCWlmIChpc19lbmdpbmVfZXZlbnQoZXZl bnQpKSB7CisJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpOworCQlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xv b2t1cF91c2VyKGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJCQkJ CQkgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOworCQlHRU1fQlVHX09OKCFlbmdpbmUp OworCQlHRU1fQlVHX09OKHNhbXBsZSA+PSBJOTE1X1BNVV9TQU1QTEVfQklUUyk7CisJCUdFTV9C VUdfT04oZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0gPT0gMCk7CisJCS8qCisJCSAq IERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IGFuZCBjbGVhciB0aGUgZW5hYmxlZAorCQkg KiBiaXRtYXNrIHdoZW4gdGhlIGxhc3QgbGlzdGVuZXIgb24gYW4gZXZlbnQgZ29lcyBhd2F5Lgor CQkgKi8KKwkJaWYgKC0tZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0gPT0gMCkKKwkJ CWVuZ2luZS0+cG11LmVuYWJsZSAmPSB+QklUKHNhbXBsZSk7CisJfQorCisJR0VNX0JVR19PTihi aXQgPj0gSTkxNV9QTVVfTUFTS19CSVRTKTsKKwlHRU1fQlVHX09OKGk5MTUtPnBtdS5lbmFibGVf Y291bnRbYml0XSA9PSAwKTsKKwkvKgorCSAqIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50 IGFuZCBjbGVhciB0aGUgZW5hYmxlZAorCSAqIGJpdG1hc2sgd2hlbiB0aGUgbGFzdCBsaXN0ZW5l ciBvbiBhbiBldmVudCBnb2VzIGF3YXkuCisJICovCisJaWYgKC0taTkxNS0+cG11LmVuYWJsZV9j b3VudFtiaXRdID09IDApCisJCWk5MTUtPnBtdS5lbmFibGUgJj0gfkJJVF9VTEwoYml0KTsKKwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7Cit9CisKK3N0 YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwg aW50IGZsYWdzKQoreworCWk5MTVfcG11X2VuYWJsZShldmVudCk7CisJZXZlbnQtPmh3LnN0YXRl ID0gMDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9l dmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBQRVJGX0VGX1VQREFURSkK KwkJaTkxNV9wbXVfZXZlbnRfcmVhZChldmVudCk7CisJaTkxNV9wbXVfZGlzYWJsZShldmVudCk7 CisJZXZlbnQtPmh3LnN0YXRlID0gUEVSRl9IRVNfU1RPUFBFRDsKK30KKworc3RhdGljIGludCBp OTE1X3BtdV9ldmVudF9hZGQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7 CisJaWYgKGZsYWdzICYgUEVSRl9FRl9TVEFSVCkKKwkJaTkxNV9wbXVfZXZlbnRfc3RhcnQoZXZl bnQsIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVu dF9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7CisJaTkxNV9wbXVf ZXZlbnRfc3RvcChldmVudCwgUEVSRl9FRl9VUERBVEUpOworfQorCitzdGF0aWMgaW50IGk5MTVf cG11X2V2ZW50X2V2ZW50X2lkeChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGk5MTVfcG11X2Zvcm1hdF9zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1 ZikKK3sKKwlzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUgKmVhdHRyOworCisJZWF0dHIgPSBjb250 YWluZXJfb2YoYXR0ciwgc3RydWN0IGRldl9leHRfYXR0cmlidXRlLCBhdHRyKTsKKwlyZXR1cm4g c3ByaW50ZihidWYsICIlc1xuIiwgKGNoYXIgKillYXR0ci0+dmFyKTsKK30KKworI2RlZmluZSBJ OTE1X1BNVV9GT1JNQVRfQVRUUihfbmFtZSwgX2NvbmZpZykgXAorCSgmKChzdHJ1Y3QgZGV2X2V4 dF9hdHRyaWJ1dGVbXSkgeyBcCisJCXsgLmF0dHIgPSBfX0FUVFIoX25hbWUsIDA0NDQsIGk5MTVf cG11X2Zvcm1hdF9zaG93LCBOVUxMKSwgXAorCQkgIC52YXIgPSAodm9pZCAqKV9jb25maWcsIH0g XAorCX0pWzBdLmF0dHIuYXR0cikKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmk5MTVfcG11 X2Zvcm1hdF9hdHRyc1tdID0geworCUk5MTVfUE1VX0ZPUk1BVF9BVFRSKGk5MTVfZXZlbnRpZCwg ImNvbmZpZzowLTIwIiksCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmli dXRlX2dyb3VwIGk5MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwID0geworCS5uYW1lID0gImZvcm1h dCIsCisJLmF0dHJzID0gaTkxNV9wbXVfZm9ybWF0X2F0dHJzLAorfTsKKworc3RhdGljIHNzaXpl X3QgaTkxNV9wbXVfZXZlbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGV2X2V4dF9h dHRyaWJ1dGUgKmVhdHRyOworCisJZWF0dHIgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGRl dl9leHRfYXR0cmlidXRlLCBhdHRyKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICJjb25maWc9MHgl bHhcbiIsICh1bnNpZ25lZCBsb25nKWVhdHRyLT52YXIpOworfQorCisjZGVmaW5lIEk5MTVfRVZF TlRfQVRUUihfbmFtZSwgX2NvbmZpZykgXAorCSgmKChzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGVb XSkgeyBcCisJCXsgLmF0dHIgPSBfX0FUVFIoX25hbWUsIDA0NDQsIGk5MTVfcG11X2V2ZW50X3No b3csIE5VTEwpLCBcCisJCSAgLnZhciA9ICh2b2lkICopX2NvbmZpZywgfSBcCisJfSlbMF0uYXR0 ci5hdHRyKQorCisjZGVmaW5lIEk5MTVfRVZFTlRfU1RSKF9uYW1lLCBfc3RyKSBcCisJKCYoKHN0 cnVjdCBwZXJmX3BtdV9ldmVudHNfYXR0cltdKSB7IFwKKwkJeyAuYXR0cgkgICAgID0gX19BVFRS KF9uYW1lLCAwNDQ0LCBwZXJmX2V2ZW50X3N5c2ZzX3Nob3csIE5VTEwpLCBcCisJCSAgLmlkCSAg ICAgPSAwLCBcCisJCSAgLmV2ZW50X3N0ciA9IF9zdHIsIH0gXAorCX0pWzBdLmF0dHIuYXR0cikK KworI2RlZmluZSBJOTE1X0VWRU5UKF9uYW1lLCBfY29uZmlnLCBfdW5pdCkgXAorCUk5MTVfRVZF TlRfQVRUUihfbmFtZSwgX2NvbmZpZyksIFwKKwlJOTE1X0VWRU5UX1NUUihfbmFtZS51bml0LCBf dW5pdCkKKworI2RlZmluZSBJOTE1X0VOR0lORV9FVkVOVChfbmFtZSwgX2NsYXNzLCBfaW5zdGFu Y2UsIF9zYW1wbGUpIFwKKwlJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9fSTkxNV9QTVVfRU5HSU5F KF9jbGFzcywgX2luc3RhbmNlLCBfc2FtcGxlKSksIFwKKwlJOTE1X0VWRU5UX1NUUihfbmFtZS51 bml0LCAibnMiKQorCisjZGVmaW5lIEk5MTVfRU5HSU5FX0VWRU5UUyhfbmFtZSwgX2NsYXNzLCBf aW5zdGFuY2UpIFwKKwlJOTE1X0VOR0lORV9FVkVOVChfbmFtZSMjX2luc3RhbmNlLWJ1c3ksIF9j bGFzcywgX2luc3RhbmNlLCBJOTE1X1NBTVBMRV9CVVNZKSwgXAorCUk5MTVfRU5HSU5FX0VWRU5U KF9uYW1lIyNfaW5zdGFuY2Utc2VtYSwgX2NsYXNzLCBfaW5zdGFuY2UsIEk5MTVfU0FNUExFX1NF TUEpLCBcCisJSTkxNV9FTkdJTkVfRVZFTlQoX25hbWUjI19pbnN0YW5jZS13YWl0LCBfY2xhc3Ms IF9pbnN0YW5jZSwgSTkxNV9TQU1QTEVfV0FJVCkKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUg Kmk5MTVfcG11X2V2ZW50c19hdHRyc1tdID0geworCUk5MTVfRU5HSU5FX0VWRU5UUyhyY3MsIEk5 MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCksCisJSTkxNV9FTkdJTkVfRVZFTlRTKGJjcywgSTkx NV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCksCisJSTkxNV9FTkdJTkVfRVZFTlRTKHZjcywgSTkxNV9F TkdJTkVfQ0xBU1NfVklERU8sIDApLAorCUk5MTVfRU5HSU5FX0VWRU5UUyh2Y3MsIEk5MTVfRU5H SU5FX0NMQVNTX1ZJREVPLCAxKSwKKwlJOTE1X0VOR0lORV9FVkVOVFModmVjcywgSTkxNV9FTkdJ TkVfQ0xBU1NfVklERU9fRU5IQU5DRSwgMCksCisKKwlJOTE1X0VWRU5UKGFjdHVhbC1mcmVxdWVu Y3ksICAgIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1ksICAgICJNSHoiKSwKKwlJOTE1X0VWRU5U KHJlcXVlc3RlZC1mcmVxdWVuY3ksIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1ksICJNSHoi KSwKKworCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBp OTE1X3BtdV9ldmVudHNfYXR0cl9ncm91cCA9IHsKKwkubmFtZSA9ICJldmVudHMiLAorCS5hdHRy cyA9IGk5MTVfcG11X2V2ZW50c19hdHRycywKK307CisKK3N0YXRpYyBzc2l6ZV90CitpOTE1X3Bt dV9nZXRfYXR0cl9jcHVtYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gY3B1bWFwX3By aW50X3RvX3BhZ2VidWYodHJ1ZSwgYnVmLCAmaTkxNV9wbXVfY3B1bWFzayk7Cit9CisKK3N0YXRp YyBERVZJQ0VfQVRUUihjcHVtYXNrLCAwNDQ0LCBpOTE1X3BtdV9nZXRfYXR0cl9jcHVtYXNrLCBO VUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmk5MTVfY3B1bWFza19hdHRyc1tdID0g eworCSZkZXZfYXR0cl9jcHVtYXNrLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qg YXR0cmlidXRlX2dyb3VwIGk5MTVfcG11X2NwdW1hc2tfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMg PSBpOTE1X2NwdW1hc2tfYXR0cnMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0 ZV9ncm91cCAqaTkxNV9wbXVfYXR0cl9ncm91cHNbXSA9IHsKKwkmaTkxNV9wbXVfZm9ybWF0X2F0 dHJfZ3JvdXAsCisJJmk5MTVfcG11X2V2ZW50c19hdHRyX2dyb3VwLAorCSZpOTE1X3BtdV9jcHVt YXNrX2F0dHJfZ3JvdXAsCisJTlVMTAorfTsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQor c3RhdGljIGludCBpOTE1X3BtdV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBo bGlzdF9ub2RlICpub2RlKQoreworCXN0cnVjdCBpOTE1X3BtdSAqcG11ID0gaGxpc3RfZW50cnlf c2FmZShub2RlLCB0eXBlb2YoKnBtdSksIG5vZGUpOworCXVuc2lnbmVkIGludCB0YXJnZXQ7CisK KwlHRU1fQlVHX09OKCFwbXUtPmJhc2UuZXZlbnRfaW5pdCk7CisKKwl0YXJnZXQgPSBjcHVtYXNr X2FueV9hbmQoJmk5MTVfcG11X2NwdW1hc2ssICZpOTE1X3BtdV9jcHVtYXNrKTsKKwkvKiBTZWxl Y3QgdGhlIGZpcnN0IG9ubGluZSBDUFUgYXMgYSBkZXNpZ25hdGVkIHJlYWRlci4gKi8KKwlpZiAo dGFyZ2V0ID49IG5yX2NwdV9pZHMpCisJCWNwdW1hc2tfc2V0X2NwdShjcHUsICZpOTE1X3BtdV9j cHVtYXNrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfcG11X2NwdV9vZmZs aW5lKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKQoreworCXN0cnVj dCBpOTE1X3BtdSAqcG11ID0gaGxpc3RfZW50cnlfc2FmZShub2RlLCB0eXBlb2YoKnBtdSksIG5v ZGUpOworCXVuc2lnbmVkIGludCB0YXJnZXQ7CisKKwlHRU1fQlVHX09OKCFwbXUtPmJhc2UuZXZl bnRfaW5pdCk7CisKKwlpZiAoY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCAmaTkxNV9w bXVfY3B1bWFzaykpIHsKKwkJdGFyZ2V0ID0gY3B1bWFza19hbnlfYnV0KHRvcG9sb2d5X3NpYmxp bmdfY3B1bWFzayhjcHUpLCBjcHUpOworCQkvKiBNaWdyYXRlIGV2ZW50cyBpZiB0aGVyZSBpcyBh IHZhbGlkIHRhcmdldCAqLworCQlpZiAodGFyZ2V0IDwgbnJfY3B1X2lkcykgeworCQkJY3B1bWFz a19zZXRfY3B1KHRhcmdldCwgJmk5MTVfcG11X2NwdW1hc2spOworCQkJcGVyZl9wbXVfbWlncmF0 ZV9jb250ZXh0KCZwbXUtPmJhc2UsIGNwdSwgdGFyZ2V0KTsKKwkJfQorCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgZW51bSBjcHVocF9zdGF0ZSBjcHVocF9zbG90ID0gQ1BVSFBfSU5WQUxJ RDsKKyNlbmRpZgorCitzdGF0aWMgaW50IGk5MTVfcG11X3JlZ2lzdGVyX2NwdWhwX3N0YXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQ VQorCWVudW0gY3B1aHBfc3RhdGUgc2xvdDsKKwlpbnQgcmV0OworCisJcmV0ID0gY3B1aHBfc2V0 dXBfc3RhdGVfbXVsdGkoQ1BVSFBfQVBfT05MSU5FX0RZTiwKKwkJCQkgICAgICAicGVyZi94ODYv aW50ZWwvaTkxNTpvbmxpbmUiLAorCQkJCSAgICAgIGk5MTVfcG11X2NwdV9vbmxpbmUsCisJCQkJ ICAgICAgaTkxNV9wbXVfY3B1X29mZmxpbmUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0 OworCisJc2xvdCA9IHJldDsKKwlyZXQgPSBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2Uoc2xvdCwg Jmk5MTUtPnBtdS5ub2RlKTsKKwlpZiAocmV0KSB7CisJCWNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0 ZShzbG90KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljcHVocF9zbG90ID0gc2xvdDsKKyNlbmRp ZgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyX2NwdWhw X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworI2lmZGVmIENPTkZJR19I T1RQTFVHX0NQVQorCVdBUk5fT04oY3B1aHBfc2xvdCA9PSBDUFVIUF9JTlZBTElEKTsKKwlXQVJO X09OKGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShjcHVocF9zbG90LCAmaTkxNS0+cG11Lm5v ZGUpKTsKKwljcHVocF9yZW1vdmVfbXVsdGlfc3RhdGUoY3B1aHBfc2xvdCk7CisjZW5kaWYKK30K Kwordm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK K3sKKwlpbnQgcmV0OworCisJaWYgKElOVEVMX0dFTihpOTE1KSA8PSAyKSB7CisJCURSTV9JTkZP KCJQTVUgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBHUFUuIik7CisJCXJldHVybjsKKwl9CisKKwlp OTE1LT5wbXUuYmFzZS5hdHRyX2dyb3Vwcwk9IGk5MTVfcG11X2F0dHJfZ3JvdXBzOworCWk5MTUt PnBtdS5iYXNlLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQ7CisJaTkxNS0+cG11 LmJhc2UuZXZlbnRfaW5pdAk9IGk5MTVfcG11X2V2ZW50X2luaXQ7CisJaTkxNS0+cG11LmJhc2Uu YWRkCQk9IGk5MTVfcG11X2V2ZW50X2FkZDsKKwlpOTE1LT5wbXUuYmFzZS5kZWwJCT0gaTkxNV9w bXVfZXZlbnRfZGVsOworCWk5MTUtPnBtdS5iYXNlLnN0YXJ0CQk9IGk5MTVfcG11X2V2ZW50X3N0 YXJ0OworCWk5MTUtPnBtdS5iYXNlLnN0b3AJCT0gaTkxNV9wbXVfZXZlbnRfc3RvcDsKKwlpOTE1 LT5wbXUuYmFzZS5yZWFkCQk9IGk5MTVfcG11X2V2ZW50X3JlYWQ7CisJaTkxNS0+cG11LmJhc2Uu ZXZlbnRfaWR4CT0gaTkxNV9wbXVfZXZlbnRfZXZlbnRfaWR4OworCisJc3Bpbl9sb2NrX2luaXQo Jmk5MTUtPnBtdS5sb2NrKTsKKwlocnRpbWVyX2luaXQoJmk5MTUtPnBtdS50aW1lciwgQ0xPQ0tf TU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlpOTE1LT5wbXUudGltZXIuZnVuY3Rpb24g PSBpOTE1X3NhbXBsZTsKKworCXJldCA9IHBlcmZfcG11X3JlZ2lzdGVyKCZpOTE1LT5wbXUuYmFz ZSwgImk5MTUiLCAtMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBpOTE1X3Bt dV9yZWdpc3Rlcl9jcHVocF9zdGF0ZShpOTE1KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl91bnJl ZzsKKworCXJldHVybjsKKworZXJyX3VucmVnOgorCXBlcmZfcG11X3VucmVnaXN0ZXIoJmk5MTUt PnBtdS5iYXNlKTsKK2VycjoKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0ID0gTlVMTDsKKwlE Uk1fTk9URSgiRmFpbGVkIHRvIHJlZ2lzdGVyIFBNVSEgKGVycj0lZClcbiIsIHJldCk7Cit9CisK K3ZvaWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK K3sKKwlpZiAoIWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQpCisJCXJldHVybjsKKworCVdBUk5f T04oaTkxNS0+cG11LmVuYWJsZSk7CisKKwlocnRpbWVyX2NhbmNlbCgmaTkxNS0+cG11LnRpbWVy KTsKKworCWk5MTVfcG11X3VucmVnaXN0ZXJfY3B1aHBfc3RhdGUoaTkxNSk7CisKKwlwZXJmX3Bt dV91bnJlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSk7CisJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5p dCA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjFhYzhiMmUzNDYwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK KyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpZm5kZWYgX19JOTE1X1BNVV9IX18KKyNk ZWZpbmUgX19JOTE1X1BNVV9IX18KKworZW51bSB7CisJX19JOTE1X1NBTVBMRV9GUkVRX0FDVCA9 IDAsCisJX19JOTE1X1NBTVBMRV9GUkVRX1JFUSwKKwlfX0k5MTVfTlVNX1BNVV9TQU1QTEVSUwor fTsKKworLyoqCisgKiBIb3cgbWFueSBkaWZmZXJlbnQgZXZlbnRzIHdlIHRyYWNrIGluIHRoZSBn bG9iYWwgUE1VIG1hc2suCisgKgorICogSXQgaXMgYWxzbyB1c2VkIHRvIGtub3cgdG8gbmVlZGVk IG51bWJlciBvZiBldmVudCByZWZlcmVuY2UgY291bnRlcnMuCisgKi8KKyNkZWZpbmUgSTkxNV9Q TVVfTUFTS19CSVRTIFwKKwkoKDEgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMpICsgXAorCSAoSTkx NV9QTVVfTEFTVCArIDEgLSBfX0k5MTVfUE1VX09USEVSKDApKSkKKworc3RydWN0IGk5MTVfcG11 X3NhbXBsZSB7CisJdTY0IGN1cjsKKwl1MzIgcHJldjsKK307CisKK3N0cnVjdCBpOTE1X3BtdSB7 CisJLyoqCisJICogQG5vZGU6IExpc3Qgbm9kZSBmb3IgQ1BVIGhvdHBsdWcgaGFuZGxpbmcuCisJ ICovCisJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKKwkvKioKKwkgKiBAYmFzZTogUE1VIGJhc2Uu CisJICovCisJc3RydWN0IHBtdSBiYXNlOworCS8qKgorCSAqIEBsb2NrOiBMb2NrIHByb3RlY3Rp bmcgZW5hYmxlIG1hc2sgYW5kIHJlZiBjb3VudCBoYW5kbGluZy4KKwkgKi8KKwlzcGlubG9ja190 IGxvY2s7CisJLyoqCisJICogQHRpbWVyOiBUaW1lciBmb3IgaW50ZXJuYWwgaTkxNSBQTVUgc2Ft cGxpbmcuCisJICovCisJc3RydWN0IGhydGltZXIgdGltZXI7CisJLyoqCisJICogQGVuYWJsZTog Qml0bWFzayBvZiBhbGwgY3VycmVudGx5IGVuYWJsZWQgZXZlbnRzLgorCSAqCisJICogQml0cyBh cmUgZGVyaXZlZCBmcm9tIHVBUEkgZXZlbnQgbnVtYmVycyBpbiBhIHdheSB0aGF0IGxvdyAxNiBi aXRzCisJICogY29ycmVzcG9uZCB0byBlbmdpbmUgZXZlbnQgX3NhbXBsZV8gX3R5cGVfIChJOTE1 X1NBTVBMRV9RVUVVRUQgaXMKKwkgKiBiaXQgMCksIGFuZCBoaWdoZXIgYml0cyBjb3JyZXNwb25k IHRvIG90aGVyIGV2ZW50cyAoZm9yIGluc3RhbmNlCisJICogSTkxNV9QTVVfQUNUVUFMX0ZSRVFV RU5DWSBpcyBiaXQgMTYgZXRjKS4KKwkgKgorCSAqIEluIG90aGVyIHdvcmRzLCBsb3cgMTYgYml0 cyBhcmUgbm90IHBlciBlbmdpbmUgYnV0IHBlciBlbmdpbmUKKwkgKiBzYW1wbGVyIHR5cGUsIHdo aWxlIHRoZSB1cHBlciBiaXRzIGFyZSBkaXJlY3RseSBtYXBwZWQgdG8gb3RoZXIKKwkgKiBldmVu dCB0eXBlcy4KKwkgKi8KKwl1NjQgZW5hYmxlOworCS8qKgorCSAqIEBlbmFibGVfY291bnQ6IFJl ZmVyZW5jZSBjb3VudHMgZm9yIHRoZSBlbmFibGVkIGV2ZW50cy4KKwkgKgorCSAqIEFycmF5IGlu ZGljZXMgYXJlIG1hcHBlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYml0cyBpbiB0aGUgQGVuYWJsZSBm aWVsZAorCSAqIGFuZCB0aGV5IGFyZSB1c2VkIHRvIGNvbnRyb2wgc2FtcGxpbmcgb24vb2ZmIHdo ZW4gbXVsdGlwbGUgY2xpZW50cworCSAqIGFyZSB1c2luZyB0aGUgUE1VIEFQSS4KKwkgKi8KKwl1 bnNpZ25lZCBpbnQgZW5hYmxlX2NvdW50W0k5MTVfUE1VX01BU0tfQklUU107CisJLyoqCisJICog QHNhbXBsZTogQ3VycmVudCBhbmQgcHJldmlvdXMgKHJhdykgY291bnRlcnMgZm9yIHNhbXBsaW5n IGV2ZW50cy4KKwkgKgorCSAqIFRoZXNlIGNvdW50ZXJzIGFyZSB1cGRhdGVkIGZyb20gdGhlIGk5 MTUgUE1VIHNhbXBsaW5nIHRpbWVyLgorCSAqCisJICogT25seSBnbG9iYWwgY291bnRlcnMgYXJl IGhlbGQgaGVyZSwgd2hpbGUgdGhlIHBlci1lbmdpbmUgb25lcyBhcmUgaW4KKwkgKiBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzLgorCSAqLworCXN0cnVjdCBpOTE1X3BtdV9zYW1wbGUgc2FtcGxlW19f STkxNV9OVU1fUE1VX1NBTVBMRVJTXTsKK307CisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMK K3ZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwor dm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsK KyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9wbXVfdW5yZWdp c3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30KKyNlbmRpZgorCisjZW5kaWYK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IGYxMzhlYWU4MmJmMC4uNTAzYThiN2E3NWEwIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTE4Niw2ICsxODYsOSBAQCBzdGF0aWMgaW5saW5l IGJvb2wgaTkxNV9tbWlvX3JlZ192YWxpZChpOTE1X3JlZ190IHJlZykKICNkZWZpbmUgVklERU9f RU5IQU5DRU1FTlRfQ0xBU1MJMgogI2RlZmluZSBDT1BZX0VOR0lORV9DTEFTUwkzCiAjZGVmaW5l IE9USEVSX0NMQVNTCQk0CisjZGVmaW5lIE1BWF9FTkdJTkVfQ0xBU1MJNAorCisjZGVmaW5lIE1B WF9FTkdJTkVfSU5TVEFOQ0UgICAgMQogCiAvKiBQQ0kgY29uZmlnIHNwYWNlICovCiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKaW5kZXggYWI1YmY0ZTJlMjhlLi5kMGQyMTI1 ZDBkZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCkBAIC0yMDMsNiAr MjAzLDE1IEBAIGludGVsX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCiAJR0VNX0JVR19PTihpbmZvLT5jbGFzcyA+PSBBUlJBWV9TSVpFKGludGVsX2VuZ2lu ZV9jbGFzc2VzKSk7CiAJY2xhc3NfaW5mbyA9ICZpbnRlbF9lbmdpbmVfY2xhc3Nlc1tpbmZvLT5j bGFzc107CiAKKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+Y2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNT KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+aW5zdGFuY2Ug PiBNQVhfRU5HSU5FX0lOU1RBTkNFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoR0VNX1dB Uk5fT04oZGV2X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11baW5mby0+aW5zdGFuY2Vd KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlHRU1fQlVHX09OKGRldl9wcml2LT5lbmdpbmVbaWRd KTsKIAllbmdpbmUgPSBremFsbG9jKHNpemVvZigqZW5naW5lKSwgR0ZQX0tFUk5FTCk7CiAJaWYg KCFlbmdpbmUpCkBAIC0yMzAsNiArMjM5LDcgQEAgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAogCUFUT01JQ19JTklUX05PVElGSUVSX0hFQUQo JmVuZ2luZS0+Y29udGV4dF9zdGF0dXNfbm90aWZpZXIpOwogCisJZGV2X3ByaXYtPmVuZ2luZV9j bGFzc1tpbmZvLT5jbGFzc11baW5mby0+aW5zdGFuY2VdID0gZW5naW5lOwogCWRldl9wcml2LT5l bmdpbmVbaWRdID0gZW5naW5lOwogCXJldHVybiAwOwogfQpAQCAtMTc4NCw2ICsxNzk0LDMxIEBA IHZvaWQgaW50ZWxfZW5naW5lX2R1bXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBz dHJ1Y3QgZHJtX3ByaW50ZXIgKm0pCiAJZHJtX3ByaW50ZihtLCAiXG4iKTsKIH0KIAorc3RhdGlj IHU4IHVzZXJfY2xhc3NfbWFwW0k5MTVfRU5HSU5FX0NMQVNTX01BWF0gPSB7CisJW0k5MTVfRU5H SU5FX0NMQVNTX09USEVSXSA9IE9USEVSX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19SRU5E RVJdID0gUkVOREVSX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19DT1BZXSA9IENPUFlfRU5H SU5FX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19WSURFT10gPSBWSURFT19ERUNPREVfQ0xB U1MsCisJW0k5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0VdID0gVklERU9fRU5IQU5DRU1F TlRfQ0xBU1MsCit9OworCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVsX2VuZ2luZV9s b29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xhc3MsIHU4IGlu c3RhbmNlKQoreworCWlmIChjbGFzcyA+PSBBUlJBWV9TSVpFKHVzZXJfY2xhc3NfbWFwKSkKKwkJ cmV0dXJuIE5VTEw7CisKKwljbGFzcyA9IHVzZXJfY2xhc3NfbWFwW2NsYXNzXTsKKworCWlmIChX QVJOX09OX09OQ0UoY2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKSkKKwkJcmV0dXJuIE5VTEw7CisK KwlpZiAoaW5zdGFuY2UgPiBNQVhfRU5HSU5FX0lOU1RBTkNFKQorCQlyZXR1cm4gTlVMTDsKKwor CXJldHVybiBpOTE1LT5lbmdpbmVfY2xhc3NbY2xhc3NdW2luc3RhbmNlXTsKK30KKwogI2lmIElT X0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQogI2luY2x1ZGUgInNlbGZ0ZXN0cy9t b2NrX2VuZ2luZS5jIgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVy LmgKaW5kZXggNmE0MmVkNjE4YTI4Li43NmQyYjc1ZjQ4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAiaTkxNV9nZW1f YmF0Y2hfcG9vbC5oIgogI2luY2x1ZGUgImk5MTVfZ2VtX3JlcXVlc3QuaCIKICNpbmNsdWRlICJp OTE1X2dlbV90aW1lbGluZS5oIgorI2luY2x1ZGUgImk5MTVfcG11LmgiCiAjaW5jbHVkZSAiaTkx NV9zZWxmdGVzdC5oIgogCiBzdHJ1Y3QgZHJtX3ByaW50ZXI7CkBAIC0zNDUsNiArMzQ2LDI4IEBA IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgewogCQlJOTE1X1NFTEZURVNUX0RFQ0xBUkUoYm9vbCBt b2NrIDogMSk7CiAJfSBicmVhZGNydW1iczsKIAorCXN0cnVjdCB7CisJCS8qKgorCQkgKiBAZW5h YmxlOiBCaXRtYXNrIG9mIGVuYWJsZSBzYW1wbGUgZXZlbnRzIG9uIHRoaXMgZW5naW5lLgorCQkg KgorCQkgKiBCaXRzIGNvcnJlc3BvbmQgdG8gc2FtcGxlIGV2ZW50IHR5cGVzLCBmb3IgaW5zdGFu Y2UKKwkJICogSTkxNV9TQU1QTEVfUVVFVUVEIGlzIGJpdCAwIGV0Yy4KKwkJICovCisJCXUzMiBl bmFibGU7CisJCS8qKgorCQkgKiBAZW5hYmxlX2NvdW50OiBSZWZlcmVuY2UgY291bnQgZm9yIHRo ZSBlbmFibGVkIHNhbXBsZXJzLgorCQkgKgorCQkgKiBJbmRleCBudW1iZXIgY29ycmVzcG9uZHMg dG8gdGhlIGJpdCBudW1iZXIgZnJvbSBAZW5hYmxlLgorCQkgKi8KKwkJdW5zaWduZWQgaW50IGVu YWJsZV9jb3VudFtJOTE1X1BNVV9TQU1QTEVfQklUU107CisJCS8qKgorCQkgKiBAc2FtcGxlOiBD b3VudGVyIHZhbHVlcyBmb3Igc2FtcGxpbmcgZXZlbnRzLgorCQkgKgorCQkgKiBPdXIgaW50ZXJu YWwgdGltZXIgc3RvcmVzIHRoZSBjdXJyZW50IGNvdW50ZXJzIGluIHRoaXMgZmllbGQuCisJCSAq LworCQlzdHJ1Y3QgaTkxNV9wbXVfc2FtcGxlIHNhbXBsZVtJOTE1X0VOR0lORV9TQU1QTEVfTUFY XTsKKwl9IHBtdTsKKwogCS8qCiAJICogQSBwb29sIG9mIG9iamVjdHMgdG8gdXNlIGFzIHNoYWRv dyBjb3BpZXMgb2YgY2xpZW50IGJhdGNoIGJ1ZmZlcnMKIAkgKiB3aGVuIHRoZSBjb21tYW5kIHBh cnNlciBpcyBlbmFibGVkLiBQcmV2ZW50cyB0aGUgY2xpZW50IGZyb20KQEAgLTg3Myw0ICs4OTYs NyBAQCBib29sIGludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKTsKIAogdm9pZCBpbnRlbF9lbmdpbmVfZHVtcChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsIHN0cnVjdCBkcm1fcHJpbnRlciAqcCk7CiAKK3N0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKgoraW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1LCB1OCBjbGFzcywgdTggaW5zdGFuY2UpOworCiAjZW5kaWYgLyogX0lOVEVMX1JJ TkdCVUZGRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBi L2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAppbmRleCAxMjViZGU3ZDk1MDQuLmQzNWFmOWZm NjM1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1 ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaApAQCAtODYsNiArODYsNTQgQEAgZW51bSBpOTE1X21vY3Nf dGFibGVfaW5kZXggewogCUk5MTVfTU9DU19DQUNIRUQsCiB9OwogCitlbnVtIGRybV9pOTE1X2dl bV9lbmdpbmVfY2xhc3MgeworCUk5MTVfRU5HSU5FX0NMQVNTX09USEVSID0gMCwKKwlJOTE1X0VO R0lORV9DTEFTU19SRU5ERVIgPSAxLAorCUk5MTVfRU5HSU5FX0NMQVNTX0NPUFkgPSAyLAorCUk5 MTVfRU5HSU5FX0NMQVNTX1ZJREVPID0gMywKKwlJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhB TkNFID0gNCwKKwlJOTE1X0VOR0lORV9DTEFTU19NQVggLyogbm9uLUFCSSAqLworfTsKKworLyoq CisgKiBET0M6IHBlcmZfZXZlbnRzIGV4cG9zZWQgYnkgaTkxNSB0aHJvdWdoIC9zeXMvYnVzL2V2 ZW50X3NvdXJjZXMvZHJpdmVycy9pOTE1CisgKgorICovCisKK2VudW0gZHJtX2k5MTVfcG11X2Vu Z2luZV9zYW1wbGUgeworCUk5MTVfU0FNUExFX0JVU1kgPSAwLAorCUk5MTVfU0FNUExFX1dBSVQg PSAxLAorCUk5MTVfU0FNUExFX1NFTUEgPSAyLAorCUk5MTVfRU5HSU5FX1NBTVBMRV9NQVggLyog bm9uLUFCSSAqLworfTsKKworI2RlZmluZSBJOTE1X1BNVV9TQU1QTEVfQklUUyAoNCkKKyNkZWZp bmUgSTkxNV9QTVVfU0FNUExFX01BU0sgKDB4ZikKKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX0lO U1RBTkNFX0JJVFMgKDgpCisjZGVmaW5lIEk5MTVfUE1VX0NMQVNTX1NISUZUIFwKKwkoSTkxNV9Q TVVfU0FNUExFX0JJVFMgKyBJOTE1X1BNVV9TQU1QTEVfSU5TVEFOQ0VfQklUUykKKworI2RlZmlu ZSBfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIHNhbXBsZSkgXAorCSgoY2xhc3Mp IDw8IEk5MTVfUE1VX0NMQVNTX1NISUZUIHwgXAorCShpbnN0YW5jZSkgPDwgSTkxNV9QTVVfU0FN UExFX0JJVFMgfCBcCisJKHNhbXBsZSkpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX0JVU1ko Y2xhc3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJ OTE1X1NBTVBMRV9CVVNZKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9XQUlUKGNsYXNzLCBp bnN0YW5jZSkgXAorCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1Q TEVfV0FJVCkKKworI2RlZmluZSBJOTE1X1BNVV9FTkdJTkVfU0VNQShjbGFzcywgaW5zdGFuY2Up IFwKKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX1NFTUEp CisKKyNkZWZpbmUgX19JOTE1X1BNVV9PVEhFUih4KSAoX19JOTE1X1BNVV9FTkdJTkUoMHhmZiwg MHhmZiwgMHhmKSArIDEgKyAoeCkpCisKKyNkZWZpbmUgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5D WQlfX0k5MTVfUE1VX09USEVSKDApCisjZGVmaW5lIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVO Q1kJX19JOTE1X1BNVV9PVEhFUigxKQorCisjZGVmaW5lIEk5MTVfUE1VX0xBU1QgSTkxNV9QTVVf UkVRVUVTVEVEX0ZSRVFVRU5DWQorCiAvKiBFYWNoIHJlZ2lvbiBpcyBhIG1pbmltdW0gb2YgMTZr LCBhbmQgdGhlcmUgYXJlIGF0IG1vc3QgMjU1IG9mIHRoZW0uCiAgKi8KICNkZWZpbmUgSTkxNV9O Ul9URVhfUkVHSU9OUyAyNTUJLyogdGFibGUgc2l6ZSAyayAtIG1heGltdW0gZHVlIHRvIHVzZQot LSAKMi45LjUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=