From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: [PATCH 4/9] drm/amdkfd: Add the events module Date: Tue, 21 Apr 2015 15:47:21 +0300 Message-ID: <1429620446-28017-4-git-send-email-oded.gabbay@amd.com> References: <1429620446-28017-1-git-send-email-oded.gabbay@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1bon0140.outbound.protection.outlook.com [157.56.111.140]) by gabe.freedesktop.org (Postfix) with ESMTP id 7E72B89A4F for ; Tue, 21 Apr 2015 05:48:40 -0700 (PDT) In-Reply-To: <1429620446-28017-1-git-send-email-oded.gabbay@amd.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 List-Id: dri-devel@lists.freedesktop.org RnJvbTogQW5kcmV3IExld3lja3kgPEFuZHJldy5MZXd5Y2t5QGFtZC5jb20+CgpUaGlzIHBhdGNo IGFkZHMgdGhlIGV2ZW50cyBtb2R1bGUgKGtmZF9ldmVudHMuYykgYW5kIHRoZSBpbnRlcnJ1cHQg aGFuZGxlcgptb2R1bGUgZm9yIEthdmVyaSAoY2lrX2V2ZW50X2ludGVycnVwdC5jKS4KClRoZSBw YXRjaCB1cGRhdGVzIHRoZSBpbnRlcnJ1cHRfaXNfd2FudGVkKCksIHNvIHRoYXQgaXQgbm93IGNh bGxzIHRoZSBpbnRlcnJ1cHQKaXNyIGZ1bmN0aW9uIHNwZWNpZmljIGZvciB0aGUgZGV2aWNlIHRo YXQgcmVjZWl2ZWQgdGhlIGludGVycnVwdC4gVGhhdCBmdW5jdGlvbgooaW1wbGVtZW50ZWQgaW4g Y2lrX2V2ZW50X2ludGVycnVwdC5jKSByZXR1cm5zIHdoZXRoZXIgdGhpcyBpbnRlcnJ1cHQgaXMg b2YKaW50ZXJlc3QgdG8gdXMgb3Igbm90LgoKVGhlIHBhdGNoIGFsc28gdXBkYXRlcyB0aGUgaW50 ZXJydXB0X3dxKCksIHNvIHRoYXQgaXQgbm93IGNhbGxzIHRoZSBkZXZpY2UncwpzcGVjaWZpYyB3 cSBmdW5jdGlvbiwgd2hpY2ggY2hlY2tzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGFuZCB0cmllcyB0 byBzaWduYWwKcmVsZXZhbnQgZXZlbnRzLgoKVGhlcmUgaXMgYSBsaW1pdGF0aW9uIG9mIDI1NiBl dmVudHMgcGVyIHByb2Nlc3MsIGluIG9yZGVyIGZvciB0aGUgc2VhcmNoCmZvciBTUSBpbnRlcnJ1 cHRzIHRvIGJlIGEgZGlyZWN0IGxvb2t1cC4gSW4gdGhlIGZ1dHVyZSwgdGhpcyBsaW1pdGF0aW9u IHdpbGwgYmUKbGlmdGVkLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IExld3lja3kgPEFuZHJldy5M ZXd5Y2t5QGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IE9kZWQgR2FiYmF5IDxvZGVkLmdhYmJheUBh bWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlICAgICAgICAg ICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvY2lrX2V2ZW50X2ludGVy cnVwdC5jIHwgIDU3ICsrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9jaWtfaW50LmggICAg ICAgICAgICAgfCAgNTQgKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2 LmMgICAgICAgICB8ICAxNiArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2Rldmlj ZS5jICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9ldmVu dHMuYyAgICAgICAgICB8IDc3NSArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRrZmQva2ZkX2V2ZW50cy5oICAgICAgICAgIHwgIDc2ICsrKwogZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRrZmQva2ZkX2ludGVycnVwdC5jICAgICAgIHwgIDExICstCiBkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJpdi5oICAgICAgICAgICAgfCAgNDggKysKIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzLmMgICAgICAgICB8ICAyNCArCiAxMCBm aWxlcyBjaGFuZ2VkLCAxMDU5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvY2lrX2V2ZW50X2ludGVycnVw dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvY2lrX2lu dC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2V2 ZW50cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2Zk X2V2ZW50cy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9NYWtlZmlsZQppbmRleCBjZDA5YzA1Li42 NTJkMjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9NYWtlZmlsZQor KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNiBA QCBhbWRrZmQteQk6PSBrZmRfbW9kdWxlLm8ga2ZkX2RldmljZS5vIGtmZF9jaGFyZGV2Lm8ga2Zk X3RvcG9sb2d5Lm8gXAogCQlrZmRfa2VybmVsX3F1ZXVlX3ZpLm8ga2ZkX3BhY2tldF9tYW5hZ2Vy Lm8gXAogCQlrZmRfcHJvY2Vzc19xdWV1ZV9tYW5hZ2VyLm8ga2ZkX2RldmljZV9xdWV1ZV9tYW5h Z2VyLm8gXAogCQlrZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXJfY2lrLm8ga2ZkX2RldmljZV9xdWV1 ZV9tYW5hZ2VyX3ZpLm8gXAotCQlrZmRfaW50ZXJydXB0Lm8KKwkJa2ZkX2ludGVycnVwdC5vIGtm ZF9ldmVudHMubyBjaWtfZXZlbnRfaW50ZXJydXB0Lm8KIAogb2JqLSQoQ09ORklHX0hTQV9BTUQp CSs9IGFtZGtmZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9jaWtf ZXZlbnRfaW50ZXJydXB0LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9jaWtfZXZlbnRf aW50ZXJydXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2NmRjNAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2Npa19ldmVudF9p bnRlcnJ1cHQuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgQWR2YW5j ZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJr ZmRfcHJpdi5oIgorI2luY2x1ZGUgImtmZF9ldmVudHMuaCIKKyNpbmNsdWRlICJjaWtfaW50Lmgi CisKK3N0YXRpYyBib29sIGNpa19ldmVudF9pbnRlcnJ1cHRfaXNyKHN0cnVjdCBrZmRfZGV2ICpk ZXYsCisJCQkJCWNvbnN0IHVpbnQzMl90ICppaF9yaW5nX2VudHJ5KQoreworCWNvbnN0IHN0cnVj dCBjaWtfaWhfcmluZ19lbnRyeSAqaWhyZSA9CisJCQkoY29uc3Qgc3RydWN0IGNpa19paF9yaW5n X2VudHJ5ICopaWhfcmluZ19lbnRyeTsKKworCS8qIERvIG5vdCBwcm9jZXNzIGluIElTUiwganVz dCByZXF1ZXN0IGl0IHRvIGJlIGZvcndhcmRlZCB0byBXUS4gKi8KKwlyZXR1cm4gKGlocmUtPnBh c2lkICE9IDApICYmCisJCShpaHJlLT5zb3VyY2VfaWQgPT0gQ0lLX0lOVFNSQ19DUF9FTkRfT0Zf UElQRSB8fAorCQlpaHJlLT5zb3VyY2VfaWQgPT0gQ0lLX0lOVFNSQ19TUV9JTlRFUlJVUFRfTVNH KTsKK30KKworc3RhdGljIHZvaWQgY2lrX2V2ZW50X2ludGVycnVwdF93cShzdHJ1Y3Qga2ZkX2Rl diAqZGV2LAorCQkJCQljb25zdCB1aW50MzJfdCAqaWhfcmluZ19lbnRyeSkKK3sKKwljb25zdCBz dHJ1Y3QgY2lrX2loX3JpbmdfZW50cnkgKmlocmUgPQorCQkJKGNvbnN0IHN0cnVjdCBjaWtfaWhf cmluZ19lbnRyeSAqKWloX3JpbmdfZW50cnk7CisKKwlpZiAoaWhyZS0+cGFzaWQgPT0gMCkKKwkJ cmV0dXJuOworCisJaWYgKGlocmUtPnNvdXJjZV9pZCA9PSBDSUtfSU5UU1JDX0NQX0VORF9PRl9Q SVBFKQorCQlrZmRfc2lnbmFsX2V2ZW50X2ludGVycnVwdChpaHJlLT5wYXNpZCwgMCwgMCk7CisJ ZWxzZSBpZiAoaWhyZS0+c291cmNlX2lkID09IENJS19JTlRTUkNfU1FfSU5URVJSVVBUX01TRykK KwkJa2ZkX3NpZ25hbF9ldmVudF9pbnRlcnJ1cHQoaWhyZS0+cGFzaWQsIGlocmUtPmRhdGEgJiAw eEZGLCA4KTsKK30KKworY29uc3Qgc3RydWN0IGtmZF9ldmVudF9pbnRlcnJ1cHRfY2xhc3MgZXZl bnRfaW50ZXJydXB0X2NsYXNzX2NpayA9IHsKKwkuaW50ZXJydXB0X2lzciA9IGNpa19ldmVudF9p bnRlcnJ1cHRfaXNyLAorCS5pbnRlcnJ1cHRfd3EgPSBjaWtfZXZlbnRfaW50ZXJydXB0X3dxLAor fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2Npa19pbnQuaCBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2Npa19pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5hZjE5YjNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRrZmQvY2lrX2ludC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg MjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs dWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICog QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKwor I2lmbmRlZiBIU0FfUkFERU9OX0NJS19JTlRfSF9JTkNMVURFRAorI2RlZmluZSBIU0FfUkFERU9O X0NJS19JTlRfSF9JTkNMVURFRAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0 IGNpa19paF9yaW5nX2VudHJ5IHsKKwl1aW50MzJfdCBzb3VyY2VfaWQ6ODsKKwl1aW50MzJfdCBy ZXNlcnZlZDE6ODsKKwl1aW50MzJfdCByZXNlcnZlZDI6MTY7CisKKwl1aW50MzJfdCBkYXRhOjI4 OworCXVpbnQzMl90IHJlc2VydmVkMzo0OworCisJLyoKKwkgKiBwaXBlaWQsIG1laWQgYW5kIHVu dXNlZDMgYXJlIG9mZmljaWFsbHkgY2FsbGVkIFJJTkdJRCwKKwkgKiBidXQgZm9yIG91ciBwdXJw b3NlcywgdGhleSBhbHdheXMgZGVjb2RlIGludG8gcGlwZSBhbmQgTUUuCisJICovCisJdWludDMy X3QgcGlwZWlkOjI7CisJdWludDMyX3QgbWVpZDoyOworCXVpbnQzMl90IHJlc2VydmVkNDo0Owor CXVpbnQzMl90IHZtaWQ6ODsKKwl1aW50MzJfdCBwYXNpZDoxNjsKKworCXVpbnQzMl90IHJlc2Vy dmVkNTsKK307CisKKyNkZWZpbmUgQ0lLX0lOVFNSQ19ERVFVRVVFX0NPTVBMRVRFCTB4QzYKKyNk ZWZpbmUgQ0lLX0lOVFNSQ19DUF9FTkRfT0ZfUElQRQkweEI1CisjZGVmaW5lIENJS19JTlRTUkNf U1FfSU5URVJSVVBUX01TRwkweEVGCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRr ZmQva2ZkX2NoYXJkZXYuYwppbmRleCA5OTMzYjJlLi5kMDYzMGNjIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMKQEAgLTI4OSw4ICsyODksMTAgQEAgc3RhdGljIGlu dCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IGtmZF9w cm9jZXNzICpwLAogCiAJYXJncy0+cXVldWVfaWQgPSBxdWV1ZV9pZDsKIAorCiAJLyogUmV0dXJu IGdwdV9pZCBhcyBkb29yYmVsbCBvZmZzZXQgZm9yIG1tYXAgdXNhZ2UgKi8KLQlhcmdzLT5kb29y YmVsbF9vZmZzZXQgPSBhcmdzLT5ncHVfaWQgPDwgUEFHRV9TSElGVDsKKwlhcmdzLT5kb29yYmVs bF9vZmZzZXQgPSAoS0ZEX01NQVBfRE9PUkJFTExfTUFTSyB8IGFyZ3MtPmdwdV9pZCk7CisJYXJn cy0+ZG9vcmJlbGxfb2Zmc2V0IDw8PSBQQUdFX1NISUZUOwogCiAJbXV0ZXhfdW5sb2NrKCZwLT5t dXRleCk7CiAKQEAgLTY4NCw1ICs2ODYsMTUgQEAgc3RhdGljIGludCBrZmRfbW1hcChzdHJ1Y3Qg ZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJaWYgKElTX0VSUihwcm9j ZXNzKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJvY2Vzcyk7CiAKLQlyZXR1cm4ga2ZkX2Rvb3JiZWxs X21tYXAocHJvY2Vzcywgdm1hKTsKKwlpZiAoKHZtYS0+dm1fcGdvZmYgJiBLRkRfTU1BUF9ET09S QkVMTF9NQVNLKSA9PQorCQkJS0ZEX01NQVBfRE9PUkJFTExfTUFTSykgeworCQl2bWEtPnZtX3Bn b2ZmID0gdm1hLT52bV9wZ29mZiBeIEtGRF9NTUFQX0RPT1JCRUxMX01BU0s7CisJCXJldHVybiBr ZmRfZG9vcmJlbGxfbW1hcChwcm9jZXNzLCB2bWEpOworCX0gZWxzZSBpZiAoKHZtYS0+dm1fcGdv ZmYgJiBLRkRfTU1BUF9FVkVOVFNfTUFTSykgPT0KKwkJCUtGRF9NTUFQX0VWRU5UU19NQVNLKSB7 CisJCXZtYS0+dm1fcGdvZmYgPSB2bWEtPnZtX3Bnb2ZmIF4gS0ZEX01NQVBfRVZFTlRTX01BU0s7 CisJCXJldHVybiByYWRlb25fa2ZkX2V2ZW50X21tYXAocHJvY2Vzcywgdm1hKTsKKwl9CisKKwly ZXR1cm4gLUVGQVVMVDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2Zk L2tmZF9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2UuYwpp bmRleCAxM2MzMGEwLi40YzAzMTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGtmZC9rZmRfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2Rl dmljZS5jCkBAIC0zNCw2ICszNCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2ZkX2RldmljZV9p bmZvIGthdmVyaV9kZXZpY2VfaW5mbyA9IHsKIAkuYXNpY19mYW1pbHkgPSBDSElQX0tBVkVSSSwK IAkubWF4X3Bhc2lkX2JpdHMgPSAxNiwKIAkuaWhfcmluZ19lbnRyeV9zaXplID0gNCAqIHNpemVv Zih1aW50MzJfdCksCisJLmV2ZW50X2ludGVycnVwdF9jbGFzcyA9ICZldmVudF9pbnRlcnJ1cHRf Y2xhc3NfY2lrLAogCS5tcWRfc2l6ZV9hbGlnbmVkID0gTVFEX1NJWkVfQUxJR05FRAogfTsKIApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2V2ZW50cy5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2V2ZW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjk4NDI1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGtmZC9rZmRfZXZlbnRzLmMKQEAgLTAsMCArMSw3NzUgQEAKKy8qCisgKiBDb3B5 cmlnaHQgMjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi ZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRI T1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L21tX3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5o PgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNp bmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRl IDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSAia2Zk X3ByaXYuaCIKKyNpbmNsdWRlICJrZmRfZXZlbnRzLmgiCisKKyNkZWZpbmUgU0lHTkFMX0VWRU5U X0xJTUlUIDI1NgorCisvKgorICogQSB0YXNrIGNhbiBvbmx5IGJlIG9uIGEgc2luZ2xlIHdhaXRf cXVldWUgYXQgYSB0aW1lLCBidXQgd2UgbmVlZCB0byBzdXBwb3J0CisgKiB3YWl0aW5nIG9uIG11 bHRpcGxlIGV2ZW50cyAoYW55L2FsbCkuCisgKiBJbnN0ZWFkIG9mIGVhY2ggZXZlbnQgc2ltcGx5 IGhhdmluZyBhIHdhaXRfcXVldWUgd2l0aCBzbGVlcGluZyB0YXNrcywgaXQKKyAqIGhhcyBhIHNp bmdseS1saW5rZWQgbGlzdCBvZiB0YXNrcy4KKyAqIEEgdGhyZWFkIHRoYXQgd2FudHMgdG8gc2xl ZXAgY3JlYXRlcyBhbiBhcnJheSBvZiB0aGVzZSwgb25lIGZvciBlYWNoIGV2ZW50CisgKiBhbmQg YWRkcyBvbmUgdG8gZWFjaCBldmVudCdzIHdhaXRlciBjaGFpbi4KKyAqLworc3RydWN0IGtmZF9l dmVudF93YWl0ZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgd2FpdGVyczsKKwlzdHJ1Y3QgdGFza19z dHJ1Y3QgKnNsZWVwaW5nX3Rhc2s7CisKKwkvKiBUcmFuc2l0aW9ucyB0byB0cnVlIHdoZW4gdGhl IGV2ZW50IHRoaXMgYmVsb25ncyB0byBpcyBzaWduYWxlZC4gKi8KKwlib29sIGFjdGl2YXRlZDsK K307CisKKy8qCisgKiBPdmVyLWNvbXBsaWNhdGVkIHBvb2xlZCBhbGxvY2F0b3IgZm9yIGV2ZW50 IG5vdGlmaWNhdGlvbiBzbG90cy4KKyAqCisgKiBFYWNoIHNpZ25hbCBldmVudCBuZWVkcyBhIDY0 LWJpdCBzaWduYWwgc2xvdCB3aGVyZSB0aGUgc2lnbmFsZXIgd2lsbCB3cml0ZQorICogYSAxIGJl Zm9yZSBzZW5kaW5nIGFuIGludGVycnVwdC5sIChUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWUg aW50ZXJydXB0cworICogZG8gbm90IGNvbnRhaW4gZW5vdWdoIHNwYXJlIGRhdGEgYml0cyB0byBp ZGVudGlmeSBhbiBldmVudC4pCisgKiBXZSBnZXQgd2hvbGUgcGFnZXMgZnJvbSB2bWFsbG9jIGFu ZCBtYXAgdGhlbSB0byB0aGUgcHJvY2VzcyBWQS4KKyAqIEluZGl2aWR1YWwgc2lnbmFsIGV2ZW50 cyBhcmUgdGhlbiBhbGxvY2F0ZWQgYSBzbG90IGluIGEgcGFnZS4KKyAqLworCitzdHJ1Y3Qgc2ln bmFsX3BhZ2UgeworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfcGFnZXM7CS8qIGtmZF9wcm9jZXNz LnNpZ25hbF9ldmVudF9wYWdlcyAqLworCXVpbnQ2NF90ICprZXJuZWxfYWRkcmVzczsKKwl1aW50 NjRfdCBfX3VzZXIgKnVzZXJfYWRkcmVzczsKKwl1aW50MzJfdCBwYWdlX2luZGV4OwkJLyogSW5k ZXggaW50byB0aGUgbW1hcCBhcGVydHVyZS4gKi8KKwl1bnNpZ25lZCBpbnQgZnJlZV9zbG90czsK Kwl1bnNpZ25lZCBsb25nIHVzZWRfc2xvdF9iaXRtYXBbMF07Cit9OworCisjZGVmaW5lIFNMT1RT X1BFUl9QQUdFIChQQUdFX1NJWkUgLyBzaXplb2YodWludDY0X3QpKQorI2RlZmluZSBTTE9UX0JJ VE1BUF9TSVpFIEJJVFNfVE9fTE9OR1MoU0xPVFNfUEVSX1BBR0UpCisjZGVmaW5lIEJJVFNfUEVS X1BBR0UgKGlsb2cyKFNMT1RTX1BFUl9QQUdFKSsxKQorI2RlZmluZSBTSUdOQUxfUEFHRV9TSVpF IChzaXplb2Yoc3RydWN0IHNpZ25hbF9wYWdlKSArIFwKKwkJCQlTTE9UX0JJVE1BUF9TSVpFICog c2l6ZW9mKGxvbmcpKQorCisvKgorICogRm9yIHNpZ25hbCBldmVudHMsIHRoZSBldmVudCBJRCBp cyB1c2VkIGFzIHRoZSBpbnRlcnJ1cHQgdXNlciBkYXRhLgorICogRm9yIFNRIHNfc2VuZG1zZyBp bnRlcnJ1cHRzLCB0aGlzIGlzIGxpbWl0ZWQgdG8gOCBiaXRzLiBXZSB3aWxsCisgKiBsaW1pdCB0 byAyNTYgc2lnbmFsIGV2ZW50cyBhbmQgc2ltcGx5IHVzZSBhbGwgdGhlIGF2YWlsYWJsZSBiaXRz LgorICovCisKKyNkZWZpbmUgSU5URVJSVVBUX0RBVEFfQklUUyA4CisjZGVmaW5lIFNJR05BTF9F VkVOVF9JRF9TTE9UX1NISUZUIDAKKworc3RhdGljIHVpbnQ2NF90ICpwYWdlX3Nsb3RzKHN0cnVj dCBzaWduYWxfcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcGFnZS0+a2VybmVsX2FkZHJlc3M7Cit9 CisKK3N0YXRpYyBib29sIGFsbG9jYXRlX2ZyZWVfc2xvdChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnBy b2Nlc3MsCisJCQkJc3RydWN0IHNpZ25hbF9wYWdlICoqb3V0X3BhZ2UsCisJCQkJdW5zaWduZWQg aW50ICpvdXRfc2xvdF9pbmRleCkKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3BhZ2UgKnBhZ2U7CisKKwls aXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZwcm9jZXNzLT5zaWduYWxfZXZlbnRfcGFnZXMsIGV2 ZW50X3BhZ2VzKSB7CisJCWlmIChwYWdlLT5mcmVlX3Nsb3RzID4gMCkgeworCQkJdW5zaWduZWQg aW50IHNsb3QgPQorCQkJCWZpbmRfZmlyc3RfemVyb19iaXQocGFnZS0+dXNlZF9zbG90X2JpdG1h cCwKKwkJCQkJCQlTTE9UU19QRVJfUEFHRSk7CisKKwkJCV9fc2V0X2JpdChzbG90LCBwYWdlLT51 c2VkX3Nsb3RfYml0bWFwKTsKKwkJCXBhZ2UtPmZyZWVfc2xvdHMtLTsKKworCQkJcGFnZV9zbG90 cyhwYWdlKVtzbG90XSA9IFVOU0lHTkFMRURfRVZFTlRfU0xPVDsKKworCQkJKm91dF9wYWdlID0g cGFnZTsKKwkJCSpvdXRfc2xvdF9pbmRleCA9IHNsb3Q7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQor CX0KKworCXJldHVybiBmYWxzZTsKK30KKworI2RlZmluZSBsaXN0X3RhaWxfZW50cnkoaGVhZCwg dHlwZSwgbWVtYmVyKSBcCisJbGlzdF9lbnRyeSgoaGVhZCktPnByZXYsIHR5cGUsIG1lbWJlcikK Kworc3RhdGljIGJvb2wgYWxsb2NhdGVfc2lnbmFsX3BhZ2Uoc3RydWN0IGZpbGUgKmRldmtmZCwg c3RydWN0IGtmZF9wcm9jZXNzICpwKQoreworCXZvaWQgKmJhY2tpbmdfc3RvcmU7CisJc3RydWN0 IHNpZ25hbF9wYWdlICpwYWdlOworCisJcGFnZSA9IGt6YWxsb2MoU0lHTkFMX1BBR0VfU0laRSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlKQorCQlnb3RvIGZhaWxfYWxsb2Nfc2lnbmFsX3BhZ2U7 CisKKwlwYWdlLT5mcmVlX3Nsb3RzID0gU0xPVFNfUEVSX1BBR0U7CisKKwliYWNraW5nX3N0b3Jl ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFiYWNraW5nX3N0 b3JlKQorCQlnb3RvIGZhaWxfYWxsb2Nfc2lnbmFsX3N0b3JlOworCisJLyogcHJldmVudCB1c2Vy LW1vZGUgaW5mbyBsZWFrcyAqLworCW1lbXNldChiYWNraW5nX3N0b3JlLCAodWludDhfdCkgVU5T SUdOQUxFRF9FVkVOVF9TTE9ULCBQQUdFX1NJWkUpOworCXBhZ2UtPmtlcm5lbF9hZGRyZXNzID0g YmFja2luZ19zdG9yZTsKKworCWlmIChsaXN0X2VtcHR5KCZwLT5zaWduYWxfZXZlbnRfcGFnZXMp KQorCQlwYWdlLT5wYWdlX2luZGV4ID0gMDsKKwllbHNlCisJCXBhZ2UtPnBhZ2VfaW5kZXggPSBs aXN0X3RhaWxfZW50cnkoJnAtPnNpZ25hbF9ldmVudF9wYWdlcywKKwkJCQkJCSAgIHN0cnVjdCBz aWduYWxfcGFnZSwKKwkJCQkJCSAgIGV2ZW50X3BhZ2VzKS0+cGFnZV9pbmRleCArIDE7CisKKwls aXN0X2FkZCgmcGFnZS0+ZXZlbnRfcGFnZXMsICZwLT5zaWduYWxfZXZlbnRfcGFnZXMpOworCisJ cmV0dXJuIHRydWU7CisKK2ZhaWxfYWxsb2Nfc2lnbmFsX3N0b3JlOgorCWtmcmVlKHBhZ2UpOwor ZmFpbF9hbGxvY19zaWduYWxfcGFnZToKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29s IGFsbG9jYXRlX2V2ZW50X25vdGlmaWNhdGlvbl9zbG90KHN0cnVjdCBmaWxlICpkZXZrZmQsCisJ CQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJCQkJc3RydWN0IHNpZ25hbF9wYWdlICoqcGFn ZSwKKwkJCQkJdW5zaWduZWQgaW50ICpzaWduYWxfc2xvdF9pbmRleCkKK3sKKwlpZiAoIWFsbG9j YXRlX2ZyZWVfc2xvdChwLCBwYWdlLCBzaWduYWxfc2xvdF9pbmRleCkpIHsKKwkJYWxsb2NhdGVf c2lnbmFsX3BhZ2UoZGV2a2ZkLCBwKTsKKwkJcmV0dXJuIGFsbG9jYXRlX2ZyZWVfc2xvdChwLCBw YWdlLCBzaWduYWxfc2xvdF9pbmRleCk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qIEFz c3VtZXMgdGhhdCB0aGUgcHJvY2VzcydzIGV2ZW50X211dGV4IGlzIGxvY2tlZC4gKi8KK3N0YXRp YyB2b2lkIHJlbGVhc2VfZXZlbnRfbm90aWZpY2F0aW9uX3Nsb3Qoc3RydWN0IHNpZ25hbF9wYWdl ICpwYWdlLAorCQkJCQkJc2l6ZV90IHNsb3RfaW5kZXgpCit7CisJX19jbGVhcl9iaXQoc2xvdF9p bmRleCwgcGFnZS0+dXNlZF9zbG90X2JpdG1hcCk7CisJcGFnZS0+ZnJlZV9zbG90cysrOworCisJ LyogV2UgZG9uJ3QgZnJlZSBzaWduYWwgcGFnZXMsIHRoZXkgYXJlIHJldGFpbmVkIGJ5IHRoZSBw cm9jZXNzCisJICogYW5kIHJldXNlZCB1bnRpbCBpdCBleGl0cy4gKi8KK30KKworc3RhdGljIHN0 cnVjdCBzaWduYWxfcGFnZSAqbG9va3VwX3NpZ25hbF9wYWdlX2J5X2luZGV4KHN0cnVjdCBrZmRf cHJvY2VzcyAqcCwKKwkJCQkJCXVuc2lnbmVkIGludCBwYWdlX2luZGV4KQoreworCXN0cnVjdCBz aWduYWxfcGFnZSAqcGFnZTsKKworCS8qCisJICogVGhpcyBpcyBzYWZlIGJlY2F1c2Ugd2UgZG9u J3QgZGVsZXRlIHNpZ25hbCBwYWdlcyB1bnRpbCB0aGUKKwkgKiBwcm9jZXNzIGV4aXRzLgorCSAq LworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJnAtPnNpZ25hbF9ldmVudF9wYWdlcywgZXZl bnRfcGFnZXMpCisJCWlmIChwYWdlLT5wYWdlX2luZGV4ID09IHBhZ2VfaW5kZXgpCisJCQlyZXR1 cm4gcGFnZTsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICogQXNzdW1lcyB0aGF0IHAtPmV2 ZW50X211dGV4IGlzIGhlbGQgYW5kIG9mIGNvdXJzZSB0aGF0IHAgaXMgbm90IGdvaW5nCisgKiBh d2F5IChjdXJyZW50IG9yIGxvY2tlZCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qga2ZkX2V2ZW50ICps b29rdXBfZXZlbnRfYnlfaWQoc3RydWN0IGtmZF9wcm9jZXNzICpwLCB1aW50MzJfdCBpZCkKK3sK KwlzdHJ1Y3Qga2ZkX2V2ZW50ICpldjsKKworCWhhc2hfZm9yX2VhY2hfcG9zc2libGUocC0+ZXZl bnRzLCBldiwgZXZlbnRzLCBpZCkKKwkJaWYgKGV2LT5ldmVudF9pZCA9PSBpZCkKKwkJCXJldHVy biBldjsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdTMyIG1ha2Vfc2lnbmFsX2V2ZW50 X2lkKHN0cnVjdCBzaWduYWxfcGFnZSAqcGFnZSwKKwkJCQkJIHVuc2lnbmVkIGludCBzaWduYWxf c2xvdF9pbmRleCkKK3sKKwlyZXR1cm4gcGFnZS0+cGFnZV9pbmRleCB8CisJCQkoc2lnbmFsX3Ns b3RfaW5kZXggPDwgU0lHTkFMX0VWRU5UX0lEX1NMT1RfU0hJRlQpOworfQorCisvKgorICogUHJv ZHVjZSBhIGtmZCBldmVudCBpZCBmb3IgYSBub25zaWduYWwgZXZlbnQuCisgKiBUaGVzZSBhcmUg YXJiaXRyYXJ5IG51bWJlcnMsIHNvIHdlIGRvIGEgc2VxdWVudGlhbCBzZWFyY2ggdGhyb3VnaAor ICogdGhlIGhhc2ggdGFibGUgZm9yIGFuIHVudXNlZCBudW1iZXIuCisgKi8KK3N0YXRpYyB1MzIg bWFrZV9ub25zaWduYWxfZXZlbnRfaWQoc3RydWN0IGtmZF9wcm9jZXNzICpwKQoreworCXUzMiBp ZDsKKworCWZvciAoaWQgPSBwLT5uZXh0X25vbnNpZ25hbF9ldmVudF9pZDsKKwkJaWQgPCBLRkRf TEFTVF9OT05TSUdOQUxfRVZFTlRfSUQgJiYKKwkJbG9va3VwX2V2ZW50X2J5X2lkKHAsIGlkKSAh PSBOVUxMOworCQlpZCsrKQorCQk7CisKKwlpZiAoaWQgPCBLRkRfTEFTVF9OT05TSUdOQUxfRVZF TlRfSUQpIHsKKworCQkvKgorCQkgKiBXaGF0IGlmIGlkID09IExBU1RfTk9OU0lHTkFMX0VWRU5U X0lEIC0gMT8KKwkJICogVGhlbiBuZXh0X25vbnNpZ25hbF9ldmVudF9pZCA9IExBU1RfTk9OU0lH TkFMX0VWRU5UX0lEIHNvCisJCSAqIHRoZSBmaXJzdCBsb29wIGZhaWxzIGltbWVkaWF0ZWx5IGFu ZCB3ZSBwcm9jZWVkIHdpdGggdGhlCisJCSAqIHdyYXBhcm91bmQgbG9vcCBiZWxvdy4KKwkJICov CisJCXAtPm5leHRfbm9uc2lnbmFsX2V2ZW50X2lkID0gaWQgKyAxOworCisJCXJldHVybiBpZDsK Kwl9CisKKwlmb3IgKGlkID0gS0ZEX0ZJUlNUX05PTlNJR05BTF9FVkVOVF9JRDsKKwkJaWQgPCBL RkRfTEFTVF9OT05TSUdOQUxfRVZFTlRfSUQgJiYKKwkJbG9va3VwX2V2ZW50X2J5X2lkKHAsIGlk KSAhPSBOVUxMOworCQlpZCsrKQorCQk7CisKKworCWlmIChpZCA8IEtGRF9MQVNUX05PTlNJR05B TF9FVkVOVF9JRCkgeworCQlwLT5uZXh0X25vbnNpZ25hbF9ldmVudF9pZCA9IGlkICsgMTsKKwkJ cmV0dXJuIGlkOworCX0KKworCXAtPm5leHRfbm9uc2lnbmFsX2V2ZW50X2lkID0gS0ZEX0ZJUlNU X05PTlNJR05BTF9FVkVOVF9JRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBrZmRf ZXZlbnQgKmxvb2t1cF9ldmVudF9ieV9wYWdlX3Nsb3Qoc3RydWN0IGtmZF9wcm9jZXNzICpwLAor CQkJCQkJc3RydWN0IHNpZ25hbF9wYWdlICpwYWdlLAorCQkJCQkJdW5zaWduZWQgaW50IHNpZ25h bF9zbG90KQoreworCXJldHVybiBsb29rdXBfZXZlbnRfYnlfaWQocCwgbWFrZV9zaWduYWxfZXZl bnRfaWQocGFnZSwgc2lnbmFsX3Nsb3QpKTsKK30KKworc3RhdGljIGludCBjcmVhdGVfc2lnbmFs X2V2ZW50KHN0cnVjdCBmaWxlICpkZXZrZmQsCisJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwLAor CQkJCXN0cnVjdCBrZmRfZXZlbnQgKmV2KQoreworCWlmIChwLT5zaWduYWxfZXZlbnRfY291bnQg PT0gU0lHTkFMX0VWRU5UX0xJTUlUKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghYWxsb2Nh dGVfZXZlbnRfbm90aWZpY2F0aW9uX3Nsb3QoZGV2a2ZkLCBwLCAmZXYtPnNpZ25hbF9wYWdlLAor CQkJCQkJJmV2LT5zaWduYWxfc2xvdF9pbmRleCkpCisJCXJldHVybiAtRU5PTUVNOworCisJcC0+ c2lnbmFsX2V2ZW50X2NvdW50Kys7CisKKwlldi0+dXNlcl9zaWduYWxfYWRkcmVzcyA9CisJCQkm ZXYtPnNpZ25hbF9wYWdlLT51c2VyX2FkZHJlc3NbZXYtPnNpZ25hbF9zbG90X2luZGV4XTsKKwor CWV2LT5ldmVudF9pZCA9IG1ha2Vfc2lnbmFsX2V2ZW50X2lkKGV2LT5zaWduYWxfcGFnZSwKKwkJ CQkJCWV2LT5zaWduYWxfc2xvdF9pbmRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5v IG5vbi1zaWduYWwgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgeWV0LgorICogV2UgY3JlYXRlIHRoZW0g YXMgZXZlbnRzIHRoYXQgbmV2ZXIgc2lnbmFsLgorICogU2V0IGV2ZW50IGNhbGxzIGZyb20gdXNl ci1tb2RlIGFyZSBmYWlsZWQuCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX290aGVyX2V2ZW50KHN0 cnVjdCBrZmRfcHJvY2VzcyAqcCwgc3RydWN0IGtmZF9ldmVudCAqZXYpCit7CisJZXYtPmV2ZW50 X2lkID0gbWFrZV9ub25zaWduYWxfZXZlbnRfaWQocCk7CisJaWYgKGV2LT5ldmVudF9pZCA9PSAw KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCit2b2lkIGtmZF9ldmVudF9p bml0X3Byb2Nlc3Moc3RydWN0IGtmZF9wcm9jZXNzICpwKQoreworCW11dGV4X2luaXQoJnAtPmV2 ZW50X211dGV4KTsKKwloYXNoX2luaXQocC0+ZXZlbnRzKTsKKwlJTklUX0xJU1RfSEVBRCgmcC0+ c2lnbmFsX2V2ZW50X3BhZ2VzKTsKKwlwLT5uZXh0X25vbnNpZ25hbF9ldmVudF9pZCA9IEtGRF9G SVJTVF9OT05TSUdOQUxfRVZFTlRfSUQ7CisJcC0+c2lnbmFsX2V2ZW50X2NvdW50ID0gMDsKK30K Kworc3RhdGljIHZvaWQgZGVzdHJveV9ldmVudChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHN0cnVj dCBrZmRfZXZlbnQgKmV2KQoreworCWlmIChldi0+c2lnbmFsX3BhZ2UgIT0gTlVMTCkgeworCQly ZWxlYXNlX2V2ZW50X25vdGlmaWNhdGlvbl9zbG90KGV2LT5zaWduYWxfcGFnZSwKKwkJCQkJCWV2 LT5zaWduYWxfc2xvdF9pbmRleCk7CisJCXAtPnNpZ25hbF9ldmVudF9jb3VudC0tOworCX0KKwor CS8qCisJICogQWJhbmRvbiB0aGUgbGlzdCBvZiB3YWl0ZXJzLiBJbmRpdmlkdWFsIHdhaXRpbmcg dGhyZWFkcyB3aWxsCisJICogY2xlYW4gdXAgdGhlaXIgb3duIGRhdGEuCisJICovCisJbGlzdF9k ZWwoJmV2LT53YWl0ZXJzKTsKKworCWhhc2hfZGVsKCZldi0+ZXZlbnRzKTsKKwlrZnJlZShldik7 Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZXZlbnRzKHN0cnVjdCBrZmRfcHJvY2VzcyAqcCkK K3sKKwlzdHJ1Y3Qga2ZkX2V2ZW50ICpldjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCXVu c2lnbmVkIGludCBoYXNoX2JrdDsKKworCWhhc2hfZm9yX2VhY2hfc2FmZShwLT5ldmVudHMsIGhh c2hfYmt0LCB0bXAsIGV2LCBldmVudHMpCisJCWRlc3Ryb3lfZXZlbnQocCwgZXYpOworfQorCisv KgorICogV2UgYXNzdW1lIHRoYXQgdGhlIHByb2Nlc3MgaXMgYmVpbmcgZGVzdHJveWVkIGFuZCB0 aGVyZSBpcyBubyBuZWVkIHRvCisgKiB1bm1hcCB0aGUgcGFnZXMgb3Iga2VlcCBib29ra2VlcGlu ZyBkYXRhIGluIG9yZGVyLgorICovCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9zaWduYWxfcGFnZXMo c3RydWN0IGtmZF9wcm9jZXNzICpwKQoreworCXN0cnVjdCBzaWduYWxfcGFnZSAqcGFnZSwgKnRt cDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXAsICZwLT5zaWduYWxfZXZl bnRfcGFnZXMsCisJCQkJCWV2ZW50X3BhZ2VzKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9u ZylwYWdlLT5rZXJuZWxfYWRkcmVzcyk7CisJCWtmcmVlKHBhZ2UpOworCX0KK30KKwordm9pZCBr ZmRfZXZlbnRfZnJlZV9wcm9jZXNzKHN0cnVjdCBrZmRfcHJvY2VzcyAqcCkKK3sKKwlkZXN0cm95 X2V2ZW50cyhwKTsKKwlzaHV0ZG93bl9zaWduYWxfcGFnZXMocCk7Cit9CisKK3N0YXRpYyBib29s IGV2ZW50X2Nhbl9iZV9ncHVfc2lnbmFsZWQoY29uc3Qgc3RydWN0IGtmZF9ldmVudCAqZXYpCit7 CisJcmV0dXJuIGV2LT50eXBlID09IEtGRF9FVkVOVF9UWVBFX1NJR05BTCB8fAorCQkJCQlldi0+ dHlwZSA9PSBLRkRfRVZFTlRfVFlQRV9ERUJVRzsKK30KKworc3RhdGljIGJvb2wgZXZlbnRfY2Fu X2JlX2NwdV9zaWduYWxlZChjb25zdCBzdHJ1Y3Qga2ZkX2V2ZW50ICpldikKK3sKKwlyZXR1cm4g ZXYtPnR5cGUgPT0gS0ZEX0VWRU5UX1RZUEVfU0lHTkFMOworfQorCitpbnQga2ZkX2V2ZW50X2Ny ZWF0ZShzdHJ1Y3QgZmlsZSAqZGV2a2ZkLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCisJCSAgICAg dWludDMyX3QgZXZlbnRfdHlwZSwgYm9vbCBhdXRvX3Jlc2V0LCB1aW50MzJfdCBub2RlX2lkLAor CQkgICAgIHVpbnQzMl90ICpldmVudF9pZCwgdWludDMyX3QgKmV2ZW50X3RyaWdnZXJfZGF0YSwK KwkJICAgICB1aW50NjRfdCAqZXZlbnRfcGFnZV9vZmZzZXQsIHVpbnQzMl90ICpldmVudF9zbG90 X2luZGV4KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBrZmRfZXZlbnQgKmV2ID0ga3phbGxv YyhzaXplb2YoKmV2KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWV2KQorCQlyZXR1cm4gLUVOT01F TTsKKworCWV2LT50eXBlID0gZXZlbnRfdHlwZTsKKwlldi0+YXV0b19yZXNldCA9IGF1dG9fcmVz ZXQ7CisJZXYtPnNpZ25hbGVkID0gZmFsc2U7CisKKwlJTklUX0xJU1RfSEVBRCgmZXYtPndhaXRl cnMpOworCisJKmV2ZW50X3BhZ2Vfb2Zmc2V0ID0gMDsKKworCW11dGV4X2xvY2soJnAtPmV2ZW50 X211dGV4KTsKKworCXN3aXRjaCAoZXZlbnRfdHlwZSkgeworCWNhc2UgS0ZEX0VWRU5UX1RZUEVf U0lHTkFMOgorCWNhc2UgS0ZEX0VWRU5UX1RZUEVfREVCVUc6CisJCXJldCA9IGNyZWF0ZV9zaWdu YWxfZXZlbnQoZGV2a2ZkLCBwLCBldik7CisJCWlmIChyZXQgPT0gMCkgeworCQkJKmV2ZW50X3Bh Z2Vfb2Zmc2V0ID0gKGV2LT5zaWduYWxfcGFnZS0+cGFnZV9pbmRleCB8CisJCQkJCUtGRF9NTUFQ X0VWRU5UU19NQVNLKTsKKwkJCSpldmVudF9wYWdlX29mZnNldCA8PD0gUEFHRV9TSElGVDsKKwkJ CSpldmVudF9zbG90X2luZGV4ID0gZXYtPnNpZ25hbF9zbG90X2luZGV4OworCQl9IGVsc2UKKwkJ CXByX2VycigiYW1ka2ZkOiBlcnJvciBzaWduYWwgcGFnZVxuIik7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCXJldCA9IGNyZWF0ZV9vdGhlcl9ldmVudChwLCBldik7CisJCWJyZWFrOworCX0KKwor CWlmICghcmV0KSB7CisJCWhhc2hfYWRkKHAtPmV2ZW50cywgJmV2LT5ldmVudHMsIGV2LT5ldmVu dF9pZCk7CisKKwkJKmV2ZW50X2lkID0gZXYtPmV2ZW50X2lkOworCQkqZXZlbnRfdHJpZ2dlcl9k YXRhID0gZXYtPmV2ZW50X2lkOworCX0gZWxzZSB7CisJCWtmcmVlKGV2KTsKKwl9CisKKwltdXRl eF91bmxvY2soJnAtPmV2ZW50X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEFzc3Vt ZXMgdGhhdCBwIGlzIGN1cnJlbnQuICovCitpbnQga2ZkX2V2ZW50X2Rlc3Ryb3koc3RydWN0IGtm ZF9wcm9jZXNzICpwLCB1aW50MzJfdCBldmVudF9pZCkKK3sKKwlzdHJ1Y3Qga2ZkX2V2ZW50ICpl djsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnAtPmV2ZW50X211dGV4KTsKKworCWV2 ID0gbG9va3VwX2V2ZW50X2J5X2lkKHAsIGV2ZW50X2lkKTsKKworCWlmIChldikKKwkJZGVzdHJv eV9ldmVudChwLCBldik7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJbXV0ZXhfdW5sb2Nr KCZwLT5ldmVudF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2V0X2V2 ZW50KHN0cnVjdCBrZmRfZXZlbnQgKmV2KQoreworCXN0cnVjdCBrZmRfZXZlbnRfd2FpdGVyICp3 YWl0ZXI7CisJc3RydWN0IGtmZF9ldmVudF93YWl0ZXIgKm5leHQ7CisKKwkvKiBBdXRvIHJlc2V0 IGlmIHRoZSBsaXN0IGlzIG5vbi1lbXB0eSBhbmQgd2UncmUgd2FraW5nIHNvbWVvbmUuICovCisJ ZXYtPnNpZ25hbGVkID0gIWV2LT5hdXRvX3Jlc2V0IHx8IGxpc3RfZW1wdHkoJmV2LT53YWl0ZXJz KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3YWl0ZXIsIG5leHQsICZldi0+d2FpdGVy cywgd2FpdGVycykgeworCQl3YWl0ZXItPmFjdGl2YXRlZCA9IHRydWU7CisKKwkJLyogX2luaXQg YmVjYXVzZSBmcmVlX3dhaXRlcnMgd2lsbCBjYWxsIGxpc3RfZGVsICovCisJCWxpc3RfZGVsX2lu aXQoJndhaXRlci0+d2FpdGVycyk7CisKKwkJd2FrZV91cF9wcm9jZXNzKHdhaXRlci0+c2xlZXBp bmdfdGFzayk7CisJfQorfQorCisvKiBBc3N1bWVzIHRoYXQgcCBpcyBjdXJyZW50LiAqLworaW50 IGtmZF9zZXRfZXZlbnQoc3RydWN0IGtmZF9wcm9jZXNzICpwLCB1aW50MzJfdCBldmVudF9pZCkK K3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qga2ZkX2V2ZW50ICpldjsKKworCW11dGV4X2xvY2so JnAtPmV2ZW50X211dGV4KTsKKworCWV2ID0gbG9va3VwX2V2ZW50X2J5X2lkKHAsIGV2ZW50X2lk KTsKKworCWlmIChldiAmJiBldmVudF9jYW5fYmVfY3B1X3NpZ25hbGVkKGV2KSkKKwkJc2V0X2V2 ZW50KGV2KTsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7CisKKwltdXRleF91bmxvY2soJnAtPmV2 ZW50X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZXNldF9ldmVudChz dHJ1Y3Qga2ZkX2V2ZW50ICpldikKK3sKKwlldi0+c2lnbmFsZWQgPSBmYWxzZTsKK30KKworLyog QXNzdW1lcyB0aGF0IHAgaXMgY3VycmVudC4gKi8KK2ludCBrZmRfcmVzZXRfZXZlbnQoc3RydWN0 IGtmZF9wcm9jZXNzICpwLCB1aW50MzJfdCBldmVudF9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlz dHJ1Y3Qga2ZkX2V2ZW50ICpldjsKKworCW11dGV4X2xvY2soJnAtPmV2ZW50X211dGV4KTsKKwor CWV2ID0gbG9va3VwX2V2ZW50X2J5X2lkKHAsIGV2ZW50X2lkKTsKKworCWlmIChldiAmJiBldmVu dF9jYW5fYmVfY3B1X3NpZ25hbGVkKGV2KSkKKwkJcmVzZXRfZXZlbnQoZXYpOworCWVsc2UKKwkJ cmV0ID0gLUVJTlZBTDsKKworCW11dGV4X3VubG9jaygmcC0+ZXZlbnRfbXV0ZXgpOworCXJldHVy biByZXQ7CisKK30KKworc3RhdGljIHZvaWQgYWNrbm93bGVkZ2Vfc2lnbmFsKHN0cnVjdCBrZmRf cHJvY2VzcyAqcCwgc3RydWN0IGtmZF9ldmVudCAqZXYpCit7CisJcGFnZV9zbG90cyhldi0+c2ln bmFsX3BhZ2UpW2V2LT5zaWduYWxfc2xvdF9pbmRleF0gPQorCQkJCQkJVU5TSUdOQUxFRF9FVkVO VF9TTE9UOworfQorCitzdGF0aWMgYm9vbCBpc19zbG90X3NpZ25hbGVkKHN0cnVjdCBzaWduYWxf cGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXJldHVybiBwYWdlX3Nsb3RzKHBh Z2UpW2luZGV4XSAhPSBVTlNJR05BTEVEX0VWRU5UX1NMT1Q7Cit9CisKK3N0YXRpYyB2b2lkIHNl dF9ldmVudF9mcm9tX2ludGVycnVwdChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCisJCQkJCXN0cnVj dCBrZmRfZXZlbnQgKmV2KQoreworCWlmIChldiAmJiBldmVudF9jYW5fYmVfZ3B1X3NpZ25hbGVk KGV2KSkgeworCQlhY2tub3dsZWRnZV9zaWduYWwocCwgZXYpOworCQlzZXRfZXZlbnQoZXYpOwor CX0KK30KKwordm9pZCBrZmRfc2lnbmFsX2V2ZW50X2ludGVycnVwdCh1bnNpZ25lZCBpbnQgcGFz aWQsIHVpbnQzMl90IHBhcnRpYWxfaWQsCisJCQkJdWludDMyX3QgdmFsaWRfaWRfYml0cykKK3sK KwlzdHJ1Y3Qga2ZkX2V2ZW50ICpldjsKKworCS8qCisJICogQmVjYXVzZSB3ZSBhcmUgY2FsbGVk IGZyb20gYXJiaXRyYXJ5IGNvbnRleHQgKHdvcmtxdWV1ZSkgYXMgb3Bwb3NlZAorCSAqIHRvIHBy b2Nlc3MgY29udGV4dCwga2ZkX3Byb2Nlc3MgY291bGQgYXR0ZW1wdCB0byBleGl0IHdoaWxlIHdl IGFyZQorCSAqIHJ1bm5pbmcgc28gdGhlIGxvb2t1cCBmdW5jdGlvbiByZXR1cm5zIGEgbG9ja2Vk IHByb2Nlc3MuCisJICovCisJc3RydWN0IGtmZF9wcm9jZXNzICpwID0ga2ZkX2xvb2t1cF9wcm9j ZXNzX2J5X3Bhc2lkKHBhc2lkKTsKKworCWlmICghcCkKKwkJcmV0dXJuOyAvKiBQcmVzdW1hYmx5 IHByb2Nlc3MgZXhpdGVkLiAqLworCisJbXV0ZXhfbG9jaygmcC0+ZXZlbnRfbXV0ZXgpOworCisJ aWYgKHZhbGlkX2lkX2JpdHMgPj0gSU5URVJSVVBUX0RBVEFfQklUUykgeworCQkvKiBQYXJ0aWFs IElEIGlzIGEgZnVsbCBJRC4gKi8KKwkJZXYgPSBsb29rdXBfZXZlbnRfYnlfaWQocCwgcGFydGlh bF9pZCk7CisJCXNldF9ldmVudF9mcm9tX2ludGVycnVwdChwLCBldik7CisJfSBlbHNlIHsKKwkJ LyoKKwkJICogUGFydGlhbCBJRCBpcyBpbiBmYWN0IHBhcnRpYWwuIEZvciBub3cgd2UgY29tcGxl dGVseQorCQkgKiBpZ25vcmUgaXQsIGJ1dCB3ZSBjb3VsZCB1c2UgYW55IGJpdHMgd2UgZGlkIHJl Y2VpdmUgdG8KKwkJICogc2VhcmNoIGZhc3Rlci4KKwkJICovCisJCXN0cnVjdCBzaWduYWxfcGFn ZSAqcGFnZTsKKwkJdW5zaWduZWQgaTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZw LT5zaWduYWxfZXZlbnRfcGFnZXMsIGV2ZW50X3BhZ2VzKQorCQkJZm9yIChpID0gMDsgaSA8IFNM T1RTX1BFUl9QQUdFOyBpKyspCisJCQkJaWYgKGlzX3Nsb3Rfc2lnbmFsZWQocGFnZSwgaSkpIHsK KwkJCQkJZXYgPSBsb29rdXBfZXZlbnRfYnlfcGFnZV9zbG90KHAsCisJCQkJCQkJCXBhZ2UsIGkp OworCQkJCQlzZXRfZXZlbnRfZnJvbV9pbnRlcnJ1cHQocCwgZXYpOworCQkJCX0KKwl9CisKKwlt dXRleF91bmxvY2soJnAtPmV2ZW50X211dGV4KTsKKwltdXRleF91bmxvY2soJnAtPm11dGV4KTsK K30KKworc3RhdGljIHN0cnVjdCBrZmRfZXZlbnRfd2FpdGVyICphbGxvY19ldmVudF93YWl0ZXJz KHVpbnQzMl90IG51bV9ldmVudHMpCit7CisJc3RydWN0IGtmZF9ldmVudF93YWl0ZXIgKmV2ZW50 X3dhaXRlcnM7CisJdWludDMyX3QgaTsKKworCWV2ZW50X3dhaXRlcnMgPSBrbWFsbG9jX2FycmF5 KG51bV9ldmVudHMsCisJCQkJCXNpemVvZihzdHJ1Y3Qga2ZkX2V2ZW50X3dhaXRlciksCisJCQkJ CUdGUF9LRVJORUwpOworCisJZm9yIChpID0gMDsgKGV2ZW50X3dhaXRlcnMpICYmIChpIDwgbnVt X2V2ZW50cykgOyBpKyspIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmV2ZW50X3dhaXRlcnNbaV0ud2Fp dGVycyk7CisJCWV2ZW50X3dhaXRlcnNbaV0uc2xlZXBpbmdfdGFzayA9IGN1cnJlbnQ7CisJCWV2 ZW50X3dhaXRlcnNbaV0uYWN0aXZhdGVkID0gZmFsc2U7CisJfQorCisJcmV0dXJuIGV2ZW50X3dh aXRlcnM7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9ldmVudF93YWl0ZXIoc3RydWN0IGtmZF9wcm9j ZXNzICpwLAorCQkJCXN0cnVjdCBrZmRfZXZlbnRfd2FpdGVyICp3YWl0ZXIsCisJCQkJdWludDMy X3QgZXZlbnRfaWQpCit7CisJc3RydWN0IGtmZF9ldmVudCAqZXYgPSBsb29rdXBfZXZlbnRfYnlf aWQocCwgZXZlbnRfaWQpOworCisJaWYgKCFldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3YWl0 ZXItPmFjdGl2YXRlZCA9IGV2LT5zaWduYWxlZDsKKwlldi0+c2lnbmFsZWQgPSBldi0+c2lnbmFs ZWQgJiYgIWV2LT5hdXRvX3Jlc2V0OworCisJbGlzdF9hZGQoJndhaXRlci0+d2FpdGVycywgJmV2 LT53YWl0ZXJzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCB0ZXN0X2V2ZW50X2Nv bmRpdGlvbihib29sIGFsbCwgdWludDMyX3QgbnVtX2V2ZW50cywKKwkJCQlzdHJ1Y3Qga2ZkX2V2 ZW50X3dhaXRlciAqZXZlbnRfd2FpdGVycykKK3sKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IGFj dGl2YXRlZF9jb3VudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2V2ZW50czsgaSsrKSB7 CisJCWlmIChldmVudF93YWl0ZXJzW2ldLmFjdGl2YXRlZCkgeworCQkJaWYgKCFhbGwpCisJCQkJ cmV0dXJuIHRydWU7CisKKwkJCWFjdGl2YXRlZF9jb3VudCsrOworCQl9CisJfQorCisJcmV0dXJu IGFjdGl2YXRlZF9jb3VudCA9PSBudW1fZXZlbnRzOworfQorCitzdGF0aWMgbG9uZyB1c2VyX3Rp bWVvdXRfdG9famlmZmllcyh1aW50MzJfdCB1c2VyX3RpbWVvdXRfbXMpCit7CisJaWYgKHVzZXJf dGltZW91dF9tcyA9PSBLRkRfRVZFTlRfVElNRU9VVF9JTU1FRElBVEUpCisJCXJldHVybiAwOwor CisJaWYgKHVzZXJfdGltZW91dF9tcyA9PSBLRkRfRVZFTlRfVElNRU9VVF9JTkZJTklURSkKKwkJ cmV0dXJuIE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCisJLyoKKwkgKiBtc2Vjc190b19qaWZmaWVz IGludGVycHJldHMgYWxsIHZhbHVlcyBhYm92ZSAyXjMxLTEgYXMgaW5maW5pdGUsCisJICogYnV0 IHdlIGNvbnNpZGVyIHRoZW0gZmluaXRlLgorCSAqIFRoaXMgaGFjayBpcyB3cm9uZywgYnV0IG5v Ym9keSBpcyBsaWtlbHkgdG8gbm90aWNlLgorCSAqLworCXVzZXJfdGltZW91dF9tcyA9IG1pbl90 KHVpbnQzMl90LCB1c2VyX3RpbWVvdXRfbXMsIDB4N0ZGRkZGRkYpOworCisJcmV0dXJuIG1zZWNz X3RvX2ppZmZpZXModXNlcl90aW1lb3V0X21zKSArIDE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVf d2FpdGVycyh1aW50MzJfdCBudW1fZXZlbnRzLCBzdHJ1Y3Qga2ZkX2V2ZW50X3dhaXRlciAqd2Fp dGVycykKK3sKKwl1aW50MzJfdCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9ldmVudHM7IGkr KykKKwkJbGlzdF9kZWwoJndhaXRlcnNbaV0ud2FpdGVycyk7CisKKwlrZnJlZSh3YWl0ZXJzKTsK K30KKworaW50IGtmZF93YWl0X29uX2V2ZW50cyhzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCisJCSAg ICAgICB1aW50MzJfdCBudW1fZXZlbnRzLCBjb25zdCB1aW50MzJfdCBfX3VzZXIgKmV2ZW50X2lk cywKKwkJICAgICAgIGJvb2wgYWxsLCB1aW50MzJfdCB1c2VyX3RpbWVvdXRfbXMsCisJCSAgICAg ICBlbnVtIGtmZF9ldmVudF93YWl0X3Jlc3VsdCAqd2FpdF9yZXN1bHQpCit7CisJdWludDMyX3Qg aTsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qga2ZkX2V2ZW50X3dhaXRlciAqZXZlbnRfd2FpdGVy cyA9IE5VTEw7CisJbG9uZyB0aW1lb3V0ID0gdXNlcl90aW1lb3V0X3RvX2ppZmZpZXModXNlcl90 aW1lb3V0X21zKTsKKworCW11dGV4X2xvY2soJnAtPmV2ZW50X211dGV4KTsKKworCWV2ZW50X3dh aXRlcnMgPSBhbGxvY19ldmVudF93YWl0ZXJzKG51bV9ldmVudHMpOworCWlmICghZXZlbnRfd2Fp dGVycykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJZm9yIChpID0g MDsgaSA8IG51bV9ldmVudHM7IGkrKykgeworCQl1aW50MzJfdCBldmVudF9pZDsKKworCQlyZXQg PSBnZXRfdXNlcihldmVudF9pZCwgJmV2ZW50X2lkc1tpXSk7CisJCWlmIChyZXQpCisJCQlnb3Rv IGZhaWw7CisKKwkJcmV0ID0gaW5pdF9ldmVudF93YWl0ZXIocCwgJmV2ZW50X3dhaXRlcnNbaV0s IGV2ZW50X2lkKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwltdXRleF91bmxv Y2soJnAtPmV2ZW50X211dGV4KTsKKworCXdoaWxlICh0cnVlKSB7CisJCWlmIChmYXRhbF9zaWdu YWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcmV0ID0gLUVJTlRSOworCQkJYnJlYWs7CisJCX0K KworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlz IHdyb25nIHdoZW4gYSBub256ZXJvLCBub24taW5maW5pdGUgdGltZW91dAorCQkJICogaXMgc3Bl Y2lmaWVkLiBXZSBuZWVkIHRvIHVzZQorCQkJICogRVJFU1RBUlRTWVNfUkVTVEFSVEJMT0NLLCBi dXQgc3RydWN0IHJlc3RhcnRfYmxvY2sKKwkJCSAqIGNvbnRhaW5zIGEgdW5pb24gd2l0aCBkYXRh IGZvciBlYWNoIHVzZXIgYW5kIGl0J3MKKwkJCSAqIGluIGdlbmVyaWMga2VybmVsIGNvZGUgdGhh dCBJIGRvbid0IHdhbnQgdG8KKwkJCSAqIHRvdWNoIHlldC4KKwkJCSAqLworCQkJcmV0ID0gLUVS RVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodGVzdF9ldmVudF9jb25kaXRpb24o YWxsLCBudW1fZXZlbnRzLCBldmVudF93YWl0ZXJzKSkgeworCQkJKndhaXRfcmVzdWx0ID0gS0ZE X1dBSVRfQ09NUExFVEU7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0aW1lb3V0IDw9IDApIHsK KwkJCSp3YWl0X3Jlc3VsdCA9IEtGRF9XQUlUX1RJTUVPVVQ7CisJCQlicmVhazsKKwkJfQorCisJ CXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7CisJfQor CV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCW11dGV4X2xvY2soJnAtPmV2 ZW50X211dGV4KTsKKwlmcmVlX3dhaXRlcnMobnVtX2V2ZW50cywgZXZlbnRfd2FpdGVycyk7CisJ bXV0ZXhfdW5sb2NrKCZwLT5ldmVudF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworCitmYWlsOgor CWlmIChldmVudF93YWl0ZXJzKQorCQlmcmVlX3dhaXRlcnMobnVtX2V2ZW50cywgZXZlbnRfd2Fp dGVycyk7CisKKwltdXRleF91bmxvY2soJnAtPmV2ZW50X211dGV4KTsKKworCSp3YWl0X3Jlc3Vs dCA9IEtGRF9XQUlUX0VSUk9SOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHJhZGVvbl9rZmRf ZXZlbnRfbW1hcChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCisJCQkgIHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hKQoreworCisJdW5zaWduZWQgaW50IHBhZ2VfaW5kZXg7CisJdW5zaWduZWQgbG9u ZyBwZm47CisJc3RydWN0IHNpZ25hbF9wYWdlICpwYWdlOworCisJaWYgKHZtYS0+dm1fZW5kIC0g dm1hLT52bV9zdGFydCAhPSBQQUdFX1NJWkUpIHsKKwkJcHJfZGVidWcoInN0YXJ0IGFkZHJlc3Mo MHglbHgpIC0gZW5kIGFkZHJlc3MoMHglbHgpICE9IGxlbigweCVseClcbiIsCisJCQkJdm1hLT52 bV9lbmQsIHZtYS0+dm1fc3RhcnQsIFBBR0VfU0laRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCXBhZ2VfaW5kZXggPSB2bWEtPnZtX3Bnb2ZmOworCisJcGFnZSA9IGxvb2t1cF9zaWduYWxf cGFnZV9ieV9pbmRleChwLCBwYWdlX2luZGV4KTsKKwlpZiAoIXBhZ2UpIHsKKwkJLyogUHJvYmFi bHkgS0ZEIGJ1ZywgYnV0IG1tYXAgaXMgdXNlci1hY2Nlc3NpYmxlLiAqLworCQlwcl9kZWJ1Zygi c2lnbmFsIHBhZ2UgY291bGQgbm90IGJlIGZvdW5kIGZvciBwYWdlX2luZGV4ICV1XG4iLAorCQkJ CXBhZ2VfaW5kZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwZm4gPSBfX3BhKHBhZ2Ut Pmtlcm5lbF9hZGRyZXNzKTsKKwlwZm4gPj49IFBBR0VfU0hJRlQ7CisKKwl2bWEtPnZtX2ZsYWdz IHw9IFZNX0lPIHwgVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EIHwgVk1fTk9SRVNFUlZFCisJ CSAgICAgICB8IFZNX0RPTlREVU1QIHwgVk1fUEZOTUFQOworCisJcHJfZGVidWcoImtmZDogbWFw cGluZyBzaWduYWwgcGFnZVxuIik7CisJcHJfZGVidWcoIiAgICAgdGFyZ2V0IHVzZXIgYWRkcmVz cyA9PSAweCUwMTZsbFhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nIGludCkgdm1hLT52bV9z dGFydCk7CisJcHJfZGVidWcoIiAgICAgcGZuICAgICAgICAgICAgICAgICA9PSAweCUwMTZsWFxu IiwgKHVuc2lnbmVkIGxvbmcpcGZuKTsKKwlwcl9kZWJ1ZygiICAgICB2bV9mbGFncyAgICAgICAg ICAgID09IDB4JTA4bFhcbiIsIHZtYS0+dm1fZmxhZ3MpOworCXByX2RlYnVnKCIgICAgIHNpemUg ICAgICAgICAgICAgICAgPT0gMHglMDhsWFxuIiwgUEFHRV9TSVpFKTsKKworCXBhZ2UtPnVzZXJf YWRkcmVzcyA9ICh1aW50NjRfdCBfX3VzZXIgKil2bWEtPnZtX3N0YXJ0OworCisJLyogbWFwcGlu ZyB0aGUgcGFnZSB0byB1c2VyIHByb2Nlc3MgKi8KKwlyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZt YSwgdm1hLT52bV9zdGFydCwgcGZuLCBQQUdFX1NJWkUsCisJCQkJdm1hLT52bV9wYWdlX3Byb3Qp OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2V2ZW50cy5o IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2V2ZW50cy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YjViMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZXZlbnRzLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAq IENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9S IEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIg TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4KKyAqLworCisjaWZuZGVmIEtGRF9FVkVOVFNfSF9JTkNMVURFRAorI2RlZmluZSBLRkRfRVZF TlRTX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxp bnV4L2hhc2h0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGlu dXgvbGlzdC5oPgorI2luY2x1ZGUgImtmZF9wcml2LmgiCisKKyNkZWZpbmUgS0ZEX0VWRU5UX0lE X05PTlNJR05BTF9NQVNLIDB4ODAwMDAwMDBVCisjZGVmaW5lIEtGRF9GSVJTVF9OT05TSUdOQUxf RVZFTlRfSUQgS0ZEX0VWRU5UX0lEX05PTlNJR05BTF9NQVNLCisjZGVmaW5lIEtGRF9MQVNUX05P TlNJR05BTF9FVkVOVF9JRCBVSU5UX01BWAorCisvKgorICogV3JpdHRlbiBpbnRvIGtmZF9zaWdu YWxfc2xvdF90IHRvIGluZGljYXRlIHRoYXQgdGhlIGV2ZW50IGlzIG5vdCBzaWduYWxlZC4KKyAq IFNpbmNlIHRoZSBldmVudCBwcm90b2NvbCBtYXkgbmVlZCB0byB3cml0ZSB0aGUgZXZlbnQgSUQg aW50byBtZW1vcnksIHRoaXMKKyAqIG11c3Qgbm90IGJlIGEgdmFsaWQgZXZlbnQgSUQuCisgKiBG b3IgdGhlIHNha2Ugb2YgZWFzeSBtZW1zZXQtaW5nLCB0aGlzIG11c3QgYmUgYSBieXRlIHBhdHRl cm4uCisgKi8KKyNkZWZpbmUgVU5TSUdOQUxFRF9FVkVOVF9TTE9UICgodWludDY0X3QpLTEpCisK K3N0cnVjdCBrZmRfZXZlbnRfd2FpdGVyOworc3RydWN0IHNpZ25hbF9wYWdlOworCitzdHJ1Y3Qg a2ZkX2V2ZW50IHsKKwkvKiBBbGwgZXZlbnRzIGluIHByb2Nlc3MsIHJvb3RlZCBhdCBrZmRfcHJv Y2Vzcy5ldmVudHMuICovCisJc3RydWN0IGhsaXN0X25vZGUgZXZlbnRzOworCisJdTMyIGV2ZW50 X2lkOworCisJYm9vbCBzaWduYWxlZDsKKwlib29sIGF1dG9fcmVzZXQ7CisKKwlpbnQgdHlwZTsK KworCXN0cnVjdCBsaXN0X2hlYWQgd2FpdGVyczsgLyogTGlzdCBvZiBrZmRfZXZlbnRfd2FpdGVy IGJ5IHdhaXRlcnMuICovCisKKwkvKiBPbmx5IGZvciBzaWduYWwgZXZlbnRzLiAqLworCXN0cnVj dCBzaWduYWxfcGFnZSAqc2lnbmFsX3BhZ2U7CisJdW5zaWduZWQgaW50IHNpZ25hbF9zbG90X2lu ZGV4OworCXVpbnQ2NF90IF9fdXNlciAqdXNlcl9zaWduYWxfYWRkcmVzczsKK307CisKKyNkZWZp bmUgS0ZEX0VWRU5UX1RJTUVPVVRfSU1NRURJQVRFIDAKKyNkZWZpbmUgS0ZEX0VWRU5UX1RJTUVP VVRfSU5GSU5JVEUgMHhGRkZGRkZGRnUKKworLyogTWF0Y2hpbmcgSFNBX0VWRU5UVFlQRSAqLwor I2RlZmluZSBLRkRfRVZFTlRfVFlQRV9TSUdOQUwgMAorI2RlZmluZSBLRkRfRVZFTlRfVFlQRV9E RUJVRyA1CisKK2V4dGVybiB2b2lkIGtmZF9zaWduYWxfZXZlbnRfaW50ZXJydXB0KHVuc2lnbmVk IGludCBwYXNpZCwgdWludDMyX3QgcGFydGlhbF9pZCwKKwkJCQkJdWludDMyX3QgdmFsaWRfaWRf Yml0cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQv a2ZkX2ludGVycnVwdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2ludGVycnVw dC5jCmluZGV4IDUzODNkZDAuLjdmMTM0YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1ka2ZkL2tmZF9pbnRlcnJ1cHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtm ZC9rZmRfaW50ZXJydXB0LmMKQEAgLTE3MiwxMCArMTcyLDE3IEBAIHN0YXRpYyB2b2lkIGludGVy cnVwdF93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCQkJc2l6ZW9mKHVpbnQzMl90KSld OwogCiAJd2hpbGUgKGRlcXVldWVfaWhfcmluZ19lbnRyeShkZXYsIGloX3JpbmdfZW50cnkpKQot CQk7CisJCWRldi0+ZGV2aWNlX2luZm8tPmV2ZW50X2ludGVycnVwdF9jbGFzcy0+aW50ZXJydXB0 X3dxKGRldiwKKwkJCQkJCQkJaWhfcmluZ19lbnRyeSk7CiB9CiAKIGJvb2wgaW50ZXJydXB0X2lz X3dhbnRlZChzdHJ1Y3Qga2ZkX2RldiAqZGV2LCBjb25zdCB1aW50MzJfdCAqaWhfcmluZ19lbnRy eSkKIHsKLQlyZXR1cm4gZmFsc2U7CisJLyogaW50ZWdlciBhbmQgYml0d2lzZSBPUiBzbyB0aGVy ZSBpcyBubyBib29sZWFuIHNob3J0LWNpcmN1aXRpbmcgKi8KKwl1bnNpZ25lZCB3YW50ZWQgPSAw OworCisJd2FudGVkIHw9IGRldi0+ZGV2aWNlX2luZm8tPmV2ZW50X2ludGVycnVwdF9jbGFzcy0+ aW50ZXJydXB0X2lzcihkZXYsCisJCQkJCQkJCWloX3JpbmdfZW50cnkpOworCisJcmV0dXJuIHdh bnRlZCAhPSAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2Zk X3ByaXYuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcml2LmgKaW5kZXggMzRj NzY2Mi4uN2Y2ZWE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2Zk X3ByaXYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJpdi5oCkBAIC0z NSw2ICszNSw5IEBACiAKICNkZWZpbmUgS0ZEX1NZU0ZTX0ZJTEVfTU9ERSAwNDQ0CiAKKyNkZWZp bmUgS0ZEX01NQVBfRE9PUkJFTExfTUFTSyAweDgwMDAwMDAwMDAwMDAKKyNkZWZpbmUgS0ZEX01N QVBfRVZFTlRTX01BU0sgMHg0MDAwMDAwMDAwMDAwCisKIC8qCiAgKiBXaGVuIHdvcmtpbmcgd2l0 aCBjcCBzY2hlZHVsZXIgd2Ugc2hvdWxkIGFzc2lnbiB0aGUgSElRIG1hbnVhbGx5IG9yIHZpYQog ICogdGhlIHJhZGVvbiBkcml2ZXIgdG8gYSBmaXhlZCBocWQgc2xvdCwgaGVyZSBhcmUgdGhlIGZp eGVkIEhJUSBocWQgc2xvdApAQCAtMTA4LDggKzExMSwxNiBAQCBlbnVtIGFzaWNfZmFtaWx5X3R5 cGUgewogCUNISVBfQ0FSUklaTwogfTsKIAorc3RydWN0IGtmZF9ldmVudF9pbnRlcnJ1cHRfY2xh c3MgeworCWJvb2wgKCppbnRlcnJ1cHRfaXNyKShzdHJ1Y3Qga2ZkX2RldiAqZGV2LAorCQkJCWNv bnN0IHVpbnQzMl90ICppaF9yaW5nX2VudHJ5KTsKKwl2b2lkICgqaW50ZXJydXB0X3dxKShzdHJ1 Y3Qga2ZkX2RldiAqZGV2LAorCQkJCWNvbnN0IHVpbnQzMl90ICppaF9yaW5nX2VudHJ5KTsKK307 CisKIHN0cnVjdCBrZmRfZGV2aWNlX2luZm8gewogCXVuc2lnbmVkIGludCBhc2ljX2ZhbWlseTsK Kwljb25zdCBzdHJ1Y3Qga2ZkX2V2ZW50X2ludGVycnVwdF9jbGFzcyAqZXZlbnRfaW50ZXJydXB0 X2NsYXNzOwogCXVuc2lnbmVkIGludCBtYXhfcGFzaWRfYml0czsKIAlzaXplX3QgaWhfcmluZ19l bnRyeV9zaXplOwogCXVpbnQ4X3QgbnVtX29mX3dhdGNoX3BvaW50czsKQEAgLTQ5MCw2ICs1MDEs MTUgQEAgc3RydWN0IGtmZF9wcm9jZXNzIHsKIAogCS8qSXMgdGhlIHVzZXIgc3BhY2UgcHJvY2Vz cyAzMiBiaXQ/Ki8KIAlib29sIGlzXzMyYml0X3VzZXJfbW9kZTsKKworCS8qIEV2ZW50LXJlbGF0 ZWQgZGF0YSAqLworCXN0cnVjdCBtdXRleCBldmVudF9tdXRleDsKKwkvKiBBbGwgZXZlbnRzIGlu IHByb2Nlc3MgaGFzaGVkIGJ5IElELCBsaW5rZWQgb24ga2ZkX2V2ZW50LmV2ZW50cy4gKi8KKwlE RUNMQVJFX0hBU0hUQUJMRShldmVudHMsIDQpOworCXN0cnVjdCBsaXN0X2hlYWQgc2lnbmFsX2V2 ZW50X3BhZ2VzOwkvKiBzdHJ1Y3Qgc2xvdF9wYWdlX2hlYWRlci4KKwkJCQkJCQkJZXZlbnRfcGFn ZXMgKi8KKwl1MzIgbmV4dF9ub25zaWduYWxfZXZlbnRfaWQ7CisJc2l6ZV90IHNpZ25hbF9ldmVu dF9jb3VudDsKIH07CiAKIC8qKgpAQCAtNTE0LDYgKzUzNCw3IEBAIHZvaWQga2ZkX3Byb2Nlc3Nf Y3JlYXRlX3dxKHZvaWQpOwogdm9pZCBrZmRfcHJvY2Vzc19kZXN0cm95X3dxKHZvaWQpOwogc3Ry dWN0IGtmZF9wcm9jZXNzICprZmRfY3JlYXRlX3Byb2Nlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3Ry dWN0ICopOwogc3RydWN0IGtmZF9wcm9jZXNzICprZmRfZ2V0X3Byb2Nlc3MoY29uc3Qgc3RydWN0 IHRhc2tfc3RydWN0ICopOworc3RydWN0IGtmZF9wcm9jZXNzICprZmRfbG9va3VwX3Byb2Nlc3Nf YnlfcGFzaWQodW5zaWduZWQgaW50IHBhc2lkKTsKIAogc3RydWN0IGtmZF9wcm9jZXNzX2Rldmlj ZSAqa2ZkX2JpbmRfcHJvY2Vzc190b19kZXZpY2Uoc3RydWN0IGtmZF9kZXYgKmRldiwKIAkJCQkJ CQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnApOwpAQCAtNjU5LDQgKzY4MCwzMSBAQCB1aW50NjRfdCBr ZmRfZ2V0X251bWJlcl9lbGVtcyhzdHJ1Y3Qga2ZkX2RldiAqa2ZkKTsKIHBoeXNfYWRkcl90IGtm ZF9nZXRfcHJvY2Vzc19kb29yYmVsbHMoc3RydWN0IGtmZF9kZXYgKmRldiwKIAkJCQkJc3RydWN0 IGtmZF9wcm9jZXNzICpwcm9jZXNzKTsKIAorLyogRXZlbnRzICovCitleHRlcm4gY29uc3Qgc3Ry dWN0IGtmZF9ldmVudF9pbnRlcnJ1cHRfY2xhc3MgZXZlbnRfaW50ZXJydXB0X2NsYXNzX2NpazsK KworZW51bSBrZmRfZXZlbnRfd2FpdF9yZXN1bHQgeworCUtGRF9XQUlUX0NPTVBMRVRFLAorCUtG RF9XQUlUX1RJTUVPVVQsCisJS0ZEX1dBSVRfRVJST1IKK307CisKK3ZvaWQga2ZkX2V2ZW50X2lu aXRfcHJvY2VzcyhzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnApOwordm9pZCBrZmRfZXZlbnRfZnJlZV9w cm9jZXNzKHN0cnVjdCBrZmRfcHJvY2VzcyAqcCk7CitpbnQgcmFkZW9uX2tmZF9ldmVudF9tbWFw KHN0cnVjdCBrZmRfcHJvY2VzcyAqcHJvY2VzcywKKwkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSk7CitpbnQga2ZkX3dhaXRfb25fZXZlbnRzKHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJ ICAgICAgIHVpbnQzMl90IG51bV9ldmVudHMsIGNvbnN0IHVpbnQzMl90IF9fdXNlciAqZXZlbnRf aWRzLAorCQkgICAgICAgYm9vbCBhbGwsIHVpbnQzMl90IHVzZXJfdGltZW91dF9tcywKKwkJICAg ICAgIGVudW0ga2ZkX2V2ZW50X3dhaXRfcmVzdWx0ICp3YWl0X3Jlc3VsdCk7Cit2b2lkIGtmZF9z aWduYWxfZXZlbnRfaW50ZXJydXB0KHVuc2lnbmVkIGludCBwYXNpZCwgdWludDMyX3QgcGFydGlh bF9pZCwKKwkJCQl1aW50MzJfdCB2YWxpZF9pZF9iaXRzKTsKK2ludCBrZmRfc2V0X2V2ZW50KHN0 cnVjdCBrZmRfcHJvY2VzcyAqcCwgdWludDMyX3QgZXZlbnRfaWQpOworaW50IGtmZF9yZXNldF9l dmVudChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHVpbnQzMl90IGV2ZW50X2lkKTsKK2ludCBrZmRf ZXZlbnRfY3JlYXRlKHN0cnVjdCBmaWxlICpkZXZrZmQsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwK KwkJICAgICB1aW50MzJfdCBldmVudF90eXBlLCBib29sIGF1dG9fcmVzZXQsIHVpbnQzMl90IG5v ZGVfaWQsCisJCSAgICAgdWludDMyX3QgKmV2ZW50X2lkLCB1aW50MzJfdCAqZXZlbnRfdHJpZ2dl cl9kYXRhLAorCQkgICAgIHVpbnQ2NF90ICpldmVudF9wYWdlX29mZnNldCwgdWludDMyX3QgKmV2 ZW50X3Nsb3RfaW5kZXgpOworaW50IGtmZF9ldmVudF9kZXN0cm95KHN0cnVjdCBrZmRfcHJvY2Vz cyAqcCwgdWludDMyX3QgZXZlbnRfaWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGtmZC9rZmRfcHJvY2Vzcy5jCmluZGV4IDk0NWQ2MjIuLmIzNDE2NTYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3MuYwpAQCAtMTc4LDYgKzE3OCw4IEBAIHN0YXRpYyB2 b2lkIGtmZF9wcm9jZXNzX3dxX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlr ZnJlZShwZGQpOwogCX0KIAorCWtmZF9ldmVudF9mcmVlX3Byb2Nlc3MocCk7CisKIAlrZmRfcGFz aWRfZnJlZShwLT5wYXNpZCk7CiAKIAltdXRleF91bmxvY2soJnAtPm11dGV4KTsKQEAgLTI4OSw2 ICsyOTEsOCBAQCBzdGF0aWMgc3RydWN0IGtmZF9wcm9jZXNzICpjcmVhdGVfcHJvY2Vzcyhjb25z dCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZCkKIAogCUlOSVRfTElTVF9IRUFEKCZwcm9jZXNz LT5wZXJfZGV2aWNlX2RhdGEpOwogCisJa2ZkX2V2ZW50X2luaXRfcHJvY2Vzcyhwcm9jZXNzKTsK KwogCWVyciA9IHBxbV9pbml0KCZwcm9jZXNzLT5wcW0sIHByb2Nlc3MpOwogCWlmIChlcnIgIT0g MCkKIAkJZ290byBlcnJfcHJvY2Vzc19wcW1faW5pdDsKQEAgLTQzMSwzICs0MzUsMjMgQEAgYm9v bCBrZmRfaGFzX3Byb2Nlc3NfZGV2aWNlX2RhdGEoc3RydWN0IGtmZF9wcm9jZXNzICpwKQogewog CXJldHVybiAhKGxpc3RfZW1wdHkoJnAtPnBlcl9kZXZpY2VfZGF0YSkpOwogfQorCisvKiBUaGlz IHJldHVybnMgd2l0aCBwcm9jZXNzLT5tdXRleCBsb2NrZWQuICovCitzdHJ1Y3Qga2ZkX3Byb2Nl c3MgKmtmZF9sb29rdXBfcHJvY2Vzc19ieV9wYXNpZCh1bnNpZ25lZCBpbnQgcGFzaWQpCit7CisJ c3RydWN0IGtmZF9wcm9jZXNzICpwOworCXVuc2lnbmVkIGludCB0ZW1wOworCisJaW50IGlkeCA9 IHNyY3VfcmVhZF9sb2NrKCZrZmRfcHJvY2Vzc2VzX3NyY3UpOworCisJaGFzaF9mb3JfZWFjaF9y Y3Uoa2ZkX3Byb2Nlc3Nlc190YWJsZSwgdGVtcCwgcCwga2ZkX3Byb2Nlc3NlcykgeworCQlpZiAo cC0+cGFzaWQgPT0gcGFzaWQpIHsKKwkJCW11dGV4X2xvY2soJnAtPm11dGV4KTsKKwkJCWJyZWFr OworCQl9CisJfQorCisJc3JjdV9yZWFkX3VubG9jaygma2ZkX3Byb2Nlc3Nlc19zcmN1LCBpZHgp OworCisJcmV0dXJuIHA7Cit9Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK