From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: [PATCH v2 4/9] drm/amdkfd: Add the events module Date: Sun, 10 May 2015 12:28:27 +0300 Message-ID: <1431250112-28828-5-git-send-email-oded.gabbay@gmail.com> References: <1431250112-28828-1-git-send-email-oded.gabbay@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-oi0-f43.google.com (mail-oi0-f43.google.com [209.85.218.43]) by gabe.freedesktop.org (Postfix) with ESMTP id 07F666E1BC for ; Sun, 10 May 2015 02:29:04 -0700 (PDT) Received: by oica37 with SMTP id a37so85966273oic.0 for ; Sun, 10 May 2015 02:29:03 -0700 (PDT) In-Reply-To: <1431250112-28828-1-git-send-email-oded.gabbay@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Andrew Lewycky , Oded Gabbay List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIHRoZSBldmVudHMgbW9kdWxlIChrZmRfZXZlbnRzLmMpIGFuZCB0aGUg aW50ZXJydXB0CmhhbmRsZSBtb2R1bGUgZm9yIEthdmVyaSAoY2lrX2V2ZW50X2ludGVycnVwdC5j KS4KClRoZSBwYXRjaCB1cGRhdGVzIHRoZSBpbnRlcnJ1cHRfaXNfd2FudGVkKCksIHNvIHRoYXQg aXQgbm93IGNhbGxzIHRoZQppbnRlcnJ1cHQgaXNyIGZ1bmN0aW9uIHNwZWNpZmljIGZvciB0aGUg ZGV2aWNlIHRoYXQgcmVjZWl2ZWQgdGhlCmludGVycnVwdC4gVGhhdCBmdW5jdGlvbihpbXBsZW1l bnRlZCBpbiBjaWtfZXZlbnRfaW50ZXJydXB0LmMpCnJldHVybnMgd2hldGhlciB0aGlzIGludGVy cnVwdCBpcyBvZiBpbnRlcmVzdCB0byB1cyBvciBub3QuCgpUaGUgcGF0Y2ggYWxzbyB1cGRhdGVz IHRoZSBpbnRlcnJ1cHRfd3EoKSwgc28gdGhhdCBpdCBub3cgY2FsbHMgdGhlCmRldmljZSdzIHNw ZWNpZmljIHdxIGZ1bmN0aW9uLCB3aGljaCBjaGVja3MgdGhlIGludGVycnVwdCBzb3VyY2UKYW5k IHRyaWVzIHRvIHNpZ25hbCByZWxldmFudCBldmVudHMuCgp2MjoKCkluY3JlYXNlIGxpbWl0IG9m IHNpZ25hbCBldmVudHMgdG8gNDA5NiBwZXIgcHJvY2VzcwpSZW1vdmUgYml0ZmllbGRzIGZyb20g c3RydWN0IGNpa19paF9yaW5nX2VudHJ5ClJlbmFtZSByYWRlb25fa2ZkX2V2ZW50X21tYXAgdG8g a2ZkX2V2ZW50X21tYXAKQWRkIGRlYnVnIHByaW50cyB0byBhbGxvY2F0ZV9mcmVlX3Nsb3QgYW5k IGFsbG9jYXRlX3NpZ25hbF9wYWdlCk1ha2UgYWxsb2NhdGVfZXZlbnRfbm90aWZpY2F0aW9uX3Ns b3QgcmV0dXJuIGEgY29ycmVjdCB2YWx1ZQpBZGQgd2FybmluZyBwcmludHMgdG8gY3JlYXRlX3Np Z25hbF9ldmVudApSZW1vdmUgZXJyb3IgcHJpbnQgZnJvbSBJT0NUTCBwYXRoClJlZm9ybWF0dGVk IGRlYnVnIHByaW50cyBpbiBrZmRfZXZlbnRfbW1hcApNYXAgY29ycmVjdCBzaXplIChhcyByZWNl aXZlZCBmcm9tIG1tYXApIGluIGtmZF9ldmVudF9tbWFwCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcg TGV3eWNreSA8QW5kcmV3Lkxld3lja3lAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTogT2RlZCBHYWJi YXkgPG9kZWQuZ2FiYmF5QGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQv TWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtm ZC9jaWtfZXZlbnRfaW50ZXJydXB0LmMgfCAgNjMgKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k a2ZkL2Npa19pbnQuaCAgICAgICAgICAgICB8ICA0MCArKwogZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRrZmQva2ZkX2NoYXJkZXYuYyAgICAgICAgIHwgIDE2ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGtmZC9rZmRfZGV2aWNlLmMgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRrZmQva2ZkX2V2ZW50cy5jICAgICAgICAgIHwgNzg4ICsrKysrKysrKysrKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZXZlbnRzLmggICAgICAgICAgfCAg NzYgKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfaW50ZXJydXB0LmMgICAgICAg fCAgMTEgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcml2LmggICAgICAgICAg ICB8ICA0NyArKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3MuYyAgICAg ICAgIHwgIDI0ICsKIDEwIGZpbGVzIGNoYW5nZWQsIDEwNjMgaW5zZXJ0aW9ucygrKSwgNSBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9j aWtfZXZlbnRfaW50ZXJydXB0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGtmZC9jaWtfaW50LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGtmZC9rZmRfZXZlbnRzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGtmZC9rZmRfZXZlbnRzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGtmZC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxl CmluZGV4IGNkMDljMDUuLjY1MmQyNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1ka2ZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxl CkBAIC0xMiw2ICsxMiw2IEBAIGFtZGtmZC15CTo9IGtmZF9tb2R1bGUubyBrZmRfZGV2aWNlLm8g a2ZkX2NoYXJkZXYubyBrZmRfdG9wb2xvZ3kubyBcCiAJCWtmZF9rZXJuZWxfcXVldWVfdmkubyBr ZmRfcGFja2V0X21hbmFnZXIubyBcCiAJCWtmZF9wcm9jZXNzX3F1ZXVlX21hbmFnZXIubyBrZmRf ZGV2aWNlX3F1ZXVlX21hbmFnZXIubyBcCiAJCWtmZF9kZXZpY2VfcXVldWVfbWFuYWdlcl9jaWsu byBrZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXJfdmkubyBcCi0JCWtmZF9pbnRlcnJ1cHQubworCQlr ZmRfaW50ZXJydXB0Lm8ga2ZkX2V2ZW50cy5vIGNpa19ldmVudF9pbnRlcnJ1cHQubwogCiBvYmot JChDT05GSUdfSFNBX0FNRCkJKz0gYW1ka2ZkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1ka2ZkL2Npa19ldmVudF9pbnRlcnJ1cHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1ka2ZkL2Npa19ldmVudF9pbnRlcnJ1cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42Mjk1MTBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRrZmQvY2lrX2V2ZW50X2ludGVycnVwdC5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5 cmlnaHQgMjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi ZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRI T1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisg Ki8KKworI2luY2x1ZGUgImtmZF9wcml2LmgiCisjaW5jbHVkZSAia2ZkX2V2ZW50cy5oIgorI2lu Y2x1ZGUgImNpa19pbnQuaCIKKworc3RhdGljIGJvb2wgY2lrX2V2ZW50X2ludGVycnVwdF9pc3Io c3RydWN0IGtmZF9kZXYgKmRldiwKKwkJCQkJY29uc3QgdWludDMyX3QgKmloX3JpbmdfZW50cnkp Cit7CisJdW5zaWduZWQgaW50IHBhc2lkOworCWNvbnN0IHN0cnVjdCBjaWtfaWhfcmluZ19lbnRy eSAqaWhyZSA9CisJCQkoY29uc3Qgc3RydWN0IGNpa19paF9yaW5nX2VudHJ5ICopaWhfcmluZ19l bnRyeTsKKworCXBhc2lkID0gKGlocmUtPnJpbmdfaWQgJiAweGZmZmYwMDAwKSA+PiAxNjsKKwor CS8qIERvIG5vdCBwcm9jZXNzIGluIElTUiwganVzdCByZXF1ZXN0IGl0IHRvIGJlIGZvcndhcmRl ZCB0byBXUS4gKi8KKwlyZXR1cm4gKHBhc2lkICE9IDApICYmCisJCShpaHJlLT5zb3VyY2VfaWQg PT0gQ0lLX0lOVFNSQ19DUF9FTkRfT0ZfUElQRSB8fAorCQlpaHJlLT5zb3VyY2VfaWQgPT0gQ0lL X0lOVFNSQ19TUV9JTlRFUlJVUFRfTVNHKTsKK30KKworc3RhdGljIHZvaWQgY2lrX2V2ZW50X2lu dGVycnVwdF93cShzdHJ1Y3Qga2ZkX2RldiAqZGV2LAorCQkJCQljb25zdCB1aW50MzJfdCAqaWhf cmluZ19lbnRyeSkKK3sKKwl1bnNpZ25lZCBpbnQgcGFzaWQ7CisJY29uc3Qgc3RydWN0IGNpa19p aF9yaW5nX2VudHJ5ICppaHJlID0KKwkJCShjb25zdCBzdHJ1Y3QgY2lrX2loX3JpbmdfZW50cnkg KilpaF9yaW5nX2VudHJ5OworCisJcGFzaWQgPSAoaWhyZS0+cmluZ19pZCAmIDB4ZmZmZjAwMDAp ID4+IDE2OworCisJaWYgKHBhc2lkID09IDApCisJCXJldHVybjsKKworCWlmIChpaHJlLT5zb3Vy Y2VfaWQgPT0gQ0lLX0lOVFNSQ19DUF9FTkRfT0ZfUElQRSkKKwkJa2ZkX3NpZ25hbF9ldmVudF9p bnRlcnJ1cHQocGFzaWQsIDAsIDApOworCWVsc2UgaWYgKGlocmUtPnNvdXJjZV9pZCA9PSBDSUtf SU5UU1JDX1NRX0lOVEVSUlVQVF9NU0cpCisJCWtmZF9zaWduYWxfZXZlbnRfaW50ZXJydXB0KHBh c2lkLCBpaHJlLT5kYXRhICYgMHhGRiwgOCk7Cit9CisKK2NvbnN0IHN0cnVjdCBrZmRfZXZlbnRf aW50ZXJydXB0X2NsYXNzIGV2ZW50X2ludGVycnVwdF9jbGFzc19jaWsgPSB7CisJLmludGVycnVw dF9pc3IgPSBjaWtfZXZlbnRfaW50ZXJydXB0X2lzciwKKwkuaW50ZXJydXB0X3dxID0gY2lrX2V2 ZW50X2ludGVycnVwdF93cSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGtmZC9jaWtfaW50LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9jaWtfaW50LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlZjllMgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2Npa19pbnQuaApAQCAtMCwwICsxLDQwIEBA CisvKgorICogQ29weXJpZ2h0IDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xE RVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisg KiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhF IFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgSFNBX1JBREVPTl9DSUtfSU5UX0hfSU5DTFVERUQK KyNkZWZpbmUgSFNBX1JBREVPTl9DSUtfSU5UX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+CisKK3N0cnVjdCBjaWtfaWhfcmluZ19lbnRyeSB7CisJdWludDMyX3Qgc291cmNl X2lkOworCXVpbnQzMl90IGRhdGE7CisJdWludDMyX3QgcmluZ19pZDsKKwl1aW50MzJfdCByZXNl cnZlZDsKK307CisKKyNkZWZpbmUgQ0lLX0lOVFNSQ19ERVFVRVVFX0NPTVBMRVRFCTB4QzYKKyNk ZWZpbmUgQ0lLX0lOVFNSQ19DUF9FTkRfT0ZfUElQRQkweEI1CisjZGVmaW5lIENJS19JTlRTUkNf U1FfSU5URVJSVVBUX01TRwkweEVGCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRr ZmQva2ZkX2NoYXJkZXYuYwppbmRleCA5OTMzYjJlLi42ZGQ4OTQ4IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMKQEAgLTI4OSw4ICsyODksMTAgQEAgc3RhdGljIGlu dCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IGtmZF9w cm9jZXNzICpwLAogCiAJYXJncy0+cXVldWVfaWQgPSBxdWV1ZV9pZDsKIAorCiAJLyogUmV0dXJu IGdwdV9pZCBhcyBkb29yYmVsbCBvZmZzZXQgZm9yIG1tYXAgdXNhZ2UgKi8KLQlhcmdzLT5kb29y YmVsbF9vZmZzZXQgPSBhcmdzLT5ncHVfaWQgPDwgUEFHRV9TSElGVDsKKwlhcmdzLT5kb29yYmVs bF9vZmZzZXQgPSAoS0ZEX01NQVBfRE9PUkJFTExfTUFTSyB8IGFyZ3MtPmdwdV9pZCk7CisJYXJn cy0+ZG9vcmJlbGxfb2Zmc2V0IDw8PSBQQUdFX1NISUZUOwogCiAJbXV0ZXhfdW5sb2NrKCZwLT5t dXRleCk7CiAKQEAgLTY4NCw1ICs2ODYsMTUgQEAgc3RhdGljIGludCBrZmRfbW1hcChzdHJ1Y3Qg ZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJaWYgKElTX0VSUihwcm9j ZXNzKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJvY2Vzcyk7CiAKLQlyZXR1cm4ga2ZkX2Rvb3JiZWxs X21tYXAocHJvY2Vzcywgdm1hKTsKKwlpZiAoKHZtYS0+dm1fcGdvZmYgJiBLRkRfTU1BUF9ET09S QkVMTF9NQVNLKSA9PQorCQkJS0ZEX01NQVBfRE9PUkJFTExfTUFTSykgeworCQl2bWEtPnZtX3Bn b2ZmID0gdm1hLT52bV9wZ29mZiBeIEtGRF9NTUFQX0RPT1JCRUxMX01BU0s7CisJCXJldHVybiBr ZmRfZG9vcmJlbGxfbW1hcChwcm9jZXNzLCB2bWEpOworCX0gZWxzZSBpZiAoKHZtYS0+dm1fcGdv ZmYgJiBLRkRfTU1BUF9FVkVOVFNfTUFTSykgPT0KKwkJCUtGRF9NTUFQX0VWRU5UU19NQVNLKSB7 CisJCXZtYS0+dm1fcGdvZmYgPSB2bWEtPnZtX3Bnb2ZmIF4gS0ZEX01NQVBfRVZFTlRTX01BU0s7 CisJCXJldHVybiBrZmRfZXZlbnRfbW1hcChwcm9jZXNzLCB2bWEpOworCX0KKworCXJldHVybiAt RUZBVUxUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2Rl dmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZS5jCmluZGV4IDEz YzMwYTAuLjRjMDMxNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tm ZF9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMK QEAgLTM0LDYgKzM0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZmRfZGV2aWNlX2luZm8ga2F2 ZXJpX2RldmljZV9pbmZvID0gewogCS5hc2ljX2ZhbWlseSA9IENISVBfS0FWRVJJLAogCS5tYXhf cGFzaWRfYml0cyA9IDE2LAogCS5paF9yaW5nX2VudHJ5X3NpemUgPSA0ICogc2l6ZW9mKHVpbnQz Ml90KSwKKwkuZXZlbnRfaW50ZXJydXB0X2NsYXNzID0gJmV2ZW50X2ludGVycnVwdF9jbGFzc19j aWssCiAJLm1xZF9zaXplX2FsaWduZWQgPSBNUURfU0laRV9BTElHTkVECiB9OwogCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZXZlbnRzLmMgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGtmZC9rZmRfZXZlbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZDM2ZmZiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1ka2ZkL2tmZF9ldmVudHMuYwpAQCAtMCwwICsxLDc4OCBAQAorLyoKKyAqIENvcHlyaWdodCAy MDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1 ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0 d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBB UklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisj aW5jbHVkZSA8bGludXgvbW1fdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUg PGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4 L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlICJrZmRfcHJpdi5o IgorI2luY2x1ZGUgImtmZF9ldmVudHMuaCIKKworLyoKKyAqIEEgdGFzayBjYW4gb25seSBiZSBv biBhIHNpbmdsZSB3YWl0X3F1ZXVlIGF0IGEgdGltZSwgYnV0IHdlIG5lZWQgdG8gc3VwcG9ydAor ICogd2FpdGluZyBvbiBtdWx0aXBsZSBldmVudHMgKGFueS9hbGwpLgorICogSW5zdGVhZCBvZiBl YWNoIGV2ZW50IHNpbXBseSBoYXZpbmcgYSB3YWl0X3F1ZXVlIHdpdGggc2xlZXBpbmcgdGFza3Ms IGl0CisgKiBoYXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgb2YgdGFza3MuCisgKiBBIHRocmVhZCB0 aGF0IHdhbnRzIHRvIHNsZWVwIGNyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlc2UsIG9uZSBmb3IgZWFj aCBldmVudAorICogYW5kIGFkZHMgb25lIHRvIGVhY2ggZXZlbnQncyB3YWl0ZXIgY2hhaW4uCisg Ki8KK3N0cnVjdCBrZmRfZXZlbnRfd2FpdGVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHdhaXRlcnM7 CisJc3RydWN0IHRhc2tfc3RydWN0ICpzbGVlcGluZ190YXNrOworCisJLyogVHJhbnNpdGlvbnMg dG8gdHJ1ZSB3aGVuIHRoZSBldmVudCB0aGlzIGJlbG9uZ3MgdG8gaXMgc2lnbmFsZWQuICovCisJ Ym9vbCBhY3RpdmF0ZWQ7Cit9OworCisvKgorICogT3Zlci1jb21wbGljYXRlZCBwb29sZWQgYWxs b2NhdG9yIGZvciBldmVudCBub3RpZmljYXRpb24gc2xvdHMuCisgKgorICogRWFjaCBzaWduYWwg ZXZlbnQgbmVlZHMgYSA2NC1iaXQgc2lnbmFsIHNsb3Qgd2hlcmUgdGhlIHNpZ25hbGVyIHdpbGwg d3JpdGUKKyAqIGEgMSBiZWZvcmUgc2VuZGluZyBhbiBpbnRlcnJ1cHQubCAoVGhpcyBpcyBuZWVk ZWQgYmVjYXVzZSBzb21lIGludGVycnVwdHMKKyAqIGRvIG5vdCBjb250YWluIGVub3VnaCBzcGFy ZSBkYXRhIGJpdHMgdG8gaWRlbnRpZnkgYW4gZXZlbnQuKQorICogV2UgZ2V0IHdob2xlIHBhZ2Vz IGZyb20gdm1hbGxvYyBhbmQgbWFwIHRoZW0gdG8gdGhlIHByb2Nlc3MgVkEuCisgKiBJbmRpdmlk dWFsIHNpZ25hbCBldmVudHMgYXJlIHRoZW4gYWxsb2NhdGVkIGEgc2xvdCBpbiBhIHBhZ2UuCisg Ki8KKworc3RydWN0IHNpZ25hbF9wYWdlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X3BhZ2Vz OwkvKiBrZmRfcHJvY2Vzcy5zaWduYWxfZXZlbnRfcGFnZXMgKi8KKwl1aW50NjRfdCAqa2VybmVs X2FkZHJlc3M7CisJdWludDY0X3QgX191c2VyICp1c2VyX2FkZHJlc3M7CisJdWludDMyX3QgcGFn ZV9pbmRleDsJCS8qIEluZGV4IGludG8gdGhlIG1tYXAgYXBlcnR1cmUuICovCisJdW5zaWduZWQg aW50IGZyZWVfc2xvdHM7CisJdW5zaWduZWQgbG9uZyB1c2VkX3Nsb3RfYml0bWFwWzBdOworfTsK KworI2RlZmluZSBTTE9UU19QRVJfUEFHRSBLRkRfU0lHTkFMX0VWRU5UX0xJTUlUCisjZGVmaW5l IFNMT1RfQklUTUFQX1NJWkUgQklUU19UT19MT05HUyhTTE9UU19QRVJfUEFHRSkKKyNkZWZpbmUg QklUU19QRVJfUEFHRSAoaWxvZzIoU0xPVFNfUEVSX1BBR0UpKzEpCisjZGVmaW5lIFNJR05BTF9Q QUdFX1NJWkUgKHNpemVvZihzdHJ1Y3Qgc2lnbmFsX3BhZ2UpICsgXAorCQkJCVNMT1RfQklUTUFQ X1NJWkUgKiBzaXplb2YobG9uZykpCisKKy8qCisgKiBGb3Igc2lnbmFsIGV2ZW50cywgdGhlIGV2 ZW50IElEIGlzIHVzZWQgYXMgdGhlIGludGVycnVwdCB1c2VyIGRhdGEuCisgKiBGb3IgU1Egc19z ZW5kbXNnIGludGVycnVwdHMsIHRoaXMgaXMgbGltaXRlZCB0byA4IGJpdHMuCisgKi8KKworI2Rl ZmluZSBJTlRFUlJVUFRfREFUQV9CSVRTIDEyCisjZGVmaW5lIFNJR05BTF9FVkVOVF9JRF9TTE9U X1NISUZUIDAKKworc3RhdGljIHVpbnQ2NF90ICpwYWdlX3Nsb3RzKHN0cnVjdCBzaWduYWxfcGFn ZSAqcGFnZSkKK3sKKwlyZXR1cm4gcGFnZS0+a2VybmVsX2FkZHJlc3M7Cit9CisKK3N0YXRpYyBi b29sIGFsbG9jYXRlX2ZyZWVfc2xvdChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3MsCisJCQkJ c3RydWN0IHNpZ25hbF9wYWdlICoqb3V0X3BhZ2UsCisJCQkJdW5zaWduZWQgaW50ICpvdXRfc2xv dF9pbmRleCkKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3BhZ2UgKnBhZ2U7CisKKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KHBhZ2UsICZwcm9jZXNzLT5zaWduYWxfZXZlbnRfcGFnZXMsIGV2ZW50X3BhZ2VzKSB7 CisJCWlmIChwYWdlLT5mcmVlX3Nsb3RzID4gMCkgeworCQkJdW5zaWduZWQgaW50IHNsb3QgPQor CQkJCWZpbmRfZmlyc3RfemVyb19iaXQocGFnZS0+dXNlZF9zbG90X2JpdG1hcCwKKwkJCQkJCQlT TE9UU19QRVJfUEFHRSk7CisKKwkJCV9fc2V0X2JpdChzbG90LCBwYWdlLT51c2VkX3Nsb3RfYml0 bWFwKTsKKwkJCXBhZ2UtPmZyZWVfc2xvdHMtLTsKKworCQkJcGFnZV9zbG90cyhwYWdlKVtzbG90 XSA9IFVOU0lHTkFMRURfRVZFTlRfU0xPVDsKKworCQkJKm91dF9wYWdlID0gcGFnZTsKKwkJCSpv dXRfc2xvdF9pbmRleCA9IHNsb3Q7CisKKwkJCXByX2RlYnVnKCJhbGxvY2F0ZWQgZXZlbnQgc2ln bmFsIHNsb3QgaW4gcGFnZSAlcCwgc2xvdCAlZFxuIiwKKwkJCQkJcGFnZSwgc2xvdCk7CisKKwkJ CXJldHVybiB0cnVlOworCQl9CisJfQorCisJcHJfZGVidWcoIk5vIGZyZWUgZXZlbnQgc2lnbmFs IHNsb3RzIHdlcmUgZm91bmQgZm9yIHByb2Nlc3MgJXBcbiIsCisJCQlwcm9jZXNzKTsKKworCXJl dHVybiBmYWxzZTsKK30KKworI2RlZmluZSBsaXN0X3RhaWxfZW50cnkoaGVhZCwgdHlwZSwgbWVt YmVyKSBcCisJbGlzdF9lbnRyeSgoaGVhZCktPnByZXYsIHR5cGUsIG1lbWJlcikKKworc3RhdGlj IGJvb2wgYWxsb2NhdGVfc2lnbmFsX3BhZ2Uoc3RydWN0IGZpbGUgKmRldmtmZCwgc3RydWN0IGtm ZF9wcm9jZXNzICpwKQoreworCXZvaWQgKmJhY2tpbmdfc3RvcmU7CisJc3RydWN0IHNpZ25hbF9w YWdlICpwYWdlOworCisJcGFnZSA9IGt6YWxsb2MoU0lHTkFMX1BBR0VfU0laRSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFwYWdlKQorCQlnb3RvIGZhaWxfYWxsb2Nfc2lnbmFsX3BhZ2U7CisKKwlwYWdl LT5mcmVlX3Nsb3RzID0gU0xPVFNfUEVSX1BBR0U7CisKKwliYWNraW5nX3N0b3JlID0gKHZvaWQg KilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFiYWNraW5nX3N0b3JlKQorCQln b3RvIGZhaWxfYWxsb2Nfc2lnbmFsX3N0b3JlOworCisJLyogcHJldmVudCB1c2VyLW1vZGUgaW5m byBsZWFrcyAqLworCW1lbXNldChiYWNraW5nX3N0b3JlLCAodWludDhfdCkgVU5TSUdOQUxFRF9F VkVOVF9TTE9ULCBQQUdFX1NJWkUpOworCXBhZ2UtPmtlcm5lbF9hZGRyZXNzID0gYmFja2luZ19z dG9yZTsKKworCWlmIChsaXN0X2VtcHR5KCZwLT5zaWduYWxfZXZlbnRfcGFnZXMpKQorCQlwYWdl LT5wYWdlX2luZGV4ID0gMDsKKwllbHNlCisJCXBhZ2UtPnBhZ2VfaW5kZXggPSBsaXN0X3RhaWxf ZW50cnkoJnAtPnNpZ25hbF9ldmVudF9wYWdlcywKKwkJCQkJCSAgIHN0cnVjdCBzaWduYWxfcGFn ZSwKKwkJCQkJCSAgIGV2ZW50X3BhZ2VzKS0+cGFnZV9pbmRleCArIDE7CisKKwlwcl9kZWJ1Zygi YWxsb2NhdGVkIG5ldyBldmVudCBzaWduYWwgcGFnZSBhdCAlcCwgZm9yIHByb2Nlc3MgJXBcbiIs CisJCQlwYWdlLCBwKTsKKwlwcl9kZWJ1ZygicGFnZSBpbmRleCBpcyAlZFxuIiwgcGFnZS0+cGFn ZV9pbmRleCk7CisKKwlsaXN0X2FkZCgmcGFnZS0+ZXZlbnRfcGFnZXMsICZwLT5zaWduYWxfZXZl bnRfcGFnZXMpOworCisJcmV0dXJuIHRydWU7CisKK2ZhaWxfYWxsb2Nfc2lnbmFsX3N0b3JlOgor CWtmcmVlKHBhZ2UpOworZmFpbF9hbGxvY19zaWduYWxfcGFnZToKKwlyZXR1cm4gZmFsc2U7Cit9 CisKK3N0YXRpYyBib29sIGFsbG9jYXRlX2V2ZW50X25vdGlmaWNhdGlvbl9zbG90KHN0cnVjdCBm aWxlICpkZXZrZmQsCisJCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJCQkJc3RydWN0IHNp Z25hbF9wYWdlICoqcGFnZSwKKwkJCQkJdW5zaWduZWQgaW50ICpzaWduYWxfc2xvdF9pbmRleCkK K3sKKwlib29sIHJldDsKKworCXJldCA9IGFsbG9jYXRlX2ZyZWVfc2xvdChwLCBwYWdlLCBzaWdu YWxfc2xvdF9pbmRleCk7CisJaWYgKHJldCA9PSBmYWxzZSkgeworCQlyZXQgPSBhbGxvY2F0ZV9z aWduYWxfcGFnZShkZXZrZmQsIHApOworCQlpZiAocmV0ID09IHRydWUpCisJCQlyZXQgPSBhbGxv Y2F0ZV9mcmVlX3Nsb3QocCwgcGFnZSwgc2lnbmFsX3Nsb3RfaW5kZXgpOworCX0KKworCXJldHVy biByZXQ7Cit9CisKKy8qIEFzc3VtZXMgdGhhdCB0aGUgcHJvY2VzcydzIGV2ZW50X211dGV4IGlz IGxvY2tlZC4gKi8KK3N0YXRpYyB2b2lkIHJlbGVhc2VfZXZlbnRfbm90aWZpY2F0aW9uX3Nsb3Qo c3RydWN0IHNpZ25hbF9wYWdlICpwYWdlLAorCQkJCQkJc2l6ZV90IHNsb3RfaW5kZXgpCit7CisJ X19jbGVhcl9iaXQoc2xvdF9pbmRleCwgcGFnZS0+dXNlZF9zbG90X2JpdG1hcCk7CisJcGFnZS0+ ZnJlZV9zbG90cysrOworCisJLyogV2UgZG9uJ3QgZnJlZSBzaWduYWwgcGFnZXMsIHRoZXkgYXJl IHJldGFpbmVkIGJ5IHRoZSBwcm9jZXNzCisJICogYW5kIHJldXNlZCB1bnRpbCBpdCBleGl0cy4g Ki8KK30KKworc3RhdGljIHN0cnVjdCBzaWduYWxfcGFnZSAqbG9va3VwX3NpZ25hbF9wYWdlX2J5 X2luZGV4KHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJCQkJCXVuc2lnbmVkIGludCBwYWdlX2lu ZGV4KQoreworCXN0cnVjdCBzaWduYWxfcGFnZSAqcGFnZTsKKworCS8qCisJICogVGhpcyBpcyBz YWZlIGJlY2F1c2Ugd2UgZG9uJ3QgZGVsZXRlIHNpZ25hbCBwYWdlcyB1bnRpbCB0aGUKKwkgKiBw cm9jZXNzIGV4aXRzLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJnAtPnNpZ25h bF9ldmVudF9wYWdlcywgZXZlbnRfcGFnZXMpCisJCWlmIChwYWdlLT5wYWdlX2luZGV4ID09IHBh Z2VfaW5kZXgpCisJCQlyZXR1cm4gcGFnZTsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICog QXNzdW1lcyB0aGF0IHAtPmV2ZW50X211dGV4IGlzIGhlbGQgYW5kIG9mIGNvdXJzZSB0aGF0IHAg aXMgbm90IGdvaW5nCisgKiBhd2F5IChjdXJyZW50IG9yIGxvY2tlZCkuCisgKi8KK3N0YXRpYyBz dHJ1Y3Qga2ZkX2V2ZW50ICpsb29rdXBfZXZlbnRfYnlfaWQoc3RydWN0IGtmZF9wcm9jZXNzICpw LCB1aW50MzJfdCBpZCkKK3sKKwlzdHJ1Y3Qga2ZkX2V2ZW50ICpldjsKKworCWhhc2hfZm9yX2Vh Y2hfcG9zc2libGUocC0+ZXZlbnRzLCBldiwgZXZlbnRzLCBpZCkKKwkJaWYgKGV2LT5ldmVudF9p ZCA9PSBpZCkKKwkJCXJldHVybiBldjsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdTMy IG1ha2Vfc2lnbmFsX2V2ZW50X2lkKHN0cnVjdCBzaWduYWxfcGFnZSAqcGFnZSwKKwkJCQkJIHVu c2lnbmVkIGludCBzaWduYWxfc2xvdF9pbmRleCkKK3sKKwlyZXR1cm4gcGFnZS0+cGFnZV9pbmRl eCB8CisJCQkoc2lnbmFsX3Nsb3RfaW5kZXggPDwgU0lHTkFMX0VWRU5UX0lEX1NMT1RfU0hJRlQp OworfQorCisvKgorICogUHJvZHVjZSBhIGtmZCBldmVudCBpZCBmb3IgYSBub25zaWduYWwgZXZl bnQuCisgKiBUaGVzZSBhcmUgYXJiaXRyYXJ5IG51bWJlcnMsIHNvIHdlIGRvIGEgc2VxdWVudGlh bCBzZWFyY2ggdGhyb3VnaAorICogdGhlIGhhc2ggdGFibGUgZm9yIGFuIHVudXNlZCBudW1iZXIu CisgKi8KK3N0YXRpYyB1MzIgbWFrZV9ub25zaWduYWxfZXZlbnRfaWQoc3RydWN0IGtmZF9wcm9j ZXNzICpwKQoreworCXUzMiBpZDsKKworCWZvciAoaWQgPSBwLT5uZXh0X25vbnNpZ25hbF9ldmVu dF9pZDsKKwkJaWQgPCBLRkRfTEFTVF9OT05TSUdOQUxfRVZFTlRfSUQgJiYKKwkJbG9va3VwX2V2 ZW50X2J5X2lkKHAsIGlkKSAhPSBOVUxMOworCQlpZCsrKQorCQk7CisKKwlpZiAoaWQgPCBLRkRf TEFTVF9OT05TSUdOQUxfRVZFTlRfSUQpIHsKKworCQkvKgorCQkgKiBXaGF0IGlmIGlkID09IExB U1RfTk9OU0lHTkFMX0VWRU5UX0lEIC0gMT8KKwkJICogVGhlbiBuZXh0X25vbnNpZ25hbF9ldmVu dF9pZCA9IExBU1RfTk9OU0lHTkFMX0VWRU5UX0lEIHNvCisJCSAqIHRoZSBmaXJzdCBsb29wIGZh aWxzIGltbWVkaWF0ZWx5IGFuZCB3ZSBwcm9jZWVkIHdpdGggdGhlCisJCSAqIHdyYXBhcm91bmQg bG9vcCBiZWxvdy4KKwkJICovCisJCXAtPm5leHRfbm9uc2lnbmFsX2V2ZW50X2lkID0gaWQgKyAx OworCisJCXJldHVybiBpZDsKKwl9CisKKwlmb3IgKGlkID0gS0ZEX0ZJUlNUX05PTlNJR05BTF9F VkVOVF9JRDsKKwkJaWQgPCBLRkRfTEFTVF9OT05TSUdOQUxfRVZFTlRfSUQgJiYKKwkJbG9va3Vw X2V2ZW50X2J5X2lkKHAsIGlkKSAhPSBOVUxMOworCQlpZCsrKQorCQk7CisKKworCWlmIChpZCA8 IEtGRF9MQVNUX05PTlNJR05BTF9FVkVOVF9JRCkgeworCQlwLT5uZXh0X25vbnNpZ25hbF9ldmVu dF9pZCA9IGlkICsgMTsKKwkJcmV0dXJuIGlkOworCX0KKworCXAtPm5leHRfbm9uc2lnbmFsX2V2 ZW50X2lkID0gS0ZEX0ZJUlNUX05PTlNJR05BTF9FVkVOVF9JRDsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHN0cnVjdCBrZmRfZXZlbnQgKmxvb2t1cF9ldmVudF9ieV9wYWdlX3Nsb3Qoc3RydWN0 IGtmZF9wcm9jZXNzICpwLAorCQkJCQkJc3RydWN0IHNpZ25hbF9wYWdlICpwYWdlLAorCQkJCQkJ dW5zaWduZWQgaW50IHNpZ25hbF9zbG90KQoreworCXJldHVybiBsb29rdXBfZXZlbnRfYnlfaWQo cCwgbWFrZV9zaWduYWxfZXZlbnRfaWQocGFnZSwgc2lnbmFsX3Nsb3QpKTsKK30KKworc3RhdGlj IGludCBjcmVhdGVfc2lnbmFsX2V2ZW50KHN0cnVjdCBmaWxlICpkZXZrZmQsCisJCQkJc3RydWN0 IGtmZF9wcm9jZXNzICpwLAorCQkJCXN0cnVjdCBrZmRfZXZlbnQgKmV2KQoreworCWlmIChwLT5z aWduYWxfZXZlbnRfY291bnQgPT0gS0ZEX1NJR05BTF9FVkVOVF9MSU1JVCkgeworCQlwcl93YXJu KCJhbWRrZmQ6IFNpZ25hbCBldmVudCB3YXNuJ3QgY3JlYXRlZCBiZWNhdXNlIGxpbWl0IHdhcyBy ZWFjaGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKCFhbGxvY2F0ZV9ldmVu dF9ub3RpZmljYXRpb25fc2xvdChkZXZrZmQsIHAsICZldi0+c2lnbmFsX3BhZ2UsCisJCQkJCQkm ZXYtPnNpZ25hbF9zbG90X2luZGV4KSkgeworCQlwcl93YXJuKCJhbWRrZmQ6IFNpZ25hbCBldmVu dCB3YXNuJ3QgY3JlYXRlZCBiZWNhdXNlIG91dCBvZiBrZXJuZWwgbWVtb3J5XG4iKTsKKwkJcmV0 dXJuIC1FTk9NRU07CisJfQorCisJcC0+c2lnbmFsX2V2ZW50X2NvdW50Kys7CisKKwlldi0+dXNl cl9zaWduYWxfYWRkcmVzcyA9CisJCQkmZXYtPnNpZ25hbF9wYWdlLT51c2VyX2FkZHJlc3NbZXYt PnNpZ25hbF9zbG90X2luZGV4XTsKKworCWV2LT5ldmVudF9pZCA9IG1ha2Vfc2lnbmFsX2V2ZW50 X2lkKGV2LT5zaWduYWxfcGFnZSwKKwkJCQkJCWV2LT5zaWduYWxfc2xvdF9pbmRleCk7CisKKwlw cl9kZWJ1Zygic2lnbmFsIGV2ZW50IG51bWJlciAlenUgY3JlYXRlZCB3aXRoIGlkICVkLCBhZGRy ZXNzICVwXG4iLAorCQkJcC0+c2lnbmFsX2V2ZW50X2NvdW50LCBldi0+ZXZlbnRfaWQsCisJCQll di0+dXNlcl9zaWduYWxfYWRkcmVzcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5vIG5v bi1zaWduYWwgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgeWV0LgorICogV2UgY3JlYXRlIHRoZW0gYXMg ZXZlbnRzIHRoYXQgbmV2ZXIgc2lnbmFsLgorICogU2V0IGV2ZW50IGNhbGxzIGZyb20gdXNlci1t b2RlIGFyZSBmYWlsZWQuCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX290aGVyX2V2ZW50KHN0cnVj dCBrZmRfcHJvY2VzcyAqcCwgc3RydWN0IGtmZF9ldmVudCAqZXYpCit7CisJZXYtPmV2ZW50X2lk ID0gbWFrZV9ub25zaWduYWxfZXZlbnRfaWQocCk7CisJaWYgKGV2LT5ldmVudF9pZCA9PSAwKQor CQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCit2b2lkIGtmZF9ldmVudF9pbml0 X3Byb2Nlc3Moc3RydWN0IGtmZF9wcm9jZXNzICpwKQoreworCW11dGV4X2luaXQoJnAtPmV2ZW50 X211dGV4KTsKKwloYXNoX2luaXQocC0+ZXZlbnRzKTsKKwlJTklUX0xJU1RfSEVBRCgmcC0+c2ln bmFsX2V2ZW50X3BhZ2VzKTsKKwlwLT5uZXh0X25vbnNpZ25hbF9ldmVudF9pZCA9IEtGRF9GSVJT VF9OT05TSUdOQUxfRVZFTlRfSUQ7CisJcC0+c2lnbmFsX2V2ZW50X2NvdW50ID0gMDsKK30KKwor c3RhdGljIHZvaWQgZGVzdHJveV9ldmVudChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHN0cnVjdCBr ZmRfZXZlbnQgKmV2KQoreworCWlmIChldi0+c2lnbmFsX3BhZ2UgIT0gTlVMTCkgeworCQlyZWxl YXNlX2V2ZW50X25vdGlmaWNhdGlvbl9zbG90KGV2LT5zaWduYWxfcGFnZSwKKwkJCQkJCWV2LT5z aWduYWxfc2xvdF9pbmRleCk7CisJCXAtPnNpZ25hbF9ldmVudF9jb3VudC0tOworCX0KKworCS8q CisJICogQWJhbmRvbiB0aGUgbGlzdCBvZiB3YWl0ZXJzLiBJbmRpdmlkdWFsIHdhaXRpbmcgdGhy ZWFkcyB3aWxsCisJICogY2xlYW4gdXAgdGhlaXIgb3duIGRhdGEuCisJICovCisJbGlzdF9kZWwo JmV2LT53YWl0ZXJzKTsKKworCWhhc2hfZGVsKCZldi0+ZXZlbnRzKTsKKwlrZnJlZShldik7Cit9 CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZXZlbnRzKHN0cnVjdCBrZmRfcHJvY2VzcyAqcCkKK3sK KwlzdHJ1Y3Qga2ZkX2V2ZW50ICpldjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCXVuc2ln bmVkIGludCBoYXNoX2JrdDsKKworCWhhc2hfZm9yX2VhY2hfc2FmZShwLT5ldmVudHMsIGhhc2hf Ymt0LCB0bXAsIGV2LCBldmVudHMpCisJCWRlc3Ryb3lfZXZlbnQocCwgZXYpOworfQorCisvKgor ICogV2UgYXNzdW1lIHRoYXQgdGhlIHByb2Nlc3MgaXMgYmVpbmcgZGVzdHJveWVkIGFuZCB0aGVy ZSBpcyBubyBuZWVkIHRvCisgKiB1bm1hcCB0aGUgcGFnZXMgb3Iga2VlcCBib29ra2VlcGluZyBk YXRhIGluIG9yZGVyLgorICovCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9zaWduYWxfcGFnZXMoc3Ry dWN0IGtmZF9wcm9jZXNzICpwKQoreworCXN0cnVjdCBzaWduYWxfcGFnZSAqcGFnZSwgKnRtcDsK KworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXAsICZwLT5zaWduYWxfZXZlbnRf cGFnZXMsCisJCQkJCWV2ZW50X3BhZ2VzKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylw YWdlLT5rZXJuZWxfYWRkcmVzcyk7CisJCWtmcmVlKHBhZ2UpOworCX0KK30KKwordm9pZCBrZmRf ZXZlbnRfZnJlZV9wcm9jZXNzKHN0cnVjdCBrZmRfcHJvY2VzcyAqcCkKK3sKKwlkZXN0cm95X2V2 ZW50cyhwKTsKKwlzaHV0ZG93bl9zaWduYWxfcGFnZXMocCk7Cit9CisKK3N0YXRpYyBib29sIGV2 ZW50X2Nhbl9iZV9ncHVfc2lnbmFsZWQoY29uc3Qgc3RydWN0IGtmZF9ldmVudCAqZXYpCit7CisJ cmV0dXJuIGV2LT50eXBlID09IEtGRF9FVkVOVF9UWVBFX1NJR05BTCB8fAorCQkJCQlldi0+dHlw ZSA9PSBLRkRfRVZFTlRfVFlQRV9ERUJVRzsKK30KKworc3RhdGljIGJvb2wgZXZlbnRfY2FuX2Jl X2NwdV9zaWduYWxlZChjb25zdCBzdHJ1Y3Qga2ZkX2V2ZW50ICpldikKK3sKKwlyZXR1cm4gZXYt PnR5cGUgPT0gS0ZEX0VWRU5UX1RZUEVfU0lHTkFMOworfQorCitpbnQga2ZkX2V2ZW50X2NyZWF0 ZShzdHJ1Y3QgZmlsZSAqZGV2a2ZkLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCisJCSAgICAgdWlu dDMyX3QgZXZlbnRfdHlwZSwgYm9vbCBhdXRvX3Jlc2V0LCB1aW50MzJfdCBub2RlX2lkLAorCQkg ICAgIHVpbnQzMl90ICpldmVudF9pZCwgdWludDMyX3QgKmV2ZW50X3RyaWdnZXJfZGF0YSwKKwkJ ICAgICB1aW50NjRfdCAqZXZlbnRfcGFnZV9vZmZzZXQsIHVpbnQzMl90ICpldmVudF9zbG90X2lu ZGV4KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBrZmRfZXZlbnQgKmV2ID0ga3phbGxvYyhz aXplb2YoKmV2KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWV2KQorCQlyZXR1cm4gLUVOT01FTTsK KworCWV2LT50eXBlID0gZXZlbnRfdHlwZTsKKwlldi0+YXV0b19yZXNldCA9IGF1dG9fcmVzZXQ7 CisJZXYtPnNpZ25hbGVkID0gZmFsc2U7CisKKwlJTklUX0xJU1RfSEVBRCgmZXYtPndhaXRlcnMp OworCisJKmV2ZW50X3BhZ2Vfb2Zmc2V0ID0gMDsKKworCW11dGV4X2xvY2soJnAtPmV2ZW50X211 dGV4KTsKKworCXN3aXRjaCAoZXZlbnRfdHlwZSkgeworCWNhc2UgS0ZEX0VWRU5UX1RZUEVfU0lH TkFMOgorCWNhc2UgS0ZEX0VWRU5UX1RZUEVfREVCVUc6CisJCXJldCA9IGNyZWF0ZV9zaWduYWxf ZXZlbnQoZGV2a2ZkLCBwLCBldik7CisJCWlmICghcmV0KSB7CisJCQkqZXZlbnRfcGFnZV9vZmZz ZXQgPSAoZXYtPnNpZ25hbF9wYWdlLT5wYWdlX2luZGV4IHwKKwkJCQkJS0ZEX01NQVBfRVZFTlRT X01BU0spOworCQkJKmV2ZW50X3BhZ2Vfb2Zmc2V0IDw8PSBQQUdFX1NISUZUOworCQkJKmV2ZW50 X3Nsb3RfaW5kZXggPSBldi0+c2lnbmFsX3Nsb3RfaW5kZXg7CisJCX0KKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcmV0ID0gY3JlYXRlX290aGVyX2V2ZW50KHAsIGV2KTsKKwkJYnJlYWs7CisJfQor CisJaWYgKCFyZXQpIHsKKwkJaGFzaF9hZGQocC0+ZXZlbnRzLCAmZXYtPmV2ZW50cywgZXYtPmV2 ZW50X2lkKTsKKworCQkqZXZlbnRfaWQgPSBldi0+ZXZlbnRfaWQ7CisJCSpldmVudF90cmlnZ2Vy X2RhdGEgPSBldi0+ZXZlbnRfaWQ7CisJfSBlbHNlIHsKKwkJa2ZyZWUoZXYpOworCX0KKworCW11 dGV4X3VubG9jaygmcC0+ZXZlbnRfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworLyogQXNz dW1lcyB0aGF0IHAgaXMgY3VycmVudC4gKi8KK2ludCBrZmRfZXZlbnRfZGVzdHJveShzdHJ1Y3Qg a2ZkX3Byb2Nlc3MgKnAsIHVpbnQzMl90IGV2ZW50X2lkKQoreworCXN0cnVjdCBrZmRfZXZlbnQg KmV2OworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmcC0+ZXZlbnRfbXV0ZXgpOworCisJ ZXYgPSBsb29rdXBfZXZlbnRfYnlfaWQocCwgZXZlbnRfaWQpOworCisJaWYgKGV2KQorCQlkZXN0 cm95X2V2ZW50KHAsIGV2KTsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7CisKKwltdXRleF91bmxv Y2soJnAtPmV2ZW50X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzZXRf ZXZlbnQoc3RydWN0IGtmZF9ldmVudCAqZXYpCit7CisJc3RydWN0IGtmZF9ldmVudF93YWl0ZXIg KndhaXRlcjsKKwlzdHJ1Y3Qga2ZkX2V2ZW50X3dhaXRlciAqbmV4dDsKKworCS8qIEF1dG8gcmVz ZXQgaWYgdGhlIGxpc3QgaXMgbm9uLWVtcHR5IGFuZCB3ZSdyZSB3YWtpbmcgc29tZW9uZS4gKi8K Kwlldi0+c2lnbmFsZWQgPSAhZXYtPmF1dG9fcmVzZXQgfHwgbGlzdF9lbXB0eSgmZXYtPndhaXRl cnMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhaXRlciwgbmV4dCwgJmV2LT53YWl0 ZXJzLCB3YWl0ZXJzKSB7CisJCXdhaXRlci0+YWN0aXZhdGVkID0gdHJ1ZTsKKworCQkvKiBfaW5p dCBiZWNhdXNlIGZyZWVfd2FpdGVycyB3aWxsIGNhbGwgbGlzdF9kZWwgKi8KKwkJbGlzdF9kZWxf aW5pdCgmd2FpdGVyLT53YWl0ZXJzKTsKKworCQl3YWtlX3VwX3Byb2Nlc3Mod2FpdGVyLT5zbGVl cGluZ190YXNrKTsKKwl9Cit9CisKKy8qIEFzc3VtZXMgdGhhdCBwIGlzIGN1cnJlbnQuICovCitp bnQga2ZkX3NldF9ldmVudChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHVpbnQzMl90IGV2ZW50X2lk KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBrZmRfZXZlbnQgKmV2OworCisJbXV0ZXhfbG9j aygmcC0+ZXZlbnRfbXV0ZXgpOworCisJZXYgPSBsb29rdXBfZXZlbnRfYnlfaWQocCwgZXZlbnRf aWQpOworCisJaWYgKGV2ICYmIGV2ZW50X2Nhbl9iZV9jcHVfc2lnbmFsZWQoZXYpKQorCQlzZXRf ZXZlbnQoZXYpOworCWVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKworCW11dGV4X3VubG9jaygmcC0+ ZXZlbnRfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2V2ZW50 KHN0cnVjdCBrZmRfZXZlbnQgKmV2KQoreworCWV2LT5zaWduYWxlZCA9IGZhbHNlOworfQorCisv KiBBc3N1bWVzIHRoYXQgcCBpcyBjdXJyZW50LiAqLworaW50IGtmZF9yZXNldF9ldmVudChzdHJ1 Y3Qga2ZkX3Byb2Nlc3MgKnAsIHVpbnQzMl90IGV2ZW50X2lkKQoreworCWludCByZXQgPSAwOwor CXN0cnVjdCBrZmRfZXZlbnQgKmV2OworCisJbXV0ZXhfbG9jaygmcC0+ZXZlbnRfbXV0ZXgpOwor CisJZXYgPSBsb29rdXBfZXZlbnRfYnlfaWQocCwgZXZlbnRfaWQpOworCisJaWYgKGV2ICYmIGV2 ZW50X2Nhbl9iZV9jcHVfc2lnbmFsZWQoZXYpKQorCQlyZXNldF9ldmVudChldik7CisJZWxzZQor CQlyZXQgPSAtRUlOVkFMOworCisJbXV0ZXhfdW5sb2NrKCZwLT5ldmVudF9tdXRleCk7CisJcmV0 dXJuIHJldDsKKworfQorCitzdGF0aWMgdm9pZCBhY2tub3dsZWRnZV9zaWduYWwoc3RydWN0IGtm ZF9wcm9jZXNzICpwLCBzdHJ1Y3Qga2ZkX2V2ZW50ICpldikKK3sKKwlwYWdlX3Nsb3RzKGV2LT5z aWduYWxfcGFnZSlbZXYtPnNpZ25hbF9zbG90X2luZGV4XSA9CisJCQkJCQlVTlNJR05BTEVEX0VW RU5UX1NMT1Q7Cit9CisKK3N0YXRpYyBib29sIGlzX3Nsb3Rfc2lnbmFsZWQoc3RydWN0IHNpZ25h bF9wYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJcmV0dXJuIHBhZ2Vfc2xvdHMo cGFnZSlbaW5kZXhdICE9IFVOU0lHTkFMRURfRVZFTlRfU0xPVDsKK30KKworc3RhdGljIHZvaWQg c2V0X2V2ZW50X2Zyb21faW50ZXJydXB0KHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJCQkJc3Ry dWN0IGtmZF9ldmVudCAqZXYpCit7CisJaWYgKGV2ICYmIGV2ZW50X2Nhbl9iZV9ncHVfc2lnbmFs ZWQoZXYpKSB7CisJCWFja25vd2xlZGdlX3NpZ25hbChwLCBldik7CisJCXNldF9ldmVudChldik7 CisJfQorfQorCit2b2lkIGtmZF9zaWduYWxfZXZlbnRfaW50ZXJydXB0KHVuc2lnbmVkIGludCBw YXNpZCwgdWludDMyX3QgcGFydGlhbF9pZCwKKwkJCQl1aW50MzJfdCB2YWxpZF9pZF9iaXRzKQor eworCXN0cnVjdCBrZmRfZXZlbnQgKmV2OworCisJLyoKKwkgKiBCZWNhdXNlIHdlIGFyZSBjYWxs ZWQgZnJvbSBhcmJpdHJhcnkgY29udGV4dCAod29ya3F1ZXVlKSBhcyBvcHBvc2VkCisJICogdG8g cHJvY2VzcyBjb250ZXh0LCBrZmRfcHJvY2VzcyBjb3VsZCBhdHRlbXB0IHRvIGV4aXQgd2hpbGUg d2UgYXJlCisJICogcnVubmluZyBzbyB0aGUgbG9va3VwIGZ1bmN0aW9uIHJldHVybnMgYSBsb2Nr ZWQgcHJvY2Vzcy4KKwkgKi8KKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAgPSBrZmRfbG9va3VwX3By b2Nlc3NfYnlfcGFzaWQocGFzaWQpOworCisJaWYgKCFwKQorCQlyZXR1cm47IC8qIFByZXN1bWFi bHkgcHJvY2VzcyBleGl0ZWQuICovCisKKwltdXRleF9sb2NrKCZwLT5ldmVudF9tdXRleCk7CisK KwlpZiAodmFsaWRfaWRfYml0cyA+PSBJTlRFUlJVUFRfREFUQV9CSVRTKSB7CisJCS8qIFBhcnRp YWwgSUQgaXMgYSBmdWxsIElELiAqLworCQlldiA9IGxvb2t1cF9ldmVudF9ieV9pZChwLCBwYXJ0 aWFsX2lkKTsKKwkJc2V0X2V2ZW50X2Zyb21faW50ZXJydXB0KHAsIGV2KTsKKwl9IGVsc2Ugewor CQkvKgorCQkgKiBQYXJ0aWFsIElEIGlzIGluIGZhY3QgcGFydGlhbC4gRm9yIG5vdyB3ZSBjb21w bGV0ZWx5CisJCSAqIGlnbm9yZSBpdCwgYnV0IHdlIGNvdWxkIHVzZSBhbnkgYml0cyB3ZSBkaWQg cmVjZWl2ZSB0bworCQkgKiBzZWFyY2ggZmFzdGVyLgorCQkgKi8KKwkJc3RydWN0IHNpZ25hbF9w YWdlICpwYWdlOworCQl1bnNpZ25lZCBpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwg JnAtPnNpZ25hbF9ldmVudF9wYWdlcywgZXZlbnRfcGFnZXMpCisJCQlmb3IgKGkgPSAwOyBpIDwg U0xPVFNfUEVSX1BBR0U7IGkrKykKKwkJCQlpZiAoaXNfc2xvdF9zaWduYWxlZChwYWdlLCBpKSkg eworCQkJCQlldiA9IGxvb2t1cF9ldmVudF9ieV9wYWdlX3Nsb3QocCwKKwkJCQkJCQkJcGFnZSwg aSk7CisJCQkJCXNldF9ldmVudF9mcm9tX2ludGVycnVwdChwLCBldik7CisJCQkJfQorCX0KKwor CW11dGV4X3VubG9jaygmcC0+ZXZlbnRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcC0+bXV0ZXgp OworfQorCitzdGF0aWMgc3RydWN0IGtmZF9ldmVudF93YWl0ZXIgKmFsbG9jX2V2ZW50X3dhaXRl cnModWludDMyX3QgbnVtX2V2ZW50cykKK3sKKwlzdHJ1Y3Qga2ZkX2V2ZW50X3dhaXRlciAqZXZl bnRfd2FpdGVyczsKKwl1aW50MzJfdCBpOworCisJZXZlbnRfd2FpdGVycyA9IGttYWxsb2NfYXJy YXkobnVtX2V2ZW50cywKKwkJCQkJc2l6ZW9mKHN0cnVjdCBrZmRfZXZlbnRfd2FpdGVyKSwKKwkJ CQkJR0ZQX0tFUk5FTCk7CisKKwlmb3IgKGkgPSAwOyAoZXZlbnRfd2FpdGVycykgJiYgKGkgPCBu dW1fZXZlbnRzKSA7IGkrKykgeworCQlJTklUX0xJU1RfSEVBRCgmZXZlbnRfd2FpdGVyc1tpXS53 YWl0ZXJzKTsKKwkJZXZlbnRfd2FpdGVyc1tpXS5zbGVlcGluZ190YXNrID0gY3VycmVudDsKKwkJ ZXZlbnRfd2FpdGVyc1tpXS5hY3RpdmF0ZWQgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZXZlbnRf d2FpdGVyczsKK30KKworc3RhdGljIGludCBpbml0X2V2ZW50X3dhaXRlcihzdHJ1Y3Qga2ZkX3By b2Nlc3MgKnAsCisJCQkJc3RydWN0IGtmZF9ldmVudF93YWl0ZXIgKndhaXRlciwKKwkJCQl1aW50 MzJfdCBldmVudF9pZCkKK3sKKwlzdHJ1Y3Qga2ZkX2V2ZW50ICpldiA9IGxvb2t1cF9ldmVudF9i eV9pZChwLCBldmVudF9pZCk7CisKKwlpZiAoIWV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdh aXRlci0+YWN0aXZhdGVkID0gZXYtPnNpZ25hbGVkOworCWV2LT5zaWduYWxlZCA9IGV2LT5zaWdu YWxlZCAmJiAhZXYtPmF1dG9fcmVzZXQ7CisKKwlsaXN0X2FkZCgmd2FpdGVyLT53YWl0ZXJzLCAm ZXYtPndhaXRlcnMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHRlc3RfZXZlbnRf Y29uZGl0aW9uKGJvb2wgYWxsLCB1aW50MzJfdCBudW1fZXZlbnRzLAorCQkJCXN0cnVjdCBrZmRf ZXZlbnRfd2FpdGVyICpldmVudF93YWl0ZXJzKQoreworCXVpbnQzMl90IGk7CisJdWludDMyX3Qg YWN0aXZhdGVkX2NvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKysp IHsKKwkJaWYgKGV2ZW50X3dhaXRlcnNbaV0uYWN0aXZhdGVkKSB7CisJCQlpZiAoIWFsbCkKKwkJ CQlyZXR1cm4gdHJ1ZTsKKworCQkJYWN0aXZhdGVkX2NvdW50Kys7CisJCX0KKwl9CisKKwlyZXR1 cm4gYWN0aXZhdGVkX2NvdW50ID09IG51bV9ldmVudHM7Cit9CisKK3N0YXRpYyBsb25nIHVzZXJf dGltZW91dF90b19qaWZmaWVzKHVpbnQzMl90IHVzZXJfdGltZW91dF9tcykKK3sKKwlpZiAodXNl cl90aW1lb3V0X21zID09IEtGRF9FVkVOVF9USU1FT1VUX0lNTUVESUFURSkKKwkJcmV0dXJuIDA7 CisKKwlpZiAodXNlcl90aW1lb3V0X21zID09IEtGRF9FVkVOVF9USU1FT1VUX0lORklOSVRFKQor CQlyZXR1cm4gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CisKKwkvKgorCSAqIG1zZWNzX3RvX2ppZmZp ZXMgaW50ZXJwcmV0cyBhbGwgdmFsdWVzIGFib3ZlIDJeMzEtMSBhcyBpbmZpbml0ZSwKKwkgKiBi dXQgd2UgY29uc2lkZXIgdGhlbSBmaW5pdGUuCisJICogVGhpcyBoYWNrIGlzIHdyb25nLCBidXQg bm9ib2R5IGlzIGxpa2VseSB0byBub3RpY2UuCisJICovCisJdXNlcl90aW1lb3V0X21zID0gbWlu X3QodWludDMyX3QsIHVzZXJfdGltZW91dF9tcywgMHg3RkZGRkZGRik7CisKKwlyZXR1cm4gbXNl Y3NfdG9famlmZmllcyh1c2VyX3RpbWVvdXRfbXMpICsgMTsKK30KKworc3RhdGljIHZvaWQgZnJl ZV93YWl0ZXJzKHVpbnQzMl90IG51bV9ldmVudHMsIHN0cnVjdCBrZmRfZXZlbnRfd2FpdGVyICp3 YWl0ZXJzKQoreworCXVpbnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2V2ZW50czsg aSsrKQorCQlsaXN0X2RlbCgmd2FpdGVyc1tpXS53YWl0ZXJzKTsKKworCWtmcmVlKHdhaXRlcnMp OworfQorCitpbnQga2ZkX3dhaXRfb25fZXZlbnRzKHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJ ICAgICAgIHVpbnQzMl90IG51bV9ldmVudHMsIGNvbnN0IHVpbnQzMl90IF9fdXNlciAqZXZlbnRf aWRzLAorCQkgICAgICAgYm9vbCBhbGwsIHVpbnQzMl90IHVzZXJfdGltZW91dF9tcywKKwkJICAg ICAgIGVudW0ga2ZkX2V2ZW50X3dhaXRfcmVzdWx0ICp3YWl0X3Jlc3VsdCkKK3sKKwl1aW50MzJf dCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCBrZmRfZXZlbnRfd2FpdGVyICpldmVudF93YWl0 ZXJzID0gTlVMTDsKKwlsb25nIHRpbWVvdXQgPSB1c2VyX3RpbWVvdXRfdG9famlmZmllcyh1c2Vy X3RpbWVvdXRfbXMpOworCisJbXV0ZXhfbG9jaygmcC0+ZXZlbnRfbXV0ZXgpOworCisJZXZlbnRf d2FpdGVycyA9IGFsbG9jX2V2ZW50X3dhaXRlcnMobnVtX2V2ZW50cyk7CisJaWYgKCFldmVudF93 YWl0ZXJzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlmb3IgKGkg PSAwOyBpIDwgbnVtX2V2ZW50czsgaSsrKSB7CisJCXVpbnQzMl90IGV2ZW50X2lkOworCisJCXJl dCA9IGdldF91c2VyKGV2ZW50X2lkLCAmZXZlbnRfaWRzW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdv dG8gZmFpbDsKKworCQlyZXQgPSBpbml0X2V2ZW50X3dhaXRlcihwLCAmZXZlbnRfd2FpdGVyc1tp XSwgZXZlbnRfaWQpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCX0KKworCW11dGV4X3Vu bG9jaygmcC0+ZXZlbnRfbXV0ZXgpOworCisJd2hpbGUgKHRydWUpIHsKKwkJaWYgKGZhdGFsX3Np Z25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZXQgPSAtRUlOVFI7CisJCQlicmVhazsKKwkJ fQorCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJLyoKKwkJCSAqIFRoaXMg aXMgd3Jvbmcgd2hlbiBhIG5vbnplcm8sIG5vbi1pbmZpbml0ZSB0aW1lb3V0CisJCQkgKiBpcyBz cGVjaWZpZWQuIFdlIG5lZWQgdG8gdXNlCisJCQkgKiBFUkVTVEFSVFNZU19SRVNUQVJUQkxPQ0ss IGJ1dCBzdHJ1Y3QgcmVzdGFydF9ibG9jaworCQkJICogY29udGFpbnMgYSB1bmlvbiB3aXRoIGRh dGEgZm9yIGVhY2ggdXNlciBhbmQgaXQncworCQkJICogaW4gZ2VuZXJpYyBrZXJuZWwgY29kZSB0 aGF0IEkgZG9uJ3Qgd2FudCB0bworCQkJICogdG91Y2ggeWV0LgorCQkJICovCisJCQlyZXQgPSAt RVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0ZXN0X2V2ZW50X2NvbmRpdGlv bihhbGwsIG51bV9ldmVudHMsIGV2ZW50X3dhaXRlcnMpKSB7CisJCQkqd2FpdF9yZXN1bHQgPSBL RkRfV0FJVF9DT01QTEVURTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRpbWVvdXQgPD0gMCkg eworCQkJKndhaXRfcmVzdWx0ID0gS0ZEX1dBSVRfVElNRU9VVDsKKwkJCWJyZWFrOworCQl9CisK KwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lb3V0KTsKKwl9 CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJbXV0ZXhfbG9jaygmcC0+ ZXZlbnRfbXV0ZXgpOworCWZyZWVfd2FpdGVycyhudW1fZXZlbnRzLCBldmVudF93YWl0ZXJzKTsK KwltdXRleF91bmxvY2soJnAtPmV2ZW50X211dGV4KTsKKworCXJldHVybiByZXQ7CisKK2ZhaWw6 CisJaWYgKGV2ZW50X3dhaXRlcnMpCisJCWZyZWVfd2FpdGVycyhudW1fZXZlbnRzLCBldmVudF93 YWl0ZXJzKTsKKworCW11dGV4X3VubG9jaygmcC0+ZXZlbnRfbXV0ZXgpOworCisJKndhaXRfcmVz dWx0ID0gS0ZEX1dBSVRfRVJST1I7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQga2ZkX2V2ZW50 X21tYXAoc3RydWN0IGtmZF9wcm9jZXNzICpwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkK K3sKKworCXVuc2lnbmVkIGludCBwYWdlX2luZGV4OworCXVuc2lnbmVkIGxvbmcgcGZuOworCXN0 cnVjdCBzaWduYWxfcGFnZSAqcGFnZTsKKworCXBhZ2VfaW5kZXggPSB2bWEtPnZtX3Bnb2ZmOwor CisJcGFnZSA9IGxvb2t1cF9zaWduYWxfcGFnZV9ieV9pbmRleChwLCBwYWdlX2luZGV4KTsKKwlp ZiAoIXBhZ2UpIHsKKwkJLyogUHJvYmFibHkgS0ZEIGJ1ZywgYnV0IG1tYXAgaXMgdXNlci1hY2Nl c3NpYmxlLiAqLworCQlwcl9kZWJ1Zygic2lnbmFsIHBhZ2UgY291bGQgbm90IGJlIGZvdW5kIGZv ciBwYWdlX2luZGV4ICV1XG4iLAorCQkJCXBhZ2VfaW5kZXgpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlwZm4gPSBfX3BhKHBhZ2UtPmtlcm5lbF9hZGRyZXNzKTsKKwlwZm4gPj49IFBBR0Vf U0hJRlQ7CisKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fRE9OVENPUFkgfCBWTV9ET05U RVhQQU5EIHwgVk1fTk9SRVNFUlZFCisJCSAgICAgICB8IFZNX0RPTlREVU1QIHwgVk1fUEZOTUFQ OworCisJcHJfZGVidWcoIm1hcHBpbmcgc2lnbmFsIHBhZ2VcbiIpOworCXByX2RlYnVnKCIgICAg IHN0YXJ0IHVzZXIgYWRkcmVzcyAgPT0gMHglMDhseFxuIiwgdm1hLT52bV9zdGFydCk7CisJcHJf ZGVidWcoIiAgICAgZW5kIHVzZXIgYWRkcmVzcyAgICA9PSAweCUwOGx4XG4iLCB2bWEtPnZtX2Vu ZCk7CisJcHJfZGVidWcoIiAgICAgcGZuICAgICAgICAgICAgICAgICA9PSAweCUwMTZsWFxuIiwg cGZuKTsKKwlwcl9kZWJ1ZygiICAgICB2bV9mbGFncyAgICAgICAgICAgID09IDB4JTA4bFhcbiIs IHZtYS0+dm1fZmxhZ3MpOworCXByX2RlYnVnKCIgICAgIHNpemUgICAgICAgICAgICAgICAgPT0g MHglMDhsWFxuIiwKKwkJCXZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7CisKKwlwYWdlLT51 c2VyX2FkZHJlc3MgPSAodWludDY0X3QgX191c2VyICopdm1hLT52bV9zdGFydDsKKworCS8qIG1h cHBpbmcgdGhlIHBhZ2UgdG8gdXNlciBwcm9jZXNzICovCisJcmV0dXJuIHJlbWFwX3Bmbl9yYW5n ZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHBmbiwKKwkJCXZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFy dCwgdm1hLT52bV9wYWdlX3Byb3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRrZmQva2ZkX2V2ZW50cy5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2V2 ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YjViMzgKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZXZlbnRzLmgKQEAg LTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmlj ZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBD T1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEtGRF9FVkVOVFNfSF9JTkNM VURFRAorI2RlZmluZSBLRkRfRVZFTlRTX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2h0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgImtmZF9wcml2LmgiCisK KyNkZWZpbmUgS0ZEX0VWRU5UX0lEX05PTlNJR05BTF9NQVNLIDB4ODAwMDAwMDBVCisjZGVmaW5l IEtGRF9GSVJTVF9OT05TSUdOQUxfRVZFTlRfSUQgS0ZEX0VWRU5UX0lEX05PTlNJR05BTF9NQVNL CisjZGVmaW5lIEtGRF9MQVNUX05PTlNJR05BTF9FVkVOVF9JRCBVSU5UX01BWAorCisvKgorICog V3JpdHRlbiBpbnRvIGtmZF9zaWduYWxfc2xvdF90IHRvIGluZGljYXRlIHRoYXQgdGhlIGV2ZW50 IGlzIG5vdCBzaWduYWxlZC4KKyAqIFNpbmNlIHRoZSBldmVudCBwcm90b2NvbCBtYXkgbmVlZCB0 byB3cml0ZSB0aGUgZXZlbnQgSUQgaW50byBtZW1vcnksIHRoaXMKKyAqIG11c3Qgbm90IGJlIGEg dmFsaWQgZXZlbnQgSUQuCisgKiBGb3IgdGhlIHNha2Ugb2YgZWFzeSBtZW1zZXQtaW5nLCB0aGlz IG11c3QgYmUgYSBieXRlIHBhdHRlcm4uCisgKi8KKyNkZWZpbmUgVU5TSUdOQUxFRF9FVkVOVF9T TE9UICgodWludDY0X3QpLTEpCisKK3N0cnVjdCBrZmRfZXZlbnRfd2FpdGVyOworc3RydWN0IHNp Z25hbF9wYWdlOworCitzdHJ1Y3Qga2ZkX2V2ZW50IHsKKwkvKiBBbGwgZXZlbnRzIGluIHByb2Nl c3MsIHJvb3RlZCBhdCBrZmRfcHJvY2Vzcy5ldmVudHMuICovCisJc3RydWN0IGhsaXN0X25vZGUg ZXZlbnRzOworCisJdTMyIGV2ZW50X2lkOworCisJYm9vbCBzaWduYWxlZDsKKwlib29sIGF1dG9f cmVzZXQ7CisKKwlpbnQgdHlwZTsKKworCXN0cnVjdCBsaXN0X2hlYWQgd2FpdGVyczsgLyogTGlz dCBvZiBrZmRfZXZlbnRfd2FpdGVyIGJ5IHdhaXRlcnMuICovCisKKwkvKiBPbmx5IGZvciBzaWdu YWwgZXZlbnRzLiAqLworCXN0cnVjdCBzaWduYWxfcGFnZSAqc2lnbmFsX3BhZ2U7CisJdW5zaWdu ZWQgaW50IHNpZ25hbF9zbG90X2luZGV4OworCXVpbnQ2NF90IF9fdXNlciAqdXNlcl9zaWduYWxf YWRkcmVzczsKK307CisKKyNkZWZpbmUgS0ZEX0VWRU5UX1RJTUVPVVRfSU1NRURJQVRFIDAKKyNk ZWZpbmUgS0ZEX0VWRU5UX1RJTUVPVVRfSU5GSU5JVEUgMHhGRkZGRkZGRnUKKworLyogTWF0Y2hp bmcgSFNBX0VWRU5UVFlQRSAqLworI2RlZmluZSBLRkRfRVZFTlRfVFlQRV9TSUdOQUwgMAorI2Rl ZmluZSBLRkRfRVZFTlRfVFlQRV9ERUJVRyA1CisKK2V4dGVybiB2b2lkIGtmZF9zaWduYWxfZXZl bnRfaW50ZXJydXB0KHVuc2lnbmVkIGludCBwYXNpZCwgdWludDMyX3QgcGFydGlhbF9pZCwKKwkJ CQkJdWludDMyX3QgdmFsaWRfaWRfYml0cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2ludGVycnVwdC5jIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRrZmQva2ZkX2ludGVycnVwdC5jCmluZGV4IDUzODNkZDAuLjdmMTM0YWEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9pbnRlcnJ1cHQuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfaW50ZXJydXB0LmMKQEAgLTE3MiwxMCArMTcyLDE3 IEBAIHN0YXRpYyB2b2lkIGludGVycnVwdF93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJ CQkJc2l6ZW9mKHVpbnQzMl90KSldOwogCiAJd2hpbGUgKGRlcXVldWVfaWhfcmluZ19lbnRyeShk ZXYsIGloX3JpbmdfZW50cnkpKQotCQk7CisJCWRldi0+ZGV2aWNlX2luZm8tPmV2ZW50X2ludGVy cnVwdF9jbGFzcy0+aW50ZXJydXB0X3dxKGRldiwKKwkJCQkJCQkJaWhfcmluZ19lbnRyeSk7CiB9 CiAKIGJvb2wgaW50ZXJydXB0X2lzX3dhbnRlZChzdHJ1Y3Qga2ZkX2RldiAqZGV2LCBjb25zdCB1 aW50MzJfdCAqaWhfcmluZ19lbnRyeSkKIHsKLQlyZXR1cm4gZmFsc2U7CisJLyogaW50ZWdlciBh bmQgYml0d2lzZSBPUiBzbyB0aGVyZSBpcyBubyBib29sZWFuIHNob3J0LWNpcmN1aXRpbmcgKi8K Kwl1bnNpZ25lZCB3YW50ZWQgPSAwOworCisJd2FudGVkIHw9IGRldi0+ZGV2aWNlX2luZm8tPmV2 ZW50X2ludGVycnVwdF9jbGFzcy0+aW50ZXJydXB0X2lzcihkZXYsCisJCQkJCQkJCWloX3Jpbmdf ZW50cnkpOworCisJcmV0dXJuIHdhbnRlZCAhPSAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2Zk L2tmZF9wcml2LmgKaW5kZXggMzRjNzY2Mi4uMGZmOWEzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGtmZC9rZmRfcHJpdi5oCkBAIC0zNSw2ICszNSw5IEBACiAKICNkZWZpbmUgS0ZEX1NZU0ZTX0ZJ TEVfTU9ERSAwNDQ0CiAKKyNkZWZpbmUgS0ZEX01NQVBfRE9PUkJFTExfTUFTSyAweDgwMDAwMDAw MDAwMDAKKyNkZWZpbmUgS0ZEX01NQVBfRVZFTlRTX01BU0sgMHg0MDAwMDAwMDAwMDAwCisKIC8q CiAgKiBXaGVuIHdvcmtpbmcgd2l0aCBjcCBzY2hlZHVsZXIgd2Ugc2hvdWxkIGFzc2lnbiB0aGUg SElRIG1hbnVhbGx5IG9yIHZpYQogICogdGhlIHJhZGVvbiBkcml2ZXIgdG8gYSBmaXhlZCBocWQg c2xvdCwgaGVyZSBhcmUgdGhlIGZpeGVkIEhJUSBocWQgc2xvdApAQCAtMTA4LDggKzExMSwxNiBA QCBlbnVtIGFzaWNfZmFtaWx5X3R5cGUgewogCUNISVBfQ0FSUklaTwogfTsKIAorc3RydWN0IGtm ZF9ldmVudF9pbnRlcnJ1cHRfY2xhc3MgeworCWJvb2wgKCppbnRlcnJ1cHRfaXNyKShzdHJ1Y3Qg a2ZkX2RldiAqZGV2LAorCQkJCWNvbnN0IHVpbnQzMl90ICppaF9yaW5nX2VudHJ5KTsKKwl2b2lk ICgqaW50ZXJydXB0X3dxKShzdHJ1Y3Qga2ZkX2RldiAqZGV2LAorCQkJCWNvbnN0IHVpbnQzMl90 ICppaF9yaW5nX2VudHJ5KTsKK307CisKIHN0cnVjdCBrZmRfZGV2aWNlX2luZm8gewogCXVuc2ln bmVkIGludCBhc2ljX2ZhbWlseTsKKwljb25zdCBzdHJ1Y3Qga2ZkX2V2ZW50X2ludGVycnVwdF9j bGFzcyAqZXZlbnRfaW50ZXJydXB0X2NsYXNzOwogCXVuc2lnbmVkIGludCBtYXhfcGFzaWRfYml0 czsKIAlzaXplX3QgaWhfcmluZ19lbnRyeV9zaXplOwogCXVpbnQ4X3QgbnVtX29mX3dhdGNoX3Bv aW50czsKQEAgLTQ5MCw2ICs1MDEsMTUgQEAgc3RydWN0IGtmZF9wcm9jZXNzIHsKIAogCS8qSXMg dGhlIHVzZXIgc3BhY2UgcHJvY2VzcyAzMiBiaXQ/Ki8KIAlib29sIGlzXzMyYml0X3VzZXJfbW9k ZTsKKworCS8qIEV2ZW50LXJlbGF0ZWQgZGF0YSAqLworCXN0cnVjdCBtdXRleCBldmVudF9tdXRl eDsKKwkvKiBBbGwgZXZlbnRzIGluIHByb2Nlc3MgaGFzaGVkIGJ5IElELCBsaW5rZWQgb24ga2Zk X2V2ZW50LmV2ZW50cy4gKi8KKwlERUNMQVJFX0hBU0hUQUJMRShldmVudHMsIDQpOworCXN0cnVj dCBsaXN0X2hlYWQgc2lnbmFsX2V2ZW50X3BhZ2VzOwkvKiBzdHJ1Y3Qgc2xvdF9wYWdlX2hlYWRl ci4KKwkJCQkJCQkJZXZlbnRfcGFnZXMgKi8KKwl1MzIgbmV4dF9ub25zaWduYWxfZXZlbnRfaWQ7 CisJc2l6ZV90IHNpZ25hbF9ldmVudF9jb3VudDsKIH07CiAKIC8qKgpAQCAtNTE0LDYgKzUzNCw3 IEBAIHZvaWQga2ZkX3Byb2Nlc3NfY3JlYXRlX3dxKHZvaWQpOwogdm9pZCBrZmRfcHJvY2Vzc19k ZXN0cm95X3dxKHZvaWQpOwogc3RydWN0IGtmZF9wcm9jZXNzICprZmRfY3JlYXRlX3Byb2Nlc3Mo Y29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICopOwogc3RydWN0IGtmZF9wcm9jZXNzICprZmRfZ2V0 X3Byb2Nlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICopOworc3RydWN0IGtmZF9wcm9jZXNz ICprZmRfbG9va3VwX3Byb2Nlc3NfYnlfcGFzaWQodW5zaWduZWQgaW50IHBhc2lkKTsKIAogc3Ry dWN0IGtmZF9wcm9jZXNzX2RldmljZSAqa2ZkX2JpbmRfcHJvY2Vzc190b19kZXZpY2Uoc3RydWN0 IGtmZF9kZXYgKmRldiwKIAkJCQkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnApOwpAQCAtNjU5LDQg KzY4MCwzMCBAQCB1aW50NjRfdCBrZmRfZ2V0X251bWJlcl9lbGVtcyhzdHJ1Y3Qga2ZkX2RldiAq a2ZkKTsKIHBoeXNfYWRkcl90IGtmZF9nZXRfcHJvY2Vzc19kb29yYmVsbHMoc3RydWN0IGtmZF9k ZXYgKmRldiwKIAkJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwcm9jZXNzKTsKIAorLyogRXZlbnRz ICovCitleHRlcm4gY29uc3Qgc3RydWN0IGtmZF9ldmVudF9pbnRlcnJ1cHRfY2xhc3MgZXZlbnRf aW50ZXJydXB0X2NsYXNzX2NpazsKKworZW51bSBrZmRfZXZlbnRfd2FpdF9yZXN1bHQgeworCUtG RF9XQUlUX0NPTVBMRVRFLAorCUtGRF9XQUlUX1RJTUVPVVQsCisJS0ZEX1dBSVRfRVJST1IKK307 CisKK3ZvaWQga2ZkX2V2ZW50X2luaXRfcHJvY2VzcyhzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnApOwor dm9pZCBrZmRfZXZlbnRfZnJlZV9wcm9jZXNzKHN0cnVjdCBrZmRfcHJvY2VzcyAqcCk7CitpbnQg a2ZkX2V2ZW50X21tYXAoc3RydWN0IGtmZF9wcm9jZXNzICpwcm9jZXNzLCBzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSk7CitpbnQga2ZkX3dhaXRfb25fZXZlbnRzKHN0cnVjdCBrZmRfcHJvY2Vz cyAqcCwKKwkJICAgICAgIHVpbnQzMl90IG51bV9ldmVudHMsIGNvbnN0IHVpbnQzMl90IF9fdXNl ciAqZXZlbnRfaWRzLAorCQkgICAgICAgYm9vbCBhbGwsIHVpbnQzMl90IHVzZXJfdGltZW91dF9t cywKKwkJICAgICAgIGVudW0ga2ZkX2V2ZW50X3dhaXRfcmVzdWx0ICp3YWl0X3Jlc3VsdCk7Cit2 b2lkIGtmZF9zaWduYWxfZXZlbnRfaW50ZXJydXB0KHVuc2lnbmVkIGludCBwYXNpZCwgdWludDMy X3QgcGFydGlhbF9pZCwKKwkJCQl1aW50MzJfdCB2YWxpZF9pZF9iaXRzKTsKK2ludCBrZmRfc2V0 X2V2ZW50KHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdWludDMyX3QgZXZlbnRfaWQpOworaW50IGtm ZF9yZXNldF9ldmVudChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHVpbnQzMl90IGV2ZW50X2lkKTsK K2ludCBrZmRfZXZlbnRfY3JlYXRlKHN0cnVjdCBmaWxlICpkZXZrZmQsIHN0cnVjdCBrZmRfcHJv Y2VzcyAqcCwKKwkJICAgICB1aW50MzJfdCBldmVudF90eXBlLCBib29sIGF1dG9fcmVzZXQsIHVp bnQzMl90IG5vZGVfaWQsCisJCSAgICAgdWludDMyX3QgKmV2ZW50X2lkLCB1aW50MzJfdCAqZXZl bnRfdHJpZ2dlcl9kYXRhLAorCQkgICAgIHVpbnQ2NF90ICpldmVudF9wYWdlX29mZnNldCwgdWlu dDMyX3QgKmV2ZW50X3Nsb3RfaW5kZXgpOworaW50IGtmZF9ldmVudF9kZXN0cm95KHN0cnVjdCBr ZmRfcHJvY2VzcyAqcCwgdWludDMyX3QgZXZlbnRfaWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzLmMgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGtmZC9rZmRfcHJvY2Vzcy5jCmluZGV4IDRkN2JjOTUuLmRjOTEwYWYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3MuYwpAQCAtMTc4LDYgKzE3OCw4IEBA IHN0YXRpYyB2b2lkIGtmZF9wcm9jZXNzX3dxX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQogCQlrZnJlZShwZGQpOwogCX0KIAorCWtmZF9ldmVudF9mcmVlX3Byb2Nlc3MocCk7CisK IAlrZmRfcGFzaWRfZnJlZShwLT5wYXNpZCk7CiAKIAltdXRleF91bmxvY2soJnAtPm11dGV4KTsK QEAgLTI4OCw2ICsyOTAsOCBAQCBzdGF0aWMgc3RydWN0IGtmZF9wcm9jZXNzICpjcmVhdGVfcHJv Y2Vzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZCkKIAogCUlOSVRfTElTVF9IRUFE KCZwcm9jZXNzLT5wZXJfZGV2aWNlX2RhdGEpOwogCisJa2ZkX2V2ZW50X2luaXRfcHJvY2Vzcyhw cm9jZXNzKTsKKwogCWVyciA9IHBxbV9pbml0KCZwcm9jZXNzLT5wcW0sIHByb2Nlc3MpOwogCWlm IChlcnIgIT0gMCkKIAkJZ290byBlcnJfcHJvY2Vzc19wcW1faW5pdDsKQEAgLTQzMCwzICs0MzQs MjMgQEAgYm9vbCBrZmRfaGFzX3Byb2Nlc3NfZGV2aWNlX2RhdGEoc3RydWN0IGtmZF9wcm9jZXNz ICpwKQogewogCXJldHVybiAhKGxpc3RfZW1wdHkoJnAtPnBlcl9kZXZpY2VfZGF0YSkpOwogfQor CisvKiBUaGlzIHJldHVybnMgd2l0aCBwcm9jZXNzLT5tdXRleCBsb2NrZWQuICovCitzdHJ1Y3Qg a2ZkX3Byb2Nlc3MgKmtmZF9sb29rdXBfcHJvY2Vzc19ieV9wYXNpZCh1bnNpZ25lZCBpbnQgcGFz aWQpCit7CisJc3RydWN0IGtmZF9wcm9jZXNzICpwOworCXVuc2lnbmVkIGludCB0ZW1wOworCisJ aW50IGlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrZmRfcHJvY2Vzc2VzX3NyY3UpOworCisJaGFzaF9m b3JfZWFjaF9yY3Uoa2ZkX3Byb2Nlc3Nlc190YWJsZSwgdGVtcCwgcCwga2ZkX3Byb2Nlc3Nlcykg eworCQlpZiAocC0+cGFzaWQgPT0gcGFzaWQpIHsKKwkJCW11dGV4X2xvY2soJnAtPm11dGV4KTsK KwkJCWJyZWFrOworCQl9CisJfQorCisJc3JjdV9yZWFkX3VubG9jaygma2ZkX3Byb2Nlc3Nlc19z cmN1LCBpZHgpOworCisJcmV0dXJuIHA7Cit9Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK