From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v2 2/5] drm/v3d: Refactor job management. Date: Tue, 16 Apr 2019 15:58:53 -0700 Message-ID: <20190416225856.20264-3-eric@anholt.net> References: <20190416225856.20264-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 9E4F089DC9 for ; Tue, 16 Apr 2019 22:59:09 +0000 (UTC) In-Reply-To: <20190416225856.20264-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: Maxime Ripard , thomas.spurden@broadcom.com, linux-kernel@vger.kernel.org, Paul Kocialkowski , david.emett@broadcom.com List-Id: dri-devel@lists.freedesktop.org VGhlIENMIHN1Ym1pc3Npb24gaGFkIHR3byBqb2JzIGVtYmVkZGVkIGluIGFuIGV4ZWMgc3RydWN0 LiAgV2hlbiBJCmFkZGVkIFRGVSBzdXBwb3J0LCBJIGhhZCB0byByZXBsaWNhdGUgc29tZSBvZiB0 aGUgZXhlYyBzdHVmZiBhbmQgc29tZQpvZiB0aGUgam9iIHN0dWZmLiAgQXMgSSB3ZW50IHRvIGFk ZCBDU0QsIGl0IGJlY2FtZSBjbGVhciB0aGF0IGFjdHVhbGx5CndoYXQgd2FzIGluIGV4ZWMgc2hv dWxkIGp1c3QgYmUgaW4gdGhlIHR3byBDTCBqb2JzLCBhbmQgaXQgd291bGQgbGV0CnVzIHNoYXJl IGEgbG90IG1vcmUgY29kZSBiZXR3ZWVuIHRoZSA0IHF1ZXVlcy4KCnYyOiBGaXggbWlzc2luZyBl cnJvciBwYXRoIGluIFRGVSBpb2N0bCdzIGJvW10gYWxsb2NhdGlvbi4KClNpZ25lZC1vZmYtYnk6 IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3YzZC92 M2RfZHJ2LmggICB8ICA3NyArKystLS0tCiBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9nZW0uYyAg IHwgMzY1ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9pcnEuYyAgIHwgICA4ICstCiBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5j IHwgMjU5ICsrKysrKysrKysrKy0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzgwIGluc2Vy dGlvbnMoKyksIDMyOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Rydi5oCmluZGV4IDIzODQ4 NjkyNTA5Ni4uYWEyMWE3MGU2ODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3Yz ZF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYuaApAQCAtNzMsOCArNzMs OCBAQCBzdHJ1Y3QgdjNkX2RldiB7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgb3ZlcmZsb3dfbWVt X3dvcms7CiAKLQlzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqYmluX2pvYjsKLQlzdHJ1Y3QgdjNkX2V4 ZWNfaW5mbyAqcmVuZGVyX2pvYjsKKwlzdHJ1Y3QgdjNkX2Jpbl9qb2IgKmJpbl9qb2I7CisJc3Ry dWN0IHYzZF9yZW5kZXJfam9iICpyZW5kZXJfam9iOwogCXN0cnVjdCB2M2RfdGZ1X2pvYiAqdGZ1 X2pvYjsKIAogCXN0cnVjdCB2M2RfcXVldWVfc3RhdGUgcXVldWVbVjNEX01BWF9RVUVVRVNdOwpA QCAtMTIzLDcgKzEyMyw3IEBAIHN0cnVjdCB2M2RfYm8gewogCXN0cnVjdCBkcm1fbW1fbm9kZSBu b2RlOwogCiAJLyogTGlzdCBlbnRyeSBmb3IgdGhlIEJPJ3MgcG9zaXRpb24gaW4KLQkgKiB2M2Rf ZXhlY19pbmZvLT51bnJlZl9saXN0CisJICogdjNkX3JlbmRlcl9qb2ItPnVucmVmX2xpc3QKIAkg Ki8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHVucmVmX2hlYWQ7CiB9OwpAQCAtMTYzLDcgKzE2MywxNSBA QCB0b192M2RfZmVuY2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCiBzdHJ1Y3QgdjNkX2pvYiB7 CiAJc3RydWN0IGRybV9zY2hlZF9qb2IgYmFzZTsKIAotCXN0cnVjdCB2M2RfZXhlY19pbmZvICpl eGVjOworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCisJc3RydWN0IHYzZF9kZXYgKnYzZDsKKwor CS8qIFRoaXMgaXMgdGhlIGFycmF5IG9mIEJPcyB0aGF0IHdlcmUgbG9va2VkIHVwIGF0IHRoZSBz dGFydAorCSAqIG9mIHN1Ym1pc3Npb24uCisJICovCisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICoq Ym87CisJdTMyIGJvX2NvdW50OwogCiAJLyogQW4gb3B0aW9uYWwgZmVuY2UgdXNlcnNwYWNlIGNh biBwYXNzIGluIGZvciB0aGUgam9iIHRvIGRlcGVuZCBvbi4gKi8KIAlzdHJ1Y3QgZG1hX2ZlbmNl ICppbl9mZW5jZTsKQEAgLTE3MSw1OSArMTc5LDUzIEBAIHN0cnVjdCB2M2Rfam9iIHsKIAkvKiB2 M2QgZmVuY2UgdG8gYmUgc2lnbmFsZWQgYnkgSVJRIGhhbmRsZXIgd2hlbiB0aGUgam9iIGlzIGNv bXBsZXRlLiAqLwogCXN0cnVjdCBkbWFfZmVuY2UgKmlycV9mZW5jZTsKIAorCS8qIHNjaGVkdWxl ciBmZW5jZSBmb3Igd2hlbiB0aGUgam9iIGlzIGNvbnNpZGVyZWQgY29tcGxldGUgYW5kCisJICog dGhlIEJPIHJlc2VydmF0aW9ucyBjYW4gYmUgcmVsZWFzZWQuCisJICovCisJc3RydWN0IGRtYV9m ZW5jZSAqZG9uZV9mZW5jZTsKKworCS8qIENhbGxiYWNrIGZvciB0aGUgZnJlZWluZyBvZiB0aGUg am9iIG9uIHJlZmNvdW50IGdvaW5nIHRvIDAuICovCisJdm9pZCAoKmZyZWUpKHN0cnVjdCBrcmVm ICpyZWYpOworfTsKKworc3RydWN0IHYzZF9iaW5fam9iIHsKKwlzdHJ1Y3QgdjNkX2pvYiBiYXNl OworCiAJLyogR1BVIHZpcnR1YWwgYWRkcmVzc2VzIG9mIHRoZSBzdGFydC9lbmQgb2YgdGhlIENM IGpvYi4gKi8KIAl1MzIgc3RhcnQsIGVuZDsKIAogCXUzMiB0aW1lZG91dF9jdGNhLCB0aW1lZG91 dF9jdHJhOwotfTsKIAotc3RydWN0IHYzZF9leGVjX2luZm8gewotCXN0cnVjdCB2M2RfZGV2ICp2 M2Q7CisJLyogQ29ycmVzcG9uZGluZyByZW5kZXIgam9iLCBmb3IgYXR0YWNoaW5nIG91ciBvdmVy ZmxvdyBtZW1vcnkuICovCisJc3RydWN0IHYzZF9yZW5kZXJfam9iICpyZW5kZXI7CisKKwkvKiBT dWJtaXR0ZWQgdGlsZSBtZW1vcnkgYWxsb2NhdGlvbiBzdGFydC9zaXplLCB0aWxlIHN0YXRlLiAq LworCXUzMiBxbWEsIHFtcywgcXRzOworfTsKIAotCXN0cnVjdCB2M2Rfam9iIGJpbiwgcmVuZGVy Oworc3RydWN0IHYzZF9yZW5kZXJfam9iIHsKKwlzdHJ1Y3QgdjNkX2pvYiBiYXNlOwogCi0JLyog RmVuY2UgZm9yIHdoZW4gdGhlIHNjaGVkdWxlciBjb25zaWRlcnMgdGhlIGJpbm5lciB0byBiZQot CSAqIGRvbmUsIGZvciByZW5kZXIgdG8gZGVwZW5kIG9uLgorCS8qIE9wdGlvbmFsIGZlbmNlIGZv ciB0aGUgYmlubmVyLCB0byBkZXBlbmQgb24gYmVmb3JlIHN0YXJ0aW5nCisJICogb3VyIGpvYi4K IAkgKi8KIAlzdHJ1Y3QgZG1hX2ZlbmNlICpiaW5fZG9uZV9mZW5jZTsKIAotCS8qIEZlbmNlIGZv ciB3aGVuIHRoZSBzY2hlZHVsZXIgY29uc2lkZXJzIHRoZSByZW5kZXIgdG8gYmUKLQkgKiBkb25l LCBmb3Igd2hlbiB0aGUgQk9zIHJlc2VydmF0aW9ucyBzaG91bGQgYmUgY29tcGxldGUuCi0JICov Ci0Jc3RydWN0IGRtYV9mZW5jZSAqcmVuZGVyX2RvbmVfZmVuY2U7Ci0KLQlzdHJ1Y3Qga3JlZiBy ZWZjb3VudDsKKwkvKiBHUFUgdmlydHVhbCBhZGRyZXNzZXMgb2YgdGhlIHN0YXJ0L2VuZCBvZiB0 aGUgQ0wgam9iLiAqLworCXUzMiBzdGFydCwgZW5kOwogCi0JLyogVGhpcyBpcyB0aGUgYXJyYXkg b2YgQk9zIHRoYXQgd2VyZSBsb29rZWQgdXAgYXQgdGhlIHN0YXJ0IG9mIGV4ZWMuICovCi0Jc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICoqYm87Ci0JdTMyIGJvX2NvdW50OworCXUzMiB0aW1lZG91dF9j dGNhLCB0aW1lZG91dF9jdHJhOwogCiAJLyogTGlzdCBvZiBvdmVyZmxvdyBCT3MgdXNlZCBpbiB0 aGUgam9iIHRoYXQgbmVlZCB0byBiZQogCSAqIHJlbGVhc2VkIG9uY2UgdGhlIGpvYiBpcyBjb21w bGV0ZS4KIAkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHVucmVmX2xpc3Q7Ci0KLQkvKiBTdWJtaXR0 ZWQgdGlsZSBtZW1vcnkgYWxsb2NhdGlvbiBzdGFydC9zaXplLCB0aWxlIHN0YXRlLiAqLwotCXUz MiBxbWEsIHFtcywgcXRzOwogfTsKIAogc3RydWN0IHYzZF90ZnVfam9iIHsKLQlzdHJ1Y3QgZHJt X3NjaGVkX2pvYiBiYXNlOworCXN0cnVjdCB2M2Rfam9iIGJhc2U7CiAKIAlzdHJ1Y3QgZHJtX3Yz ZF9zdWJtaXRfdGZ1IGFyZ3M7Ci0KLQkvKiBBbiBvcHRpb25hbCBmZW5jZSB1c2Vyc3BhY2UgY2Fu IHBhc3MgaW4gZm9yIHRoZSBqb2IgdG8gZGVwZW5kIG9uLiAqLwotCXN0cnVjdCBkbWFfZmVuY2Ug KmluX2ZlbmNlOwotCi0JLyogdjNkIGZlbmNlIHRvIGJlIHNpZ25hbGVkIGJ5IElSUSBoYW5kbGVy IHdoZW4gdGhlIGpvYiBpcyBjb21wbGV0ZS4gKi8KLQlzdHJ1Y3QgZG1hX2ZlbmNlICppcnFfZmVu Y2U7Ci0KLQlzdHJ1Y3QgdjNkX2RldiAqdjNkOwotCi0Jc3RydWN0IGtyZWYgcmVmY291bnQ7Ci0K LQkvKiBUaGlzIGlzIHRoZSBhcnJheSBvZiBCT3MgdGhhdCB3ZXJlIGxvb2tlZCB1cCBhdCB0aGUg c3RhcnQgb2YgZXhlYy4gKi8KLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvWzRdOwogfTsKIAog LyoqCkBAIC0yODksOCArMjkxLDcgQEAgaW50IHYzZF9zdWJtaXRfdGZ1X2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYpOwogaW50IHYzZF93YWl0X2JvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCiAJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLXZvaWQgdjNkX2V4 ZWNfcHV0KHN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjKTsKLXZvaWQgdjNkX3RmdV9qb2JfcHV0 KHN0cnVjdCB2M2RfdGZ1X2pvYiAqZXhlYyk7Cit2b2lkIHYzZF9qb2JfcHV0KHN0cnVjdCB2M2Rf am9iICpqb2IpOwogdm9pZCB2M2RfcmVzZXQoc3RydWN0IHYzZF9kZXYgKnYzZCk7CiB2b2lkIHYz ZF9pbnZhbGlkYXRlX2NhY2hlcyhzdHJ1Y3QgdjNkX2RldiAqdjNkKTsKIApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9n ZW0uYwppbmRleCBhYTAzOTdkMTI4NDcuLjM1MGEyNjlhN2I1OCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3YzZC92M2RfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZ2Vt LmMKQEAgLTE5MywxOCArMTkzLDYgQEAgdjNkX2ludmFsaWRhdGVfY2FjaGVzKHN0cnVjdCB2M2Rf ZGV2ICp2M2QpCiAJdjNkX2ludmFsaWRhdGVfc2xpY2VzKHYzZCwgMCk7CiB9CiAKLXN0YXRpYyB2 b2lkCi12M2RfYXR0YWNoX29iamVjdF9mZW5jZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9z LCBpbnQgYm9fY291bnQsCi0JCQkgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCi17Ci0JaW50IGk7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYm9fY291bnQ7IGkrKykgewotCQkvKiBYWFg6IFVzZSBzaGFy ZWQgZmVuY2VzIGZvciByZWFkLW9ubHkgb2JqZWN0cy4gKi8KLQkJcmVzZXJ2YXRpb25fb2JqZWN0 X2FkZF9leGNsX2ZlbmNlKGJvc1tpXS0+cmVzdiwgZmVuY2UpOwotCX0KLX0KLQogLyogVGFrZXMg dGhlIHJlc2VydmF0aW9uIGxvY2sgb24gYWxsIHRoZSBCT3MgYmVpbmcgcmVmZXJlbmNlZCwgc28g dGhhdAogICogYXQgcXVldWUgc3VibWl0IHRpbWUgd2UgY2FuIHVwZGF0ZSB0aGUgcmVzZXJ2YXRp b25zLgogICoKQEAgLTIzOSwxMSArMjI3LDExIEBAIHYzZF9sb2NrX2JvX3Jlc2VydmF0aW9ucyhz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipib3MsCiB9CiAKIC8qKgotICogdjNkX2NsX2xvb2t1cF9i b3MoKSAtIFNldHMgdXAgZXhlYy0+Ym9bXSB3aXRoIHRoZSBHRU0gb2JqZWN0cworICogdjNkX2xv b2t1cF9ib3MoKSAtIFNldHMgdXAgam9iLT5ib1tdIHdpdGggdGhlIEdFTSBvYmplY3RzCiAgKiBy ZWZlcmVuY2VkIGJ5IHRoZSBqb2IuCiAgKiBAZGV2OiBEUk0gZGV2aWNlCiAgKiBAZmlsZV9wcml2 OiBEUk0gZmlsZSBmb3IgdGhpcyBmZAotICogQGV4ZWM6IFYzRCBqb2IgYmVpbmcgc2V0IHVwCisg KiBAam9iOiBWM0Qgam9iIGJlaW5nIHNldCB1cAogICoKICAqIFRoZSBjb21tYW5kIHZhbGlkYXRv ciBuZWVkcyB0byByZWZlcmVuY2UgQk9zIGJ5IHRoZWlyIGluZGV4IHdpdGhpbgogICogdGhlIHN1 Ym1pdHRlZCBqb2IncyBCTyBsaXN0LiAgVGhpcyBkb2VzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBq b2IncwpAQCAtMjUzLDE4ICsyNDEsMTkgQEAgdjNkX2xvY2tfYm9fcmVzZXJ2YXRpb25zKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqKmJvcywKICAqIGZhaWx1cmUsIGJlY2F1c2UgdGhhdCB3aWxsIGhh cHBlbiBhdCB2M2RfZXhlY19jbGVhbnVwKCkgdGltZS4KICAqLwogc3RhdGljIGludAotdjNkX2Ns X2xvb2t1cF9ib3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwKLQkJICBzdHJ1Y3QgZHJtX3YzZF9zdWJtaXRfY2wgKmFyZ3MsCi0JCSAgc3Ry dWN0IHYzZF9leGVjX2luZm8gKmV4ZWMpCit2M2RfbG9va3VwX2JvcyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAorCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkgICAgICAgc3Ry dWN0IHYzZF9qb2IgKmpvYiwKKwkgICAgICAgdTY0IGJvX2hhbmRsZXMsCisJICAgICAgIHUzMiBi b19jb3VudCkKIHsKIAl1MzIgKmhhbmRsZXM7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKLQll eGVjLT5ib19jb3VudCA9IGFyZ3MtPmJvX2hhbmRsZV9jb3VudDsKKwlqb2ItPmJvX2NvdW50ID0g Ym9fY291bnQ7CiAKLQlpZiAoIWV4ZWMtPmJvX2NvdW50KSB7CisJaWYgKCFqb2ItPmJvX2NvdW50 KSB7CiAJCS8qIFNlZSBjb21tZW50IG9uIGJvX2luZGV4IGZvciB3aHkgd2UgaGF2ZSB0byBjaGVj awogCQkgKiB0aGlzLgogCQkgKi8KQEAgLTI3MiwxNSArMjYxLDE1IEBAIHYzZF9jbF9sb29rdXBf Ym9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWV4 ZWMtPmJvID0ga3ZtYWxsb2NfYXJyYXkoZXhlYy0+Ym9fY291bnQsCi0JCQkJICBzaXplb2Yoc3Ry dWN0IGRybV9nZW1fY21hX29iamVjdCAqKSwKLQkJCQkgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJP KTsKLQlpZiAoIWV4ZWMtPmJvKSB7CisJam9iLT5ibyA9IGt2bWFsbG9jX2FycmF5KGpvYi0+Ym9f Y291bnQsCisJCQkJIHNpemVvZihzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICopLAorCQkJCSBH RlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKCFqb2ItPmJvKSB7CiAJCURSTV9ERUJVRygi RmFpbGVkIHRvIGFsbG9jYXRlIHZhbGlkYXRlZCBCTyBwb2ludGVyc1xuIik7CiAJCXJldHVybiAt RU5PTUVNOwogCX0KIAotCWhhbmRsZXMgPSBrdm1hbGxvY19hcnJheShleGVjLT5ib19jb3VudCwg c2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWhhbmRsZXMgPSBrdm1hbGxvY19hcnJheShqb2It PmJvX2NvdW50LCBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoYW5kbGVzKSB7CiAJ CXJldCA9IC1FTk9NRU07CiAJCURSTV9ERUJVRygiRmFpbGVkIHRvIGFsbG9jYXRlIGluY29taW5n IEdFTSBoYW5kbGVzXG4iKTsKQEAgLTI4OCwxNSArMjc3LDE1IEBAIHYzZF9jbF9sb29rdXBfYm9z KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJfQogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGhhbmRs ZXMsCi0JCQkgICAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWFyZ3MtPmJvX2hhbmRsZXMsCi0J CQkgICBleGVjLT5ib19jb3VudCAqIHNpemVvZih1MzIpKSkgeworCQkJICAgKHZvaWQgX191c2Vy ICopKHVpbnRwdHJfdClib19oYW5kbGVzLAorCQkJICAgam9iLT5ib19jb3VudCAqIHNpemVvZih1 MzIpKSkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlEUk1fREVCVUcoIkZhaWxlZCB0byBjb3B5IGlu IEdFTSBoYW5kbGVzXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAogCXNwaW5fbG9jaygmZmlsZV9w cml2LT50YWJsZV9sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgZXhlYy0+Ym9fY291bnQ7IGkrKykg eworCWZvciAoaSA9IDA7IGkgPCBqb2ItPmJvX2NvdW50OyBpKyspIHsKIAkJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpibyA9IGlkcl9maW5kKCZmaWxlX3ByaXYtPm9iamVjdF9pZHIsCiAJCQkJCQkg ICAgIGhhbmRsZXNbaV0pOwogCQlpZiAoIWJvKSB7CkBAIC0zMDcsNyArMjk2LDcgQEAgdjNkX2Ns X2xvb2t1cF9ib3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCWdvdG8gZmFpbDsKIAkJfQog CQlkcm1fZ2VtX29iamVjdF9nZXQoYm8pOwotCQlleGVjLT5ib1tpXSA9IGJvOworCQlqb2ItPmJv W2ldID0gYm87CiAJfQogCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOwogCkBA IC0zMTcsNjcgKzMwNiw0NCBAQCB2M2RfY2xfbG9va3VwX2JvcyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAogfQogCiBzdGF0aWMgdm9pZAotdjNkX2V4ZWNfY2xlYW51cChzdHJ1Y3Qga3JlZiAqcmVm KQordjNkX2pvYl9mcmVlKHN0cnVjdCBrcmVmICpyZWYpCiB7Ci0Jc3RydWN0IHYzZF9leGVjX2lu Zm8gKmV4ZWMgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgdjNkX2V4ZWNfaW5mbywKLQkJCQkJ CSAgcmVmY291bnQpOwotCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSBleGVjLT52M2Q7Ci0JdW5zaWdu ZWQgaW50IGk7Ci0Jc3RydWN0IHYzZF9ibyAqYm8sICpzYXZlOwotCi0JZG1hX2ZlbmNlX3B1dChl eGVjLT5iaW4uaW5fZmVuY2UpOwotCWRtYV9mZW5jZV9wdXQoZXhlYy0+cmVuZGVyLmluX2ZlbmNl KTsKLQotCWRtYV9mZW5jZV9wdXQoZXhlYy0+YmluLmlycV9mZW5jZSk7Ci0JZG1hX2ZlbmNlX3B1 dChleGVjLT5yZW5kZXIuaXJxX2ZlbmNlKTsKLQotCWRtYV9mZW5jZV9wdXQoZXhlYy0+YmluX2Rv bmVfZmVuY2UpOwotCWRtYV9mZW5jZV9wdXQoZXhlYy0+cmVuZGVyX2RvbmVfZmVuY2UpOwotCi0J Zm9yIChpID0gMDsgaSA8IGV4ZWMtPmJvX2NvdW50OyBpKyspCi0JCWRybV9nZW1fb2JqZWN0X3B1 dF91bmxvY2tlZChleGVjLT5ib1tpXSk7Ci0Ja3ZmcmVlKGV4ZWMtPmJvKTsKKwlzdHJ1Y3QgdjNk X2pvYiAqam9iID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IHYzZF9qb2IsIHJlZmNvdW50KTsK KwlpbnQgaTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibywgc2F2ZSwgJmV4ZWMtPnVu cmVmX2xpc3QsIHVucmVmX2hlYWQpIHsKLQkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZi by0+YmFzZS5iYXNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgam9iLT5ib19jb3VudDsgaSsrKSB7CisJ CWlmIChqb2ItPmJvW2ldKQorCQkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGpvYi0+Ym9b aV0pOwogCX0KKwlrdmZyZWUoam9iLT5ibyk7CiAKLQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5 KHYzZC0+ZGV2KTsKLQlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCh2M2QtPmRldik7CisJZG1h X2ZlbmNlX3B1dChqb2ItPmluX2ZlbmNlKTsKKwlkbWFfZmVuY2VfcHV0KGpvYi0+aXJxX2ZlbmNl KTsKKwlkbWFfZmVuY2VfcHV0KGpvYi0+ZG9uZV9mZW5jZSk7CiAKLQlrZnJlZShleGVjKTsKLX0K KwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGpvYi0+djNkLT5kZXYpOworCXBtX3J1bnRpbWVf cHV0X2F1dG9zdXNwZW5kKGpvYi0+djNkLT5kZXYpOwogCi12b2lkIHYzZF9leGVjX3B1dChzdHJ1 Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYykKLXsKLQlrcmVmX3B1dCgmZXhlYy0+cmVmY291bnQsIHYz ZF9leGVjX2NsZWFudXApOworCWtmcmVlKGpvYik7CiB9CiAKIHN0YXRpYyB2b2lkCi12M2RfdGZ1 X2pvYl9jbGVhbnVwKHN0cnVjdCBrcmVmICpyZWYpCit2M2RfcmVuZGVyX2pvYl9mcmVlKHN0cnVj dCBrcmVmICpyZWYpCiB7Ci0Jc3RydWN0IHYzZF90ZnVfam9iICpqb2IgPSBjb250YWluZXJfb2Yo cmVmLCBzdHJ1Y3QgdjNkX3RmdV9qb2IsCi0JCQkJCSAgICAgICByZWZjb3VudCk7Ci0Jc3RydWN0 IHYzZF9kZXYgKnYzZCA9IGpvYi0+djNkOwotCXVuc2lnbmVkIGludCBpOwotCi0JZG1hX2ZlbmNl X3B1dChqb2ItPmluX2ZlbmNlKTsKLQlkbWFfZmVuY2VfcHV0KGpvYi0+aXJxX2ZlbmNlKTsKKwlz dHJ1Y3QgdjNkX3JlbmRlcl9qb2IgKmpvYiA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCB2M2Rf cmVuZGVyX2pvYiwKKwkJCQkJCSAgYmFzZS5yZWZjb3VudCk7CisJc3RydWN0IHYzZF9ibyAqYm8s ICpzYXZlOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoam9iLT5ibyk7IGkrKykgewot CQlpZiAoam9iLT5ib1tpXSkKLQkJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChqb2ItPmJv W2ldKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYm8sIHNhdmUsICZqb2ItPnVucmVmX2xp c3QsIHVucmVmX2hlYWQpIHsKKwkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZiby0+YmFz ZS5iYXNlKTsKIAl9CiAKLQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHYzZC0+ZGV2KTsKLQlw bV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCh2M2QtPmRldik7Ci0KLQlrZnJlZShqb2IpOworCXYz ZF9qb2JfZnJlZShyZWYpOwogfQogCi12b2lkIHYzZF90ZnVfam9iX3B1dChzdHJ1Y3QgdjNkX3Rm dV9qb2IgKmpvYikKK3ZvaWQgdjNkX2pvYl9wdXQoc3RydWN0IHYzZF9qb2IgKmpvYikKIHsKLQlr cmVmX3B1dCgmam9iLT5yZWZjb3VudCwgdjNkX3RmdV9qb2JfY2xlYW51cCk7CisJa3JlZl9wdXQo JmpvYi0+cmVmY291bnQsIGpvYi0+ZnJlZSk7CiB9CiAKIGludApAQCAtNDEzLDYgKzM3OSw3NyBA QCB2M2Rfd2FpdF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAog CXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQKK3YzZF9qb2JfaW5pdChzdHJ1Y3QgdjNkX2Rl diAqdjNkLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkgICAgIHN0cnVjdCB2M2Rfam9i ICpqb2IsIHZvaWQgKCpmcmVlKShzdHJ1Y3Qga3JlZiAqcmVmKSwKKwkgICAgIHUzMiBpbl9zeW5j KQoreworCWludCByZXQ7CisKKwlqb2ItPnYzZCA9IHYzZDsKKwlqb2ItPmZyZWUgPSBmcmVlOwor CisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyh2M2QtPmRldik7CisJaWYgKHJldCA8IDApCisJ CXJldHVybiByZXQ7CisKKwlyZXQgPSBkcm1fc3luY29ial9maW5kX2ZlbmNlKGZpbGVfcHJpdiwg aW5fc3luYywgMCwgMCwgJmpvYi0+aW5fZmVuY2UpOworCWlmIChyZXQgPT0gLUVJTlZBTCkgewor CQlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCh2M2QtPmRldik7CisJCXJldHVybiByZXQ7CisJ fQorCisJa3JlZl9pbml0KCZqb2ItPnJlZmNvdW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50Cit2M2RfcHVzaF9qb2Ioc3RydWN0IHYzZF9maWxlX3ByaXYgKnYzZF9wcml2LAorCSAg ICAgc3RydWN0IHYzZF9qb2IgKmpvYiwgZW51bSB2M2RfcXVldWUgcXVldWUpCit7CisJaW50IHJl dDsKKworCXJldCA9IGRybV9zY2hlZF9qb2JfaW5pdCgmam9iLT5iYXNlLCAmdjNkX3ByaXYtPnNj aGVkX2VudGl0eVtxdWV1ZV0sCisJCQkJIHYzZF9wcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJam9iLT5kb25lX2ZlbmNlID0gZG1hX2ZlbmNlX2dldCgmam9iLT5iYXNlLnNfZmVu Y2UtPmZpbmlzaGVkKTsKKworCS8qIHB1dCBieSBzY2hlZHVsZXIgam9iIGNvbXBsZXRpb24gKi8K KwlrcmVmX2dldCgmam9iLT5yZWZjb3VudCk7CisKKwlkcm1fc2NoZWRfZW50aXR5X3B1c2hfam9i KCZqb2ItPmJhc2UsICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5W3F1ZXVlXSk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQKK3YzZF9hdHRhY2hfZmVuY2VzX2FuZF91bmxvY2tfcmVzZXJ2 YXRpb24oc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJCSBzdHJ1Y3QgdjNkX2pvYiAq am9iLAorCQkJCQkgc3RydWN0IHd3X2FjcXVpcmVfY3R4ICphY3F1aXJlX2N0eCwKKwkJCQkJIHUz MiBvdXRfc3luYykKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNfb3V0OworCWludCBpOwor CisJZm9yIChpID0gMDsgaSA8IGpvYi0+Ym9fY291bnQ7IGkrKykgeworCQkvKiBYWFg6IFVzZSBz aGFyZWQgZmVuY2VzIGZvciByZWFkLW9ubHkgb2JqZWN0cy4gKi8KKwkJcmVzZXJ2YXRpb25fb2Jq ZWN0X2FkZF9leGNsX2ZlbmNlKGpvYi0+Ym9baV0tPnJlc3YsCisJCQkJCQkgIGpvYi0+ZG9uZV9m ZW5jZSk7CisJfQorCisJZHJtX2dlbV91bmxvY2tfcmVzZXJ2YXRpb25zKGpvYi0+Ym8sIGpvYi0+ Ym9fY291bnQsIGFjcXVpcmVfY3R4KTsKKworCS8qIFVwZGF0ZSB0aGUgcmV0dXJuIHN5bmMgb2Jq ZWN0IGZvciB0aGUgam9iICovCisJc3luY19vdXQgPSBkcm1fc3luY29ial9maW5kKGZpbGVfcHJp diwgb3V0X3N5bmMpOworCWlmIChzeW5jX291dCkgeworCQlkcm1fc3luY29ial9yZXBsYWNlX2Zl bmNlKHN5bmNfb3V0LCBqb2ItPmRvbmVfZmVuY2UpOworCQlkcm1fc3luY29ial9wdXQoc3luY19v dXQpOworCX0KK30KKwogLyoqCiAgKiB2M2Rfc3VibWl0X2NsX2lvY3RsKCkgLSBTdWJtaXRzIGEg am9iIChmcmFtZSkgdG8gdGhlIFYzRC4KICAqIEBkZXY6IERSTSBkZXZpY2UKQEAgLTQzMiw5ICs0 NjksOSBAQCB2M2Rfc3VibWl0X2NsX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCiAJc3RydWN0IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZGV2KTsKIAlzdHJ1Y3Qg djNkX2ZpbGVfcHJpdiAqdjNkX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OwogCXN0cnVj dCBkcm1fdjNkX3N1Ym1pdF9jbCAqYXJncyA9IGRhdGE7Ci0Jc3RydWN0IHYzZF9leGVjX2luZm8g KmV4ZWM7CisJc3RydWN0IHYzZF9iaW5fam9iICpiaW4gPSBOVUxMOworCXN0cnVjdCB2M2RfcmVu ZGVyX2pvYiAqcmVuZGVyOwogCXN0cnVjdCB3d19hY3F1aXJlX2N0eCBhY3F1aXJlX2N0eDsKLQlz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNfb3V0OwogCWludCByZXQgPSAwOwogCiAJdHJhY2VfdjNk X3N1Ym1pdF9jbF9pb2N0bCgmdjNkLT5kcm0sIGFyZ3MtPnJjbF9zdGFydCwgYXJncy0+cmNsX2Vu ZCk7CkBAIC00NDQsMTAwICs0ODEsODMgQEAgdjNkX3N1Ym1pdF9jbF9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlleGVj ID0ga2NhbGxvYygxLCBzaXplb2YoKmV4ZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWV4ZWMpCisJ cmVuZGVyID0ga2NhbGxvYygxLCBzaXplb2YoKnJlbmRlciksIEdGUF9LRVJORUwpOworCWlmICgh cmVuZGVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMo djNkLT5kZXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWtmcmVlKGV4ZWMpOworCXJlbmRlci0+c3Rh cnQgPSBhcmdzLT5yY2xfc3RhcnQ7CisJcmVuZGVyLT5lbmQgPSBhcmdzLT5yY2xfZW5kOworCUlO SVRfTElTVF9IRUFEKCZyZW5kZXItPnVucmVmX2xpc3QpOworCisJcmV0ID0gdjNkX2pvYl9pbml0 KHYzZCwgZmlsZV9wcml2LCAmcmVuZGVyLT5iYXNlLAorCQkJICAgdjNkX3JlbmRlcl9qb2JfZnJl ZSwgYXJncy0+aW5fc3luY19yY2wpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUocmVuZGVyKTsKIAkJ cmV0dXJuIHJldDsKIAl9CiAKLQlrcmVmX2luaXQoJmV4ZWMtPnJlZmNvdW50KTsKKwlpZiAoYXJn cy0+YmNsX3N0YXJ0ICE9IGFyZ3MtPmJjbF9lbmQpIHsKKwkJYmluID0ga2NhbGxvYygxLCBzaXpl b2YoKmJpbiksIEdGUF9LRVJORUwpOworCQlpZiAoIWJpbikKKwkJCXJldHVybiAtRU5PTUVNOwog Ci0JcmV0ID0gZHJtX3N5bmNvYmpfZmluZF9mZW5jZShmaWxlX3ByaXYsIGFyZ3MtPmluX3N5bmNf YmNsLAotCQkJCSAgICAgMCwgMCwgJmV4ZWMtPmJpbi5pbl9mZW5jZSk7Ci0JaWYgKHJldCA9PSAt RUlOVkFMKQotCQlnb3RvIGZhaWw7CisJCXJldCA9IHYzZF9qb2JfaW5pdCh2M2QsIGZpbGVfcHJp diwgJmJpbi0+YmFzZSwKKwkJCQkgICB2M2Rfam9iX2ZyZWUsIGFyZ3MtPmluX3N5bmNfYmNsKTsK KwkJaWYgKHJldCkgeworCQkJdjNkX2pvYl9wdXQoJnJlbmRlci0+YmFzZSk7CisJCQlyZXR1cm4g cmV0OworCQl9CiAKLQlyZXQgPSBkcm1fc3luY29ial9maW5kX2ZlbmNlKGZpbGVfcHJpdiwgYXJn cy0+aW5fc3luY19yY2wsCi0JCQkJICAgICAwLCAwLCAmZXhlYy0+cmVuZGVyLmluX2ZlbmNlKTsK LQlpZiAocmV0ID09IC1FSU5WQUwpCi0JCWdvdG8gZmFpbDsKKwkJYmluLT5zdGFydCA9IGFyZ3Mt PmJjbF9zdGFydDsKKwkJYmluLT5lbmQgPSBhcmdzLT5iY2xfZW5kOworCQliaW4tPnFtYSA9IGFy Z3MtPnFtYTsKKwkJYmluLT5xbXMgPSBhcmdzLT5xbXM7CisJCWJpbi0+cXRzID0gYXJncy0+cXRz OworCQliaW4tPnJlbmRlciA9IHJlbmRlcjsKKwl9CiAKLQlleGVjLT5xbWEgPSBhcmdzLT5xbWE7 Ci0JZXhlYy0+cW1zID0gYXJncy0+cW1zOwotCWV4ZWMtPnF0cyA9IGFyZ3MtPnF0czsKLQlleGVj LT5iaW4uZXhlYyA9IGV4ZWM7Ci0JZXhlYy0+YmluLnN0YXJ0ID0gYXJncy0+YmNsX3N0YXJ0Owot CWV4ZWMtPmJpbi5lbmQgPSBhcmdzLT5iY2xfZW5kOwotCWV4ZWMtPnJlbmRlci5leGVjID0gZXhl YzsKLQlleGVjLT5yZW5kZXIuc3RhcnQgPSBhcmdzLT5yY2xfc3RhcnQ7Ci0JZXhlYy0+cmVuZGVy LmVuZCA9IGFyZ3MtPnJjbF9lbmQ7Ci0JZXhlYy0+djNkID0gdjNkOwotCUlOSVRfTElTVF9IRUFE KCZleGVjLT51bnJlZl9saXN0KTsKLQotCXJldCA9IHYzZF9jbF9sb29rdXBfYm9zKGRldiwgZmls ZV9wcml2LCBhcmdzLCBleGVjKTsKKwlyZXQgPSB2M2RfbG9va3VwX2JvcyhkZXYsIGZpbGVfcHJp diwgJnJlbmRlci0+YmFzZSwKKwkJCSAgICAgYXJncy0+Ym9faGFuZGxlcywgYXJncy0+Ym9faGFu ZGxlX2NvdW50KTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKLQlyZXQgPSB2M2RfbG9ja19i b19yZXNlcnZhdGlvbnMoZXhlYy0+Ym8sIGV4ZWMtPmJvX2NvdW50LAorCXJldCA9IHYzZF9sb2Nr X2JvX3Jlc2VydmF0aW9ucyhyZW5kZXItPmJhc2UuYm8sIHJlbmRlci0+YmFzZS5ib19jb3VudCwK IAkJCQkgICAgICAgJmFjcXVpcmVfY3R4KTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKIAlt dXRleF9sb2NrKCZ2M2QtPnNjaGVkX2xvY2spOwotCWlmIChleGVjLT5iaW4uc3RhcnQgIT0gZXhl Yy0+YmluLmVuZCkgewotCQlyZXQgPSBkcm1fc2NoZWRfam9iX2luaXQoJmV4ZWMtPmJpbi5iYXNl LAotCQkJCQkgJnYzZF9wcml2LT5zY2hlZF9lbnRpdHlbVjNEX0JJTl0sCi0JCQkJCSB2M2RfcHJp dik7CisJaWYgKGJpbikgeworCQlyZXQgPSB2M2RfcHVzaF9qb2IodjNkX3ByaXYsICZiaW4tPmJh c2UsIFYzRF9CSU4pOwogCQlpZiAocmV0KQogCQkJZ290byBmYWlsX3VucmVzZXJ2ZTsKIAotCQll eGVjLT5iaW5fZG9uZV9mZW5jZSA9Ci0JCQlkbWFfZmVuY2VfZ2V0KCZleGVjLT5iaW4uYmFzZS5z X2ZlbmNlLT5maW5pc2hlZCk7Ci0KLQkJa3JlZl9nZXQoJmV4ZWMtPnJlZmNvdW50KTsgLyogcHV0 IGJ5IHNjaGVkdWxlciBqb2IgY29tcGxldGlvbiAqLwotCQlkcm1fc2NoZWRfZW50aXR5X3B1c2hf am9iKCZleGVjLT5iaW4uYmFzZSwKLQkJCQkJICAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtWM0Rf QklOXSk7CisJCXJlbmRlci0+YmluX2RvbmVfZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KGJpbi0+YmFz ZS5kb25lX2ZlbmNlKTsKIAl9CiAKLQlyZXQgPSBkcm1fc2NoZWRfam9iX2luaXQoJmV4ZWMtPnJl bmRlci5iYXNlLAotCQkJCSAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtWM0RfUkVOREVSXSwKLQkJ CQkgdjNkX3ByaXYpOworCXJldCA9IHYzZF9wdXNoX2pvYih2M2RfcHJpdiwgJnJlbmRlci0+YmFz ZSwgVjNEX1JFTkRFUik7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsX3VucmVzZXJ2ZTsKLQotCWV4 ZWMtPnJlbmRlcl9kb25lX2ZlbmNlID0KLQkJZG1hX2ZlbmNlX2dldCgmZXhlYy0+cmVuZGVyLmJh c2Uuc19mZW5jZS0+ZmluaXNoZWQpOwotCi0Ja3JlZl9nZXQoJmV4ZWMtPnJlZmNvdW50KTsgLyog cHV0IGJ5IHNjaGVkdWxlciBqb2IgY29tcGxldGlvbiAqLwotCWRybV9zY2hlZF9lbnRpdHlfcHVz aF9qb2IoJmV4ZWMtPnJlbmRlci5iYXNlLAotCQkJCSAgJnYzZF9wcml2LT5zY2hlZF9lbnRpdHlb VjNEX1JFTkRFUl0pOwogCW11dGV4X3VubG9jaygmdjNkLT5zY2hlZF9sb2NrKTsKIAotCXYzZF9h dHRhY2hfb2JqZWN0X2ZlbmNlcyhleGVjLT5ibywgZXhlYy0+Ym9fY291bnQsCi0JCQkJIGV4ZWMt PnJlbmRlcl9kb25lX2ZlbmNlKTsKLQotCWRybV9nZW1fdW5sb2NrX3Jlc2VydmF0aW9ucyhleGVj LT5ibywgZXhlYy0+Ym9fY291bnQsICZhY3F1aXJlX2N0eCk7Ci0KLQkvKiBVcGRhdGUgdGhlIHJl dHVybiBzeW5jIG9iamVjdCBmb3IgdGhlICovCi0Jc3luY19vdXQgPSBkcm1fc3luY29ial9maW5k KGZpbGVfcHJpdiwgYXJncy0+b3V0X3N5bmMpOwotCWlmIChzeW5jX291dCkgewotCQlkcm1fc3lu Y29ial9yZXBsYWNlX2ZlbmNlKHN5bmNfb3V0LCBleGVjLT5yZW5kZXJfZG9uZV9mZW5jZSk7Ci0J CWRybV9zeW5jb2JqX3B1dChzeW5jX291dCk7Ci0JfQorCXYzZF9hdHRhY2hfZmVuY2VzX2FuZF91 bmxvY2tfcmVzZXJ2YXRpb24oZmlsZV9wcml2LAorCQkJCQkJICZyZW5kZXItPmJhc2UsICZhY3F1 aXJlX2N0eCwKKwkJCQkJCSBhcmdzLT5vdXRfc3luYyk7CiAKLQl2M2RfZXhlY19wdXQoZXhlYyk7 CisJaWYgKGJpbikKKwkJdjNkX2pvYl9wdXQoJmJpbi0+YmFzZSk7CisJdjNkX2pvYl9wdXQoJnJl bmRlci0+YmFzZSk7CiAKIAlyZXR1cm4gMDsKIAogZmFpbF91bnJlc2VydmU6CiAJbXV0ZXhfdW5s b2NrKCZ2M2QtPnNjaGVkX2xvY2spOwotCWRybV9nZW1fdW5sb2NrX3Jlc2VydmF0aW9ucyhleGVj LT5ibywgZXhlYy0+Ym9fY291bnQsICZhY3F1aXJlX2N0eCk7CisJZHJtX2dlbV91bmxvY2tfcmVz ZXJ2YXRpb25zKHJlbmRlci0+YmFzZS5ibywKKwkJCQkgICAgcmVuZGVyLT5iYXNlLmJvX2NvdW50 LCAmYWNxdWlyZV9jdHgpOwogZmFpbDoKLQl2M2RfZXhlY19wdXQoZXhlYyk7CisJaWYgKGJpbikK KwkJdjNkX2pvYl9wdXQoJmJpbi0+YmFzZSk7CisJdjNkX2pvYl9wdXQoJnJlbmRlci0+YmFzZSk7 CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTYwLDEwICs1ODAsNyBAQCB2M2Rfc3VibWl0X3RmdV9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXN0cnVjdCBkcm1fdjNk X3N1Ym1pdF90ZnUgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCB2M2RfdGZ1X2pvYiAqam9iOwogCXN0 cnVjdCB3d19hY3F1aXJlX2N0eCBhY3F1aXJlX2N0eDsKLQlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5 bmNfb3V0OwotCXN0cnVjdCBkbWFfZmVuY2UgKnNjaGVkX2RvbmVfZmVuY2U7CiAJaW50IHJldCA9 IDA7Ci0JaW50IGJvX2NvdW50OwogCiAJdHJhY2VfdjNkX3N1Ym1pdF90ZnVfaW9jdGwoJnYzZC0+ ZHJtLCBhcmdzLT5paWEpOwogCkBAIC01NzEsODEgKzU4OCw3MSBAQCB2M2Rfc3VibWl0X3RmdV9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCWlmICgham9iKQogCQly ZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmModjNkLT5kZXYpOwot CWlmIChyZXQgPCAwKSB7CisJcmV0ID0gdjNkX2pvYl9pbml0KHYzZCwgZmlsZV9wcml2LCAmam9i LT5iYXNlLAorCQkJICAgdjNkX2pvYl9mcmVlLCBhcmdzLT5pbl9zeW5jKTsKKwlpZiAocmV0KSB7 CiAJCWtmcmVlKGpvYik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0Ja3JlZl9pbml0KCZqb2ItPnJl ZmNvdW50KTsKLQotCXJldCA9IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2UoZmlsZV9wcml2LCBhcmdz LT5pbl9zeW5jLAotCQkJCSAgICAgMCwgMCwgJmpvYi0+aW5fZmVuY2UpOwotCWlmIChyZXQgPT0g LUVJTlZBTCkKLQkJZ290byBmYWlsOworCWpvYi0+YmFzZS5ibyA9IGtjYWxsb2MoQVJSQVlfU0la RShhcmdzLT5ib19oYW5kbGVzKSwKKwkJCSAgICAgICBzaXplb2YoKmpvYi0+YmFzZS5ibyksIEdG UF9LRVJORUwpOworCWlmICgham9iLT5iYXNlLmJvKSB7CisJCXYzZF9qb2JfcHV0KCZqb2ItPmJh c2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlqb2ItPmFyZ3MgPSAqYXJnczsKLQlqb2It PnYzZCA9IHYzZDsKIAogCXNwaW5fbG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKLQlmb3Ig KGJvX2NvdW50ID0gMDsgYm9fY291bnQgPCBBUlJBWV9TSVpFKGpvYi0+Ym8pOyBib19jb3VudCsr KSB7CisJZm9yIChqb2ItPmJhc2UuYm9fY291bnQgPSAwOworCSAgICAgam9iLT5iYXNlLmJvX2Nv dW50IDwgQVJSQVlfU0laRShhcmdzLT5ib19oYW5kbGVzKTsKKwkgICAgIGpvYi0+YmFzZS5ib19j b3VudCsrKSB7CiAJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYm87CiAKLQkJaWYgKCFhcmdzLT5i b19oYW5kbGVzW2JvX2NvdW50XSkKKwkJaWYgKCFhcmdzLT5ib19oYW5kbGVzW2pvYi0+YmFzZS5i b19jb3VudF0pCiAJCQlicmVhazsKIAogCQlibyA9IGlkcl9maW5kKCZmaWxlX3ByaXYtPm9iamVj dF9pZHIsCi0JCQkgICAgICBhcmdzLT5ib19oYW5kbGVzW2JvX2NvdW50XSk7CisJCQkgICAgICBh cmdzLT5ib19oYW5kbGVzW2pvYi0+YmFzZS5ib19jb3VudF0pOwogCQlpZiAoIWJvKSB7CiAJCQlE Uk1fREVCVUcoIkZhaWxlZCB0byBsb29rIHVwIEdFTSBCTyAlZDogJWRcbiIsCi0JCQkJICBib19j b3VudCwgYXJncy0+Ym9faGFuZGxlc1tib19jb3VudF0pOworCQkJCSAgam9iLT5iYXNlLmJvX2Nv dW50LAorCQkJCSAgYXJncy0+Ym9faGFuZGxlc1tqb2ItPmJhc2UuYm9fY291bnRdKTsKIAkJCXJl dCA9IC1FTk9FTlQ7CiAJCQlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKIAkJ CWdvdG8gZmFpbDsKIAkJfQogCQlkcm1fZ2VtX29iamVjdF9nZXQoYm8pOwotCQlqb2ItPmJvW2Jv X2NvdW50XSA9IGJvOworCQlqb2ItPmJhc2UuYm9bam9iLT5iYXNlLmJvX2NvdW50XSA9IGJvOwog CX0KIAlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKIAotCXJldCA9IHYzZF9s b2NrX2JvX3Jlc2VydmF0aW9ucyhqb2ItPmJvLCBib19jb3VudCwgJmFjcXVpcmVfY3R4KTsKKwly ZXQgPSB2M2RfbG9ja19ib19yZXNlcnZhdGlvbnMoam9iLT5iYXNlLmJvLCBqb2ItPmJhc2UuYm9f Y291bnQsCisJCQkJICAgICAgICZhY3F1aXJlX2N0eCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWls OwogCiAJbXV0ZXhfbG9jaygmdjNkLT5zY2hlZF9sb2NrKTsKLQlyZXQgPSBkcm1fc2NoZWRfam9i X2luaXQoJmpvYi0+YmFzZSwKLQkJCQkgJnYzZF9wcml2LT5zY2hlZF9lbnRpdHlbVjNEX1RGVV0s Ci0JCQkJIHYzZF9wcml2KTsKKwlyZXQgPSB2M2RfcHVzaF9qb2IodjNkX3ByaXYsICZqb2ItPmJh c2UsIFYzRF9URlUpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF91bnJlc2VydmU7Ci0KLQlzY2hl ZF9kb25lX2ZlbmNlID0gZG1hX2ZlbmNlX2dldCgmam9iLT5iYXNlLnNfZmVuY2UtPmZpbmlzaGVk KTsKLQotCWtyZWZfZ2V0KCZqb2ItPnJlZmNvdW50KTsgLyogcHV0IGJ5IHNjaGVkdWxlciBqb2Ig Y29tcGxldGlvbiAqLwotCWRybV9zY2hlZF9lbnRpdHlfcHVzaF9qb2IoJmpvYi0+YmFzZSwgJnYz ZF9wcml2LT5zY2hlZF9lbnRpdHlbVjNEX1RGVV0pOwogCW11dGV4X3VubG9jaygmdjNkLT5zY2hl ZF9sb2NrKTsKIAotCXYzZF9hdHRhY2hfb2JqZWN0X2ZlbmNlcyhqb2ItPmJvLCBib19jb3VudCwg c2NoZWRfZG9uZV9mZW5jZSk7Ci0KLQlkcm1fZ2VtX3VubG9ja19yZXNlcnZhdGlvbnMoam9iLT5i bywgYm9fY291bnQsICZhY3F1aXJlX2N0eCk7Ci0KLQkvKiBVcGRhdGUgdGhlIHJldHVybiBzeW5j IG9iamVjdCAqLwotCXN5bmNfb3V0ID0gZHJtX3N5bmNvYmpfZmluZChmaWxlX3ByaXYsIGFyZ3Mt Pm91dF9zeW5jKTsKLQlpZiAoc3luY19vdXQpIHsKLQkJZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5j ZShzeW5jX291dCwgc2NoZWRfZG9uZV9mZW5jZSk7Ci0JCWRybV9zeW5jb2JqX3B1dChzeW5jX291 dCk7Ci0JfQotCWRtYV9mZW5jZV9wdXQoc2NoZWRfZG9uZV9mZW5jZSk7CisJdjNkX2F0dGFjaF9m ZW5jZXNfYW5kX3VubG9ja19yZXNlcnZhdGlvbihmaWxlX3ByaXYsCisJCQkJCQkgJmpvYi0+YmFz ZSwgJmFjcXVpcmVfY3R4LAorCQkJCQkJIGFyZ3MtPm91dF9zeW5jKTsKIAotCXYzZF90ZnVfam9i X3B1dChqb2IpOworCXYzZF9qb2JfcHV0KCZqb2ItPmJhc2UpOwogCiAJcmV0dXJuIDA7CiAKIGZh aWxfdW5yZXNlcnZlOgogCW11dGV4X3VubG9jaygmdjNkLT5zY2hlZF9sb2NrKTsKLQlkcm1fZ2Vt X3VubG9ja19yZXNlcnZhdGlvbnMoam9iLT5ibywgYm9fY291bnQsICZhY3F1aXJlX2N0eCk7CisJ ZHJtX2dlbV91bmxvY2tfcmVzZXJ2YXRpb25zKGpvYi0+YmFzZS5ibywgam9iLT5iYXNlLmJvX2Nv dW50LAorCQkJCSAgICAmYWNxdWlyZV9jdHgpOwogZmFpbDoKLQl2M2RfdGZ1X2pvYl9wdXQoam9i KTsKKwl2M2Rfam9iX3B1dCgmam9iLT5iYXNlKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03MDMs NyArNzEwLDcgQEAgdjNkX2dlbV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAKIAl2 M2Rfc2NoZWRfZmluaSh2M2QpOwogCi0JLyogV2FpdGluZyBmb3IgZXhlYyB0byBmaW5pc2ggd291 bGQgbmVlZCB0byBiZSBkb25lIGJlZm9yZQorCS8qIFdhaXRpbmcgZm9yIGpvYnMgdG8gZmluaXNo IHdvdWxkIG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUKIAkgKiB1bnJlZ2lzdGVyaW5nIFYzRC4KIAkg Ki8KIAlXQVJOX09OKHYzZC0+YmluX2pvYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2lycS5jCmluZGV4IGFhMGEx ODBhZTcwMC4uY2UzNzNmZmQ2MzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3Yz ZF9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9pcnEuYwpAQCAtNjIsNyArNjIs NyBAQCB2M2Rfb3ZlcmZsb3dfbWVtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCX0K IAogCWRybV9nZW1fb2JqZWN0X2dldChvYmopOwotCWxpc3RfYWRkX3RhaWwoJmJvLT51bnJlZl9o ZWFkLCAmdjNkLT5iaW5fam9iLT51bnJlZl9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZiby0+dW5y ZWZfaGVhZCwgJnYzZC0+YmluX2pvYi0+cmVuZGVyLT51bnJlZl9saXN0KTsKIAlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ2M2QtPmpvYl9sb2NrLCBpcnFmbGFncyk7CiAKIAlWM0RfQ09SRV9XUklU RSgwLCBWM0RfUFRCX0JQT0EsIGJvLT5ub2RlLnN0YXJ0IDw8IFBBR0VfU0hJRlQpOwpAQCAtOTYs NyArOTYsNyBAQCB2M2RfaXJxKGludCBpcnEsIHZvaWQgKmFyZykKIAogCWlmIChpbnRzdHMgJiBW M0RfSU5UX0ZMRE9ORSkgewogCQlzdHJ1Y3QgdjNkX2ZlbmNlICpmZW5jZSA9Ci0JCQl0b192M2Rf ZmVuY2UodjNkLT5iaW5fam9iLT5iaW4uaXJxX2ZlbmNlKTsKKwkJCXRvX3YzZF9mZW5jZSh2M2Qt PmJpbl9qb2ItPmJhc2UuaXJxX2ZlbmNlKTsKIAogCQl0cmFjZV92M2RfYmNsX2lycSgmdjNkLT5k cm0sIGZlbmNlLT5zZXFubyk7CiAJCWRtYV9mZW5jZV9zaWduYWwoJmZlbmNlLT5iYXNlKTsKQEAg LTEwNSw3ICsxMDUsNyBAQCB2M2RfaXJxKGludCBpcnEsIHZvaWQgKmFyZykKIAogCWlmIChpbnRz dHMgJiBWM0RfSU5UX0ZSRE9ORSkgewogCQlzdHJ1Y3QgdjNkX2ZlbmNlICpmZW5jZSA9Ci0JCQl0 b192M2RfZmVuY2UodjNkLT5yZW5kZXJfam9iLT5yZW5kZXIuaXJxX2ZlbmNlKTsKKwkJCXRvX3Yz ZF9mZW5jZSh2M2QtPnJlbmRlcl9qb2ItPmJhc2UuaXJxX2ZlbmNlKTsKIAogCQl0cmFjZV92M2Rf cmNsX2lycSgmdjNkLT5kcm0sIGZlbmNlLT5zZXFubyk7CiAJCWRtYV9mZW5jZV9zaWduYWwoJmZl bmNlLT5iYXNlKTsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2M2RfaHViX2lycShpbnQgaXJxLCB2b2lk ICphcmcpCiAKIAlpZiAoaW50c3RzICYgVjNEX0hVQl9JTlRfVEZVQykgewogCQlzdHJ1Y3QgdjNk X2ZlbmNlICpmZW5jZSA9Ci0JCQl0b192M2RfZmVuY2UodjNkLT50ZnVfam9iLT5pcnFfZmVuY2Up OworCQkJdG9fdjNkX2ZlbmNlKHYzZC0+dGZ1X2pvYi0+YmFzZS5pcnFfZmVuY2UpOwogCiAJCXRy YWNlX3YzZF90ZnVfaXJxKCZ2M2QtPmRybSwgZmVuY2UtPnNlcW5vKTsKIAkJZG1hX2ZlbmNlX3Np Z25hbCgmZmVuY2UtPmJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rf c2NoZWQuYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmMKaW5kZXggZTc0MGYzYjk5 YWE1Li44ODRmMDBmNWVkZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3Nj aGVkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc2NoZWQuYwpAQCAtMzAsNDMgKzMw LDQ0IEBAIHRvX3YzZF9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKIAlyZXR1 cm4gY29udGFpbmVyX29mKHNjaGVkX2pvYiwgc3RydWN0IHYzZF9qb2IsIGJhc2UpOwogfQogCi1z dGF0aWMgc3RydWN0IHYzZF90ZnVfam9iICoKLXRvX3RmdV9qb2Ioc3RydWN0IGRybV9zY2hlZF9q b2IgKnNjaGVkX2pvYikKK3N0YXRpYyBzdHJ1Y3QgdjNkX2Jpbl9qb2IgKgordG9fYmluX2pvYihz dHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iKQogewotCXJldHVybiBjb250YWluZXJfb2Yo c2NoZWRfam9iLCBzdHJ1Y3QgdjNkX3RmdV9qb2IsIGJhc2UpOworCXJldHVybiBjb250YWluZXJf b2Yoc2NoZWRfam9iLCBzdHJ1Y3QgdjNkX2Jpbl9qb2IsIGJhc2UuYmFzZSk7CiB9CiAKLXN0YXRp YyB2b2lkCi12M2Rfam9iX2ZyZWUoc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKK3N0 YXRpYyBzdHJ1Y3QgdjNkX3JlbmRlcl9qb2IgKgordG9fcmVuZGVyX2pvYihzdHJ1Y3QgZHJtX3Nj aGVkX2pvYiAqc2NoZWRfam9iKQogewotCXN0cnVjdCB2M2Rfam9iICpqb2IgPSB0b192M2Rfam9i KHNjaGVkX2pvYik7Ci0KLQlkcm1fc2NoZWRfam9iX2NsZWFudXAoc2NoZWRfam9iKTsKKwlyZXR1 cm4gY29udGFpbmVyX29mKHNjaGVkX2pvYiwgc3RydWN0IHYzZF9yZW5kZXJfam9iLCBiYXNlLmJh c2UpOworfQogCi0JdjNkX2V4ZWNfcHV0KGpvYi0+ZXhlYyk7CitzdGF0aWMgc3RydWN0IHYzZF90 ZnVfam9iICoKK3RvX3RmdV9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKK3sK KwlyZXR1cm4gY29udGFpbmVyX29mKHNjaGVkX2pvYiwgc3RydWN0IHYzZF90ZnVfam9iLCBiYXNl LmJhc2UpOwogfQogCiBzdGF0aWMgdm9pZAotdjNkX3RmdV9qb2JfZnJlZShzdHJ1Y3QgZHJtX3Nj aGVkX2pvYiAqc2NoZWRfam9iKQordjNkX2pvYl9mcmVlKHN0cnVjdCBkcm1fc2NoZWRfam9iICpz Y2hlZF9qb2IpCiB7Ci0Jc3RydWN0IHYzZF90ZnVfam9iICpqb2IgPSB0b190ZnVfam9iKHNjaGVk X2pvYik7CisJc3RydWN0IHYzZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKIAog CWRybV9zY2hlZF9qb2JfY2xlYW51cChzY2hlZF9qb2IpOwotCi0JdjNkX3RmdV9qb2JfcHV0KGpv Yik7CisJdjNkX2pvYl9wdXQoam9iKTsKIH0KIAogLyoqCi0gKiBSZXR1cm5zIHRoZSBmZW5jZXMg dGhhdCB0aGUgYmluIG9yIHJlbmRlciBqb2IgZGVwZW5kcyBvbiwgb25lIGJ5IG9uZS4KLSAqIHYz ZF9qb2JfcnVuKCkgd29uJ3QgYmUgY2FsbGVkIHVudGlsIGFsbCBvZiB0aGVtIGhhdmUgYmVlbiBz aWduYWxlZC4KKyAqIFJldHVybnMgdGhlIGZlbmNlcyB0aGF0IHRoZSBqb2IgZGVwZW5kcyBvbiwg b25lIGJ5IG9uZS4KKyAqCisgKiBJZiBwbGFjZWQgaW4gdGhlIHNjaGVkdWxlcidzIC5kZXBlbmRl bmN5IG1ldGhvZCwgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIC5ydW5fam9iIHdvbid0IGJlIGNhbGxl ZCB1bnRpbCBhbGwgb2YgdGhlbSBoYXZlIGJlZW4gc2lnbmFsZWQuCiAgKi8KIHN0YXRpYyBzdHJ1 Y3QgZG1hX2ZlbmNlICoKIHYzZF9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAq c2NoZWRfam9iLAogCQkgICBzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSAqc19lbnRpdHkpCiB7CiAJ c3RydWN0IHYzZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKLQlzdHJ1Y3QgdjNk X2V4ZWNfaW5mbyAqZXhlYyA9IGpvYi0+ZXhlYzsKLQllbnVtIHYzZF9xdWV1ZSBxID0gam9iID09 ICZleGVjLT5iaW4gPyBWM0RfQklOIDogVjNEX1JFTkRFUjsKIAlzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZTsKIAogCWZlbmNlID0gam9iLT5pbl9mZW5jZTsKQEAgLTc1LDExMyArNzYsMTMyIEBAIHYz ZF9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iLAogCQlyZXR1 cm4gZmVuY2U7CiAJfQogCi0JaWYgKHEgPT0gVjNEX1JFTkRFUikgewotCQkvKiBJZiB3ZSBoYWQg YSBiaW4gam9iLCB0aGUgcmVuZGVyIGpvYiBkZWZpbml0ZWx5IGRlcGVuZHMgb24KLQkJICogaXQu IFdlIGZpcnN0IGhhdmUgdG8gd2FpdCBmb3IgYmluIHRvIGJlIHNjaGVkdWxlZCwgc28gdGhhdAot CQkgKiBpdHMgZG9uZV9mZW5jZSBpcyBjcmVhdGVkLgotCQkgKi8KLQkJZmVuY2UgPSBleGVjLT5i aW5fZG9uZV9mZW5jZTsKLQkJaWYgKGZlbmNlKSB7Ci0JCQlleGVjLT5iaW5fZG9uZV9mZW5jZSA9 IE5VTEw7Ci0JCQlyZXR1cm4gZmVuY2U7Ci0JCX0KLQl9Ci0KIAkvKiBYWFg6IFdhaXQgb24gYSBm ZW5jZSBmb3Igc3dpdGNoaW5nIHRoZSBHTVAgaWYgbmVjZXNzYXJ5LAogCSAqIGFuZCB0aGVuIGRv IHNvLgogCSAqLwogCi0JcmV0dXJuIGZlbmNlOworCXJldHVybiBOVUxMOwogfQogCiAvKioKLSAq IFJldHVybnMgdGhlIGZlbmNlcyB0aGF0IHRoZSBURlUgam9iIGRlcGVuZHMgb24sIG9uZSBieSBv bmUuCi0gKiB2M2RfdGZ1X2pvYl9ydW4oKSB3b24ndCBiZSBjYWxsZWQgdW50aWwgYWxsIG9mIHRo ZW0gaGF2ZSBiZWVuCi0gKiBzaWduYWxlZC4KKyAqIFJldHVybnMgdGhlIGZlbmNlcyB0aGF0IHRo ZSByZW5kZXIgam9iIGRlcGVuZHMgb24sIG9uZSBieSBvbmUuCisgKiB2M2Rfam9iX3J1bigpIHdv bid0IGJlIGNhbGxlZCB1bnRpbCBhbGwgb2YgdGhlbSBoYXZlIGJlZW4gc2lnbmFsZWQuCiAgKi8K IHN0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICoKLXYzZF90ZnVfam9iX2RlcGVuZGVuY3koc3RydWN0 IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYiwKLQkJICAgICAgIHN0cnVjdCBkcm1fc2NoZWRfZW50 aXR5ICpzX2VudGl0eSkKK3YzZF9yZW5kZXJfam9iX2RlcGVuZGVuY3koc3RydWN0IGRybV9zY2hl ZF9qb2IgKnNjaGVkX2pvYiwKKwkJCSAgc3RydWN0IGRybV9zY2hlZF9lbnRpdHkgKnNfZW50aXR5 KQogewotCXN0cnVjdCB2M2RfdGZ1X2pvYiAqam9iID0gdG9fdGZ1X2pvYihzY2hlZF9qb2IpOwor CXN0cnVjdCB2M2RfcmVuZGVyX2pvYiAqam9iID0gdG9fcmVuZGVyX2pvYihzY2hlZF9qb2IpOwog CXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwogCi0JZmVuY2UgPSBqb2ItPmluX2ZlbmNlOworCWZl bmNlID0gdjNkX2pvYl9kZXBlbmRlbmN5KHNjaGVkX2pvYiwgc19lbnRpdHkpOworCWlmIChmZW5j ZSkKKwkJcmV0dXJuIGZlbmNlOworCisJLyogSWYgd2UgaGFkIGEgYmluIGpvYiwgdGhlIHJlbmRl ciBqb2IgZGVmaW5pdGVseSBkZXBlbmRzIG9uCisJICogaXQuIFdlIGZpcnN0IGhhdmUgdG8gd2Fp dCBmb3IgYmluIHRvIGJlIHNjaGVkdWxlZCwgc28gdGhhdAorCSAqIGl0cyBkb25lX2ZlbmNlIGlz IGNyZWF0ZWQuCisJICovCisJZmVuY2UgPSBqb2ItPmJpbl9kb25lX2ZlbmNlOwogCWlmIChmZW5j ZSkgewotCQlqb2ItPmluX2ZlbmNlID0gTlVMTDsKKwkJam9iLT5iaW5fZG9uZV9mZW5jZSA9IE5V TEw7CiAJCXJldHVybiBmZW5jZTsKIAl9CiAKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gZmVuY2U7 CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICp2M2Rfam9iX3J1bihzdHJ1Y3QgZHJtX3Nj aGVkX2pvYiAqc2NoZWRfam9iKQorc3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKnYzZF9iaW5fam9i X3J1bihzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iKQogewotCXN0cnVjdCB2M2Rfam9i ICpqb2IgPSB0b192M2Rfam9iKHNjaGVkX2pvYik7Ci0Jc3RydWN0IHYzZF9leGVjX2luZm8gKmV4 ZWMgPSBqb2ItPmV4ZWM7Ci0JZW51bSB2M2RfcXVldWUgcSA9IGpvYiA9PSAmZXhlYy0+YmluID8g VjNEX0JJTiA6IFYzRF9SRU5ERVI7Ci0Jc3RydWN0IHYzZF9kZXYgKnYzZCA9IGV4ZWMtPnYzZDsK KwlzdHJ1Y3QgdjNkX2Jpbl9qb2IgKmpvYiA9IHRvX2Jpbl9qb2Ioc2NoZWRfam9iKTsKKwlzdHJ1 Y3QgdjNkX2RldiAqdjNkID0gam9iLT5iYXNlLnYzZDsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gJnYzZC0+ZHJtOwogCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwogCXVuc2lnbmVkIGxvbmcg aXJxZmxhZ3M7CiAKLQlpZiAodW5saWtlbHkoam9iLT5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkLmVy cm9yKSkKKwlpZiAodW5saWtlbHkoam9iLT5iYXNlLmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQuZXJy b3IpKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIExvY2sgcmVxdWlyZWQgYXJvdW5kIGJpbl9qb2Ig dXBkYXRlIHZzCiAJICogdjNkX292ZXJmbG93X21lbV93b3JrKCkuCiAJICovCiAJc3Bpbl9sb2Nr X2lycXNhdmUoJnYzZC0+am9iX2xvY2ssIGlycWZsYWdzKTsKLQlpZiAocSA9PSBWM0RfQklOKSB7 Ci0JCXYzZC0+YmluX2pvYiA9IGpvYi0+ZXhlYzsKLQotCQkvKiBDbGVhciBvdXQgdGhlIG92ZXJm bG93IGFsbG9jYXRpb24sIHNvIHdlIGRvbid0Ci0JCSAqIHJldXNlIHRoZSBvdmVyZmxvdyBhdHRh Y2hlZCB0byBhIHByZXZpb3VzIGpvYi4KLQkJICovCi0JCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9Q VEJfQlBPUywgMCk7Ci0JfSBlbHNlIHsKLQkJdjNkLT5yZW5kZXJfam9iID0gam9iLT5leGVjOwot CX0KKwl2M2QtPmJpbl9qb2IgPSBqb2I7CisJLyogQ2xlYXIgb3V0IHRoZSBvdmVyZmxvdyBhbGxv Y2F0aW9uLCBzbyB3ZSBkb24ndAorCSAqIHJldXNlIHRoZSBvdmVyZmxvdyBhdHRhY2hlZCB0byBh IHByZXZpb3VzIGpvYi4KKwkgKi8KKwlWM0RfQ09SRV9XUklURSgwLCBWM0RfUFRCX0JQT1MsIDAp OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnYzZC0+am9iX2xvY2ssIGlycWZsYWdzKTsKIAot CS8qIENhbiB3ZSBhdm9pZCB0aGlzIGZsdXNoIHdoZW4gcT09UkVOREVSPyAgV2UgbmVlZCB0byBi ZQotCSAqIGNhcmVmdWwgb2Ygc2NoZWR1bGluZywgdGhvdWdoIC0tIGltYWdpbmUgam9iMCByZW5k ZXJpbmcgdG8KLQkgKiB0ZXh0dXJlIGFuZCBqb2IxIHJlYWRpbmcsIGFuZCB0aGVtIGJlaW5nIGV4 ZWN1dGVkIGFzIGJpbjAsCi0JICogYmluMSwgcmVuZGVyMCwgcmVuZGVyMSwgc28gdGhhdCByZW5k ZXIxJ3MgZmx1c2ggYXQgYmluIHRpbWUKKwl2M2RfaW52YWxpZGF0ZV9jYWNoZXModjNkKTsKKwor CWZlbmNlID0gdjNkX2ZlbmNlX2NyZWF0ZSh2M2QsIFYzRF9CSU4pOworCWlmIChJU19FUlIoZmVu Y2UpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChqb2ItPmJhc2UuaXJxX2ZlbmNlKQorCQlkbWFf ZmVuY2VfcHV0KGpvYi0+YmFzZS5pcnFfZmVuY2UpOworCWpvYi0+YmFzZS5pcnFfZmVuY2UgPSBk bWFfZmVuY2VfZ2V0KGZlbmNlKTsKKworCXRyYWNlX3YzZF9zdWJtaXRfY2woZGV2LCBmYWxzZSwg dG9fdjNkX2ZlbmNlKGZlbmNlKS0+c2Vxbm8sCisJCQkgICAgam9iLT5zdGFydCwgam9iLT5lbmQp OworCisJLyogU2V0IHRoZSBjdXJyZW50IGFuZCBlbmQgYWRkcmVzcyBvZiB0aGUgY29udHJvbCBs aXN0LgorCSAqIFdyaXRpbmcgdGhlIGVuZCByZWdpc3RlciBpcyB3aGF0IHN0YXJ0cyB0aGUgam9i LgorCSAqLworCWlmIChqb2ItPnFtYSkgeworCQlWM0RfQ09SRV9XUklURSgwLCBWM0RfQ0xFX0NU MFFNQSwgam9iLT5xbWEpOworCQlWM0RfQ09SRV9XUklURSgwLCBWM0RfQ0xFX0NUMFFNUywgam9i LT5xbXMpOworCX0KKwlpZiAoam9iLT5xdHMpIHsKKwkJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX0NM RV9DVDBRVFMsCisJCQkgICAgICAgVjNEX0NMRV9DVDBRVFNfRU5BQkxFIHwKKwkJCSAgICAgICBq b2ItPnF0cyk7CisJfQorCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1QwUUJBLCBqb2ItPnN0 YXJ0KTsKKwlWM0RfQ09SRV9XUklURSgwLCBWM0RfQ0xFX0NUMFFFQSwgam9iLT5lbmQpOworCisJ cmV0dXJuIGZlbmNlOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqdjNkX3JlbmRlcl9q b2JfcnVuKHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IpCit7CisJc3RydWN0IHYzZF9y ZW5kZXJfam9iICpqb2IgPSB0b19yZW5kZXJfam9iKHNjaGVkX2pvYik7CisJc3RydWN0IHYzZF9k ZXYgKnYzZCA9IGpvYi0+YmFzZS52M2Q7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZ2M2Qt PmRybTsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKKworCWlmICh1bmxpa2VseShqb2ItPmJh c2UuYmFzZS5zX2ZlbmNlLT5maW5pc2hlZC5lcnJvcikpCisJCXJldHVybiBOVUxMOworCisJdjNk LT5yZW5kZXJfam9iID0gam9iOworCisJLyogQ2FuIHdlIGF2b2lkIHRoaXMgZmx1c2g/ICBXZSBu ZWVkIHRvIGJlIGNhcmVmdWwgb2YKKwkgKiBzY2hlZHVsaW5nLCB0aG91Z2ggLS0gaW1hZ2luZSBq b2IwIHJlbmRlcmluZyB0byB0ZXh0dXJlIGFuZAorCSAqIGpvYjEgcmVhZGluZywgYW5kIHRoZW0g YmVpbmcgZXhlY3V0ZWQgYXMgYmluMCwgYmluMSwKKwkgKiByZW5kZXIwLCByZW5kZXIxLCBzbyB0 aGF0IHJlbmRlcjEncyBmbHVzaCBhdCBiaW4gdGltZQogCSAqIHdhc24ndCBlbm91Z2guCiAJICov CiAJdjNkX2ludmFsaWRhdGVfY2FjaGVzKHYzZCk7CiAKLQlmZW5jZSA9IHYzZF9mZW5jZV9jcmVh dGUodjNkLCBxKTsKKwlmZW5jZSA9IHYzZF9mZW5jZV9jcmVhdGUodjNkLCBWM0RfUkVOREVSKTsK IAlpZiAoSVNfRVJSKGZlbmNlKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoam9iLT5pcnFfZmVu Y2UpCi0JCWRtYV9mZW5jZV9wdXQoam9iLT5pcnFfZmVuY2UpOwotCWpvYi0+aXJxX2ZlbmNlID0g ZG1hX2ZlbmNlX2dldChmZW5jZSk7CisJaWYgKGpvYi0+YmFzZS5pcnFfZmVuY2UpCisJCWRtYV9m ZW5jZV9wdXQoam9iLT5iYXNlLmlycV9mZW5jZSk7CisJam9iLT5iYXNlLmlycV9mZW5jZSA9IGRt YV9mZW5jZV9nZXQoZmVuY2UpOwogCi0JdHJhY2VfdjNkX3N1Ym1pdF9jbChkZXYsIHEgPT0gVjNE X1JFTkRFUiwgdG9fdjNkX2ZlbmNlKGZlbmNlKS0+c2Vxbm8sCisJdHJhY2VfdjNkX3N1Ym1pdF9j bChkZXYsIHRydWUsIHRvX3YzZF9mZW5jZShmZW5jZSktPnNlcW5vLAogCQkJICAgIGpvYi0+c3Rh cnQsIGpvYi0+ZW5kKTsKIAotCWlmIChxID09IFYzRF9CSU4pIHsKLQkJaWYgKGV4ZWMtPnFtYSkg ewotCQkJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVDBRTUEsIGV4ZWMtPnFtYSk7Ci0JCQlW M0RfQ09SRV9XUklURSgwLCBWM0RfQ0xFX0NUMFFNUywgZXhlYy0+cW1zKTsKLQkJfQotCQlpZiAo ZXhlYy0+cXRzKSB7Ci0JCQlWM0RfQ09SRV9XUklURSgwLCBWM0RfQ0xFX0NUMFFUUywKLQkJCQkg ICAgICAgVjNEX0NMRV9DVDBRVFNfRU5BQkxFIHwKLQkJCQkgICAgICAgZXhlYy0+cXRzKTsKLQkJ fQotCX0gZWxzZSB7Ci0JCS8qIFhYWDogU2V0IHRoZSBRQ0ZHICovCi0JfQorCS8qIFhYWDogU2V0 IHRoZSBRQ0ZHICovCiAKIAkvKiBTZXQgdGhlIGN1cnJlbnQgYW5kIGVuZCBhZGRyZXNzIG9mIHRo ZSBjb250cm9sIGxpc3QuCiAJICogV3JpdGluZyB0aGUgZW5kIHJlZ2lzdGVyIGlzIHdoYXQgc3Rh cnRzIHRoZSBqb2IuCiAJICovCi0JVjNEX0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVE5RQkEocSks IGpvYi0+c3RhcnQpOwotCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1ROUUVBKHEpLCBqb2It PmVuZCk7CisJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVDFRQkEsIGpvYi0+c3RhcnQpOwor CVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1QxUUVBLCBqb2ItPmVuZCk7CiAKIAlyZXR1cm4g ZmVuY2U7CiB9CkBAIC0xOTAsNyArMjEwLDcgQEAgc3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKgog djNkX3RmdV9qb2JfcnVuKHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IpCiB7CiAJc3Ry dWN0IHYzZF90ZnVfam9iICpqb2IgPSB0b190ZnVfam9iKHNjaGVkX2pvYik7Ci0Jc3RydWN0IHYz ZF9kZXYgKnYzZCA9IGpvYi0+djNkOworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSBqb2ItPmJhc2Uu djNkOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmdjNkLT5kcm07CiAJc3RydWN0IGRtYV9m ZW5jZSAqZmVuY2U7CiAKQEAgLTE5OSw5ICsyMTksOSBAQCB2M2RfdGZ1X2pvYl9ydW4oc3RydWN0 IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKIAkJcmV0dXJuIE5VTEw7CiAKIAl2M2QtPnRmdV9q b2IgPSBqb2I7Ci0JaWYgKGpvYi0+aXJxX2ZlbmNlKQotCQlkbWFfZmVuY2VfcHV0KGpvYi0+aXJx X2ZlbmNlKTsKLQlqb2ItPmlycV9mZW5jZSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOworCWlmIChq b2ItPmJhc2UuaXJxX2ZlbmNlKQorCQlkbWFfZmVuY2VfcHV0KGpvYi0+YmFzZS5pcnFfZmVuY2Up OworCWpvYi0+YmFzZS5pcnFfZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KGZlbmNlKTsKIAogCXRyYWNl X3YzZF9zdWJtaXRfdGZ1KGRldiwgdG9fdjNkX2ZlbmNlKGZlbmNlKS0+c2Vxbm8pOwogCkBAIC0y NTEsNTEgKzI3MSw3NCBAQCB2M2RfZ3B1X3Jlc2V0X2Zvcl90aW1lb3V0KHN0cnVjdCB2M2RfZGV2 ICp2M2QsIHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IpCiAJbXV0ZXhfdW5sb2NrKCZ2 M2QtPnJlc2V0X2xvY2spOwogfQogCisvKiBJZiB0aGUgY3VycmVudCBhZGRyZXNzIG9yIHJldHVy biBhZGRyZXNzIGhhdmUgY2hhbmdlZCwgdGhlbiB0aGUgR1BVCisgKiBoYXMgcHJvYmFibHkgbWFk ZSBwcm9ncmVzcyBhbmQgd2Ugc2hvdWxkIGRlbGF5IHRoZSByZXNldC4gIFRoaXMKKyAqIGNvdWxk IGZhaWwgaWYgdGhlIEdQVSBnb3QgaW4gYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgQ0wsIGJ1dCB0 aGF0CisgKiBpcyBwcmV0dHkgdW5saWtlbHkgb3V0c2lkZSBvZiBhbiBpLWctdCB0ZXN0Y2FzZS4K KyAqLwogc3RhdGljIHZvaWQKLXYzZF9qb2JfdGltZWRvdXQoc3RydWN0IGRybV9zY2hlZF9qb2Ig KnNjaGVkX2pvYikKK3YzZF9jbF9qb2JfdGltZWRvdXQoc3RydWN0IGRybV9zY2hlZF9qb2IgKnNj aGVkX2pvYiwgZW51bSB2M2RfcXVldWUgcSwKKwkJICAgICAgdTMyICp0aW1lZG91dF9jdGNhLCB1 MzIgKnRpbWVkb3V0X2N0cmEpCiB7CiAJc3RydWN0IHYzZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Io c2NoZWRfam9iKTsKLQlzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYyA9IGpvYi0+ZXhlYzsKLQlz dHJ1Y3QgdjNkX2RldiAqdjNkID0gZXhlYy0+djNkOwotCWVudW0gdjNkX3F1ZXVlIGpvYl9xID0g am9iID09ICZleGVjLT5iaW4gPyBWM0RfQklOIDogVjNEX1JFTkRFUjsKLQl1MzIgY3RjYSA9IFYz RF9DT1JFX1JFQUQoMCwgVjNEX0NMRV9DVE5DQShqb2JfcSkpOwotCXUzMiBjdHJhID0gVjNEX0NP UkVfUkVBRCgwLCBWM0RfQ0xFX0NUTlJBKGpvYl9xKSk7Ci0KLQkvKiBJZiB0aGUgY3VycmVudCBh ZGRyZXNzIG9yIHJldHVybiBhZGRyZXNzIGhhdmUgY2hhbmdlZCwgdGhlbgotCSAqIHRoZSBHUFUg aGFzIHByb2JhYmx5IG1hZGUgcHJvZ3Jlc3MgYW5kIHdlIHNob3VsZCBkZWxheSB0aGUKLQkgKiBy ZXNldC4gIFRoaXMgY291bGQgZmFpbCBpZiB0aGUgR1BVIGdvdCBpbiBhbiBpbmZpbml0ZSBsb29w Ci0JICogaW4gdGhlIENMLCBidXQgdGhhdCBpcyBwcmV0dHkgdW5saWtlbHkgb3V0c2lkZSBvZiBh biBpLWctdAotCSAqIHRlc3RjYXNlLgotCSAqLwotCWlmIChqb2ItPnRpbWVkb3V0X2N0Y2EgIT0g Y3RjYSB8fCBqb2ItPnRpbWVkb3V0X2N0cmEgIT0gY3RyYSkgewotCQlqb2ItPnRpbWVkb3V0X2N0 Y2EgPSBjdGNhOwotCQlqb2ItPnRpbWVkb3V0X2N0cmEgPSBjdHJhOworCXN0cnVjdCB2M2RfZGV2 ICp2M2QgPSBqb2ItPnYzZDsKKwl1MzIgY3RjYSA9IFYzRF9DT1JFX1JFQUQoMCwgVjNEX0NMRV9D VE5DQShxKSk7CisJdTMyIGN0cmEgPSBWM0RfQ09SRV9SRUFEKDAsIFYzRF9DTEVfQ1ROUkEocSkp OworCisJaWYgKCp0aW1lZG91dF9jdGNhICE9IGN0Y2EgfHwgKnRpbWVkb3V0X2N0cmEgIT0gY3Ry YSkgeworCQkqdGltZWRvdXRfY3RjYSA9IGN0Y2E7CisJCSp0aW1lZG91dF9jdHJhID0gY3RyYTsK IAkJcmV0dXJuOwogCX0KIAogCXYzZF9ncHVfcmVzZXRfZm9yX3RpbWVvdXQodjNkLCBzY2hlZF9q b2IpOwogfQogCitzdGF0aWMgdm9pZAordjNkX2Jpbl9qb2JfdGltZWRvdXQoc3RydWN0IGRybV9z Y2hlZF9qb2IgKnNjaGVkX2pvYikKK3sKKwlzdHJ1Y3QgdjNkX2Jpbl9qb2IgKmpvYiA9IHRvX2Jp bl9qb2Ioc2NoZWRfam9iKTsKKworCXYzZF9jbF9qb2JfdGltZWRvdXQoc2NoZWRfam9iLCBWM0Rf QklOLAorCQkJICAgICZqb2ItPnRpbWVkb3V0X2N0Y2EsICZqb2ItPnRpbWVkb3V0X2N0cmEpOwor fQorCitzdGF0aWMgdm9pZAordjNkX3JlbmRlcl9qb2JfdGltZWRvdXQoc3RydWN0IGRybV9zY2hl ZF9qb2IgKnNjaGVkX2pvYikKK3sKKwlzdHJ1Y3QgdjNkX3JlbmRlcl9qb2IgKmpvYiA9IHRvX3Jl bmRlcl9qb2Ioc2NoZWRfam9iKTsKKworCXYzZF9jbF9qb2JfdGltZWRvdXQoc2NoZWRfam9iLCBW M0RfUkVOREVSLAorCQkJICAgICZqb2ItPnRpbWVkb3V0X2N0Y2EsICZqb2ItPnRpbWVkb3V0X2N0 cmEpOworfQorCiBzdGF0aWMgdm9pZAogdjNkX3RmdV9qb2JfdGltZWRvdXQoc3RydWN0IGRybV9z Y2hlZF9qb2IgKnNjaGVkX2pvYikKIHsKLQlzdHJ1Y3QgdjNkX3RmdV9qb2IgKmpvYiA9IHRvX3Rm dV9qb2Ioc2NoZWRfam9iKTsKKwlzdHJ1Y3QgdjNkX2pvYiAqam9iID0gdG9fdjNkX2pvYihzY2hl ZF9qb2IpOwogCiAJdjNkX2dwdV9yZXNldF9mb3JfdGltZW91dChqb2ItPnYzZCwgc2NoZWRfam9i KTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9vcHMgdjNkX3Nj aGVkX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3NjaGVkX2JhY2tlbmRfb3BzIHYz ZF9iaW5fc2NoZWRfb3BzID0gewogCS5kZXBlbmRlbmN5ID0gdjNkX2pvYl9kZXBlbmRlbmN5LAot CS5ydW5fam9iID0gdjNkX2pvYl9ydW4sCi0JLnRpbWVkb3V0X2pvYiA9IHYzZF9qb2JfdGltZWRv dXQsCi0JLmZyZWVfam9iID0gdjNkX2pvYl9mcmVlCisJLnJ1bl9qb2IgPSB2M2RfYmluX2pvYl9y dW4sCisJLnRpbWVkb3V0X2pvYiA9IHYzZF9iaW5fam9iX3RpbWVkb3V0LAorCS5mcmVlX2pvYiA9 IHYzZF9qb2JfZnJlZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3NjaGVkX2JhY2tl bmRfb3BzIHYzZF9yZW5kZXJfc2NoZWRfb3BzID0geworCS5kZXBlbmRlbmN5ID0gdjNkX3JlbmRl cl9qb2JfZGVwZW5kZW5jeSwKKwkucnVuX2pvYiA9IHYzZF9yZW5kZXJfam9iX3J1biwKKwkudGlt ZWRvdXRfam9iID0gdjNkX3JlbmRlcl9qb2JfdGltZWRvdXQsCisJLmZyZWVfam9iID0gdjNkX2pv Yl9mcmVlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9vcHMg djNkX3RmdV9zY2hlZF9vcHMgPSB7Ci0JLmRlcGVuZGVuY3kgPSB2M2RfdGZ1X2pvYl9kZXBlbmRl bmN5LAorCS5kZXBlbmRlbmN5ID0gdjNkX2pvYl9kZXBlbmRlbmN5LAogCS5ydW5fam9iID0gdjNk X3RmdV9qb2JfcnVuLAogCS50aW1lZG91dF9qb2IgPSB2M2RfdGZ1X2pvYl90aW1lZG91dCwKLQku ZnJlZV9qb2IgPSB2M2RfdGZ1X2pvYl9mcmVlCisJLmZyZWVfam9iID0gdjNkX2pvYl9mcmVlLAog fTsKIAogaW50CkBAIC0zMDcsNyArMzUwLDcgQEAgdjNkX3NjaGVkX2luaXQoc3RydWN0IHYzZF9k ZXYgKnYzZCkKIAlpbnQgcmV0OwogCiAJcmV0ID0gZHJtX3NjaGVkX2luaXQoJnYzZC0+cXVldWVb VjNEX0JJTl0uc2NoZWQsCi0JCQkgICAgICZ2M2Rfc2NoZWRfb3BzLAorCQkJICAgICAmdjNkX2Jp bl9zY2hlZF9vcHMsCiAJCQkgICAgIGh3X2pvYnNfbGltaXQsIGpvYl9oYW5nX2xpbWl0LAogCQkJ ICAgICBtc2Vjc190b19qaWZmaWVzKGhhbmdfbGltaXRfbXMpLAogCQkJICAgICAidjNkX2JpbiIp OwpAQCAtMzE3LDcgKzM2MCw3IEBAIHYzZF9zY2hlZF9pbml0KHN0cnVjdCB2M2RfZGV2ICp2M2Qp CiAJfQogCiAJcmV0ID0gZHJtX3NjaGVkX2luaXQoJnYzZC0+cXVldWVbVjNEX1JFTkRFUl0uc2No ZWQsCi0JCQkgICAgICZ2M2Rfc2NoZWRfb3BzLAorCQkJICAgICAmdjNkX3JlbmRlcl9zY2hlZF9v cHMsCiAJCQkgICAgIGh3X2pvYnNfbGltaXQsIGpvYl9oYW5nX2xpbWl0LAogCQkJICAgICBtc2Vj c190b19qaWZmaWVzKGhhbmdfbGltaXRfbXMpLAogCQkJICAgICAidjNkX3JlbmRlciIpOwotLSAK Mi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=