From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: [PATCH 01/11] drm/i915: Move FBC stuff to intel_fbc.c Date: Mon, 8 Dec 2014 14:09:10 -0200 Message-ID: <1418054960-1403-2-git-send-email-przanoni@gmail.com> References: <1418054960-1403-1-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qg0-f43.google.com (mail-qg0-f43.google.com [209.85.192.43]) by gabe.freedesktop.org (Postfix) with ESMTP id 2F8D76E76B for ; Mon, 8 Dec 2014 08:10:28 -0800 (PST) Received: by mail-qg0-f43.google.com with SMTP id i50so779472qgf.16 for ; Mon, 08 Dec 2014 08:10:27 -0800 (PST) In-Reply-To: <1418054960-1403-1-git-send-email-przanoni@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Paulo Zanoni , Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgoKTm8gZnVuY3Rpb25h bCBjaGFuZ2VzLiBUaGlzIGlzIGp1c3QgdGhlIGJlZ2luIG9mIGEgRkJDIHJld29yay4KCnYyIChQ YXVsbyk6CiAgLSBSZXZlcnQgaW50ZWxfZmJjX2luaXQoKSBjaGFuZ2VkIHBhcmFtZXRlci4KICAt IFJldmVydCBzZXRfbm9fZmJjX3JlYXNvbigpIHJlbmFtZS4KICAtIFJlYmFzZS4KCkNjOiBQYXVs byBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogUm9kcmln byBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBQYXVsbyBaYW5v bmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAg ICAgIHwgICAzIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jICB8ICAgMiAr LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgIDIyICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgIDkgKy0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2ZiYy5jICAgICB8IDY3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgIHwgNjUxICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3By aXRlLmMgIHwgICA0ICstCiA4IGZpbGVzIGNoYW5nZWQsIDY5OCBpbnNlcnRpb25zKCspLCA2Njkg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZmJjLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGU0MDgzZTQuLjNjZjcwYTYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCkBAIC00Nyw2ICs0Nyw3IEBAIGk5MTUteSArPSBpbnRlbF9yZW5kZXJz dGF0ZV9nZW42Lm8gXAogaTkxNS15ICs9IGludGVsX2F1ZGlvLm8gXAogCSAgaW50ZWxfYmlvcy5v IFwKIAkgIGludGVsX2Rpc3BsYXkubyBcCisJICBpbnRlbF9mYmMubyBcCiAJICBpbnRlbF9maWZv X3VuZGVycnVuLm8gXAogCSAgaW50ZWxfZnJvbnRidWZmZXIubyBcCiAJICBpbnRlbF9tb2Rlcy5v IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDExZTg1Y2IuLmI1MjYwYmYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaApAQCAtMjk2Myw5ICsyOTYzLDYgQEAgZXh0ZXJuIHZvaWQgaW50ZWxf bW9kZXNldF9zZXR1cF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgYm9v bCBmb3JjZV9yZXN0b3JlKTsKIGV4dGVybiB2b2lkIGk5MTVfcmVkaXNhYmxlX3ZnYShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfcmVkaXNhYmxlX3ZnYV9wb3dlcl9v bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWV4dGVybiBib29sIGludGVsX2ZiY19lbmFibGVk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgYmR3X2ZiY19zd19mbHVzaChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgdmFsdWUpOwotZXh0ZXJuIHZvaWQgaW50ZWxfZGlz YWJsZV9mYmMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gYm9vbCBpcm9ubGFrZV9z ZXRfZHJwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1OCB2YWwpOwogZXh0ZXJuIHZvaWQgaW50 ZWxfaW5pdF9wY2hfcmVmY2xrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQg Z2VuNl9zZXRfcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU4IHZhbCk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfc3VzcGVuZC5jCmluZGV4IGRmZTY2MTcuLjFlNDk5OWQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfc3VzcGVuZC5jCkBAIC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9y ZXN0b3JlX2Rpc3BsYXkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAl9CiAKIAkvKiBvbmx5IHJl c3RvcmUgRkJDIGluZm8gb24gdGhlIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgRkJDKi8KLQlpbnRl bF9kaXNhYmxlX2ZiYyhkZXYpOworCWludGVsX2ZiY19kaXNhYmxlKGRldik7CiAKIAkvKiByZXN0 b3JlIEZCQyBpbnRlcnZhbCAqLwogCWlmIChIQVNfRkJDKGRldikgJiYgSU5URUxfSU5GTyhkZXYp LT5nZW4gPD0gNCAmJiAhSVNfRzRYKGRldikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKaW5kZXggYTliZGMxMi4uZTQ3ODlmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3Bs YXkuYwpAQCAtNDIwMSw3ICs0MjAxLDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19lbmFibGVf cGxhbmVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAloc3dfZW5hYmxlX2lwcyhpbnRlbF9jcnRj KTsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpbnRlbF91cGRhdGVfZmJj KGRldik7CisJaW50ZWxfZmJjX3VwZGF0ZShkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1 Y3RfbXV0ZXgpOwogCiAJLyoKQEAgLTQyMjMsNyArNDIyMyw3IEBAIHN0YXRpYyB2b2lkIGludGVs X2NydGNfZGlzYWJsZV9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCWludGVsX2NydGNf d2FpdF9mb3JfcGVuZGluZ19mbGlwcyhjcnRjKTsKIAogCWlmIChkZXZfcHJpdi0+ZmJjLnBsYW5l ID09IHBsYW5lKQotCQlpbnRlbF9kaXNhYmxlX2ZiYyhkZXYpOworCQlpbnRlbF9mYmNfZGlzYWJs ZShkZXYpOwogCiAJaHN3X2Rpc2FibGVfaXBzKGludGVsX2NydGMpOwogCkBAIC00NTI2LDcgKzQ1 MjYsNyBAQCBzdGF0aWMgdm9pZCBpcm9ubGFrZV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRj ICpjcnRjKQogCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGNydGMpOwogCiAJbXV0ZXhfbG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWludGVsX3VwZGF0ZV9mYmMoZGV2KTsKKwlpbnRlbF9mYmNf dXBkYXRlKGRldik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiB9CiAKQEAg LTQ1ODEsNyArNDU4MSw3IEBAIHN0YXRpYyB2b2lkIGhhc3dlbGxfY3J0Y19kaXNhYmxlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKIAlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhjcnRjKTsKIAogCW11 dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpbnRlbF91cGRhdGVfZmJjKGRldik7CisJ aW50ZWxfZmJjX3VwZGF0ZShkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp OwogCiAJaWYgKGludGVsX2NydGNfdG9fc2hhcmVkX2RwbGwoaW50ZWxfY3J0YykpCkBAIC01MTg2 LDcgKzUxODYsNyBAQCBzdGF0aWMgdm9pZCBpOXh4X2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCiAJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoY3J0Yyk7CiAKIAltdXRleF9sb2Nr KCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JaW50ZWxfdXBkYXRlX2ZiYyhkZXYpOworCWludGVsX2Zi Y191cGRhdGUoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIH0KIApA QCAtODk0Nyw3ICs4OTQ3LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfdW5waW5fd29ya19mbihzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKl9fd29yaykKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmd29y ay0+cGVuZGluZ19mbGlwX29iai0+YmFzZSk7CiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uo JndvcmstPm9sZF9mYl9vYmotPmJhc2UpOwogCi0JaW50ZWxfdXBkYXRlX2ZiYyhkZXYpOworCWlu dGVsX2ZiY191cGRhdGUoZGV2KTsKIAogCWlmICh3b3JrLT5mbGlwX3F1ZXVlZF9yZXEpCiAJCWk5 MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZ3b3JrLT5mbGlwX3F1ZXVlZF9yZXEsIE5VTEwpOwpAQCAt OTc0NCw3ICs5NzQ0LDcgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJaTkxNV9nZW1fdHJhY2tfZmIod29yay0+b2xkX2ZiX29iaiwgb2Jq LAogCQkJICBJTlRFTF9GUk9OVEJVRkZFUl9QUklNQVJZKHBpcGUpKTsKIAotCWludGVsX2Rpc2Fi bGVfZmJjKGRldik7CisJaW50ZWxfZmJjX2Rpc2FibGUoZGV2KTsKIAlpbnRlbF9mcm9udGJ1ZmZl cl9mbGlwX3ByZXBhcmUoZGV2LCBJTlRFTF9GUk9OVEJVRkZFUl9QUklNQVJZKHBpcGUpKTsKIAlt dXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIApAQCAtMTE4MTUsNyArMTE4MTUsNyBA QCBpbnRlbF9jb21taXRfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJ ICAgIElOVEVMX0lORk8oZGV2KS0+Z2VuIDw9IDQgJiYgIUlTX0c0WChkZXYpICYmCiAJCSAgICBk ZXZfcHJpdi0+ZmJjLnBsYW5lID09IGludGVsX2NydGMtPnBsYW5lICYmCiAJCSAgICBpbnRlbF9w bGFuZS0+cm90YXRpb24gIT0gQklUKERSTV9ST1RBVEVfMCkpIHsKLQkJCWludGVsX2Rpc2FibGVf ZmJjKGRldik7CisJCQlpbnRlbF9mYmNfZGlzYWJsZShkZXYpOwogCQl9CiAKIAkJaWYgKHN0YXRl LT52aXNpYmxlKSB7CkBAIC0xMTg1MCw3ICsxMTg1MCw3IEBAIGludGVsX2NvbW1pdF9wcmltYXJ5 X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQlpbnRlbF9mcm9udGJ1ZmZlcl9mbGlw KGRldiwgSU5URUxfRlJPTlRCVUZGRVJfUFJJTUFSWShwaXBlKSk7CiAKIAkJbXV0ZXhfbG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlpbnRlbF91cGRhdGVfZmJjKGRldik7CisJCWludGVsX2Zi Y191cGRhdGUoZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJfQog fQpAQCAtMTMwNDksNyArMTMwNDksNyBAQCB2b2lkIGludGVsX21vZGVzZXRfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQogCWludGVsX3NldHVwX291dHB1dHMoZGV2KTsKIAogCS8qIEp1c3Qg aW4gY2FzZSB0aGUgQklPUyBpcyBkb2luZyBzb21ldGhpbmcgcXVlc3Rpb25hYmxlLiAqLwotCWlu dGVsX2Rpc2FibGVfZmJjKGRldik7CisJaW50ZWxfZmJjX2Rpc2FibGUoZGV2KTsKIAogCWRybV9t b2Rlc2V0X2xvY2tfYWxsKGRldik7CiAJaW50ZWxfbW9kZXNldF9zZXR1cF9od19zdGF0ZShkZXYs IGZhbHNlKTsKQEAgLTEzNTY2LDcgKzEzNTY2LDcgQEAgdm9pZCBpbnRlbF9tb2Rlc2V0X2NsZWFu dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAogCWludGVsX3VucmVnaXN0ZXJfZHNtX2hhbmRs ZXIoKTsKIAotCWludGVsX2Rpc2FibGVfZmJjKGRldik7CisJaW50ZWxfZmJjX2Rpc2FibGUoZGV2 KTsKIAogCWlyb25sYWtlX3RlYXJkb3duX3JjNihkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oCmluZGV4IDYxYTg4ZmEuLjU4OGI2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBA IC0xMDYzLDYgKzEwNjMsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGludGVsX2ZiZGV2X3Jlc3Rv cmVfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogfQogI2VuZGlmCiAKKy8qIGludGVsX2Zi Yy5jICovCitib29sIGludGVsX2ZiY19lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwor dm9pZCBpbnRlbF9mYmNfdXBkYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBpbnRl bF9mYmNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBpbnRl bF9mYmNfZGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgYmR3X2ZiY19zd19m bHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgdmFsdWUpOworCiAvKiBpbnRlbF9oZG1p LmMgKi8KIHZvaWQgaW50ZWxfaGRtaV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBo ZG1pX3JlZywgZW51bSBwb3J0IHBvcnQpOwogdm9pZCBpbnRlbF9oZG1pX2luaXRfY29ubmVjdG9y KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LApAQCAtMTE2OSw4ICsx MTc2LDYgQEAgdm9pZCBpbnRlbF91cGRhdGVfc3ByaXRlX3dhdGVybWFya3Moc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCiAJCQkJICAgIGJvb2wgZW5hYmxlZCwgYm9vbCBzY2FsZWQpOwogdm9pZCBp bnRlbF9pbml0X3BtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpbnRlbF9wbV9zZXR1 cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWJvb2wgaW50ZWxfZmJjX2VuYWJsZWQoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7Ci12b2lkIGludGVsX3VwZGF0ZV9mYmMoc3RydWN0IGRybV9kZXZp Y2UgKmRldik7CiB2b2lkIGludGVsX2dwdV9pcHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9ncHVfaXBzX3RlYXJkb3duKHZvaWQpOwogdm9pZCBp bnRlbF9pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZmJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlZWI4 NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiYy5jCkBA IC0wLDAgKzEsNjc1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRp b24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAq IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKwor I2luY2x1ZGUgImludGVsX2Rydi5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKy8qIEZCQywg b3IgRnJhbWUgQnVmZmVyIENvbXByZXNzaW9uLCBpcyBhIHRlY2huaXF1ZSBlbXBsb3llZCB0byBj b21wcmVzcyB0aGUKKyAqIGZyYW1lYnVmZmVyIGNvbnRlbnRzIGluLW1lbW9yeSwgYWltaW5nIGF0 IHJlZHVjaW5nIHRoZSByZXF1aXJlZCBiYW5kd2lkdGgKKyAqIGR1cmluZyBpbi1tZW1vcnkgdHJh bnNmZXJzIGFuZCwgdGhlcmVmb3JlLCByZWR1Y2UgdGhlIHBvd2VyIHBhY2tldC4KKyAqCisgKiBU aGUgYmVuZWZpdHMgb2YgRkJDIGFyZSBtb3N0bHkgdmlzaWJsZSB3aXRoIHNvbGlkIGJhY2tncm91 bmRzIGFuZAorICogdmFyaWF0aW9uLWxlc3MgcGF0dGVybnMuCisgKgorICogRkJDLXJlbGF0ZWQg ZnVuY3Rpb25hbGl0eSBjYW4gYmUgZW5hYmxlZCBieSB0aGUgbWVhbnMgb2YgdGhlCisgKiBpOTE1 Lmk5MTVfZmJjX2VuYWJsZSBwYXJhbWV0ZXIKKyAqLworCitzdGF0aWMgdm9pZCBpOHh4X2ZiY19k aXNhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgZmJjX2N0bDsKKworCWRldl9w cml2LT5mYmMuZW5hYmxlZCA9IGZhbHNlOworCisJLyogRGlzYWJsZSBjb21wcmVzc2lvbiAqLwor CWZiY19jdGwgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wpOworCWlmICgoZmJjX2N0bCAmIEZCQ19D VExfRU4pID09IDApCisJCXJldHVybjsKKworCWZiY19jdGwgJj0gfkZCQ19DVExfRU47CisJSTkx NV9XUklURShGQkNfQ09OVFJPTCwgZmJjX2N0bCk7CisKKwkvKiBXYWl0IGZvciBjb21wcmVzc2lu ZyBiaXQgdG8gY2xlYXIgKi8KKwlpZiAod2FpdF9mb3IoKEk5MTVfUkVBRChGQkNfU1RBVFVTKSAm IEZCQ19TVEFUX0NPTVBSRVNTSU5HKSA9PSAwLCAxMCkpIHsKKwkJRFJNX0RFQlVHX0tNUygiRkJD IGlkbGUgdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCURSTV9ERUJVR19LTVMoImRp c2FibGVkIEZCQ1xuIik7Cit9CisKK3N0YXRpYyB2b2lkIGk4eHhfZmJjX2VuYWJsZShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwor CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gY3J0Yy0+cHJpbWFyeS0+ZmI7CisJc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7CisJc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCWludCBjZmJfcGl0 Y2g7CisJaW50IGk7CisJdTMyIGZiY19jdGw7CisKKwlkZXZfcHJpdi0+ZmJjLmVuYWJsZWQgPSB0 cnVlOworCisJY2ZiX3BpdGNoID0gZGV2X3ByaXYtPmZiYy5zaXplIC8gRkJDX0xMX1NJWkU7CisJ aWYgKGZiLT5waXRjaGVzWzBdIDwgY2ZiX3BpdGNoKQorCQljZmJfcGl0Y2ggPSBmYi0+cGl0Y2hl c1swXTsKKworCS8qIEZCQ19DVEwgd2FudHMgMzJCIG9yIDY0QiB1bml0cyAqLworCWlmIChJU19H RU4yKGRldikpCisJCWNmYl9waXRjaCA9IChjZmJfcGl0Y2ggLyAzMikgLSAxOworCWVsc2UKKwkJ Y2ZiX3BpdGNoID0gKGNmYl9waXRjaCAvIDY0KSAtIDE7CisKKwkvKiBDbGVhciBvbGQgdGFncyAq LworCWZvciAoaSA9IDA7IGkgPCAoRkJDX0xMX1NJWkUgLyAzMikgKyAxOyBpKyspCisJCUk5MTVf V1JJVEUoRkJDX1RBRyArIChpICogNCksIDApOworCisJaWYgKElTX0dFTjQoZGV2KSkgeworCQl1 MzIgZmJjX2N0bDI7CisKKwkJLyogU2V0IGl0IHVwLi4uICovCisJCWZiY19jdGwyID0gRkJDX0NU TF9GRU5DRV9EQkwgfCBGQkNfQ1RMX0lETEVfSU1NIHwgRkJDX0NUTF9DUFVfRkVOQ0U7CisJCWZi Y19jdGwyIHw9IEZCQ19DVExfUExBTkUoaW50ZWxfY3J0Yy0+cGxhbmUpOworCQlJOTE1X1dSSVRF KEZCQ19DT05UUk9MMiwgZmJjX2N0bDIpOworCQlJOTE1X1dSSVRFKEZCQ19GRU5DRV9PRkYsIGNy dGMtPnkpOworCX0KKworCS8qIGVuYWJsZSBpdC4uLiAqLworCWZiY19jdGwgPSBJOTE1X1JFQUQo RkJDX0NPTlRST0wpOworCWZiY19jdGwgJj0gMHgzZmZmIDw8IEZCQ19DVExfSU5URVJWQUxfU0hJ RlQ7CisJZmJjX2N0bCB8PSBGQkNfQ1RMX0VOIHwgRkJDX0NUTF9QRVJJT0RJQzsKKwlpZiAoSVNf STk0NUdNKGRldikpCisJCWZiY19jdGwgfD0gRkJDX0NUTF9DM19JRExFOyAvKiA5NDUgbmVlZHMg c3BlY2lhbCBTUiBoYW5kbGluZyAqLworCWZiY19jdGwgfD0gKGNmYl9waXRjaCAmIDB4ZmYpIDw8 IEZCQ19DVExfU1RSSURFX1NISUZUOworCWZiY19jdGwgfD0gb2JqLT5mZW5jZV9yZWc7CisJSTkx NV9XUklURShGQkNfQ09OVFJPTCwgZmJjX2N0bCk7CisKKwlEUk1fREVCVUdfS01TKCJlbmFibGVk IEZCQywgcGl0Y2ggJWQsIHlvZmYgJWQsIHBsYW5lICVjXG4iLAorCQkgICAgICBjZmJfcGl0Y2gs IGNydGMtPnksIHBsYW5lX25hbWUoaW50ZWxfY3J0Yy0+cGxhbmUpKTsKK30KKworc3RhdGljIGJv b2wgaTh4eF9mYmNfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlyZXR1cm4g STkxNV9SRUFEKEZCQ19DT05UUk9MKSAmIEZCQ19DVExfRU47Cit9CisKK3N0YXRpYyB2b2lkIGc0 eF9mYmNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBjcnRjLT5w cmltYXJ5LT5mYjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJf b2JqKGZiKTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Yyk7CisJdTMyIGRwZmNfY3RsOworCisJZGV2X3ByaXYtPmZiYy5lbmFibGVkID0gdHJ1ZTsK KworCWRwZmNfY3RsID0gRFBGQ19DVExfUExBTkUoaW50ZWxfY3J0Yy0+cGxhbmUpIHwgRFBGQ19T Ul9FTjsKKwlpZiAoZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCkgPT0g MikKKwkJZHBmY19jdGwgfD0gRFBGQ19DVExfTElNSVRfMlg7CisJZWxzZQorCQlkcGZjX2N0bCB8 PSBEUEZDX0NUTF9MSU1JVF8xWDsKKwlkcGZjX2N0bCB8PSBEUEZDX0NUTF9GRU5DRV9FTiB8IG9i ai0+ZmVuY2VfcmVnOworCisJSTkxNV9XUklURShEUEZDX0ZFTkNFX1lPRkYsIGNydGMtPnkpOwor CisJLyogZW5hYmxlIGl0Li4uICovCisJSTkxNV9XUklURShEUEZDX0NPTlRST0wsIGRwZmNfY3Rs IHwgRFBGQ19DVExfRU4pOworCisJRFJNX0RFQlVHX0tNUygiZW5hYmxlZCBmYmMgb24gcGxhbmUg JWNcbiIsIHBsYW5lX25hbWUoaW50ZWxfY3J0Yy0+cGxhbmUpKTsKK30KKworc3RhdGljIHZvaWQg ZzR4X2ZiY19kaXNhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgZHBmY19jdGw7 CisKKwlkZXZfcHJpdi0+ZmJjLmVuYWJsZWQgPSBmYWxzZTsKKworCS8qIERpc2FibGUgY29tcHJl c3Npb24gKi8KKwlkcGZjX2N0bCA9IEk5MTVfUkVBRChEUEZDX0NPTlRST0wpOworCWlmIChkcGZj X2N0bCAmIERQRkNfQ1RMX0VOKSB7CisJCWRwZmNfY3RsICY9IH5EUEZDX0NUTF9FTjsKKwkJSTkx NV9XUklURShEUEZDX0NPTlRST0wsIGRwZmNfY3RsKTsKKworCQlEUk1fREVCVUdfS01TKCJkaXNh YmxlZCBGQkNcbiIpOworCX0KK30KKworc3RhdGljIGJvb2wgZzR4X2ZiY19lbmFibGVkKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXJldHVybiBJOTE1X1JFQUQoRFBGQ19DT05UUk9MKSAm IERQRkNfQ1RMX0VOOworfQorCitzdGF0aWMgdm9pZCBzbmJfZmJjX2JsaXRfdXBkYXRlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgYmx0X2Vjb3NrcGQ7CisKKwkvKiBNYWtlIHN1cmUg YmxpdHRlciBub3RpZmllcyBGQkMgb2Ygd3JpdGVzICovCisKKwkvKiBCbGl0dGVyIGlzIHBhcnQg b2YgTWVkaWEgcG93ZXJ3ZWxsIG9uIFZMVi4gTm8gaW1wYWN0IG9mCisJICogaGlzIHBhcmFtIGlu IG90aGVyIHBsYXRmb3JtcyBmb3Igbm93ICovCisJZ2VuNl9ndF9mb3JjZV93YWtlX2dldChkZXZf cHJpdiwgRk9SQ0VXQUtFX01FRElBKTsKKworCWJsdF9lY29za3BkID0gSTkxNV9SRUFEKEdFTjZf QkxJVFRFUl9FQ09TS1BEKTsKKwlibHRfZWNvc2twZCB8PSBHRU42X0JMSVRURVJfRkJDX05PVElG WSA8PAorCQlHRU42X0JMSVRURVJfTE9DS19TSElGVDsKKwlJOTE1X1dSSVRFKEdFTjZfQkxJVFRF Ul9FQ09TS1BELCBibHRfZWNvc2twZCk7CisJYmx0X2Vjb3NrcGQgfD0gR0VONl9CTElUVEVSX0ZC Q19OT1RJRlk7CisJSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQp OworCWJsdF9lY29za3BkICY9IH4oR0VONl9CTElUVEVSX0ZCQ19OT1RJRlkgPDwKKwkJCSBHRU42 X0JMSVRURVJfTE9DS19TSElGVCk7CisJSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwg Ymx0X2Vjb3NrcGQpOworCVBPU1RJTkdfUkVBRChHRU42X0JMSVRURVJfRUNPU0tQRCk7CisKKwln ZW42X2d0X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfTUVESUEpOworfQorCitz dGF0aWMgdm9pZCBpbGtfZmJjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gY3J0Yy0+cHJpbWFyeS0+ZmI7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiA9IGludGVsX2ZiX29iaihmYik7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0 b19pbnRlbF9jcnRjKGNydGMpOworCXUzMiBkcGZjX2N0bDsKKworCWRldl9wcml2LT5mYmMuZW5h YmxlZCA9IHRydWU7CisKKwlkcGZjX2N0bCA9IERQRkNfQ1RMX1BMQU5FKGludGVsX2NydGMtPnBs YW5lKTsKKwlpZiAoZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCkgPT0g MikKKwkJZGV2X3ByaXYtPmZiYy50aHJlc2hvbGQrKzsKKworCXN3aXRjaCAoZGV2X3ByaXYtPmZi Yy50aHJlc2hvbGQpIHsKKwljYXNlIDQ6CisJY2FzZSAzOgorCQlkcGZjX2N0bCB8PSBEUEZDX0NU TF9MSU1JVF80WDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkcGZjX2N0bCB8PSBEUEZDX0NUTF9M SU1JVF8yWDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkcGZjX2N0bCB8PSBEUEZDX0NUTF9MSU1J VF8xWDsKKwkJYnJlYWs7CisJfQorCWRwZmNfY3RsIHw9IERQRkNfQ1RMX0ZFTkNFX0VOOworCWlm IChJU19HRU41KGRldikpCisJCWRwZmNfY3RsIHw9IG9iai0+ZmVuY2VfcmVnOworCisJSTkxNV9X UklURShJTEtfRFBGQ19GRU5DRV9ZT0ZGLCBjcnRjLT55KTsKKwlJOTE1X1dSSVRFKElMS19GQkNf UlRfQkFTRSwgaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgfCBJTEtfRkJDX1JUX1ZBTElE KTsKKwkvKiBlbmFibGUgaXQuLi4gKi8KKwlJOTE1X1dSSVRFKElMS19EUEZDX0NPTlRST0wsIGRw ZmNfY3RsIHwgRFBGQ19DVExfRU4pOworCisJaWYgKElTX0dFTjYoZGV2KSkgeworCQlJOTE1X1dS SVRFKFNOQl9EUEZDX0NUTF9TQSwKKwkJCSAgIFNOQl9DUFVfRkVOQ0VfRU5BQkxFIHwgb2JqLT5m ZW5jZV9yZWcpOworCQlJOTE1X1dSSVRFKERQRkNfQ1BVX0ZFTkNFX09GRlNFVCwgY3J0Yy0+eSk7 CisJCXNuYl9mYmNfYmxpdF91cGRhdGUoZGV2KTsKKwl9CisKKwlEUk1fREVCVUdfS01TKCJlbmFi bGVkIGZiYyBvbiBwbGFuZSAlY1xuIiwgcGxhbmVfbmFtZShpbnRlbF9jcnRjLT5wbGFuZSkpOwor fQorCitzdGF0aWMgdm9pZCBpbGtfZmJjX2Rpc2FibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCXUzMiBkcGZjX2N0bDsKKworCWRldl9wcml2LT5mYmMuZW5hYmxlZCA9IGZhbHNlOworCisJ LyogRGlzYWJsZSBjb21wcmVzc2lvbiAqLworCWRwZmNfY3RsID0gSTkxNV9SRUFEKElMS19EUEZD X0NPTlRST0wpOworCWlmIChkcGZjX2N0bCAmIERQRkNfQ1RMX0VOKSB7CisJCWRwZmNfY3RsICY9 IH5EUEZDX0NUTF9FTjsKKwkJSTkxNV9XUklURShJTEtfRFBGQ19DT05UUk9MLCBkcGZjX2N0bCk7 CisKKwkJRFJNX0RFQlVHX0tNUygiZGlzYWJsZWQgRkJDXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBi b29sIGlsa19mYmNfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlyZXR1cm4g STkxNV9SRUFEKElMS19EUEZDX0NPTlRST0wpICYgRFBGQ19DVExfRU47Cit9CisKK3N0YXRpYyB2 b2lkIGdlbjdfZmJjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g Y3J0Yy0+cHJpbWFyeS0+ZmI7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGlu dGVsX2ZiX29iaihmYik7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRl bF9jcnRjKGNydGMpOworCXUzMiBkcGZjX2N0bDsKKworCWRldl9wcml2LT5mYmMuZW5hYmxlZCA9 IHRydWU7CisKKwlkcGZjX2N0bCA9IElWQl9EUEZDX0NUTF9QTEFORShpbnRlbF9jcnRjLT5wbGFu ZSk7CisJaWYgKGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApID09IDIp CisJCWRldl9wcml2LT5mYmMudGhyZXNob2xkKys7CisKKwlzd2l0Y2ggKGRldl9wcml2LT5mYmMu dGhyZXNob2xkKSB7CisJY2FzZSA0OgorCWNhc2UgMzoKKwkJZHBmY19jdGwgfD0gRFBGQ19DVExf TElNSVRfNFg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZHBmY19jdGwgfD0gRFBGQ19DVExfTElN SVRfMlg7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZHBmY19jdGwgfD0gRFBGQ19DVExfTElNSVRf MVg7CisJCWJyZWFrOworCX0KKworCWRwZmNfY3RsIHw9IElWQl9EUEZDX0NUTF9GRU5DRV9FTjsK KworCWlmIChkZXZfcHJpdi0+ZmJjLmZhbHNlX2NvbG9yKQorCQlkcGZjX2N0bCB8PSBGQkNfQ1RM X0ZBTFNFX0NPTE9SOworCisJSTkxNV9XUklURShJTEtfRFBGQ19DT05UUk9MLCBkcGZjX2N0bCB8 IERQRkNfQ1RMX0VOKTsKKworCWlmIChJU19JVllCUklER0UoZGV2KSkgeworCQkvKiBXYUZiY0Fz eW5jaEZsaXBEaXNhYmxlRmJjUXVldWU6aXZiICovCisJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlf Q0hJQ0tFTjEsCisJCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEpIHwKKwkJCSAg IElMS19GQkNRX0RJUyk7CisJfSBlbHNlIHsKKwkJLyogV2FGYmNBc3luY2hGbGlwRGlzYWJsZUZi Y1F1ZXVlOmhzdyxiZHcgKi8KKwkJSTkxNV9XUklURShDSElDS0VOX1BJUEVTTF8xKGludGVsX2Ny dGMtPnBpcGUpLAorCQkJICAgSTkxNV9SRUFEKENISUNLRU5fUElQRVNMXzEoaW50ZWxfY3J0Yy0+ cGlwZSkpIHwKKwkJCSAgIEhTV19GQkNRX0RJUyk7CisJfQorCisJSTkxNV9XUklURShTTkJfRFBG Q19DVExfU0EsCisJCSAgIFNOQl9DUFVfRkVOQ0VfRU5BQkxFIHwgb2JqLT5mZW5jZV9yZWcpOwor CUk5MTVfV1JJVEUoRFBGQ19DUFVfRkVOQ0VfT0ZGU0VULCBjcnRjLT55KTsKKworCXNuYl9mYmNf YmxpdF91cGRhdGUoZGV2KTsKKworCURSTV9ERUJVR19LTVMoImVuYWJsZWQgZmJjIG9uIHBsYW5l ICVjXG4iLCBwbGFuZV9uYW1lKGludGVsX2NydGMtPnBsYW5lKSk7Cit9CisKK2Jvb2wgaW50ZWxf ZmJjX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJcmV0dXJuIGRldl9wcml2 LT5mYmMuZW5hYmxlZDsKK30KKwordm9pZCBiZHdfZmJjX3N3X2ZsdXNoKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFJU19HRU44KGRldikpCisJCXJldHVybjsK KworCWlmICghaW50ZWxfZmJjX2VuYWJsZWQoZGV2KSkKKwkJcmV0dXJuOworCisJSTkxNV9XUklU RShNU0dfRkJDX1JFTkRfU1RBVEUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZmJj X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICpfX3dvcmspCit7CisJc3RydWN0IGludGVsX2Zi Y193b3JrICp3b3JrID0KKwkJY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayhfX3dvcmspLAor CQkJICAgICBzdHJ1Y3QgaW50ZWxfZmJjX3dvcmssIHdvcmspOworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSB3b3JrLT5jcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4 KTsKKwlpZiAod29yayA9PSBkZXZfcHJpdi0+ZmJjLmZiY193b3JrKSB7CisJCS8qIERvdWJsZSBj aGVjayB0aGF0IHdlIGhhdmVuJ3Qgc3dpdGNoZWQgZmIgd2l0aG91dCBjYW5jZWxsaW5nCisJCSAq IHRoZSBwcmlvciB3b3JrLgorCQkgKi8KKwkJaWYgKHdvcmstPmNydGMtPnByaW1hcnktPmZiID09 IHdvcmstPmZiKSB7CisJCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfZmJjKHdvcmstPmNydGMp OworCisJCQlkZXZfcHJpdi0+ZmJjLnBsYW5lID0gdG9faW50ZWxfY3J0Yyh3b3JrLT5jcnRjKS0+ cGxhbmU7CisJCQlkZXZfcHJpdi0+ZmJjLmZiX2lkID0gd29yay0+Y3J0Yy0+cHJpbWFyeS0+ZmIt PmJhc2UuaWQ7CisJCQlkZXZfcHJpdi0+ZmJjLnkgPSB3b3JrLT5jcnRjLT55OworCQl9CisKKwkJ ZGV2X3ByaXYtPmZiYy5mYmNfd29yayA9IE5VTEw7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5z dHJ1Y3RfbXV0ZXgpOworCisJa2ZyZWUod29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2Zi Y19jYW5jZWxfd29yayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYg KGRldl9wcml2LT5mYmMuZmJjX3dvcmsgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJRFJNX0RFQlVH X0tNUygiY2FuY2VsbGluZyBwZW5kaW5nIEZCQyBlbmFibGVcbiIpOworCisJLyogU3luY2hyb25p c2F0aW9uIGlzIHByb3ZpZGVkIGJ5IHN0cnVjdF9tdXRleCBhbmQgY2hlY2tpbmcgb2YKKwkgKiBk ZXZfcHJpdi0+ZmJjLmZiY193b3JrLCBzbyB3ZSBjYW4gcGVyZm9ybSB0aGUgY2FuY2VsbGF0aW9u CisJICogZW50aXJlbHkgYXN5bmNocm9ub3VzbHkuCisJICovCisJaWYgKGNhbmNlbF9kZWxheWVk X3dvcmsoJmRldl9wcml2LT5mYmMuZmJjX3dvcmstPndvcmspKQorCQkvKiB0YXNrbGV0IHdhcyBr aWxsZWQgYmVmb3JlIGJlaW5nIHJ1biwgY2xlYW4gdXAgKi8KKwkJa2ZyZWUoZGV2X3ByaXYtPmZi Yy5mYmNfd29yayk7CisKKwkvKiBNYXJrIHRoZSB3b3JrIGFzIG5vIGxvbmdlciB3YW50ZWQgc28g dGhhdCBpZiBpdCBkb2VzCisJICogd2FrZS11cCAoYmVjYXVzZSB0aGUgd29yayB3YXMgYWxyZWFk eSBydW5uaW5nIGFuZCB3YWl0aW5nCisJICogZm9yIG91ciBtdXRleCksIGl0IHdpbGwgZGlzY292 ZXIgdGhhdCBpcyBubyBsb25nZXIKKwkgKiBuZWNlc3NhcnkgdG8gcnVuLgorCSAqLworCWRldl9w cml2LT5mYmMuZmJjX3dvcmsgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9mYmNfZW5h YmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgaW50ZWxfZmJjX3dvcmsgKndv cms7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFkZXZfcHJp di0+ZGlzcGxheS5lbmFibGVfZmJjKQorCQlyZXR1cm47CisKKwlpbnRlbF9mYmNfY2FuY2VsX3dv cmsoZGV2X3ByaXYpOworCisJd29yayA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0tFUk5F TCk7CisJaWYgKHdvcmsgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0 ZSBGQkMgd29yayBzdHJ1Y3R1cmVcbiIpOworCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfZmJj KGNydGMpOworCQlyZXR1cm47CisJfQorCisJd29yay0+Y3J0YyA9IGNydGM7CisJd29yay0+ZmIg PSBjcnRjLT5wcmltYXJ5LT5mYjsKKwlJTklUX0RFTEFZRURfV09SSygmd29yay0+d29yaywgaW50 ZWxfZmJjX3dvcmtfZm4pOworCisJZGV2X3ByaXYtPmZiYy5mYmNfd29yayA9IHdvcms7CisKKwkv KiBEZWxheSB0aGUgYWN0dWFsIGVuYWJsaW5nIHRvIGxldCBwYWdlZmxpcHBpbmcgY2Vhc2UgYW5k IHRoZQorCSAqIGRpc3BsYXkgdG8gc2V0dGxlIGJlZm9yZSBzdGFydGluZyB0aGUgY29tcHJlc3Np b24uIE5vdGUgdGhhdAorCSAqIHRoaXMgZGVsYXkgYWxzbyBzZXJ2ZXMgYSBzZWNvbmQgcHVycG9z ZTogaXQgYWxsb3dzIGZvciBhCisJICogdmJsYW5rIHRvIHBhc3MgYWZ0ZXIgZGlzYWJsaW5nIHRo ZSBGQkMgYmVmb3JlIHdlIGF0dGVtcHQKKwkgKiB0byBtb2RpZnkgdGhlIGNvbnRyb2wgcmVnaXN0 ZXJzLgorCSAqCisJICogQSBtb3JlIGNvbXBsaWNhdGVkIHNvbHV0aW9uIHdvdWxkIGludm9sdmUg dHJhY2tpbmcgdmJsYW5rcworCSAqIGZvbGxvd2luZyB0aGUgdGVybWluYXRpb24gb2YgdGhlIHBh Z2UtZmxpcHBpbmcgc2VxdWVuY2UKKwkgKiBhbmQgaW5kZWVkIHBlcmZvcm1pbmcgdGhlIGVuYWJs ZSBhcyBhIGNvLXJvdXRpbmUgYW5kIG5vdAorCSAqIHdhaXRpbmcgc3luY2hyb25vdXNseSB1cG9u IHRoZSB2YmxhbmsuCisJICoKKwkgKiBXYUZiY1dhaXRGb3JWQmxhbmtCZWZvcmVFbmFibGU6aWxr LHNuYgorCSAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd29yay0+d29yaywgbXNlY3NfdG9f amlmZmllcyg1MCkpOworfQorCit2b2lkIGludGVsX2ZiY19kaXNhYmxlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKworCWludGVsX2ZiY19jYW5jZWxfd29yayhkZXZfcHJpdik7CisKKwlpZiAo IWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjKQorCQlyZXR1cm47CisKKwlkZXZfcHJpdi0+ ZGlzcGxheS5kaXNhYmxlX2ZiYyhkZXYpOworCWRldl9wcml2LT5mYmMucGxhbmUgPSAtMTsKK30K Kworc3RhdGljIGJvb2wgc2V0X25vX2ZiY19yZWFzb24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAorCQkJICAgICAgZW51bSBub19mYmNfcmVhc29uIHJlYXNvbikKK3sKKwlpZiAo ZGV2X3ByaXYtPmZiYy5ub19mYmNfcmVhc29uID09IHJlYXNvbikKKwkJcmV0dXJuIGZhbHNlOwor CisJZGV2X3ByaXYtPmZiYy5ub19mYmNfcmVhc29uID0gcmVhc29uOworCXJldHVybiB0cnVlOwor fQorCisvKioKKyAqIGludGVsX2ZiY191cGRhdGUgLSBlbmFibGUvZGlzYWJsZSBGQkMgYXMgbmVl ZGVkCisgKiBAZGV2OiB0aGUgZHJtX2RldmljZQorICoKKyAqIFNldCB1cCB0aGUgZnJhbWVidWZm ZXIgY29tcHJlc3Npb24gaGFyZHdhcmUgYXQgbW9kZSBzZXQgdGltZS4gIFdlCisgKiBlbmFibGUg aXQgaWYgcG9zc2libGU6CisgKiAgIC0gcGxhbmUgQSBvbmx5IChvbiBwcmUtOTY1KQorICogICAt IG5vIHBpeGVsIG11bGl0cGx5L2xpbmUgZHVwbGljYXRpb24KKyAqICAgLSBubyBhbHBoYSBidWZm ZXIgZGlzY2FyZAorICogICAtIG5vIGR1YWwgd2lkZQorICogICAtIGZyYW1lYnVmZmVyIDw9IG1h eF9oZGlzcGxheSBpbiB3aWR0aCwgbWF4X3ZkaXNwbGF5IGluIGhlaWdodAorICoKKyAqIFdlIGNh bid0IGFzc3VtZSB0aGF0IGFueSBjb21wcmVzc2lvbiB3aWxsIHRha2UgcGxhY2UgKHdvcnN0IGNh c2UpLAorICogc28gdGhlIGNvbXByZXNzZWQgYnVmZmVyIGhhcyB0byBiZSB0aGUgc2FtZSBzaXpl IGFzIHRoZSB1bmNvbXByZXNzZWQKKyAqIG9uZS4gIEl0IGFsc28gbXVzdCByZXNpZGUgKGFsb25n IHdpdGggdGhlIGxpbmUgbGVuZ3RoIGJ1ZmZlcikgaW4KKyAqIHN0b2xlbiBtZW1vcnkuCisgKgor ICogV2UgbmVlZCB0byBlbmFibGUvZGlzYWJsZSBGQkMgb24gYSBnbG9iYWwgYmFzaXMuCisgKi8K K3ZvaWQgaW50ZWxfZmJjX3VwZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0 IGRybV9jcnRjICpjcnRjID0gTlVMTCwgKnRtcF9jcnRjOworCXN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVz dGVkX21vZGU7CisJdW5zaWduZWQgaW50IG1heF93aWR0aCwgbWF4X2hlaWdodDsKKworCWlmICgh SEFTX0ZCQyhkZXYpKSB7CisJCXNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNfVU5TVVBQ T1JURUQpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFpOTE1LnBvd2Vyc2F2ZSkgeworCQlpZiAo c2V0X25vX2ZiY19yZWFzb24oZGV2X3ByaXYsIEZCQ19NT0RVTEVfUEFSQU0pKQorCQkJRFJNX0RF QlVHX0tNUygiZmJjIGRpc2FibGVkIHBlciBtb2R1bGUgcGFyYW1cbiIpOworCQlyZXR1cm47CisJ fQorCisJLyoKKwkgKiBJZiBGQkMgaXMgYWxyZWFkeSBvbiwgd2UganVzdCBoYXZlIHRvIHZlcmlm eSB0aGF0IHdlIGNhbgorCSAqIGtlZXAgaXQgdGhhdCB3YXkuLi4KKwkgKiBOZWVkIHRvIGRpc2Fi bGUgaWY6CisJICogICAtIG1vcmUgdGhhbiBvbmUgcGlwZSBpcyBhY3RpdmUKKwkgKiAgIC0gY2hh bmdpbmcgRkJDIHBhcmFtcyAoc3RyaWRlLCBmZW5jZSwgbW9kZSkKKwkgKiAgIC0gbmV3IGZiIGlz IHRvbyBsYXJnZSB0byBmaXQgaW4gY29tcHJlc3NlZCBidWZmZXIKKwkgKiAgIC0gZ29pbmcgdG8g YW4gdW5zdXBwb3J0ZWQgY29uZmlnIChpbnRlcmxhY2UsIHBpeGVsIG11bHRpcGx5LCBldGMuKQor CSAqLworCWZvcl9lYWNoX2NydGMoZGV2LCB0bXBfY3J0YykgeworCQlpZiAoaW50ZWxfY3J0Y19h Y3RpdmUodG1wX2NydGMpICYmCisJCSAgICB0b19pbnRlbF9jcnRjKHRtcF9jcnRjKS0+cHJpbWFy eV9lbmFibGVkKSB7CisJCQlpZiAoY3J0YykgeworCQkJCWlmIChzZXRfbm9fZmJjX3JlYXNvbihk ZXZfcHJpdiwgRkJDX01VTFRJUExFX1BJUEVTKSkKKwkJCQkJRFJNX0RFQlVHX0tNUygibW9yZSB0 aGFuIG9uZSBwaXBlIGFjdGl2ZSwgZGlzYWJsaW5nIGNvbXByZXNzaW9uXG4iKTsKKwkJCQlnb3Rv IG91dF9kaXNhYmxlOworCQkJfQorCQkJY3J0YyA9IHRtcF9jcnRjOworCQl9CisJfQorCisJaWYg KCFjcnRjIHx8IGNydGMtPnByaW1hcnktPmZiID09IE5VTEwpIHsKKwkJaWYgKHNldF9ub19mYmNf cmVhc29uKGRldl9wcml2LCBGQkNfTk9fT1VUUFVUKSkKKwkJCURSTV9ERUJVR19LTVMoIm5vIG91 dHB1dCwgZGlzYWJsaW5nXG4iKTsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisKKwlpbnRlbF9j cnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlmYiA9IGNydGMtPnByaW1hcnktPmZiOworCW9i aiA9IGludGVsX2ZiX29iaihmYik7CisJYWRqdXN0ZWRfbW9kZSA9ICZpbnRlbF9jcnRjLT5jb25m aWcuYWRqdXN0ZWRfbW9kZTsKKworCWlmIChpOTE1LmVuYWJsZV9mYmMgPCAwKSB7CisJCWlmIChz ZXRfbm9fZmJjX3JlYXNvbihkZXZfcHJpdiwgRkJDX0NISVBfREVGQVVMVCkpCisJCQlEUk1fREVC VUdfS01TKCJkaXNhYmxlZCBwZXIgY2hpcCBkZWZhdWx0XG4iKTsKKwkJZ290byBvdXRfZGlzYWJs ZTsKKwl9CisJaWYgKCFpOTE1LmVuYWJsZV9mYmMpIHsKKwkJaWYgKHNldF9ub19mYmNfcmVhc29u KGRldl9wcml2LCBGQkNfTU9EVUxFX1BBUkFNKSkKKwkJCURSTV9ERUJVR19LTVMoImZiYyBkaXNh YmxlZCBwZXIgbW9kdWxlIHBhcmFtXG4iKTsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisJaWYg KChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB8fAorCSAg ICAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pKSB7CisJCWlm IChzZXRfbm9fZmJjX3JlYXNvbihkZXZfcHJpdiwgRkJDX1VOU1VQUE9SVEVEX01PREUpKQorCQkJ RFJNX0RFQlVHX0tNUygibW9kZSBpbmNvbXBhdGlibGUgd2l0aCBjb21wcmVzc2lvbiwgIgorCQkJ CSAgICAgICJkaXNhYmxpbmdcbiIpOworCQlnb3RvIG91dF9kaXNhYmxlOworCX0KKworCWlmIChJ TlRFTF9JTkZPKGRldiktPmdlbiA+PSA4IHx8IElTX0hBU1dFTEwoZGV2KSkgeworCQltYXhfd2lk dGggPSA0MDk2OworCQltYXhfaGVpZ2h0ID0gNDA5NjsKKwl9IGVsc2UgaWYgKElTX0c0WChkZXYp IHx8IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDUpIHsKKwkJbWF4X3dpZHRoID0gNDA5NjsKKwkJ bWF4X2hlaWdodCA9IDIwNDg7CisJfSBlbHNlIHsKKwkJbWF4X3dpZHRoID0gMjA0ODsKKwkJbWF4 X2hlaWdodCA9IDE1MzY7CisJfQorCWlmIChpbnRlbF9jcnRjLT5jb25maWcucGlwZV9zcmNfdyA+ IG1heF93aWR0aCB8fAorCSAgICBpbnRlbF9jcnRjLT5jb25maWcucGlwZV9zcmNfaCA+IG1heF9o ZWlnaHQpIHsKKwkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNfTU9ERV9UT09f TEFSR0UpKQorCQkJRFJNX0RFQlVHX0tNUygibW9kZSB0b28gbGFyZ2UgZm9yIGNvbXByZXNzaW9u LCBkaXNhYmxpbmdcbiIpOworCQlnb3RvIG91dF9kaXNhYmxlOworCX0KKwlpZiAoKElOVEVMX0lO Rk8oZGV2KS0+Z2VuIDwgNCB8fCBIQVNfRERJKGRldikpICYmCisJICAgIGludGVsX2NydGMtPnBs YW5lICE9IFBMQU5FX0EpIHsKKwkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNf QkFEX1BMQU5FKSkKKwkJCURSTV9ERUJVR19LTVMoInBsYW5lIG5vdCBBLCBkaXNhYmxpbmcgY29t cHJlc3Npb25cbiIpOworCQlnb3RvIG91dF9kaXNhYmxlOworCX0KKworCS8qIFRoZSB1c2Ugb2Yg YSBDUFUgZmVuY2UgaXMgbWFuZGF0b3J5IGluIG9yZGVyIHRvIGRldGVjdCB3cml0ZXMKKwkgKiBi eSB0aGUgQ1BVIHRvIHRoZSBzY2Fub3V0IGFuZCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIEZCQy4K KwkgKi8KKwlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19YIHx8CisJICAgIG9i ai0+ZmVuY2VfcmVnID09IEk5MTVfRkVOQ0VfUkVHX05PTkUpIHsKKwkJaWYgKHNldF9ub19mYmNf cmVhc29uKGRldl9wcml2LCBGQkNfTk9UX1RJTEVEKSkKKwkJCURSTV9ERUJVR19LTVMoImZyYW1l YnVmZmVyIG5vdCB0aWxlZCBvciBmZW5jZWQsIGRpc2FibGluZyBjb21wcmVzc2lvblxuIik7CisJ CWdvdG8gb3V0X2Rpc2FibGU7CisJfQorCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8PSA0ICYm ICFJU19HNFgoZGV2KSAmJgorCSAgICB0b19pbnRlbF9wbGFuZShjcnRjLT5wcmltYXJ5KS0+cm90 YXRpb24gIT0gQklUKERSTV9ST1RBVEVfMCkpIHsKKwkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRl dl9wcml2LCBGQkNfVU5TVVBQT1JURURfTU9ERSkpCisJCQlEUk1fREVCVUdfS01TKCJSb3RhdGlv biB1bnN1cHBvcnRlZCwgZGlzYWJsaW5nXG4iKTsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisK KwkvKiBJZiB0aGUga2VybmVsIGRlYnVnZ2VyIGlzIGFjdGl2ZSwgYWx3YXlzIGRpc2FibGUgY29t cHJlc3Npb24gKi8KKwlpZiAoaW5fZGJnX21hc3RlcigpKQorCQlnb3RvIG91dF9kaXNhYmxlOwor CisJaWYgKGk5MTVfZ2VtX3N0b2xlbl9zZXR1cF9jb21wcmVzc2lvbihkZXYsIG9iai0+YmFzZS5z aXplLAorCQkJCQkgICAgICBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAw KSkpIHsKKwkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNfU1RPTEVOX1RPT19T TUFMTCkpCisJCQlEUk1fREVCVUdfS01TKCJmcmFtZWJ1ZmZlciB0b28gbGFyZ2UsIGRpc2FibGlu ZyBjb21wcmVzc2lvblxuIik7CisJCWdvdG8gb3V0X2Rpc2FibGU7CisJfQorCisJLyogSWYgdGhl IHNjYW5vdXQgaGFzIG5vdCBjaGFuZ2VkLCBkb24ndCBtb2RpZnkgdGhlIEZCQyBzZXR0aW5ncy4K KwkgKiBOb3RlIHRoYXQgd2UgbWFrZSB0aGUgZnVuZGFtZW50YWwgYXNzdW1wdGlvbiB0aGF0IHRo ZSBmYi0+b2JqCisJICogY2Fubm90IGJlIHVucGlubmVkIChhbmQgaGF2ZSBpdHMgR1RUIG9mZnNl dCBhbmQgZmVuY2UgcmV2b2tlZCkKKwkgKiB3aXRob3V0IGZpcnN0IGJlaW5nIGRlY291cGxlZCBm cm9tIHRoZSBzY2Fub3V0IGFuZCBGQkMgZGlzYWJsZWQuCisJICovCisJaWYgKGRldl9wcml2LT5m YmMucGxhbmUgPT0gaW50ZWxfY3J0Yy0+cGxhbmUgJiYKKwkgICAgZGV2X3ByaXYtPmZiYy5mYl9p ZCA9PSBmYi0+YmFzZS5pZCAmJgorCSAgICBkZXZfcHJpdi0+ZmJjLnkgPT0gY3J0Yy0+eSkKKwkJ cmV0dXJuOworCisJaWYgKGludGVsX2ZiY19lbmFibGVkKGRldikpIHsKKwkJLyogV2UgdXBkYXRl IEZCQyBhbG9uZyB0d28gcGF0aHMsIGFmdGVyIGNoYW5naW5nIGZiL2NydGMKKwkJICogY29uZmln dXJhdGlvbiAobW9kZXN3aXRjaGluZykgYW5kIGFmdGVyIHBhZ2UtZmxpcHBpbmcKKwkJICogZmlu aXNoZXMuIEZvciB0aGUgbGF0dGVyLCB3ZSBrbm93IHRoYXQgbm90IG9ubHkgZGlkCisJCSAqIHdl IGRpc2FibGUgdGhlIEZCQyBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhZ2UtZmxpcAorCQkgKiBzZXF1 ZW5jZSwgYnV0IGFsc28gbW9yZSB0aGFuIG9uZSB2YmxhbmsgaGFzIHBhc3NlZC4KKwkJICoKKwkJ ICogRm9yIHRoZSBmb3JtZXIgY2FzZSBvZiBtb2Rlc3dpdGNoaW5nLCBpdCBpcyBwb3NzaWJsZQor CQkgKiB0byBzd2l0Y2ggYmV0d2VlbiB0d28gRkJDIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisJCSAq IGluc3RhbnRhbmVvdXNseSBzbyB3ZSBkbyBuZWVkIHRvIGRpc2FibGUgdGhlIEZCQworCQkgKiBi ZWZvcmUgd2UgY2FuIG1vZGlmeSBpdHMgY29udHJvbCByZWdpc3RlcnMuIFdlIGFsc28KKwkJICog aGF2ZSB0byB3YWl0IGZvciB0aGUgbmV4dCB2YmxhbmsgZm9yIHRoYXQgdG8gdGFrZQorCQkgKiBl ZmZlY3QuIEhvd2V2ZXIsIHNpbmNlIHdlIGRlbGF5IGVuYWJsaW5nIEZCQyB3ZSBjYW4KKwkJICog YXNzdW1lIHRoYXQgYSB2YmxhbmsgaGFzIHBhc3NlZCBzaW5jZSBkaXNhYmxpbmcgYW5kCisJCSAq IHRoYXQgd2UgY2FuIHNhZmVseSBhbHRlciB0aGUgcmVnaXN0ZXJzIGluIHRoZSBkZWZlcnJlZAor CQkgKiBjYWxsYmFjay4KKwkJICoKKwkJICogSW4gdGhlIHNjZW5hcmlvIHRoYXQgd2UgZ28gZnJv bSBhIHZhbGlkIHRvIGludmFsaWQKKwkJICogYW5kIHRoZW4gYmFjayB0byB2YWxpZCBGQkMgY29u ZmlndXJhdGlvbiB3ZSBoYXZlCisJCSAqIG5vIHN0cmljdCBlbmZvcmNlbWVudCB0aGF0IGEgdmJs YW5rIG9jY3VycmVkIHNpbmNlCisJCSAqIGRpc2FibGluZyB0aGUgRkJDLiBIb3dldmVyLCBhbG9u ZyBhbGwgY3VycmVudCBwaXBlCisJCSAqIGRpc2FibGluZyBwYXRocyB3ZSBkbyBuZWVkIHRvIHdh aXQgZm9yIGEgdmJsYW5rIGF0CisJCSAqIHNvbWUgcG9pbnQuIEFuZCB3ZSB3YWl0IGJlZm9yZSBl bmFibGluZyBGQkMgYW55d2F5LgorCQkgKi8KKwkJRFJNX0RFQlVHX0tNUygiZGlzYWJsaW5nIGFj dGl2ZSBGQkMgZm9yIHVwZGF0ZVxuIik7CisJCWludGVsX2ZiY19kaXNhYmxlKGRldik7CisJfQor CisJaW50ZWxfZmJjX2VuYWJsZShjcnRjKTsKKwlkZXZfcHJpdi0+ZmJjLm5vX2ZiY19yZWFzb24g PSBGQkNfT0s7CisJcmV0dXJuOworCitvdXRfZGlzYWJsZToKKwkvKiBNdWx0aXBsZSBkaXNhYmxl cyBzaG91bGQgYmUgaGFybWxlc3MgKi8KKwlpZiAoaW50ZWxfZmJjX2VuYWJsZWQoZGV2KSkgewor CQlEUk1fREVCVUdfS01TKCJ1bnN1cHBvcnRlZCBjb25maWcsIGRpc2FibGluZyBGQkNcbiIpOwor CQlpbnRlbF9mYmNfZGlzYWJsZShkZXYpOworCX0KKwlpOTE1X2dlbV9zdG9sZW5fY2xlYW51cF9j b21wcmVzc2lvbihkZXYpOworfQorCit2b2lkIGludGVsX2ZiY19pbml0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoIUhBU19GQkMoZGV2X3ByaXYpKSB7CisJCWRl dl9wcml2LT5mYmMuZW5hYmxlZCA9IGZhbHNlOworCQlyZXR1cm47CisJfQorCisJaWYgKElOVEVM X0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gNykgeworCQlkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5h YmxlZCA9IGlsa19mYmNfZW5hYmxlZDsKKwkJZGV2X3ByaXYtPmRpc3BsYXkuZW5hYmxlX2ZiYyA9 IGdlbjdfZmJjX2VuYWJsZTsKKwkJZGV2X3ByaXYtPmRpc3BsYXkuZGlzYWJsZV9mYmMgPSBpbGtf ZmJjX2Rpc2FibGU7CisJfSBlbHNlIGlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDUp IHsKKwkJZGV2X3ByaXYtPmRpc3BsYXkuZmJjX2VuYWJsZWQgPSBpbGtfZmJjX2VuYWJsZWQ7CisJ CWRldl9wcml2LT5kaXNwbGF5LmVuYWJsZV9mYmMgPSBpbGtfZmJjX2VuYWJsZTsKKwkJZGV2X3By aXYtPmRpc3BsYXkuZGlzYWJsZV9mYmMgPSBpbGtfZmJjX2Rpc2FibGU7CisJfSBlbHNlIGlmIChJ U19HTTQ1KGRldl9wcml2KSkgeworCQlkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5hYmxlZCA9IGc0 eF9mYmNfZW5hYmxlZDsKKwkJZGV2X3ByaXYtPmRpc3BsYXkuZW5hYmxlX2ZiYyA9IGc0eF9mYmNf ZW5hYmxlOworCQlkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYyA9IGc0eF9mYmNfZGlzYWJs ZTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5hYmxlZCA9IGk4eHhfZmJj X2VuYWJsZWQ7CisJCWRldl9wcml2LT5kaXNwbGF5LmVuYWJsZV9mYmMgPSBpOHh4X2ZiY19lbmFi bGU7CisJCWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjID0gaTh4eF9mYmNfZGlzYWJsZTsK KworCQkvKiBUaGlzIHZhbHVlIHdhcyBwdWxsZWQgb3V0IG9mIHNvbWVvbmUncyBoYXQgKi8KKwkJ STkxNV9XUklURShGQkNfQ09OVFJPTCwgNTAwIDw8IEZCQ19DVExfSU5URVJWQUxfU0hJRlQpOwor CX0KKworCWRldl9wcml2LT5mYmMuZW5hYmxlZCA9IGRldl9wcml2LT5kaXNwbGF5LmZiY19lbmFi bGVkKGRldl9wcml2LT5kZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXggMjA5NzUx Yi4uOGExNGZjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCkBAIC01MiwxNyArNTIsNiBAQAog I2RlZmluZSBJTlRFTF9SQzZwX0VOQUJMRQkJCSgxPDwxKQogI2RlZmluZSBJTlRFTF9SQzZwcF9F TkFCTEUJCQkoMTw8MikKIAotLyogRkJDLCBvciBGcmFtZSBCdWZmZXIgQ29tcHJlc3Npb24sIGlz IGEgdGVjaG5pcXVlIGVtcGxveWVkIHRvIGNvbXByZXNzIHRoZQotICogZnJhbWVidWZmZXIgY29u dGVudHMgaW4tbWVtb3J5LCBhaW1pbmcgYXQgcmVkdWNpbmcgdGhlIHJlcXVpcmVkIGJhbmR3aWR0 aAotICogZHVyaW5nIGluLW1lbW9yeSB0cmFuc2ZlcnMgYW5kLCB0aGVyZWZvcmUsIHJlZHVjZSB0 aGUgcG93ZXIgcGFja2V0LgotICoKLSAqIFRoZSBiZW5lZml0cyBvZiBGQkMgYXJlIG1vc3RseSB2 aXNpYmxlIHdpdGggc29saWQgYmFja2dyb3VuZHMgYW5kCi0gKiB2YXJpYXRpb24tbGVzcyBwYXR0 ZXJucy4KLSAqCi0gKiBGQkMtcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGNhbiBiZSBlbmFibGVkIGJ5 IHRoZSBtZWFucyBvZiB0aGUKLSAqIGk5MTUuaTkxNV9lbmFibGVfZmJjIHBhcmFtZXRlcgotICov Ci0KIHN0YXRpYyB2b2lkIGdlbjlfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwpAQCAtODcsNjEzICs3Niw2IEBAIHN0YXRpYyB2b2lkIGdlbjlfaW5pdF9jbG9ja19n YXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdF TjhfNHg0X1NUQ19PUFRJTUlaQVRJT05fRElTQUJMRSkpOwogfQogCi1zdGF0aWMgdm9pZCBpOHh4 X2Rpc2FibGVfZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgZmJjX2N0bDsKLQot CWRldl9wcml2LT5mYmMuZW5hYmxlZCA9IGZhbHNlOwotCi0JLyogRGlzYWJsZSBjb21wcmVzc2lv biAqLwotCWZiY19jdGwgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wpOwotCWlmICgoZmJjX2N0bCAm IEZCQ19DVExfRU4pID09IDApCi0JCXJldHVybjsKLQotCWZiY19jdGwgJj0gfkZCQ19DVExfRU47 Ci0JSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZmJjX2N0bCk7Ci0KLQkvKiBXYWl0IGZvciBjb21w cmVzc2luZyBiaXQgdG8gY2xlYXIgKi8KLQlpZiAod2FpdF9mb3IoKEk5MTVfUkVBRChGQkNfU1RB VFVTKSAmIEZCQ19TVEFUX0NPTVBSRVNTSU5HKSA9PSAwLCAxMCkpIHsKLQkJRFJNX0RFQlVHX0tN UygiRkJDIGlkbGUgdGltZWQgb3V0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCURSTV9ERUJVR19L TVMoImRpc2FibGVkIEZCQ1xuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGk4eHhfZW5hYmxlX2ZiYyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gY3J0Yy0+cHJpbWFyeS0+ZmI7Ci0J c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7Ci0Jc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCWludCBj ZmJfcGl0Y2g7Ci0JaW50IGk7Ci0JdTMyIGZiY19jdGw7Ci0KLQlkZXZfcHJpdi0+ZmJjLmVuYWJs ZWQgPSB0cnVlOwotCi0JY2ZiX3BpdGNoID0gZGV2X3ByaXYtPmZiYy5zaXplIC8gRkJDX0xMX1NJ WkU7Ci0JaWYgKGZiLT5waXRjaGVzWzBdIDwgY2ZiX3BpdGNoKQotCQljZmJfcGl0Y2ggPSBmYi0+ cGl0Y2hlc1swXTsKLQotCS8qIEZCQ19DVEwgd2FudHMgMzJCIG9yIDY0QiB1bml0cyAqLwotCWlm IChJU19HRU4yKGRldikpCi0JCWNmYl9waXRjaCA9IChjZmJfcGl0Y2ggLyAzMikgLSAxOwotCWVs c2UKLQkJY2ZiX3BpdGNoID0gKGNmYl9waXRjaCAvIDY0KSAtIDE7Ci0KLQkvKiBDbGVhciBvbGQg dGFncyAqLwotCWZvciAoaSA9IDA7IGkgPCAoRkJDX0xMX1NJWkUgLyAzMikgKyAxOyBpKyspCi0J CUk5MTVfV1JJVEUoRkJDX1RBRyArIChpICogNCksIDApOwotCi0JaWYgKElTX0dFTjQoZGV2KSkg ewotCQl1MzIgZmJjX2N0bDI7Ci0KLQkJLyogU2V0IGl0IHVwLi4uICovCi0JCWZiY19jdGwyID0g RkJDX0NUTF9GRU5DRV9EQkwgfCBGQkNfQ1RMX0lETEVfSU1NIHwgRkJDX0NUTF9DUFVfRkVOQ0U7 Ci0JCWZiY19jdGwyIHw9IEZCQ19DVExfUExBTkUoaW50ZWxfY3J0Yy0+cGxhbmUpOwotCQlJOTE1 X1dSSVRFKEZCQ19DT05UUk9MMiwgZmJjX2N0bDIpOwotCQlJOTE1X1dSSVRFKEZCQ19GRU5DRV9P RkYsIGNydGMtPnkpOwotCX0KLQotCS8qIGVuYWJsZSBpdC4uLiAqLwotCWZiY19jdGwgPSBJOTE1 X1JFQUQoRkJDX0NPTlRST0wpOwotCWZiY19jdGwgJj0gMHgzZmZmIDw8IEZCQ19DVExfSU5URVJW QUxfU0hJRlQ7Ci0JZmJjX2N0bCB8PSBGQkNfQ1RMX0VOIHwgRkJDX0NUTF9QRVJJT0RJQzsKLQlp ZiAoSVNfSTk0NUdNKGRldikpCi0JCWZiY19jdGwgfD0gRkJDX0NUTF9DM19JRExFOyAvKiA5NDUg bmVlZHMgc3BlY2lhbCBTUiBoYW5kbGluZyAqLwotCWZiY19jdGwgfD0gKGNmYl9waXRjaCAmIDB4 ZmYpIDw8IEZCQ19DVExfU1RSSURFX1NISUZUOwotCWZiY19jdGwgfD0gb2JqLT5mZW5jZV9yZWc7 Ci0JSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZmJjX2N0bCk7Ci0KLQlEUk1fREVCVUdfS01TKCJl bmFibGVkIEZCQywgcGl0Y2ggJWQsIHlvZmYgJWQsIHBsYW5lICVjXG4iLAotCQkgICAgICBjZmJf cGl0Y2gsIGNydGMtPnksIHBsYW5lX25hbWUoaW50ZWxfY3J0Yy0+cGxhbmUpKTsKLX0KLQotc3Rh dGljIGJvb2wgaTh4eF9mYmNfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQly ZXR1cm4gSTkxNV9SRUFEKEZCQ19DT05UUk9MKSAmIEZCQ19DVExfRU47Ci19Ci0KLXN0YXRpYyB2 b2lkIGc0eF9lbmFibGVfZmJjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBj cnRjLT5wcmltYXJ5LT5mYjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50 ZWxfZmJfb2JqKGZiKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVs X2NydGMoY3J0Yyk7Ci0JdTMyIGRwZmNfY3RsOwotCi0JZGV2X3ByaXYtPmZiYy5lbmFibGVkID0g dHJ1ZTsKLQotCWRwZmNfY3RsID0gRFBGQ19DVExfUExBTkUoaW50ZWxfY3J0Yy0+cGxhbmUpIHwg RFBGQ19TUl9FTjsKLQlpZiAoZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwg MCkgPT0gMikKLQkJZHBmY19jdGwgfD0gRFBGQ19DVExfTElNSVRfMlg7Ci0JZWxzZQotCQlkcGZj X2N0bCB8PSBEUEZDX0NUTF9MSU1JVF8xWDsKLQlkcGZjX2N0bCB8PSBEUEZDX0NUTF9GRU5DRV9F TiB8IG9iai0+ZmVuY2VfcmVnOwotCi0JSTkxNV9XUklURShEUEZDX0ZFTkNFX1lPRkYsIGNydGMt PnkpOwotCi0JLyogZW5hYmxlIGl0Li4uICovCi0JSTkxNV9XUklURShEUEZDX0NPTlRST0wsIGRw ZmNfY3RsIHwgRFBGQ19DVExfRU4pOwotCi0JRFJNX0RFQlVHX0tNUygiZW5hYmxlZCBmYmMgb24g cGxhbmUgJWNcbiIsIHBsYW5lX25hbWUoaW50ZWxfY3J0Yy0+cGxhbmUpKTsKLX0KLQotc3RhdGlj IHZvaWQgZzR4X2Rpc2FibGVfZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgZHBm Y19jdGw7Ci0KLQlkZXZfcHJpdi0+ZmJjLmVuYWJsZWQgPSBmYWxzZTsKLQotCS8qIERpc2FibGUg Y29tcHJlc3Npb24gKi8KLQlkcGZjX2N0bCA9IEk5MTVfUkVBRChEUEZDX0NPTlRST0wpOwotCWlm IChkcGZjX2N0bCAmIERQRkNfQ1RMX0VOKSB7Ci0JCWRwZmNfY3RsICY9IH5EUEZDX0NUTF9FTjsK LQkJSTkxNV9XUklURShEUEZDX0NPTlRST0wsIGRwZmNfY3RsKTsKLQotCQlEUk1fREVCVUdfS01T KCJkaXNhYmxlZCBGQkNcbiIpOwotCX0KLX0KLQotc3RhdGljIGJvb2wgZzR4X2ZiY19lbmFibGVk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCXJldHVybiBJOTE1X1JFQUQoRFBGQ19DT05U Uk9MKSAmIERQRkNfQ1RMX0VOOwotfQotCi1zdGF0aWMgdm9pZCBzYW5keWJyaWRnZV9ibGl0X2Zi Y191cGRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBibHRfZWNvc2twZDsKLQot CS8qIE1ha2Ugc3VyZSBibGl0dGVyIG5vdGlmaWVzIEZCQyBvZiB3cml0ZXMgKi8KLQotCS8qIEJs aXR0ZXIgaXMgcGFydCBvZiBNZWRpYSBwb3dlcndlbGwgb24gVkxWLiBObyBpbXBhY3Qgb2YKLQkg KiBoaXMgcGFyYW0gaW4gb3RoZXIgcGxhdGZvcm1zIGZvciBub3cgKi8KLQlnZW42X2d0X2ZvcmNl X3dha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfTUVESUEpOwotCi0JYmx0X2Vjb3NrcGQgPSBJ OTE1X1JFQUQoR0VONl9CTElUVEVSX0VDT1NLUEQpOwotCWJsdF9lY29za3BkIHw9IEdFTjZfQkxJ VFRFUl9GQkNfTk9USUZZIDw8Ci0JCUdFTjZfQkxJVFRFUl9MT0NLX1NISUZUOwotCUk5MTVfV1JJ VEUoR0VONl9CTElUVEVSX0VDT1NLUEQsIGJsdF9lY29za3BkKTsKLQlibHRfZWNvc2twZCB8PSBH RU42X0JMSVRURVJfRkJDX05PVElGWTsKLQlJOTE1X1dSSVRFKEdFTjZfQkxJVFRFUl9FQ09TS1BE LCBibHRfZWNvc2twZCk7Ci0JYmx0X2Vjb3NrcGQgJj0gfihHRU42X0JMSVRURVJfRkJDX05PVElG WSA8PAotCQkJIEdFTjZfQkxJVFRFUl9MT0NLX1NISUZUKTsKLQlJOTE1X1dSSVRFKEdFTjZfQkxJ VFRFUl9FQ09TS1BELCBibHRfZWNvc2twZCk7Ci0JUE9TVElOR19SRUFEKEdFTjZfQkxJVFRFUl9F Q09TS1BEKTsKLQotCWdlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9N RURJQSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyb25sYWtlX2VuYWJsZV9mYmMoc3RydWN0IGRybV9j cnRjICpjcnRjKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGNydGMtPnByaW1hcnktPmZiOwotCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwotCXN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQl1MzIgZHBmY19jdGw7Ci0K LQlkZXZfcHJpdi0+ZmJjLmVuYWJsZWQgPSB0cnVlOwotCi0JZHBmY19jdGwgPSBEUEZDX0NUTF9Q TEFORShpbnRlbF9jcnRjLT5wbGFuZSk7Ci0JaWYgKGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5w aXhlbF9mb3JtYXQsIDApID09IDIpCi0JCWRldl9wcml2LT5mYmMudGhyZXNob2xkKys7Ci0KLQlz d2l0Y2ggKGRldl9wcml2LT5mYmMudGhyZXNob2xkKSB7Ci0JY2FzZSA0OgotCWNhc2UgMzoKLQkJ ZHBmY19jdGwgfD0gRFBGQ19DVExfTElNSVRfNFg7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJZHBm Y19jdGwgfD0gRFBGQ19DVExfTElNSVRfMlg7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJZHBmY19j dGwgfD0gRFBGQ19DVExfTElNSVRfMVg7Ci0JCWJyZWFrOwotCX0KLQlkcGZjX2N0bCB8PSBEUEZD X0NUTF9GRU5DRV9FTjsKLQlpZiAoSVNfR0VONShkZXYpKQotCQlkcGZjX2N0bCB8PSBvYmotPmZl bmNlX3JlZzsKLQotCUk5MTVfV1JJVEUoSUxLX0RQRkNfRkVOQ0VfWU9GRiwgY3J0Yy0+eSk7Ci0J STkxNV9XUklURShJTEtfRkJDX1JUX0JBU0UsIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmop IHwgSUxLX0ZCQ19SVF9WQUxJRCk7Ci0JLyogZW5hYmxlIGl0Li4uICovCi0JSTkxNV9XUklURShJ TEtfRFBGQ19DT05UUk9MLCBkcGZjX2N0bCB8IERQRkNfQ1RMX0VOKTsKLQotCWlmIChJU19HRU42 KGRldikpIHsKLQkJSTkxNV9XUklURShTTkJfRFBGQ19DVExfU0EsCi0JCQkgICBTTkJfQ1BVX0ZF TkNFX0VOQUJMRSB8IG9iai0+ZmVuY2VfcmVnKTsKLQkJSTkxNV9XUklURShEUEZDX0NQVV9GRU5D RV9PRkZTRVQsIGNydGMtPnkpOwotCQlzYW5keWJyaWRnZV9ibGl0X2ZiY191cGRhdGUoZGV2KTsK LQl9Ci0KLQlEUk1fREVCVUdfS01TKCJlbmFibGVkIGZiYyBvbiBwbGFuZSAlY1xuIiwgcGxhbmVf bmFtZShpbnRlbF9jcnRjLT5wbGFuZSkpOwotfQotCi1zdGF0aWMgdm9pZCBpcm9ubGFrZV9kaXNh YmxlX2ZiYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIGRwZmNfY3RsOwotCi0JZGV2 X3ByaXYtPmZiYy5lbmFibGVkID0gZmFsc2U7Ci0KLQkvKiBEaXNhYmxlIGNvbXByZXNzaW9uICov Ci0JZHBmY19jdGwgPSBJOTE1X1JFQUQoSUxLX0RQRkNfQ09OVFJPTCk7Ci0JaWYgKGRwZmNfY3Rs ICYgRFBGQ19DVExfRU4pIHsKLQkJZHBmY19jdGwgJj0gfkRQRkNfQ1RMX0VOOwotCQlJOTE1X1dS SVRFKElMS19EUEZDX0NPTlRST0wsIGRwZmNfY3RsKTsKLQotCQlEUk1fREVCVUdfS01TKCJkaXNh YmxlZCBGQkNcbiIpOwotCX0KLX0KLQotc3RhdGljIGJvb2wgaXJvbmxha2VfZmJjX2VuYWJsZWQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JcmV0dXJuIEk5MTVfUkVBRChJTEtfRFBGQ19D T05UUk9MKSAmIERQRkNfQ1RMX0VOOwotfQotCi1zdGF0aWMgdm9pZCBnZW43X2VuYWJsZV9mYmMo c3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRj LT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGNydGMtPnByaW1hcnktPmZiOwot CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwotCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQl1MzIg ZHBmY19jdGw7Ci0KLQlkZXZfcHJpdi0+ZmJjLmVuYWJsZWQgPSB0cnVlOwotCi0JZHBmY19jdGwg PSBJVkJfRFBGQ19DVExfUExBTkUoaW50ZWxfY3J0Yy0+cGxhbmUpOwotCWlmIChkcm1fZm9ybWF0 X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKSA9PSAyKQotCQlkZXZfcHJpdi0+ZmJjLnRo cmVzaG9sZCsrOwotCi0Jc3dpdGNoIChkZXZfcHJpdi0+ZmJjLnRocmVzaG9sZCkgewotCWNhc2Ug NDoKLQljYXNlIDM6Ci0JCWRwZmNfY3RsIHw9IERQRkNfQ1RMX0xJTUlUXzRYOwotCQlicmVhazsK LQljYXNlIDI6Ci0JCWRwZmNfY3RsIHw9IERQRkNfQ1RMX0xJTUlUXzJYOwotCQlicmVhazsKLQlj YXNlIDE6Ci0JCWRwZmNfY3RsIHw9IERQRkNfQ1RMX0xJTUlUXzFYOwotCQlicmVhazsKLQl9Ci0K LQlkcGZjX2N0bCB8PSBJVkJfRFBGQ19DVExfRkVOQ0VfRU47Ci0KLQlpZiAoZGV2X3ByaXYtPmZi Yy5mYWxzZV9jb2xvcikKLQkJZHBmY19jdGwgfD0gRkJDX0NUTF9GQUxTRV9DT0xPUjsKLQotCUk5 MTVfV1JJVEUoSUxLX0RQRkNfQ09OVFJPTCwgZHBmY19jdGwgfCBEUEZDX0NUTF9FTik7Ci0KLQlp ZiAoSVNfSVZZQlJJREdFKGRldikpIHsKLQkJLyogV2FGYmNBc3luY2hGbGlwRGlzYWJsZUZiY1F1 ZXVlOml2YiAqLwotCQlJOTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4xLAotCQkJICAgSTkx NV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8Ci0JCQkgICBJTEtfRkJDUV9ESVMpOwotCX0g ZWxzZSB7Ci0JCS8qIFdhRmJjQXN5bmNoRmxpcERpc2FibGVGYmNRdWV1ZTpoc3csYmR3ICovCi0J CUk5MTVfV1JJVEUoQ0hJQ0tFTl9QSVBFU0xfMShpbnRlbF9jcnRjLT5waXBlKSwKLQkJCSAgIEk5 MTVfUkVBRChDSElDS0VOX1BJUEVTTF8xKGludGVsX2NydGMtPnBpcGUpKSB8Ci0JCQkgICBIU1df RkJDUV9ESVMpOwotCX0KLQotCUk5MTVfV1JJVEUoU05CX0RQRkNfQ1RMX1NBLAotCQkgICBTTkJf Q1BVX0ZFTkNFX0VOQUJMRSB8IG9iai0+ZmVuY2VfcmVnKTsKLQlJOTE1X1dSSVRFKERQRkNfQ1BV X0ZFTkNFX09GRlNFVCwgY3J0Yy0+eSk7Ci0KLQlzYW5keWJyaWRnZV9ibGl0X2ZiY191cGRhdGUo ZGV2KTsKLQotCURSTV9ERUJVR19LTVMoImVuYWJsZWQgZmJjIG9uIHBsYW5lICVjXG4iLCBwbGFu ZV9uYW1lKGludGVsX2NydGMtPnBsYW5lKSk7Ci19Ci0KLWJvb2wgaW50ZWxfZmJjX2VuYWJsZWQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JcmV0dXJuIGRldl9wcml2LT5mYmMuZW5hYmxl ZDsKLX0KLQotdm9pZCBiZHdfZmJjX3N3X2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUz MiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwotCi0JaWYgKCFJU19HRU44KGRldikpCi0JCXJldHVybjsKLQotCWlmICghaW50 ZWxfZmJjX2VuYWJsZWQoZGV2KSkKLQkJcmV0dXJuOwotCi0JSTkxNV9XUklURShNU0dfRkJDX1JF TkRfU1RBVEUsIHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfZmJjX3dvcmtfZm4oc3Ry dWN0IHdvcmtfc3RydWN0ICpfX3dvcmspCi17Ci0Jc3RydWN0IGludGVsX2ZiY193b3JrICp3b3Jr ID0KLQkJY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayhfX3dvcmspLAotCQkJICAgICBzdHJ1 Y3QgaW50ZWxfZmJjX3dvcmssIHdvcmspOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB3b3Jr LT5jcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKLQotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpZiAod29y ayA9PSBkZXZfcHJpdi0+ZmJjLmZiY193b3JrKSB7Ci0JCS8qIERvdWJsZSBjaGVjayB0aGF0IHdl IGhhdmVuJ3Qgc3dpdGNoZWQgZmIgd2l0aG91dCBjYW5jZWxsaW5nCi0JCSAqIHRoZSBwcmlvciB3 b3JrLgotCQkgKi8KLQkJaWYgKHdvcmstPmNydGMtPnByaW1hcnktPmZiID09IHdvcmstPmZiKSB7 Ci0JCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfZmJjKHdvcmstPmNydGMpOwotCi0JCQlkZXZf cHJpdi0+ZmJjLnBsYW5lID0gdG9faW50ZWxfY3J0Yyh3b3JrLT5jcnRjKS0+cGxhbmU7Ci0JCQlk ZXZfcHJpdi0+ZmJjLmZiX2lkID0gd29yay0+Y3J0Yy0+cHJpbWFyeS0+ZmItPmJhc2UuaWQ7Ci0J CQlkZXZfcHJpdi0+ZmJjLnkgPSB3b3JrLT5jcnRjLT55OwotCQl9Ci0KLQkJZGV2X3ByaXYtPmZi Yy5mYmNfd29yayA9IE5VTEw7Ci0JfQotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp OwotCi0Ja2ZyZWUod29yayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2NhbmNlbF9mYmNfd29y ayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaWYgKGRldl9wcml2LT5m YmMuZmJjX3dvcmsgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JRFJNX0RFQlVHX0tNUygiY2FuY2Vs bGluZyBwZW5kaW5nIEZCQyBlbmFibGVcbiIpOwotCi0JLyogU3luY2hyb25pc2F0aW9uIGlzIHBy b3ZpZGVkIGJ5IHN0cnVjdF9tdXRleCBhbmQgY2hlY2tpbmcgb2YKLQkgKiBkZXZfcHJpdi0+ZmJj LmZiY193b3JrLCBzbyB3ZSBjYW4gcGVyZm9ybSB0aGUgY2FuY2VsbGF0aW9uCi0JICogZW50aXJl bHkgYXN5bmNocm9ub3VzbHkuCi0JICovCi0JaWYgKGNhbmNlbF9kZWxheWVkX3dvcmsoJmRldl9w cml2LT5mYmMuZmJjX3dvcmstPndvcmspKQotCQkvKiB0YXNrbGV0IHdhcyBraWxsZWQgYmVmb3Jl IGJlaW5nIHJ1biwgY2xlYW4gdXAgKi8KLQkJa2ZyZWUoZGV2X3ByaXYtPmZiYy5mYmNfd29yayk7 Ci0KLQkvKiBNYXJrIHRoZSB3b3JrIGFzIG5vIGxvbmdlciB3YW50ZWQgc28gdGhhdCBpZiBpdCBk b2VzCi0JICogd2FrZS11cCAoYmVjYXVzZSB0aGUgd29yayB3YXMgYWxyZWFkeSBydW5uaW5nIGFu ZCB3YWl0aW5nCi0JICogZm9yIG91ciBtdXRleCksIGl0IHdpbGwgZGlzY292ZXIgdGhhdCBpcyBu byBsb25nZXIKLQkgKiBuZWNlc3NhcnkgdG8gcnVuLgotCSAqLwotCWRldl9wcml2LT5mYmMuZmJj X3dvcmsgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9lbmFibGVfZmJjKHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgaW50ZWxfZmJjX3dvcmsgKndvcms7Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS5l bmFibGVfZmJjKQotCQlyZXR1cm47Ci0KLQlpbnRlbF9jYW5jZWxfZmJjX3dvcmsoZGV2X3ByaXYp OwotCi0Jd29yayA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdv cmsgPT0gTlVMTCkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBGQkMgd29yayBz dHJ1Y3R1cmVcbiIpOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfZmJjKGNydGMpOwotCQly ZXR1cm47Ci0JfQotCi0Jd29yay0+Y3J0YyA9IGNydGM7Ci0Jd29yay0+ZmIgPSBjcnRjLT5wcmlt YXJ5LT5mYjsKLQlJTklUX0RFTEFZRURfV09SSygmd29yay0+d29yaywgaW50ZWxfZmJjX3dvcmtf Zm4pOwotCi0JZGV2X3ByaXYtPmZiYy5mYmNfd29yayA9IHdvcms7Ci0KLQkvKiBEZWxheSB0aGUg YWN0dWFsIGVuYWJsaW5nIHRvIGxldCBwYWdlZmxpcHBpbmcgY2Vhc2UgYW5kIHRoZQotCSAqIGRp c3BsYXkgdG8gc2V0dGxlIGJlZm9yZSBzdGFydGluZyB0aGUgY29tcHJlc3Npb24uIE5vdGUgdGhh dAotCSAqIHRoaXMgZGVsYXkgYWxzbyBzZXJ2ZXMgYSBzZWNvbmQgcHVycG9zZTogaXQgYWxsb3dz IGZvciBhCi0JICogdmJsYW5rIHRvIHBhc3MgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBGQkMgYmVmb3Jl IHdlIGF0dGVtcHQKLQkgKiB0byBtb2RpZnkgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzLgotCSAqCi0J ICogQSBtb3JlIGNvbXBsaWNhdGVkIHNvbHV0aW9uIHdvdWxkIGludm9sdmUgdHJhY2tpbmcgdmJs YW5rcwotCSAqIGZvbGxvd2luZyB0aGUgdGVybWluYXRpb24gb2YgdGhlIHBhZ2UtZmxpcHBpbmcg c2VxdWVuY2UKLQkgKiBhbmQgaW5kZWVkIHBlcmZvcm1pbmcgdGhlIGVuYWJsZSBhcyBhIGNvLXJv dXRpbmUgYW5kIG5vdAotCSAqIHdhaXRpbmcgc3luY2hyb25vdXNseSB1cG9uIHRoZSB2Ymxhbmsu Ci0JICoKLQkgKiBXYUZiY1dhaXRGb3JWQmxhbmtCZWZvcmVFbmFibGU6aWxrLHNuYgotCSAqLwot CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd29yay0+d29yaywgbXNlY3NfdG9famlmZmllcyg1MCkp OwotfQotCi12b2lkIGludGVsX2Rpc2FibGVfZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK LQotCWludGVsX2NhbmNlbF9mYmNfd29yayhkZXZfcHJpdik7Ci0KLQlpZiAoIWRldl9wcml2LT5k aXNwbGF5LmRpc2FibGVfZmJjKQotCQlyZXR1cm47Ci0KLQlkZXZfcHJpdi0+ZGlzcGxheS5kaXNh YmxlX2ZiYyhkZXYpOwotCWRldl9wcml2LT5mYmMucGxhbmUgPSAtMTsKLX0KLQotc3RhdGljIGJv b2wgc2V0X25vX2ZiY19yZWFzb24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAot CQkJICAgICAgZW51bSBub19mYmNfcmVhc29uIHJlYXNvbikKLXsKLQlpZiAoZGV2X3ByaXYtPmZi Yy5ub19mYmNfcmVhc29uID09IHJlYXNvbikKLQkJcmV0dXJuIGZhbHNlOwotCi0JZGV2X3ByaXYt PmZiYy5ub19mYmNfcmVhc29uID0gcmVhc29uOwotCXJldHVybiB0cnVlOwotfQotCi0vKioKLSAq IGludGVsX3VwZGF0ZV9mYmMgLSBlbmFibGUvZGlzYWJsZSBGQkMgYXMgbmVlZGVkCi0gKiBAZGV2 OiB0aGUgZHJtX2RldmljZQotICoKLSAqIFNldCB1cCB0aGUgZnJhbWVidWZmZXIgY29tcHJlc3Np b24gaGFyZHdhcmUgYXQgbW9kZSBzZXQgdGltZS4gIFdlCi0gKiBlbmFibGUgaXQgaWYgcG9zc2li bGU6Ci0gKiAgIC0gcGxhbmUgQSBvbmx5IChvbiBwcmUtOTY1KQotICogICAtIG5vIHBpeGVsIG11 bGl0cGx5L2xpbmUgZHVwbGljYXRpb24KLSAqICAgLSBubyBhbHBoYSBidWZmZXIgZGlzY2FyZAot ICogICAtIG5vIGR1YWwgd2lkZQotICogICAtIGZyYW1lYnVmZmVyIDw9IG1heF9oZGlzcGxheSBp biB3aWR0aCwgbWF4X3ZkaXNwbGF5IGluIGhlaWdodAotICoKLSAqIFdlIGNhbid0IGFzc3VtZSB0 aGF0IGFueSBjb21wcmVzc2lvbiB3aWxsIHRha2UgcGxhY2UgKHdvcnN0IGNhc2UpLAotICogc28g dGhlIGNvbXByZXNzZWQgYnVmZmVyIGhhcyB0byBiZSB0aGUgc2FtZSBzaXplIGFzIHRoZSB1bmNv bXByZXNzZWQKLSAqIG9uZS4gIEl0IGFsc28gbXVzdCByZXNpZGUgKGFsb25nIHdpdGggdGhlIGxp bmUgbGVuZ3RoIGJ1ZmZlcikgaW4KLSAqIHN0b2xlbiBtZW1vcnkuCi0gKgotICogV2UgbmVlZCB0 byBlbmFibGUvZGlzYWJsZSBGQkMgb24gYSBnbG9iYWwgYmFzaXMuCi0gKi8KLXZvaWQgaW50ZWxf dXBkYXRlX2ZiYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9jcnRjICpj cnRjID0gTlVMTCwgKnRtcF9jcnRjOwotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwot CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmo7Ci0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGU7Ci0J dW5zaWduZWQgaW50IG1heF93aWR0aCwgbWF4X2hlaWdodDsKLQotCWlmICghSEFTX0ZCQyhkZXYp KSB7Ci0JCXNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNfVU5TVVBQT1JURUQpOwotCQly ZXR1cm47Ci0JfQotCi0JaWYgKCFpOTE1LnBvd2Vyc2F2ZSkgewotCQlpZiAoc2V0X25vX2ZiY19y ZWFzb24oZGV2X3ByaXYsIEZCQ19NT0RVTEVfUEFSQU0pKQotCQkJRFJNX0RFQlVHX0tNUygiZmJj IGRpc2FibGVkIHBlciBtb2R1bGUgcGFyYW1cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkg KiBJZiBGQkMgaXMgYWxyZWFkeSBvbiwgd2UganVzdCBoYXZlIHRvIHZlcmlmeSB0aGF0IHdlIGNh bgotCSAqIGtlZXAgaXQgdGhhdCB3YXkuLi4KLQkgKiBOZWVkIHRvIGRpc2FibGUgaWY6Ci0JICog ICAtIG1vcmUgdGhhbiBvbmUgcGlwZSBpcyBhY3RpdmUKLQkgKiAgIC0gY2hhbmdpbmcgRkJDIHBh cmFtcyAoc3RyaWRlLCBmZW5jZSwgbW9kZSkKLQkgKiAgIC0gbmV3IGZiIGlzIHRvbyBsYXJnZSB0 byBmaXQgaW4gY29tcHJlc3NlZCBidWZmZXIKLQkgKiAgIC0gZ29pbmcgdG8gYW4gdW5zdXBwb3J0 ZWQgY29uZmlnIChpbnRlcmxhY2UsIHBpeGVsIG11bHRpcGx5LCBldGMuKQotCSAqLwotCWZvcl9l YWNoX2NydGMoZGV2LCB0bXBfY3J0YykgewotCQlpZiAoaW50ZWxfY3J0Y19hY3RpdmUodG1wX2Ny dGMpICYmCi0JCSAgICB0b19pbnRlbF9jcnRjKHRtcF9jcnRjKS0+cHJpbWFyeV9lbmFibGVkKSB7 Ci0JCQlpZiAoY3J0YykgewotCQkJCWlmIChzZXRfbm9fZmJjX3JlYXNvbihkZXZfcHJpdiwgRkJD X01VTFRJUExFX1BJUEVTKSkKLQkJCQkJRFJNX0RFQlVHX0tNUygibW9yZSB0aGFuIG9uZSBwaXBl IGFjdGl2ZSwgZGlzYWJsaW5nIGNvbXByZXNzaW9uXG4iKTsKLQkJCQlnb3RvIG91dF9kaXNhYmxl OwotCQkJfQotCQkJY3J0YyA9IHRtcF9jcnRjOwotCQl9Ci0JfQotCi0JaWYgKCFjcnRjIHx8IGNy dGMtPnByaW1hcnktPmZiID09IE5VTEwpIHsKLQkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9w cml2LCBGQkNfTk9fT1VUUFVUKSkKLQkJCURSTV9ERUJVR19LTVMoIm5vIG91dHB1dCwgZGlzYWJs aW5nXG4iKTsKLQkJZ290byBvdXRfZGlzYWJsZTsKLQl9Ci0KLQlpbnRlbF9jcnRjID0gdG9faW50 ZWxfY3J0YyhjcnRjKTsKLQlmYiA9IGNydGMtPnByaW1hcnktPmZiOwotCW9iaiA9IGludGVsX2Zi X29iaihmYik7Ci0JYWRqdXN0ZWRfbW9kZSA9ICZpbnRlbF9jcnRjLT5jb25maWcuYWRqdXN0ZWRf bW9kZTsKLQotCWlmIChpOTE1LmVuYWJsZV9mYmMgPCAwKSB7Ci0JCWlmIChzZXRfbm9fZmJjX3Jl YXNvbihkZXZfcHJpdiwgRkJDX0NISVBfREVGQVVMVCkpCi0JCQlEUk1fREVCVUdfS01TKCJkaXNh YmxlZCBwZXIgY2hpcCBkZWZhdWx0XG4iKTsKLQkJZ290byBvdXRfZGlzYWJsZTsKLQl9Ci0JaWYg KCFpOTE1LmVuYWJsZV9mYmMpIHsKLQkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBG QkNfTU9EVUxFX1BBUkFNKSkKLQkJCURSTV9ERUJVR19LTVMoImZiYyBkaXNhYmxlZCBwZXIgbW9k dWxlIHBhcmFtXG4iKTsKLQkJZ290byBvdXRfZGlzYWJsZTsKLQl9Ci0JaWYgKChhZGp1c3RlZF9t b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB8fAotCSAgICAoYWRqdXN0ZWRf bW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pKSB7Ci0JCWlmIChzZXRfbm9fZmJj X3JlYXNvbihkZXZfcHJpdiwgRkJDX1VOU1VQUE9SVEVEX01PREUpKQotCQkJRFJNX0RFQlVHX0tN UygibW9kZSBpbmNvbXBhdGlibGUgd2l0aCBjb21wcmVzc2lvbiwgIgotCQkJCSAgICAgICJkaXNh YmxpbmdcbiIpOwotCQlnb3RvIG91dF9kaXNhYmxlOwotCX0KLQotCWlmIChJTlRFTF9JTkZPKGRl diktPmdlbiA+PSA4IHx8IElTX0hBU1dFTEwoZGV2KSkgewotCQltYXhfd2lkdGggPSA0MDk2Owot CQltYXhfaGVpZ2h0ID0gNDA5NjsKLQl9IGVsc2UgaWYgKElTX0c0WChkZXYpIHx8IElOVEVMX0lO Rk8oZGV2KS0+Z2VuID49IDUpIHsKLQkJbWF4X3dpZHRoID0gNDA5NjsKLQkJbWF4X2hlaWdodCA9 IDIwNDg7Ci0JfSBlbHNlIHsKLQkJbWF4X3dpZHRoID0gMjA0ODsKLQkJbWF4X2hlaWdodCA9IDE1 MzY7Ci0JfQotCWlmIChpbnRlbF9jcnRjLT5jb25maWcucGlwZV9zcmNfdyA+IG1heF93aWR0aCB8 fAotCSAgICBpbnRlbF9jcnRjLT5jb25maWcucGlwZV9zcmNfaCA+IG1heF9oZWlnaHQpIHsKLQkJ aWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNfTU9ERV9UT09fTEFSR0UpKQotCQkJ RFJNX0RFQlVHX0tNUygibW9kZSB0b28gbGFyZ2UgZm9yIGNvbXByZXNzaW9uLCBkaXNhYmxpbmdc biIpOwotCQlnb3RvIG91dF9kaXNhYmxlOwotCX0KLQlpZiAoKElOVEVMX0lORk8oZGV2KS0+Z2Vu IDwgNCB8fCBIQVNfRERJKGRldikpICYmCi0JICAgIGludGVsX2NydGMtPnBsYW5lICE9IFBMQU5F X0EpIHsKLQkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNfQkFEX1BMQU5FKSkK LQkJCURSTV9ERUJVR19LTVMoInBsYW5lIG5vdCBBLCBkaXNhYmxpbmcgY29tcHJlc3Npb25cbiIp OwotCQlnb3RvIG91dF9kaXNhYmxlOwotCX0KLQotCS8qIFRoZSB1c2Ugb2YgYSBDUFUgZmVuY2Ug aXMgbWFuZGF0b3J5IGluIG9yZGVyIHRvIGRldGVjdCB3cml0ZXMKLQkgKiBieSB0aGUgQ1BVIHRv IHRoZSBzY2Fub3V0IGFuZCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIEZCQy4KLQkgKi8KLQlpZiAo b2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19YIHx8Ci0JICAgIG9iai0+ZmVuY2VfcmVn ID09IEk5MTVfRkVOQ0VfUkVHX05PTkUpIHsKLQkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9w cml2LCBGQkNfTk9UX1RJTEVEKSkKLQkJCURSTV9ERUJVR19LTVMoImZyYW1lYnVmZmVyIG5vdCB0 aWxlZCBvciBmZW5jZWQsIGRpc2FibGluZyBjb21wcmVzc2lvblxuIik7Ci0JCWdvdG8gb3V0X2Rp c2FibGU7Ci0JfQotCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8PSA0ICYmICFJU19HNFgoZGV2 KSAmJgotCSAgICB0b19pbnRlbF9wbGFuZShjcnRjLT5wcmltYXJ5KS0+cm90YXRpb24gIT0gQklU KERSTV9ST1RBVEVfMCkpIHsKLQkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNf VU5TVVBQT1JURURfTU9ERSkpCi0JCQlEUk1fREVCVUdfS01TKCJSb3RhdGlvbiB1bnN1cHBvcnRl ZCwgZGlzYWJsaW5nXG4iKTsKLQkJZ290byBvdXRfZGlzYWJsZTsKLQl9Ci0KLQkvKiBJZiB0aGUg a2VybmVsIGRlYnVnZ2VyIGlzIGFjdGl2ZSwgYWx3YXlzIGRpc2FibGUgY29tcHJlc3Npb24gKi8K LQlpZiAoaW5fZGJnX21hc3RlcigpKQotCQlnb3RvIG91dF9kaXNhYmxlOwotCi0JaWYgKGk5MTVf Z2VtX3N0b2xlbl9zZXR1cF9jb21wcmVzc2lvbihkZXYsIG9iai0+YmFzZS5zaXplLAotCQkJCQkg ICAgICBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKSkpIHsKLQkJaWYg KHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNfU1RPTEVOX1RPT19TTUFMTCkpCi0JCQlE Uk1fREVCVUdfS01TKCJmcmFtZWJ1ZmZlciB0b28gbGFyZ2UsIGRpc2FibGluZyBjb21wcmVzc2lv blxuIik7Ci0JCWdvdG8gb3V0X2Rpc2FibGU7Ci0JfQotCi0JLyogSWYgdGhlIHNjYW5vdXQgaGFz IG5vdCBjaGFuZ2VkLCBkb24ndCBtb2RpZnkgdGhlIEZCQyBzZXR0aW5ncy4KLQkgKiBOb3RlIHRo YXQgd2UgbWFrZSB0aGUgZnVuZGFtZW50YWwgYXNzdW1wdGlvbiB0aGF0IHRoZSBmYi0+b2JqCi0J ICogY2Fubm90IGJlIHVucGlubmVkIChhbmQgaGF2ZSBpdHMgR1RUIG9mZnNldCBhbmQgZmVuY2Ug cmV2b2tlZCkKLQkgKiB3aXRob3V0IGZpcnN0IGJlaW5nIGRlY291cGxlZCBmcm9tIHRoZSBzY2Fu b3V0IGFuZCBGQkMgZGlzYWJsZWQuCi0JICovCi0JaWYgKGRldl9wcml2LT5mYmMucGxhbmUgPT0g aW50ZWxfY3J0Yy0+cGxhbmUgJiYKLQkgICAgZGV2X3ByaXYtPmZiYy5mYl9pZCA9PSBmYi0+YmFz ZS5pZCAmJgotCSAgICBkZXZfcHJpdi0+ZmJjLnkgPT0gY3J0Yy0+eSkKLQkJcmV0dXJuOwotCi0J aWYgKGludGVsX2ZiY19lbmFibGVkKGRldikpIHsKLQkJLyogV2UgdXBkYXRlIEZCQyBhbG9uZyB0 d28gcGF0aHMsIGFmdGVyIGNoYW5naW5nIGZiL2NydGMKLQkJICogY29uZmlndXJhdGlvbiAobW9k ZXN3aXRjaGluZykgYW5kIGFmdGVyIHBhZ2UtZmxpcHBpbmcKLQkJICogZmluaXNoZXMuIEZvciB0 aGUgbGF0dGVyLCB3ZSBrbm93IHRoYXQgbm90IG9ubHkgZGlkCi0JCSAqIHdlIGRpc2FibGUgdGhl IEZCQyBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhZ2UtZmxpcAotCQkgKiBzZXF1ZW5jZSwgYnV0IGFs c28gbW9yZSB0aGFuIG9uZSB2YmxhbmsgaGFzIHBhc3NlZC4KLQkJICoKLQkJICogRm9yIHRoZSBm b3JtZXIgY2FzZSBvZiBtb2Rlc3dpdGNoaW5nLCBpdCBpcyBwb3NzaWJsZQotCQkgKiB0byBzd2l0 Y2ggYmV0d2VlbiB0d28gRkJDIHZhbGlkIGNvbmZpZ3VyYXRpb25zCi0JCSAqIGluc3RhbnRhbmVv dXNseSBzbyB3ZSBkbyBuZWVkIHRvIGRpc2FibGUgdGhlIEZCQwotCQkgKiBiZWZvcmUgd2UgY2Fu IG1vZGlmeSBpdHMgY29udHJvbCByZWdpc3RlcnMuIFdlIGFsc28KLQkJICogaGF2ZSB0byB3YWl0 IGZvciB0aGUgbmV4dCB2YmxhbmsgZm9yIHRoYXQgdG8gdGFrZQotCQkgKiBlZmZlY3QuIEhvd2V2 ZXIsIHNpbmNlIHdlIGRlbGF5IGVuYWJsaW5nIEZCQyB3ZSBjYW4KLQkJICogYXNzdW1lIHRoYXQg YSB2YmxhbmsgaGFzIHBhc3NlZCBzaW5jZSBkaXNhYmxpbmcgYW5kCi0JCSAqIHRoYXQgd2UgY2Fu IHNhZmVseSBhbHRlciB0aGUgcmVnaXN0ZXJzIGluIHRoZSBkZWZlcnJlZAotCQkgKiBjYWxsYmFj ay4KLQkJICoKLQkJICogSW4gdGhlIHNjZW5hcmlvIHRoYXQgd2UgZ28gZnJvbSBhIHZhbGlkIHRv IGludmFsaWQKLQkJICogYW5kIHRoZW4gYmFjayB0byB2YWxpZCBGQkMgY29uZmlndXJhdGlvbiB3 ZSBoYXZlCi0JCSAqIG5vIHN0cmljdCBlbmZvcmNlbWVudCB0aGF0IGEgdmJsYW5rIG9jY3VycmVk IHNpbmNlCi0JCSAqIGRpc2FibGluZyB0aGUgRkJDLiBIb3dldmVyLCBhbG9uZyBhbGwgY3VycmVu dCBwaXBlCi0JCSAqIGRpc2FibGluZyBwYXRocyB3ZSBkbyBuZWVkIHRvIHdhaXQgZm9yIGEgdmJs YW5rIGF0Ci0JCSAqIHNvbWUgcG9pbnQuIEFuZCB3ZSB3YWl0IGJlZm9yZSBlbmFibGluZyBGQkMg YW55d2F5LgotCQkgKi8KLQkJRFJNX0RFQlVHX0tNUygiZGlzYWJsaW5nIGFjdGl2ZSBGQkMgZm9y IHVwZGF0ZVxuIik7Ci0JCWludGVsX2Rpc2FibGVfZmJjKGRldik7Ci0JfQotCi0JaW50ZWxfZW5h YmxlX2ZiYyhjcnRjKTsKLQlkZXZfcHJpdi0+ZmJjLm5vX2ZiY19yZWFzb24gPSBGQkNfT0s7Ci0J cmV0dXJuOwotCi1vdXRfZGlzYWJsZToKLQkvKiBNdWx0aXBsZSBkaXNhYmxlcyBzaG91bGQgYmUg aGFybWxlc3MgKi8KLQlpZiAoaW50ZWxfZmJjX2VuYWJsZWQoZGV2KSkgewotCQlEUk1fREVCVUdf S01TKCJ1bnN1cHBvcnRlZCBjb25maWcsIGRpc2FibGluZyBGQkNcbiIpOwotCQlpbnRlbF9kaXNh YmxlX2ZiYyhkZXYpOwotCX0KLQlpOTE1X2dlbV9zdG9sZW5fY2xlYW51cF9jb21wcmVzc2lvbihk ZXYpOwotfQogCiBzdGF0aWMgdm9pZCBpOTE1X3BpbmV2aWV3X2dldF9tZW1fZnJlcShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQogewpAQCAtNjkyMiw0MyArNjMwNCwxMiBAQCB2b2lkIGludGVsX3N1 c3BlbmRfaHcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJbHB0X3N1c3BlbmRfaHcoZGV2KTsK IH0KIAotc3RhdGljIHZvaWQgaW50ZWxfaW5pdF9mYmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQotewotCWlmICghSEFTX0ZCQyhkZXZfcHJpdikpIHsKLQkJZGV2X3ByaXYtPmZi Yy5lbmFibGVkID0gZmFsc2U7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXZf cHJpdiktPmdlbiA+PSA3KSB7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmZiY19lbmFibGVkID0gaXJv bmxha2VfZmJjX2VuYWJsZWQ7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmVuYWJsZV9mYmMgPSBnZW43 X2VuYWJsZV9mYmM7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjID0gaXJvbmxha2Vf ZGlzYWJsZV9mYmM7Ci0JfSBlbHNlIGlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDUp IHsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZmJjX2VuYWJsZWQgPSBpcm9ubGFrZV9mYmNfZW5hYmxl ZDsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZW5hYmxlX2ZiYyA9IGlyb25sYWtlX2VuYWJsZV9mYmM7 Ci0JCWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjID0gaXJvbmxha2VfZGlzYWJsZV9mYmM7 Ci0JfSBlbHNlIGlmIChJU19HTTQ1KGRldl9wcml2KSkgewotCQlkZXZfcHJpdi0+ZGlzcGxheS5m YmNfZW5hYmxlZCA9IGc0eF9mYmNfZW5hYmxlZDsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZW5hYmxl X2ZiYyA9IGc0eF9lbmFibGVfZmJjOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYyA9 IGc0eF9kaXNhYmxlX2ZiYzsKLQl9IGVsc2UgewotCQlkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5h YmxlZCA9IGk4eHhfZmJjX2VuYWJsZWQ7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmVuYWJsZV9mYmMg PSBpOHh4X2VuYWJsZV9mYmM7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjID0gaTh4 eF9kaXNhYmxlX2ZiYzsKLQotCQkvKiBUaGlzIHZhbHVlIHdhcyBwdWxsZWQgb3V0IG9mIHNvbWVv bmUncyBoYXQgKi8KLQkJSTkxNV9XUklURShGQkNfQ09OVFJPTCwgNTAwIDw8IEZCQ19DVExfSU5U RVJWQUxfU0hJRlQpOwotCX0KLQotCWRldl9wcml2LT5mYmMuZW5hYmxlZCA9IGRldl9wcml2LT5k aXNwbGF5LmZiY19lbmFibGVkKGRldl9wcml2LT5kZXYpOwotfQotCiAvKiBTZXQgdXAgY2hpcCBz cGVjaWZpYyBwb3dlciBtYW5hZ2VtZW50LXJlbGF0ZWQgZnVuY3Rpb25zICovCiB2b2lkIGludGVs X2luaXRfcG0oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaW50ZWxfaW5pdF9mYmMoZGV2 X3ByaXYpOworCWludGVsX2ZiY19pbml0KGRldl9wcml2KTsKIAogCS8qIEZvciBjeHNyICovCiAJ aWYgKElTX1BJTkVWSUVXKGRldikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCmluZGV4 IGJjNTgzNGIuLmMxOGU1N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3Nwcml0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCkBAIC0x MDA0LDcgKzEwMDQsNyBAQCBpbnRlbF9wb3N0X2VuYWJsZV9wcmltYXJ5KHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIAloc3dfZW5hYmxlX2lwcyhpbnRlbF9jcnRjKTsKIAogCW11dGV4X2xvY2soJmRl di0+c3RydWN0X211dGV4KTsKLQlpbnRlbF91cGRhdGVfZmJjKGRldik7CisJaW50ZWxfZmJjX3Vw ZGF0ZShkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogfQogCkBAIC0x MDE3LDcgKzEwMTcsNyBAQCBpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlpZiAoZGV2X3By aXYtPmZiYy5wbGFuZSA9PSBpbnRlbF9jcnRjLT5wbGFuZSkKLQkJaW50ZWxfZGlzYWJsZV9mYmMo ZGV2KTsKKwkJaW50ZWxfZmJjX2Rpc2FibGUoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKIAogCS8qCi0tIAoyLjEuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK