From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 2/7] drm/v3d: Refactor job management. Date: Mon, 1 Apr 2019 15:26:30 -0700 Message-ID: <20190401222635.25013-3-eric@anholt.net> References: <20190401222635.25013-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id 74B216E294 for ; Mon, 1 Apr 2019 22:26:48 +0000 (UTC) In-Reply-To: <20190401222635.25013-1-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: thomas.spurden@broadcom.com, linux-kernel@vger.kernel.org, david.emett@broadcom.com, Qiang Yu List-Id: dri-devel@lists.freedesktop.org VGhlIENMIHN1Ym1pc3Npb24gaGFkIHR3byBqb2JzIGVtYmVkZGVkIGluIGFuIGV4ZWMgc3RydWN0 LiAgV2hlbiBJCmFkZGVkIFRGVSBzdXBwb3J0LCBJIGhhZCB0byByZXBsaWNhdGUgc29tZSBvZiB0 aGUgZXhlYyBzdHVmZiBhbmQgc29tZQpvZiB0aGUgam9iIHN0dWZmLiAgQXMgSSB3ZW50IHRvIGFk ZCBDU0QsIGl0IGJlY2FtZSBjbGVhciB0aGF0IGFjdHVhbGx5CndoYXQgd2FzIGluIGV4ZWMgc2hv dWxkIGp1c3QgYmUgaW4gdGhlIHR3byBDTCBqb2JzLCBhbmQgaXQgd291bGQgbGV0CnVzIHNoYXJl IGEgbG90IG1vcmUgY29kZSBiZXR3ZWVuIHRoZSA0IHF1ZXVlcy4KClNpZ25lZC1vZmYtYnk6IEVy aWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rf ZHJ2LmggICB8ICA3NyArKystLS0tCiBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9nZW0uYyAgIHwg MzYyICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vdjNk L3YzZF9pcnEuYyAgIHwgICA4ICstCiBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jIHwg MjU5ICsrKysrKysrKysrKystLS0tLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDM3NiBpbnNlcnRp b25zKCspLCAzMzAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Yz ZC92M2RfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYuaAppbmRleCAyMzg0ODY5 MjUwOTYuLmFhMjFhNzBlNjg3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rf ZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmgKQEAgLTczLDggKzczLDgg QEAgc3RydWN0IHYzZF9kZXYgewogCiAJc3RydWN0IHdvcmtfc3RydWN0IG92ZXJmbG93X21lbV93 b3JrOwogCi0Jc3RydWN0IHYzZF9leGVjX2luZm8gKmJpbl9qb2I7Ci0Jc3RydWN0IHYzZF9leGVj X2luZm8gKnJlbmRlcl9qb2I7CisJc3RydWN0IHYzZF9iaW5fam9iICpiaW5fam9iOworCXN0cnVj dCB2M2RfcmVuZGVyX2pvYiAqcmVuZGVyX2pvYjsKIAlzdHJ1Y3QgdjNkX3RmdV9qb2IgKnRmdV9q b2I7CiAKIAlzdHJ1Y3QgdjNkX3F1ZXVlX3N0YXRlIHF1ZXVlW1YzRF9NQVhfUVVFVUVTXTsKQEAg LTEyMyw3ICsxMjMsNyBAQCBzdHJ1Y3QgdjNkX2JvIHsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgbm9k ZTsKIAogCS8qIExpc3QgZW50cnkgZm9yIHRoZSBCTydzIHBvc2l0aW9uIGluCi0JICogdjNkX2V4 ZWNfaW5mby0+dW5yZWZfbGlzdAorCSAqIHYzZF9yZW5kZXJfam9iLT51bnJlZl9saXN0CiAJICov CiAJc3RydWN0IGxpc3RfaGVhZCB1bnJlZl9oZWFkOwogfTsKQEAgLTE2Myw3ICsxNjMsMTUgQEAg dG9fdjNkX2ZlbmNlKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQogc3RydWN0IHYzZF9qb2Igewog CXN0cnVjdCBkcm1fc2NoZWRfam9iIGJhc2U7CiAKLQlzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhl YzsKKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKworCXN0cnVjdCB2M2RfZGV2ICp2M2Q7CisKKwkv KiBUaGlzIGlzIHRoZSBhcnJheSBvZiBCT3MgdGhhdCB3ZXJlIGxvb2tlZCB1cCBhdCB0aGUgc3Rh cnQKKwkgKiBvZiBzdWJtaXNzaW9uLgorCSAqLworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKmJv OworCXUzMiBib19jb3VudDsKIAogCS8qIEFuIG9wdGlvbmFsIGZlbmNlIHVzZXJzcGFjZSBjYW4g cGFzcyBpbiBmb3IgdGhlIGpvYiB0byBkZXBlbmQgb24uICovCiAJc3RydWN0IGRtYV9mZW5jZSAq aW5fZmVuY2U7CkBAIC0xNzEsNTkgKzE3OSw1MyBAQCBzdHJ1Y3QgdjNkX2pvYiB7CiAJLyogdjNk IGZlbmNlIHRvIGJlIHNpZ25hbGVkIGJ5IElSUSBoYW5kbGVyIHdoZW4gdGhlIGpvYiBpcyBjb21w bGV0ZS4gKi8KIAlzdHJ1Y3QgZG1hX2ZlbmNlICppcnFfZmVuY2U7CiAKKwkvKiBzY2hlZHVsZXIg ZmVuY2UgZm9yIHdoZW4gdGhlIGpvYiBpcyBjb25zaWRlcmVkIGNvbXBsZXRlIGFuZAorCSAqIHRo ZSBCTyByZXNlcnZhdGlvbnMgY2FuIGJlIHJlbGVhc2VkLgorCSAqLworCXN0cnVjdCBkbWFfZmVu Y2UgKmRvbmVfZmVuY2U7CisKKwkvKiBDYWxsYmFjayBmb3IgdGhlIGZyZWVpbmcgb2YgdGhlIGpv YiBvbiByZWZjb3VudCBnb2luZyB0byAwLiAqLworCXZvaWQgKCpmcmVlKShzdHJ1Y3Qga3JlZiAq cmVmKTsKK307CisKK3N0cnVjdCB2M2RfYmluX2pvYiB7CisJc3RydWN0IHYzZF9qb2IgYmFzZTsK KwogCS8qIEdQVSB2aXJ0dWFsIGFkZHJlc3NlcyBvZiB0aGUgc3RhcnQvZW5kIG9mIHRoZSBDTCBq b2IuICovCiAJdTMyIHN0YXJ0LCBlbmQ7CiAKIAl1MzIgdGltZWRvdXRfY3RjYSwgdGltZWRvdXRf Y3RyYTsKLX07CiAKLXN0cnVjdCB2M2RfZXhlY19pbmZvIHsKLQlzdHJ1Y3QgdjNkX2RldiAqdjNk OworCS8qIENvcnJlc3BvbmRpbmcgcmVuZGVyIGpvYiwgZm9yIGF0dGFjaGluZyBvdXIgb3ZlcmZs b3cgbWVtb3J5LiAqLworCXN0cnVjdCB2M2RfcmVuZGVyX2pvYiAqcmVuZGVyOworCisJLyogU3Vi bWl0dGVkIHRpbGUgbWVtb3J5IGFsbG9jYXRpb24gc3RhcnQvc2l6ZSwgdGlsZSBzdGF0ZS4gKi8K Kwl1MzIgcW1hLCBxbXMsIHF0czsKK307CiAKLQlzdHJ1Y3QgdjNkX2pvYiBiaW4sIHJlbmRlcjsK K3N0cnVjdCB2M2RfcmVuZGVyX2pvYiB7CisJc3RydWN0IHYzZF9qb2IgYmFzZTsKIAotCS8qIEZl bmNlIGZvciB3aGVuIHRoZSBzY2hlZHVsZXIgY29uc2lkZXJzIHRoZSBiaW5uZXIgdG8gYmUKLQkg KiBkb25lLCBmb3IgcmVuZGVyIHRvIGRlcGVuZCBvbi4KKwkvKiBPcHRpb25hbCBmZW5jZSBmb3Ig dGhlIGJpbm5lciwgdG8gZGVwZW5kIG9uIGJlZm9yZSBzdGFydGluZworCSAqIG91ciBqb2IuCiAJ ICovCiAJc3RydWN0IGRtYV9mZW5jZSAqYmluX2RvbmVfZmVuY2U7CiAKLQkvKiBGZW5jZSBmb3Ig d2hlbiB0aGUgc2NoZWR1bGVyIGNvbnNpZGVycyB0aGUgcmVuZGVyIHRvIGJlCi0JICogZG9uZSwg Zm9yIHdoZW4gdGhlIEJPcyByZXNlcnZhdGlvbnMgc2hvdWxkIGJlIGNvbXBsZXRlLgotCSAqLwot CXN0cnVjdCBkbWFfZmVuY2UgKnJlbmRlcl9kb25lX2ZlbmNlOwotCi0Jc3RydWN0IGtyZWYgcmVm Y291bnQ7CisJLyogR1BVIHZpcnR1YWwgYWRkcmVzc2VzIG9mIHRoZSBzdGFydC9lbmQgb2YgdGhl IENMIGpvYi4gKi8KKwl1MzIgc3RhcnQsIGVuZDsKIAotCS8qIFRoaXMgaXMgdGhlIGFycmF5IG9m IEJPcyB0aGF0IHdlcmUgbG9va2VkIHVwIGF0IHRoZSBzdGFydCBvZiBleGVjLiAqLwotCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqKmJvOwotCXUzMiBib19jb3VudDsKKwl1MzIgdGltZWRvdXRfY3Rj YSwgdGltZWRvdXRfY3RyYTsKIAogCS8qIExpc3Qgb2Ygb3ZlcmZsb3cgQk9zIHVzZWQgaW4gdGhl IGpvYiB0aGF0IG5lZWQgdG8gYmUKIAkgKiByZWxlYXNlZCBvbmNlIHRoZSBqb2IgaXMgY29tcGxl dGUuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCB1bnJlZl9saXN0OwotCi0JLyogU3VibWl0dGVk IHRpbGUgbWVtb3J5IGFsbG9jYXRpb24gc3RhcnQvc2l6ZSwgdGlsZSBzdGF0ZS4gKi8KLQl1MzIg cW1hLCBxbXMsIHF0czsKIH07CiAKIHN0cnVjdCB2M2RfdGZ1X2pvYiB7Ci0Jc3RydWN0IGRybV9z Y2hlZF9qb2IgYmFzZTsKKwlzdHJ1Y3QgdjNkX2pvYiBiYXNlOwogCiAJc3RydWN0IGRybV92M2Rf c3VibWl0X3RmdSBhcmdzOwotCi0JLyogQW4gb3B0aW9uYWwgZmVuY2UgdXNlcnNwYWNlIGNhbiBw YXNzIGluIGZvciB0aGUgam9iIHRvIGRlcGVuZCBvbi4gKi8KLQlzdHJ1Y3QgZG1hX2ZlbmNlICpp bl9mZW5jZTsKLQotCS8qIHYzZCBmZW5jZSB0byBiZSBzaWduYWxlZCBieSBJUlEgaGFuZGxlciB3 aGVuIHRoZSBqb2IgaXMgY29tcGxldGUuICovCi0Jc3RydWN0IGRtYV9mZW5jZSAqaXJxX2ZlbmNl OwotCi0Jc3RydWN0IHYzZF9kZXYgKnYzZDsKLQotCXN0cnVjdCBrcmVmIHJlZmNvdW50OwotCi0J LyogVGhpcyBpcyB0aGUgYXJyYXkgb2YgQk9zIHRoYXQgd2VyZSBsb29rZWQgdXAgYXQgdGhlIHN0 YXJ0IG9mIGV4ZWMuICovCi0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpib1s0XTsKIH07CiAKIC8q KgpAQCAtMjg5LDggKzI5MSw3IEBAIGludCB2M2Rfc3VibWl0X3RmdV9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KTsKIGludCB2M2Rfd2FpdF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci12b2lkIHYzZF9leGVj X3B1dChzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYyk7Ci12b2lkIHYzZF90ZnVfam9iX3B1dChz dHJ1Y3QgdjNkX3RmdV9qb2IgKmV4ZWMpOwordm9pZCB2M2Rfam9iX3B1dChzdHJ1Y3QgdjNkX2pv YiAqam9iKTsKIHZvaWQgdjNkX3Jlc2V0KHN0cnVjdCB2M2RfZGV2ICp2M2QpOwogdm9pZCB2M2Rf aW52YWxpZGF0ZV9jYWNoZXMoc3RydWN0IHYzZF9kZXYgKnYzZCk7CiAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92M2QvdjNkX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZ2Vt LmMKaW5kZXggYWEwMzk3ZDEyODQ3Li5kZDQ2NzlhNTM2YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS92M2QvdjNkX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2dlbS5j CkBAIC0xOTMsMTggKzE5Myw2IEBAIHYzZF9pbnZhbGlkYXRlX2NhY2hlcyhzdHJ1Y3QgdjNkX2Rl diAqdjNkKQogCXYzZF9pbnZhbGlkYXRlX3NsaWNlcyh2M2QsIDApOwogfQogCi1zdGF0aWMgdm9p ZAotdjNkX2F0dGFjaF9vYmplY3RfZmVuY2VzKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKmJvcywg aW50IGJvX2NvdW50LAotCQkJIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQotewotCWludCBpOwot Ci0JZm9yIChpID0gMDsgaSA8IGJvX2NvdW50OyBpKyspIHsKLQkJLyogWFhYOiBVc2Ugc2hhcmVk IGZlbmNlcyBmb3IgcmVhZC1vbmx5IG9iamVjdHMuICovCi0JCXJlc2VydmF0aW9uX29iamVjdF9h ZGRfZXhjbF9mZW5jZShib3NbaV0tPnJlc3YsIGZlbmNlKTsKLQl9Ci19Ci0KIC8qIFRha2VzIHRo ZSByZXNlcnZhdGlvbiBsb2NrIG9uIGFsbCB0aGUgQk9zIGJlaW5nIHJlZmVyZW5jZWQsIHNvIHRo YXQKICAqIGF0IHF1ZXVlIHN1Ym1pdCB0aW1lIHdlIGNhbiB1cGRhdGUgdGhlIHJlc2VydmF0aW9u cy4KICAqCkBAIC0yMzksMTEgKzIyNywxMSBAQCB2M2RfbG9ja19ib19yZXNlcnZhdGlvbnMoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zLAogfQogCiAvKioKLSAqIHYzZF9jbF9sb29rdXBfYm9z KCkgLSBTZXRzIHVwIGV4ZWMtPmJvW10gd2l0aCB0aGUgR0VNIG9iamVjdHMKKyAqIHYzZF9sb29r dXBfYm9zKCkgLSBTZXRzIHVwIGpvYi0+Ym9bXSB3aXRoIHRoZSBHRU0gb2JqZWN0cwogICogcmVm ZXJlbmNlZCBieSB0aGUgam9iLgogICogQGRldjogRFJNIGRldmljZQogICogQGZpbGVfcHJpdjog RFJNIGZpbGUgZm9yIHRoaXMgZmQKLSAqIEBleGVjOiBWM0Qgam9iIGJlaW5nIHNldCB1cAorICog QGpvYjogVjNEIGpvYiBiZWluZyBzZXQgdXAKICAqCiAgKiBUaGUgY29tbWFuZCB2YWxpZGF0b3Ig bmVlZHMgdG8gcmVmZXJlbmNlIEJPcyBieSB0aGVpciBpbmRleCB3aXRoaW4KICAqIHRoZSBzdWJt aXR0ZWQgam9iJ3MgQk8gbGlzdC4gIFRoaXMgZG9lcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgam9i J3MKQEAgLTI1MywxOCArMjQxLDE5IEBAIHYzZF9sb2NrX2JvX3Jlc2VydmF0aW9ucyhzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKipib3MsCiAgKiBmYWlsdXJlLCBiZWNhdXNlIHRoYXQgd2lsbCBoYXBw ZW4gYXQgdjNkX2V4ZWNfY2xlYW51cCgpIHRpbWUuCiAgKi8KIHN0YXRpYyBpbnQKLXYzZF9jbF9s b29rdXBfYm9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYsCi0JCSAgc3RydWN0IGRybV92M2Rfc3VibWl0X2NsICphcmdzLAotCQkgIHN0cnVj dCB2M2RfZXhlY19pbmZvICpleGVjKQordjNkX2xvb2t1cF9ib3Moc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKKwkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJICAgICAgIHN0cnVj dCB2M2Rfam9iICpqb2IsCisJICAgICAgIHU2NCBib19oYW5kbGVzLAorCSAgICAgICB1MzIgYm9f Y291bnQpCiB7CiAJdTMyICpoYW5kbGVzOwogCWludCByZXQgPSAwOwogCWludCBpOwogCi0JZXhl Yy0+Ym9fY291bnQgPSBhcmdzLT5ib19oYW5kbGVfY291bnQ7CisJam9iLT5ib19jb3VudCA9IGJv X2NvdW50OwogCi0JaWYgKCFleGVjLT5ib19jb3VudCkgeworCWlmICgham9iLT5ib19jb3VudCkg ewogCQkvKiBTZWUgY29tbWVudCBvbiBib19pbmRleCBmb3Igd2h5IHdlIGhhdmUgdG8gY2hlY2sK IAkJICogdGhpcy4KIAkJICovCkBAIC0yNzIsMTUgKzI2MSwxNSBAQCB2M2RfY2xfbG9va3VwX2Jv cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlleGVj LT5ibyA9IGt2bWFsbG9jX2FycmF5KGV4ZWMtPmJvX2NvdW50LAotCQkJCSAgc2l6ZW9mKHN0cnVj dCBkcm1fZ2VtX2NtYV9vYmplY3QgKiksCi0JCQkJICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7 Ci0JaWYgKCFleGVjLT5ibykgeworCWpvYi0+Ym8gPSBrdm1hbGxvY19hcnJheShqb2ItPmJvX2Nv dW50LAorCQkJCSBzaXplb2Yoc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqKSwKKwkJCQkgR0ZQ X0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCWlmICgham9iLT5ibykgewogCQlEUk1fREVCVUcoIkZh aWxlZCB0byBhbGxvY2F0ZSB2YWxpZGF0ZWQgQk8gcG9pbnRlcnNcbiIpOwogCQlyZXR1cm4gLUVO T01FTTsKIAl9CiAKLQloYW5kbGVzID0ga3ZtYWxsb2NfYXJyYXkoZXhlYy0+Ym9fY291bnQsIHNp emVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwloYW5kbGVzID0ga3ZtYWxsb2NfYXJyYXkoam9iLT5i b19jb3VudCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwogCWlmICghaGFuZGxlcykgewogCQly ZXQgPSAtRU5PTUVNOwogCQlEUk1fREVCVUcoIkZhaWxlZCB0byBhbGxvY2F0ZSBpbmNvbWluZyBH RU0gaGFuZGxlc1xuIik7CkBAIC0yODgsMTUgKzI3NywxNSBAQCB2M2RfY2xfbG9va3VwX2Jvcyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCX0KIAogCWlmIChjb3B5X2Zyb21fdXNlcihoYW5kbGVz LAotCQkJICAgKHZvaWQgX191c2VyICopKHVpbnRwdHJfdClhcmdzLT5ib19oYW5kbGVzLAotCQkJ ICAgZXhlYy0+Ym9fY291bnQgKiBzaXplb2YodTMyKSkpIHsKKwkJCSAgICh2b2lkIF9fdXNlciAq KSh1aW50cHRyX3QpYm9faGFuZGxlcywKKwkJCSAgIGpvYi0+Ym9fY291bnQgKiBzaXplb2YodTMy KSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gY29weSBpbiBH RU0gaGFuZGxlc1xuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAlzcGluX2xvY2soJmZpbGVfcHJp di0+dGFibGVfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IGV4ZWMtPmJvX2NvdW50OyBpKyspIHsK Kwlmb3IgKGkgPSAwOyBpIDwgam9iLT5ib19jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqYm8gPSBpZHJfZmluZCgmZmlsZV9wcml2LT5vYmplY3RfaWRyLAogCQkJCQkJICAg ICBoYW5kbGVzW2ldKTsKIAkJaWYgKCFibykgewpAQCAtMzA3LDcgKzI5Niw3IEBAIHYzZF9jbF9s b29rdXBfYm9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQlnb3RvIGZhaWw7CiAJCX0KIAkJ ZHJtX2dlbV9vYmplY3RfZ2V0KGJvKTsKLQkJZXhlYy0+Ym9baV0gPSBibzsKKwkJam9iLT5ib1tp XSA9IGJvOwogCX0KIAlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKIApAQCAt MzE3LDY3ICszMDYsNDQgQEAgdjNkX2NsX2xvb2t1cF9ib3Moc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIH0KIAogc3RhdGljIHZvaWQKLXYzZF9leGVjX2NsZWFudXAoc3RydWN0IGtyZWYgKnJlZikK K3YzZF9qb2JfZnJlZShzdHJ1Y3Qga3JlZiAqcmVmKQogewotCXN0cnVjdCB2M2RfZXhlY19pbmZv ICpleGVjID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IHYzZF9leGVjX2luZm8sCi0JCQkJCQkg IHJlZmNvdW50KTsKLQlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gZXhlYy0+djNkOwotCXVuc2lnbmVk IGludCBpOwotCXN0cnVjdCB2M2RfYm8gKmJvLCAqc2F2ZTsKLQotCWRtYV9mZW5jZV9wdXQoZXhl Yy0+YmluLmluX2ZlbmNlKTsKLQlkbWFfZmVuY2VfcHV0KGV4ZWMtPnJlbmRlci5pbl9mZW5jZSk7 Ci0KLQlkbWFfZmVuY2VfcHV0KGV4ZWMtPmJpbi5pcnFfZmVuY2UpOwotCWRtYV9mZW5jZV9wdXQo ZXhlYy0+cmVuZGVyLmlycV9mZW5jZSk7Ci0KLQlkbWFfZmVuY2VfcHV0KGV4ZWMtPmJpbl9kb25l X2ZlbmNlKTsKLQlkbWFfZmVuY2VfcHV0KGV4ZWMtPnJlbmRlcl9kb25lX2ZlbmNlKTsKLQotCWZv ciAoaSA9IDA7IGkgPCBleGVjLT5ib19jb3VudDsgaSsrKQotCQlkcm1fZ2VtX29iamVjdF9wdXRf dW5sb2NrZWQoZXhlYy0+Ym9baV0pOwotCWt2ZnJlZShleGVjLT5ibyk7CisJc3RydWN0IHYzZF9q b2IgKmpvYiA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCB2M2Rfam9iLCByZWZjb3VudCk7CisJ aW50IGk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYm8sIHNhdmUsICZleGVjLT51bnJl Zl9saXN0LCB1bnJlZl9oZWFkKSB7Ci0JCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmYm8t PmJhc2UuYmFzZSk7CisJZm9yIChpID0gMDsgaSA8IGpvYi0+Ym9fY291bnQ7IGkrKykgeworCQlp ZiAoam9iLT5ib1tpXSkKKwkJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChqb2ItPmJvW2ld KTsKIAl9CisJa3ZmcmVlKGpvYi0+Ym8pOwogCi0JcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeSh2 M2QtPmRldik7Ci0JcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQodjNkLT5kZXYpOworCWRtYV9m ZW5jZV9wdXQoam9iLT5pbl9mZW5jZSk7CisJZG1hX2ZlbmNlX3B1dChqb2ItPmlycV9mZW5jZSk7 CisJZG1hX2ZlbmNlX3B1dChqb2ItPmRvbmVfZmVuY2UpOwogCi0Ja2ZyZWUoZXhlYyk7Ci19CisJ cG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShqb2ItPnYzZC0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1 dF9hdXRvc3VzcGVuZChqb2ItPnYzZC0+ZGV2KTsKIAotdm9pZCB2M2RfZXhlY19wdXQoc3RydWN0 IHYzZF9leGVjX2luZm8gKmV4ZWMpCi17Ci0Ja3JlZl9wdXQoJmV4ZWMtPnJlZmNvdW50LCB2M2Rf ZXhlY19jbGVhbnVwKTsKKwlrZnJlZShqb2IpOwogfQogCiBzdGF0aWMgdm9pZAotdjNkX3RmdV9q b2JfY2xlYW51cChzdHJ1Y3Qga3JlZiAqcmVmKQordjNkX3JlbmRlcl9qb2JfZnJlZShzdHJ1Y3Qg a3JlZiAqcmVmKQogewotCXN0cnVjdCB2M2RfdGZ1X2pvYiAqam9iID0gY29udGFpbmVyX29mKHJl Ziwgc3RydWN0IHYzZF90ZnVfam9iLAotCQkJCQkgICAgICAgcmVmY291bnQpOwotCXN0cnVjdCB2 M2RfZGV2ICp2M2QgPSBqb2ItPnYzZDsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWRtYV9mZW5jZV9w dXQoam9iLT5pbl9mZW5jZSk7Ci0JZG1hX2ZlbmNlX3B1dChqb2ItPmlycV9mZW5jZSk7CisJc3Ry dWN0IHYzZF9yZW5kZXJfam9iICpqb2IgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgdjNkX3Jl bmRlcl9qb2IsCisJCQkJCQkgIGJhc2UucmVmY291bnQpOworCXN0cnVjdCB2M2RfYm8gKmJvLCAq c2F2ZTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGpvYi0+Ym8pOyBpKyspIHsKLQkJ aWYgKGpvYi0+Ym9baV0pCi0JCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoam9iLT5ib1tp XSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJvLCBzYXZlLCAmam9iLT51bnJlZl9saXN0 LCB1bnJlZl9oZWFkKSB7CisJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmYm8tPmJhc2Uu YmFzZSk7CiAJfQogCi0JcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeSh2M2QtPmRldik7Ci0JcG1f cnVudGltZV9wdXRfYXV0b3N1c3BlbmQodjNkLT5kZXYpOwotCi0Ja2ZyZWUoam9iKTsKKwl2M2Rf am9iX2ZyZWUocmVmKTsKIH0KIAotdm9pZCB2M2RfdGZ1X2pvYl9wdXQoc3RydWN0IHYzZF90ZnVf am9iICpqb2IpCit2b2lkIHYzZF9qb2JfcHV0KHN0cnVjdCB2M2Rfam9iICpqb2IpCiB7Ci0Ja3Jl Zl9wdXQoJmpvYi0+cmVmY291bnQsIHYzZF90ZnVfam9iX2NsZWFudXApOworCWtyZWZfcHV0KCZq b2ItPnJlZmNvdW50LCBqb2ItPmZyZWUpOwogfQogCiBpbnQKQEAgLTQxMyw2ICszNzksNzcgQEAg djNkX3dhaXRfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAly ZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50Cit2M2Rfam9iX2luaXQoc3RydWN0IHYzZF9kZXYg KnYzZCwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJICAgICBzdHJ1Y3QgdjNkX2pvYiAq am9iLCB2b2lkICgqZnJlZSkoc3RydWN0IGtyZWYgKnJlZiksCisJICAgICB1MzIgaW5fc3luYykK K3sKKwlpbnQgcmV0OworCisJam9iLT52M2QgPSB2M2Q7CisJam9iLT5mcmVlID0gZnJlZTsKKwor CXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmModjNkLT5kZXYpOworCWlmIChyZXQgPCAwKQorCQly ZXR1cm4gcmV0OworCisJcmV0ID0gZHJtX3N5bmNvYmpfZmluZF9mZW5jZShmaWxlX3ByaXYsIGlu X3N5bmMsIDAsIDAsICZqb2ItPmluX2ZlbmNlKTsKKwlpZiAocmV0ID09IC1FSU5WQUwpIHsKKwkJ cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQodjNkLT5kZXYpOworCQlyZXR1cm4gcmV0OworCX0K KworCWtyZWZfaW5pdCgmam9iLT5yZWZjb3VudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludAordjNkX3B1c2hfam9iKHN0cnVjdCB2M2RfZmlsZV9wcml2ICp2M2RfcHJpdiwKKwkgICAg IHN0cnVjdCB2M2Rfam9iICpqb2IsIGVudW0gdjNkX3F1ZXVlIHF1ZXVlKQoreworCWludCByZXQ7 CisKKwlyZXQgPSBkcm1fc2NoZWRfam9iX2luaXQoJmpvYi0+YmFzZSwgJnYzZF9wcml2LT5zY2hl ZF9lbnRpdHlbcXVldWVdLAorCQkJCSB2M2RfcHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCWpvYi0+ZG9uZV9mZW5jZSA9IGRtYV9mZW5jZV9nZXQoJmpvYi0+YmFzZS5zX2ZlbmNl LT5maW5pc2hlZCk7CisKKwkvKiBwdXQgYnkgc2NoZWR1bGVyIGpvYiBjb21wbGV0aW9uICovCisJ a3JlZl9nZXQoJmpvYi0+cmVmY291bnQpOworCisJZHJtX3NjaGVkX2VudGl0eV9wdXNoX2pvYigm am9iLT5iYXNlLCAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtxdWV1ZV0pOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB2b2lkCit2M2RfYXR0YWNoX2ZlbmNlc19hbmRfdW5sb2NrX3Jlc2VydmF0 aW9uKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCQkgc3RydWN0IHYzZF9qb2IgKmpv YiwKKwkJCQkJIHN0cnVjdCB3d19hY3F1aXJlX2N0eCAqYWNxdWlyZV9jdHgsCisJCQkJCSB1MzIg b3V0X3N5bmMpCit7CisJc3RydWN0IGRybV9zeW5jb2JqICpzeW5jX291dDsKKwlpbnQgaTsKKwor CWZvciAoaSA9IDA7IGkgPCBqb2ItPmJvX2NvdW50OyBpKyspIHsKKwkJLyogWFhYOiBVc2Ugc2hh cmVkIGZlbmNlcyBmb3IgcmVhZC1vbmx5IG9iamVjdHMuICovCisJCXJlc2VydmF0aW9uX29iamVj dF9hZGRfZXhjbF9mZW5jZShqb2ItPmJvW2ldLT5yZXN2LAorCQkJCQkJICBqb2ItPmRvbmVfZmVu Y2UpOworCX0KKworCWRybV9nZW1fdW5sb2NrX3Jlc2VydmF0aW9ucyhqb2ItPmJvLCBqb2ItPmJv X2NvdW50LCBhY3F1aXJlX2N0eCk7CisKKwkvKiBVcGRhdGUgdGhlIHJldHVybiBzeW5jIG9iamVj dCBmb3IgdGhlIGpvYiAqLworCXN5bmNfb3V0ID0gZHJtX3N5bmNvYmpfZmluZChmaWxlX3ByaXYs IG91dF9zeW5jKTsKKwlpZiAoc3luY19vdXQpIHsKKwkJZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5j ZShzeW5jX291dCwgam9iLT5kb25lX2ZlbmNlKTsKKwkJZHJtX3N5bmNvYmpfcHV0KHN5bmNfb3V0 KTsKKwl9Cit9CisKIC8qKgogICogdjNkX3N1Ym1pdF9jbF9pb2N0bCgpIC0gU3VibWl0cyBhIGpv YiAoZnJhbWUpIHRvIHRoZSBWM0QuCiAgKiBAZGV2OiBEUk0gZGV2aWNlCkBAIC00MzIsOSArNDY5 LDkgQEAgdjNkX3N1Ym1pdF9jbF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRldik7CiAJc3RydWN0IHYz ZF9maWxlX3ByaXYgKnYzZF9wcml2ID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKIAlzdHJ1Y3Qg ZHJtX3YzZF9zdWJtaXRfY2wgKmFyZ3MgPSBkYXRhOwotCXN0cnVjdCB2M2RfZXhlY19pbmZvICpl eGVjOworCXN0cnVjdCB2M2RfYmluX2pvYiAqYmluID0gTlVMTDsKKwlzdHJ1Y3QgdjNkX3JlbmRl cl9qb2IgKnJlbmRlcjsKIAlzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggYWNxdWlyZV9jdHg7Ci0Jc3Ry dWN0IGRybV9zeW5jb2JqICpzeW5jX291dDsKIAlpbnQgcmV0ID0gMDsKIAogCXRyYWNlX3YzZF9z dWJtaXRfY2xfaW9jdGwoJnYzZC0+ZHJtLCBhcmdzLT5yY2xfc3RhcnQsIGFyZ3MtPnJjbF9lbmQp OwpAQCAtNDQ0LDEwMCArNDgxLDgzIEBAIHYzZF9zdWJtaXRfY2xfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZXhlYyA9 IGtjYWxsb2MoMSwgc2l6ZW9mKCpleGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFleGVjKQorCXJl bmRlciA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZW5kZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJl bmRlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKHYz ZC0+ZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQlrZnJlZShleGVjKTsKKwlyZW5kZXItPnN0YXJ0 ID0gYXJncy0+cmNsX3N0YXJ0OworCXJlbmRlci0+ZW5kID0gYXJncy0+cmNsX2VuZDsKKwlJTklU X0xJU1RfSEVBRCgmcmVuZGVyLT51bnJlZl9saXN0KTsKKworCXJldCA9IHYzZF9qb2JfaW5pdCh2 M2QsIGZpbGVfcHJpdiwgJnJlbmRlci0+YmFzZSwKKwkJCSAgIHYzZF9yZW5kZXJfam9iX2ZyZWUs IGFyZ3MtPmluX3N5bmNfcmNsKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHJlbmRlcik7CiAJCXJl dHVybiByZXQ7CiAJfQogCi0Ja3JlZl9pbml0KCZleGVjLT5yZWZjb3VudCk7CisJaWYgKGFyZ3Mt PmJjbF9zdGFydCAhPSBhcmdzLT5iY2xfZW5kKSB7CisJCWJpbiA9IGtjYWxsb2MoMSwgc2l6ZW9m KCpiaW4pLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiaW4pCisJCQlyZXR1cm4gLUVOT01FTTsKIAot CXJldCA9IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2UoZmlsZV9wcml2LCBhcmdzLT5pbl9zeW5jX2Jj bCwKLQkJCQkgICAgIDAsIDAsICZleGVjLT5iaW4uaW5fZmVuY2UpOwotCWlmIChyZXQgPT0gLUVJ TlZBTCkKLQkJZ290byBmYWlsOworCQlyZXQgPSB2M2Rfam9iX2luaXQodjNkLCBmaWxlX3ByaXYs ICZiaW4tPmJhc2UsCisJCQkJICAgdjNkX2pvYl9mcmVlLCBhcmdzLT5pbl9zeW5jX2JjbCk7CisJ CWlmIChyZXQpIHsKKwkJCXYzZF9qb2JfcHV0KCZyZW5kZXItPmJhc2UpOworCQkJcmV0dXJuIHJl dDsKKwkJfQogCi0JcmV0ID0gZHJtX3N5bmNvYmpfZmluZF9mZW5jZShmaWxlX3ByaXYsIGFyZ3Mt PmluX3N5bmNfcmNsLAotCQkJCSAgICAgMCwgMCwgJmV4ZWMtPnJlbmRlci5pbl9mZW5jZSk7Ci0J aWYgKHJldCA9PSAtRUlOVkFMKQotCQlnb3RvIGZhaWw7CisJCWJpbi0+c3RhcnQgPSBhcmdzLT5i Y2xfc3RhcnQ7CisJCWJpbi0+ZW5kID0gYXJncy0+YmNsX2VuZDsKKwkJYmluLT5xbWEgPSBhcmdz LT5xbWE7CisJCWJpbi0+cW1zID0gYXJncy0+cW1zOworCQliaW4tPnF0cyA9IGFyZ3MtPnF0czsK KwkJYmluLT5yZW5kZXIgPSByZW5kZXI7CisJfQogCi0JZXhlYy0+cW1hID0gYXJncy0+cW1hOwot CWV4ZWMtPnFtcyA9IGFyZ3MtPnFtczsKLQlleGVjLT5xdHMgPSBhcmdzLT5xdHM7Ci0JZXhlYy0+ YmluLmV4ZWMgPSBleGVjOwotCWV4ZWMtPmJpbi5zdGFydCA9IGFyZ3MtPmJjbF9zdGFydDsKLQll eGVjLT5iaW4uZW5kID0gYXJncy0+YmNsX2VuZDsKLQlleGVjLT5yZW5kZXIuZXhlYyA9IGV4ZWM7 Ci0JZXhlYy0+cmVuZGVyLnN0YXJ0ID0gYXJncy0+cmNsX3N0YXJ0OwotCWV4ZWMtPnJlbmRlci5l bmQgPSBhcmdzLT5yY2xfZW5kOwotCWV4ZWMtPnYzZCA9IHYzZDsKLQlJTklUX0xJU1RfSEVBRCgm ZXhlYy0+dW5yZWZfbGlzdCk7Ci0KLQlyZXQgPSB2M2RfY2xfbG9va3VwX2JvcyhkZXYsIGZpbGVf cHJpdiwgYXJncywgZXhlYyk7CisJcmV0ID0gdjNkX2xvb2t1cF9ib3MoZGV2LCBmaWxlX3ByaXYs ICZyZW5kZXItPmJhc2UsCisJCQkgICAgIGFyZ3MtPmJvX2hhbmRsZXMsIGFyZ3MtPmJvX2hhbmRs ZV9jb3VudCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsOwogCi0JcmV0ID0gdjNkX2xvY2tfYm9f cmVzZXJ2YXRpb25zKGV4ZWMtPmJvLCBleGVjLT5ib19jb3VudCwKKwlyZXQgPSB2M2RfbG9ja19i b19yZXNlcnZhdGlvbnMocmVuZGVyLT5iYXNlLmJvLCByZW5kZXItPmJhc2UuYm9fY291bnQsCiAJ CQkJICAgICAgICZhY3F1aXJlX2N0eCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsOwogCiAJbXV0 ZXhfbG9jaygmdjNkLT5zY2hlZF9sb2NrKTsKLQlpZiAoZXhlYy0+YmluLnN0YXJ0ICE9IGV4ZWMt PmJpbi5lbmQpIHsKLQkJcmV0ID0gZHJtX3NjaGVkX2pvYl9pbml0KCZleGVjLT5iaW4uYmFzZSwK LQkJCQkJICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5W1YzRF9CSU5dLAotCQkJCQkgdjNkX3ByaXYp OworCWlmIChiaW4pIHsKKwkJcmV0ID0gdjNkX3B1c2hfam9iKHYzZF9wcml2LCAmYmluLT5iYXNl LCBWM0RfQklOKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZmFpbF91bnJlc2VydmU7CiAKLQkJZXhl Yy0+YmluX2RvbmVfZmVuY2UgPQotCQkJZG1hX2ZlbmNlX2dldCgmZXhlYy0+YmluLmJhc2Uuc19m ZW5jZS0+ZmluaXNoZWQpOwotCi0JCWtyZWZfZ2V0KCZleGVjLT5yZWZjb3VudCk7IC8qIHB1dCBi eSBzY2hlZHVsZXIgam9iIGNvbXBsZXRpb24gKi8KLQkJZHJtX3NjaGVkX2VudGl0eV9wdXNoX2pv YigmZXhlYy0+YmluLmJhc2UsCi0JCQkJCSAgJnYzZF9wcml2LT5zY2hlZF9lbnRpdHlbVjNEX0JJ Tl0pOworCQlyZW5kZXItPmJpbl9kb25lX2ZlbmNlID0gZG1hX2ZlbmNlX2dldChiaW4tPmJhc2Uu ZG9uZV9mZW5jZSk7CiAJfQogCi0JcmV0ID0gZHJtX3NjaGVkX2pvYl9pbml0KCZleGVjLT5yZW5k ZXIuYmFzZSwKLQkJCQkgJnYzZF9wcml2LT5zY2hlZF9lbnRpdHlbVjNEX1JFTkRFUl0sCi0JCQkJ IHYzZF9wcml2KTsKKwlyZXQgPSB2M2RfcHVzaF9qb2IodjNkX3ByaXYsICZyZW5kZXItPmJhc2Us IFYzRF9SRU5ERVIpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF91bnJlc2VydmU7Ci0KLQlleGVj LT5yZW5kZXJfZG9uZV9mZW5jZSA9Ci0JCWRtYV9mZW5jZV9nZXQoJmV4ZWMtPnJlbmRlci5iYXNl LnNfZmVuY2UtPmZpbmlzaGVkKTsKLQotCWtyZWZfZ2V0KCZleGVjLT5yZWZjb3VudCk7IC8qIHB1 dCBieSBzY2hlZHVsZXIgam9iIGNvbXBsZXRpb24gKi8KLQlkcm1fc2NoZWRfZW50aXR5X3B1c2hf am9iKCZleGVjLT5yZW5kZXIuYmFzZSwKLQkJCQkgICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5W1Yz RF9SRU5ERVJdKTsKIAltdXRleF91bmxvY2soJnYzZC0+c2NoZWRfbG9jayk7CiAKLQl2M2RfYXR0 YWNoX29iamVjdF9mZW5jZXMoZXhlYy0+Ym8sIGV4ZWMtPmJvX2NvdW50LAotCQkJCSBleGVjLT5y ZW5kZXJfZG9uZV9mZW5jZSk7Ci0KLQlkcm1fZ2VtX3VubG9ja19yZXNlcnZhdGlvbnMoZXhlYy0+ Ym8sIGV4ZWMtPmJvX2NvdW50LCAmYWNxdWlyZV9jdHgpOworCXYzZF9hdHRhY2hfZmVuY2VzX2Fu ZF91bmxvY2tfcmVzZXJ2YXRpb24oZmlsZV9wcml2LAorCQkJCQkJICZyZW5kZXItPmJhc2UsICZh Y3F1aXJlX2N0eCwKKwkJCQkJCSBhcmdzLT5vdXRfc3luYyk7CiAKLQkvKiBVcGRhdGUgdGhlIHJl dHVybiBzeW5jIG9iamVjdCBmb3IgdGhlICovCi0Jc3luY19vdXQgPSBkcm1fc3luY29ial9maW5k KGZpbGVfcHJpdiwgYXJncy0+b3V0X3N5bmMpOwotCWlmIChzeW5jX291dCkgewotCQlkcm1fc3lu Y29ial9yZXBsYWNlX2ZlbmNlKHN5bmNfb3V0LCBleGVjLT5yZW5kZXJfZG9uZV9mZW5jZSk7Ci0J CWRybV9zeW5jb2JqX3B1dChzeW5jX291dCk7Ci0JfQotCi0JdjNkX2V4ZWNfcHV0KGV4ZWMpOwor CWlmIChiaW4pCisJCXYzZF9qb2JfcHV0KCZiaW4tPmJhc2UpOworCXYzZF9qb2JfcHV0KCZyZW5k ZXItPmJhc2UpOwogCiAJcmV0dXJuIDA7CiAKIGZhaWxfdW5yZXNlcnZlOgogCW11dGV4X3VubG9j aygmdjNkLT5zY2hlZF9sb2NrKTsKLQlkcm1fZ2VtX3VubG9ja19yZXNlcnZhdGlvbnMoZXhlYy0+ Ym8sIGV4ZWMtPmJvX2NvdW50LCAmYWNxdWlyZV9jdHgpOworCWRybV9nZW1fdW5sb2NrX3Jlc2Vy dmF0aW9ucyhyZW5kZXItPmJhc2UuYm8sCisJCQkJICAgIHJlbmRlci0+YmFzZS5ib19jb3VudCwg JmFjcXVpcmVfY3R4KTsKIGZhaWw6Ci0JdjNkX2V4ZWNfcHV0KGV4ZWMpOworCWlmIChiaW4pCisJ CXYzZF9qb2JfcHV0KCZiaW4tPmJhc2UpOworCXYzZF9qb2JfcHV0KCZyZW5kZXItPmJhc2UpOwog CiAJcmV0dXJuIHJldDsKIH0KQEAgLTU2MCwxMCArNTgwLDcgQEAgdjNkX3N1Ym1pdF90ZnVfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlzdHJ1Y3QgZHJtX3YzZF9z dWJtaXRfdGZ1ICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgdjNkX3RmdV9qb2IgKmpvYjsKIAlzdHJ1 Y3Qgd3dfYWNxdWlyZV9jdHggYWNxdWlyZV9jdHg7Ci0Jc3RydWN0IGRybV9zeW5jb2JqICpzeW5j X291dDsKLQlzdHJ1Y3QgZG1hX2ZlbmNlICpzY2hlZF9kb25lX2ZlbmNlOwogCWludCByZXQgPSAw OwotCWludCBib19jb3VudDsKIAogCXRyYWNlX3YzZF9zdWJtaXRfdGZ1X2lvY3RsKCZ2M2QtPmRy bSwgYXJncy0+aWlhKTsKIApAQCAtNTcxLDgxICs1ODgsNjYgQEAgdjNkX3N1Ym1pdF90ZnVfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlpZiAoIWpvYikKIAkJcmV0 dXJuIC1FTk9NRU07CiAKLQlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKHYzZC0+ZGV2KTsKLQlp ZiAocmV0IDwgMCkgeworCXJldCA9IHYzZF9qb2JfaW5pdCh2M2QsIGZpbGVfcHJpdiwgJmpvYi0+ YmFzZSwKKwkJCSAgIHYzZF9qb2JfZnJlZSwgYXJncy0+aW5fc3luYyk7CisJaWYgKHJldCkgewog CQlrZnJlZShqb2IpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWtyZWZfaW5pdCgmam9iLT5yZWZj b3VudCk7Ci0KLQlyZXQgPSBkcm1fc3luY29ial9maW5kX2ZlbmNlKGZpbGVfcHJpdiwgYXJncy0+ aW5fc3luYywKLQkJCQkgICAgIDAsIDAsICZqb2ItPmluX2ZlbmNlKTsKLQlpZiAocmV0ID09IC1F SU5WQUwpCi0JCWdvdG8gZmFpbDsKLQorCWpvYi0+YmFzZS5ibyA9IGtjYWxsb2MoQVJSQVlfU0la RShhcmdzLT5ib19oYW5kbGVzKSwKKwkJCSAgICAgICBzaXplb2YoKmpvYi0+YmFzZS5ibyksIEdG UF9LRVJORUwpOwogCWpvYi0+YXJncyA9ICphcmdzOwotCWpvYi0+djNkID0gdjNkOwogCiAJc3Bp bl9sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOwotCWZvciAoYm9fY291bnQgPSAwOyBib19j b3VudCA8IEFSUkFZX1NJWkUoam9iLT5ibyk7IGJvX2NvdW50KyspIHsKKwlmb3IgKGpvYi0+YmFz ZS5ib19jb3VudCA9IDA7CisJICAgICBqb2ItPmJhc2UuYm9fY291bnQgPCBBUlJBWV9TSVpFKGFy Z3MtPmJvX2hhbmRsZXMpOworCSAgICAgam9iLT5iYXNlLmJvX2NvdW50KyspIHsKIAkJc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpibzsKIAotCQlpZiAoIWFyZ3MtPmJvX2hhbmRsZXNbYm9fY291bnRd KQorCQlpZiAoIWFyZ3MtPmJvX2hhbmRsZXNbam9iLT5iYXNlLmJvX2NvdW50XSkKIAkJCWJyZWFr OwogCiAJCWJvID0gaWRyX2ZpbmQoJmZpbGVfcHJpdi0+b2JqZWN0X2lkciwKLQkJCSAgICAgIGFy Z3MtPmJvX2hhbmRsZXNbYm9fY291bnRdKTsKKwkJCSAgICAgIGFyZ3MtPmJvX2hhbmRsZXNbam9i LT5iYXNlLmJvX2NvdW50XSk7CiAJCWlmICghYm8pIHsKIAkJCURSTV9ERUJVRygiRmFpbGVkIHRv IGxvb2sgdXAgR0VNIEJPICVkOiAlZFxuIiwKLQkJCQkgIGJvX2NvdW50LCBhcmdzLT5ib19oYW5k bGVzW2JvX2NvdW50XSk7CisJCQkJICBqb2ItPmJhc2UuYm9fY291bnQsCisJCQkJICBhcmdzLT5i b19oYW5kbGVzW2pvYi0+YmFzZS5ib19jb3VudF0pOwogCQkJcmV0ID0gLUVOT0VOVDsKIAkJCXNw aW5fdW5sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOwogCQkJZ290byBmYWlsOwogCQl9CiAJ CWRybV9nZW1fb2JqZWN0X2dldChibyk7Ci0JCWpvYi0+Ym9bYm9fY291bnRdID0gYm87CisJCWpv Yi0+YmFzZS5ib1tqb2ItPmJhc2UuYm9fY291bnRdID0gYm87CiAJfQogCXNwaW5fdW5sb2NrKCZm aWxlX3ByaXYtPnRhYmxlX2xvY2spOwogCi0JcmV0ID0gdjNkX2xvY2tfYm9fcmVzZXJ2YXRpb25z KGpvYi0+Ym8sIGJvX2NvdW50LCAmYWNxdWlyZV9jdHgpOworCXJldCA9IHYzZF9sb2NrX2JvX3Jl c2VydmF0aW9ucyhqb2ItPmJhc2UuYm8sIGpvYi0+YmFzZS5ib19jb3VudCwKKwkJCQkgICAgICAg JmFjcXVpcmVfY3R4KTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKIAltdXRleF9sb2NrKCZ2 M2QtPnNjaGVkX2xvY2spOwotCXJldCA9IGRybV9zY2hlZF9qb2JfaW5pdCgmam9iLT5iYXNlLAot CQkJCSAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtWM0RfVEZVXSwKLQkJCQkgdjNkX3ByaXYpOwor CXJldCA9IHYzZF9wdXNoX2pvYih2M2RfcHJpdiwgJmpvYi0+YmFzZSwgVjNEX1RGVSk7CiAJaWYg KHJldCkKIAkJZ290byBmYWlsX3VucmVzZXJ2ZTsKLQotCXNjaGVkX2RvbmVfZmVuY2UgPSBkbWFf ZmVuY2VfZ2V0KCZqb2ItPmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQpOwotCi0Ja3JlZl9nZXQoJmpv Yi0+cmVmY291bnQpOyAvKiBwdXQgYnkgc2NoZWR1bGVyIGpvYiBjb21wbGV0aW9uICovCi0JZHJt X3NjaGVkX2VudGl0eV9wdXNoX2pvYigmam9iLT5iYXNlLCAmdjNkX3ByaXYtPnNjaGVkX2VudGl0 eVtWM0RfVEZVXSk7CiAJbXV0ZXhfdW5sb2NrKCZ2M2QtPnNjaGVkX2xvY2spOwogCi0JdjNkX2F0 dGFjaF9vYmplY3RfZmVuY2VzKGpvYi0+Ym8sIGJvX2NvdW50LCBzY2hlZF9kb25lX2ZlbmNlKTsK LQotCWRybV9nZW1fdW5sb2NrX3Jlc2VydmF0aW9ucyhqb2ItPmJvLCBib19jb3VudCwgJmFjcXVp cmVfY3R4KTsKLQotCS8qIFVwZGF0ZSB0aGUgcmV0dXJuIHN5bmMgb2JqZWN0ICovCi0Jc3luY19v dXQgPSBkcm1fc3luY29ial9maW5kKGZpbGVfcHJpdiwgYXJncy0+b3V0X3N5bmMpOwotCWlmIChz eW5jX291dCkgewotCQlkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlKHN5bmNfb3V0LCBzY2hlZF9k b25lX2ZlbmNlKTsKLQkJZHJtX3N5bmNvYmpfcHV0KHN5bmNfb3V0KTsKLQl9Ci0JZG1hX2ZlbmNl X3B1dChzY2hlZF9kb25lX2ZlbmNlKTsKKwl2M2RfYXR0YWNoX2ZlbmNlc19hbmRfdW5sb2NrX3Jl c2VydmF0aW9uKGZpbGVfcHJpdiwKKwkJCQkJCSAmam9iLT5iYXNlLCAmYWNxdWlyZV9jdHgsCisJ CQkJCQkgYXJncy0+b3V0X3N5bmMpOwogCi0JdjNkX3RmdV9qb2JfcHV0KGpvYik7CisJdjNkX2pv Yl9wdXQoJmpvYi0+YmFzZSk7CiAKIAlyZXR1cm4gMDsKIAogZmFpbF91bnJlc2VydmU6CiAJbXV0 ZXhfdW5sb2NrKCZ2M2QtPnNjaGVkX2xvY2spOwotCWRybV9nZW1fdW5sb2NrX3Jlc2VydmF0aW9u cyhqb2ItPmJvLCBib19jb3VudCwgJmFjcXVpcmVfY3R4KTsKKwlkcm1fZ2VtX3VubG9ja19yZXNl cnZhdGlvbnMoam9iLT5iYXNlLmJvLCBqb2ItPmJhc2UuYm9fY291bnQsCisJCQkJICAgICZhY3F1 aXJlX2N0eCk7CiBmYWlsOgotCXYzZF90ZnVfam9iX3B1dChqb2IpOworCXYzZF9qb2JfcHV0KCZq b2ItPmJhc2UpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTcwMyw3ICs3MDUsNyBAQCB2M2RfZ2Vt X2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAogCXYzZF9zY2hlZF9maW5pKHYzZCk7 CiAKLQkvKiBXYWl0aW5nIGZvciBleGVjIHRvIGZpbmlzaCB3b3VsZCBuZWVkIHRvIGJlIGRvbmUg YmVmb3JlCisJLyogV2FpdGluZyBmb3Igam9icyB0byBmaW5pc2ggd291bGQgbmVlZCB0byBiZSBk b25lIGJlZm9yZQogCSAqIHVucmVnaXN0ZXJpbmcgVjNELgogCSAqLwogCVdBUk5fT04odjNkLT5i aW5fam9iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2lycS5jIGIvZHJp dmVycy9ncHUvZHJtL3YzZC92M2RfaXJxLmMKaW5kZXggYWEwYTE4MGFlNzAwLi5jZTM3M2ZmZDYz ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2lycS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS92M2QvdjNkX2lycS5jCkBAIC02Miw3ICs2Miw3IEBAIHYzZF9vdmVyZmxvd19t ZW1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJfQogCiAJZHJtX2dlbV9vYmplY3Rf Z2V0KG9iaik7Ci0JbGlzdF9hZGRfdGFpbCgmYm8tPnVucmVmX2hlYWQsICZ2M2QtPmJpbl9qb2It PnVucmVmX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJmJvLT51bnJlZl9oZWFkLCAmdjNkLT5iaW5f am9iLT5yZW5kZXItPnVucmVmX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnYzZC0+ am9iX2xvY2ssIGlycWZsYWdzKTsKIAogCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9QVEJfQlBPQSwg Ym8tPm5vZGUuc3RhcnQgPDwgUEFHRV9TSElGVCk7CkBAIC05Niw3ICs5Niw3IEBAIHYzZF9pcnEo aW50IGlycSwgdm9pZCAqYXJnKQogCiAJaWYgKGludHN0cyAmIFYzRF9JTlRfRkxET05FKSB7CiAJ CXN0cnVjdCB2M2RfZmVuY2UgKmZlbmNlID0KLQkJCXRvX3YzZF9mZW5jZSh2M2QtPmJpbl9qb2It PmJpbi5pcnFfZmVuY2UpOworCQkJdG9fdjNkX2ZlbmNlKHYzZC0+YmluX2pvYi0+YmFzZS5pcnFf ZmVuY2UpOwogCiAJCXRyYWNlX3YzZF9iY2xfaXJxKCZ2M2QtPmRybSwgZmVuY2UtPnNlcW5vKTsK IAkJZG1hX2ZlbmNlX3NpZ25hbCgmZmVuY2UtPmJhc2UpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHYz ZF9pcnEoaW50IGlycSwgdm9pZCAqYXJnKQogCiAJaWYgKGludHN0cyAmIFYzRF9JTlRfRlJET05F KSB7CiAJCXN0cnVjdCB2M2RfZmVuY2UgKmZlbmNlID0KLQkJCXRvX3YzZF9mZW5jZSh2M2QtPnJl bmRlcl9qb2ItPnJlbmRlci5pcnFfZmVuY2UpOworCQkJdG9fdjNkX2ZlbmNlKHYzZC0+cmVuZGVy X2pvYi0+YmFzZS5pcnFfZmVuY2UpOwogCiAJCXRyYWNlX3YzZF9yY2xfaXJxKCZ2M2QtPmRybSwg ZmVuY2UtPnNlcW5vKTsKIAkJZG1hX2ZlbmNlX3NpZ25hbCgmZmVuY2UtPmJhc2UpOwpAQCAtMTQx LDcgKzE0MSw3IEBAIHYzZF9odWJfaXJxKGludCBpcnEsIHZvaWQgKmFyZykKIAogCWlmIChpbnRz dHMgJiBWM0RfSFVCX0lOVF9URlVDKSB7CiAJCXN0cnVjdCB2M2RfZmVuY2UgKmZlbmNlID0KLQkJ CXRvX3YzZF9mZW5jZSh2M2QtPnRmdV9qb2ItPmlycV9mZW5jZSk7CisJCQl0b192M2RfZmVuY2Uo djNkLT50ZnVfam9iLT5iYXNlLmlycV9mZW5jZSk7CiAKIAkJdHJhY2VfdjNkX3RmdV9pcnEoJnYz ZC0+ZHJtLCBmZW5jZS0+c2Vxbm8pOwogCQlkbWFfZmVuY2Vfc2lnbmFsKCZmZW5jZS0+YmFzZSk7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jIGIvZHJpdmVycy9n cHUvZHJtL3YzZC92M2Rfc2NoZWQuYwppbmRleCBlNzQwZjNiOTlhYTUuLjg4NGYwMGY1ZWRmNCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc2NoZWQuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jCkBAIC0zMCw0MyArMzAsNDQgQEAgdG9fdjNkX2pvYihz dHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iKQogCXJldHVybiBjb250YWluZXJfb2Yoc2No ZWRfam9iLCBzdHJ1Y3QgdjNkX2pvYiwgYmFzZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdjNkX3Rm dV9qb2IgKgotdG9fdGZ1X2pvYihzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iKQorc3Rh dGljIHN0cnVjdCB2M2RfYmluX2pvYiAqCit0b19iaW5fam9iKHN0cnVjdCBkcm1fc2NoZWRfam9i ICpzY2hlZF9qb2IpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihzY2hlZF9qb2IsIHN0cnVjdCB2 M2RfdGZ1X2pvYiwgYmFzZSk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzY2hlZF9qb2IsIHN0cnVj dCB2M2RfYmluX2pvYiwgYmFzZS5iYXNlKTsKIH0KIAotc3RhdGljIHZvaWQKLXYzZF9qb2JfZnJl ZShzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iKQorc3RhdGljIHN0cnVjdCB2M2RfcmVu ZGVyX2pvYiAqCit0b19yZW5kZXJfam9iKHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2Ip CiB7Ci0Jc3RydWN0IHYzZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKLQotCWRy bV9zY2hlZF9qb2JfY2xlYW51cChzY2hlZF9qb2IpOworCXJldHVybiBjb250YWluZXJfb2Yoc2No ZWRfam9iLCBzdHJ1Y3QgdjNkX3JlbmRlcl9qb2IsIGJhc2UuYmFzZSk7Cit9CiAKLQl2M2RfZXhl Y19wdXQoam9iLT5leGVjKTsKK3N0YXRpYyBzdHJ1Y3QgdjNkX3RmdV9qb2IgKgordG9fdGZ1X2pv YihzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iKQoreworCXJldHVybiBjb250YWluZXJf b2Yoc2NoZWRfam9iLCBzdHJ1Y3QgdjNkX3RmdV9qb2IsIGJhc2UuYmFzZSk7CiB9CiAKIHN0YXRp YyB2b2lkCi12M2RfdGZ1X2pvYl9mcmVlKHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2Ip Cit2M2Rfam9iX2ZyZWUoc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKIHsKLQlzdHJ1 Y3QgdjNkX3RmdV9qb2IgKmpvYiA9IHRvX3RmdV9qb2Ioc2NoZWRfam9iKTsKKwlzdHJ1Y3QgdjNk X2pvYiAqam9iID0gdG9fdjNkX2pvYihzY2hlZF9qb2IpOwogCiAJZHJtX3NjaGVkX2pvYl9jbGVh bnVwKHNjaGVkX2pvYik7Ci0KLQl2M2RfdGZ1X2pvYl9wdXQoam9iKTsKKwl2M2Rfam9iX3B1dChq b2IpOwogfQogCiAvKioKLSAqIFJldHVybnMgdGhlIGZlbmNlcyB0aGF0IHRoZSBiaW4gb3IgcmVu ZGVyIGpvYiBkZXBlbmRzIG9uLCBvbmUgYnkgb25lLgotICogdjNkX2pvYl9ydW4oKSB3b24ndCBi ZSBjYWxsZWQgdW50aWwgYWxsIG9mIHRoZW0gaGF2ZSBiZWVuIHNpZ25hbGVkLgorICogUmV0dXJu cyB0aGUgZmVuY2VzIHRoYXQgdGhlIGpvYiBkZXBlbmRzIG9uLCBvbmUgYnkgb25lLgorICoKKyAq IElmIHBsYWNlZCBpbiB0aGUgc2NoZWR1bGVyJ3MgLmRlcGVuZGVuY3kgbWV0aG9kLCB0aGUgY29y cmVzcG9uZGluZworICogLnJ1bl9qb2Igd29uJ3QgYmUgY2FsbGVkIHVudGlsIGFsbCBvZiB0aGVt IGhhdmUgYmVlbiBzaWduYWxlZC4KICAqLwogc3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKgogdjNk X2pvYl9kZXBlbmRlbmN5KHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IsCiAJCSAgIHN0 cnVjdCBkcm1fc2NoZWRfZW50aXR5ICpzX2VudGl0eSkKIHsKIAlzdHJ1Y3QgdjNkX2pvYiAqam9i ID0gdG9fdjNkX2pvYihzY2hlZF9qb2IpOwotCXN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjID0g am9iLT5leGVjOwotCWVudW0gdjNkX3F1ZXVlIHEgPSBqb2IgPT0gJmV4ZWMtPmJpbiA/IFYzRF9C SU4gOiBWM0RfUkVOREVSOwogCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwogCiAJZmVuY2UgPSBq b2ItPmluX2ZlbmNlOwpAQCAtNzUsMTEzICs3NiwxMzIgQEAgdjNkX2pvYl9kZXBlbmRlbmN5KHN0 cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IsCiAJCXJldHVybiBmZW5jZTsKIAl9CiAKLQlp ZiAocSA9PSBWM0RfUkVOREVSKSB7Ci0JCS8qIElmIHdlIGhhZCBhIGJpbiBqb2IsIHRoZSByZW5k ZXIgam9iIGRlZmluaXRlbHkgZGVwZW5kcyBvbgotCQkgKiBpdC4gV2UgZmlyc3QgaGF2ZSB0byB3 YWl0IGZvciBiaW4gdG8gYmUgc2NoZWR1bGVkLCBzbyB0aGF0Ci0JCSAqIGl0cyBkb25lX2ZlbmNl IGlzIGNyZWF0ZWQuCi0JCSAqLwotCQlmZW5jZSA9IGV4ZWMtPmJpbl9kb25lX2ZlbmNlOwotCQlp ZiAoZmVuY2UpIHsKLQkJCWV4ZWMtPmJpbl9kb25lX2ZlbmNlID0gTlVMTDsKLQkJCXJldHVybiBm ZW5jZTsKLQkJfQotCX0KLQogCS8qIFhYWDogV2FpdCBvbiBhIGZlbmNlIGZvciBzd2l0Y2hpbmcg dGhlIEdNUCBpZiBuZWNlc3NhcnksCiAJICogYW5kIHRoZW4gZG8gc28uCiAJICovCiAKLQlyZXR1 cm4gZmVuY2U7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgotICogUmV0dXJucyB0aGUgZmVuY2Vz IHRoYXQgdGhlIFRGVSBqb2IgZGVwZW5kcyBvbiwgb25lIGJ5IG9uZS4KLSAqIHYzZF90ZnVfam9i X3J1bigpIHdvbid0IGJlIGNhbGxlZCB1bnRpbCBhbGwgb2YgdGhlbSBoYXZlIGJlZW4KLSAqIHNp Z25hbGVkLgorICogUmV0dXJucyB0aGUgZmVuY2VzIHRoYXQgdGhlIHJlbmRlciBqb2IgZGVwZW5k cyBvbiwgb25lIGJ5IG9uZS4KKyAqIHYzZF9qb2JfcnVuKCkgd29uJ3QgYmUgY2FsbGVkIHVudGls IGFsbCBvZiB0aGVtIGhhdmUgYmVlbiBzaWduYWxlZC4KICAqLwogc3RhdGljIHN0cnVjdCBkbWFf ZmVuY2UgKgotdjNkX3RmdV9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2No ZWRfam9iLAotCQkgICAgICAgc3RydWN0IGRybV9zY2hlZF9lbnRpdHkgKnNfZW50aXR5KQordjNk X3JlbmRlcl9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iLAor CQkJICBzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSAqc19lbnRpdHkpCiB7Ci0Jc3RydWN0IHYzZF90 ZnVfam9iICpqb2IgPSB0b190ZnVfam9iKHNjaGVkX2pvYik7CisJc3RydWN0IHYzZF9yZW5kZXJf am9iICpqb2IgPSB0b19yZW5kZXJfam9iKHNjaGVkX2pvYik7CiAJc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2U7CiAKLQlmZW5jZSA9IGpvYi0+aW5fZmVuY2U7CisJZmVuY2UgPSB2M2Rfam9iX2RlcGVu ZGVuY3koc2NoZWRfam9iLCBzX2VudGl0eSk7CisJaWYgKGZlbmNlKQorCQlyZXR1cm4gZmVuY2U7 CisKKwkvKiBJZiB3ZSBoYWQgYSBiaW4gam9iLCB0aGUgcmVuZGVyIGpvYiBkZWZpbml0ZWx5IGRl cGVuZHMgb24KKwkgKiBpdC4gV2UgZmlyc3QgaGF2ZSB0byB3YWl0IGZvciBiaW4gdG8gYmUgc2No ZWR1bGVkLCBzbyB0aGF0CisJICogaXRzIGRvbmVfZmVuY2UgaXMgY3JlYXRlZC4KKwkgKi8KKwlm ZW5jZSA9IGpvYi0+YmluX2RvbmVfZmVuY2U7CiAJaWYgKGZlbmNlKSB7Ci0JCWpvYi0+aW5fZmVu Y2UgPSBOVUxMOworCQlqb2ItPmJpbl9kb25lX2ZlbmNlID0gTlVMTDsKIAkJcmV0dXJuIGZlbmNl OwogCX0KIAotCXJldHVybiBOVUxMOworCXJldHVybiBmZW5jZTsKIH0KIAotc3RhdGljIHN0cnVj dCBkbWFfZmVuY2UgKnYzZF9qb2JfcnVuKHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2Ip CitzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqdjNkX2Jpbl9qb2JfcnVuKHN0cnVjdCBkcm1fc2No ZWRfam9iICpzY2hlZF9qb2IpCiB7Ci0Jc3RydWN0IHYzZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Io c2NoZWRfam9iKTsKLQlzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYyA9IGpvYi0+ZXhlYzsKLQll bnVtIHYzZF9xdWV1ZSBxID0gam9iID09ICZleGVjLT5iaW4gPyBWM0RfQklOIDogVjNEX1JFTkRF UjsKLQlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gZXhlYy0+djNkOworCXN0cnVjdCB2M2RfYmluX2pv YiAqam9iID0gdG9fYmluX2pvYihzY2hlZF9qb2IpOworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSBq b2ItPmJhc2UudjNkOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmdjNkLT5kcm07CiAJc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2U7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAotCWlmICh1 bmxpa2VseShqb2ItPmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQuZXJyb3IpKQorCWlmICh1bmxpa2Vs eShqb2ItPmJhc2UuYmFzZS5zX2ZlbmNlLT5maW5pc2hlZC5lcnJvcikpCiAJCXJldHVybiBOVUxM OwogCiAJLyogTG9jayByZXF1aXJlZCBhcm91bmQgYmluX2pvYiB1cGRhdGUgdnMKIAkgKiB2M2Rf b3ZlcmZsb3dfbWVtX3dvcmsoKS4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmdjNkLT5qb2Jf bG9jaywgaXJxZmxhZ3MpOwotCWlmIChxID09IFYzRF9CSU4pIHsKLQkJdjNkLT5iaW5fam9iID0g am9iLT5leGVjOwotCi0JCS8qIENsZWFyIG91dCB0aGUgb3ZlcmZsb3cgYWxsb2NhdGlvbiwgc28g d2UgZG9uJ3QKLQkJICogcmV1c2UgdGhlIG92ZXJmbG93IGF0dGFjaGVkIHRvIGEgcHJldmlvdXMg am9iLgotCQkgKi8KLQkJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX1BUQl9CUE9TLCAwKTsKLQl9IGVs c2UgewotCQl2M2QtPnJlbmRlcl9qb2IgPSBqb2ItPmV4ZWM7Ci0JfQorCXYzZC0+YmluX2pvYiA9 IGpvYjsKKwkvKiBDbGVhciBvdXQgdGhlIG92ZXJmbG93IGFsbG9jYXRpb24sIHNvIHdlIGRvbid0 CisJICogcmV1c2UgdGhlIG92ZXJmbG93IGF0dGFjaGVkIHRvIGEgcHJldmlvdXMgam9iLgorCSAq LworCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9QVEJfQlBPUywgMCk7CiAJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmdjNkLT5qb2JfbG9jaywgaXJxZmxhZ3MpOwogCi0JLyogQ2FuIHdlIGF2b2lkIHRo aXMgZmx1c2ggd2hlbiBxPT1SRU5ERVI/ICBXZSBuZWVkIHRvIGJlCi0JICogY2FyZWZ1bCBvZiBz Y2hlZHVsaW5nLCB0aG91Z2ggLS0gaW1hZ2luZSBqb2IwIHJlbmRlcmluZyB0bwotCSAqIHRleHR1 cmUgYW5kIGpvYjEgcmVhZGluZywgYW5kIHRoZW0gYmVpbmcgZXhlY3V0ZWQgYXMgYmluMCwKLQkg KiBiaW4xLCByZW5kZXIwLCByZW5kZXIxLCBzbyB0aGF0IHJlbmRlcjEncyBmbHVzaCBhdCBiaW4g dGltZQorCXYzZF9pbnZhbGlkYXRlX2NhY2hlcyh2M2QpOworCisJZmVuY2UgPSB2M2RfZmVuY2Vf Y3JlYXRlKHYzZCwgVjNEX0JJTik7CisJaWYgKElTX0VSUihmZW5jZSkpCisJCXJldHVybiBOVUxM OworCisJaWYgKGpvYi0+YmFzZS5pcnFfZmVuY2UpCisJCWRtYV9mZW5jZV9wdXQoam9iLT5iYXNl LmlycV9mZW5jZSk7CisJam9iLT5iYXNlLmlycV9mZW5jZSA9IGRtYV9mZW5jZV9nZXQoZmVuY2Up OworCisJdHJhY2VfdjNkX3N1Ym1pdF9jbChkZXYsIGZhbHNlLCB0b192M2RfZmVuY2UoZmVuY2Up LT5zZXFubywKKwkJCSAgICBqb2ItPnN0YXJ0LCBqb2ItPmVuZCk7CisKKwkvKiBTZXQgdGhlIGN1 cnJlbnQgYW5kIGVuZCBhZGRyZXNzIG9mIHRoZSBjb250cm9sIGxpc3QuCisJICogV3JpdGluZyB0 aGUgZW5kIHJlZ2lzdGVyIGlzIHdoYXQgc3RhcnRzIHRoZSBqb2IuCisJICovCisJaWYgKGpvYi0+ cW1hKSB7CisJCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1QwUU1BLCBqb2ItPnFtYSk7CisJ CVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1QwUU1TLCBqb2ItPnFtcyk7CisJfQorCWlmIChq b2ItPnF0cykgeworCQlWM0RfQ09SRV9XUklURSgwLCBWM0RfQ0xFX0NUMFFUUywKKwkJCSAgICAg ICBWM0RfQ0xFX0NUMFFUU19FTkFCTEUgfAorCQkJICAgICAgIGpvYi0+cXRzKTsKKwl9CisJVjNE X0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVDBRQkEsIGpvYi0+c3RhcnQpOworCVYzRF9DT1JFX1dS SVRFKDAsIFYzRF9DTEVfQ1QwUUVBLCBqb2ItPmVuZCk7CisKKwlyZXR1cm4gZmVuY2U7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICp2M2RfcmVuZGVyX2pvYl9ydW4oc3RydWN0IGRybV9z Y2hlZF9qb2IgKnNjaGVkX2pvYikKK3sKKwlzdHJ1Y3QgdjNkX3JlbmRlcl9qb2IgKmpvYiA9IHRv X3JlbmRlcl9qb2Ioc2NoZWRfam9iKTsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gam9iLT5iYXNl LnYzZDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJnYzZC0+ZHJtOworCXN0cnVjdCBkbWFf ZmVuY2UgKmZlbmNlOworCisJaWYgKHVubGlrZWx5KGpvYi0+YmFzZS5iYXNlLnNfZmVuY2UtPmZp bmlzaGVkLmVycm9yKSkKKwkJcmV0dXJuIE5VTEw7CisKKwl2M2QtPnJlbmRlcl9qb2IgPSBqb2I7 CisKKwkvKiBDYW4gd2UgYXZvaWQgdGhpcyBmbHVzaD8gIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBv ZgorCSAqIHNjaGVkdWxpbmcsIHRob3VnaCAtLSBpbWFnaW5lIGpvYjAgcmVuZGVyaW5nIHRvIHRl eHR1cmUgYW5kCisJICogam9iMSByZWFkaW5nLCBhbmQgdGhlbSBiZWluZyBleGVjdXRlZCBhcyBi aW4wLCBiaW4xLAorCSAqIHJlbmRlcjAsIHJlbmRlcjEsIHNvIHRoYXQgcmVuZGVyMSdzIGZsdXNo IGF0IGJpbiB0aW1lCiAJICogd2Fzbid0IGVub3VnaC4KIAkgKi8KIAl2M2RfaW52YWxpZGF0ZV9j YWNoZXModjNkKTsKIAotCWZlbmNlID0gdjNkX2ZlbmNlX2NyZWF0ZSh2M2QsIHEpOworCWZlbmNl ID0gdjNkX2ZlbmNlX2NyZWF0ZSh2M2QsIFYzRF9SRU5ERVIpOwogCWlmIChJU19FUlIoZmVuY2Up KQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChqb2ItPmlycV9mZW5jZSkKLQkJZG1hX2ZlbmNlX3B1 dChqb2ItPmlycV9mZW5jZSk7Ci0Jam9iLT5pcnFfZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KGZlbmNl KTsKKwlpZiAoam9iLT5iYXNlLmlycV9mZW5jZSkKKwkJZG1hX2ZlbmNlX3B1dChqb2ItPmJhc2Uu aXJxX2ZlbmNlKTsKKwlqb2ItPmJhc2UuaXJxX2ZlbmNlID0gZG1hX2ZlbmNlX2dldChmZW5jZSk7 CiAKLQl0cmFjZV92M2Rfc3VibWl0X2NsKGRldiwgcSA9PSBWM0RfUkVOREVSLCB0b192M2RfZmVu Y2UoZmVuY2UpLT5zZXFubywKKwl0cmFjZV92M2Rfc3VibWl0X2NsKGRldiwgdHJ1ZSwgdG9fdjNk X2ZlbmNlKGZlbmNlKS0+c2Vxbm8sCiAJCQkgICAgam9iLT5zdGFydCwgam9iLT5lbmQpOwogCi0J aWYgKHEgPT0gVjNEX0JJTikgewotCQlpZiAoZXhlYy0+cW1hKSB7Ci0JCQlWM0RfQ09SRV9XUklU RSgwLCBWM0RfQ0xFX0NUMFFNQSwgZXhlYy0+cW1hKTsKLQkJCVYzRF9DT1JFX1dSSVRFKDAsIFYz RF9DTEVfQ1QwUU1TLCBleGVjLT5xbXMpOwotCQl9Ci0JCWlmIChleGVjLT5xdHMpIHsKLQkJCVYz RF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1QwUVRTLAotCQkJCSAgICAgICBWM0RfQ0xFX0NUMFFU U19FTkFCTEUgfAotCQkJCSAgICAgICBleGVjLT5xdHMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyog WFhYOiBTZXQgdGhlIFFDRkcgKi8KLQl9CisJLyogWFhYOiBTZXQgdGhlIFFDRkcgKi8KIAogCS8q IFNldCB0aGUgY3VycmVudCBhbmQgZW5kIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgbGlzdC4KIAkg KiBXcml0aW5nIHRoZSBlbmQgcmVnaXN0ZXIgaXMgd2hhdCBzdGFydHMgdGhlIGpvYi4KIAkgKi8K LQlWM0RfQ09SRV9XUklURSgwLCBWM0RfQ0xFX0NUTlFCQShxKSwgam9iLT5zdGFydCk7Ci0JVjNE X0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVE5RRUEocSksIGpvYi0+ZW5kKTsKKwlWM0RfQ09SRV9X UklURSgwLCBWM0RfQ0xFX0NUMVFCQSwgam9iLT5zdGFydCk7CisJVjNEX0NPUkVfV1JJVEUoMCwg VjNEX0NMRV9DVDFRRUEsIGpvYi0+ZW5kKTsKIAogCXJldHVybiBmZW5jZTsKIH0KQEAgLTE5MCw3 ICsyMTAsNyBAQCBzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqCiB2M2RfdGZ1X2pvYl9ydW4oc3Ry dWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKIHsKIAlzdHJ1Y3QgdjNkX3RmdV9qb2IgKmpv YiA9IHRvX3RmdV9qb2Ioc2NoZWRfam9iKTsKLQlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gam9iLT52 M2Q7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IGpvYi0+YmFzZS52M2Q7CiAJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9ICZ2M2QtPmRybTsKIAlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKIApAQCAt MTk5LDkgKzIxOSw5IEBAIHYzZF90ZnVfam9iX3J1bihzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2No ZWRfam9iKQogCQlyZXR1cm4gTlVMTDsKIAogCXYzZC0+dGZ1X2pvYiA9IGpvYjsKLQlpZiAoam9i LT5pcnFfZmVuY2UpCi0JCWRtYV9mZW5jZV9wdXQoam9iLT5pcnFfZmVuY2UpOwotCWpvYi0+aXJx X2ZlbmNlID0gZG1hX2ZlbmNlX2dldChmZW5jZSk7CisJaWYgKGpvYi0+YmFzZS5pcnFfZmVuY2Up CisJCWRtYV9mZW5jZV9wdXQoam9iLT5iYXNlLmlycV9mZW5jZSk7CisJam9iLT5iYXNlLmlycV9m ZW5jZSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOwogCiAJdHJhY2VfdjNkX3N1Ym1pdF90ZnUoZGV2 LCB0b192M2RfZmVuY2UoZmVuY2UpLT5zZXFubyk7CiAKQEAgLTI1MSw1MSArMjcxLDc0IEBAIHYz ZF9ncHVfcmVzZXRfZm9yX3RpbWVvdXQoc3RydWN0IHYzZF9kZXYgKnYzZCwgc3RydWN0IGRybV9z Y2hlZF9qb2IgKnNjaGVkX2pvYikKIAltdXRleF91bmxvY2soJnYzZC0+cmVzZXRfbG9jayk7CiB9 CiAKKy8qIElmIHRoZSBjdXJyZW50IGFkZHJlc3Mgb3IgcmV0dXJuIGFkZHJlc3MgaGF2ZSBjaGFu Z2VkLCB0aGVuIHRoZSBHUFUKKyAqIGhhcyBwcm9iYWJseSBtYWRlIHByb2dyZXNzIGFuZCB3ZSBz aG91bGQgZGVsYXkgdGhlIHJlc2V0LiAgVGhpcworICogY291bGQgZmFpbCBpZiB0aGUgR1BVIGdv dCBpbiBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSBDTCwgYnV0IHRoYXQKKyAqIGlzIHByZXR0eSB1 bmxpa2VseSBvdXRzaWRlIG9mIGFuIGktZy10IHRlc3RjYXNlLgorICovCiBzdGF0aWMgdm9pZAot djNkX2pvYl90aW1lZG91dChzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iKQordjNkX2Ns X2pvYl90aW1lZG91dChzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iLCBlbnVtIHYzZF9x dWV1ZSBxLAorCQkgICAgICB1MzIgKnRpbWVkb3V0X2N0Y2EsIHUzMiAqdGltZWRvdXRfY3RyYSkK IHsKIAlzdHJ1Y3QgdjNkX2pvYiAqam9iID0gdG9fdjNkX2pvYihzY2hlZF9qb2IpOwotCXN0cnVj dCB2M2RfZXhlY19pbmZvICpleGVjID0gam9iLT5leGVjOwotCXN0cnVjdCB2M2RfZGV2ICp2M2Qg PSBleGVjLT52M2Q7Ci0JZW51bSB2M2RfcXVldWUgam9iX3EgPSBqb2IgPT0gJmV4ZWMtPmJpbiA/ IFYzRF9CSU4gOiBWM0RfUkVOREVSOwotCXUzMiBjdGNhID0gVjNEX0NPUkVfUkVBRCgwLCBWM0Rf Q0xFX0NUTkNBKGpvYl9xKSk7Ci0JdTMyIGN0cmEgPSBWM0RfQ09SRV9SRUFEKDAsIFYzRF9DTEVf Q1ROUkEoam9iX3EpKTsKLQotCS8qIElmIHRoZSBjdXJyZW50IGFkZHJlc3Mgb3IgcmV0dXJuIGFk ZHJlc3MgaGF2ZSBjaGFuZ2VkLCB0aGVuCi0JICogdGhlIEdQVSBoYXMgcHJvYmFibHkgbWFkZSBw cm9ncmVzcyBhbmQgd2Ugc2hvdWxkIGRlbGF5IHRoZQotCSAqIHJlc2V0LiAgVGhpcyBjb3VsZCBm YWlsIGlmIHRoZSBHUFUgZ290IGluIGFuIGluZmluaXRlIGxvb3AKLQkgKiBpbiB0aGUgQ0wsIGJ1 dCB0aGF0IGlzIHByZXR0eSB1bmxpa2VseSBvdXRzaWRlIG9mIGFuIGktZy10Ci0JICogdGVzdGNh c2UuCi0JICovCi0JaWYgKGpvYi0+dGltZWRvdXRfY3RjYSAhPSBjdGNhIHx8IGpvYi0+dGltZWRv dXRfY3RyYSAhPSBjdHJhKSB7Ci0JCWpvYi0+dGltZWRvdXRfY3RjYSA9IGN0Y2E7Ci0JCWpvYi0+ dGltZWRvdXRfY3RyYSA9IGN0cmE7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IGpvYi0+djNkOwor CXUzMiBjdGNhID0gVjNEX0NPUkVfUkVBRCgwLCBWM0RfQ0xFX0NUTkNBKHEpKTsKKwl1MzIgY3Ry YSA9IFYzRF9DT1JFX1JFQUQoMCwgVjNEX0NMRV9DVE5SQShxKSk7CisKKwlpZiAoKnRpbWVkb3V0 X2N0Y2EgIT0gY3RjYSB8fCAqdGltZWRvdXRfY3RyYSAhPSBjdHJhKSB7CisJCSp0aW1lZG91dF9j dGNhID0gY3RjYTsKKwkJKnRpbWVkb3V0X2N0cmEgPSBjdHJhOwogCQlyZXR1cm47CiAJfQogCiAJ djNkX2dwdV9yZXNldF9mb3JfdGltZW91dCh2M2QsIHNjaGVkX2pvYik7CiB9CiAKK3N0YXRpYyB2 b2lkCit2M2RfYmluX2pvYl90aW1lZG91dChzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9i KQoreworCXN0cnVjdCB2M2RfYmluX2pvYiAqam9iID0gdG9fYmluX2pvYihzY2hlZF9qb2IpOwor CisJdjNkX2NsX2pvYl90aW1lZG91dChzY2hlZF9qb2IsIFYzRF9CSU4sCisJCQkgICAgJmpvYi0+ dGltZWRvdXRfY3RjYSwgJmpvYi0+dGltZWRvdXRfY3RyYSk7Cit9CisKK3N0YXRpYyB2b2lkCit2 M2RfcmVuZGVyX2pvYl90aW1lZG91dChzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iKQor eworCXN0cnVjdCB2M2RfcmVuZGVyX2pvYiAqam9iID0gdG9fcmVuZGVyX2pvYihzY2hlZF9qb2Ip OworCisJdjNkX2NsX2pvYl90aW1lZG91dChzY2hlZF9qb2IsIFYzRF9SRU5ERVIsCisJCQkgICAg JmpvYi0+dGltZWRvdXRfY3RjYSwgJmpvYi0+dGltZWRvdXRfY3RyYSk7Cit9CisKIHN0YXRpYyB2 b2lkCiB2M2RfdGZ1X2pvYl90aW1lZG91dChzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9i KQogewotCXN0cnVjdCB2M2RfdGZ1X2pvYiAqam9iID0gdG9fdGZ1X2pvYihzY2hlZF9qb2IpOwor CXN0cnVjdCB2M2Rfam9iICpqb2IgPSB0b192M2Rfam9iKHNjaGVkX2pvYik7CiAKIAl2M2RfZ3B1 X3Jlc2V0X2Zvcl90aW1lb3V0KGpvYi0+djNkLCBzY2hlZF9qb2IpOwogfQogCi1zdGF0aWMgY29u c3Qgc3RydWN0IGRybV9zY2hlZF9iYWNrZW5kX29wcyB2M2Rfc2NoZWRfb3BzID0geworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9vcHMgdjNkX2Jpbl9zY2hlZF9vcHMgPSB7 CiAJLmRlcGVuZGVuY3kgPSB2M2Rfam9iX2RlcGVuZGVuY3ksCi0JLnJ1bl9qb2IgPSB2M2Rfam9i X3J1biwKLQkudGltZWRvdXRfam9iID0gdjNkX2pvYl90aW1lZG91dCwKLQkuZnJlZV9qb2IgPSB2 M2Rfam9iX2ZyZWUKKwkucnVuX2pvYiA9IHYzZF9iaW5fam9iX3J1biwKKwkudGltZWRvdXRfam9i ID0gdjNkX2Jpbl9qb2JfdGltZWRvdXQsCisJLmZyZWVfam9iID0gdjNkX2pvYl9mcmVlLAorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9vcHMgdjNkX3JlbmRlcl9z Y2hlZF9vcHMgPSB7CisJLmRlcGVuZGVuY3kgPSB2M2RfcmVuZGVyX2pvYl9kZXBlbmRlbmN5LAor CS5ydW5fam9iID0gdjNkX3JlbmRlcl9qb2JfcnVuLAorCS50aW1lZG91dF9qb2IgPSB2M2RfcmVu ZGVyX2pvYl90aW1lZG91dCwKKwkuZnJlZV9qb2IgPSB2M2Rfam9iX2ZyZWUsCiB9OwogCiBzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9zY2hlZF9iYWNrZW5kX29wcyB2M2RfdGZ1X3NjaGVkX29wcyA9 IHsKLQkuZGVwZW5kZW5jeSA9IHYzZF90ZnVfam9iX2RlcGVuZGVuY3ksCisJLmRlcGVuZGVuY3kg PSB2M2Rfam9iX2RlcGVuZGVuY3ksCiAJLnJ1bl9qb2IgPSB2M2RfdGZ1X2pvYl9ydW4sCiAJLnRp bWVkb3V0X2pvYiA9IHYzZF90ZnVfam9iX3RpbWVkb3V0LAotCS5mcmVlX2pvYiA9IHYzZF90ZnVf am9iX2ZyZWUKKwkuZnJlZV9qb2IgPSB2M2Rfam9iX2ZyZWUsCiB9OwogCiBpbnQKQEAgLTMwNyw3 ICszNTAsNyBAQCB2M2Rfc2NoZWRfaW5pdChzdHJ1Y3QgdjNkX2RldiAqdjNkKQogCWludCByZXQ7 CiAKIAlyZXQgPSBkcm1fc2NoZWRfaW5pdCgmdjNkLT5xdWV1ZVtWM0RfQklOXS5zY2hlZCwKLQkJ CSAgICAgJnYzZF9zY2hlZF9vcHMsCisJCQkgICAgICZ2M2RfYmluX3NjaGVkX29wcywKIAkJCSAg ICAgaHdfam9ic19saW1pdCwgam9iX2hhbmdfbGltaXQsCiAJCQkgICAgIG1zZWNzX3RvX2ppZmZp ZXMoaGFuZ19saW1pdF9tcyksCiAJCQkgICAgICJ2M2RfYmluIik7CkBAIC0zMTcsNyArMzYwLDcg QEAgdjNkX3NjaGVkX2luaXQoc3RydWN0IHYzZF9kZXYgKnYzZCkKIAl9CiAKIAlyZXQgPSBkcm1f c2NoZWRfaW5pdCgmdjNkLT5xdWV1ZVtWM0RfUkVOREVSXS5zY2hlZCwKLQkJCSAgICAgJnYzZF9z Y2hlZF9vcHMsCisJCQkgICAgICZ2M2RfcmVuZGVyX3NjaGVkX29wcywKIAkJCSAgICAgaHdfam9i c19saW1pdCwgam9iX2hhbmdfbGltaXQsCiAJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoaGFuZ19s aW1pdF9tcyksCiAJCQkgICAgICJ2M2RfcmVuZGVyIik7Ci0tIAoyLjIwLjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==