From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 12/62] drm/i915: Skip capturing an error state if we already have one Date: Fri, 3 Jun 2016 17:36:37 +0100 Message-ID: <1464971847-15809-13-git-send-email-chris@chris-wilson.co.uk> References: <1464971847-15809-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id ADDA96E17A for ; Fri, 3 Jun 2016 16:37:49 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id a136so629183wme.0 for ; Fri, 03 Jun 2016 09:37:49 -0700 (PDT) In-Reply-To: <1464971847-15809-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org QXMgd2Ugb25seSBldmVyIGtlZXAgdGhlIGZpcnN0IGVycm9yIHN0YXRlIGFyb3VuZCwgd2UgY2Fu IGF2b2lkIHNvbWUKd29yayB0aGF0IGNhbiBiZSBxdWl0ZSBpbnRydXNpdmUgaWYgd2UgZG9uJ3Qg cmVjb3JkIHRoZSBlcnJvciB0aGUgc2Vjb25kCnRpbWUgYXJvdW5kLiBUaGlzIGRvZXMgbW92ZSB0 aGUgcmFjZSB3aGVyZWJ5IHRoZSB1c2VyIGNvdWxkIGRpc2NhcmQgb25lCmVycm9yIHN0YXRlIGFz IHRoZSBzZWNvbmQgaXMgYmVpbmcgY2FwdHVyZWQsIGJ1dCB0aGF0IHJhY2UgZXhpc3RzIGluIHRo ZQpjdXJyZW50IGNvZGUgYW5kIHdlIGhvcGUgdGhhdCByZWNhcHR1cmluZyBlcnJvciBzdGF0ZSBp cyBvbmx5IGRvbmUgZm9yCmRlYnVnZ2luZy4KCk5vdGUgdGhhdCBhcyB3ZSBkaXNjYXJkIHRoZSBl cnJvciBzdGF0ZSBmb3Igc2ltdWxhdGVkIGVycm9ycywgaWd0IHRoYXQKZXhlcmNpc2UgZXJyb3Ig Y2FwdHVyZSBjb250aW51ZSB0byBmdW5jdGlvbi4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o ICAgICAgICAgfCAyMTAgKy0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YyAgICAgICAgIHwgNjUzICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYyB8IDY1OSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oIHwg MjQ1ICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYyAg IHwgICAzICsKIDYgZmlsZXMgY2hhbmdlZCwgOTE2IGluc2VydGlvbnMoKyksIDg1NSBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9y ZXF1ZXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9yZXF1ZXN0LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGYyMDAwNzQ0MDgyMS4uMTRjZWYx ZDIzNDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMzIsNiArMzIsNyBAQCBpOTE1LXkgKz0g aTkxNV9jbWRfcGFyc2VyLm8gXAogCSAgaTkxNV9nZW1fZ3R0Lm8gXAogCSAgaTkxNV9nZW0ubyBc CiAJICBpOTE1X2dlbV9yZW5kZXJfc3RhdGUubyBcCisJICBpOTE1X2dlbV9yZXF1ZXN0Lm8gXAog CSAgaTkxNV9nZW1fc2hyaW5rZXIubyBcCiAJICBpOTE1X2dlbV9zdG9sZW4ubyBcCiAJICBpOTE1 X2dlbV90aWxpbmcubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCAxNWEwYzZiZGY1MDAu LjkzOWNkNDUwNDNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC02MCw2ICs2MCw3IEBA CiAjaW5jbHVkZSAiaTkxNV9nZW0uaCIKICNpbmNsdWRlICJpOTE1X2dlbV9ndHQuaCIKICNpbmNs dWRlICJpOTE1X2dlbV9yZW5kZXJfc3RhdGUuaCIKKyNpbmNsdWRlICJpOTE1X2dlbV9yZXF1ZXN0 LmgiCiAKIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKICAqLwpAQCAtMjMzOSwxNzIgKzIzNDAs NiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzY2F0dGVybGlzdCAqX19zZ19uZXh0KHN0cnVjdCBz Y2F0dGVybGlzdCAqc2cpCiAJICAgICAoKChfX2l0ZXIpLmN1cnIgKz0gUEFHRV9TSVpFKSA8IChf X2l0ZXIpLm1heCkgfHwJCVwKIAkgICAgICgoX19pdGVyKSA9IF9fc2d0X2l0ZXIoX19zZ19uZXh0 KChfX2l0ZXIpLnNncCksIGZhbHNlKSwgMCkpCiAKLS8qKgotICogUmVxdWVzdCBxdWV1ZSBzdHJ1 Y3R1cmUuCi0gKgotICogVGhlIHJlcXVlc3QgcXVldWUgYWxsb3dzIHVzIHRvIG5vdGUgc2VxdWVu Y2UgbnVtYmVycyB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkCi0gKiBhbmQgbWF5IGJlIGFzc29jaWF0 ZWQgd2l0aCBhY3RpdmUgYnVmZmVycyB0byBiZSByZXRpcmVkLgotICoKLSAqIEJ5IGtlZXBpbmcg dGhpcyBsaXN0LCB3ZSBjYW4gYXZvaWQgaGF2aW5nIHRvIGRvIHF1ZXN0aW9uYWJsZSBzZXF1ZW5j ZQotICogbnVtYmVyIGNvbXBhcmlzb25zIG9uIGJ1ZmZlciBsYXN0X3JlYWR8d3JpdGVfc2Vxbm8u IEl0IGFsc28gYWxsb3dzIGFuCi0gKiBlbWlzc2lvbiB0aW1lIHRvIGJlIGFzc29jaWF0ZWQgd2l0 aCB0aGUgcmVxdWVzdCBmb3IgdHJhY2tpbmcgaG93IGZhciBhaGVhZAotICogb2YgdGhlIEdQVSB0 aGUgc3VibWlzc2lvbiBpcy4KLSAqCi0gKiBUaGUgcmVxdWVzdHMgYXJlIHJlZmVyZW5jZSBjb3Vu dGVkLCBzbyB1cG9uIGNyZWF0aW9uIHRoZXkgc2hvdWxkIGhhdmUgYW4KLSAqIGluaXRpYWwgcmVm ZXJlbmNlIHRha2VuIHVzaW5nIGtyZWZfaW5pdAotICovCi1zdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgewotCXN0cnVjdCBrcmVmIHJlZjsKLQotCS8qKiBPbiBXaGljaCByaW5nIHRoaXMgcmVx dWVzdCB3YXMgZ2VuZXJhdGVkICovCi0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Ci0J c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwotCXVuc2lnbmVkIHJlc2V0X2NvdW50ZXI7 Ci0Jc3RydWN0IGludGVsX3NpZ25hbF9ub2RlIHNpZ25hbGluZzsKLQotCSAvKiogR0VNIHNlcXVl bmNlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIHByZXZpb3VzIHJlcXVlc3QsCi0JICAqIHdo ZW4gdGhlIEhXUyBicmVhZGNydW1iIGlzIGVxdWFsIHRvIHRoaXMgdGhlIEdQVSBpcyBwcm9jZXNz aW5nCi0JICAqIHRoaXMgcmVxdWVzdC4KLQkgICovCi0JdTMyIHByZXZpb3VzX3NlcW5vOwotCi0J IC8qKiBHRU0gc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QsCi0J ICAqIHdoZW4gdGhlIEhXUyBicmVhZGNydW1iIGlzIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGlz IHRoZSBHUFUKLQkgICogaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0LgotCSAg Ki8KLQl1MzIgc2Vxbm87Ci0KLQkvKiogUG9zaXRpb24gaW4gdGhlIHJpbmdidWZmZXIgb2YgdGhl IHN0YXJ0IG9mIHRoZSByZXF1ZXN0ICovCi0JdTMyIGhlYWQ7Ci0KLQkvKioKLQkgKiBQb3NpdGlv biBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHBvc3RmaXguCi0JICogVGhp cyBpcyByZXF1aXJlZCB0byBjYWxjdWxhdGUgdGhlIG1heGltdW0gYXZhaWxhYmxlIHJpbmdidWZm ZXIKLQkgKiBzcGFjZSB3aXRob3V0IG92ZXJ3cml0aW5nIHRoZSBwb3N0Zml4LgotCSAqLwotCSB1 MzIgcG9zdGZpeDsKLQotCS8qKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgZW5k IG9mIHRoZSB3aG9sZSByZXF1ZXN0ICovCi0JdTMyIHRhaWw7Ci0KLQkvKiogUHJlYWxsb2NhdGUg c3BhY2UgaW4gdGhlIHJpbmdidWZmZXIgZm9yIHRoZSBlbWl0dGluZyB0aGUgcmVxdWVzdCAqLwot CXUzMiByZXNlcnZlZF9zcGFjZTsKLQotCS8qKgotCSAqIENvbnRleHQgYW5kIHJpbmcgYnVmZmVy IHJlbGF0ZWQgdG8gdGhpcyByZXF1ZXN0Ci0JICogQ29udGV4dHMgYXJlIHJlZmNvdW50ZWQsIHNv IHdoZW4gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aCBhCi0JICogY29udGV4dCwgd2Ug bXVzdCBpbmNyZW1lbnQgdGhlIGNvbnRleHQncyByZWZjb3VudCwgdG8gZ3VhcmFudGVlIHRoYXQK LQkgKiBpdCBwZXJzaXN0cyB3aGlsZSBhbnkgcmVxdWVzdCBpcyBsaW5rZWQgdG8gaXQuIFJlcXVl c3RzIHRoZW1zZWx2ZXMKLQkgKiBhcmUgYWxzbyByZWZjb3VudGVkLCBzbyB0aGUgcmVxdWVzdCB3 aWxsIG9ubHkgYmUgZnJlZWQgd2hlbiB0aGUgbGFzdAotCSAqIHJlZmVyZW5jZSB0byBpdCBpcyBk aXNtaXNzZWQsIGFuZCB0aGUgY29kZSBpbgotCSAqIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZSgpIHdp bGwgdGhlbiBkZWNyZW1lbnQgdGhlIHJlZmNvdW50IG9uIHRoZQotCSAqIGNvbnRleHQuCi0JICov Ci0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKLQlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZl ciAqcmluZ2J1ZjsKLQotCS8qKgotCSAqIENvbnRleHQgcmVsYXRlZCB0byB0aGUgcHJldmlvdXMg cmVxdWVzdC4KLQkgKiBBcyB0aGUgY29udGV4dHMgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBoYXJkd2Fy ZSB1bnRpbCB0aGUgc3dpdGNoIGlzCi0JICogY29tcGxldGVkIHRvIGEgbmV3IGNvbnRleHQsIHRo ZSBoYXJkd2FyZSBtYXkgc3RpbGwgYmUgd3JpdGluZwotCSAqIHRvIHRoZSBjb250ZXh0IG9iamVj dCBhZnRlciB0aGUgYnJlYWRjcnVtYiBpcyB2aXNpYmxlLiBXZSBtdXN0Ci0JICogbm90IHVucGlu L3VuYmluZC9wcnVuZSB0aGF0IG9iamVjdCB3aGlsc3Qgc3RpbGwgYWN0aXZlIGFuZCBzbwotCSAq IHdlIGtlZXAgdGhlIHByZXZpb3VzIGNvbnRleHQgcGlubmVkIHVudGlsIHRoZSBmb2xsb3dpbmcg KHRoaXMpCi0JICogcmVxdWVzdCBpcyByZXRpcmVkLgotCSAqLwotCXN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpwcmV2aW91c19jb250ZXh0OwotCi0JLyoqIEJhdGNoIGJ1ZmZlciByZWxhdGVkIHRv IHRoaXMgcmVxdWVzdCBpZiBhbnkgKHVzZWQgZm9yCi0JICAgIGVycm9yIHN0YXRlIGR1bXAgb25s eSkgKi8KLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYmF0Y2hfb2JqOwotCi0JLyoqIFRp bWUgYXQgd2hpY2ggdGhpcyByZXF1ZXN0IHdhcyBlbWl0dGVkLCBpbiBqaWZmaWVzLiAqLwotCXVu c2lnbmVkIGxvbmcgZW1pdHRlZF9qaWZmaWVzOwotCi0JLyoqIGdsb2JhbCBsaXN0IGVudHJ5IGZv ciB0aGlzIHJlcXVlc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQlzdHJ1Y3QgZHJt X2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Ci0JLyoqIGZpbGVfcHJpdiBsaXN0IGVudHJ5 IGZvciB0aGlzIHJlcXVlc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGNsaWVudF9saXN0OwotCi0J LyoqIHByb2Nlc3MgaWRlbnRpZmllciBzdWJtaXR0aW5nIHRoaXMgcmVxdWVzdCAqLwotCXN0cnVj dCBwaWQgKnBpZDsKLQotCS8qKgotCSAqIFRoZSBFTFNQIG9ubHkgYWNjZXB0cyB0d28gZWxlbWVu dHMgYXQgYSB0aW1lLCBzbyB3ZSBxdWV1ZQotCSAqIGNvbnRleHQvdGFpbCBwYWlycyBvbiBhIGdp dmVuIHF1ZXVlIChyaW5nLT5leGVjbGlzdF9xdWV1ZSkgdW50aWwgdGhlCi0JICogaGFyZHdhcmUg aXMgYXZhaWxhYmxlLiBUaGUgcXVldWUgc2VydmVzIGEgZG91YmxlIHB1cnBvc2U6IHdlIGFsc28g dXNlCi0JICogaXQgdG8ga2VlcCB0cmFjayBvZiB0aGUgdXAgdG8gMiBjb250ZXh0cyBjdXJyZW50 bHkgaW4gdGhlIGhhcmR3YXJlCi0JICogKHVzdWFsbHkgb25lIGluIGV4ZWN1dGlvbiBhbmQgdGhl IG90aGVyIHF1ZXVlZCB1cCBieSB0aGUgR1BVKTogV2UKLQkgKiBvbmx5IHJlbW92ZSBlbGVtZW50 cyBmcm9tIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSB3aGVuIHRoZSBoYXJkd2FyZQotCSAqIGluZm9y bXMgdXMgdGhhdCBhbiBlbGVtZW50IGhhcyBiZWVuIGNvbXBsZXRlZC4KLQkgKgotCSAqIEFsbCBh Y2Nlc3NlcyB0byB0aGUgcXVldWUgYXJlIG1lZGlhdGVkIGJ5IGEgc3BpbmxvY2sKLQkgKiAocmlu Zy0+ZXhlY2xpc3RfbG9jaykuCi0JICovCi0KLQkvKiogRXhlY2xpc3QgbGluayBpbiB0aGUgc3Vi bWlzc2lvbiBxdWV1ZS4qLwotCXN0cnVjdCBsaXN0X2hlYWQgZXhlY2xpc3RfbGluazsKLQotCS8q KiBFeGVjbGlzdHMgbm8uIG9mIHRpbWVzIHRoaXMgcmVxdWVzdCBoYXMgYmVlbiBzZW50IHRvIHRo ZSBFTFNQICovCi0JaW50IGVsc3Bfc3VibWl0dGVkOwotCi0JLyoqIEV4ZWNsaXN0cyBjb250ZXh0 IGhhcmR3YXJlIGlkLiAqLwotCXVuc2lnbmVkIGN0eF9od19pZDsKLX07Ci0KLXN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqIF9fbXVzdF9jaGVjawotaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCSAgICAgICBzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4KTsKLXZvaWQgaTkxNV9nZW1fcmVxdWVzdF9mcmVlKHN0cnVjdCBrcmVmICpy ZXFfcmVmKTsKLWludCBpOTE1X2dlbV9yZXF1ZXN0X2FkZF90b19jbGllbnQoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEsCi0JCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlKTsKLQot c3RhdGljIGlubGluZSB1aW50MzJfdAotaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8oc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCi17Ci0JcmV0dXJuIHJlcSA/IHJlcS0+c2Vxbm8g OiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgotaTkxNV9n ZW1fcmVxdWVzdF9nZXRfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQot ewotCXJldHVybiByZXEgPyByZXEtPmVuZ2luZSA6IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoKLWk5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNl KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQotewotCWlmIChyZXEpCi0JCWtyZWZf Z2V0KCZyZXEtPnJlZik7Ci0JcmV0dXJuIHJlcTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1p OTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxKQotewotCWtyZWZfcHV0KCZyZXEtPnJlZiwgaTkxNV9nZW1fcmVxdWVzdF9mcmVlKTsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqKnBkc3QsCi0JCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqc3JjKQotewotCWlmIChzcmMpCi0JCWk5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKHNy Yyk7Ci0KLQlpZiAoKnBkc3QpCi0JCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UoKnBkc3Qp OwotCi0JKnBkc3QgPSBzcmM7Ci19Ci0KLS8qCi0gKiBYWFg6IGk5MTVfZ2VtX3JlcXVlc3RfY29t cGxldGVkIHNob3VsZCBiZSBoZXJlIGJ1dCBjdXJyZW50bHkgbmVlZHMgdGhlCi0gKiBkZWZpbml0 aW9uIG9mIGk5MTVfc2Vxbm9fcGFzc2VkKCkgd2hpY2ggaXMgYmVsb3cuIEl0IHdpbGwgYmUgbW92 ZWQgaW4KLSAqIGEgbGF0ZXIgcGF0Y2ggd2hlbiB0aGUgY2FsbCB0byBpOTE1X3NlcW5vX3Bhc3Nl ZCgpIGlzIG9ic29sZXRlZC4uLgotICovCi0KIC8qCiAgKiBBIGNvbW1hbmQgdGhhdCByZXF1aXJl cyBzcGVjaWFsIGhhbmRsaW5nIGJ5IHRoZSBjb21tYW5kIHBhcnNlci4KICAqLwpAQCAtMzIwOCwz NyArMzA0Myw2IEBAIHZvaWQgaTkxNV9nZW1fdHJhY2tfZmIoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9sZCwKIAkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpuZXcsCiAJ CSAgICAgICB1bnNpZ25lZCBmcm9udGJ1ZmZlcl9iaXRzKTsKIAotLyoqCi0gKiBSZXR1cm5zIHRy dWUgaWYgc2VxMSBpcyBsYXRlciB0aGFuIHNlcTIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAot aTkxNV9zZXFub19wYXNzZWQodWludDMyX3Qgc2VxMSwgdWludDMyX3Qgc2VxMikKLXsKLQlyZXR1 cm4gKGludDMyX3QpKHNlcTEgLSBzZXEyKSA+PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg aTkxNV9nZW1fcmVxdWVzdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKQotewotCXJldHVybiBpOTE1X3NlcW5vX3Bhc3NlZChpbnRlbF9lbmdpbmVfZ2V0X3Nl cW5vKHJlcS0+ZW5naW5lKSwKLQkJCQkgcmVxLT5wcmV2aW91c19zZXFubyk7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgYm9vbCBpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChjb25zdCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKLXsKLQlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoaW50 ZWxfZW5naW5lX2dldF9zZXFubyhyZXEtPmVuZ2luZSksCi0JCQkJIHJlcS0+c2Vxbm8pOwotfQot Ci1ib29sIF9faTkxNV9zcGluX3JlcXVlc3QoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXF1ZXN0LAotCQkJIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0X3VzKTsK LXN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsCi0JCQkJICAgICBpbnQgc3RhdGUsIHVuc2lnbmVkIGxv bmcgdGltZW91dF91cykKLXsKLQlyZXR1cm4gKGk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChyZXF1 ZXN0KSAmJgotCQlfX2k5MTVfc3Bpbl9yZXF1ZXN0KHJlcXVlc3QsIHN0YXRlLCB0aW1lb3V0X3Vz KSk7Ci19Ci0KLWludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fZ2V0X3NlcW5vKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyICpzZXFubyk7CiBpbnQgX19tdXN0X2NoZWNrIGk5 MTVfZ2VtX3NldF9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pOwogCiBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgpAQCAtMzI5NiwxOCArMzEwMCw2IEBAIHZvaWQg aTkxNV9nZW1faW5pdF9zd2l6emxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGk5 MTVfZ2VtX2NsZWFudXBfZW5naW5lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGludCBfX211 c3RfY2hlY2sgaTkxNV9nZW1fd2FpdF9mb3JfaWRsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwogaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9zdXNwZW5kKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOwotdm9pZCBfX2k5MTVfYWRkX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpyZXEsCi0JCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYmF0Y2hfb2Jq LAotCQkJYm9vbCBmbHVzaF9jYWNoZXMpOwotI2RlZmluZSBpOTE1X2FkZF9yZXF1ZXN0KHJlcSkg XAotCV9faTkxNV9hZGRfcmVxdWVzdChyZXEsIE5VTEwsIHRydWUpCi0jZGVmaW5lIGk5MTVfYWRk X3JlcXVlc3Rfbm9fZmx1c2gocmVxKSBcCi0JX19pOTE1X2FkZF9yZXF1ZXN0KHJlcSwgTlVMTCwg ZmFsc2UpCi1pbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSwKLQkJCWJvb2wgaW50ZXJydXB0aWJsZSwKLQkJCXM2NCAqdGltZW91dCwKLQkJCXN0 cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpycHMpOwotaW50IF9fbXVzdF9jaGVjayBpOTE1X3dhaXRf cmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSk7CiBpbnQgaTkxNV9nZW1f ZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsK IGludCBfX211c3RfY2hlY2sKIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggZjQ4 ZjU0MTkzOTcyLi45NTc4MmNmODVkY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTEw NSwzNjEgKzExMDUsNiBAQCBwdXRfcnBtOgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQK LWk5MTVfZ2VtX2NoZWNrX3dlZGdlKHVuc2lnbmVkIHJlc2V0X2NvdW50ZXIsIGJvb2wgaW50ZXJy dXB0aWJsZSkKLXsKLQlpZiAoX19pOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKHJlc2V0X2NvdW50ZXIp KQotCQlyZXR1cm4gLUVJTzsKLQotCWlmIChfX2k5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MocmVzZXRf Y291bnRlcikpIHsKLQkJLyogTm9uLWludGVycnVwdGlibGUgY2FsbGVycyBjYW4ndCBoYW5kbGUg LUVBR0FJTiwgaGVuY2UgcmV0dXJuCi0JCSAqIC1FSU8gdW5jb25kaXRpb25hbGx5IGZvciB0aGVz ZS4gKi8KLQkJaWYgKCFpbnRlcnJ1cHRpYmxlKQotCQkJcmV0dXJuIC1FSU87Ci0KLQkJcmV0dXJu IC1FQUdBSU47Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxv Y2FsX2Nsb2NrX3VzKHVuc2lnbmVkICpjcHUpCi17Ci0JdW5zaWduZWQgbG9uZyB0OwotCi0JLyog Q2hlYXBseSBhbmQgYXBwcm94aW1hdGVseSBjb252ZXJ0IGZyb20gbmFub3NlY29uZHMgdG8gbWlj cm9zZWNvbmRzLgotCSAqIFRoZSByZXN1bHQgYW5kIHN1YnNlcXVlbnQgY2FsY3VsYXRpb25zIGFy ZSBhbHNvIGRlZmluZWQgaW4gdGhlIHNhbWUKLQkgKiBhcHByb3hpbWF0ZSBtaWNyb3NlY29uZHMg dW5pdHMuIFRoZSBwcmluY2lwYWwgc291cmNlIG9mIHRpbWluZwotCSAqIGVycm9yIGhlcmUgaXMg ZnJvbSB0aGUgc2ltcGxlIHRydW5jYXRpb24uCi0JICoKLQkgKiBOb3RlIHRoYXQgbG9jYWxfY2xv Y2soKSBpcyBvbmx5IGRlZmluZWQgd3J0IHRvIHRoZSBjdXJyZW50IENQVTsKLQkgKiB0aGUgY29t cGFyaXNvbnMgYXJlIG5vIGxvbmdlciB2YWxpZCBpZiB3ZSBzd2l0Y2ggQ1BVcy4gSW5zdGVhZCBv ZgotCSAqIGJsb2NraW5nIHByZWVtcHRpb24gZm9yIHRoZSBlbnRpcmUgYnVzeXdhaXQsIHdlIGNh biBkZXRlY3QgdGhlIENQVQotCSAqIHN3aXRjaCBhbmQgdXNlIHRoYXQgYXMgaW5kaWNhdG9yIG9m IHN5c3RlbSBsb2FkIGFuZCBhIHJlYXNvbiB0bwotCSAqIHN0b3AgYnVzeXdhaXRpbmcsIHNlZSBi dXN5d2FpdF9zdG9wKCkuCi0JICovCi0JKmNwdSA9IGdldF9jcHUoKTsKLQl0ID0gbG9jYWxfY2xv Y2soKSA+PiAxMDsKLQlwdXRfY3B1KCk7Ci0KLQlyZXR1cm4gdDsKLX0KLQotc3RhdGljIGJvb2wg YnVzeXdhaXRfc3RvcCh1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHVuc2lnbmVkIGNwdSkKLXsKLQl1 bnNpZ25lZCB0aGlzX2NwdTsKLQotCWlmICh0aW1lX2FmdGVyKGxvY2FsX2Nsb2NrX3VzKCZ0aGlz X2NwdSksIHRpbWVvdXQpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXJldHVybiB0aGlzX2NwdSAhPSBj cHU7Ci19Ci0KLWJvb2wgX19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSwKLQkJCSBpbnQgc3RhdGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dF91 cykKLXsKLQl1bnNpZ25lZCBjcHU7Ci0KLQkvKiBXaGVuIHdhaXRpbmcgZm9yIGhpZ2ggZnJlcXVl bmN5IHJlcXVlc3RzLCBlLmcuIGR1cmluZyBzeW5jaHJvbm91cwotCSAqIHJlbmRlcmluZyBzcGxp dCBiZXR3ZWVuIHRoZSBDUFUgYW5kIEdQVSwgdGhlIGZpbml0ZSBhbW91bnQgb2YgdGltZQotCSAq IHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgaXJxIGFuZCB3YWl0IHVwb24gaXQgbGltaXRzIHRoZSBy ZXNwb25zZQotCSAqIHJhdGUuIEJ5IGJ1c3l3YWl0aW5nIG9uIHRoZSByZXF1ZXN0IGNvbXBsZXRp b24gZm9yIGEgc2hvcnQgd2hpbGUgd2UKLQkgKiBjYW4gc2VydmljZSB0aGUgaGlnaCBmcmVxdWVu Y3kgd2FpdHMgYXMgcXVpY2sgYXMgcG9zc2libGUuIEhvd2V2ZXIsCi0JICogaWYgaXQgaXMgYSBz bG93IHJlcXVlc3QsIHdlIHdhbnQgdG8gc2xlZXAgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KLQkg KiBUaGUgdHJhZGVvZmYgYmV0d2VlbiB3YWl0aW5nIGFuZCBzbGVlcGluZyBpcyByb3VnaGx5IHRo ZSB0aW1lIGl0Ci0JICogdGFrZXMgdG8gc2xlZXAgb24gYSByZXF1ZXN0LCBvbiB0aGUgb3JkZXIg b2YgYSBtaWNyb3NlY29uZC4KLQkgKi8KLQotCXRpbWVvdXRfdXMgKz0gbG9jYWxfY2xvY2tfdXMo JmNwdSk7Ci0JZG8gewotCQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKLQkJ CXJldHVybiB0cnVlOwotCi0JCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVu dCkpCi0JCQlicmVhazsKLQotCQlpZiAoYnVzeXdhaXRfc3RvcCh0aW1lb3V0X3VzLCBjcHUpKQot CQkJYnJlYWs7Ci0KLQkJY3B1X3JlbGF4X2xvd2xhdGVuY3koKTsKLQl9IHdoaWxlICghbmVlZF9y ZXNjaGVkKCkpOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCi0vKioKLSAqIF9faTkxNV93YWl0X3Jl cXVlc3QgLSB3YWl0IHVudGlsIGV4ZWN1dGlvbiBvZiByZXF1ZXN0IGhhcyBmaW5pc2hlZAotICog QHJlcTogZHVoIQotICogQGludGVycnVwdGlibGU6IGRvIGFuIGludGVycnVwdGlibGUgd2FpdCAo bm9ybWFsbHkgeWVzKQotICogQHRpbWVvdXQ6IGluIC0gaG93IGxvbmcgdG8gd2FpdCAoTlVMTCBm b3JldmVyKTsgb3V0IC0gaG93IG11Y2ggdGltZSByZW1haW5pbmcKLSAqCi0gKiBOb3RlOiBJdCBp cyBvZiB1dG1vc3QgaW1wb3J0YW5jZSB0aGF0IHRoZSBwYXNzZWQgaW4gc2Vxbm8gYW5kIHJlc2V0 X2NvdW50ZXIKLSAqIHZhbHVlcyBoYXZlIGJlZW4gcmVhZCBieSB0aGUgY2FsbGVyIGluIGFuIHNt cCBzYWZlIG1hbm5lci4gV2hlcmUgcmVhZC1zaWRlCi0gKiBsb2NrcyBhcmUgaW52b2x2ZWQsIGl0 IGlzIHN1ZmZpY2llbnQgdG8gcmVhZCB0aGUgcmVzZXRfY291bnRlciBiZWZvcmUKLSAqIHVubG9j a2luZyB0aGUgbG9jayB0aGF0IHByb3RlY3RzIHRoZSBzZXFuby4gRm9yIGxvY2tsZXNzIHRyaWNr cywgdGhlCi0gKiByZXNldF9jb3VudGVyIF9tdXN0XyBiZSByZWFkIGJlZm9yZSwgYW5kIGFuIGFw cHJvcHJpYXRlIHNtcF9ybWIgbXVzdCBiZQotICogaW5zZXJ0ZWQuCi0gKgotICogUmV0dXJucyAw IGlmIHRoZSByZXF1ZXN0IHdhcyBmb3VuZCB3aXRoaW4gdGhlIGFsbG90ZWQgdGltZS4gRWxzZSBy ZXR1cm5zIHRoZQotICogZXJybm8gd2l0aCByZW1haW5pbmcgdGltZSBmaWxsZWQgaW4gdGltZW91 dCBhcmd1bWVudC4KLSAqLwotaW50IF9faTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXEsCi0JCQlib29sIGludGVycnVwdGlibGUsCi0JCQlzNjQgKnRpbWVv dXQsCi0JCQlzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzKQotewotCWludCBzdGF0ZSA9IGlu dGVycnVwdGlibGUgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRTsK LQlERUZJTkVfV0FJVChyZXNldCk7Ci0Jc3RydWN0IGludGVsX3dhaXQgd2FpdDsKLQl1bnNpZ25l ZCBsb25nIHRpbWVvdXRfcmVtYWluOwotCWludCByZXQgPSAwOwotCi0JbWlnaHRfc2xlZXAoKTsK LQotCWlmIChsaXN0X2VtcHR5KCZyZXEtPmxpc3QpKQotCQlyZXR1cm4gMDsKLQotCWlmIChpOTE1 X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpKQotCQlyZXR1cm4gMDsKLQotCXRpbWVvdXRfcmVt YWluID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Ci0JaWYgKHRpbWVvdXQpIHsKLQkJaWYgKFdBUk5f T04oKnRpbWVvdXQgPCAwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICgqdGltZW91dCA9 PSAwKQotCQkJcmV0dXJuIC1FVElNRTsKLQotCQkvKiBSZWNvcmQgY3VycmVudCB0aW1lIGluIGNh c2UgaW50ZXJydXB0ZWQsIG9yIHdlZGdlZCAqLwotCQl0aW1lb3V0X3JlbWFpbiA9IG5zZWNzX3Rv X2ppZmZpZXNfdGltZW91dCgqdGltZW91dCk7Ci0JCSp0aW1lb3V0ICs9IGt0aW1lX2dldF9yYXdf bnMoKTsKLQl9Ci0KLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW4ocmVxKTsKLQot CS8qIFRoaXMgY2xpZW50IGlzIGFib3V0IHRvIHN0YWxsIHdhaXRpbmcgZm9yIHRoZSBHUFUuIElu IG1hbnkgY2FzZXMKLQkgKiB0aGlzIGlzIHVuZGVzaXJhYmxlIGFuZCBsaW1pdHMgdGhlIHRocm91 Z2hwdXQgb2YgdGhlIHN5c3RlbSwgYXMKLQkgKiBtYW55IGNsaWVudHMgY2Fubm90IGNvbnRpbnVl IHByb2Nlc3NpbmcgdXNlciBpbnB1dC9vdXRwdXQgd2hpbHN0Ci0JICogYmxvY2tlZC4gUlBTIGF1 dG90dW5pbmcgbWF5IHRha2UgdGVucyBvZiBtaWxsaXNlY29uZHMgdG8gcmVzcG9uZAotCSAqIHRv IHRoZSBHUFUgbG9hZCBhbmQgdGh1cyBpbmN1cnMgYWRkaXRpb25hbCBsYXRlbmN5IGZvciB0aGUg Y2xpZW50LgotCSAqIFdlIGNhbiBjaXJjdW12ZW50IHRoYXQgYnkgcHJvbW90aW5nIHRoZSBHUFUg ZnJlcXVlbmN5IHRvIG1heGltdW0KLQkgKiBiZWZvcmUgd2Ugd2FpdC4gVGhpcyBtYWtlcyB0aGUg R1BVIHRocm90dGxlIHVwIG11Y2ggbW9yZSBxdWlja2x5Ci0JICogKGdvb2QgZm9yIGJlbmNobWFy a3MgYW5kIHVzZXIgZXhwZXJpZW5jZSwgZS5nLiB3aW5kb3cgYW5pbWF0aW9ucyksCi0JICogYnV0 IGF0IGEgY29zdCBvZiBzcGVuZGluZyBtb3JlIHBvd2VyIHByb2Nlc3NpbmcgdGhlIHdvcmtsb2Fk Ci0JICogKGJhZCBmb3IgYmF0dGVyeSkuIE5vdCBhbGwgY2xpZW50cyBldmVuIHdhbnQgdGhlaXIg cmVzdWx0cwotCSAqIGltbWVkaWF0ZWx5IGFuZCBmb3IgdGhlbSB3ZSBzaG91bGQganVzdCBsZXQg dGhlIEdQVSBzZWxlY3QgaXRzIG93bgotCSAqIGZyZXF1ZW5jeSB0byBtYXhpbWlzZSBlZmZpY2ll bmN5LiBUbyBwcmV2ZW50IGEgc2luZ2xlIGNsaWVudCBmcm9tCi0JICogZm9yY2luZyB0aGUgY2xv Y2tzIHRvbyBoaWdoIGZvciB0aGUgd2hvbGUgc3lzdGVtLCB3ZSBvbmx5IGFsbG93Ci0JICogZWFj aCBjbGllbnQgdG8gd2FpdGJvb3N0IG9uY2UgaW4gYSBidXN5IHBlcmlvZC4KLQkgKi8KLQlpZiAo SU5URUxfSU5GTyhyZXEtPmk5MTUpLT5nZW4gPj0gNikKLQkJZ2VuNl9ycHNfYm9vc3QocmVxLT5p OTE1LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKLQotCS8qIE9wdGltaXN0aWMgc3BpbiBm b3IgdGhlIG5leHQgfmppZmZpZSBiZWZvcmUgdG91Y2hpbmcgSVJRcyAqLwotCWlmIChpOTE1X3Nw aW5fcmVxdWVzdChyZXEsIHN0YXRlLCA1KSkKLQkJZ290byBjb21wbGV0ZTsKLQotCWludGVsX3dh aXRfaW5pdCgmd2FpdCwgcmVxLT5zZXFubyk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOwot CWlmIChpbnRlbF9lbmdpbmVfYWRkX3dhaXQocmVxLT5lbmdpbmUsICZ3YWl0KSkKLQkJLyogSW4g b3JkZXIgdG8gY2hlY2sgdGhhdCB3ZSBoYXZlbid0IG1pc3NlZCB0aGUgaW50ZXJydXB0Ci0JCSAq IGFzIHdlIGVuYWJsZWQgaXQsIHdlIG5lZWQgdG8ga2ljayBvdXJzZWx2ZXMgdG8gZG8gYQotCQkg KiBjb2hlcmVudCBjaGVjayBvbiB0aGUgc2Vxbm8gYmVmb3JlIHdlIHNsZWVwLgotCQkgKi8KLQkJ Z290byB3YWtldXA7Ci0KLQlhZGRfd2FpdF9xdWV1ZSgmcmVxLT5pOTE1LT5ncHVfZXJyb3Iud2Fp dF9xdWV1ZSwgJnJlc2V0KTsKLQlmb3IgKDs7KSB7Ci0JCWlmIChzaWduYWxfcGVuZGluZ19zdGF0 ZShzdGF0ZSwgY3VycmVudCkpIHsKLQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJCWJyZWFrOwot CQl9Ci0KLQkJLyogRW5zdXJlIHRoYXQgZXZlbiBpZiB0aGUgR1BVIGhhbmdzLCB3ZSBnZXQgd29r ZW4gdXAuICovCi0JCWk5MTVfcXVldWVfaGFuZ2NoZWNrKHJlcS0+aTkxNSk7Ci0KLQkJdGltZW91 dF9yZW1haW4gPSBpb19zY2hlZHVsZV90aW1lb3V0KHRpbWVvdXRfcmVtYWluKTsKLQkJaWYgKHRp bWVvdXRfcmVtYWluID09IDApIHsKLQkJCXJldCA9IC1FVElNRTsKLQkJCWJyZWFrOwotCQl9Ci0K LQkJaWYgKGludGVsX3dhaXRfY29tcGxldGUoJndhaXQpKQotCQkJYnJlYWs7Ci0KLXdha2V1cDoK LQkJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOwotCi0JCS8qIENhcmVmdWxseSBjaGVjayBpZiB0 aGUgcmVxdWVzdCBpcyBjb21wbGV0ZSwgZ2l2aW5nIHRpbWUKLQkJICogZm9yIHRoZSBzZXFubyB0 byBiZSB2aXNpYmxlIGZvbGxvd2luZyB0aGUgaW50ZXJydXB0LgotCQkgKiBXZSBhbHNvIGhhdmUg dG8gY2hlY2sgaW4gY2FzZSB3ZSBhcmUga2lja2VkIGJ5IHRoZSBHUFUKLQkJICogcmVzZXQgaW4g b3JkZXIgdG8gZHJvcCB0aGUgc3RydWN0X211dGV4LgotCQkgKi8KLQkJaWYgKF9faTkxNV9yZXF1 ZXN0X2lycV9jb21wbGV0ZShyZXEpKQotCQkJYnJlYWs7Ci0KLQkJLyogT25seSBzcGluIGlmIHdl IGtub3cgdGhlIEdQVSBpcyBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdCAqLwotCQlpZiAoaTkxNV9z cGluX3JlcXVlc3QocmVxLCBzdGF0ZSwgMikpCi0JCQlicmVhazsKLQl9Ci0JcmVtb3ZlX3dhaXRf cXVldWUoJnJlcS0+aTkxNS0+Z3B1X2Vycm9yLndhaXRfcXVldWUsICZyZXNldCk7Ci0KLQlpbnRl bF9lbmdpbmVfcmVtb3ZlX3dhaXQocmVxLT5lbmdpbmUsICZ3YWl0KTsKLQlfX3NldF9jdXJyZW50 X3N0YXRlKFRBU0tfUlVOTklORyk7Ci1jb21wbGV0ZToKLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0 X3dhaXRfZW5kKHJlcSk7Ci0KLQlpZiAodGltZW91dCkgewotCQkqdGltZW91dCAtPSBrdGltZV9n ZXRfcmF3X25zKCk7Ci0JCWlmICgqdGltZW91dCA8IDApCi0JCQkqdGltZW91dCA9IDA7Ci0KLQkJ LyoKLQkJICogQXBwYXJlbnRseSBrdGltZSBpc24ndCBhY2N1cmF0ZSBlbm91Z2ggYW5kIG9jY2Fz aW9uYWxseSBoYXMgYQotCQkgKiBiaXQgb2YgbWlzbWF0Y2ggaW4gdGhlIGppZmZpZXM8LT5uc2Vj czwtPmt0aW1lIGxvb3AuIFNvIHBhdGNoCi0JCSAqIHRoaW5ncyB1cCB0byBtYWtlIHRoZSB0ZXN0 IGhhcHB5LiBXZSBhbGxvdyB1cCB0byAxIGppZmZ5LgotCQkgKgotCQkgKiBUaGlzIGlzIGEgcmVn cnNzaW9uIGZyb20gdGhlIHRpbWVzcGVjLT5rdGltZSBjb252ZXJzaW9uLgotCQkgKi8KLQkJaWYg KHJldCA9PSAtRVRJTUUgJiYgKnRpbWVvdXQgPCBqaWZmaWVzX3RvX3VzZWNzKDEpKjEwMDApCi0J CQkqdGltZW91dCA9IDA7Ci0JfQotCi0JaWYgKHJwcyAmJiByZXEtPnNlcW5vID09IHJlcS0+ZW5n aW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubykgewotCQkvKiBUaGUgR1BVIGlzIG5vdyBpZGxlIGFu ZCB0aGlzIGNsaWVudCBoYXMgc3RhbGxlZC4KLQkJICogU2luY2Ugbm8gb3RoZXIgY2xpZW50IGhh cyBzdWJtaXR0ZWQgYSByZXF1ZXN0IGluIHRoZQotCQkgKiBtZWFudGltZSwgYXNzdW1lIHRoYXQg dGhpcyBjbGllbnQgaXMgdGhlIG9ubHkgb25lCi0JCSAqIHN1cHBseWluZyB3b3JrIHRvIHRoZSBH UFUgYnV0IGlzIHVuYWJsZSB0byBrZWVwIHRoYXQKLQkJICogd29yayBzdXBwbGllZCBiZWNhdXNl IGl0IGlzIHdhaXRpbmcuIFNpbmNlIHRoZSBHUFUgaXMKLQkJICogdGhlbiBuZXZlciBrZXB0IGZ1 bGx5IGJ1c3ksIFJQUyBhdXRvY2xvY2tpbmcgd2lsbAotCQkgKiBrZWVwIHRoZSBjbG9ja3MgcmVs YXRpdmVseSBsb3csIGNhdXNpbmcgZnVydGhlciBkZWxheXMuCi0JCSAqIENvbXBlbnNhdGUgYnkg Z2l2aW5nIHRoZSBzeW5jaHJvbm91cyBjbGllbnQgY3JlZGl0IGZvcgotCQkgKiBhIHdhaXRib29z dCBuZXh0IHRpbWUuCi0JCSAqLwotCQlzcGluX2xvY2soJnJlcS0+aTkxNS0+cnBzLmNsaWVudF9s b2NrKTsKLQkJbGlzdF9kZWxfaW5pdCgmcnBzLT5saW5rKTsKLQkJc3Bpbl91bmxvY2soJnJlcS0+ aTkxNS0+cnBzLmNsaWVudF9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaTkx NV9nZW1fcmVxdWVzdF9hZGRfdG9fY2xpZW50KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxLAotCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVf ZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Ci0KLQlXQVJOX09OKCFyZXEgfHwgIWZpbGUgfHwgcmVx LT5maWxlX3ByaXYpOwotCi0JaWYgKCFyZXEgfHwgIWZpbGUpCi0JCXJldHVybiAtRUlOVkFMOwot Ci0JaWYgKHJlcS0+ZmlsZV9wcml2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZpbGVfcHJpdiA9 IGZpbGUtPmRyaXZlcl9wcml2OwotCi0Jc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2spOwot CXJlcS0+ZmlsZV9wcml2ID0gZmlsZV9wcml2OwotCWxpc3RfYWRkX3RhaWwoJnJlcS0+Y2xpZW50 X2xpc3QsICZmaWxlX3ByaXYtPm1tLnJlcXVlc3RfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmZpbGVf cHJpdi0+bW0ubG9jayk7Ci0KLQlyZXEtPnBpZCA9IGdldF9waWQodGFza19waWQoY3VycmVudCkp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaTkxNV9nZW1fcmVxdWVz dF9yZW1vdmVfZnJvbV9jbGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0 KQotewotCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9IHJlcXVlc3Qt PmZpbGVfcHJpdjsKLQotCWlmICghZmlsZV9wcml2KQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2so JmZpbGVfcHJpdi0+bW0ubG9jayk7Ci0JbGlzdF9kZWwoJnJlcXVlc3QtPmNsaWVudF9saXN0KTsK LQlyZXF1ZXN0LT5maWxlX3ByaXYgPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXYtPm1t LmxvY2spOwotCi0JcHV0X3BpZChyZXF1ZXN0LT5waWQpOwotCXJlcXVlc3QtPnBpZCA9IE5VTEw7 Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKLXsKLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3JldGly ZShyZXF1ZXN0KTsKLQotCS8qIFdlIGtub3cgdGhlIEdQVSBtdXN0IGhhdmUgcmVhZCB0aGUgcmVx dWVzdCB0byBoYXZlCi0JICogc2VudCB1cyB0aGUgc2Vxbm8gKyBpbnRlcnJ1cHQsIHNvIHVzZSB0 aGUgcG9zaXRpb24KLQkgKiBvZiB0YWlsIG9mIHRoZSByZXF1ZXN0IHRvIHVwZGF0ZSB0aGUgbGFz dCBrbm93biBwb3NpdGlvbgotCSAqIG9mIHRoZSBHUFUgaGVhZC4KLQkgKgotCSAqIE5vdGUgdGhp cyByZXF1aXJlcyB0aGF0IHdlIGFyZSBhbHdheXMgY2FsbGVkIGluIHJlcXVlc3QKLQkgKiBjb21w bGV0aW9uIG9yZGVyLgotCSAqLwotCXJlcXVlc3QtPnJpbmdidWYtPmxhc3RfcmV0aXJlZF9oZWFk ID0gcmVxdWVzdC0+cG9zdGZpeDsKLQotCWxpc3RfZGVsX2luaXQoJnJlcXVlc3QtPmxpc3QpOwot CWk5MTVfZ2VtX3JlcXVlc3RfcmVtb3ZlX2Zyb21fY2xpZW50KHJlcXVlc3QpOwotCi0JaWYgKHJl cXVlc3QtPnByZXZpb3VzX2NvbnRleHQpIHsKLQkJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykK LQkJCWludGVsX2xyX2NvbnRleHRfdW5waW4ocmVxdWVzdC0+cHJldmlvdXNfY29udGV4dCwKLQkJ CQkJICAgICAgIHJlcXVlc3QtPmVuZ2luZSk7Ci0JfQotCi0JaTkxNV9nZW1fY29udGV4dF91bnJl ZmVyZW5jZShyZXF1ZXN0LT5jdHgpOwotCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UocmVx dWVzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX191cHRv KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSA9IHJlcS0+ZW5naW5lOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqdG1wOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZW5naW5lLT5pOTE1LT5kZXYtPnN0cnVj dF9tdXRleCk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmcmVxLT5saXN0KSkKLQkJcmV0dXJuOwotCi0J ZG8gewotCQl0bXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlbmdpbmUtPnJlcXVlc3RfbGlzdCwKLQkJ CQkgICAgICAgdHlwZW9mKCp0bXApLCBsaXN0KTsKLQotCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGly ZSh0bXApOwotCX0gd2hpbGUgKHRtcCAhPSByZXEpOwotCi0JV0FSTl9PTihpOTE1X3ZlcmlmeV9s aXN0cyhlbmdpbmUtPmRldikpOwotfQotCi0vKioKLSAqIFdhaXRzIGZvciBhIHJlcXVlc3QgdG8g YmUgc2lnbmFsZWQsIGFuZCBjbGVhbnMgdXAgdGhlCi0gKiByZXF1ZXN0IGFuZCBvYmplY3QgbGlz dHMgYXBwcm9wcmlhdGVseSBmb3IgdGhhdCBldmVudC4KLSAqLwotaW50Ci1pOTE1X3dhaXRfcmVx dWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKLXsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXEtPmk5MTU7Ci0JYm9vbCBpbnRlcnJ1cHRpYmxlOwot CWludCByZXQ7Ci0KLQlpbnRlcnJ1cHRpYmxlID0gZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGU7 Ci0KLQlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4 KSk7Ci0KLQlyZXQgPSBfX2k5MTVfd2FpdF9yZXF1ZXN0KHJlcSwgaW50ZXJydXB0aWJsZSwgTlVM TCwgTlVMTCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIElmIHRoZSBHUFUgaHVu Zywgd2Ugd2FudCB0byBrZWVwIHRoZSByZXF1ZXN0cyB0byBmaW5kIHRoZSBndWlsdHkuICovCi0J aWYgKHJlcS0+cmVzZXRfY291bnRlciA9PSBpOTE1X3Jlc2V0X2NvdW50ZXIoJmRldl9wcml2LT5n cHVfZXJyb3IpKQotCQlfX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX191cHRvKHJlcSk7Ci0KLQly ZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBFbnN1cmVzIHRoYXQgYWxsIHJlbmRlcmluZyB0byB0aGUg b2JqZWN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSBvYmplY3QgaXMKICAqIHNhZmUgdG8gdW5iaW5k IGZyb20gdGhlIEdUVCBvciBhY2Nlc3MgZnJvbSB0aGUgQ1BVLgpAQCAtMTUxNCw3ICsxMTU5LDcg QEAgaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCiAJCWk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3dyaXRlKG9iaik7CiAKIAlpZiAo cmVxLT5yZXNldF9jb3VudGVyID09IGk5MTVfcmVzZXRfY291bnRlcigmcmVxLT5pOTE1LT5ncHVf ZXJyb3IpKQotCQlfX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX191cHRvKHJlcSk7CisJCWk5MTVf Z2VtX3JlcXVlc3RfcmV0aXJlX3VwdG8ocmVxKTsKIH0KIAogLyogQSBub25ibG9ja2luZyB2YXJp YW50IG9mIHRoZSBhYm92ZSB3YWl0LiBUaGlzIGlzIGEgaGlnaGx5IGRhbmdlcm91cyByb3V0aW5l CkBAIC0yNTE1LDE5NCArMjE2MCw2IEBAIGk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3JlYWQoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IHJpbmcpCiAJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiB9CiAKLXN0YXRpYyBpbnQKLWk5MTVfZ2VtX2luaXRf c2Vxbm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgc2Vxbm8pCi17Ci0J c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwotCWludCByZXQ7Ci0KLQkvKiBDYXJlZnVs bHkgcmV0aXJlIGFsbCByZXF1ZXN0cyB3aXRob3V0IHdyaXRpbmcgdG8gdGhlIHJpbmdzICovCi0J Zm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYpIHsKLQkJcmV0ID0gaW50ZWxfZW5naW5l X2lkbGUoZW5naW5lKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCWk5MTVfZ2Vt X3JldGlyZV9yZXF1ZXN0cyhkZXZfcHJpdik7Ci0KLQkvKiBJZiB0aGUgc2Vxbm8gd3JhcHMgYXJv dW5kLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBicmVhZGNydW1iIHJidHJlZSAqLwotCWlmICghaTkx NV9zZXFub19wYXNzZWQoc2Vxbm8sIGRldl9wcml2LT5uZXh0X3NlcW5vKSkgewotCQl3aGlsZSAo aW50ZWxfa2lja193YWl0ZXJzKGRldl9wcml2KSB8fAotCQkgICAgICAgaW50ZWxfa2lja19zaWdu YWxlcnMoZGV2X3ByaXYpKQotCQkJeWllbGQoKTsKLQl9Ci0KLQkvKiBGaW5hbGx5IHJlc2V0IGh3 IHN0YXRlICovCi0JZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYpCi0JCWludGVsX3Jp bmdfaW5pdF9zZXFubyhlbmdpbmUsIHNlcW5vKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgaTkx NV9nZW1fc2V0X3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubykKLXsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWlu dCByZXQ7Ci0KLQlpZiAoc2Vxbm8gPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBIV1Mg cGFnZSBuZWVkcyB0byBiZSBzZXQgbGVzcyB0aGFuIHdoYXQgd2UKLQkgKiB3aWxsIGluamVjdCB0 byByaW5nCi0JICovCi0JcmV0ID0gaTkxNV9nZW1faW5pdF9zZXFubyhkZXZfcHJpdiwgc2Vxbm8g LSAxKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogQ2FyZWZ1bGx5IHNldCB0aGUg bGFzdF9zZXFubyB2YWx1ZSBzbyB0aGF0IHdyYXAKLQkgKiBkZXRlY3Rpb24gc3RpbGwgd29ya3MK LQkgKi8KLQlkZXZfcHJpdi0+bmV4dF9zZXFubyA9IHNlcW5vOwotCWRldl9wcml2LT5sYXN0X3Nl cW5vID0gc2Vxbm8gLSAxOwotCWlmIChkZXZfcHJpdi0+bGFzdF9zZXFubyA9PSAwKQotCQlkZXZf cHJpdi0+bGFzdF9zZXFuby0tOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludAotaTkxNV9nZW1fZ2V0 X3NlcW5vKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyICpzZXFubykKLXsK LQkvKiByZXNlcnZlIDAgZm9yIG5vbi1zZXFubyAqLwotCWlmIChkZXZfcHJpdi0+bmV4dF9zZXFu byA9PSAwKSB7Ci0JCWludCByZXQgPSBpOTE1X2dlbV9pbml0X3NlcW5vKGRldl9wcml2LCAwKTsK LQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJZGV2X3ByaXYtPm5leHRfc2Vxbm8gPSAx OwotCX0KLQotCSpzZXFubyA9IGRldl9wcml2LT5sYXN0X3NlcW5vID0gZGV2X3ByaXYtPm5leHRf c2Vxbm8rKzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV9nZW1fbWFya19idXN5 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0JZGV2X3ByaXYtPmd0LmFjdGl2ZV9lbmdp bmVzIHw9IGludGVsX2VuZ2luZV9mbGFnKGVuZ2luZSk7Ci0JaWYgKGRldl9wcml2LT5ndC5hd2Fr ZSkKLQkJcmV0dXJuOwotCi0JaW50ZWxfcnVudGltZV9wbV9nZXRfbm9yZXN1bWUoZGV2X3ByaXYp OwotCWRldl9wcml2LT5ndC5hd2FrZSA9IHRydWU7Ci0KLQlpbnRlbF9lbmFibGVfZ3RfcG93ZXJz YXZlKGRldl9wcml2KTsKLQlpOTE1X3VwZGF0ZV9nZnhfdmFsKGRldl9wcml2KTsKLQlpZiAoSU5U RUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA2KQotCQlnZW42X3Jwc19idXN5KGRldl9wcml2KTsK LQotCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXZfcHJpdi0+d3EsCi0JCQkgICAmZGV2X3ByaXYtPmd0 LnJldGlyZV93b3JrLAotCQkJICAgcm91bmRfamlmZmllc191cF9yZWxhdGl2ZShIWikpOwotfQot Ci0vKgotICogTkI6IFRoaXMgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gZmFpbC4gRG9pbmcg c28gd291bGQgbWVhbiB0aGUgdGhlCi0gKiByZXF1ZXN0IGlzIG5vdCBiZWluZyB0cmFja2VkIGZv ciBjb21wbGV0aW9uIGJ1dCB0aGUgd29yayBpdHNlbGYgaXMKLSAqIGdvaW5nIHRvIGhhcHBlbiBv biB0aGUgaGFyZHdhcmUuIFRoaXMgd291bGQgYmUgYSBCYWQgVGhpbmcodG0pLgotICovCi12b2lk IF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Qs Ci0JCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJYm9vbCBmbHVzaF9jYWNo ZXMpCi17Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdjsKLQlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZjsK LQl1MzIgcmVxdWVzdF9zdGFydDsKLQl1MzIgcmVzZXJ2ZWRfdGFpbDsKLQlpbnQgcmV0OwotCi0J aWYgKFdBUk5fT04ocmVxdWVzdCA9PSBOVUxMKSkKLQkJcmV0dXJuOwotCi0JZW5naW5lID0gcmVx dWVzdC0+ZW5naW5lOwotCWRldl9wcml2ID0gcmVxdWVzdC0+aTkxNTsKLQlyaW5nYnVmID0gcmVx dWVzdC0+cmluZ2J1ZjsKLQotCS8qCi0JICogVG8gZW5zdXJlIHRoYXQgdGhpcyBjYWxsIHdpbGwg bm90IGZhaWwsIHNwYWNlIGZvciBpdHMgZW1pc3Npb25zCi0JICogc2hvdWxkIGFscmVhZHkgaGF2 ZSBiZWVuIHJlc2VydmVkIGluIHRoZSByaW5nIGJ1ZmZlci4gTGV0IHRoZSByaW5nCi0JICoga25v dyB0aGF0IGl0IGlzIHRpbWUgdG8gdXNlIHRoYXQgc3BhY2UgdXAuCi0JICovCi0JcmVxdWVzdF9z dGFydCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1Zik7Ci0JcmVzZXJ2ZWRfdGFpbCA9IHJl cXVlc3QtPnJlc2VydmVkX3NwYWNlOwotCXJlcXVlc3QtPnJlc2VydmVkX3NwYWNlID0gMDsKLQot CS8qCi0JICogRW1pdCBhbnkgb3V0c3RhbmRpbmcgZmx1c2hlcyAtIGV4ZWNidWYgY2FuIGZhaWwg dG8gZW1pdCB0aGUgZmx1c2gKLQkgKiBhZnRlciBoYXZpbmcgZW1pdHRlZCB0aGUgYmF0Y2hidWZm ZXIgY29tbWFuZC4gSGVuY2Ugd2UgbmVlZCB0byBmaXgKLQkgKiB0aGluZ3MgdXAgc2ltaWxhciB0 byBlbWl0dGluZyB0aGUgbGF6eSByZXF1ZXN0LiBUaGUgZGlmZmVyZW5jZSBoZXJlCi0JICogaXMg dGhhdCB0aGUgZmx1c2ggX211c3RfIGhhcHBlbiBiZWZvcmUgdGhlIG5leHQgcmVxdWVzdCwgbm8g bWF0dGVyCi0JICogd2hhdC4KLQkgKi8KLQlpZiAoZmx1c2hfY2FjaGVzKSB7Ci0JCWlmIChpOTE1 LmVuYWJsZV9leGVjbGlzdHMpCi0JCQlyZXQgPSBsb2dpY2FsX3JpbmdfZmx1c2hfYWxsX2NhY2hl cyhyZXF1ZXN0KTsKLQkJZWxzZQotCQkJcmV0ID0gaW50ZWxfcmluZ19mbHVzaF9hbGxfY2FjaGVz KHJlcXVlc3QpOwotCQkvKiBOb3QgYWxsb3dlZCB0byBmYWlsISAqLwotCQlXQVJOKHJldCwgIipf cmluZ19mbHVzaF9hbGxfY2FjaGVzIGZhaWxlZDogJWQhXG4iLCByZXQpOwotCX0KLQotCXRyYWNl X2k5MTVfZ2VtX3JlcXVlc3RfYWRkKHJlcXVlc3QpOwotCi0JcmVxdWVzdC0+aGVhZCA9IHJlcXVl c3Rfc3RhcnQ7Ci0KLQkvKiBXaGlsc3QgdGhpcyByZXF1ZXN0IGV4aXN0cywgYmF0Y2hfb2JqIHdp bGwgYmUgb24gdGhlCi0JICogYWN0aXZlX2xpc3QsIGFuZCBzbyB3aWxsIGhvbGQgdGhlIGFjdGl2 ZSByZWZlcmVuY2UuIE9ubHkgd2hlbiB0aGlzCi0JICogcmVxdWVzdCBpcyByZXRpcmVkIHdpbGwg dGhlIHRoZSBiYXRjaF9vYmogYmUgbW92ZWQgb250byB0aGUKLQkgKiBpbmFjdGl2ZV9saXN0IGFu ZCBsb3NlIGl0cyBhY3RpdmUgcmVmZXJlbmNlLiBIZW5jZSB3ZSBkbyBub3QgbmVlZAotCSAqIHRv IGV4cGxpY2l0bHkgaG9sZCBhbm90aGVyIHJlZmVyZW5jZSBoZXJlLgotCSAqLwotCXJlcXVlc3Qt PmJhdGNoX29iaiA9IG9iajsKLQotCS8qIFNlYWwgdGhlIHJlcXVlc3QgYW5kIG1hcmsgaXQgYXMg cGVuZGluZyBleGVjdXRpb24uIE5vdGUgdGhhdAotCSAqIHdlIG1heSBpbnNwZWN0IHRoaXMgc3Rh dGUsIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MsIGR1cmluZwotCSAqIGhhbmdjaGVjay4gSGVu Y2Ugd2UgYXBwbHkgdGhlIGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgd2UgZG8gbm90Ci0JICogc2Vl IGEgbW9yZSByZWNlbnQgdmFsdWUgaW4gdGhlIGh3cyB0aGFuIHdlIGFyZSB0cmFja2luZy4KLQkg Ki8KLQlyZXF1ZXN0LT5lbWl0dGVkX2ppZmZpZXMgPSBqaWZmaWVzOwotCXJlcXVlc3QtPnByZXZp b3VzX3NlcW5vID0gZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubzsKLQlzbXBfc3RvcmVfbWIo ZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubywgcmVxdWVzdC0+c2Vxbm8pOwotCWxpc3RfYWRk X3RhaWwoJnJlcXVlc3QtPmxpc3QsICZlbmdpbmUtPnJlcXVlc3RfbGlzdCk7Ci0KLQkvKiBSZWNv cmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdCBzbyB0aGF0Ci0JICog c2hvdWxkIHdlIGRldGVjdCB0aGUgdXBkYXRlZCBzZXFubyBwYXJ0LXdheSB0aHJvdWdoIHRoZQot CSAqIEdQVSBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0LCB3ZSBuZXZlciBvdmVyLWVzdGltYXRlIHRo ZQotCSAqIHBvc2l0aW9uIG9mIHRoZSBoZWFkLgotCSAqLwotCXJlcXVlc3QtPnBvc3RmaXggPSBp bnRlbF9yaW5nX2dldF90YWlsKHJpbmdidWYpOwotCi0JaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0 cykKLQkJcmV0ID0gZW5naW5lLT5lbWl0X3JlcXVlc3QocmVxdWVzdCk7Ci0JZWxzZSB7Ci0JCXJl dCA9IGVuZ2luZS0+YWRkX3JlcXVlc3QocmVxdWVzdCk7Ci0KLQkJcmVxdWVzdC0+dGFpbCA9IGlu dGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1Zik7Ci0JfQotCS8qIE5vdCBhbGxvd2VkIHRvIGZhaWwh ICovCi0JV0FSTihyZXQsICJlbWl0fGFkZF9yZXF1ZXN0IGZhaWxlZDogJWQhXG4iLCByZXQpOwot CS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSByZXNlcnZlZCBzaXplIHdhcyBsYXJnZSBlbm91Z2gu ICovCi0JcmV0ID0gaW50ZWxfcmluZ19nZXRfdGFpbChyaW5nYnVmKSAtIHJlcXVlc3Rfc3RhcnQ7 Ci0JaWYgKHJldCA8IDApCi0JCXJldCArPSByaW5nYnVmLT5zaXplOwotCVdBUk5fT05DRShyZXQg PiByZXNlcnZlZF90YWlsLAotCQkgICJOb3QgZW5vdWdoIHNwYWNlIHJlc2VydmVkICglZCBieXRl cykgIgotCQkgICJmb3IgYWRkaW5nIHRoZSByZXF1ZXN0ICglZCBieXRlcylcbiIsCi0JCSAgcmVz ZXJ2ZWRfdGFpbCwgcmV0KTsKLQotCWk5MTVfZ2VtX21hcmtfYnVzeShkZXZfcHJpdiwgZW5naW5l KTsKLX0KLQogc3RhdGljIGJvb2wgaTkxNV9jb250ZXh0X2lzX2Jhbm5lZChjb25zdCBzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4KQogewogCXVuc2lnbmVkIGxvbmcgZWxhcHNlZDsKQEAgLTI3 MzQsMTAyICsyMTkxLDYgQEAgc3RhdGljIHZvaWQgaTkxNV9zZXRfcmVzZXRfc3RhdHVzKHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCiAJfQogfQogCi12b2lkIGk5MTVfZ2VtX3JlcXVlc3Rf ZnJlZShzdHJ1Y3Qga3JlZiAqcmVxX3JlZikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSA9IGNvbnRhaW5lcl9vZihyZXFfcmVmLAotCQkJCQkJIHR5cGVvZigqcmVxKSwgcmVm KTsKLQlrbWVtX2NhY2hlX2ZyZWUocmVxLT5pOTE1LT5yZXF1ZXN0cywgcmVxKTsKLX0KLQotc3Rh dGljIGlubGluZSBpbnQKLV9faTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCi0JCQkgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKLQkJCSBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipyZXFfb3V0KQotewotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKLQl1bnNpZ25lZCByZXNldF9jb3Vu dGVyID0gaTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTsKLQlpbnQgcmV0OwotCi0JaWYgKCFyZXFfb3V0KQot CQlyZXR1cm4gLUVJTlZBTDsKLQotCSpyZXFfb3V0ID0gTlVMTDsKLQotCS8qIEFCSTogQmVmb3Jl IHVzZXJzcGFjZSBhY2Nlc3NlcyB0aGUgR1BVIChlLmcuIGV4ZWNidWZmZXIpLCByZXBvcnQKLQkg KiBFSU8gaWYgdGhlIEdQVSBpcyBhbHJlYWR5IHdlZGdlZCwgb3IgRUFHQUlOIHRvIGRyb3AgdGhl IHN0cnVjdF9tdXRleAotCSAqIGFuZCByZXN0YXJ0LgotCSAqLwotCXJldCA9IGk5MTVfZ2VtX2No ZWNrX3dlZGdlKHJlc2V0X2NvdW50ZXIsIGRldl9wcml2LT5tbS5pbnRlcnJ1cHRpYmxlKTsKLQlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmVxID0ga21lbV9jYWNoZV96YWxsb2MoZGV2X3By aXYtPnJlcXVlc3RzLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVxID09IE5VTEwpCi0JCXJldHVybiAt RU5PTUVNOwotCi0JcmV0ID0gaTkxNV9nZW1fZ2V0X3NlcW5vKGVuZ2luZS0+aTkxNSwgJnJlcS0+ c2Vxbm8pOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0Ja3JlZl9pbml0KCZyZXEtPnJlZik7 Ci0JcmVxLT5pOTE1ID0gZGV2X3ByaXY7Ci0JcmVxLT5lbmdpbmUgPSBlbmdpbmU7Ci0JcmVxLT5y ZXNldF9jb3VudGVyID0gcmVzZXRfY291bnRlcjsKLQlyZXEtPmN0eCAgPSBjdHg7Ci0JaTkxNV9n ZW1fY29udGV4dF9yZWZlcmVuY2UocmVxLT5jdHgpOwotCi0JLyoKLQkgKiBSZXNlcnZlIHNwYWNl IGluIHRoZSByaW5nIGJ1ZmZlciBmb3IgYWxsIHRoZSBjb21tYW5kcyByZXF1aXJlZCB0bwotCSAq IGV2ZW50dWFsbHkgZW1pdCB0aGlzIHJlcXVlc3QuIFRoaXMgaXMgdG8gZ3VhcmFudGVlIHRoYXQg dGhlCi0JICogaTkxNV9hZGRfcmVxdWVzdCgpIGNhbGwgY2FuJ3QgZmFpbC4gTm90ZSB0aGF0IHRo ZSByZXNlcnZlIG1heSBuZWVkCi0JICogdG8gYmUgcmVkb25lIGlmIHRoZSByZXF1ZXN0IGlzIG5v dCBhY3R1YWxseSBzdWJtaXR0ZWQgc3RyYWlnaHQKLQkgKiBhd2F5LCBlLmcuIGJlY2F1c2UgYSBH UFUgc2NoZWR1bGVyIGhhcyBkZWZlcnJlZCBpdC4KLQkgKi8KLQlyZXEtPnJlc2VydmVkX3NwYWNl ID0gTUlOX1NQQUNFX0ZPUl9BRERfUkVRVUVTVDsKLQotCWlmIChpOTE1LmVuYWJsZV9leGVjbGlz dHMpCi0JCXJldCA9IGludGVsX2xvZ2ljYWxfcmluZ19hbGxvY19yZXF1ZXN0X2V4dHJhcyhyZXEp OwotCWVsc2UKLQkJcmV0ID0gaW50ZWxfcmluZ19hbGxvY19yZXF1ZXN0X2V4dHJhcyhyZXEpOwot CWlmIChyZXQpCi0JCWdvdG8gZXJyX2N0eDsKLQotCSpyZXFfb3V0ID0gcmVxOwotCXJldHVybiAw OwotCi1lcnJfY3R4OgotCWk5MTVfZ2VtX2NvbnRleHRfdW5yZWZlcmVuY2UoY3R4KTsKLWVycjoK LQlrbWVtX2NhY2hlX2ZyZWUoZGV2X3ByaXYtPnJlcXVlc3RzLCByZXEpOwotCXJldHVybiByZXQ7 Ci19Ci0KLS8qKgotICogaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyAtIGFsbG9jYXRlIGEgcmVxdWVz dCBzdHJ1Y3R1cmUKLSAqCi0gKiBAZW5naW5lOiBlbmdpbmUgdGhhdCB3ZSB3aXNoIHRvIGlzc3Vl IHRoZSByZXF1ZXN0IG9uLgotICogQGN0eDogY29udGV4dCB0aGF0IHRoZSByZXF1ZXN0IHdpbGwg YmUgYXNzb2NpYXRlZCB3aXRoLgotICogICAgICAgVGhpcyBjYW4gYmUgTlVMTCBpZiB0aGUgcmVx dWVzdCBpcyBub3QgZGlyZWN0bHkgcmVsYXRlZCB0bwotICogICAgICAgYW55IHNwZWNpZmljIHVz ZXIgY29udGV4dCwgaW4gd2hpY2ggY2FzZSB0aGlzIGZ1bmN0aW9uIHdpbGwKLSAqICAgICAgIGNo b29zZSBhbiBhcHByb3ByaWF0ZSBjb250ZXh0IHRvIHVzZS4KLSAqCi0gKiBSZXR1cm5zIGEgcG9p bnRlciB0byB0aGUgYWxsb2NhdGVkIHJlcXVlc3QgaWYgc3VjY2Vzc2Z1bCwKLSAqIG9yIGFuIGVy cm9yIGNvZGUgaWYgbm90LgotICovCi1zdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgotaTkx NV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCSAg ICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxOwotCWludCBlcnI7Ci0KLQlpZiAoY3R4ID09IE5VTEwpCi0JCWN0eCA9 IGVuZ2luZS0+aTkxNS0+a2VybmVsX2NvbnRleHQ7Ci0JZXJyID0gX19pOTE1X2dlbV9yZXF1ZXN0 X2FsbG9jKGVuZ2luZSwgY3R4LCAmcmVxKTsKLQlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDog cmVxOwotfQotCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgogaTkxNV9nZW1fZmluZF9h Y3RpdmVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CkBAIC0yOTAz LDE0ICsyMjY0LDE0IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3Jlc2V0X2VuZ2luZV9jbGVhbnVw KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkgKiBpbXBsaWNpdCByZWZlcmVuY2Vz IG9uIHRoaW5ncyBsaWtlIGUuZy4gcHBndHQgYWRkcmVzcyBzcGFjZXMgdGhyb3VnaAogCSAqIHRo ZSByZXF1ZXN0LgogCSAqLwotCXdoaWxlICghbGlzdF9lbXB0eSgmZW5naW5lLT5yZXF1ZXN0X2xp c3QpKSB7CisJaWYgKCFsaXN0X2VtcHR5KCZlbmdpbmUtPnJlcXVlc3RfbGlzdCkpIHsKIAkJc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OwogCi0JCXJlcXVlc3QgPSBsaXN0X2Zp cnN0X2VudHJ5KCZlbmdpbmUtPnJlcXVlc3RfbGlzdCwKLQkJCQkJICAgc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0LAotCQkJCQkgICBsaXN0KTsKKwkJcmVxdWVzdCA9IGxpc3RfbGFzdF9lbnRy eSgmZW5naW5lLT5yZXF1ZXN0X2xpc3QsCisJCQkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0LAorCQkJCQkgIGxpc3QpOwogCi0JCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHJlcXVlc3Qp OworCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRvKHJlcXVlc3QpOwogCX0KIAogCS8qIEhh dmluZyBmbHVzaGVkIGFsbCByZXF1ZXN0cyBmcm9tIGFsbCBxdWV1ZXMsIHdlIGtub3cgdGhhdCBh bGwKQEAgLTI5NzQsNyArMjMzNSw3IEBAIGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJaWYgKCFpOTE1X2dlbV9yZXF1ZXN0X2Nv bXBsZXRlZChyZXF1ZXN0KSkKIAkJCWJyZWFrOwogCi0JCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJl KHJlcXVlc3QpOworCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRvKHJlcXVlc3QpOwogCX0K IAogCS8qIE1vdmUgYW55IGJ1ZmZlcnMgb24gdGhlIGFjdGl2ZSBsaXN0IHRoYXQgYXJlIG5vIGxv bmdlciByZWZlcmVuY2VkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9yZXF1ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNGIyZjE1MWNkZmMKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMKQEAg LTAsMCArMSw2NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOC0yMDE1IEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworc3RhdGljIGludCBpOTE1X2dlbV9jaGVj a193ZWRnZSh1bnNpZ25lZCByZXNldF9jb3VudGVyLCBib29sIGludGVycnVwdGlibGUpCit7CisJ aWYgKF9faTkxNV90ZXJtaW5hbGx5X3dlZGdlZChyZXNldF9jb3VudGVyKSkKKwkJcmV0dXJuIC1F SU87CisKKwlpZiAoX19pOTE1X3Jlc2V0X2luX3Byb2dyZXNzKHJlc2V0X2NvdW50ZXIpKSB7CisJ CS8qIE5vbi1pbnRlcnJ1cHRpYmxlIGNhbGxlcnMgY2FuJ3QgaGFuZGxlIC1FQUdBSU4sIGhlbmNl IHJldHVybgorCQkgKiAtRUlPIHVuY29uZGl0aW9uYWxseSBmb3IgdGhlc2UuICovCisJCWlmICgh aW50ZXJydXB0aWJsZSkKKwkJCXJldHVybiAtRUlPOworCisJCXJldHVybiAtRUFHQUlOOworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2luaXRfc2Vxbm8oc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgc2Vxbm8pCit7CisJc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lOworCWludCByZXQ7CisKKwkvKiBDYXJlZnVsbHkgcmV0aXJlIGFs bCByZXF1ZXN0cyB3aXRob3V0IHdyaXRpbmcgdG8gdGhlIHJpbmdzICovCisJZm9yX2VhY2hfZW5n aW5lKGVuZ2luZSwgZGV2X3ByaXYpIHsKKwkJcmV0ID0gaW50ZWxfZW5naW5lX2lkbGUoZW5naW5l KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCWk5MTVfZ2VtX3JldGlyZV9yZXF1 ZXN0cyhkZXZfcHJpdik7CisKKwkvKiBJZiB0aGUgc2Vxbm8gd3JhcHMgYXJvdW5kLCB3ZSBuZWVk IHRvIGNsZWFyIHRoZSBicmVhZGNydW1iIHJidHJlZSAqLworCWlmICghaTkxNV9zZXFub19wYXNz ZWQoc2Vxbm8sIGRldl9wcml2LT5uZXh0X3NlcW5vKSkgeworCQl3aGlsZSAoaW50ZWxfa2lja193 YWl0ZXJzKGRldl9wcml2KSB8fAorCQkgICAgICAgaW50ZWxfa2lja19zaWduYWxlcnMoZGV2X3By aXYpKQorCQkJeWllbGQoKTsKKwl9CisKKwkvKiBGaW5hbGx5IHJlc2V0IGh3IHN0YXRlICovCisJ Zm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYpCisJCWludGVsX3JpbmdfaW5pdF9zZXFu byhlbmdpbmUsIHNlcW5vKTsKKworCXJldHVybiAwOworfQorCitpbnQgaTkxNV9nZW1fc2V0X3Nl cW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlp ZiAoc2Vxbm8gPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBIV1MgcGFnZSBuZWVkcyB0 byBiZSBzZXQgbGVzcyB0aGFuIHdoYXQgd2UKKwkgKiB3aWxsIGluamVjdCB0byByaW5nCisJICov CisJcmV0ID0gaTkxNV9nZW1faW5pdF9zZXFubyhkZXZfcHJpdiwgc2Vxbm8gLSAxKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogQ2FyZWZ1bGx5IHNldCB0aGUgbGFzdF9zZXFubyB2 YWx1ZSBzbyB0aGF0IHdyYXAKKwkgKiBkZXRlY3Rpb24gc3RpbGwgd29ya3MKKwkgKi8KKwlkZXZf cHJpdi0+bmV4dF9zZXFubyA9IHNlcW5vOworCWRldl9wcml2LT5sYXN0X3NlcW5vID0gc2Vxbm8g LSAxOworCWlmIChkZXZfcHJpdi0+bGFzdF9zZXFubyA9PSAwKQorCQlkZXZfcHJpdi0+bGFzdF9z ZXFuby0tOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fZ2V0X3NlcW5v KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyICpzZXFubykKK3sKKwkvKiBy ZXNlcnZlIDAgZm9yIG5vbi1zZXFubyAqLworCWlmICh1bmxpa2VseShkZXZfcHJpdi0+bmV4dF9z ZXFubyA9PSAwKSkgeworCQlpbnQgcmV0ID0gaTkxNV9nZW1faW5pdF9zZXFubyhkZXZfcHJpdiwg MCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWRldl9wcml2LT5uZXh0X3NlcW5v ID0gMTsKKwl9CisKKwkqc2Vxbm8gPSBkZXZfcHJpdi0+bGFzdF9zZXFubyA9IGRldl9wcml2LT5u ZXh0X3NlcW5vKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2k5MTVf Z2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJIHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCisJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICoqcmVxX291dCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBl bmdpbmUtPmk5MTU7CisJdW5zaWduZWQgcmVzZXRfY291bnRlciA9IGk5MTVfcmVzZXRfY291bnRl cigmZGV2X3ByaXYtPmdwdV9lcnJvcik7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy ZXE7CisJaW50IHJldDsKKworCWlmICghcmVxX291dCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkq cmVxX291dCA9IE5VTEw7CisKKwkvKiBBQkk6IEJlZm9yZSB1c2Vyc3BhY2UgYWNjZXNzZXMgdGhl IEdQVSAoZS5nLiBleGVjYnVmZmVyKSwgcmVwb3J0CisJICogRUlPIGlmIHRoZSBHUFUgaXMgYWxy ZWFkeSB3ZWRnZWQsIG9yIEVBR0FJTiB0byBkcm9wIHRoZSBzdHJ1Y3RfbXV0ZXgKKwkgKiBhbmQg cmVzdGFydC4KKwkgKi8KKwlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRnZShyZXNldF9jb3VudGVy LCBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJlcSA9IGttZW1fY2FjaGVfemFsbG9jKGRldl9wcml2LT5yZXF1ZXN0cywgR0ZQX0tFUk5F TCk7CisJaWYgKHJlcSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGk5MTVf Z2VtX2dldF9zZXFubyhkZXZfcHJpdiwgJnJlcS0+c2Vxbm8pOworCWlmIChyZXQpCisJCWdvdG8g ZXJyOworCisJa3JlZl9pbml0KCZyZXEtPnJlZik7CisJcmVxLT5pOTE1ID0gZGV2X3ByaXY7CisJ cmVxLT5lbmdpbmUgPSBlbmdpbmU7CisJcmVxLT5yZXNldF9jb3VudGVyID0gcmVzZXRfY291bnRl cjsKKwlyZXEtPmN0eCA9IGN0eDsKKwlpOTE1X2dlbV9jb250ZXh0X3JlZmVyZW5jZShjdHgpOwor CisJLyoKKwkgKiBSZXNlcnZlIHNwYWNlIGluIHRoZSByaW5nIGJ1ZmZlciBmb3IgYWxsIHRoZSBj b21tYW5kcyByZXF1aXJlZCB0bworCSAqIGV2ZW50dWFsbHkgZW1pdCB0aGlzIHJlcXVlc3QuIFRo aXMgaXMgdG8gZ3VhcmFudGVlIHRoYXQgdGhlCisJICogaTkxNV9hZGRfcmVxdWVzdCgpIGNhbGwg Y2FuJ3QgZmFpbC4gTm90ZSB0aGF0IHRoZSByZXNlcnZlIG1heSBuZWVkCisJICogdG8gYmUgcmVk b25lIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBhY3R1YWxseSBzdWJtaXR0ZWQgc3RyYWlnaHQKKwkg KiBhd2F5LCBlLmcuIGJlY2F1c2UgYSBHUFUgc2NoZWR1bGVyIGhhcyBkZWZlcnJlZCBpdC4KKwkg Ki8KKwlyZXEtPnJlc2VydmVkX3NwYWNlID0gTUlOX1NQQUNFX0ZPUl9BRERfUkVRVUVTVDsKKwor CWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCisJCXJldCA9IGludGVsX2xvZ2ljYWxfcmluZ19h bGxvY19yZXF1ZXN0X2V4dHJhcyhyZXEpOworCWVsc2UKKwkJcmV0ID0gaW50ZWxfcmluZ19hbGxv Y19yZXF1ZXN0X2V4dHJhcyhyZXEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2N0eDsKKworCSpy ZXFfb3V0ID0gcmVxOworCXJldHVybiAwOworCitlcnJfY3R4OgorCWk5MTVfZ2VtX2NvbnRleHRf dW5yZWZlcmVuY2UoY3R4KTsKK2VycjoKKwlrbWVtX2NhY2hlX2ZyZWUoZGV2X3ByaXYtPnJlcXVl c3RzLCByZXEpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaTkxNV9nZW1fcmVxdWVzdF9h bGxvYyAtIGFsbG9jYXRlIGEgcmVxdWVzdCBzdHJ1Y3R1cmUKKyAqCisgKiBAZW5naW5lOiBlbmdp bmUgdGhhdCB3ZSB3aXNoIHRvIGlzc3VlIHRoZSByZXF1ZXN0IG9uLgorICogQGN0eDogY29udGV4 dCB0aGF0IHRoZSByZXF1ZXN0IHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoLgorICogICAgICAgVGhp cyBjYW4gYmUgTlVMTCBpZiB0aGUgcmVxdWVzdCBpcyBub3QgZGlyZWN0bHkgcmVsYXRlZCB0bwor ICogICAgICAgYW55IHNwZWNpZmljIHVzZXIgY29udGV4dCwgaW4gd2hpY2ggY2FzZSB0aGlzIGZ1 bmN0aW9uIHdpbGwKKyAqICAgICAgIGNob29zZSBhbiBhcHByb3ByaWF0ZSBjb250ZXh0IHRvIHVz ZS4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIHJlcXVlc3QgaWYg c3VjY2Vzc2Z1bCwKKyAqIG9yIGFuIGVycm9yIGNvZGUgaWYgbm90LgorICovCitzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKgoraTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCisJCSAgICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOworCWludCBlcnI7CisKKwlp ZiAoY3R4ID09IE5VTEwpCisJCWN0eCA9IGVuZ2luZS0+aTkxNS0+a2VybmVsX2NvbnRleHQ7CisJ ZXJyID0gX19pOTE1X2dlbV9yZXF1ZXN0X2FsbG9jKGVuZ2luZSwgY3R4LCAmcmVxKTsKKwlyZXR1 cm4gZXJyID8gRVJSX1BUUihlcnIpIDogcmVxOworfQorCitpbnQgaTkxNV9nZW1fcmVxdWVzdF9h ZGRfdG9fY2xpZW50KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAorCQkJCSAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2OworCisJV0FS Tl9PTighcmVxIHx8ICFmaWxlIHx8IHJlcS0+ZmlsZV9wcml2KTsKKworCWlmICghcmVxIHx8ICFm aWxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZXEtPmZpbGVfcHJpdikKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlkZXZfcHJpdmF0ZSA9IHJlcS0+aTkxNTsKKwlmaWxlX3ByaXYgPSBmaWxl LT5kcml2ZXJfcHJpdjsKKworCXNwaW5fbG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKKwlyZXEt PmZpbGVfcHJpdiA9IGZpbGVfcHJpdjsKKwlsaXN0X2FkZF90YWlsKCZyZXEtPmNsaWVudF9saXN0 LCAmZmlsZV9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpOworCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXYt Pm1tLmxvY2spOworCisJcmVxLT5waWQgPSBnZXRfcGlkKHRhc2tfcGlkKGN1cnJlbnQpKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2k5MTVfZ2VtX3JlcXVlc3RfcmVt b3ZlX2Zyb21fY2xpZW50KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSByZXF1ZXN0LT5maWxl X3ByaXY7CisKKwlpZiAoIWZpbGVfcHJpdikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZmaWxl X3ByaXYtPm1tLmxvY2spOworCWxpc3RfZGVsKCZyZXF1ZXN0LT5jbGllbnRfbGlzdCk7CisJcmVx dWVzdC0+ZmlsZV9wcml2ID0gTlVMTDsKKwlzcGluX3VubG9jaygmZmlsZV9wcml2LT5tbS5sb2Nr KTsKKworCXB1dF9waWQocmVxdWVzdC0+cGlkKTsKKwlyZXF1ZXN0LT5waWQgPSBOVUxMOworfQor CitzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUocmVx dWVzdCk7CisJbGlzdF9kZWxfaW5pdCgmcmVxdWVzdC0+bGlzdCk7CisKKwkvKiBXZSBrbm93IHRo ZSBHUFUgbXVzdCBoYXZlIHJlYWQgdGhlIHJlcXVlc3QgdG8gaGF2ZQorCSAqIHNlbnQgdXMgdGhl IHNlcW5vICsgaW50ZXJydXB0LCBzbyB1c2UgdGhlIHBvc2l0aW9uCisJICogb2YgdGFpbCBvZiB0 aGUgcmVxdWVzdCB0byB1cGRhdGUgdGhlIGxhc3Qga25vd24gcG9zaXRpb24KKwkgKiBvZiB0aGUg R1BVIGhlYWQuCisJICoKKwkgKiBOb3RlIHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSBhcmUgYWx3YXlz IGNhbGxlZCBpbiByZXF1ZXN0CisJICogY29tcGxldGlvbiBvcmRlci4KKwkgKi8KKwlyZXF1ZXN0 LT5yaW5nYnVmLT5sYXN0X3JldGlyZWRfaGVhZCA9IHJlcXVlc3QtPnBvc3RmaXg7CisKKwlpOTE1 X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChyZXF1ZXN0KTsKKworCWlmIChyZXF1ZXN0 LT5wcmV2aW91c19jb250ZXh0KSB7CisJCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCisJCQlp bnRlbF9scl9jb250ZXh0X3VucGluKHJlcXVlc3QtPnByZXZpb3VzX2NvbnRleHQsCisJCQkJCSAg ICAgICByZXF1ZXN0LT5lbmdpbmUpOworCX0KKworCWk5MTVfZ2VtX2NvbnRleHRfdW5yZWZlcmVu Y2UocmVxdWVzdC0+Y3R4KTsKKwlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcXVlc3Qp OworfQorCit2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX3VwdG8oc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0g cmVxLT5lbmdpbmU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICp0bXA7CisKKwlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZyZXEtPmk5MTUtPmRldi0+c3RydWN0X211dGV4KTsKKworCWlmIChs aXN0X2VtcHR5KCZyZXEtPmxpc3QpKQorCQlyZXR1cm47CisKKwlkbyB7CisJCXRtcCA9IGxpc3Rf Zmlyc3RfZW50cnkoJmVuZ2luZS0+cmVxdWVzdF9saXN0LAorCQkJCSAgICAgICB0eXBlb2YoKnRt cCksIGxpc3QpOworCisJCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHRtcCk7CisJfSB3aGlsZSAo dG1wICE9IHJlcSk7CisKKwlXQVJOX09OKGk5MTVfdmVyaWZ5X2xpc3RzKGVuZ2luZS0+ZGV2KSk7 Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX21hcmtfYnVzeShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQoreworCWRldl9wcml2LT5ndC5hY3RpdmVfZW5naW5lcyB8PSBpbnRlbF9lbmdpbmVf ZmxhZyhlbmdpbmUpOworCWlmIChkZXZfcHJpdi0+Z3QuYXdha2UpCisJCXJldHVybjsKKworCWlu dGVsX3J1bnRpbWVfcG1fZ2V0X25vcmVzdW1lKGRldl9wcml2KTsKKwlkZXZfcHJpdi0+Z3QuYXdh a2UgPSB0cnVlOworCisJaW50ZWxfZW5hYmxlX2d0X3Bvd2Vyc2F2ZShkZXZfcHJpdik7CisJaTkx NV91cGRhdGVfZ2Z4X3ZhbChkZXZfcHJpdik7CisJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5n ZW4gPj0gNikKKwkJZ2VuNl9ycHNfYnVzeShkZXZfcHJpdik7CisKKwlxdWV1ZV9kZWxheWVkX3dv cmsoZGV2X3ByaXYtPndxLAorCQkJICAgJmRldl9wcml2LT5ndC5yZXRpcmVfd29yaywKKwkJCSAg IHJvdW5kX2ppZmZpZXNfdXBfcmVsYXRpdmUoSFopKTsKK30KKworLyoKKyAqIE5COiBUaGlzIGZ1 bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGZhaWwuIERvaW5nIHNvIHdvdWxkIG1lYW4gdGhlIHRo ZQorICogcmVxdWVzdCBpcyBub3QgYmVpbmcgdHJhY2tlZCBmb3IgY29tcGxldGlvbiBidXQgdGhl IHdvcmsgaXRzZWxmIGlzCisgKiBnb2luZyB0byBoYXBwZW4gb24gdGhlIGhhcmR3YXJlLiBUaGlz IHdvdWxkIGJlIGEgQmFkIFRoaW5nKHRtKS4KKyAqLwordm9pZCBfX2k5MTVfYWRkX3JlcXVlc3Qo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKKwkJCWJvb2wgZmx1c2hfY2FjaGVzKQoreworCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7 CisJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWY7CisJdTMyIHJlcXVlc3Rfc3RhcnQ7 CisJdTMyIHJlc2VydmVkX3RhaWw7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKHJlcXVlc3Qg PT0gTlVMTCkpCisJCXJldHVybjsKKworCWVuZ2luZSA9IHJlcXVlc3QtPmVuZ2luZTsKKwlkZXZf cHJpdiA9IHJlcXVlc3QtPmk5MTU7CisJcmluZ2J1ZiA9IHJlcXVlc3QtPnJpbmdidWY7CisKKwkv KgorCSAqIFRvIGVuc3VyZSB0aGF0IHRoaXMgY2FsbCB3aWxsIG5vdCBmYWlsLCBzcGFjZSBmb3Ig aXRzIGVtaXNzaW9ucworCSAqIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiByZXNlcnZlZCBpbiB0 aGUgcmluZyBidWZmZXIuIExldCB0aGUgcmluZworCSAqIGtub3cgdGhhdCBpdCBpcyB0aW1lIHRv IHVzZSB0aGF0IHNwYWNlIHVwLgorCSAqLworCXJlcXVlc3Rfc3RhcnQgPSBpbnRlbF9yaW5nX2dl dF90YWlsKHJpbmdidWYpOworCXJlc2VydmVkX3RhaWwgPSByZXF1ZXN0LT5yZXNlcnZlZF9zcGFj ZTsKKwlyZXF1ZXN0LT5yZXNlcnZlZF9zcGFjZSA9IDA7CisKKwkvKgorCSAqIEVtaXQgYW55IG91 dHN0YW5kaW5nIGZsdXNoZXMgLSBleGVjYnVmIGNhbiBmYWlsIHRvIGVtaXQgdGhlIGZsdXNoCisJ ICogYWZ0ZXIgaGF2aW5nIGVtaXR0ZWQgdGhlIGJhdGNoYnVmZmVyIGNvbW1hbmQuIEhlbmNlIHdl IG5lZWQgdG8gZml4CisJICogdGhpbmdzIHVwIHNpbWlsYXIgdG8gZW1pdHRpbmcgdGhlIGxhenkg cmVxdWVzdC4gVGhlIGRpZmZlcmVuY2UgaGVyZQorCSAqIGlzIHRoYXQgdGhlIGZsdXNoIF9tdXN0 XyBoYXBwZW4gYmVmb3JlIHRoZSBuZXh0IHJlcXVlc3QsIG5vIG1hdHRlcgorCSAqIHdoYXQuCisJ ICovCisJaWYgKGZsdXNoX2NhY2hlcykgeworCQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQor CQkJcmV0ID0gbG9naWNhbF9yaW5nX2ZsdXNoX2FsbF9jYWNoZXMocmVxdWVzdCk7CisJCWVsc2UK KwkJCXJldCA9IGludGVsX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyhyZXF1ZXN0KTsKKwkJLyogTm90 IGFsbG93ZWQgdG8gZmFpbCEgKi8KKwkJV0FSTihyZXQsICIqX3JpbmdfZmx1c2hfYWxsX2NhY2hl cyBmYWlsZWQ6ICVkIVxuIiwgcmV0KTsKKwl9CisKKwl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X2Fk ZChyZXF1ZXN0KTsKKworCXJlcXVlc3QtPmhlYWQgPSByZXF1ZXN0X3N0YXJ0OworCisJLyogV2hp bHN0IHRoaXMgcmVxdWVzdCBleGlzdHMsIGJhdGNoX29iaiB3aWxsIGJlIG9uIHRoZQorCSAqIGFj dGl2ZV9saXN0LCBhbmQgc28gd2lsbCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlLiBPbmx5IHdo ZW4gdGhpcworCSAqIHJlcXVlc3QgaXMgcmV0aXJlZCB3aWxsIHRoZSB0aGUgYmF0Y2hfb2JqIGJl IG1vdmVkIG9udG8gdGhlCisJICogaW5hY3RpdmVfbGlzdCBhbmQgbG9zZSBpdHMgYWN0aXZlIHJl ZmVyZW5jZS4gSGVuY2Ugd2UgZG8gbm90IG5lZWQKKwkgKiB0byBleHBsaWNpdGx5IGhvbGQgYW5v dGhlciByZWZlcmVuY2UgaGVyZS4KKwkgKi8KKwlyZXF1ZXN0LT5iYXRjaF9vYmogPSBvYmo7CisK KwkvKiBTZWFsIHRoZSByZXF1ZXN0IGFuZCBtYXJrIGl0IGFzIHBlbmRpbmcgZXhlY3V0aW9uLiBO b3RlIHRoYXQKKwkgKiB3ZSBtYXkgaW5zcGVjdCB0aGlzIHN0YXRlLCB3aXRob3V0IGhvbGRpbmcg YW55IGxvY2tzLCBkdXJpbmcKKwkgKiBoYW5nY2hlY2suIEhlbmNlIHdlIGFwcGx5IHRoZSBiYXJy aWVyIHRvIGVuc3VyZSB0aGF0IHdlIGRvIG5vdAorCSAqIHNlZSBhIG1vcmUgcmVjZW50IHZhbHVl IGluIHRoZSBod3MgdGhhbiB3ZSBhcmUgdHJhY2tpbmcuCisJICovCisJcmVxdWVzdC0+ZW1pdHRl ZF9qaWZmaWVzID0gamlmZmllczsKKwlyZXF1ZXN0LT5wcmV2aW91c19zZXFubyA9IGVuZ2luZS0+ bGFzdF9zdWJtaXR0ZWRfc2Vxbm87CisJc21wX3N0b3JlX21iKGVuZ2luZS0+bGFzdF9zdWJtaXR0 ZWRfc2Vxbm8sIHJlcXVlc3QtPnNlcW5vKTsKKwlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5saXN0 LCAmZW5naW5lLT5yZXF1ZXN0X2xpc3QpOworCisJLyogUmVjb3JkIHRoZSBwb3NpdGlvbiBvZiB0 aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3Qgc28gdGhhdAorCSAqIHNob3VsZCB3ZSBkZXRlY3QgdGhl IHVwZGF0ZWQgc2Vxbm8gcGFydC13YXkgdGhyb3VnaCB0aGUKKwkgKiBHUFUgcHJvY2Vzc2luZyB0 aGUgcmVxdWVzdCwgd2UgbmV2ZXIgb3Zlci1lc3RpbWF0ZSB0aGUKKwkgKiBwb3NpdGlvbiBvZiB0 aGUgaGVhZC4KKwkgKi8KKwlyZXF1ZXN0LT5wb3N0Zml4ID0gaW50ZWxfcmluZ19nZXRfdGFpbChy aW5nYnVmKTsKKworCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCisJCXJldCA9IGVuZ2luZS0+ ZW1pdF9yZXF1ZXN0KHJlcXVlc3QpOworCWVsc2UgeworCQlyZXQgPSBlbmdpbmUtPmFkZF9yZXF1 ZXN0KHJlcXVlc3QpOworCisJCXJlcXVlc3QtPnRhaWwgPSBpbnRlbF9yaW5nX2dldF90YWlsKHJp bmdidWYpOworCX0KKwkvKiBOb3QgYWxsb3dlZCB0byBmYWlsISAqLworCVdBUk4ocmV0LCAiZW1p dHxhZGRfcmVxdWVzdCBmYWlsZWQ6ICVkIVxuIiwgcmV0KTsKKwkvKiBTYW5pdHkgY2hlY2sgdGhh dCB0aGUgcmVzZXJ2ZWQgc2l6ZSB3YXMgbGFyZ2UgZW5vdWdoLiAqLworCXJldCA9IGludGVsX3Jp bmdfZ2V0X3RhaWwocmluZ2J1ZikgLSByZXF1ZXN0X3N0YXJ0OworCWlmIChyZXQgPCAwKQorCQly ZXQgKz0gcmluZ2J1Zi0+c2l6ZTsKKwlXQVJOX09OQ0UocmV0ID4gcmVzZXJ2ZWRfdGFpbCwKKwkJ ICAiTm90IGVub3VnaCBzcGFjZSByZXNlcnZlZCAoJWQgYnl0ZXMpICIKKwkJICAiZm9yIGFkZGlu ZyB0aGUgcmVxdWVzdCAoJWQgYnl0ZXMpXG4iLAorCQkgIHJlc2VydmVkX3RhaWwsIHJldCk7CisK KwlpOTE1X2dlbV9tYXJrX2J1c3koZGV2X3ByaXYsIGVuZ2luZSk7Cit9CisKK3N0YXRpYyB1bnNp Z25lZCBsb25nIGxvY2FsX2Nsb2NrX3VzKHVuc2lnbmVkICpjcHUpCit7CisJdW5zaWduZWQgbG9u ZyB0OworCisJLyogQ2hlYXBseSBhbmQgYXBwcm94aW1hdGVseSBjb252ZXJ0IGZyb20gbmFub3Nl Y29uZHMgdG8gbWljcm9zZWNvbmRzLgorCSAqIFRoZSByZXN1bHQgYW5kIHN1YnNlcXVlbnQgY2Fs Y3VsYXRpb25zIGFyZSBhbHNvIGRlZmluZWQgaW4gdGhlIHNhbWUKKwkgKiBhcHByb3hpbWF0ZSBt aWNyb3NlY29uZHMgdW5pdHMuIFRoZSBwcmluY2lwYWwgc291cmNlIG9mIHRpbWluZworCSAqIGVy cm9yIGhlcmUgaXMgZnJvbSB0aGUgc2ltcGxlIHRydW5jYXRpb24uCisJICoKKwkgKiBOb3RlIHRo YXQgbG9jYWxfY2xvY2soKSBpcyBvbmx5IGRlZmluZWQgd3J0IHRvIHRoZSBjdXJyZW50IENQVTsK KwkgKiB0aGUgY29tcGFyaXNvbnMgYXJlIG5vIGxvbmdlciB2YWxpZCBpZiB3ZSBzd2l0Y2ggQ1BV cy4gSW5zdGVhZCBvZgorCSAqIGJsb2NraW5nIHByZWVtcHRpb24gZm9yIHRoZSBlbnRpcmUgYnVz eXdhaXQsIHdlIGNhbiBkZXRlY3QgdGhlIENQVQorCSAqIHN3aXRjaCBhbmQgdXNlIHRoYXQgYXMg aW5kaWNhdG9yIG9mIHN5c3RlbSBsb2FkIGFuZCBhIHJlYXNvbiB0bworCSAqIHN0b3AgYnVzeXdh aXRpbmcsIHNlZSBidXN5d2FpdF9zdG9wKCkuCisJICovCisJKmNwdSA9IGdldF9jcHUoKTsKKwl0 ID0gbG9jYWxfY2xvY2soKSA+PiAxMDsKKwlwdXRfY3B1KCk7CisKKwlyZXR1cm4gdDsKK30KKwor c3RhdGljIGJvb2wgYnVzeXdhaXRfc3RvcCh1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHVuc2lnbmVk IGNwdSkKK3sKKwl1bnNpZ25lZCB0aGlzX2NwdTsKKworCWlmICh0aW1lX2FmdGVyKGxvY2FsX2Ns b2NrX3VzKCZ0aGlzX2NwdSksIHRpbWVvdXQpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiB0 aGlzX2NwdSAhPSBjcHU7Cit9CisKK2Jvb2wgX19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJCSBpbnQgc3RhdGUsIHVuc2lnbmVkIGxv bmcgdGltZW91dF91cykKK3sKKwl1bnNpZ25lZCBjcHU7CisKKwkvKiBXaGVuIHdhaXRpbmcgZm9y IGhpZ2ggZnJlcXVlbmN5IHJlcXVlc3RzLCBlLmcuIGR1cmluZyBzeW5jaHJvbm91cworCSAqIHJl bmRlcmluZyBzcGxpdCBiZXR3ZWVuIHRoZSBDUFUgYW5kIEdQVSwgdGhlIGZpbml0ZSBhbW91bnQg b2YgdGltZQorCSAqIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgaXJxIGFuZCB3YWl0IHVwb24gaXQg bGltaXRzIHRoZSByZXNwb25zZQorCSAqIHJhdGUuIEJ5IGJ1c3l3YWl0aW5nIG9uIHRoZSByZXF1 ZXN0IGNvbXBsZXRpb24gZm9yIGEgc2hvcnQgd2hpbGUgd2UKKwkgKiBjYW4gc2VydmljZSB0aGUg aGlnaCBmcmVxdWVuY3kgd2FpdHMgYXMgcXVpY2sgYXMgcG9zc2libGUuIEhvd2V2ZXIsCisJICog aWYgaXQgaXMgYSBzbG93IHJlcXVlc3QsIHdlIHdhbnQgdG8gc2xlZXAgYXMgcXVpY2tseSBhcyBw b3NzaWJsZS4KKwkgKiBUaGUgdHJhZGVvZmYgYmV0d2VlbiB3YWl0aW5nIGFuZCBzbGVlcGluZyBp cyByb3VnaGx5IHRoZSB0aW1lIGl0CisJICogdGFrZXMgdG8gc2xlZXAgb24gYSByZXF1ZXN0LCBv biB0aGUgb3JkZXIgb2YgYSBtaWNyb3NlY29uZC4KKwkgKi8KKworCXRpbWVvdXRfdXMgKz0gbG9j YWxfY2xvY2tfdXMoJmNwdSk7CisJZG8geworCQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0 ZWQocmVxKSkKKwkJCXJldHVybiB0cnVlOworCisJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShz dGF0ZSwgY3VycmVudCkpCisJCQlicmVhazsKKworCQlpZiAoYnVzeXdhaXRfc3RvcCh0aW1lb3V0 X3VzLCBjcHUpKQorCQkJYnJlYWs7CisKKwkJY3B1X3JlbGF4X2xvd2xhdGVuY3koKTsKKwl9IHdo aWxlICghbmVlZF9yZXNjaGVkKCkpOworCisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIF9f aTkxNV93YWl0X3JlcXVlc3QgLSB3YWl0IHVudGlsIGV4ZWN1dGlvbiBvZiByZXF1ZXN0IGhhcyBm aW5pc2hlZAorICogQHJlcTogZHVoIQorICogQGludGVycnVwdGlibGU6IGRvIGFuIGludGVycnVw dGlibGUgd2FpdCAobm9ybWFsbHkgeWVzKQorICogQHRpbWVvdXQ6IGluIC0gaG93IGxvbmcgdG8g d2FpdCAoTlVMTCBmb3JldmVyKTsgb3V0IC0gaG93IG11Y2ggdGltZSByZW1haW5pbmcKKyAqCisg KiBOb3RlOiBJdCBpcyBvZiB1dG1vc3QgaW1wb3J0YW5jZSB0aGF0IHRoZSBwYXNzZWQgaW4gc2Vx bm8gYW5kIHJlc2V0X2NvdW50ZXIKKyAqIHZhbHVlcyBoYXZlIGJlZW4gcmVhZCBieSB0aGUgY2Fs bGVyIGluIGFuIHNtcCBzYWZlIG1hbm5lci4gV2hlcmUgcmVhZC1zaWRlCisgKiBsb2NrcyBhcmUg aW52b2x2ZWQsIGl0IGlzIHN1ZmZpY2llbnQgdG8gcmVhZCB0aGUgcmVzZXRfY291bnRlciBiZWZv cmUKKyAqIHVubG9ja2luZyB0aGUgbG9jayB0aGF0IHByb3RlY3RzIHRoZSBzZXFuby4gRm9yIGxv Y2tsZXNzIHRyaWNrcywgdGhlCisgKiByZXNldF9jb3VudGVyIF9tdXN0XyBiZSByZWFkIGJlZm9y ZSwgYW5kIGFuIGFwcHJvcHJpYXRlIHNtcF9ybWIgbXVzdCBiZQorICogaW5zZXJ0ZWQuCisgKgor ICogUmV0dXJucyAwIGlmIHRoZSByZXF1ZXN0IHdhcyBmb3VuZCB3aXRoaW4gdGhlIGFsbG90ZWQg dGltZS4gRWxzZSByZXR1cm5zIHRoZQorICogZXJybm8gd2l0aCByZW1haW5pbmcgdGltZSBmaWxs ZWQgaW4gdGltZW91dCBhcmd1bWVudC4KKyAqLworaW50IF9faTkxNV93YWl0X3JlcXVlc3Qoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCisJCQlib29sIGludGVycnVwdGlibGUsCisJ CQlzNjQgKnRpbWVvdXQsCisJCQlzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzKQoreworCWlu dCBzdGF0ZSA9IGludGVycnVwdGlibGUgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5U RVJSVVBUSUJMRTsKKwlERUZJTkVfV0FJVChyZXNldCk7CisJc3RydWN0IGludGVsX3dhaXQgd2Fp dDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXRfcmVtYWluOworCWludCByZXQgPSAwOworCisJbWln aHRfc2xlZXAoKTsKKworCWlmIChsaXN0X2VtcHR5KCZyZXEtPmxpc3QpKQorCQlyZXR1cm4gMDsK KworCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpKQorCQlyZXR1cm4gMDsKKwor CXRpbWVvdXRfcmVtYWluID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CisJaWYgKHRpbWVvdXQpIHsK KwkJaWYgKFdBUk5fT04oKnRpbWVvdXQgPCAwKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlm ICgqdGltZW91dCA9PSAwKQorCQkJcmV0dXJuIC1FVElNRTsKKworCQkvKiBSZWNvcmQgY3VycmVu dCB0aW1lIGluIGNhc2UgaW50ZXJydXB0ZWQsIG9yIHdlZGdlZCAqLworCQl0aW1lb3V0X3JlbWFp biA9IG5zZWNzX3RvX2ppZmZpZXNfdGltZW91dCgqdGltZW91dCk7CisJCSp0aW1lb3V0ICs9IGt0 aW1lX2dldF9yYXdfbnMoKTsKKwl9CisKKwl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVn aW4ocmVxKTsKKworCS8qIFRoaXMgY2xpZW50IGlzIGFib3V0IHRvIHN0YWxsIHdhaXRpbmcgZm9y IHRoZSBHUFUuIEluIG1hbnkgY2FzZXMKKwkgKiB0aGlzIGlzIHVuZGVzaXJhYmxlIGFuZCBsaW1p dHMgdGhlIHRocm91Z2hwdXQgb2YgdGhlIHN5c3RlbSwgYXMKKwkgKiBtYW55IGNsaWVudHMgY2Fu bm90IGNvbnRpbnVlIHByb2Nlc3NpbmcgdXNlciBpbnB1dC9vdXRwdXQgd2hpbHN0CisJICogYmxv Y2tlZC4gUlBTIGF1dG90dW5pbmcgbWF5IHRha2UgdGVucyBvZiBtaWxsaXNlY29uZHMgdG8gcmVz cG9uZAorCSAqIHRvIHRoZSBHUFUgbG9hZCBhbmQgdGh1cyBpbmN1cnMgYWRkaXRpb25hbCBsYXRl bmN5IGZvciB0aGUgY2xpZW50LgorCSAqIFdlIGNhbiBjaXJjdW12ZW50IHRoYXQgYnkgcHJvbW90 aW5nIHRoZSBHUFUgZnJlcXVlbmN5IHRvIG1heGltdW0KKwkgKiBiZWZvcmUgd2Ugd2FpdC4gVGhp cyBtYWtlcyB0aGUgR1BVIHRocm90dGxlIHVwIG11Y2ggbW9yZSBxdWlja2x5CisJICogKGdvb2Qg Zm9yIGJlbmNobWFya3MgYW5kIHVzZXIgZXhwZXJpZW5jZSwgZS5nLiB3aW5kb3cgYW5pbWF0aW9u cyksCisJICogYnV0IGF0IGEgY29zdCBvZiBzcGVuZGluZyBtb3JlIHBvd2VyIHByb2Nlc3Npbmcg dGhlIHdvcmtsb2FkCisJICogKGJhZCBmb3IgYmF0dGVyeSkuIE5vdCBhbGwgY2xpZW50cyBldmVu IHdhbnQgdGhlaXIgcmVzdWx0cworCSAqIGltbWVkaWF0ZWx5IGFuZCBmb3IgdGhlbSB3ZSBzaG91 bGQganVzdCBsZXQgdGhlIEdQVSBzZWxlY3QgaXRzIG93bgorCSAqIGZyZXF1ZW5jeSB0byBtYXhp bWlzZSBlZmZpY2llbmN5LiBUbyBwcmV2ZW50IGEgc2luZ2xlIGNsaWVudCBmcm9tCisJICogZm9y Y2luZyB0aGUgY2xvY2tzIHRvbyBoaWdoIGZvciB0aGUgd2hvbGUgc3lzdGVtLCB3ZSBvbmx5IGFs bG93CisJICogZWFjaCBjbGllbnQgdG8gd2FpdGJvb3N0IG9uY2UgaW4gYSBidXN5IHBlcmlvZC4K KwkgKi8KKwlpZiAoSU5URUxfSU5GTyhyZXEtPmk5MTUpLT5nZW4gPj0gNikKKwkJZ2VuNl9ycHNf Ym9vc3QocmVxLT5pOTE1LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKKworCS8qIE9wdGlt aXN0aWMgc3BpbiBmb3IgdGhlIG5leHQgfmppZmZpZSBiZWZvcmUgdG91Y2hpbmcgSVJRcyAqLwor CWlmIChpOTE1X3NwaW5fcmVxdWVzdChyZXEsIHN0YXRlLCA1KSkKKwkJZ290byBjb21wbGV0ZTsK KworCWludGVsX3dhaXRfaW5pdCgmd2FpdCwgcmVxLT5zZXFubyk7CisJc2V0X2N1cnJlbnRfc3Rh dGUoc3RhdGUpOworCWlmIChpbnRlbF9lbmdpbmVfYWRkX3dhaXQocmVxLT5lbmdpbmUsICZ3YWl0 KSkKKwkJLyogSW4gb3JkZXIgdG8gY2hlY2sgdGhhdCB3ZSBoYXZlbid0IG1pc3NlZCB0aGUgaW50 ZXJydXB0CisJCSAqIGFzIHdlIGVuYWJsZWQgaXQsIHdlIG5lZWQgdG8ga2ljayBvdXJzZWx2ZXMg dG8gZG8gYQorCQkgKiBjb2hlcmVudCBjaGVjayBvbiB0aGUgc2Vxbm8gYmVmb3JlIHdlIHNsZWVw LgorCQkgKi8KKwkJZ290byB3YWtldXA7CisKKwlhZGRfd2FpdF9xdWV1ZSgmcmVxLT5pOTE1LT5n cHVfZXJyb3Iud2FpdF9xdWV1ZSwgJnJlc2V0KTsKKwlmb3IgKDs7KSB7CisJCWlmIChzaWduYWxf cGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkpIHsKKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsK KwkJCWJyZWFrOworCQl9CisKKwkJLyogRW5zdXJlIHRoYXQgZXZlbiBpZiB0aGUgR1BVIGhhbmdz LCB3ZSBnZXQgd29rZW4gdXAuICovCisJCWk5MTVfcXVldWVfaGFuZ2NoZWNrKHJlcS0+aTkxNSk7 CisKKwkJdGltZW91dF9yZW1haW4gPSBpb19zY2hlZHVsZV90aW1lb3V0KHRpbWVvdXRfcmVtYWlu KTsKKwkJaWYgKHRpbWVvdXRfcmVtYWluID09IDApIHsKKwkJCXJldCA9IC1FVElNRTsKKwkJCWJy ZWFrOworCQl9CisKKwkJaWYgKGludGVsX3dhaXRfY29tcGxldGUoJndhaXQpKQorCQkJYnJlYWs7 CisKK3dha2V1cDoKKwkJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOworCisJCS8qIENhcmVmdWxs eSBjaGVjayBpZiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZSwgZ2l2aW5nIHRpbWUKKwkJICogZm9y IHRoZSBzZXFubyB0byBiZSB2aXNpYmxlIGZvbGxvd2luZyB0aGUgaW50ZXJydXB0LgorCQkgKiBX ZSBhbHNvIGhhdmUgdG8gY2hlY2sgaW4gY2FzZSB3ZSBhcmUga2lja2VkIGJ5IHRoZSBHUFUKKwkJ ICogcmVzZXQgaW4gb3JkZXIgdG8gZHJvcCB0aGUgc3RydWN0X211dGV4LgorCQkgKi8KKwkJaWYg KF9faTkxNV9yZXF1ZXN0X2lycV9jb21wbGV0ZShyZXEpKQorCQkJYnJlYWs7CisKKwkJLyogT25s eSBzcGluIGlmIHdlIGtub3cgdGhlIEdQVSBpcyBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdCAqLwor CQlpZiAoaTkxNV9zcGluX3JlcXVlc3QocmVxLCBzdGF0ZSwgMikpCisJCQlicmVhazsKKwl9CisJ cmVtb3ZlX3dhaXRfcXVldWUoJnJlcS0+aTkxNS0+Z3B1X2Vycm9yLndhaXRfcXVldWUsICZyZXNl dCk7CisKKwlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQocmVxLT5lbmdpbmUsICZ3YWl0KTsKKwlf X3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Citjb21wbGV0ZToKKwl0cmFjZV9pOTE1 X2dlbV9yZXF1ZXN0X3dhaXRfZW5kKHJlcSk7CisKKwlpZiAodGltZW91dCkgeworCQkqdGltZW91 dCAtPSBrdGltZV9nZXRfcmF3X25zKCk7CisJCWlmICgqdGltZW91dCA8IDApCisJCQkqdGltZW91 dCA9IDA7CisKKwkJLyoKKwkJICogQXBwYXJlbnRseSBrdGltZSBpc24ndCBhY2N1cmF0ZSBlbm91 Z2ggYW5kIG9jY2FzaW9uYWxseSBoYXMgYQorCQkgKiBiaXQgb2YgbWlzbWF0Y2ggaW4gdGhlIGpp ZmZpZXM8LT5uc2VjczwtPmt0aW1lIGxvb3AuIFNvIHBhdGNoCisJCSAqIHRoaW5ncyB1cCB0byBt YWtlIHRoZSB0ZXN0IGhhcHB5LiBXZSBhbGxvdyB1cCB0byAxIGppZmZ5LgorCQkgKgorCQkgKiBU aGlzIGlzIGEgcmVncnNzaW9uIGZyb20gdGhlIHRpbWVzcGVjLT5rdGltZSBjb252ZXJzaW9uLgor CQkgKi8KKwkJaWYgKHJldCA9PSAtRVRJTUUgJiYgKnRpbWVvdXQgPCBqaWZmaWVzX3RvX3VzZWNz KDEpKjEwMDApCisJCQkqdGltZW91dCA9IDA7CisJfQorCisJaWYgKHJwcyAmJiByZXEtPnNlcW5v ID09IHJlcS0+ZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubykgeworCQkvKiBUaGUgR1BVIGlz IG5vdyBpZGxlIGFuZCB0aGlzIGNsaWVudCBoYXMgc3RhbGxlZC4KKwkJICogU2luY2Ugbm8gb3Ro ZXIgY2xpZW50IGhhcyBzdWJtaXR0ZWQgYSByZXF1ZXN0IGluIHRoZQorCQkgKiBtZWFudGltZSwg YXNzdW1lIHRoYXQgdGhpcyBjbGllbnQgaXMgdGhlIG9ubHkgb25lCisJCSAqIHN1cHBseWluZyB3 b3JrIHRvIHRoZSBHUFUgYnV0IGlzIHVuYWJsZSB0byBrZWVwIHRoYXQKKwkJICogd29yayBzdXBw bGllZCBiZWNhdXNlIGl0IGlzIHdhaXRpbmcuIFNpbmNlIHRoZSBHUFUgaXMKKwkJICogdGhlbiBu ZXZlciBrZXB0IGZ1bGx5IGJ1c3ksIFJQUyBhdXRvY2xvY2tpbmcgd2lsbAorCQkgKiBrZWVwIHRo ZSBjbG9ja3MgcmVsYXRpdmVseSBsb3csIGNhdXNpbmcgZnVydGhlciBkZWxheXMuCisJCSAqIENv bXBlbnNhdGUgYnkgZ2l2aW5nIHRoZSBzeW5jaHJvbm91cyBjbGllbnQgY3JlZGl0IGZvcgorCQkg KiBhIHdhaXRib29zdCBuZXh0IHRpbWUuCisJCSAqLworCQlzcGluX2xvY2soJnJlcS0+aTkxNS0+ cnBzLmNsaWVudF9sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmcnBzLT5saW5rKTsKKwkJc3Bpbl91 bmxvY2soJnJlcS0+aTkxNS0+cnBzLmNsaWVudF9sb2NrKTsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCisvKioKKyAqIFdhaXRzIGZvciBhIHJlcXVlc3QgdG8gYmUgc2lnbmFsZWQsIGFuZCBjbGVh bnMgdXAgdGhlCisgKiByZXF1ZXN0IGFuZCBvYmplY3QgbGlzdHMgYXBwcm9wcmlhdGVseSBmb3Ig dGhhdCBldmVudC4KKyAqLworaW50IGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisKKwlCVUdfT04ocmVxID09IE5VTEwpOwor CUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZyZXEtPmk5MTUtPmRldi0+c3RydWN0X211dGV4KSk7 CisKKwlyZXQgPSBfX2k5MTVfd2FpdF9yZXF1ZXN0KHJlcSwgcmVxLT5pOTE1LT5tbS5pbnRlcnJ1 cHRpYmxlLAorCQkJCSAgTlVMTCwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CS8qIElmIHRoZSBHUFUgaHVuZywgd2Ugd2FudCB0byBrZWVwIHRoZSByZXF1ZXN0cyB0byBmaW5k IHRoZSBndWlsdHkuICovCisJaWYgKHJlcS0+cmVzZXRfY291bnRlciA9PSBpOTE1X3Jlc2V0X2Nv dW50ZXIoJnJlcS0+aTkxNS0+Z3B1X2Vycm9yKSkKKwkJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmVf dXB0byhyZXEpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTkxNV9nZW1fcmVxdWVzdF9mcmVl KHN0cnVjdCBrcmVmICpyZXFfcmVmKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxID0KKwkgICAgICAgCWNvbnRhaW5lcl9vZihyZXFfcmVmLCB0eXBlb2YoKnJlcSksIHJlZik7 CisJa21lbV9jYWNoZV9mcmVlKHJlcS0+aTkxNS0+cmVxdWVzdHMsIHJlcSk7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi4xNjZlMDczM2QyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmgKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAwOC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIEk5MTVfR0VN X1JFUVVFU1RfSAorI2RlZmluZSBJOTE1X0dFTV9SRVFVRVNUX0gKKworLyoqCisgKiBSZXF1ZXN0 IHF1ZXVlIHN0cnVjdHVyZS4KKyAqCisgKiBUaGUgcmVxdWVzdCBxdWV1ZSBhbGxvd3MgdXMgdG8g bm90ZSBzZXF1ZW5jZSBudW1iZXJzIHRoYXQgaGF2ZSBiZWVuIGVtaXR0ZWQKKyAqIGFuZCBtYXkg YmUgYXNzb2NpYXRlZCB3aXRoIGFjdGl2ZSBidWZmZXJzIHRvIGJlIHJldGlyZWQuCisgKgorICog Qnkga2VlcGluZyB0aGlzIGxpc3QsIHdlIGNhbiBhdm9pZCBoYXZpbmcgdG8gZG8gcXVlc3Rpb25h YmxlIHNlcXVlbmNlCisgKiBudW1iZXIgY29tcGFyaXNvbnMgb24gYnVmZmVyIGxhc3RfcmVhZHx3 cml0ZV9zZXFuby4gSXQgYWxzbyBhbGxvd3MgYW4KKyAqIGVtaXNzaW9uIHRpbWUgdG8gYmUgYXNz b2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IGZvciB0cmFja2luZyBob3cgZmFyIGFoZWFkCisgKiBv ZiB0aGUgR1BVIHRoZSBzdWJtaXNzaW9uIGlzLgorICoKKyAqIFRoZSByZXF1ZXN0cyBhcmUgcmVm ZXJlbmNlIGNvdW50ZWQsIHNvIHVwb24gY3JlYXRpb24gdGhleSBzaG91bGQgaGF2ZSBhbgorICog aW5pdGlhbCByZWZlcmVuY2UgdGFrZW4gdXNpbmcga3JlZl9pbml0CisgKi8KK3N0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCB7CisJc3RydWN0IGtyZWYgcmVmOworCisJLyoqIE9uIFdoaWNoIHJp bmcgdGhpcyByZXF1ZXN0IHdhcyBnZW5lcmF0ZWQgKi8KKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNTsKKworCS8qKgorCSAqIENvbnRleHQgYW5kIHJpbmcgYnVmZmVyIHJlbGF0ZWQgdG8g dGhpcyByZXF1ZXN0CisJICogQ29udGV4dHMgYXJlIHJlZmNvdW50ZWQsIHNvIHdoZW4gdGhpcyBy ZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aCBhCisJICogY29udGV4dCwgd2UgbXVzdCBpbmNyZW1l bnQgdGhlIGNvbnRleHQncyByZWZjb3VudCwgdG8gZ3VhcmFudGVlIHRoYXQKKwkgKiBpdCBwZXJz aXN0cyB3aGlsZSBhbnkgcmVxdWVzdCBpcyBsaW5rZWQgdG8gaXQuIFJlcXVlc3RzIHRoZW1zZWx2 ZXMKKwkgKiBhcmUgYWxzbyByZWZjb3VudGVkLCBzbyB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUg ZnJlZWQgd2hlbiB0aGUgbGFzdAorCSAqIHJlZmVyZW5jZSB0byBpdCBpcyBkaXNtaXNzZWQsIGFu ZCB0aGUgY29kZSBpbgorCSAqIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZSgpIHdpbGwgdGhlbiBkZWNy ZW1lbnQgdGhlIHJlZmNvdW50IG9uIHRoZQorCSAqIGNvbnRleHQuCisJICovCisJc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJ c3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWY7CisJc3RydWN0IGludGVsX3NpZ25hbF9u b2RlIHNpZ25hbGluZzsKKworCXVuc2lnbmVkIHJlc2V0X2NvdW50ZXI7CisKKwkvKiogR0VNIHNl cXVlbmNlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIHByZXZpb3VzIHJlcXVlc3QsCisJICog d2hlbiB0aGUgSFdTIGJyZWFkY3J1bWIgaXMgZXF1YWwgdG8gdGhpcyB0aGUgR1BVIGlzIHByb2Nl c3NpbmcKKwkgKiB0aGlzIHJlcXVlc3QuCisJICovCisJdTMyIHByZXZpb3VzX3NlcW5vOworCisJ LyoqIEdFTSBzZXF1ZW5jZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCwKKwkg KiB3aGVuIHRoZSBIV1MgYnJlYWRjcnVtYiBpcyBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhpcyB0 aGUgR1BVCisJICogaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0LgorCSAqLwor CXUzMiBzZXFubzsKKworCS8qKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgc3Rh cnQgb2YgdGhlIHJlcXVlc3QgKi8KKwl1MzIgaGVhZDsKKworCS8qKgorCSAqIFBvc2l0aW9uIGlu IHRoZSByaW5nYnVmZmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgcG9zdGZpeC4KKwkgKiBUaGlzIGlz IHJlcXVpcmVkIHRvIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBhdmFpbGFibGUgcmluZ2J1ZmZlcgor CSAqIHNwYWNlIHdpdGhvdXQgb3ZlcndyaXRpbmcgdGhlIHBvc3RmaXguCisJICovCisJdTMyIHBv c3RmaXg7CisKKwkvKiogUG9zaXRpb24gaW4gdGhlIHJpbmdidWZmZXIgb2YgdGhlIGVuZCBvZiB0 aGUgd2hvbGUgcmVxdWVzdCAqLworCXUzMiB0YWlsOworCisJLyoqIFByZWFsbG9jYXRlIHNwYWNl IGluIHRoZSByaW5nYnVmZmVyIGZvciB0aGUgZW1pdHRpbmcgdGhlIHJlcXVlc3QgKi8KKwl1MzIg cmVzZXJ2ZWRfc3BhY2U7CisKKworCS8qKgorCSAqIENvbnRleHQgcmVsYXRlZCB0byB0aGUgcHJl dmlvdXMgcmVxdWVzdC4KKwkgKiBBcyB0aGUgY29udGV4dHMgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBo YXJkd2FyZSB1bnRpbCB0aGUgc3dpdGNoIGlzCisJICogY29tcGxldGVkIHRvIGEgbmV3IGNvbnRl eHQsIHRoZSBoYXJkd2FyZSBtYXkgc3RpbGwgYmUgd3JpdGluZworCSAqIHRvIHRoZSBjb250ZXh0 IG9iamVjdCBhZnRlciB0aGUgYnJlYWRjcnVtYiBpcyB2aXNpYmxlLiBXZSBtdXN0CisJICogbm90 IHVucGluL3VuYmluZC9wcnVuZSB0aGF0IG9iamVjdCB3aGlsc3Qgc3RpbGwgYWN0aXZlIGFuZCBz bworCSAqIHdlIGtlZXAgdGhlIHByZXZpb3VzIGNvbnRleHQgcGlubmVkIHVudGlsIHRoZSBmb2xs b3dpbmcgKHRoaXMpCisJICogcmVxdWVzdCBpcyByZXRpcmVkLgorCSAqLworCXN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpwcmV2aW91c19jb250ZXh0OworCisKKwkvKiogQmF0Y2ggYnVmZmVyIHJl bGF0ZWQgdG8gdGhpcyByZXF1ZXN0IGlmIGFueSAodXNlZCBmb3IKKwkgKiBlcnJvciBzdGF0ZSBk dW1wIG9ubHkpICovCisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iajsKKwor CS8qKiBUaW1lIGF0IHdoaWNoIHRoaXMgcmVxdWVzdCB3YXMgZW1pdHRlZCwgaW4gamlmZmllcy4g Ki8KKwl1bnNpZ25lZCBsb25nIGVtaXR0ZWRfamlmZmllczsKKworCS8qKiBnbG9iYWwgbGlzdCBl bnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJc3Ry dWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2OworCS8qKiBmaWxlX3ByaXYgbGlz dCBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBjbGllbnRfbGlz dDsKKworCS8qKiBwcm9jZXNzIGlkZW50aWZpZXIgc3VibWl0dGluZyB0aGlzIHJlcXVlc3QgKi8K KwlzdHJ1Y3QgcGlkICpwaWQ7CisKKwkvKioKKwkgKiBUaGUgRUxTUCBvbmx5IGFjY2VwdHMgdHdv IGVsZW1lbnRzIGF0IGEgdGltZSwgc28gd2UgcXVldWUKKwkgKiBjb250ZXh0L3RhaWwgcGFpcnMg b24gYSBnaXZlbiBxdWV1ZSAocmluZy0+ZXhlY2xpc3RfcXVldWUpIHVudGlsIHRoZQorCSAqIGhh cmR3YXJlIGlzIGF2YWlsYWJsZS4gVGhlIHF1ZXVlIHNlcnZlcyBhIGRvdWJsZSBwdXJwb3NlOiB3 ZSBhbHNvIHVzZQorCSAqIGl0IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHVwIHRvIDIgY29udGV4dHMg Y3VycmVudGx5IGluIHRoZSBoYXJkd2FyZQorCSAqICh1c3VhbGx5IG9uZSBpbiBleGVjdXRpb24g YW5kIHRoZSBvdGhlciBxdWV1ZWQgdXAgYnkgdGhlIEdQVSk6IFdlCisJICogb25seSByZW1vdmUg ZWxlbWVudHMgZnJvbSB0aGUgaGVhZCBvZiB0aGUgcXVldWUgd2hlbiB0aGUgaGFyZHdhcmUKKwkg KiBpbmZvcm1zIHVzIHRoYXQgYW4gZWxlbWVudCBoYXMgYmVlbiBjb21wbGV0ZWQuCisJICoKKwkg KiBBbGwgYWNjZXNzZXMgdG8gdGhlIHF1ZXVlIGFyZSBtZWRpYXRlZCBieSBhIHNwaW5sb2NrCisJ ICogKHJpbmctPmV4ZWNsaXN0X2xvY2spLgorCSAqLworCisJLyoqIEV4ZWNsaXN0IGxpbmsgaW4g dGhlIHN1Ym1pc3Npb24gcXVldWUuKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGV4ZWNsaXN0X2xpbms7 CisKKwkvKiogRXhlY2xpc3RzIG5vLiBvZiB0aW1lcyB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gc2Vu dCB0byB0aGUgRUxTUCAqLworCWludCBlbHNwX3N1Ym1pdHRlZDsKKworCS8qKiBFeGVjbGlzdHMg Y29udGV4dCBoYXJkd2FyZSBpZC4gKi8KKwl1bnNpZ25lZCBjdHhfaHdfaWQ7Cit9OworCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICoKK19fcmVxdWVzdF90b19pOTE1KGNv bnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXR1cm4gcmVx dWVzdC0+aTkxNTsKK30KKworc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICogX19tdXN0X2No ZWNrCitpOTE1X2dlbV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKKwkJICAgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpOwordm9pZCBpOTE1X2dl bV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGtyZWYgKnJlcV9yZWYpOworaW50IGk5MTVfZ2VtX3JlcXVl c3RfYWRkX3RvX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJCQkg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwordm9pZCBpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91 cHRvKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKKworc3RhdGljIGlubGluZSB1 aW50MzJfdAoraTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8oc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIHJlcSA/IHJlcS0+c2Vxbm8gOiAwOworfQorCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgoraTkxNV9nZW1fcmVxdWVzdF9nZXRf ZW5naW5lKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQoreworCXJldHVybiByZXEg PyByZXEtPmVuZ2luZSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICoKK2k5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEpCisJCWtyZWZfZ2V0KCZyZXEtPnJlZik7 CisJcmV0dXJuIHJlcTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpOTE1X2dlbV9yZXF1ZXN0 X3VucmVmZXJlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQoreworCWtyZWZf cHV0KCZyZXEtPnJlZiwgaTkxNV9nZW1fcmVxdWVzdF9mcmVlKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqKnBkc3QsCisJCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqc3JjKQorewor CWlmIChzcmMpCisJCWk5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKHNyYyk7CisKKwlpZiAoKnBk c3QpCisJCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UoKnBkc3QpOworCisJKnBkc3QgPSBz cmM7Cit9CisKK3ZvaWQgX19pOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxLAorCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iaiwKKwkJ CWJvb2wgZmx1c2hfY2FjaGVzKTsKKyNkZWZpbmUgaTkxNV9hZGRfcmVxdWVzdChyZXEpIFwKKwlf X2k5MTVfYWRkX3JlcXVlc3QocmVxLCBOVUxMLCB0cnVlKQorI2RlZmluZSBpOTE1X2FkZF9yZXF1 ZXN0X25vX2ZsdXNoKHJlcSkgXAorCV9faTkxNV9hZGRfcmVxdWVzdChyZXEsIE5VTEwsIGZhbHNl KQorCitzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudDsKKworaW50IF9faTkxNV93YWl0X3JlcXVlc3Qo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCisJCQlib29sIGludGVycnVwdGlibGUs CisJCQlzNjQgKnRpbWVvdXQsCisJCQlzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzKTsKK2lu dCBfX211c3RfY2hlY2sgaTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEpOworCitzdGF0aWMgaW5saW5lIHUzMiBpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CisKKy8qKgorICogUmV0dXJucyB0cnVlIGlm IHNlcTEgaXMgbGF0ZXIgdGhhbiBzZXEyLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2k5MTVf c2Vxbm9fcGFzc2VkKHVpbnQzMl90IHNlcTEsIHVpbnQzMl90IHNlcTIpCit7CisJcmV0dXJuIChp bnQzMl90KShzZXExIC0gc2VxMikgPj0gMDsKK30KK3N0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X2dl bV9yZXF1ZXN0X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEp Cit7CisJcmV0dXJuIGk5MTVfc2Vxbm9fcGFzc2VkKGludGVsX2VuZ2luZV9nZXRfc2Vxbm8ocmVx LT5lbmdpbmUpLAorCQkJCSByZXEtPnByZXZpb3VzX3NlcW5vKTsKK30KKworc3RhdGljIGlubGlu ZSBib29sIGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBpOTE1X3NlcW5vX3Bhc3NlZChpbnRlbF9lbmdp bmVfZ2V0X3NlcW5vKHJlcS0+ZW5naW5lKSwKKwkJCQkgcmVxLT5zZXFubyk7Cit9CisKK2Jvb2wg X19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cXVlc3QsCisJCQkgaW50IHN0YXRlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfdXMpOworc3RhdGlj IGlubGluZSBib29sIGk5MTVfc3Bpbl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxdWVzdCwKKwkJCQkgICAgIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1l b3V0X3VzKQoreworCXJldHVybiAoaTkxNV9nZW1fcmVxdWVzdF9zdGFydGVkKHJlcXVlc3QpICYm CisJCV9faTkxNV9zcGluX3JlcXVlc3QocmVxdWVzdCwgc3RhdGUsIHRpbWVvdXRfdXMpKTsKK30K KworI2VuZGlmIC8qIEk5MTVfR0VNX1JFUVVFU1RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z3B1X2Vycm9yLmMKaW5kZXggYTA2NmRjZmNkZDM4Li4zYmE1MzAyY2UxOWYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwpAQCAtMTQwMCw2ICsxNDAwLDkgQEAgdm9pZCBpOTE1 X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAog CXN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSAqZXJyb3I7CiAJdW5zaWduZWQgbG9uZyBmbGFn czsKIAorCWlmIChSRUFEX09OQ0UoZGV2X3ByaXYtPmdwdV9lcnJvci5maXJzdF9lcnJvcikpCisJ CXJldHVybjsKKwogCS8qIEFjY291bnQgZm9yIHBpcGUgc3BlY2lmaWMgZGF0YSBsaWtlIFBJUEUq U1RBVCAqLwogCWVycm9yID0ga3phbGxvYyhzaXplb2YoKmVycm9yKSwgR0ZQX0FUT01JQyk7CiAJ aWYgKCFlcnJvcikgewotLSAKMi44LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=