From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 1/3] drm/i915: Move GEM request routines to i915_gem_request.c Date: Sat, 12 Dec 2015 15:34:31 +0000 Message-ID: <1449934473-24902-1-git-send-email-chris@chris-wilson.co.uk> References: <1449933622-7365-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 fireflyinternet.com (mail.fireflyinternet.com [87.106.93.118]) by gabe.freedesktop.org (Postfix) with ESMTP id 1E9B96E297 for ; Sat, 12 Dec 2015 07:34:39 -0800 (PST) In-Reply-To: <1449933622-7365-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 TWlncmF0ZSB0aGUgcmVxdWVzdCBvcGVyYXRpb25zIG91dCBvZiB0aGUgbWFpbiBib2R5IG9mIGk5 MTVfZ2VtLmMgYW5kCmludG8gdGhlaXIgb3duIEMgZmlsZSBmb3IgZWFzaWVyIGV4cGFuc2lvbi4K ClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAxODYgKy0tLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCA1MDIgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVz dC5jIHwgNTEzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmggfCAyMDkgKysrKysrKysrKysrKwogNSBmaWxlcyBj aGFuZ2VkLCA3MzIgaW5zZXJ0aW9ucygrKSwgNjc5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuaAoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKaW5kZXggZDNiOWQzNjE4NzE5Li4zZGY4OGJlNDc1MmUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC0yOSw2ICsyOSw3IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBc CiAJICBpOTE1X2dlbV9ndHQubyBcCiAJICBpOTE1X2dlbS5vIFwKIAkgIGk5MTVfZ2VtX3JlbmRl cl9zdGF0ZS5vIFwKKwkgIGk5MTVfZ2VtX3JlcXVlc3QubyBcCiAJICBpOTE1X2dlbV9zaHJpbmtl ci5vIFwKIAkgIGk5MTVfZ2VtX3N0b2xlbi5vIFwKIAkgIGk5MTVfZ2VtX3RpbGluZy5vIFwKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGM1MTFiM2NiZjliMi4uOWZmYjRiN2VlYmQ5IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJpbnRlbF9s cmMuaCIKICNpbmNsdWRlICJpOTE1X2dlbV9ndHQuaCIKICNpbmNsdWRlICJpOTE1X2dlbV9yZW5k ZXJfc3RhdGUuaCIKKyNpbmNsdWRlICJpOTE1X2dlbV9yZXF1ZXN0LmgiCiAjaW5jbHVkZSA8bGlu dXgvaW8tbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4 L2kyYy1hbGdvLWJpdC5oPgpAQCAtMjE1NCwxNzAgKzIxNTUsNiBAQCB2b2lkIGk5MTVfZ2VtX3Ry YWNrX2ZiKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvbGQsCiAJCSAgICAgICBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqbmV3LAogCQkgICAgICAgdW5zaWduZWQgZnJvbnRidWZmZXJf Yml0cyk7CiAKLS8qKgotICogUmVxdWVzdCBxdWV1ZSBzdHJ1Y3R1cmUuCi0gKgotICogVGhlIHJl cXVlc3QgcXVldWUgYWxsb3dzIHVzIHRvIG5vdGUgc2VxdWVuY2UgbnVtYmVycyB0aGF0IGhhdmUg YmVlbiBlbWl0dGVkCi0gKiBhbmQgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBhY3RpdmUgYnVmZmVy cyB0byBiZSByZXRpcmVkLgotICoKLSAqIEJ5IGtlZXBpbmcgdGhpcyBsaXN0LCB3ZSBjYW4gYXZv aWQgaGF2aW5nIHRvIGRvIHF1ZXN0aW9uYWJsZSBzZXF1ZW5jZQotICogbnVtYmVyIGNvbXBhcmlz b25zIG9uIGJ1ZmZlciBsYXN0X3JlYWR8d3JpdGVfc2Vxbm8uIEl0IGFsc28gYWxsb3dzIGFuCi0g KiBlbWlzc2lvbiB0aW1lIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCBmb3IgdHJh Y2tpbmcgaG93IGZhciBhaGVhZAotICogb2YgdGhlIEdQVSB0aGUgc3VibWlzc2lvbiBpcy4KLSAq Ci0gKiBUaGUgcmVxdWVzdHMgYXJlIHJlZmVyZW5jZSBjb3VudGVkLCBzbyB1cG9uIGNyZWF0aW9u IHRoZXkgc2hvdWxkIGhhdmUgYW4KLSAqIGluaXRpYWwgcmVmZXJlbmNlIHRha2VuIHVzaW5nIGty ZWZfaW5pdAotICovCi1zdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgewotCXN0cnVjdCBrcmVm IHJlZjsKLQotCS8qKiBPbiBXaGljaCByaW5nIHRoaXMgcmVxdWVzdCB3YXMgZ2VuZXJhdGVkICov Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9j cyAqcmluZzsKLQl1bnNpZ25lZCByZXNldF9jb3VudGVyOwotCi0JIC8qKiBHRU0gc2VxdWVuY2Ug bnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJldmlvdXMgcmVxdWVzdCwKLQkgICogd2hlbiB0 aGUgSFdTIGJyZWFkY3J1bWIgaXMgZXF1YWwgdG8gdGhpcyB0aGUgR1BVIGlzIHByb2Nlc3NpbmcK LQkgICogdGhpcyByZXF1ZXN0LgotCSAgKi8KLQl1MzIgcHJldmlvdXNfc2Vxbm87Ci0KLQkgLyoq IEdFTSBzZXF1ZW5jZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCwKLQkgICog d2hlbiB0aGUgSFdTIGJyZWFkY3J1bWIgaXMgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoaXMgdGhl IEdQVQotCSAgKiBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QuCi0JICAqLwot CXUzMiBzZXFubzsKLQotCS8qKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgc3Rh cnQgb2YgdGhlIHJlcXVlc3QgKi8KLQl1MzIgaGVhZDsKLQotCS8qKgotCSAqIFBvc2l0aW9uIGlu IHRoZSByaW5nYnVmZmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgcG9zdGZpeC4KLQkgKiBUaGlzIGlz IHJlcXVpcmVkIHRvIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBhdmFpbGFibGUgcmluZ2J1ZmZlcgot CSAqIHNwYWNlIHdpdGhvdXQgb3ZlcndyaXRpbmcgdGhlIHBvc3RmaXguCi0JICovCi0JIHUzMiBw b3N0Zml4OwotCi0JLyoqIFBvc2l0aW9uIGluIHRoZSByaW5nYnVmZmVyIG9mIHRoZSBlbmQgb2Yg dGhlIHdob2xlIHJlcXVlc3QgKi8KLQl1MzIgdGFpbDsKLQotCS8qKgotCSAqIENvbnRleHQgYW5k IHJpbmcgYnVmZmVyIHJlbGF0ZWQgdG8gdGhpcyByZXF1ZXN0Ci0JICogQ29udGV4dHMgYXJlIHJl ZmNvdW50ZWQsIHNvIHdoZW4gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aCBhCi0JICog Y29udGV4dCwgd2UgbXVzdCBpbmNyZW1lbnQgdGhlIGNvbnRleHQncyByZWZjb3VudCwgdG8gZ3Vh cmFudGVlIHRoYXQKLQkgKiBpdCBwZXJzaXN0cyB3aGlsZSBhbnkgcmVxdWVzdCBpcyBsaW5rZWQg dG8gaXQuIFJlcXVlc3RzIHRoZW1zZWx2ZXMKLQkgKiBhcmUgYWxzbyByZWZjb3VudGVkLCBzbyB0 aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgZnJlZWQgd2hlbiB0aGUgbGFzdAotCSAqIHJlZmVyZW5j ZSB0byBpdCBpcyBkaXNtaXNzZWQsIGFuZCB0aGUgY29kZSBpbgotCSAqIGk5MTVfZ2VtX3JlcXVl c3RfZnJlZSgpIHdpbGwgdGhlbiBkZWNyZW1lbnQgdGhlIHJlZmNvdW50IG9uIHRoZQotCSAqIGNv bnRleHQuCi0JICovCi0Jc3RydWN0IGludGVsX2NvbnRleHQgKmN0eDsKLQlzdHJ1Y3QgaW50ZWxf cmluZ2J1ZmZlciAqcmluZ2J1ZjsKLQotCS8qKiBCYXRjaCBidWZmZXIgcmVsYXRlZCB0byB0aGlz IHJlcXVlc3QgaWYgYW55ICh1c2VkIGZvcgotCSAgICBlcnJvciBzdGF0ZSBkdW1wIG9ubHkpICov Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iajsKLQotCS8qKiBUaW1lIGF0 IHdoaWNoIHRoaXMgcmVxdWVzdCB3YXMgZW1pdHRlZCwgaW4gamlmZmllcy4gKi8KLQl1bnNpZ25l ZCBsb25nIGVtaXR0ZWRfamlmZmllczsKLQotCS8qKiBnbG9iYWwgbGlzdCBlbnRyeSBmb3IgdGhp cyByZXF1ZXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCi0Jc3RydWN0IGRybV9pOTE1 X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2OwotCS8qKiBmaWxlX3ByaXYgbGlzdCBlbnRyeSBmb3Ig dGhpcyByZXF1ZXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBjbGllbnRfbGlzdDsKLQotCS8qKiBw cm9jZXNzIGlkZW50aWZpZXIgc3VibWl0dGluZyB0aGlzIHJlcXVlc3QgKi8KLQlzdHJ1Y3QgcGlk ICpwaWQ7Ci0KLQkvKioKLQkgKiBUaGUgRUxTUCBvbmx5IGFjY2VwdHMgdHdvIGVsZW1lbnRzIGF0 IGEgdGltZSwgc28gd2UgcXVldWUKLQkgKiBjb250ZXh0L3RhaWwgcGFpcnMgb24gYSBnaXZlbiBx dWV1ZSAocmluZy0+ZXhlY2xpc3RfcXVldWUpIHVudGlsIHRoZQotCSAqIGhhcmR3YXJlIGlzIGF2 YWlsYWJsZS4gVGhlIHF1ZXVlIHNlcnZlcyBhIGRvdWJsZSBwdXJwb3NlOiB3ZSBhbHNvIHVzZQot CSAqIGl0IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHVwIHRvIDIgY29udGV4dHMgY3VycmVudGx5IGlu IHRoZSBoYXJkd2FyZQotCSAqICh1c3VhbGx5IG9uZSBpbiBleGVjdXRpb24gYW5kIHRoZSBvdGhl ciBxdWV1ZWQgdXAgYnkgdGhlIEdQVSk6IFdlCi0JICogb25seSByZW1vdmUgZWxlbWVudHMgZnJv bSB0aGUgaGVhZCBvZiB0aGUgcXVldWUgd2hlbiB0aGUgaGFyZHdhcmUKLQkgKiBpbmZvcm1zIHVz IHRoYXQgYW4gZWxlbWVudCBoYXMgYmVlbiBjb21wbGV0ZWQuCi0JICoKLQkgKiBBbGwgYWNjZXNz ZXMgdG8gdGhlIHF1ZXVlIGFyZSBtZWRpYXRlZCBieSBhIHNwaW5sb2NrCi0JICogKHJpbmctPmV4 ZWNsaXN0X2xvY2spLgotCSAqLwotCi0JLyoqIEV4ZWNsaXN0IGxpbmsgaW4gdGhlIHN1Ym1pc3Np b24gcXVldWUuKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGV4ZWNsaXN0X2xpbms7Ci0KLQkvKiogRXhl Y2xpc3RzIG5vLiBvZiB0aW1lcyB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gc2VudCB0byB0aGUgRUxT UCAqLwotCWludCBlbHNwX3N1Ym1pdHRlZDsKLQotfTsKLQotaW50IGk5MTVfZ2VtX3JlcXVlc3Rf YWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKLQkJCSAgIHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjdHgsCi0JCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipyZXFfb3V0 KTsKLXZvaWQgaTkxNV9nZW1fcmVxdWVzdF9jYW5jZWwoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEpOwotdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGtyZWYgKnJlcV9y ZWYpOwotaW50IGk5MTVfZ2VtX3JlcXVlc3RfYWRkX3RvX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSwKLQkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwotCi1zdGF0 aWMgaW5saW5lIHVpbnQzMl90Ci1pOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKLXsKLQlyZXR1cm4gcmVxID8gcmVxLT5zZXFubyA6IDA7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCi1pOTE1X2dlbV9y ZXF1ZXN0X2dldF9yaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQotewotCXJl dHVybiByZXEgPyByZXEtPnJpbmcgOiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqCi1pOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKLXsKLQlpZiAocmVxKQotCQlrcmVmX2dldCgmcmVx LT5yZWYpOwotCXJldHVybiByZXE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaTkxNV9nZW1f cmVxdWVzdF91bnJlZmVyZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKLXsK LQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnJlcS0+cmluZy0+ZGV2LT5zdHJ1Y3RfbXV0ZXgp KTsKLQlrcmVmX3B1dCgmcmVxLT5yZWYsIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZSk7Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgdm9pZAotaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZV9fdW5sb2NrZWQo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2Ug KmRldjsKLQotCWlmICghcmVxKQotCQlyZXR1cm47Ci0KLQlkZXYgPSByZXEtPnJpbmctPmRldjsK LQlpZiAoa3JlZl9wdXRfbXV0ZXgoJnJlcS0+cmVmLCBpOTE1X2dlbV9yZXF1ZXN0X2ZyZWUsICZk ZXYtPnN0cnVjdF9tdXRleCkpCi0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwot fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICoqcGRzdCwKLQkJCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpzcmMpCi17Ci0JaWYgKHNyYykKLQkJaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uo c3JjKTsKLQotCWlmICgqcGRzdCkKLQkJaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZSgqcGRz dCk7Ci0KLQkqcGRzdCA9IHNyYzsKLX0KLQotLyoKLSAqIFhYWDogaTkxNV9nZW1fcmVxdWVzdF9j b21wbGV0ZWQgc2hvdWxkIGJlIGhlcmUgYnV0IGN1cnJlbnRseSBuZWVkcyB0aGUKLSAqIGRlZmlu aXRpb24gb2YgaTkxNV9zZXFub19wYXNzZWQoKSB3aGljaCBpcyBiZWxvdy4gSXQgd2lsbCBiZSBt b3ZlZCBpbgotICogYSBsYXRlciBwYXRjaCB3aGVuIHRoZSBjYWxsIHRvIGk5MTVfc2Vxbm9fcGFz c2VkKCkgaXMgb2Jzb2xldGVkLi4uCi0gKi8KLQogLyoKICAqIEEgY29tbWFuZCB0aGF0IHJlcXVp cmVzIHNwZWNpYWwgaGFuZGxpbmcgYnkgdGhlIGNvbW1hbmQgcGFyc2VyLgogICovCkBAIC0yOTY2 LDI3ICsyODAzLDYgQEAgaW50IGk5MTVfZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2LAogCQkJIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7CiBpbnQg aTkxNV9nZW1fbW1hcF9ndHQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCiAJCSAgICAgIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3QgKm9mZnNldCk7 Ci0vKioKLSAqIFJldHVybnMgdHJ1ZSBpZiBzZXExIGlzIGxhdGVyIHRoYW4gc2VxMi4KLSAqLwot c3RhdGljIGlubGluZSBib29sCi1pOTE1X3NlcW5vX3Bhc3NlZCh1aW50MzJfdCBzZXExLCB1aW50 MzJfdCBzZXEyKQotewotCXJldHVybiAoaW50MzJfdCkoc2VxMSAtIHNlcTIpID49IDA7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X2dlbV9yZXF1ZXN0X3N0YXJ0ZWQoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEpCi17Ci0JcmV0dXJuIGk5MTVfc2Vxbm9fcGFzc2VkKGludGVs X3JpbmdfZ2V0X3NlcW5vKHJlcS0+cmluZyksCi0JCQkJIHJlcS0+cHJldmlvdXNfc2Vxbm8pOwot fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQoc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCi17Ci0JcmV0dXJuIGk5MTVfc2Vxbm9fcGFzc2Vk KGludGVsX3JpbmdfZ2V0X3NlcW5vKHJlcS0+cmluZyksCi0JCQkJIHJlcS0+c2Vxbm8pOwotfQot CiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2dldF9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1MzIgKnNlcW5vKTsKIGludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fc2V0X3NlcW5vKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j CmluZGV4IDJlODc2MzllY2QxZS4uYTIzZGVhMjdmMjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKQEAgLTExMDUsMzg5ICsxMTA1LDYgQEAgcHV0X3JwbToKIAlyZXR1cm4gcmV0OwogfQogCi1z dGF0aWMgaW50Ci1pOTE1X2dlbV9jaGVja193ZWRnZSh1bnNpZ25lZCByZXNldF9jb3VudGVyLCBi b29sIGludGVycnVwdGlibGUpCi17Ci0JaWYgKF9faTkxNV90ZXJtaW5hbGx5X3dlZGdlZChyZXNl dF9jb3VudGVyKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoX19pOTE1X3Jlc2V0X2luX3Byb2dy ZXNzKHJlc2V0X2NvdW50ZXIpKSB7Ci0JCS8qIE5vbi1pbnRlcnJ1cHRpYmxlIGNhbGxlcnMgY2Fu J3QgaGFuZGxlIC1FQUdBSU4sIGhlbmNlIHJldHVybgotCQkgKiAtRUlPIHVuY29uZGl0aW9uYWxs eSBmb3IgdGhlc2UuICovCi0JCWlmICghaW50ZXJydXB0aWJsZSkKLQkJCXJldHVybiAtRUlPOwot Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWdu ZWQgbG9uZyBsb2NhbF9jbG9ja191cyh1bnNpZ25lZCAqY3B1KQotewotCXVuc2lnbmVkIGxvbmcg dDsKLQotCS8qIENoZWFwbHkgYW5kIGFwcHJveGltYXRlbHkgY29udmVydCBmcm9tIG5hbm9zZWNv bmRzIHRvIG1pY3Jvc2Vjb25kcy4KLQkgKiBUaGUgcmVzdWx0IGFuZCBzdWJzZXF1ZW50IGNhbGN1 bGF0aW9ucyBhcmUgYWxzbyBkZWZpbmVkIGluIHRoZSBzYW1lCi0JICogYXBwcm94aW1hdGUgbWlj cm9zZWNvbmRzIHVuaXRzLiBUaGUgcHJpbmNpcGFsIHNvdXJjZSBvZiB0aW1pbmcKLQkgKiBlcnJv ciBoZXJlIGlzIGZyb20gdGhlIHNpbXBsZSB0cnVuY2F0aW9uLgotCSAqCi0JICogTm90ZSB0aGF0 IGxvY2FsX2Nsb2NrKCkgaXMgb25seSBkZWZpbmVkIHdydCB0byB0aGUgY3VycmVudCBDUFU7Ci0J ICogdGhlIGNvbXBhcmlzb25zIGFyZSBubyBsb25nZXIgdmFsaWQgaWYgd2Ugc3dpdGNoIENQVXMu IEluc3RlYWQgb2YKLQkgKiBibG9ja2luZyBwcmVlbXB0aW9uIGZvciB0aGUgZW50aXJlIGJ1c3l3 YWl0LCB3ZSBjYW4gZGV0ZWN0IHRoZSBDUFUKLQkgKiBzd2l0Y2ggYW5kIHVzZSB0aGF0IGFzIGlu ZGljYXRvciBvZiBzeXN0ZW0gbG9hZCBhbmQgYSByZWFzb24gdG8KLQkgKiBzdG9wIGJ1c3l3YWl0 aW5nLCBzZWUgYnVzeXdhaXRfc3RvcCgpLgotCSAqLwotCSpjcHUgPSBnZXRfY3B1KCk7Ci0JdCA9 IGxvY2FsX2Nsb2NrKCkgPj4gMTA7Ci0JcHV0X2NwdSgpOwotCi0JcmV0dXJuIHQ7Ci19Ci0KLXN0 YXRpYyBib29sIGJ1c3l3YWl0X3N0b3AodW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1bnNpZ25lZCBj cHUpCi17Ci0JdW5zaWduZWQgdGhpc19jcHU7Ci0KLQlpZiAodGltZV9hZnRlcihsb2NhbF9jbG9j a191cygmdGhpc19jcHUpLCB0aW1lb3V0KSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gdGhp c19jcHUgIT0gY3B1OwotfQotCi1zdGF0aWMgYm9vbCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAotCQkJCXN0cnVjdCBpbnRlbF93YWl0ICp3YWl0 LAotCQkJCWludCBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JdW5zaWduZWQg Y3B1OwotCi0JLyogV2hlbiB3YWl0aW5nIGZvciBoaWdoIGZyZXF1ZW5jeSByZXF1ZXN0cywgZS5n LiBkdXJpbmcgc3luY2hyb25vdXMKLQkgKiByZW5kZXJpbmcgc3BsaXQgYmV0d2VlbiB0aGUgQ1BV IGFuZCBHUFUsIHRoZSBmaW5pdGUgYW1vdW50IG9mIHRpbWUKLQkgKiByZXF1aXJlZCB0byBzZXQg dXAgdGhlIGlycSBhbmQgd2FpdCB1cG9uIGl0IGxpbWl0cyB0aGUgcmVzcG9uc2UKLQkgKiByYXRl LiBCeSBidXN5d2FpdGluZyBvbiB0aGUgcmVxdWVzdCBjb21wbGV0aW9uIGZvciBhIHNob3J0IHdo aWxlIHdlCi0JICogY2FuIHNlcnZpY2UgdGhlIGhpZ2ggZnJlcXVlbmN5IHdhaXRzIGFzIHF1aWNr IGFzIHBvc3NpYmxlLiBIb3dldmVyLAotCSAqIGlmIGl0IGlzIGEgc2xvdyByZXF1ZXN0LCB3ZSB3 YW50IHRvIHNsZWVwIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCi0JICogVGhlIHRyYWRlb2ZmIGJl dHdlZW4gd2FpdGluZyBhbmQgc2xlZXBpbmcgaXMgcm91Z2hseSB0aGUgdGltZSBpdAotCSAqIHRh a2VzIHRvIHNsZWVwIG9uIGEgcmVxdWVzdCwgb24gdGhlIG9yZGVyIG9mIGEgbWljcm9zZWNvbmQu Ci0JICovCi0KLQkvKiBPbmx5IHNwaW4gaWYgd2Uga25vdyB0aGUgR1BVIGlzIHByb2Nlc3Npbmcg dGhpcyByZXF1ZXN0ICovCi0JaWYgKCFpOTE1X2dlbV9yZXF1ZXN0X3N0YXJ0ZWQocmVxKSkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JdGltZW91dCA9IGxvY2FsX2Nsb2NrX3VzKCZjcHUpICsgNTsKLQlk byB7Ci0JCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpKQotCQkJcmV0dXJuIHRy dWU7Ci0KLQkJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0YXRlLCB3YWl0LT50YXNrKSkKLQkJ CWJyZWFrOwotCi0JCWlmIChidXN5d2FpdF9zdG9wKHRpbWVvdXQsIGNwdSkpCi0JCQlicmVhazsK LQotCQljcHVfcmVsYXhfbG93bGF0ZW5jeSgpOwotCi0JCS8qIEJyZWFrIHRoZSBsb29wIGlmIHdl IGhhdmUgY29uc3VtZWQgdGhlIHRpbWVzbGljZSAob3IgYmVlbgotCQkgKiBwcmVlbXB0ZWQpIG9y IHdoZW4gZWl0aGVyIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBoYXMKLQkJICogZW5hYmxlZCB0aGUg aW50ZXJydXB0LCBvciB0aGUgSVJRIGhhcyBmaXJlZC4KLQkJICovCi0JfSB3aGlsZSAoIW5lZWRf cmVzY2hlZCgpICYmIHdhaXQtPnRhc2stPnN0YXRlID09IHN0YXRlKTsKLQotCXJldHVybiBmYWxz ZTsKLX0KLQotLyoqCi0gKiBfX2k5MTVfd2FpdF9yZXF1ZXN0IC0gd2FpdCB1bnRpbCBleGVjdXRp b24gb2YgcmVxdWVzdCBoYXMgZmluaXNoZWQKLSAqIEByZXE6IGR1aCEKLSAqIEBpbnRlcnJ1cHRp YmxlOiBkbyBhbiBpbnRlcnJ1cHRpYmxlIHdhaXQgKG5vcm1hbGx5IHllcykKLSAqIEB0aW1lb3V0 OiBpbiAtIGhvdyBsb25nIHRvIHdhaXQgKE5VTEwgZm9yZXZlcik7IG91dCAtIGhvdyBtdWNoIHRp bWUgcmVtYWluaW5nCi0gKgotICogTm90ZTogSXQgaXMgb2YgdXRtb3N0IGltcG9ydGFuY2UgdGhh dCB0aGUgcGFzc2VkIGluIHNlcW5vIGFuZCByZXNldF9jb3VudGVyCi0gKiB2YWx1ZXMgaGF2ZSBi ZWVuIHJlYWQgYnkgdGhlIGNhbGxlciBpbiBhbiBzbXAgc2FmZSBtYW5uZXIuIFdoZXJlIHJlYWQt c2lkZQotICogbG9ja3MgYXJlIGludm9sdmVkLCBpdCBpcyBzdWZmaWNpZW50IHRvIHJlYWQgdGhl IHJlc2V0X2NvdW50ZXIgYmVmb3JlCi0gKiB1bmxvY2tpbmcgdGhlIGxvY2sgdGhhdCBwcm90ZWN0 cyB0aGUgc2Vxbm8uIEZvciBsb2NrbGVzcyB0cmlja3MsIHRoZQotICogcmVzZXRfY291bnRlciBf bXVzdF8gYmUgcmVhZCBiZWZvcmUsIGFuZCBhbiBhcHByb3ByaWF0ZSBzbXBfcm1iIG11c3QgYmUK LSAqIGluc2VydGVkLgotICoKLSAqIFJldHVybnMgMCBpZiB0aGUgcmVxdWVzdCB3YXMgZm91bmQg d2l0aGluIHRoZSBhbGxvdGVkIHRpbWUuIEVsc2UgcmV0dXJucyB0aGUKLSAqIGVycm5vIHdpdGgg cmVtYWluaW5nIHRpbWUgZmlsbGVkIGluIHRpbWVvdXQgYXJndW1lbnQuCi0gKi8KLWludCBfX2k5 MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAotCQkJYm9v bCBpbnRlcnJ1cHRpYmxlLAotCQkJczY0ICp0aW1lb3V0LAotCQkJc3RydWN0IGludGVsX3Jwc19j bGllbnQgKnJwcykKLXsKLQlpbnQgc3RhdGUgPSBpbnRlcnJ1cHRpYmxlID8gVEFTS19JTlRFUlJV UFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElCTEU7Ci0Jc3RydWN0IGludGVsX3dhaXQgd2FpdDsK LQl1bnNpZ25lZCBsb25nIHRpbWVvdXRfcmVtYWluOwotCWludCByZXQgPSAwOwotCi0JbWlnaHRf c2xlZXAoKTsKLQotCWlmIChsaXN0X2VtcHR5KCZyZXEtPmxpc3QpKQotCQlyZXR1cm4gMDsKLQot CWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpKQotCQlyZXR1cm4gMDsKLQotCXRp bWVvdXRfcmVtYWluID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Ci0JaWYgKHRpbWVvdXQpIHsKLQkJ aWYgKFdBUk5fT04oKnRpbWVvdXQgPCAwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICgq dGltZW91dCA9PSAwKQotCQkJcmV0dXJuIC1FVElNRTsKLQotCQkvKiBSZWNvcmQgY3VycmVudCB0 aW1lIGluIGNhc2UgaW50ZXJydXB0ZWQsIG9yIHdlZGdlZCAqLwotCQl0aW1lb3V0X3JlbWFpbiA9 IG5zZWNzX3RvX2ppZmZpZXNfdGltZW91dCgqdGltZW91dCk7Ci0JCSp0aW1lb3V0ICs9IGt0aW1l X2dldF9yYXdfbnMoKTsKLQl9Ci0KLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW4o cmVxKTsKLQotCS8qIFRoaXMgY2xpZW50IGlzIGFib3V0IHRvIHN0YWxsIHdhaXRpbmcgZm9yIHRo ZSBHUFUuIEluIG1hbnkgY2FzZXMKLQkgKiB0aGlzIGlzIHVuZGVzaXJhYmxlIGFuZCBsaW1pdHMg dGhlIHRocm91Z2hwdXQgb2YgdGhlIHN5c3RlbSwgYXMKLQkgKiBtYW55IGNsaWVudHMgY2Fubm90 IGNvbnRpbnVlIHByb2Nlc3NpbmcgdXNlciBpbnB1dC9vdXRwdXQgd2hpbHN0Ci0JICogYmxvY2tl ZC4gUlBTIGF1dG90dW5pbmcgbWF5IHRha2UgdGVucyBvZiBtaWxsaXNlY29uZHMgdG8gcmVzcG9u ZAotCSAqIHRvIHRoZSBHUFUgbG9hZCBhbmQgdGh1cyBpbmN1cnMgYWRkaXRpb25hbCBsYXRlbmN5 IGZvciB0aGUgY2xpZW50LgotCSAqIFdlIGNhbiBjaXJjdW12ZW50IHRoYXQgYnkgcHJvbW90aW5n IHRoZSBHUFUgZnJlcXVlbmN5IHRvIG1heGltdW0KLQkgKiBiZWZvcmUgd2Ugd2FpdC4gVGhpcyBt YWtlcyB0aGUgR1BVIHRocm90dGxlIHVwIG11Y2ggbW9yZSBxdWlja2x5Ci0JICogKGdvb2QgZm9y IGJlbmNobWFya3MgYW5kIHVzZXIgZXhwZXJpZW5jZSwgZS5nLiB3aW5kb3cgYW5pbWF0aW9ucyks Ci0JICogYnV0IGF0IGEgY29zdCBvZiBzcGVuZGluZyBtb3JlIHBvd2VyIHByb2Nlc3NpbmcgdGhl IHdvcmtsb2FkCi0JICogKGJhZCBmb3IgYmF0dGVyeSkuIE5vdCBhbGwgY2xpZW50cyBldmVuIHdh bnQgdGhlaXIgcmVzdWx0cwotCSAqIGltbWVkaWF0ZWx5IGFuZCBmb3IgdGhlbSB3ZSBzaG91bGQg anVzdCBsZXQgdGhlIEdQVSBzZWxlY3QgaXRzIG93bgotCSAqIGZyZXF1ZW5jeSB0byBtYXhpbWlz ZSBlZmZpY2llbmN5LiBUbyBwcmV2ZW50IGEgc2luZ2xlIGNsaWVudCBmcm9tCi0JICogZm9yY2lu ZyB0aGUgY2xvY2tzIHRvbyBoaWdoIGZvciB0aGUgd2hvbGUgc3lzdGVtLCB3ZSBvbmx5IGFsbG93 Ci0JICogZWFjaCBjbGllbnQgdG8gd2FpdGJvb3N0IG9uY2UgaW4gYSBidXN5IHBlcmlvZC4KLQkg Ki8KLQlpZiAoSU5URUxfSU5GTyhyZXEtPmk5MTUpLT5nZW4gPj0gNikKLQkJZ2VuNl9ycHNfYm9v c3QocmVxLT5pOTE1LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKLQotCWludGVsX3dhaXRf aW5pdCgmd2FpdCwgcmVxLT5zZXFubyk7Ci0Jc2V0X3Rhc2tfc3RhdGUod2FpdC50YXNrLCBzdGF0 ZSk7Ci0KLQkvKiBPcHRpbWlzdGljIHNwaW4gZm9yIHRoZSBuZXh0IH5qaWZmaWUgYmVmb3JlIHRv dWNoaW5nIElSUXMgKi8KLQlpZiAoaW50ZWxfZW5naW5lX2FkZF93YWl0KHJlcS0+cmluZywgJndh aXQpKSB7Ci0JCWlmIChfX2k5MTVfc3Bpbl9yZXF1ZXN0KHJlcSwgJndhaXQsIHN0YXRlKSkKLQkJ CWdvdG8gb3V0OwotCi0JCWludGVsX2VuZ2luZV9lbmFibGVfaXJxKHJlcS0+cmluZyk7Ci0KLQkJ LyogSW4gb3JkZXIgdG8gY2hlY2sgdGhhdCB3ZSBoYXZlbid0IG1pc3NlZCB0aGUgaW50ZXJydXB0 Ci0JCSAqIGFzIHdlIGVuYWJsZWQgaXQsIHdlIG5lZWQgdG8ga2ljayBvdXJzZWx2ZXMgdG8gZG8g YQotCQkgKiBjb2hlcmVudCBjaGVjayBvbiB0aGUgc2Vxbm8gYmVmb3JlIHdlIHNsZWVwLgotCQkg Ki8KLQkJZ290byB3YWtldXA7Ci0JfQotCi0JZm9yICg7OykgewotCQlpZiAoc2lnbmFsX3BlbmRp bmdfc3RhdGUoc3RhdGUsIHdhaXQudGFzaykpIHsKLQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJ CWJyZWFrOwotCQl9Ci0KLQkJLyogRW5zdXJlIHRoYXQgZXZlbiBpZiB0aGUgR1BVIGhhbmdzLCB3 ZSBnZXQgd29rZW4gdXAuICovCi0JCWk5MTVfcXVldWVfaGFuZ2NoZWNrKHJlcS0+aTkxNSk7Ci0K LQkJdGltZW91dF9yZW1haW4gPSBpb19zY2hlZHVsZV90aW1lb3V0KHRpbWVvdXRfcmVtYWluKTsK LQkJaWYgKHRpbWVvdXRfcmVtYWluID09IDApIHsKLQkJCXJldCA9IC1FVElNRTsKLQkJCWJyZWFr OwotCQl9Ci0KLQkJaWYgKGludGVsX3dhaXRfY29tcGxldGUoJndhaXQpKQotCQkJYnJlYWs7Ci0K LXdha2V1cDoJCXNldF90YXNrX3N0YXRlKHdhaXQudGFzaywgc3RhdGUpOwotCi0JCS8qIEJlZm9y ZSB3ZSBkbyB0aGUgaGVhdmllciBjb2hlcmVudCByZWFkIG9mIHRoZSBzZXFubywKLQkJICogY2hl Y2sgdGhlIHZhbHVlIChob3BlZnVsbHkpIGluIHRoZSBDUFUgY2FjaGVsaW5lLgotCQkgKi8KLQkJ aWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSkpCi0JCQlicmVhazsKLQotCQkvKiBF bnN1cmUgb3VyIHJlYWQgb2YgdGhlIHNlcW5vIGlzIGNvaGVyZW50IHNvIHRoYXQgd2UKLQkJICog ZG8gbm90ICJtaXNzIGFuIGludGVycnVwdCIgKGkuZS4gaWYgdGhpcyBpcyB0aGUgbGFzdAotCQkg KiByZXF1ZXN0IGFuZCB0aGUgc2Vxbm8gd3JpdGUgZnJvbSB0aGUgR1BVIGlzIG5vdCB2aXNpYmxl Ci0JCSAqIGJ5IHRoZSB0aW1lIHRoZSBpbnRlcnJ1cHQgZmlyZXMsIHdlIHdpbGwgc2VlIHRoYXQg dGhlCi0JCSAqIHJlcXVlc3QgaXMgaW5jb21wbGV0ZSBhbmQgZ28gYmFjayB0byBzbGVlcCBhd2Fp dGluZwotCQkgKiBhbm90aGVyIGludGVycnVwdCB0aGF0IHdpbGwgbmV2ZXIgY29tZS4pCi0JCSAq Ci0JCSAqIFN0cmljdGx5LCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlIGFmdGVyIGFuIGlu dGVycnVwdCwKLQkJICogYnV0IGl0IGlzIGVhc2llciBhbmQgc2FmZXIgdG8gZG8gaXQgZXZlcnkg dGltZSB0aGUgd2FpdGVyCi0JCSAqIGlzIHdva2VuLgotCQkgKi8KLQkJaWYgKHJlcS0+cmluZy0+ c2Vxbm9fYmFycmllcikgewotCQkJcmVxLT5yaW5nLT5zZXFub19iYXJyaWVyKHJlcS0+cmluZyk7 Ci0JCQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKLQkJCQlicmVhazsKLQkJ fQotCi0JCS8qIFdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZ3B1IHJlc2V0IGhhcHBlbmVk IGluIGJldHdlZW4KLQkJICogdGhlIHJlcXVlc3QgYmVpbmcgc3VibWl0dGVkIGFuZCBub3cuIElm IGEgcmVzZXQgaGFzIG9jY3VycmVkLAotCQkgKiB0aGUgcmVxdWVzdCBpcyBlZmZlY3RpdmVseSBj b21wbGV0ZSAod2UgZWl0aGVyIGFyZSBpbiB0aGUKLQkJICogcHJvY2VzcyBvZiBvciBoYXZlIGRp c2NhcmRlZCB0aGUgcmVuZGVyaW5nIGFuZCBjb21wbGV0ZWx5Ci0JCSAqIHJlc2V0IHRoZSBHUFUu IFRoZSByZXN1bHRzIG9mIHRoZSByZXF1ZXN0IGFyZSBsb3N0IGFuZCB3ZQotCQkgKiBhcmUgZnJl ZSB0byBjb250aW51ZSBvbiB3aXRoIHRoZSBvcmlnaW5hbCBvcGVyYXRpb24uCi0JCSAqLwotCQlp ZiAocmVxLT5yZXNldF9jb3VudGVyICE9IGk5MTVfcmVzZXRfY291bnRlcigmcmVxLT5pOTE1LT5n cHVfZXJyb3IpKQotCQkJYnJlYWs7Ci0JfQotb3V0OgotCWludGVsX2VuZ2luZV9yZW1vdmVfd2Fp dChyZXEtPnJpbmcsICZ3YWl0KTsKLQlfX3NldF90YXNrX3N0YXRlKHdhaXQudGFzaywgVEFTS19S VU5OSU5HKTsKLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfZW5kKHJlcSk7Ci0KLQlpZiAo dGltZW91dCkgewotCQkqdGltZW91dCAtPSBrdGltZV9nZXRfcmF3X25zKCk7Ci0JCWlmICgqdGlt ZW91dCA8IDApCi0JCQkqdGltZW91dCA9IDA7Ci0KLQkJLyoKLQkJICogQXBwYXJlbnRseSBrdGlt ZSBpc24ndCBhY2N1cmF0ZSBlbm91Z2ggYW5kIG9jY2FzaW9uYWxseSBoYXMgYQotCQkgKiBiaXQg b2YgbWlzbWF0Y2ggaW4gdGhlIGppZmZpZXM8LT5uc2VjczwtPmt0aW1lIGxvb3AuIFNvIHBhdGNo Ci0JCSAqIHRoaW5ncyB1cCB0byBtYWtlIHRoZSB0ZXN0IGhhcHB5LiBXZSBhbGxvdyB1cCB0byAx IGppZmZ5LgotCQkgKgotCQkgKiBUaGlzIGlzIGEgcmVncnNzaW9uIGZyb20gdGhlIHRpbWVzcGVj LT5rdGltZSBjb252ZXJzaW9uLgotCQkgKi8KLQkJaWYgKHJldCA9PSAtRVRJTUUgJiYgKnRpbWVv dXQgPCBqaWZmaWVzX3RvX3VzZWNzKDEpKjEwMDApCi0JCQkqdGltZW91dCA9IDA7Ci0JfQotCi0J aWYgKHJldCA9PSAwICYmIHJwcyAmJiByZXEtPnNlcW5vID09IHJlcS0+cmluZy0+bGFzdF9zdWJt aXR0ZWRfc2Vxbm8pIHsKLQkJLyogVGhlIEdQVSBpcyBub3cgaWRsZSBhbmQgdGhpcyBjbGllbnQg aGFzIHN0YWxsZWQuCi0JCSAqIFNpbmNlIG5vIG90aGVyIGNsaWVudCBoYXMgc3VibWl0dGVkIGEg cmVxdWVzdCBpbiB0aGUKLQkJICogbWVhbnRpbWUsIGFzc3VtZSB0aGF0IHRoaXMgY2xpZW50IGlz IHRoZSBvbmx5IG9uZQotCQkgKiBzdXBwbHlpbmcgd29yayB0byB0aGUgR1BVIGJ1dCBpcyB1bmFi bGUgdG8ga2VlcCB0aGF0Ci0JCSAqIHdvcmsgc3VwcGxpZWQgYmVjYXVzZSBpdCBpcyB3YWl0aW5n LiBTaW5jZSB0aGUgR1BVIGlzCi0JCSAqIHRoZW4gbmV2ZXIga2VwdCBmdWxseSBidXN5LCBSUFMg YXV0b2Nsb2NraW5nIHdpbGwKLQkJICoga2VlcCB0aGUgY2xvY2tzIHJlbGF0aXZlbHkgbG93LCBj YXVzaW5nIGZ1cnRoZXIgZGVsYXlzLgotCQkgKiBDb21wZW5zYXRlIGJ5IGdpdmluZyB0aGUgc3lu Y2hyb25vdXMgY2xpZW50IGNyZWRpdCBmb3IKLQkJICogYSB3YWl0Ym9vc3QgbmV4dCB0aW1lLgot CQkgKi8KLQkJc3Bpbl9sb2NrKCZyZXEtPmk5MTUtPnJwcy5jbGllbnRfbG9jayk7Ci0JCWxpc3Rf ZGVsX2luaXQoJnJwcy0+bGluayk7Ci0JCXNwaW5fdW5sb2NrKCZyZXEtPmk5MTUtPnJwcy5jbGll bnRfbG9jayk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IGk5MTVfZ2VtX3JlcXVlc3Rf YWRkX3RvX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKLQkJCQkgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdjsKLQotCVdB Uk5fT04oIXJlcSB8fCAhZmlsZSB8fCByZXEtPmZpbGVfcHJpdik7Ci0KLQlpZiAoIXJlcSB8fCAh ZmlsZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmVxLT5maWxlX3ByaXYpCi0JCXJldHVy biAtRUlOVkFMOwotCi0JZGV2X3ByaXZhdGUgPSByZXEtPnJpbmctPmRldi0+ZGV2X3ByaXZhdGU7 Ci0JZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7Ci0KLQlzcGluX2xvY2soJmZpbGVfcHJp di0+bW0ubG9jayk7Ci0JcmVxLT5maWxlX3ByaXYgPSBmaWxlX3ByaXY7Ci0JbGlzdF9hZGRfdGFp bCgmcmVxLT5jbGllbnRfbGlzdCwgJmZpbGVfcHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKLQlzcGlu X3VubG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKLQotCXJlcS0+cGlkID0gZ2V0X3BpZCh0YXNr X3BpZChjdXJyZW50KSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1p OTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcXVlc3QpCi17Ci0Jc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9w cml2ID0gcmVxdWVzdC0+ZmlsZV9wcml2OwotCi0JaWYgKCFmaWxlX3ByaXYpCi0JCXJldHVybjsK LQotCXNwaW5fbG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKLQlsaXN0X2RlbCgmcmVxdWVzdC0+ Y2xpZW50X2xpc3QpOwotCXJlcXVlc3QtPmZpbGVfcHJpdiA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2so JmZpbGVfcHJpdi0+bW0ubG9jayk7Ci0KLQlwdXRfcGlkKHJlcXVlc3QtPnBpZCk7Ci0JcmVxdWVz dC0+cGlkID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQotewotCXRyYWNlX2k5MTVfZ2Vt X3JlcXVlc3RfcmV0aXJlKHJlcXVlc3QpOwotCi0JLyogV2Uga25vdyB0aGUgR1BVIG11c3QgaGF2 ZSByZWFkIHRoZSByZXF1ZXN0IHRvIGhhdmUKLQkgKiBzZW50IHVzIHRoZSBzZXFubyArIGludGVy cnVwdCwgc28gdXNlIHRoZSBwb3NpdGlvbgotCSAqIG9mIHRhaWwgb2YgdGhlIHJlcXVlc3QgdG8g dXBkYXRlIHRoZSBsYXN0IGtub3duIHBvc2l0aW9uCi0JICogb2YgdGhlIEdQVSBoZWFkLgotCSAq Ci0JICogTm90ZSB0aGlzIHJlcXVpcmVzIHRoYXQgd2UgYXJlIGFsd2F5cyBjYWxsZWQgaW4gcmVx dWVzdAotCSAqIGNvbXBsZXRpb24gb3JkZXIuCi0JICovCi0JcmVxdWVzdC0+cmluZ2J1Zi0+bGFz dF9yZXRpcmVkX2hlYWQgPSByZXF1ZXN0LT5wb3N0Zml4OwotCi0JbGlzdF9kZWxfaW5pdCgmcmVx dWVzdC0+bGlzdCk7Ci0JaTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQocmVxdWVz dCk7Ci0KLQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcXVlc3QpOwotfQotCi1zdGF0 aWMgdm9pZAotX19pOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV9fdXB0byhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSkKLXsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBy ZXEtPnJpbmc7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICp0bXA7Ci0KLQlsb2NrZGVw X2Fzc2VydF9oZWxkKCZlbmdpbmUtPmRldi0+c3RydWN0X211dGV4KTsKLQotCWlmIChsaXN0X2Vt cHR5KCZyZXEtPmxpc3QpKQotCQlyZXR1cm47Ci0KLQlkbyB7Ci0JCXRtcCA9IGxpc3RfZmlyc3Rf ZW50cnkoJmVuZ2luZS0+cmVxdWVzdF9saXN0LAotCQkJCSAgICAgICB0eXBlb2YoKnRtcCksIGxp c3QpOwotCi0JCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHRtcCk7Ci0JfSB3aGlsZSAodG1wICE9 IHJlcSk7Ci0KLQlXQVJOX09OKGk5MTVfdmVyaWZ5X2xpc3RzKGVuZ2luZS0+ZGV2KSk7Ci19Ci0K LS8qKgotICogV2FpdHMgZm9yIGEgcmVxdWVzdCB0byBiZSBzaWduYWxlZCwgYW5kIGNsZWFucyB1 cCB0aGUKLSAqIHJlcXVlc3QgYW5kIG9iamVjdCBsaXN0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGF0 IGV2ZW50LgotICovCi1pbnQKLWk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2OwotCWJvb2wgaW50ZXJydXB0aWJsZTsKLQlpbnQgcmV0Owot Ci0JQlVHX09OKHJlcSA9PSBOVUxMKTsKLQotCWRldiA9IHJlcS0+cmluZy0+ZGV2OwotCWRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnRlcnJ1cHRpYmxlID0gZGV2X3ByaXYtPm1tLmlu dGVycnVwdGlibGU7Ci0KLQlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0 ZXgpKTsKLQotCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCBpbnRlcnJ1cHRpYmxlLCBO VUxMLCBOVUxMKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JX19pOTE1X2dlbV9yZXF1 ZXN0X3JldGlyZV9fdXB0byhyZXEpOwotCXJldHVybiAwOwotfQotCiAvKioKICAqIEVuc3VyZXMg dGhhdCBhbGwgcmVuZGVyaW5nIHRvIHRoZSBvYmplY3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlIG9i amVjdCBpcwogICogc2FmZSB0byB1bmJpbmQgZnJvbSB0aGUgR1RUIG9yIGFjY2VzcyBmcm9tIHRo ZSBDUFUuCkBAIC0xNTQxLDcgKzExNTgsNyBAQCBpOTE1X2dlbV9vYmplY3RfcmV0aXJlX3JlcXVl c3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAllbHNlIGlmIChvYmotPmxhc3Rf d3JpdGVfcmVxID09IHJlcSkKIAkJaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fd3JpdGUob2JqKTsK IAotCV9faTkxNV9nZW1fcmVxdWVzdF9yZXRpcmVfX3VwdG8ocmVxKTsKKwlpOTE1X2dlbV9yZXF1 ZXN0X3JldGlyZV9fdXB0byhyZXEpOwogfQogCiAvKiBBIG5vbmJsb2NraW5nIHZhcmlhbnQgb2Yg dGhlIGFib3ZlIHdhaXQuIFRoaXMgaXMgYSBoaWdobHkgZGFuZ2Vyb3VzIHJvdXRpbmUKQEAgLTI2 OTYsMTA5ICsyMzEzLDYgQEAgc3RhdGljIHZvaWQgaTkxNV9zZXRfcmVzZXRfc3RhdHVzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAl9CiB9CiAKLXZvaWQgaTkxNV9nZW1fcmVx dWVzdF9mcmVlKHN0cnVjdCBrcmVmICpyZXFfcmVmKQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxID0gY29udGFpbmVyX29mKHJlcV9yZWYsCi0JCQkJCQkgdHlwZW9mKCpyZXEp LCByZWYpOwotCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHggPSByZXEtPmN0eDsKLQotCWlmIChy ZXEtPmZpbGVfcHJpdikKLQkJaTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQocmVx KTsKLQotCWlmIChjdHgpIHsKLQkJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykgewotCQkJaWYg KGN0eCAhPSByZXEtPnJpbmctPmRlZmF1bHRfY29udGV4dCkKLQkJCQlpbnRlbF9scl9jb250ZXh0 X3VucGluKHJlcSk7Ci0JCX0KLQotCQlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKGN0eCk7 Ci0JfQotCi0Ja21lbV9jYWNoZV9mcmVlKHJlcS0+aTkxNS0+cmVxdWVzdHMsIHJlcSk7Ci19Ci0K LWludCBpOTE1X2dlbV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcs Ci0JCQkgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAotCQkJICAgc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICoqcmVxX291dCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KHJpbmctPmRldik7Ci0JdW5zaWduZWQgcmVzZXRfY291bnRlciA9IGk5 MTVfcmVzZXRfY291bnRlcigmZGV2X3ByaXYtPmdwdV9lcnJvcik7Ci0Jc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXE7Ci0JaW50IHJldDsKLQotCWlmICghcmVxX291dCkKLQkJcmV0dXJu IC1FSU5WQUw7Ci0KLQkqcmVxX291dCA9IE5VTEw7Ci0KLQkvKiBBQkk6IEJlZm9yZSB1c2Vyc3Bh Y2UgYWNjZXNzZXMgdGhlIEdQVSAoZS5nLiBleGVjYnVmZmVyKSwgcmVwb3J0Ci0JICogRUlPIGlm IHRoZSBHUFUgaXMgYWxyZWFkeSB3ZWRnZWQsIG9yIEVBR0FJTiB0byBkcm9wIHRoZSBzdHJ1Y3Rf bXV0ZXgKLQkgKiBhbmQgcmVzdGFydC4KLQkgKi8KLQlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRn ZShyZXNldF9jb3VudGVyLCBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSk7Ci0JaWYgKHJldCkK LQkJcmV0dXJuIHJldDsKLQotCXJlcSA9IGttZW1fY2FjaGVfemFsbG9jKGRldl9wcml2LT5yZXF1 ZXN0cywgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlcSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsK LQotCXJldCA9IGk5MTVfZ2VtX2dldF9zZXFubyhyaW5nLT5kZXYsICZyZXEtPnNlcW5vKTsKLQlp ZiAocmV0KQotCQlnb3RvIGVycjsKLQotCWtyZWZfaW5pdCgmcmVxLT5yZWYpOwotCXJlcS0+aTkx NSA9IGRldl9wcml2OwotCXJlcS0+cmluZyA9IHJpbmc7Ci0JcmVxLT5yZXNldF9jb3VudGVyID0g cmVzZXRfY291bnRlcjsKLQlyZXEtPmN0eCAgPSBjdHg7Ci0JaTkxNV9nZW1fY29udGV4dF9yZWZl cmVuY2UocmVxLT5jdHgpOwotCi0JaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKLQkJcmV0ID0g aW50ZWxfbG9naWNhbF9yaW5nX2FsbG9jX3JlcXVlc3RfZXh0cmFzKHJlcSk7Ci0JZWxzZQotCQly ZXQgPSBpbnRlbF9yaW5nX2FsbG9jX3JlcXVlc3RfZXh0cmFzKHJlcSk7Ci0JaWYgKHJldCkgewot CQlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKHJlcS0+Y3R4KTsKLQkJZ290byBlcnI7Ci0J fQotCi0JLyoKLQkgKiBSZXNlcnZlIHNwYWNlIGluIHRoZSByaW5nIGJ1ZmZlciBmb3IgYWxsIHRo ZSBjb21tYW5kcyByZXF1aXJlZCB0bwotCSAqIGV2ZW50dWFsbHkgZW1pdCB0aGlzIHJlcXVlc3Qu IFRoaXMgaXMgdG8gZ3VhcmFudGVlIHRoYXQgdGhlCi0JICogaTkxNV9hZGRfcmVxdWVzdCgpIGNh bGwgY2FuJ3QgZmFpbC4gTm90ZSB0aGF0IHRoZSByZXNlcnZlIG1heSBuZWVkCi0JICogdG8gYmUg cmVkb25lIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBhY3R1YWxseSBzdWJtaXR0ZWQgc3RyYWlnaHQK LQkgKiBhd2F5LCBlLmcuIGJlY2F1c2UgYSBHUFUgc2NoZWR1bGVyIGhhcyBkZWZlcnJlZCBpdC4K LQkgKi8KLQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQotCQlyZXQgPSBpbnRlbF9sb2dpY2Fs X3JpbmdfcmVzZXJ2ZV9zcGFjZShyZXEpOwotCWVsc2UKLQkJcmV0ID0gaW50ZWxfcmluZ19yZXNl cnZlX3NwYWNlKHJlcSk7Ci0JaWYgKHJldCkgewotCQkvKgotCQkgKiBBdCB0aGlzIHBvaW50LCB0 aGUgcmVxdWVzdCBpcyBmdWxseSBhbGxvY2F0ZWQgZXZlbiBpZiBub3QKLQkJICogZnVsbHkgcHJl cGFyZWQuIFRodXMgaXQgY2FuIGJlIGNsZWFuZWQgdXAgdXNpbmcgdGhlIHByb3BlcgotCQkgKiBm cmVlIGNvZGUuCi0JCSAqLwotCQlpOTE1X2dlbV9yZXF1ZXN0X2NhbmNlbChyZXEpOwotCQlyZXR1 cm4gcmV0OwotCX0KLQotCSpyZXFfb3V0ID0gcmVxOwotCXJldHVybiAwOwotCi1lcnI6Ci0Ja21l bV9jYWNoZV9mcmVlKGRldl9wcml2LT5yZXF1ZXN0cywgcmVxKTsKLQlyZXR1cm4gcmV0OwotfQot Ci12b2lkIGk5MTVfZ2VtX3JlcXVlc3RfY2FuY2VsKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKQotewotCWludGVsX3JpbmdfcmVzZXJ2ZWRfc3BhY2VfY2FuY2VsKHJlcS0+cmluZ2J1 Zik7Ci0KLQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcSk7Ci19Ci0KIHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqCiBpOTE1X2dlbV9maW5kX2FjdGl2ZV9yZXF1ZXN0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCiB7CkBAIC0yODgyLDE0ICsyMzk2LDE0IEBAIHN0YXRp YyB2b2lkIGk5MTVfZ2VtX3Jlc2V0X3JpbmdfY2xlYW51cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCiAJICogaW1wbGljaXQgcmVmZXJlbmNlcyBvbiB0aGluZ3MgbGlrZSBlLmcu IHBwZ3R0IGFkZHJlc3Mgc3BhY2VzIHRocm91Z2gKIAkgKiB0aGUgcmVxdWVzdC4KIAkgKi8KLQl3 aGlsZSAoIWxpc3RfZW1wdHkoJnJpbmctPnJlcXVlc3RfbGlzdCkpIHsKKwlpZiAoIWxpc3RfZW1w dHkoJnJpbmctPnJlcXVlc3RfbGlzdCkpIHsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXF1ZXN0OwogCi0JCXJlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyaW5nLT5yZXF1ZXN0 X2xpc3QsCi0JCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCwKLQkJCQkJICAgbGlz dCk7CisJCXJlcXVlc3QgPSBsaXN0X2xhc3RfZW50cnkoJnJpbmctPnJlcXVlc3RfbGlzdCwKKwkJ CQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QsCisJCQkJCSAgbGlzdCk7CiAKLQkJaTkx NV9nZW1fcmVxdWVzdF9yZXRpcmUocmVxdWVzdCk7CisJCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJl X191cHRvKHJlcXVlc3QpOwogCX0KIAogCS8qIEhhdmluZyBmbHVzaGVkIGFsbCByZXF1ZXN0cyBm cm9tIGFsbCBxdWV1ZXMsIHdlIGtub3cgdGhhdCBhbGwKQEAgLTI5NTQsNyArMjQ2OCw3IEBAIGk5 MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcp CiAJCWlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxdWVzdCkpCiAJCQlicmVhazsK IAotCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZShyZXF1ZXN0KTsKKwkJaTkxNV9nZW1fcmVxdWVz dF9yZXRpcmVfX3VwdG8ocmVxdWVzdCk7CiAJfQogCiAJLyogTW92ZSBhbnkgYnVmZmVycyBvbiB0 aGUgYWN0aXZlIGxpc3QgdGhhdCBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQKQEAgLTMwNzcsNyAr MjU5MSw3IEBAIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKIAkJCWdvdG8gcmV0aXJlOwogCiAJCWlmIChpOTE1X2dlbV9yZXF1ZXN0 X2NvbXBsZXRlZChyZXEpKSB7Ci0JCQlfX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX191cHRvKHJl cSk7CisJCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV9fdXB0byhyZXEpOwogcmV0aXJlOgogCQkJ aTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fcmVhZChvYmosIGkpOwogCQl9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi4yODQzNWM4ZDdiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMKQEAgLTAsMCArMSw1MTMgQEAKKy8qCisgKiBDb3B5cmln aHQgwqkgMjAwOC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIK Kworc3RhdGljIGludAoraTkxNV9nZW1fY2hlY2tfd2VkZ2UodW5zaWduZWQgcmVzZXRfY291bnRl ciwgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCWlmIChfX2k5MTVfdGVybWluYWxseV93ZWRnZWQo cmVzZXRfY291bnRlcikpCisJCXJldHVybiAtRUlPOworCisJaWYgKF9faTkxNV9yZXNldF9pbl9w cm9ncmVzcyhyZXNldF9jb3VudGVyKSkgeworCQkvKiBOb24taW50ZXJydXB0aWJsZSBjYWxsZXJz IGNhbid0IGhhbmRsZSAtRUFHQUlOLCBoZW5jZSByZXR1cm4KKwkJICogLUVJTyB1bmNvbmRpdGlv bmFsbHkgZm9yIHRoZXNlLiAqLworCQlpZiAoIWludGVycnVwdGlibGUpCisJCQlyZXR1cm4gLUVJ TzsKKworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGk5MTVf Z2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKKwkJCSAgIHN0 cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsCisJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKipyZXFfb3V0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUocmluZy0+ZGV2KTsKKwl1bnNpZ25lZCByZXNldF9jb3VudGVyID0gaTkxNV9yZXNldF9j b3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcTsKKwlpbnQgcmV0OworCisJaWYgKCFyZXFfb3V0KQorCQlyZXR1cm4gLUVJTlZBTDsK KworCSpyZXFfb3V0ID0gTlVMTDsKKworCS8qIEFCSTogQmVmb3JlIHVzZXJzcGFjZSBhY2Nlc3Nl cyB0aGUgR1BVIChlLmcuIGV4ZWNidWZmZXIpLCByZXBvcnQKKwkgKiBFSU8gaWYgdGhlIEdQVSBp cyBhbHJlYWR5IHdlZGdlZCwgb3IgRUFHQUlOIHRvIGRyb3AgdGhlIHN0cnVjdF9tdXRleAorCSAq IGFuZCByZXN0YXJ0LgorCSAqLworCXJldCA9IGk5MTVfZ2VtX2NoZWNrX3dlZGdlKHJlc2V0X2Nv dW50ZXIsIGRldl9wcml2LT5tbS5pbnRlcnJ1cHRpYmxlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmVxID0ga21lbV9jYWNoZV96YWxsb2MoZGV2X3ByaXYtPnJlcXVlc3RzLCBHRlBf S0VSTkVMKTsKKwlpZiAocmVxID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0g aTkxNV9nZW1fZ2V0X3NlcW5vKHJpbmctPmRldiwgJnJlcS0+c2Vxbm8pOworCWlmIChyZXQpCisJ CWdvdG8gZXJyOworCisJa3JlZl9pbml0KCZyZXEtPnJlZik7CisJcmVxLT5pOTE1ID0gZGV2X3By aXY7CisJcmVxLT5yaW5nID0gcmluZzsKKwlyZXEtPnJlc2V0X2NvdW50ZXIgPSByZXNldF9jb3Vu dGVyOworCXJlcS0+Y3R4ICA9IGN0eDsKKwlpOTE1X2dlbV9jb250ZXh0X3JlZmVyZW5jZShyZXEt PmN0eCk7CisKKwlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQorCQlyZXQgPSBpbnRlbF9sb2dp Y2FsX3JpbmdfYWxsb2NfcmVxdWVzdF9leHRyYXMocmVxKTsKKwllbHNlCisJCXJldCA9IGludGVs X3JpbmdfYWxsb2NfcmVxdWVzdF9leHRyYXMocmVxKTsKKwlpZiAocmV0KSB7CisJCWk5MTVfZ2Vt X2NvbnRleHRfdW5yZWZlcmVuY2UocmVxLT5jdHgpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKgor CSAqIFJlc2VydmUgc3BhY2UgaW4gdGhlIHJpbmcgYnVmZmVyIGZvciBhbGwgdGhlIGNvbW1hbmRz IHJlcXVpcmVkIHRvCisJICogZXZlbnR1YWxseSBlbWl0IHRoaXMgcmVxdWVzdC4gVGhpcyBpcyB0 byBndWFyYW50ZWUgdGhhdCB0aGUKKwkgKiBpOTE1X2FkZF9yZXF1ZXN0KCkgY2FsbCBjYW4ndCBm YWlsLiBOb3RlIHRoYXQgdGhlIHJlc2VydmUgbWF5IG5lZWQKKwkgKiB0byBiZSByZWRvbmUgaWYg dGhlIHJlcXVlc3QgaXMgbm90IGFjdHVhbGx5IHN1Ym1pdHRlZCBzdHJhaWdodAorCSAqIGF3YXks IGUuZy4gYmVjYXVzZSBhIEdQVSBzY2hlZHVsZXIgaGFzIGRlZmVycmVkIGl0LgorCSAqLworCWlm IChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCisJCXJldCA9IGludGVsX2xvZ2ljYWxfcmluZ19yZXNl cnZlX3NwYWNlKHJlcSk7CisJZWxzZQorCQlyZXQgPSBpbnRlbF9yaW5nX3Jlc2VydmVfc3BhY2Uo cmVxKTsKKwlpZiAocmV0KSB7CisJCS8qCisJCSAqIEF0IHRoaXMgcG9pbnQsIHRoZSByZXF1ZXN0 IGlzIGZ1bGx5IGFsbG9jYXRlZCBldmVuIGlmIG5vdAorCQkgKiBmdWxseSBwcmVwYXJlZC4gVGh1 cyBpdCBjYW4gYmUgY2xlYW5lZCB1cCB1c2luZyB0aGUgcHJvcGVyCisJCSAqIGZyZWUgY29kZS4K KwkJICovCisJCWk5MTVfZ2VtX3JlcXVlc3RfY2FuY2VsKHJlcSk7CisJCXJldHVybiByZXQ7CisJ fQorCisJKnJlcV9vdXQgPSByZXE7CisJcmV0dXJuIDA7CisKK2VycjoKKwlrbWVtX2NhY2hlX2Zy ZWUoZGV2X3ByaXYtPnJlcXVlc3RzLCByZXEpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaTkx NV9nZW1fcmVxdWVzdF9jYW5jZWwoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCit7 CisJaW50ZWxfcmluZ19yZXNlcnZlZF9zcGFjZV9jYW5jZWwocmVxLT5yaW5nYnVmKTsKKworCWk5 MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UocmVxKTsKK30KKworaW50IGk5MTVfZ2VtX3JlcXVl c3RfYWRkX3RvX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJCQkg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdjsKKwor CVdBUk5fT04oIXJlcSB8fCAhZmlsZSB8fCByZXEtPmZpbGVfcHJpdik7CisKKwlpZiAoIXJlcSB8 fCAhZmlsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmVxLT5maWxlX3ByaXYpCisJCXJl dHVybiAtRUlOVkFMOworCisJZGV2X3ByaXZhdGUgPSByZXEtPnJpbmctPmRldi0+ZGV2X3ByaXZh dGU7CisJZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisKKwlzcGluX2xvY2soJmZpbGVf cHJpdi0+bW0ubG9jayk7CisJcmVxLT5maWxlX3ByaXYgPSBmaWxlX3ByaXY7CisJbGlzdF9hZGRf dGFpbCgmcmVxLT5jbGllbnRfbGlzdCwgJmZpbGVfcHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKKwlz cGluX3VubG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKKworCXJlcS0+cGlkID0gZ2V0X3BpZCh0 YXNrX3BpZChjdXJyZW50KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitpOTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmls ZV9wcml2ID0gcmVxdWVzdC0+ZmlsZV9wcml2OworCisJaWYgKCFmaWxlX3ByaXYpCisJCXJldHVy bjsKKworCXNwaW5fbG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKKwlsaXN0X2RlbCgmcmVxdWVz dC0+Y2xpZW50X2xpc3QpOworCXJlcXVlc3QtPmZpbGVfcHJpdiA9IE5VTEw7CisJc3Bpbl91bmxv Y2soJmZpbGVfcHJpdi0+bW0ubG9jayk7CisKKwlwdXRfcGlkKHJlcXVlc3QtPnBpZCk7CisJcmVx dWVzdC0+cGlkID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVxdWVzdF9yZXRp cmUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXRyYWNlX2k5MTVf Z2VtX3JlcXVlc3RfcmV0aXJlKHJlcXVlc3QpOworCisJLyogV2Uga25vdyB0aGUgR1BVIG11c3Qg aGF2ZSByZWFkIHRoZSByZXF1ZXN0IHRvIGhhdmUKKwkgKiBzZW50IHVzIHRoZSBzZXFubyArIGlu dGVycnVwdCwgc28gdXNlIHRoZSBwb3NpdGlvbgorCSAqIG9mIHRhaWwgb2YgdGhlIHJlcXVlc3Qg dG8gdXBkYXRlIHRoZSBsYXN0IGtub3duIHBvc2l0aW9uCisJICogb2YgdGhlIEdQVSBoZWFkLgor CSAqCisJICogTm90ZSB0aGlzIHJlcXVpcmVzIHRoYXQgd2UgYXJlIGFsd2F5cyBjYWxsZWQgaW4g cmVxdWVzdAorCSAqIGNvbXBsZXRpb24gb3JkZXIuCisJICovCisJcmVxdWVzdC0+cmluZ2J1Zi0+ bGFzdF9yZXRpcmVkX2hlYWQgPSByZXF1ZXN0LT5wb3N0Zml4OworCisJbGlzdF9kZWxfaW5pdCgm cmVxdWVzdC0+bGlzdCk7CisJaTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQocmVx dWVzdCk7CisKKwlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcXVlc3QpOworfQorCit2 b2lkCitpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV9fdXB0byhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSByZXEtPnJp bmc7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICp0bXA7CisKKwlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZlbmdpbmUtPmRldi0+c3RydWN0X211dGV4KTsKKworCWlmIChsaXN0X2VtcHR5KCZy ZXEtPmxpc3QpKQorCQlyZXR1cm47CisKKwlkbyB7CisJCXRtcCA9IGxpc3RfZmlyc3RfZW50cnko JmVuZ2luZS0+cmVxdWVzdF9saXN0LAorCQkJCSAgICAgICB0eXBlb2YoKnRtcCksIGxpc3QpOwor CisJCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHRtcCk7CisJfSB3aGlsZSAodG1wICE9IHJlcSk7 CisKKwlXQVJOX09OKGk5MTVfdmVyaWZ5X2xpc3RzKGVuZ2luZS0+ZGV2KSk7Cit9CisKK3N0YXRp YyB1bnNpZ25lZCBsb25nIGxvY2FsX2Nsb2NrX3VzKHVuc2lnbmVkICpjcHUpCit7CisJdW5zaWdu ZWQgbG9uZyB0OworCisJLyogQ2hlYXBseSBhbmQgYXBwcm94aW1hdGVseSBjb252ZXJ0IGZyb20g bmFub3NlY29uZHMgdG8gbWljcm9zZWNvbmRzLgorCSAqIFRoZSByZXN1bHQgYW5kIHN1YnNlcXVl bnQgY2FsY3VsYXRpb25zIGFyZSBhbHNvIGRlZmluZWQgaW4gdGhlIHNhbWUKKwkgKiBhcHByb3hp bWF0ZSBtaWNyb3NlY29uZHMgdW5pdHMuIFRoZSBwcmluY2lwYWwgc291cmNlIG9mIHRpbWluZwor CSAqIGVycm9yIGhlcmUgaXMgZnJvbSB0aGUgc2ltcGxlIHRydW5jYXRpb24uCisJICoKKwkgKiBO b3RlIHRoYXQgbG9jYWxfY2xvY2soKSBpcyBvbmx5IGRlZmluZWQgd3J0IHRvIHRoZSBjdXJyZW50 IENQVTsKKwkgKiB0aGUgY29tcGFyaXNvbnMgYXJlIG5vIGxvbmdlciB2YWxpZCBpZiB3ZSBzd2l0 Y2ggQ1BVcy4gSW5zdGVhZCBvZgorCSAqIGJsb2NraW5nIHByZWVtcHRpb24gZm9yIHRoZSBlbnRp cmUgYnVzeXdhaXQsIHdlIGNhbiBkZXRlY3QgdGhlIENQVQorCSAqIHN3aXRjaCBhbmQgdXNlIHRo YXQgYXMgaW5kaWNhdG9yIG9mIHN5c3RlbSBsb2FkIGFuZCBhIHJlYXNvbiB0bworCSAqIHN0b3Ag YnVzeXdhaXRpbmcsIHNlZSBidXN5d2FpdF9zdG9wKCkuCisJICovCisJKmNwdSA9IGdldF9jcHUo KTsKKwl0ID0gbG9jYWxfY2xvY2soKSA+PiAxMDsKKwlwdXRfY3B1KCk7CisKKwlyZXR1cm4gdDsK K30KKworc3RhdGljIGJvb2wgYnVzeXdhaXRfc3RvcCh1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHVu c2lnbmVkIGNwdSkKK3sKKwl1bnNpZ25lZCB0aGlzX2NwdTsKKworCWlmICh0aW1lX2FmdGVyKGxv Y2FsX2Nsb2NrX3VzKCZ0aGlzX2NwdSksIHRpbWVvdXQpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJl dHVybiB0aGlzX2NwdSAhPSBjcHU7Cit9CisKK3N0YXRpYyBib29sIF9faTkxNV9zcGluX3JlcXVl c3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCisJCQkJc3RydWN0IGludGVsX3dh aXQgKndhaXQsCisJCQkJaW50IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1 bnNpZ25lZCBjcHU7CisKKwkvKiBXaGVuIHdhaXRpbmcgZm9yIGhpZ2ggZnJlcXVlbmN5IHJlcXVl c3RzLCBlLmcuIGR1cmluZyBzeW5jaHJvbm91cworCSAqIHJlbmRlcmluZyBzcGxpdCBiZXR3ZWVu IHRoZSBDUFUgYW5kIEdQVSwgdGhlIGZpbml0ZSBhbW91bnQgb2YgdGltZQorCSAqIHJlcXVpcmVk IHRvIHNldCB1cCB0aGUgaXJxIGFuZCB3YWl0IHVwb24gaXQgbGltaXRzIHRoZSByZXNwb25zZQor CSAqIHJhdGUuIEJ5IGJ1c3l3YWl0aW5nIG9uIHRoZSByZXF1ZXN0IGNvbXBsZXRpb24gZm9yIGEg c2hvcnQgd2hpbGUgd2UKKwkgKiBjYW4gc2VydmljZSB0aGUgaGlnaCBmcmVxdWVuY3kgd2FpdHMg YXMgcXVpY2sgYXMgcG9zc2libGUuIEhvd2V2ZXIsCisJICogaWYgaXQgaXMgYSBzbG93IHJlcXVl c3QsIHdlIHdhbnQgdG8gc2xlZXAgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKwkgKiBUaGUgdHJh ZGVvZmYgYmV0d2VlbiB3YWl0aW5nIGFuZCBzbGVlcGluZyBpcyByb3VnaGx5IHRoZSB0aW1lIGl0 CisJICogdGFrZXMgdG8gc2xlZXAgb24gYSByZXF1ZXN0LCBvbiB0aGUgb3JkZXIgb2YgYSBtaWNy b3NlY29uZC4KKwkgKi8KKworCS8qIE9ubHkgc3BpbiBpZiB3ZSBrbm93IHRoZSBHUFUgaXMgcHJv Y2Vzc2luZyB0aGlzIHJlcXVlc3QgKi8KKwlpZiAoIWk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChy ZXEpKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0aW1lb3V0ID0gbG9jYWxfY2xvY2tfdXMoJmNwdSkg KyA1OworCWRvIHsKKwkJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSkpCisJCQly ZXR1cm4gdHJ1ZTsKKworCQlpZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUoc3RhdGUsIHdhaXQtPnRh c2spKQorCQkJYnJlYWs7CisKKwkJaWYgKGJ1c3l3YWl0X3N0b3AodGltZW91dCwgY3B1KSkKKwkJ CWJyZWFrOworCisJCWNwdV9yZWxheF9sb3dsYXRlbmN5KCk7CisKKwkJLyogQnJlYWsgdGhlIGxv b3AgaWYgd2UgaGF2ZSBjb25zdW1lZCB0aGUgdGltZXNsaWNlIChvciBiZWVuCisJCSAqIHByZWVt cHRlZCkgb3Igd2hlbiBlaXRoZXIgdGhlIGJhY2tncm91bmQgdGhyZWFkIGhhcworCQkgKiBlbmFi bGVkIHRoZSBpbnRlcnJ1cHQsIG9yIHRoZSBJUlEgaGFzIGZpcmVkLgorCQkgKi8KKwl9IHdoaWxl ICghbmVlZF9yZXNjaGVkKCkgJiYgd2FpdC0+dGFzay0+c3RhdGUgPT0gc3RhdGUpOworCisJcmV0 dXJuIGZhbHNlOworfQorCisvKioKKyAqIF9faTkxNV93YWl0X3JlcXVlc3QgLSB3YWl0IHVudGls IGV4ZWN1dGlvbiBvZiByZXF1ZXN0IGhhcyBmaW5pc2hlZAorICogQHJlcTogZHVoIQorICogQGlu dGVycnVwdGlibGU6IGRvIGFuIGludGVycnVwdGlibGUgd2FpdCAobm9ybWFsbHkgeWVzKQorICog QHRpbWVvdXQ6IGluIC0gaG93IGxvbmcgdG8gd2FpdCAoTlVMTCBmb3JldmVyKTsgb3V0IC0gaG93 IG11Y2ggdGltZSByZW1haW5pbmcKKyAqCisgKiBOb3RlOiBJdCBpcyBvZiB1dG1vc3QgaW1wb3J0 YW5jZSB0aGF0IHRoZSBwYXNzZWQgaW4gc2Vxbm8gYW5kIHJlc2V0X2NvdW50ZXIKKyAqIHZhbHVl cyBoYXZlIGJlZW4gcmVhZCBieSB0aGUgY2FsbGVyIGluIGFuIHNtcCBzYWZlIG1hbm5lci4gV2hl cmUgcmVhZC1zaWRlCisgKiBsb2NrcyBhcmUgaW52b2x2ZWQsIGl0IGlzIHN1ZmZpY2llbnQgdG8g cmVhZCB0aGUgcmVzZXRfY291bnRlciBiZWZvcmUKKyAqIHVubG9ja2luZyB0aGUgbG9jayB0aGF0 IHByb3RlY3RzIHRoZSBzZXFuby4gRm9yIGxvY2tsZXNzIHRyaWNrcywgdGhlCisgKiByZXNldF9j b3VudGVyIF9tdXN0XyBiZSByZWFkIGJlZm9yZSwgYW5kIGFuIGFwcHJvcHJpYXRlIHNtcF9ybWIg bXVzdCBiZQorICogaW5zZXJ0ZWQuCisgKgorICogUmV0dXJucyAwIGlmIHRoZSByZXF1ZXN0IHdh cyBmb3VuZCB3aXRoaW4gdGhlIGFsbG90ZWQgdGltZS4gRWxzZSByZXR1cm5zIHRoZQorICogZXJy bm8gd2l0aCByZW1haW5pbmcgdGltZSBmaWxsZWQgaW4gdGltZW91dCBhcmd1bWVudC4KKyAqLwor aW50IF9faTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEs CisJCQlib29sIGludGVycnVwdGlibGUsCisJCQlzNjQgKnRpbWVvdXQsCisJCQlzdHJ1Y3QgaW50 ZWxfcnBzX2NsaWVudCAqcnBzKQoreworCWludCBzdGF0ZSA9IGludGVycnVwdGlibGUgPyBUQVNL X0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRTsKKwlzdHJ1Y3QgaW50ZWxfd2Fp dCB3YWl0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dF9yZW1haW47CisJaW50IHJldCA9IDA7CisK KwltaWdodF9zbGVlcCgpOworCisJaWYgKGxpc3RfZW1wdHkoJnJlcS0+bGlzdCkpCisJCXJldHVy biAwOworCisJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSkpCisJCXJldHVybiAw OworCisJdGltZW91dF9yZW1haW4gPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwlpZiAodGltZW91 dCkgeworCQlpZiAoV0FSTl9PTigqdGltZW91dCA8IDApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisK KwkJaWYgKCp0aW1lb3V0ID09IDApCisJCQlyZXR1cm4gLUVUSU1FOworCisJCS8qIFJlY29yZCBj dXJyZW50IHRpbWUgaW4gY2FzZSBpbnRlcnJ1cHRlZCwgb3Igd2VkZ2VkICovCisJCXRpbWVvdXRf cmVtYWluID0gbnNlY3NfdG9famlmZmllc190aW1lb3V0KCp0aW1lb3V0KTsKKwkJKnRpbWVvdXQg Kz0ga3RpbWVfZ2V0X3Jhd19ucygpOworCX0KKworCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfd2Fp dF9iZWdpbihyZXEpOworCisJLyogVGhpcyBjbGllbnQgaXMgYWJvdXQgdG8gc3RhbGwgd2FpdGlu ZyBmb3IgdGhlIEdQVS4gSW4gbWFueSBjYXNlcworCSAqIHRoaXMgaXMgdW5kZXNpcmFibGUgYW5k IGxpbWl0cyB0aGUgdGhyb3VnaHB1dCBvZiB0aGUgc3lzdGVtLCBhcworCSAqIG1hbnkgY2xpZW50 cyBjYW5ub3QgY29udGludWUgcHJvY2Vzc2luZyB1c2VyIGlucHV0L291dHB1dCB3aGlsc3QKKwkg KiBibG9ja2VkLiBSUFMgYXV0b3R1bmluZyBtYXkgdGFrZSB0ZW5zIG9mIG1pbGxpc2Vjb25kcyB0 byByZXNwb25kCisJICogdG8gdGhlIEdQVSBsb2FkIGFuZCB0aHVzIGluY3VycyBhZGRpdGlvbmFs IGxhdGVuY3kgZm9yIHRoZSBjbGllbnQuCisJICogV2UgY2FuIGNpcmN1bXZlbnQgdGhhdCBieSBw cm9tb3RpbmcgdGhlIEdQVSBmcmVxdWVuY3kgdG8gbWF4aW11bQorCSAqIGJlZm9yZSB3ZSB3YWl0 LiBUaGlzIG1ha2VzIHRoZSBHUFUgdGhyb3R0bGUgdXAgbXVjaCBtb3JlIHF1aWNrbHkKKwkgKiAo Z29vZCBmb3IgYmVuY2htYXJrcyBhbmQgdXNlciBleHBlcmllbmNlLCBlLmcuIHdpbmRvdyBhbmlt YXRpb25zKSwKKwkgKiBidXQgYXQgYSBjb3N0IG9mIHNwZW5kaW5nIG1vcmUgcG93ZXIgcHJvY2Vz c2luZyB0aGUgd29ya2xvYWQKKwkgKiAoYmFkIGZvciBiYXR0ZXJ5KS4gTm90IGFsbCBjbGllbnRz IGV2ZW4gd2FudCB0aGVpciByZXN1bHRzCisJICogaW1tZWRpYXRlbHkgYW5kIGZvciB0aGVtIHdl IHNob3VsZCBqdXN0IGxldCB0aGUgR1BVIHNlbGVjdCBpdHMgb3duCisJICogZnJlcXVlbmN5IHRv IG1heGltaXNlIGVmZmljaWVuY3kuIFRvIHByZXZlbnQgYSBzaW5nbGUgY2xpZW50IGZyb20KKwkg KiBmb3JjaW5nIHRoZSBjbG9ja3MgdG9vIGhpZ2ggZm9yIHRoZSB3aG9sZSBzeXN0ZW0sIHdlIG9u bHkgYWxsb3cKKwkgKiBlYWNoIGNsaWVudCB0byB3YWl0Ym9vc3Qgb25jZSBpbiBhIGJ1c3kgcGVy aW9kLgorCSAqLworCWlmIChJTlRFTF9JTkZPKHJlcS0+aTkxNSktPmdlbiA+PSA2KQorCQlnZW42 X3Jwc19ib29zdChyZXEtPmk5MTUsIHJwcywgcmVxLT5lbWl0dGVkX2ppZmZpZXMpOworCisJaW50 ZWxfd2FpdF9pbml0KCZ3YWl0LCByZXEtPnNlcW5vKTsKKwlzZXRfdGFza19zdGF0ZSh3YWl0LnRh c2ssIHN0YXRlKTsKKworCS8qIE9wdGltaXN0aWMgc3BpbiBmb3IgdGhlIG5leHQgfmppZmZpZSBi ZWZvcmUgdG91Y2hpbmcgSVJRcyAqLworCWlmIChpbnRlbF9lbmdpbmVfYWRkX3dhaXQocmVxLT5y aW5nLCAmd2FpdCkpIHsKKwkJaWYgKF9faTkxNV9zcGluX3JlcXVlc3QocmVxLCAmd2FpdCwgc3Rh dGUpKQorCQkJZ290byBvdXQ7CisKKwkJaW50ZWxfZW5naW5lX2VuYWJsZV9pcnEocmVxLT5yaW5n KTsKKworCQkvKiBJbiBvcmRlciB0byBjaGVjayB0aGF0IHdlIGhhdmVuJ3QgbWlzc2VkIHRoZSBp bnRlcnJ1cHQKKwkJICogYXMgd2UgZW5hYmxlZCBpdCwgd2UgbmVlZCB0byBraWNrIG91cnNlbHZl cyB0byBkbyBhCisJCSAqIGNvaGVyZW50IGNoZWNrIG9uIHRoZSBzZXFubyBiZWZvcmUgd2Ugc2xl ZXAuCisJCSAqLworCQlnb3RvIHdha2V1cDsKKwl9CisKKwlmb3IgKDs7KSB7CisJCWlmIChzaWdu YWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgd2FpdC50YXNrKSkgeworCQkJcmV0ID0gLUVSRVNUQVJU U1lTOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBFbnN1cmUgdGhhdCBldmVuIGlmIHRoZSBHUFUg aGFuZ3MsIHdlIGdldCB3b2tlbiB1cC4gKi8KKwkJaTkxNV9xdWV1ZV9oYW5nY2hlY2socmVxLT5p OTE1KTsKKworCQl0aW1lb3V0X3JlbWFpbiA9IGlvX3NjaGVkdWxlX3RpbWVvdXQodGltZW91dF9y ZW1haW4pOworCQlpZiAodGltZW91dF9yZW1haW4gPT0gMCkgeworCQkJcmV0ID0gLUVUSU1FOwor CQkJYnJlYWs7CisJCX0KKworCQlpZiAoaW50ZWxfd2FpdF9jb21wbGV0ZSgmd2FpdCkpCisJCQli cmVhazsKKword2FrZXVwOgkJc2V0X3Rhc2tfc3RhdGUod2FpdC50YXNrLCBzdGF0ZSk7CisKKwkJ LyogQmVmb3JlIHdlIGRvIHRoZSBoZWF2aWVyIGNvaGVyZW50IHJlYWQgb2YgdGhlIHNlcW5vLAor CQkgKiBjaGVjayB0aGUgdmFsdWUgKGhvcGVmdWxseSkgaW4gdGhlIENQVSBjYWNoZWxpbmUuCisJ CSAqLworCQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKKwkJCWJyZWFrOwor CisJCS8qIEVuc3VyZSBvdXIgcmVhZCBvZiB0aGUgc2Vxbm8gaXMgY29oZXJlbnQgc28gdGhhdCB3 ZQorCQkgKiBkbyBub3QgIm1pc3MgYW4gaW50ZXJydXB0IiAoaS5lLiBpZiB0aGlzIGlzIHRoZSBs YXN0CisJCSAqIHJlcXVlc3QgYW5kIHRoZSBzZXFubyB3cml0ZSBmcm9tIHRoZSBHUFUgaXMgbm90 IHZpc2libGUKKwkJICogYnkgdGhlIHRpbWUgdGhlIGludGVycnVwdCBmaXJlcywgd2Ugd2lsbCBz ZWUgdGhhdCB0aGUKKwkJICogcmVxdWVzdCBpcyBpbmNvbXBsZXRlIGFuZCBnbyBiYWNrIHRvIHNs ZWVwIGF3YWl0aW5nCisJCSAqIGFub3RoZXIgaW50ZXJydXB0IHRoYXQgd2lsbCBuZXZlciBjb21l LikKKwkJICoKKwkJICogU3RyaWN0bHksIHdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UgYWZ0 ZXIgYW4gaW50ZXJydXB0LAorCQkgKiBidXQgaXQgaXMgZWFzaWVyIGFuZCBzYWZlciB0byBkbyBp dCBldmVyeSB0aW1lIHRoZSB3YWl0ZXIKKwkJICogaXMgd29rZW4uCisJCSAqLworCQlpZiAocmVx LT5yaW5nLT5zZXFub19iYXJyaWVyKSB7CisJCQlyZXEtPnJpbmctPnNlcW5vX2JhcnJpZXIocmVx LT5yaW5nKTsKKwkJCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpKQorCQkJCWJy ZWFrOworCQl9CisKKwkJLyogV2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBncHUgcmVzZXQg aGFwcGVuZWQgaW4gYmV0d2VlbgorCQkgKiB0aGUgcmVxdWVzdCBiZWluZyBzdWJtaXR0ZWQgYW5k IG5vdy4gSWYgYSByZXNldCBoYXMgb2NjdXJyZWQsCisJCSAqIHRoZSByZXF1ZXN0IGlzIGVmZmVj dGl2ZWx5IGNvbXBsZXRlICh3ZSBlaXRoZXIgYXJlIGluIHRoZQorCQkgKiBwcm9jZXNzIG9mIG9y IGhhdmUgZGlzY2FyZGVkIHRoZSByZW5kZXJpbmcgYW5kIGNvbXBsZXRlbHkKKwkJICogcmVzZXQg dGhlIEdQVS4gVGhlIHJlc3VsdHMgb2YgdGhlIHJlcXVlc3QgYXJlIGxvc3QgYW5kIHdlCisJCSAq IGFyZSBmcmVlIHRvIGNvbnRpbnVlIG9uIHdpdGggdGhlIG9yaWdpbmFsIG9wZXJhdGlvbi4KKwkJ ICovCisJCWlmIChyZXEtPnJlc2V0X2NvdW50ZXIgIT0gaTkxNV9yZXNldF9jb3VudGVyKCZyZXEt Pmk5MTUtPmdwdV9lcnJvcikpCisJCQlicmVhazsKKwl9CitvdXQ6CisJaW50ZWxfZW5naW5lX3Jl bW92ZV93YWl0KHJlcS0+cmluZywgJndhaXQpOworCV9fc2V0X3Rhc2tfc3RhdGUod2FpdC50YXNr LCBUQVNLX1JVTk5JTkcpOworCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQocmVxKTsK KworCWlmICh0aW1lb3V0KSB7CisJCSp0aW1lb3V0IC09IGt0aW1lX2dldF9yYXdfbnMoKTsKKwkJ aWYgKCp0aW1lb3V0IDwgMCkKKwkJCSp0aW1lb3V0ID0gMDsKKworCQkvKgorCQkgKiBBcHBhcmVu dGx5IGt0aW1lIGlzbid0IGFjY3VyYXRlIGVub3VnaCBhbmQgb2NjYXNpb25hbGx5IGhhcyBhCisJ CSAqIGJpdCBvZiBtaXNtYXRjaCBpbiB0aGUgamlmZmllczwtPm5zZWNzPC0+a3RpbWUgbG9vcC4g U28gcGF0Y2gKKwkJICogdGhpbmdzIHVwIHRvIG1ha2UgdGhlIHRlc3QgaGFwcHkuIFdlIGFsbG93 IHVwIHRvIDEgamlmZnkuCisJCSAqCisJCSAqIFRoaXMgaXMgYSByZWdyc3Npb24gZnJvbSB0aGUg dGltZXNwZWMtPmt0aW1lIGNvbnZlcnNpb24uCisJCSAqLworCQlpZiAocmV0ID09IC1FVElNRSAm JiAqdGltZW91dCA8IGppZmZpZXNfdG9fdXNlY3MoMSkqMTAwMCkKKwkJCSp0aW1lb3V0ID0gMDsK Kwl9CisKKwlpZiAocmV0ID09IDAgJiYgcnBzICYmIHJlcS0+c2Vxbm8gPT0gcmVxLT5yaW5nLT5s YXN0X3N1Ym1pdHRlZF9zZXFubykgeworCQkvKiBUaGUgR1BVIGlzIG5vdyBpZGxlIGFuZCB0aGlz IGNsaWVudCBoYXMgc3RhbGxlZC4KKwkJICogU2luY2Ugbm8gb3RoZXIgY2xpZW50IGhhcyBzdWJt aXR0ZWQgYSByZXF1ZXN0IGluIHRoZQorCQkgKiBtZWFudGltZSwgYXNzdW1lIHRoYXQgdGhpcyBj bGllbnQgaXMgdGhlIG9ubHkgb25lCisJCSAqIHN1cHBseWluZyB3b3JrIHRvIHRoZSBHUFUgYnV0 IGlzIHVuYWJsZSB0byBrZWVwIHRoYXQKKwkJICogd29yayBzdXBwbGllZCBiZWNhdXNlIGl0IGlz IHdhaXRpbmcuIFNpbmNlIHRoZSBHUFUgaXMKKwkJICogdGhlbiBuZXZlciBrZXB0IGZ1bGx5IGJ1 c3ksIFJQUyBhdXRvY2xvY2tpbmcgd2lsbAorCQkgKiBrZWVwIHRoZSBjbG9ja3MgcmVsYXRpdmVs eSBsb3csIGNhdXNpbmcgZnVydGhlciBkZWxheXMuCisJCSAqIENvbXBlbnNhdGUgYnkgZ2l2aW5n IHRoZSBzeW5jaHJvbm91cyBjbGllbnQgY3JlZGl0IGZvcgorCQkgKiBhIHdhaXRib29zdCBuZXh0 IHRpbWUuCisJCSAqLworCQlzcGluX2xvY2soJnJlcS0+aTkxNS0+cnBzLmNsaWVudF9sb2NrKTsK KwkJbGlzdF9kZWxfaW5pdCgmcnBzLT5saW5rKTsKKwkJc3Bpbl91bmxvY2soJnJlcS0+aTkxNS0+ cnBzLmNsaWVudF9sb2NrKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogV2Fp dHMgZm9yIGEgcmVxdWVzdCB0byBiZSBzaWduYWxlZCwgYW5kIGNsZWFucyB1cCB0aGUKKyAqIHJl cXVlc3QgYW5kIG9iamVjdCBsaXN0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGF0IGV2ZW50LgorICov CitpbnQKK2k5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2OworCWJvb2wgaW50ZXJydXB0aWJsZTsKKwlpbnQgcmV0OworCisJQlVHX09OKHJl cSA9PSBOVUxMKTsKKworCWRldiA9IHJlcS0+cmluZy0+ZGV2OworCWRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKwlpbnRlcnJ1cHRpYmxlID0gZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGU7 CisKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCXJl dCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCBpbnRlcnJ1cHRpYmxlLCBOVUxMLCBOVUxMKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmVfX3Vw dG8ocmVxKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2ZyZWUoc3Ry dWN0IGtyZWYgKnJlcV9yZWYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEg PSBjb250YWluZXJfb2YocmVxX3JlZiwKKwkJCQkJCSB0eXBlb2YoKnJlcSksIHJlZik7CisJc3Ry dWN0IGludGVsX2NvbnRleHQgKmN0eCA9IHJlcS0+Y3R4OworCisJaWYgKHJlcS0+ZmlsZV9wcml2 KQorCQlpOTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChyZXEpOworCisJaWYgKGN0 eCkgeworCQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKSB7CisJCQlpZiAoY3R4ICE9IHJlcS0+ cmluZy0+ZGVmYXVsdF9jb250ZXh0KQorCQkJCWludGVsX2xyX2NvbnRleHRfdW5waW4ocmVxKTsK KwkJfQorCisJCWk5MTVfZ2VtX2NvbnRleHRfdW5yZWZlcmVuY2UoY3R4KTsKKwl9CisKKwlrbWVt X2NhY2hlX2ZyZWUocmVxLT5pOTE1LT5yZXF1ZXN0cywgcmVxKTsKK30KKwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uNzVjOTAxNWMxOWRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJp Z2h0IMKpIDIwMDgtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBJOTE1X0dFTV9SRVFV RVNUX0gKKyNkZWZpbmUgSTkxNV9HRU1fUkVRVUVTVF9ICisKKy8qKgorICogUmVxdWVzdCBxdWV1 ZSBzdHJ1Y3R1cmUuCisgKgorICogVGhlIHJlcXVlc3QgcXVldWUgYWxsb3dzIHVzIHRvIG5vdGUg c2VxdWVuY2UgbnVtYmVycyB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkCisgKiBhbmQgbWF5IGJlIGFz c29jaWF0ZWQgd2l0aCBhY3RpdmUgYnVmZmVycyB0byBiZSByZXRpcmVkLgorICoKKyAqIEJ5IGtl ZXBpbmcgdGhpcyBsaXN0LCB3ZSBjYW4gYXZvaWQgaGF2aW5nIHRvIGRvIHF1ZXN0aW9uYWJsZSBz ZXF1ZW5jZQorICogbnVtYmVyIGNvbXBhcmlzb25zIG9uIGJ1ZmZlciBsYXN0X3JlYWR8d3JpdGVf c2Vxbm8uIEl0IGFsc28gYWxsb3dzIGFuCisgKiBlbWlzc2lvbiB0aW1lIHRvIGJlIGFzc29jaWF0 ZWQgd2l0aCB0aGUgcmVxdWVzdCBmb3IgdHJhY2tpbmcgaG93IGZhciBhaGVhZAorICogb2YgdGhl IEdQVSB0aGUgc3VibWlzc2lvbiBpcy4KKyAqCisgKiBUaGUgcmVxdWVzdHMgYXJlIHJlZmVyZW5j ZSBjb3VudGVkLCBzbyB1cG9uIGNyZWF0aW9uIHRoZXkgc2hvdWxkIGhhdmUgYW4KKyAqIGluaXRp YWwgcmVmZXJlbmNlIHRha2VuIHVzaW5nIGtyZWZfaW5pdAorICovCitzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgeworCXN0cnVjdCBrcmVmIHJlZjsKKworCS8qKiBPbiBXaGljaCByaW5nIHRo aXMgcmVxdWVzdCB3YXMgZ2VuZXJhdGVkICovCisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTU7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKKwl1bnNpZ25lZCByZXNldF9jb3Vu dGVyOworCisJIC8qKiBHRU0gc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJl dmlvdXMgcmVxdWVzdCwKKwkgICogd2hlbiB0aGUgSFdTIGJyZWFkY3J1bWIgaXMgZXF1YWwgdG8g dGhpcyB0aGUgR1BVIGlzIHByb2Nlc3NpbmcKKwkgICogdGhpcyByZXF1ZXN0LgorCSAgKi8KKwl1 MzIgcHJldmlvdXNfc2Vxbm87CisKKwkgLyoqIEdFTSBzZXF1ZW5jZSBudW1iZXIgYXNzb2NpYXRl ZCB3aXRoIHRoaXMgcmVxdWVzdCwKKwkgICogd2hlbiB0aGUgSFdTIGJyZWFkY3J1bWIgaXMgZXF1 YWwgb3IgZ3JlYXRlciB0aGFuIHRoaXMgdGhlIEdQVQorCSAgKiBoYXMgZmluaXNoZWQgcHJvY2Vz c2luZyB0aGlzIHJlcXVlc3QuCisJICAqLworCXUzMiBzZXFubzsKKworCS8qKiBQb3NpdGlvbiBp biB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3QgKi8KKwl1MzIgaGVh ZDsKKworCS8qKgorCSAqIFBvc2l0aW9uIGluIHRoZSByaW5nYnVmZmVyIG9mIHRoZSBzdGFydCBv ZiB0aGUgcG9zdGZpeC4KKwkgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGNhbGN1bGF0ZSB0aGUgbWF4 aW11bSBhdmFpbGFibGUgcmluZ2J1ZmZlcgorCSAqIHNwYWNlIHdpdGhvdXQgb3ZlcndyaXRpbmcg dGhlIHBvc3RmaXguCisJICovCisJIHUzMiBwb3N0Zml4OworCisJLyoqIFBvc2l0aW9uIGluIHRo ZSByaW5nYnVmZmVyIG9mIHRoZSBlbmQgb2YgdGhlIHdob2xlIHJlcXVlc3QgKi8KKwl1MzIgdGFp bDsKKworCS8qKgorCSAqIENvbnRleHQgYW5kIHJpbmcgYnVmZmVyIHJlbGF0ZWQgdG8gdGhpcyBy ZXF1ZXN0CisJICogQ29udGV4dHMgYXJlIHJlZmNvdW50ZWQsIHNvIHdoZW4gdGhpcyByZXF1ZXN0 IGlzIGFzc29jaWF0ZWQgd2l0aCBhCisJICogY29udGV4dCwgd2UgbXVzdCBpbmNyZW1lbnQgdGhl IGNvbnRleHQncyByZWZjb3VudCwgdG8gZ3VhcmFudGVlIHRoYXQKKwkgKiBpdCBwZXJzaXN0cyB3 aGlsZSBhbnkgcmVxdWVzdCBpcyBsaW5rZWQgdG8gaXQuIFJlcXVlc3RzIHRoZW1zZWx2ZXMKKwkg KiBhcmUgYWxzbyByZWZjb3VudGVkLCBzbyB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgZnJlZWQg d2hlbiB0aGUgbGFzdAorCSAqIHJlZmVyZW5jZSB0byBpdCBpcyBkaXNtaXNzZWQsIGFuZCB0aGUg Y29kZSBpbgorCSAqIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZSgpIHdpbGwgdGhlbiBkZWNyZW1lbnQg dGhlIHJlZmNvdW50IG9uIHRoZQorCSAqIGNvbnRleHQuCisJICovCisJc3RydWN0IGludGVsX2Nv bnRleHQgKmN0eDsKKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZjsKKworCS8qKiBC YXRjaCBidWZmZXIgcmVsYXRlZCB0byB0aGlzIHJlcXVlc3QgaWYgYW55ICh1c2VkIGZvcgorCSAg ICBlcnJvciBzdGF0ZSBkdW1wIG9ubHkpICovCisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg KmJhdGNoX29iajsKKworCS8qKiBUaW1lIGF0IHdoaWNoIHRoaXMgcmVxdWVzdCB3YXMgZW1pdHRl ZCwgaW4gamlmZmllcy4gKi8KKwl1bnNpZ25lZCBsb25nIGVtaXR0ZWRfamlmZmllczsKKworCS8q KiBnbG9iYWwgbGlzdCBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCisJc3RydWN0IGxpc3RfaGVh ZCBsaXN0OworCisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2OworCS8q KiBmaWxlX3ByaXYgbGlzdCBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCisJc3RydWN0IGxpc3Rf aGVhZCBjbGllbnRfbGlzdDsKKworCS8qKiBwcm9jZXNzIGlkZW50aWZpZXIgc3VibWl0dGluZyB0 aGlzIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgcGlkICpwaWQ7CisKKwkvKioKKwkgKiBUaGUgRUxTUCBv bmx5IGFjY2VwdHMgdHdvIGVsZW1lbnRzIGF0IGEgdGltZSwgc28gd2UgcXVldWUKKwkgKiBjb250 ZXh0L3RhaWwgcGFpcnMgb24gYSBnaXZlbiBxdWV1ZSAocmluZy0+ZXhlY2xpc3RfcXVldWUpIHVu dGlsIHRoZQorCSAqIGhhcmR3YXJlIGlzIGF2YWlsYWJsZS4gVGhlIHF1ZXVlIHNlcnZlcyBhIGRv dWJsZSBwdXJwb3NlOiB3ZSBhbHNvIHVzZQorCSAqIGl0IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHVw IHRvIDIgY29udGV4dHMgY3VycmVudGx5IGluIHRoZSBoYXJkd2FyZQorCSAqICh1c3VhbGx5IG9u ZSBpbiBleGVjdXRpb24gYW5kIHRoZSBvdGhlciBxdWV1ZWQgdXAgYnkgdGhlIEdQVSk6IFdlCisJ ICogb25seSByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgaGVhZCBvZiB0aGUgcXVldWUgd2hlbiB0 aGUgaGFyZHdhcmUKKwkgKiBpbmZvcm1zIHVzIHRoYXQgYW4gZWxlbWVudCBoYXMgYmVlbiBjb21w bGV0ZWQuCisJICoKKwkgKiBBbGwgYWNjZXNzZXMgdG8gdGhlIHF1ZXVlIGFyZSBtZWRpYXRlZCBi eSBhIHNwaW5sb2NrCisJICogKHJpbmctPmV4ZWNsaXN0X2xvY2spLgorCSAqLworCisJLyoqIEV4 ZWNsaXN0IGxpbmsgaW4gdGhlIHN1Ym1pc3Npb24gcXVldWUuKi8KKwlzdHJ1Y3QgbGlzdF9oZWFk IGV4ZWNsaXN0X2xpbms7CisKKwkvKiogRXhlY2xpc3RzIG5vLiBvZiB0aW1lcyB0aGlzIHJlcXVl c3QgaGFzIGJlZW4gc2VudCB0byB0aGUgRUxTUCAqLworCWludCBlbHNwX3N1Ym1pdHRlZDsKKwor fTsKKworaW50IGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZywKKwkJCSAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsCisJCQkgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKipyZXFfb3V0KTsKK3ZvaWQgaTkxNV9nZW1fcmVxdWVzdF9jYW5j ZWwoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwordm9pZCBpOTE1X2dlbV9yZXF1 ZXN0X2ZyZWUoc3RydWN0IGtyZWYgKnJlcV9yZWYpOworaW50IGk5MTVfZ2VtX3JlcXVlc3RfYWRk X3RvX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJCQkgICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUpOwordm9pZCBpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV9fdXB0byhz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDMy X3QKK2k5MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5vKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKQoreworCXJldHVybiByZXEgPyByZXEtPnNlcW5vIDogMDsKK30KKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2k5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmco c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIHJlcSA/IHJlcS0+ cmluZyA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICoKK2k5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxKQoreworCWlmIChyZXEpCisJCWtyZWZfZ2V0KCZyZXEtPnJlZik7CisJcmV0dXJu IHJlcTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJl bmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQoreworCVdBUk5fT04oIW11dGV4 X2lzX2xvY2tlZCgmcmVxLT5yaW5nLT5kZXYtPnN0cnVjdF9tdXRleCkpOworCWtyZWZfcHV0KCZy ZXEtPnJlZiwgaTkxNV9nZW1fcmVxdWVzdF9mcmVlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlX191bmxvY2tlZChzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJaWYgKCFy ZXEpCisJCXJldHVybjsKKworCWRldiA9IHJlcS0+cmluZy0+ZGV2OworCWlmIChrcmVmX3B1dF9t dXRleCgmcmVxLT5yZWYsIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZSwgJmRldi0+c3RydWN0X211dGV4 KSkKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKipwZHN0LAorCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnNyYykKK3sK KwlpZiAoc3JjKQorCQlpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShzcmMpOworCisJaWYgKCpw ZHN0KQorCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKCpwZHN0KTsKKworCSpwZHN0ID0g c3JjOworfQorCisvKioKKyAqIFJldHVybnMgdHJ1ZSBpZiBzZXExIGlzIGxhdGVyIHRoYW4gc2Vx Mi4KKyAqLworc3RhdGljIGlubGluZSBib29sCitpOTE1X3NlcW5vX3Bhc3NlZCh1aW50MzJfdCBz ZXExLCB1aW50MzJfdCBzZXEyKQoreworCXJldHVybiAoaW50MzJfdCkoc2VxMSAtIHNlcTIpID49 IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X2dlbV9yZXF1ZXN0X3N0YXJ0ZWQoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGk5MTVfc2Vxbm9fcGFz c2VkKGludGVsX3JpbmdfZ2V0X3NlcW5vKHJlcS0+cmluZyksCisJCQkJIHJlcS0+cHJldmlvdXNf c2Vxbm8pOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0 ZWQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGk5MTVfc2Vx bm9fcGFzc2VkKGludGVsX3JpbmdfZ2V0X3NlcW5vKHJlcS0+cmluZyksCisJCQkJIHJlcS0+c2Vx bm8pOworfQorCisKKyNlbmRpZiAvKiBJOTE1X0dFTV9SRVFVRVNUX0ggKi8KLS0gCjIuNi4zCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=