From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH 10/42] drm/i915: make plane helpers fully atomic Date: Mon, 11 May 2015 16:24:46 +0200 Message-ID: <1431354318-11995-11-git-send-email-maarten.lankhorst@linux.intel.com> References: <1431354318-11995-1-git-send-email-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTP id 1DA2E6E3F7 for ; Mon, 11 May 2015 07:25:44 -0700 (PDT) In-Reply-To: <1431354318-11995-1-git-send-email-maarten.lankhorst@linux.intel.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: Ander Conselvan de Oliveira List-Id: intel-gfx@lists.freedesktop.org VGhpcyBraWxscyBvZmYgbW9zdCBvZiB0aGUgdHJhbnNpdGlvbmFsIGhlbHBlcnMgYW5kIHVzZXMg YXRvbWljIHBsYW5lIHVwZGF0ZXMKaW4gdGhlIG1vZGVzZXQgcGF0aCB0byB1cGRhdGUgZXZlcnl0 aGluZy4KCkdldHRpbmcgcmlkIG9mIHRoZSB0cmFuc2l0aW9uYWwgcGxhbmUgaGVscGVycyBtZWFu dCB0aGF0IHBsYW5lcyBoYWQgdG8gYmUgYWRkZWQKaW4gdGhlIGNydGMgY2hlY2sgZnVuY3Rpb24u IE9uIG1vZGVzZXQgYSBjb25uZWN0b3IgY2FuIGJlIG1vdmVkIHRvIGEgZGlmZmVyZW50CmNydGMs IGFuZCB0aGlzIGlzIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBvdGhlcndpc2UuCgpTaWduZWQtb2Zm LWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jIHwgIDU5ICsr LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAgICAgfCA2NTUgKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aCAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMg ICAgICAgfCAgODAgKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCA0NDEgaW5zZXJ0aW9ucygrKSwgMzU1 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0 b21pY19wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMK aW5kZXggODZiYTRiMmMzYTY1Li44NWI4N2U0ZDRiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2F0b21pY19wbGFuZS5jCkBAIC0xMTAsMzIgKzExMCw0MCBAQCBzdGF0aWMgaW50IGlu dGVsX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCQkgICAg c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IGRybV9jcnRjICpjcnRj ID0gc3RhdGUtPmNydGM7Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7Ci0Jc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOwogCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9w bGFuZShwbGFuZSk7CiAJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9zdGF0ZSA9IHRv X2ludGVsX3BsYW5lX3N0YXRlKHN0YXRlKTsKIAotCWNydGMgPSBjcnRjID8gY3J0YyA6IHBsYW5l LT5jcnRjOwotCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCisJaW50ZWxfc3Rh dGUtPnZpc2libGUgPSBmYWxzZTsKIAkvKgogCSAqIEJvdGggY3J0YyBhbmQgcGxhbmUtPmNydGMg Y291bGQgYmUgTlVMTCBpZiB3ZSdyZSB1cGRhdGluZyBhCiAJICogcHJvcGVydHkgd2hpbGUgdGhl IHBsYW5lIGlzIGRpc2FibGVkLiAgV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZQogCSAqIGFueXRoaW5n IGRyaXZlci1zcGVjaWZpYyB3ZSBuZWVkIHRvIHRlc3QgaW4gdGhhdCBjYXNlLCBzbwogCSAqIGp1 c3QgcmV0dXJuIHN1Y2Nlc3MuCiAJICovCi0JaWYgKCFjcnRjKQorCWlmICghY3J0YykgeworCQlE Uk1fREVCVUdfQVRPTUlDKCJJbnZpc2libGU6IG5vIGNydGNcbiIpOwogCQlyZXR1cm4gMDsKKwl9 CisKKwljcnRjX3N0YXRlID0gc3RhdGUtPnN0YXRlLT5jcnRjX3N0YXRlc1tkcm1fY3J0Y19pbmRl eChjcnRjKV07CisJaWYgKFdBUk5fT04oIWNydGNfc3RhdGUpKQorCQlyZXR1cm4gMDsKKworCWlm ICghY3J0Y19zdGF0ZS0+ZW5hYmxlKSB7CisJCURSTV9ERUJVR19BVE9NSUMoIkludmlzaWJsZTog Y3J0YyBvZmZcbiIpOwogCi0JLyogRklYTUU6IHRlbXBvcmFyeSBoYWNrIG5lY2Vzc2FyeSB3aGls ZSB3ZSBzdGlsbCB1c2UgdGhlIHBsYW5lIHVwZGF0ZQotCSAqIGhlbHBlci4gKi8KLQlpZiAoc3Rh dGUtPnN0YXRlKSB7Ci0JCWNydGNfc3RhdGUgPQotCQkJaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0 YXRlKHN0YXRlLT5zdGF0ZSwgaW50ZWxfY3J0Yyk7Ci0JCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkp Ci0JCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKLQl9IGVsc2UgewotCQljcnRjX3N0YXRl ID0gaW50ZWxfY3J0Yy0+Y29uZmlnOworCQkvKgorCQkgKiBQcm9iYWJseSBhbGxvd2VkIGFmdGVy IGNvbnZlcnRpbmcgdG8gYXRvbWljLiBSaWdodAorCQkgKiBub3cgaXQgcHJvYmFibHkgbWVhbnMg d2UgaGF2ZSB0aGUgc3RhdGUgY29uZnVzZWQuCisJCSAqLworCQlJOTE1X1NUQVRFX1dBUk5fT04o cGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CisJCXJldHVybiAwOworCX0K KworCWlmICghY3J0Y19zdGF0ZS0+YWN0aXZlKSB7CisJCURSTV9ERUJVR19BVE9NSUMoIkludmlz aWJsZTogZHBtcyBvZmZcbiIpOworCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgpAQCAtMTU1LDI0ICsx NjMsOSBAQCBzdGF0aWMgaW50IGludGVsX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKIAkvKiBDbGlwIGFsbCBwbGFuZXMgdG8gQ1JUQyBzaXplLCBvciAweDAgaWYg Q1JUQyBpcyBkaXNhYmxlZCAqLwogCWludGVsX3N0YXRlLT5jbGlwLngxID0gMDsKIAlpbnRlbF9z dGF0ZS0+Y2xpcC55MSA9IDA7Ci0JaW50ZWxfc3RhdGUtPmNsaXAueDIgPQotCQljcnRjX3N0YXRl LT5iYXNlLmFjdGl2ZSA/IGNydGNfc3RhdGUtPnBpcGVfc3JjX3cgOiAwOwotCWludGVsX3N0YXRl LT5jbGlwLnkyID0KLQkJY3J0Y19zdGF0ZS0+YmFzZS5hY3RpdmUgPyBjcnRjX3N0YXRlLT5waXBl X3NyY19oIDogMDsKLQotCS8qCi0JICogRGlzYWJsaW5nIGEgcGxhbmUgaXMgYWx3YXlzIG9rYXk7 IHdlIGp1c3QgbmVlZCB0byB1cGRhdGUKLQkgKiBmYiB0cmFja2luZyBpbiBhIHNwZWNpYWwgd2F5 IHNpbmNlIGNsZWFudXBfZmIoKSB3b24ndAotCSAqIGdldCBjYWxsZWQgYnkgdGhlIHBsYW5lIGhl bHBlcnMuCi0JICovCi0JaWYgKHN0YXRlLT5mYiA9PSBOVUxMICYmIHBsYW5lLT5zdGF0ZS0+ZmIg IT0gTlVMTCkgewotCQkvKgotCQkgKiAncHJlcGFyZScgaXMgbmV2ZXIgY2FsbGVkIHdoZW4gcGxh bmUgaXMgYmVpbmcgZGlzYWJsZWQsIHNvCi0JCSAqIHdlIG5lZWQgdG8gaGFuZGxlIGZyb250YnVm ZmVyIHRyYWNraW5nIGFzIGEgc3BlY2lhbCBjYXNlCi0JCSAqLwotCQlpbnRlbF9jcnRjLT5hdG9t aWMuZGlzYWJsZWRfcGxhbmVzIHw9Ci0JCQkoMSA8PCBkcm1fcGxhbmVfaW5kZXgocGxhbmUpKTsK LQl9CisJZHJtX2NydGNfZ2V0X2h2X3RpbWluZygmY3J0Y19zdGF0ZS0+bW9kZSwKKwkJCSAgICAg ICAmaW50ZWxfc3RhdGUtPmNsaXAueDIsCisJCQkgICAgICAgJmludGVsX3N0YXRlLT5jbGlwLnky KTsKIAogCWlmIChzdGF0ZS0+ZmIgJiYgaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHN0YXRlLT5y b3RhdGlvbikpIHsKIAkJaWYgKCEoc3RhdGUtPmZiLT5tb2RpZmllclswXSA9PSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRCB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDk1 NmM5OTY0Mjc1ZC4uOTYxMGY3NmEyNDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jCkBAIC0xMDAsMTQgKzEwMCwxNiBAQCBzdGF0aWMgdm9pZCB2bHZfcHJlcGFyZV9wbGwoc3Ry dWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKnBpcGVfY29uZmlnKTsKIHN0YXRpYyB2b2lkIGNodl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlw ZV9jb25maWcpOworc3RhdGljIGludCBpbnRlbF9hdG9taWNfY2hlY2tfY3J0YyhzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCisJCQkJICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsK IHN0YXRpYyB2b2lkIGludGVsX2JlZ2luX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 Yyk7CiBzdGF0aWMgdm9pZCBpbnRlbF9maW5pc2hfY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRj ICpjcnRjKTsKIHN0YXRpYyB2b2lkIHNrbF9pbml0X3NjYWxlcnMoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCiAJc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpOwogc3RhdGljIGludCBpOXh4X2dldF9yZWZjbGsoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQkgICBpbnQgbnVtX2Nvbm5lY3Rv cnMpOwotc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19lbmFibGVfcGxhbmVzKHN0cnVjdCBkcm1fY3J0 YyAqY3J0Yyk7Ci1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2FibGVfcGxhbmVzKHN0cnVjdCBk cm1fY3J0YyAqY3J0Yyk7CitzdGF0aWMgdm9pZCBpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KHN0 cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitzdGF0aWMgdm9pZCBpbnRlbF9wb3N0X2VuYWJsZV9wcmlt YXJ5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiAKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqaW50ZWxfZmluZF9lbmNvZGVyKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3Rvciwg aW50IHBpcGUpCiB7CkBAIC0yMjIwLDI4ICsyMjIyLDYgQEAgdm9pZCBpbnRlbF9mbHVzaF9wcmlt YXJ5X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAlQT1NUSU5HX1JF QUQocmVnKTsKIH0KIAotLyoqCi0gKiBpbnRlbF9lbmFibGVfcHJpbWFyeV9od19wbGFuZSAtIGVu YWJsZSB0aGUgcHJpbWFyeSBwbGFuZSBvbiBhIGdpdmVuIHBpcGUKLSAqIEBwbGFuZTogIHBsYW5l IHRvIGJlIGVuYWJsZWQKLSAqIEBjcnRjOiBjcnRjIGZvciB0aGUgcGxhbmUKLSAqCi0gKiBFbmFi bGUgQHBsYW5lIG9uIEBjcnRjLCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwaXBlIGlzIHJ1bm5pbmcg Zmlyc3QuCi0gKi8KLXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9wcmltYXJ5X2h3X3BsYW5lKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQotCS8qIElmIHRoZSBwaXBlIGlz bid0IGVuYWJsZWQsIHdlIGNhbid0IHB1bXAgcGl4ZWxzIGFuZCBtYXkgaGFuZyAqLwotCWFzc2Vy dF9waXBlX2VuYWJsZWQoZGV2X3ByaXYsIGludGVsX2NydGMtPnBpcGUpOwotCXRvX2ludGVsX3Bs YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSktPnZpc2libGUgPSB0cnVlOwotCi0JZGV2X3ByaXYtPmRp c3BsYXkudXBkYXRlX3ByaW1hcnlfcGxhbmUoY3J0YywgcGxhbmUtPmZiLAotCQkJCQkgICAgICAg Y3J0Yy0+eCwgY3J0Yy0+eSk7Ci19Ci0KIHN0YXRpYyBib29sIG5lZWRfdnRkX3dhKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgQ09ORklHX0lOVEVMX0lPTU1VCkBAIC0zMTYxLDEx ICszMTQxLDIwIEBAIGludGVsX3BpcGVfc2V0X2Jhc2VfYXRvbWljKHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiB7CiAJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUg PQorCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShjcnRjLT5wcmltYXJ5LT5zdGF0ZSk7CisJYm9vbCB3 YXNfdmlzaWJsZSA9IHBsYW5lX3N0YXRlLT52aXNpYmxlOwogCi0JaWYgKGRldl9wcml2LT5kaXNw bGF5LmRpc2FibGVfZmJjKQorCS8qIE5vdCBzdXBwb3J0ZWQgcmlnaHQgbm93IGJ5IHRoZSBoZWxw ZXIsIGJ1dCBsZXRzIGJlIHRob3JvdWdoLiAqLworCWlmICh3YXNfdmlzaWJsZSAmJiAhZmIpCisJ CWludGVsX3ByZV9kaXNhYmxlX3ByaW1hcnkoY3J0Yyk7CisJZWxzZSBpZiAod2FzX3Zpc2libGUg JiYgZGV2X3ByaXYtPmRpc3BsYXkuZGlzYWJsZV9mYmMpCiAJCWRldl9wcml2LT5kaXNwbGF5LmRp c2FibGVfZmJjKGRldik7CiAKKwlwbGFuZV9zdGF0ZS0+dmlzaWJsZSA9ICEhZmI7CiAJZGV2X3By aXYtPmRpc3BsYXkudXBkYXRlX3ByaW1hcnlfcGxhbmUoY3J0YywgZmIsIHgsIHkpOworCWlmICgh d2FzX3Zpc2libGUgJiYgZmIpCisJCWludGVsX3Bvc3RfZW5hYmxlX3ByaW1hcnkoY3J0Yyk7CiAK IAlyZXR1cm4gMDsKIH0KQEAgLTMxOTIsMTYgKzMxODEsMTcgQEAgc3RhdGljIHZvaWQgaW50ZWxf dXBkYXRlX3ByaW1hcnlfcGxhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJCXN0cnVjdCBp bnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAogCQlkcm1fbW9k ZXNldF9sb2NrKCZjcnRjLT5tdXRleCwgTlVMTCk7Ci0JCS8qCi0JCSAqIEZJWE1FOiBPbmNlIHdl IGhhdmUgcHJvcGVyIHN1cHBvcnQgZm9yIHByaW1hcnkgcGxhbmVzIChhbmQKLQkJICogZGlzYWJs aW5nIHRoZW0gd2l0aG91dCBkaXNhYmxpbmcgdGhlIGVudGlyZSBjcnRjKSBhbGxvdyBhZ2Fpbgot CQkgKiBhIE5VTEwgY3J0Yy0+cHJpbWFyeS0+ZmIuCi0JCSAqLwotCQlpZiAoaW50ZWxfY3J0Yy0+ YWN0aXZlICYmIGNydGMtPnByaW1hcnktPmZiKQorCisJCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUp IHsKKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUgPQorCQkJCXRvX2lu dGVsX3BsYW5lX3N0YXRlKGNydGMtPnByaW1hcnktPnN0YXRlKTsKKwogCQkJZGV2X3ByaXYtPmRp c3BsYXkudXBkYXRlX3ByaW1hcnlfcGxhbmUoY3J0YywKLQkJCQkJCQkgICAgICAgY3J0Yy0+cHJp bWFyeS0+ZmIsCi0JCQkJCQkJICAgICAgIGNydGMtPngsCi0JCQkJCQkJICAgICAgIGNydGMtPnkp OworCQkJCQkJCXN0YXRlLT5iYXNlLmZiLAorCQkJCQkJCXN0YXRlLT5zcmMueDEgPj4gMTYsCisJ CQkJCQkJc3RhdGUtPnNyYy55MSA+PiAxNik7CisJCX0KKwogCQlkcm1fbW9kZXNldF91bmxvY2so JmNydGMtPm11dGV4KTsKIAl9CiB9CkBAIC00NTcyLDIwICs0NTYyLDYgQEAgc3RhdGljIHZvaWQg aXJvbmxha2VfcGZpdF9lbmFibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCiAJfQogfQogCi1z dGF0aWMgdm9pZCBpbnRlbF9lbmFibGVfc3ByaXRlX3BsYW5lcyhzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQllbnVtIHBpcGUg cGlwZSA9IHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGU7Ci0Jc3RydWN0IGRybV9wbGFuZSAqcGxh bmU7Ci0Jc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZTsKLQotCWRybV9mb3JfZWFjaF9s ZWdhY3lfcGxhbmUocGxhbmUsICZkZXYtPm1vZGVfY29uZmlnLnBsYW5lX2xpc3QpIHsKLQkJaW50 ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7Ci0JCWlmIChpbnRlbF9wbGFuZS0+cGlw ZSA9PSBwaXBlKQotCQkJaW50ZWxfcGxhbmVfcmVzdG9yZSgmaW50ZWxfcGxhbmUtPmJhc2UpOwot CX0KLX0KLQogdm9pZCBoc3dfZW5hYmxlX2lwcyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIHsK IAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7CkBAIC00ODE1LDQ0ICs0 NzkxLDYgQEAgaW50ZWxfcHJlX2Rpc2FibGVfcHJpbWFyeShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp CiAJaHN3X2Rpc2FibGVfaXBzKGludGVsX2NydGMpOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9j cnRjX2VuYWJsZV9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCWludGVsX2VuYWJs ZV9wcmltYXJ5X2h3X3BsYW5lKGNydGMtPnByaW1hcnksIGNydGMpOwotCWludGVsX2VuYWJsZV9z cHJpdGVfcGxhbmVzKGNydGMpOwotCWludGVsX2NydGNfdXBkYXRlX2N1cnNvcihjcnRjLCB0cnVl KTsKLQotCWludGVsX3Bvc3RfZW5hYmxlX3ByaW1hcnkoY3J0Yyk7Ci19Ci0KLXN0YXRpYyB2b2lk IGludGVsX2NydGNfZGlzYWJsZV9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50 ZWxfcGxhbmU7Ci0JaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCi0JaW50ZWxfY3J0Y193 YWl0X2Zvcl9wZW5kaW5nX2ZsaXBzKGNydGMpOwotCi0JaW50ZWxfcHJlX2Rpc2FibGVfcHJpbWFy eShjcnRjKTsKLQotCWludGVsX2NydGNfZHBtc19vdmVybGF5X2Rpc2FibGUoaW50ZWxfY3J0Yyk7 Ci0JZm9yX2VhY2hfaW50ZWxfcGxhbmUoZGV2LCBpbnRlbF9wbGFuZSkgewotCQlpZiAoaW50ZWxf cGxhbmUtPnBpcGUgPT0gcGlwZSkgewotCQkJc3RydWN0IGRybV9jcnRjICpmcm9tID0gaW50ZWxf cGxhbmUtPmJhc2UuY3J0YzsKLQotCQkJaW50ZWxfcGxhbmUtPmRpc2FibGVfcGxhbmUoJmludGVs X3BsYW5lLT5iYXNlLAotCQkJCQkJICAgZnJvbSA/OiBjcnRjLCB0cnVlKTsKLQkJfQotCX0KLQot CS8qCi0JICogRklYTUU6IE9uY2Ugd2UgZ3JvdyBwcm9wZXIgbnVjbGVhciBmbGlwIHN1cHBvcnQg b3V0IG9mIHRoaXMgd2UgbmVlZAotCSAqIHRvIGNvbXB1dGUgdGhlIG1hc2sgb2YgZmxpcCBwbGFu ZXMgcHJlY2lzZWx5LiBGb3IgdGhlIHRpbWUgYmVpbmcKLQkgKiBjb25zaWRlciB0aGlzIGEgZmxp cCB0byBhIE5VTEwgcGxhbmUuCi0JICovCi0JaW50ZWxfZnJvbnRidWZmZXJfZmxpcChkZXYsIElO VEVMX0ZST05UQlVGRkVSX0FMTF9NQVNLKHBpcGUpKTsKLX0KLQogc3RhdGljIHZvaWQgaXJvbmxh a2VfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC0xMTA2MSw2ICsxMDk5OSw3IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGludGVsX2hlbHBlcl9mdW5jcyA9IHsKIAku bG9hZF9sdXQgPSBpbnRlbF9jcnRjX2xvYWRfbHV0LAogCS5hdG9taWNfYmVnaW4gPSBpbnRlbF9i ZWdpbl9jcnRjX2NvbW1pdCwKIAkuYXRvbWljX2ZsdXNoID0gaW50ZWxfZmluaXNoX2NydGNfY29t bWl0LAorCS5hdG9taWNfY2hlY2sgPSBpbnRlbF9hdG9taWNfY2hlY2tfY3J0YywKIH07CiAKIC8q IFRyYW5zaXRpb25hbCBoZWxwZXIgdG8gY29weSBjdXJyZW50IGNvbm5lY3Rvci9lbmNvZGVyIHN0 YXRlIHRvCkBAIC0xMTQyNiwxNiArMTEzNjUsNiBAQCBpbnRlbF9tb2Rlc2V0X3BpcGVfY29uZmln KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlpbnQgaTsKIAlib29sIHJldHJ5ID0gdHJ1ZTsKIAot CWlmICghY2hlY2tfZW5jb2Rlcl9jbG9uaW5nKHN0YXRlLCB0b19pbnRlbF9jcnRjKGNydGMpKSkg ewotCQlEUk1fREVCVUdfS01TKCJyZWplY3RpbmcgaW52YWxpZCBjbG9uaW5nIGNvbmZpZ3VyYXRp b25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNoZWNrX2RpZ2l0YWxfcG9y dF9jb25mbGljdHMoc3RhdGUpKSB7Ci0JCURSTV9ERUJVR19LTVMoInJlamVjdGluZyBjb25mbGlj dGluZyBkaWdpdGFsIHBvcnQgY29uZmlndXJhdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQogCWNsZWFyX2ludGVsX2NydGNfc3RhdGUocGlwZV9jb25maWcpOwogCiAJcGlwZV9jb25m aWctPmNwdV90cmFuc2NvZGVyID0KQEAgLTExNTUzLDkgKzExNDgyLDI3IEBAIGludGVsX21vZGVz ZXRfdXBkYXRlX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIAlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGM7CiAJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwogCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKmNvbm5lY3Rvcl9zdGF0ZTsKKwlpbnQgaTsKIAogCWludGVsX3NoYXJlZF9kcGxsX2NvbW1p dChkZXZfcHJpdik7Ci0JZHJtX2F0b21pY19oZWxwZXJfc3dhcF9zdGF0ZShzdGF0ZS0+ZGV2LCBz dGF0ZSk7CisKKwkvKgorCSAqIHN3YXAgY3J0YyBhbmQgY29ubmVjdG9yIHN0YXRlLCBwbGFuZSBz dGF0ZSBpcyBhbHJlYWR5IHN3YXBwZWQgaW4KKwkgKiBfX2ludGVsX3NldF9tb2RlX3VwZGF0ZV9w bGFuZXMuIE9uY2UgLmNydGNfZGlzYWJsZSBpcyBmaXhlZAorCSAqIGFsbCBzdGF0ZSBzaG91bGQg YmUgc3dhcHBlZCBiZWZvcmUgZGlzYWJsaW5nIGNydGMncy4KKwkgKi8KKwlmb3JfZWFjaF9jcnRj X2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7CisJCWNydGMtPnN0YXRlLT5z dGF0ZSA9IHN0YXRlOworCQlzd2FwKHN0YXRlLT5jcnRjX3N0YXRlc1tpXSwgY3J0Yy0+c3RhdGUp OworCQljcnRjLT5zdGF0ZS0+c3RhdGUgPSBOVUxMOworCX0KKworCWZvcl9lYWNoX2Nvbm5lY3Rv cl9pbl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yLCBjb25uZWN0b3Jfc3RhdGUsIGkpIHsKKwkJY29u bmVjdG9yLT5zdGF0ZS0+c3RhdGUgPSBzdGF0ZTsKKwkJc3dhcChzdGF0ZS0+Y29ubmVjdG9yX3N0 YXRlc1tpXSwgY29ubmVjdG9yLT5zdGF0ZSk7CisJCWNvbm5lY3Rvci0+c3RhdGUtPnN0YXRlID0g TlVMTDsKKwl9CiAKIAlmb3JfZWFjaF9pbnRlbF9lbmNvZGVyKGRldiwgaW50ZWxfZW5jb2Rlcikg ewogCQlpZiAoIWludGVsX2VuY29kZXItPmJhc2UuY3J0YykKQEAgLTEyMTYzLDggKzEyMTEwLDgg QEAgaW50ZWxfbW9kZXNldF9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJ ICAgIFdBUk5fT04ocGlwZV9jb25maWctPmJhc2UuYWN0aXZlKSkKIAkJcGlwZV9jb25maWctPmJh c2UuYWN0aXZlID0gZmFsc2U7CiAKLQlpZiAoIXBpcGVfY29uZmlnLT5iYXNlLmVuYWJsZSkKLQkJ cmV0dXJuIHBpcGVfY29uZmlnOworCWlmICghcGlwZV9jb25maWctPmJhc2UuYWN0aXZlKQorCQln b3RvIGRvbmU7CiAKIAlyZXQgPSBpbnRlbF9tb2Rlc2V0X3BpcGVfY29uZmlnKGNydGMsIHN0YXRl LCBwaXBlX2NvbmZpZyk7CiAJaWYgKHJldCkKQEAgLTEyMTgyLDggKzEyMTI5LDggQEAgaW50ZWxf bW9kZXNldF9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJICogcmVxdWly ZWQgY2hhbmdlcyBhbmQgZm9yY2luZyBhIG1vZGUgc2V0LgogCSAqLwogCi0JaW50ZWxfZHVtcF9w aXBlX2NvbmZpZyh0b19pbnRlbF9jcnRjKGNydGMpLCBwaXBlX2NvbmZpZywiW21vZGVzZXRdIik7 Ci0KKwlpbnRlbF9kdW1wX3BpcGVfY29uZmlnKHRvX2ludGVsX2NydGMoY3J0YyksIHBpcGVfY29u ZmlnLCAiW21vZGVzZXRdIik7Citkb25lOgogCXJldCA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNr X3BsYW5lcyhzdGF0ZS0+ZGV2LCBzdGF0ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIEVSUl9QVFIo cmV0KTsKQEAgLTEyMjQ3LDYgKzEyMTk0LDExIEBAIHN0YXRpYyBpbnQgX19pbnRlbF9zZXRfbW9k ZV9jaGVja3Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBzdGF0ZS0+ZGV2OwogCWludCByZXQ7CiAKKwlpZiAoIWNoZWNrX2RpZ2l0YWxf cG9ydF9jb25mbGljdHMoc3RhdGUpKSB7CisJCURSTV9ERUJVR19LTVMoInJlamVjdGluZyBjb25m bGljdGluZyBkaWdpdGFsIHBvcnQgY29uZmlndXJhdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFM OworCX0KKwogCS8qCiAJICogU2VlIGlmIHRoZSBjb25maWcgcmVxdWlyZXMgYW55IGFkZGl0aW9u YWwgcHJlcGFyYXRpb24sIGUuZy4KIAkgKiB0byBhZGp1c3QgZ2xvYmFsIHN0YXRlIHdpdGggcGlw ZXMgb2ZmLiAgV2UgbmVlZCB0byBkbyB0aGlzCkBAIC0xMjI2Nyw2ICsxMjIxOSwxMTIgQEAgc3Rh dGljIGludCBfX2ludGVsX3NldF9tb2RlX2NoZWNrcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW50ZWxfc2V0X21vZGVfdXBk YXRlX3BsYW5lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCit7CisJaW50IGk7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq b2xkX3BsYW5lX3N0YXRlOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKKwkvKgor CSAqIEZvciBub3cgb25seSBzd2FwIHBsYW5lIHN0YXRlLCB3aWxsIGJlIHJlcGxhY2VkIHdpdGgg YQorCSAqIGNhbGwgdG8gZHJtX2F0b21pY19oZWxwZXJfc3dhcF9zdGF0ZQorCSAqLworCWZvcl9l YWNoX3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgb2xkX3BsYW5lX3N0YXRlLCBpKSB7CisJ CXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gc3RhdGUtPnBsYW5lc1tpXTsKKworCQlpZiAoIXBs YW5lKQorCQkJY29udGludWU7CisKKwkJcGxhbmUtPnN0YXRlLT5zdGF0ZSA9IHN0YXRlOworCQlz d2FwKHN0YXRlLT5wbGFuZV9zdGF0ZXNbaV0sIHBsYW5lLT5zdGF0ZSk7CisJCXBsYW5lLT5zdGF0 ZS0+c3RhdGUgPSBOVUxMOworCX0KKworCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNy dGMsIGNydGNfc3RhdGUsIGkpIHsKKwkJY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5j cyAqZnVuY3M7CisKKwkJZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKKworCQlpZiAoIWZ1 bmNzIHx8ICFmdW5jcy0+YXRvbWljX2JlZ2luKQorCQkJY29udGludWU7CisKKwkJLyogWFhYOiBI YWNrIGJlY2F1c2UgY3J0YyBzdGF0ZSBpcyBub3Qgc3dhcHBlZCAqLworCQljcnRjLT5zdGF0ZS0+ bW9kZV9jaGFuZ2VkID0gY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkOworCQljcnRjLT5zdGF0ZS0+ YWN0aXZlX2NoYW5nZWQgPSBjcnRjX3N0YXRlLT5hY3RpdmVfY2hhbmdlZDsKKworCQlEUk1fREVC VUdfQVRPTUlDKCJDYWxsaW5nIGF0b21pY19iZWdpbiBvbiBjcnRjICVpXG4iLCBpKTsKKwkJZnVu Y3MtPmF0b21pY19iZWdpbihjcnRjKTsKKwl9CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShz dGF0ZSwgcGxhbmUsIG9sZF9wbGFuZV9zdGF0ZSwgaSkgeworCQlib29sIHZpc2libGUgPSB0b19p bnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpLT52aXNpYmxlOworCQlzdHJ1Y3QgaW50ZWxf cGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUpOworCQljb25zdCBzdHJ1 Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyAqZnVuY3MgPQorCQkJcGxhbmUtPmhlbHBlcl9wcml2 YXRlOworCisJCWNydGMgPSBwbGFuZS0+c3RhdGUtPmNydGM7CisKKwkJLyogbm8gcG9pbnQgaW4g ZGlzYWJsaW5nIGlmIGFscmVhZHkgZGlzYWJsZWQgKi8KKwkJaWYgKCF0b19pbnRlbF9wbGFuZV9z dGF0ZShvbGRfcGxhbmVfc3RhdGUpLT52aXNpYmxlICYmCisJCSAgICAhdG9faW50ZWxfcGxhbmVf c3RhdGUob2xkX3BsYW5lX3N0YXRlKS0+aHdfZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCXRv X2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSktPmh3X2VuYWJsZWQgPSBmYWxzZTsKKwkJ RFJNX0RFQlVHX0FUT01JQygiUGxhbmUgJWkgaXMgdmlzaWJsZTogJWlcbiIsIGksIHZpc2libGUp OworCisJCWlmICghdmlzaWJsZSkKKwkJCWZ1bmNzLT5hdG9taWNfdXBkYXRlKHBsYW5lLCBvbGRf cGxhbmVfc3RhdGUpOworCQllbHNlIGlmIChuZWVkc19tb2Rlc2V0KGNydGMtPnN0YXRlKSkKKwkJ CWludGVsX3BsYW5lLT5kaXNhYmxlX3BsYW5lKHBsYW5lLCBjcnRjLCB0cnVlKTsKKwl9Cit9CisK K3N0YXRpYyB2b2lkIF9faW50ZWxfc2V0X21vZGVfY2xlYW51cF9wbGFuZXMoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUp Cit7CisJaW50IG5wbGFuZXMgPSBkZXYtPm1vZGVfY29uZmlnLm51bV90b3RhbF9wbGFuZTsKKwlp bnQgbmNydGNzID0gZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YzsKKwlpbnQgaTsKKworCWZvciAo aSA9IDA7IGkgPCBucGxhbmVzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxw ZXJfZnVuY3MgKmZ1bmNzOworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IG9sZF9zdGF0ZS0+ cGxhbmVzW2ldOworCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGU7CisK KwkJaWYgKCFwbGFuZSkKKwkJCWNvbnRpbnVlOworCisJCWZ1bmNzID0gcGxhbmUtPmhlbHBlcl9w cml2YXRlOworCQlvbGRfcGxhbmVfc3RhdGUgPSBvbGRfc3RhdGUtPnBsYW5lX3N0YXRlc1tpXTsK KworCQlpZiAodG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKS0+dmlzaWJsZSkgewor CQkJRFJNX0RFQlVHX0FUT01JQygiUGxhbmUgJWkgaXMgdXBkYXRlZFxuIiwgaSk7CisJCQlmdW5j cy0+YXRvbWljX3VwZGF0ZShwbGFuZSwgb2xkX3BsYW5lX3N0YXRlKTsKKwkJfSBlbHNlCisJCQlE Uk1fREVCVUdfQVRPTUlDKCJQbGFuZSAlaSBpcyBsZWZ0IGFsb25lXG4iLCBpKTsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgbmNydGNzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGRybV9jcnRjX2hl bHBlcl9mdW5jcyAqZnVuY3M7CisJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG9sZF9zdGF0ZS0+ Y3J0Y3NbaV07CisKKwkJaWYgKCFjcnRjKQorCQkJY29udGludWU7CisKKwkJZnVuY3MgPSBjcnRj LT5oZWxwZXJfcHJpdmF0ZTsKKworCQlpZiAoIWZ1bmNzIHx8ICFmdW5jcy0+YXRvbWljX2ZsdXNo KQorCQkJY29udGludWU7CisKKwkJRFJNX0RFQlVHX0FUT01JQygiQ2FsbGluZyBhdG9taWNfZmx1 c2ggb24gY3J0YyAlaVxuIiwgaSk7CisJCWZ1bmNzLT5hdG9taWNfZmx1c2goY3J0Yyk7CisJfQor CWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRldiwgb2xkX3N0YXRlKTsKK30KKwog c3RhdGljIGludCBfX2ludGVsX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqbW9kZXNldF9jcnRj LAogCQkJICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKIHsKQEAgLTEy Mjc1LDcgKzEyMzMzLDcgQEAgc3RhdGljIGludCBfX2ludGVsX3NldF9tb2RlKHN0cnVjdCBkcm1f Y3J0YyAqbW9kZXNldF9jcnRjLAogCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IHBp cGVfY29uZmlnLT5iYXNlLnN0YXRlOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAlzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAlp bnQgaTsKIAogCXJldCA9IF9faW50ZWxfc2V0X21vZGVfY2hlY2tzKHN0YXRlKTsKQEAgLTEyMjg2 LDE0ICsxMjM0NCwxNCBAQCBzdGF0aWMgaW50IF9faW50ZWxfc2V0X21vZGUoc3RydWN0IGRybV9j cnRjICptb2Rlc2V0X2NydGMsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCV9faW50ZWxf c2V0X21vZGVfdXBkYXRlX3BsYW5lcyhkZXYsIHN0YXRlKTsKKwogCWZvcl9lYWNoX2NydGNfaW5f c3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsKIAkJaWYgKCFuZWVkc19tb2Rlc2V0 KGNydGNfc3RhdGUpKQogCQkJY29udGludWU7CiAKLQkJaW50ZWxfY3J0Y19kaXNhYmxlX3BsYW5l cyhjcnRjKTsKKwkJaW50ZWxfY3J0Y19kcG1zX292ZXJsYXlfZGlzYWJsZSh0b19pbnRlbF9jcnRj KGNydGMpKTsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlKGNydGMpOwotCQlpZiAo IWNydGNfc3RhdGUtPmVuYWJsZSkKLQkJCWRybV9wbGFuZV9oZWxwZXJfZGlzYWJsZShjcnRjLT5w cmltYXJ5KTsKIAl9CiAKIAkvKiBPbmx5IGFmdGVyIGRpc2FibGluZyBhbGwgb3V0cHV0IHBpcGVs aW5lcyB0aGF0IHdpbGwgYmUgY2hhbmdlZCBjYW4gd2UKQEAgLTEyMzA1LDggKzEyMzYzLDYgQEAg c3RhdGljIGludCBfX2ludGVsX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqbW9kZXNldF9jcnRj LAogCiAJbW9kZXNldF91cGRhdGVfY3J0Y19wb3dlcl9kb21haW5zKHN0YXRlKTsKIAotCWRybV9h dG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZGV2LCBzdGF0ZSk7Ci0KIAkvKiBOb3cgZW5hYmxl IHRoZSBjbG9ja3MsIHBsYW5lLCBwaXBlLCBhbmQgY29ubmVjdG9ycyB0aGF0IHdlIHNldCB1cC4g Ki8KIAlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7 CiAJCWlmICghY3J0Yy0+c3RhdGUtPmFjdGl2ZSkKQEAgLTEyMzE0LDEzICsxMjM3MCwxMyBAQCBz dGF0aWMgaW50IF9faW50ZWxfc2V0X21vZGUoc3RydWN0IGRybV9jcnRjICptb2Rlc2V0X2NydGMs CiAKIAkJdXBkYXRlX3NjYW5saW5lX29mZnNldCh0b19pbnRlbF9jcnRjKGNydGMpKTsKIAotCQlk ZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZShjcnRjKTsKLQkJaW50ZWxfY3J0Y19lbmFibGVf cGxhbmVzKGNydGMpOworCQlpZiAobmVlZHNfbW9kZXNldChjcnRjLT5zdGF0ZSkpCisJCQlkZXZf cHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZShjcnRjKTsKIAl9CiAKLQkvKiBGSVhNRTogYWRkIHN1 YnBpeGVsIG9yZGVyICovCisJX19pbnRlbF9zZXRfbW9kZV9jbGVhbnVwX3BsYW5lcyhkZXYsIHN0 YXRlKTsKIAotCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOwor CS8qIEZJWE1FOiBhZGQgc3VicGl4ZWwgb3JkZXIgKi8KIAogCWRybV9hdG9taWNfc3RhdGVfZnJl ZShzdGF0ZSk7CiAKQEAgLTEyNTY4LDIwICsxMjYyNCwxMSBAQCBpbnRlbF9tb2Rlc2V0X3N0YWdl X291dHB1dF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXJldHVybiAwOwogfQogCi1z dGF0aWMgYm9vbCBwcmltYXJ5X3BsYW5lX3Zpc2libGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQot ewotCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUgPQotCQl0b19pbnRlbF9w bGFuZV9zdGF0ZShjcnRjLT5wcmltYXJ5LT5zdGF0ZSk7Ci0KLQlyZXR1cm4gcGxhbmVfc3RhdGUt PnZpc2libGU7Ci19Ci0KIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19zZXRfY29uZmlnKHN0cnVjdCBk cm1fbW9kZV9zZXQgKnNldCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCXN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IE5VTEw7CiAJc3RydWN0IGludGVsX2NydGNfc3RhdGUg KnBpcGVfY29uZmlnOwotCWJvb2wgcHJpbWFyeV9wbGFuZV93YXNfdmlzaWJsZTsKIAlpbnQgcmV0 OwogCiAJQlVHX09OKCFzZXQpOwpAQCAtMTI2MjAsMzggKzEyNjY3LDcgQEAgc3RhdGljIGludCBp bnRlbF9jcnRjX3NldF9jb25maWcoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0KQogCiAJaW50ZWxf dXBkYXRlX3BpcGVfc2l6ZSh0b19pbnRlbF9jcnRjKHNldC0+Y3J0YykpOwogCi0JcHJpbWFyeV9w bGFuZV93YXNfdmlzaWJsZSA9IHByaW1hcnlfcGxhbmVfdmlzaWJsZShzZXQtPmNydGMpOwotCiAJ cmV0ID0gaW50ZWxfc2V0X21vZGVfd2l0aF9jb25maWcoc2V0LT5jcnRjLCBwaXBlX2NvbmZpZyk7 Ci0KLQlpZiAocmV0ID09IDAgJiYKLQkgICAgcGlwZV9jb25maWctPmJhc2UuZW5hYmxlICYmCi0J ICAgIHBpcGVfY29uZmlnLT5iYXNlLnBsYW5lc19jaGFuZ2VkICYmCi0JICAgICFuZWVkc19tb2Rl c2V0KCZwaXBlX2NvbmZpZy0+YmFzZSkpIHsKLQkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2Ny dGMgPSB0b19pbnRlbF9jcnRjKHNldC0+Y3J0Yyk7Ci0KLQkJLyoKLQkJICogV2UgbmVlZCB0byBt YWtlIHN1cmUgdGhlIHByaW1hcnkgcGxhbmUgaXMgcmUtZW5hYmxlZCBpZiBpdAotCQkgKiBoYXMg cHJldmlvdXNseSBiZWVuIHR1cm5lZCBvZmYuCi0JCSAqLwotCQlpZiAocmV0ID09IDAgJiYgIXBy aW1hcnlfcGxhbmVfd2FzX3Zpc2libGUgJiYKLQkJICAgIHByaW1hcnlfcGxhbmVfdmlzaWJsZShz ZXQtPmNydGMpKSB7Ci0JCQlXQVJOX09OKCFpbnRlbF9jcnRjLT5hY3RpdmUpOwotCQkJaW50ZWxf cG9zdF9lbmFibGVfcHJpbWFyeShzZXQtPmNydGMpOwotCQl9Ci0KLQkJLyoKLQkJICogSW4gdGhl IGZhc3Rib290IGNhc2UgdGhpcyBtYXkgYmUgb3VyIG9ubHkgY2hlY2sgb2YgdGhlCi0JCSAqIHN0 YXRlIGFmdGVyIGJvb3QuICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gb25seSBkbyBpdCBvbgotCQkg KiB0aGUgZmlyc3QgdXBkYXRlLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIG5pY2Ugd2F5IG9mIGRvaW5n IHRoYXQKLQkJICogKGFuZCByZWFsbHksIHNldF9jb25maWcgaXNuJ3QgdXNlZCBtdWNoIGZvciBo aWdoIGZyZXEgcGFnZQotCQkgKiBmbGlwcGluZywgc28gaW5jcmVhc2luZyBpdHMgY29zdCBoZXJl IHNob3VsZG4ndCBiZSBhIGJpZwotCQkgKiBkZWFsKS4KLQkJICovCi0JCWlmIChpOTE1LmZhc3Ri b290ICYmIHJldCA9PSAwKQotCQkJaW50ZWxfbW9kZXNldF9jaGVja19zdGF0ZShzZXQtPmNydGMt PmRldik7Ci0JfQotCiAJaWYgKHJldCkgewogCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgdG8gc2V0 IG1vZGUgb24gW0NSVEM6JWRdLCBlcnIgPSAlZFxuIiwKIAkJCSAgICAgIHNldC0+Y3J0Yy0+YmFz ZS5pZCwgcmV0KTsKQEAgLTEyNzkxLDYgKzEyODA3LDkgQEAgYm9vbCBpbnRlbF93bV9uZWVkX3Vw ZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkgICAgcGxhbmUtPnN0YXRlLT5yb3RhdGlv biAhPSBzdGF0ZS0+cm90YXRpb24pCiAJCXJldHVybiB0cnVlOwogCisJaWYgKHBsYW5lLT5zdGF0 ZS0+Y3J0Y193ICE9IHN0YXRlLT5jcnRjX3cpCisJCXJldHVybiB0cnVlOworCiAJcmV0dXJuIGZh bHNlOwogfQogCkBAIC0xMjgxOSw2ICsxMjgzOCw5IEBAIGludGVsX3ByZXBhcmVfcGxhbmVfZmIo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cyA9IDA7 CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoIXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0 ZSktPnZpc2libGUpCisJCW9sZF9vYmogPSBOVUxMOworCiAJaWYgKCFvYmopCiAJCXJldHVybiAw OwogCkBAIC0xMjkxNSwxMCArMTI5MzcsOCBAQCBpbnRlbF9jaGVja19wcmltYXJ5X3BsYW5lKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0 YXRlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2OwotCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gc3RhdGUtPmJhc2UuY3J0YzsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0YzsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKIAlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5iYXNlLmZiOwogCXN0cnVjdCBkcm1fcmVjdCAq ZGVzdCA9ICZzdGF0ZS0+ZHN0OwogCXN0cnVjdCBkcm1fcmVjdCAqc3JjID0gJnN0YXRlLT5zcmM7 CkBAIC0xMjkyNiw5MCArMTI5NDYsNDYgQEAgaW50ZWxfY2hlY2tfcHJpbWFyeV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlib29sIGNhbl9wb3NpdGlvbiA9IGZhbHNlOwogCWludCBt YXhfc2NhbGUgPSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7CiAJaW50IG1pbl9zY2FsZSA9 IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKLQlpbnQgcmV0OwogCi0JY3J0YyA9IGNydGMg PyBjcnRjIDogcGxhbmUtPmNydGM7CiAJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7 Ci0JY3J0Y19zdGF0ZSA9IHN0YXRlLT5iYXNlLnN0YXRlID8KLQkJaW50ZWxfYXRvbWljX2dldF9j cnRjX3N0YXRlKHN0YXRlLT5iYXNlLnN0YXRlLCBpbnRlbF9jcnRjKSA6IE5VTEw7CiAKIAlpZiAo SU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSkgeworCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSA9CisJCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPmJhc2Uu c3RhdGUsIGludGVsX2NydGMpOworCiAJCW1pbl9zY2FsZSA9IDE7CiAJCW1heF9zY2FsZSA9IHNr bF9tYXhfc2NhbGUoaW50ZWxfY3J0YywgY3J0Y19zdGF0ZSk7CiAJCWNhbl9wb3NpdGlvbiA9IHRy dWU7CiAJfQogCi0JcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIGNy dGMsIGZiLAotCQkJCQkgICAgc3JjLCBkZXN0LCBjbGlwLAotCQkJCQkgICAgbWluX3NjYWxlLAot CQkJCQkgICAgbWF4X3NjYWxlLAotCQkJCQkgICAgY2FuX3Bvc2l0aW9uLCB0cnVlLAotCQkJCQkg ICAgJnN0YXRlLT52aXNpYmxlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKGlu dGVsX2NydGMtPmFjdGl2ZSkgewotCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9zdGF0 ZSA9Ci0JCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwotCi0JCWludGVsX2Ny dGMtPmF0b21pYy53YWl0X2Zvcl9mbGlwcyA9IHRydWU7Ci0KLQkJLyoKLQkJICogRkJDIGRvZXMg bm90IHdvcmsgb24gc29tZSBwbGF0Zm9ybXMgZm9yIHJvdGF0ZWQKLQkJICogcGxhbmVzLCBzbyBk aXNhYmxlIGl0IHdoZW4gcm90YXRpb24gaXMgbm90IDAgYW5kCi0JCSAqIHVwZGF0ZSBpdCB3aGVu IHJvdGF0aW9uIGlzIHNldCBiYWNrIHRvIDAuCi0JCSAqCi0JCSAqIEZJWE1FOiBUaGlzIGlzIHJl ZHVuZGFudCB3aXRoIHRoZSBmYmMgdXBkYXRlIGRvbmUgaW4KLQkJICogdGhlIHByaW1hcnkgcGxh bmUgZW5hYmxlIGZ1bmN0aW9uIGV4Y2VwdCB0aGF0IHRoYXQKLQkJICogb25lIGlzIGRvbmUgdG9v IGxhdGUuIFdlIGV2ZW50dWFsbHkgbmVlZCB0byB1bmlmeQotCQkgKiB0aGlzLgotCQkgKi8KLQkJ aWYgKHN0YXRlLT52aXNpYmxlICYmCi0JCSAgICBJTlRFTF9JTkZPKGRldiktPmdlbiA8PSA0ICYm ICFJU19HNFgoZGV2KSAmJgotCQkgICAgZGV2X3ByaXYtPmZiYy5jcnRjID09IGludGVsX2NydGMg JiYKLQkJICAgIHN0YXRlLT5iYXNlLnJvdGF0aW9uICE9IEJJVChEUk1fUk9UQVRFXzApKSB7Ci0J CQlpbnRlbF9jcnRjLT5hdG9taWMuZGlzYWJsZV9mYmMgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKHN0 YXRlLT52aXNpYmxlICYmICFvbGRfc3RhdGUtPnZpc2libGUpIHsKLQkJCS8qCi0JCQkgKiBCRFcg c2lnbmFscyBmbGlwIGRvbmUgaW1tZWRpYXRlbHkgaWYgdGhlIHBsYW5lCi0JCQkgKiBpcyBkaXNh YmxlZCwgZXZlbiBpZiB0aGUgcGxhbmUgZW5hYmxlIGlzIGFscmVhZHkKLQkJCSAqIGFybWVkIHRv IG9jY3VyIGF0IHRoZSBuZXh0IHZibGFuayA6KAotCQkJICovCi0JCQlpZiAoSVNfQlJPQURXRUxM KGRldikpCi0JCQkJaW50ZWxfY3J0Yy0+YXRvbWljLndhaXRfdmJsYW5rID0gdHJ1ZTsKLQkJfQot Ci0JCWludGVsX2NydGMtPmF0b21pYy5mYl9iaXRzIHw9Ci0JCQlJTlRFTF9GUk9OVEJVRkZFUl9Q UklNQVJZKGludGVsX2NydGMtPnBpcGUpOwotCi0JCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVf ZmJjID0gdHJ1ZTsKLQotCQlpZiAoaW50ZWxfd21fbmVlZF91cGRhdGUocGxhbmUsICZzdGF0ZS0+ YmFzZSkpCi0JCQlpbnRlbF9jcnRjLT5hdG9taWMudXBkYXRlX3dtID0gdHJ1ZTsKLQl9CisJcmV0 dXJuIGRybV9wbGFuZV9oZWxwZXJfY2hlY2tfdXBkYXRlKHBsYW5lLCBjcnRjLCBmYiwKKwkJCQkJ ICAgICBzcmMsIGRlc3QsIGNsaXAsCisJCQkJCSAgICAgbWluX3NjYWxlLCBtYXhfc2NhbGUsCisJ CQkJCSAgICAgY2FuX3Bvc2l0aW9uLCB0cnVlLAorCQkJCQkgICAgICZzdGF0ZS0+dmlzaWJsZSk7 Cit9CiAKLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSkgewotCQlyZXQgPSBza2xfdXBk YXRlX3NjYWxlcl91c2VycyhpbnRlbF9jcnRjLCBjcnRjX3N0YXRlLAotCQkJdG9faW50ZWxfcGxh bmUocGxhbmUpLCBzdGF0ZSwgMCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KK3N0 YXRpYyB2b2lkCitpbnRlbF9kaXNhYmxlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCisJCQkgICAgc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJICAgIGJvb2wgZm9yY2Up Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBsYW5lLT5kZXY7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCXJldHVybiAwOwor CWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMsIE5VTEwsIDAsIDAp OwogfQogCiBzdGF0aWMgdm9pZAogaW50ZWxfY29tbWl0X3ByaW1hcnlfcGxhbmUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlKQor CQkJICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUpCiB7Ci0Jc3RydWN0IGRy bV9jcnRjICpjcnRjID0gc3RhdGUtPmJhc2UuY3J0YzsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHN0YXRlLT5iYXNlLmZiOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG5ld19zdGF0 ZS0+YmFzZS5jcnRjOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gbmV3X3N0YXRlLT5i YXNlLmZiOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2OwogCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGM7Ci0Jc3RydWN0IGRybV9yZWN0ICpzcmMgPSAmc3RhdGUtPnNy YzsKKwlzdHJ1Y3QgZHJtX3JlY3QgKnNyYyA9ICZuZXdfc3RhdGUtPnNyYzsKIAogCWNydGMgPSBj cnRjID8gY3J0YyA6IHBsYW5lLT5jcnRjOwogCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNy dGMpOwpAQCAtMTMwMTgsMjUgKzEyOTk0LDE3OCBAQCBpbnRlbF9jb21taXRfcHJpbWFyeV9wbGFu ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAljcnRjLT54ID0gc3JjLT54MSA+PiAxNjsKIAlj cnRjLT55ID0gc3JjLT55MSA+PiAxNjsKIAotCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUpIHsKLQkJ aWYgKHN0YXRlLT52aXNpYmxlKQotCQkJLyogRklYTUU6IGtpbGwgdGhpcyBmYXN0Ym9vdCBoYWNr ICovCi0JCQlpbnRlbF91cGRhdGVfcGlwZV9zaXplKGludGVsX2NydGMpOworCWlmICghbmV3X3N0 YXRlLT52aXNpYmxlIHx8CisJICAgIFdBUk5fT04obmV3X3N0YXRlLT52aXNpYmxlICYmICFjcnRj LT5zdGF0ZS0+YWN0aXZlKSkgeworCQlpbnRlbF9kaXNhYmxlX3ByaW1hcnlfcGxhbmUocGxhbmUs IGNydGMsIGZhbHNlKTsKKwl9IGVsc2UgeworCQkvKiBGSVhNRToga2lsbCB0aGlzIGZhc3Rib290 IGhhY2sgKi8KKwkJaW50ZWxfdXBkYXRlX3BpcGVfc2l6ZShpbnRlbF9jcnRjKTsKIAotCQlkZXZf cHJpdi0+ZGlzcGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBwbGFuZS0+ZmIsCi0JCQkJ CQkgICAgICAgY3J0Yy0+eCwgY3J0Yy0+eSk7CisJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9w cmltYXJ5X3BsYW5lKGNydGMsIGZiLAorCQkJCQkJICAgICAgIHNyYy0+eDEgPj4gMTYsCisJCQkJ CQkgICAgICAgc3JjLT55MSA+PiAxNik7CiAJfQogfQogCi1zdGF0aWMgdm9pZAotaW50ZWxfZGlz YWJsZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQkJICAgIHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICBib29sIGZvcmNlKQorLyogVHJhbnNpdGlvbmFsIGNo ZWNraW5nIGhlcmUsIG1vc3RseSBmb3IgcGxhbmUgdXBkYXRlcyAqLworc3RhdGljIGludCBpbnRl bF9hdG9taWNfY2hlY2tfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgc3RydWN0 IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBwbGFuZS0+ZGV2OworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyA9IHRv X2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSk7CisJc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSA9IGNydGNfc3RhdGUtPnN0YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRj LT5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKKwl1bnNpZ25lZCBwbGFuZV9tYXNrOwor CWludCBpZHgsIHJldDsKKwlib29sIG1vZGVfY2hhbmdlZCA9IG5lZWRzX21vZGVzZXQoY3J0Y19z dGF0ZSk7CisJYm9vbCBpc19jcnRjX2VuYWJsZWQgPSBjcnRjX3N0YXRlLT5hY3RpdmU7CisJYm9v bCB3YXNfY3J0Y19lbmFibGVkID0gY3J0Yy0+c3RhdGUtPmFjdGl2ZTsKIAotCWRldl9wcml2LT5k aXNwbGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMsIE5VTEwsIDAsIDApOworCWlmICghY2hl Y2tfZW5jb2Rlcl9jbG9uaW5nKHN0YXRlLCB0b19pbnRlbF9jcnRjKGNydGMpKSkgeworCQlEUk1f REVCVUdfS01TKCJyZWplY3RpbmcgaW52YWxpZCBjbG9uaW5nIGNvbmZpZ3VyYXRpb25cbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1zZXQoJmludGVsX2NydGMtPmF0b21pYywgMCwg c2l6ZW9mKGludGVsX2NydGMtPmF0b21pYykpOworCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVf d20gPSBtb2RlX2NoYW5nZWQ7CisKKwlpZHggPSBjcnRjLT5iYXNlLmlkOworCUk5MTVfU1RBVEVf V0FSTihjcnRjLT5zdGF0ZS0+YWN0aXZlICE9IGludGVsX2NydGMtPmFjdGl2ZSwKKwkJIkNydGMg JWkgbWlzbWF0Y2ggYmV0d2VlbiBzdGF0ZS0+YWN0aXZlKCVpKSBhbmQgY3J0Yy0+YWN0aXZlICgl aSlcbiIsCisJCWlkeCwgY3J0Yy0+c3RhdGUtPmFjdGl2ZSwgaW50ZWxfY3J0Yy0+YWN0aXZlKTsK KworCURSTV9ERUJVR19BVE9NSUMoIkNydGMgJWkgd2FzIGVuYWJsZWQgJWkgbm93IGVuYWJsZWQ6 ICVpXG4iLAorCQkJIGlkeCwgd2FzX2NydGNfZW5hYmxlZCwgaXNfY3J0Y19lbmFibGVkKTsKKwor CXBsYW5lX21hc2sgPSBjcnRjX3N0YXRlLT5wbGFuZV9tYXNrIHwgY3J0Yy0+c3RhdGUtPnBsYW5l X21hc2s7CisJZHJtX2Zvcl9lYWNoX3BsYW5lX21hc2socGxhbmUsIGRldiwgcGxhbmVfbWFzaykg eworCQlpbnQgaSA9IGRybV9wbGFuZV9pbmRleChwbGFuZSk7CisJCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlID0gc3RhdGUtPnBsYW5lX3N0YXRlc1tpXTsKKwkJc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGU7CisJCWJvb2wgdHVybl9vZmYsIHR1cm5f b24sIHZpc2libGUsIHdhc192aXNpYmxlOworCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsK KworCQlpZiAoIXBsYW5lX3N0YXRlKSB7CisJCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBl cl9mdW5jcyAqZnVuY3M7CisJCQlpbnQgcmV0OworCisJCQlpZiAoIW1vZGVfY2hhbmdlZCB8fCAh cGxhbmUtPnN0YXRlLT5mYikKKwkJCQljb250aW51ZTsKKworCQkJcGxhbmVfc3RhdGUgPSBkcm1f YXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZSwgcGxhbmUpOworCQkJaWYgKElTX0VSUihwbGFu ZV9zdGF0ZSkpCisJCQkJcmV0dXJuIFBUUl9FUlIocGxhbmVfc3RhdGUpOworCisJCQlmdW5jcyA9 IHBsYW5lLT5oZWxwZXJfcHJpdmF0ZTsKKwkJCXJldCA9IGZ1bmNzLT5hdG9taWNfY2hlY2socGxh bmUsIHBsYW5lX3N0YXRlKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlv bGRfcGxhbmVfc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCisJ CXdhc192aXNpYmxlID0gd2FzX2NydGNfZW5hYmxlZCAmJiAob2xkX3BsYW5lX3N0YXRlLT52aXNp YmxlIHx8CisJCQkgICAgICBvbGRfcGxhbmVfc3RhdGUtPmh3X2VuYWJsZWQpOworCQl2aXNpYmxl ID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmVfc3RhdGUpLT52aXNpYmxlICYmCisJCQkgICAg ICBpc19jcnRjX2VuYWJsZWQ7CisKKwkJaWYgKHBsYW5lLT5zdGF0ZS0+Y3J0YyAhPSBjcnRjKQor CQkJd2FzX3Zpc2libGUgPSBmYWxzZTsKKwkJaWYgKHBsYW5lX3N0YXRlLT5jcnRjICE9IGNydGMp CisJCQl2aXNpYmxlID0gZmFsc2U7CisKKwkJaWYgKCF3YXNfdmlzaWJsZSAmJiAhdmlzaWJsZSkK KwkJCWNvbnRpbnVlOworCisJCXR1cm5fb2ZmID0gd2FzX3Zpc2libGUgJiYgKCF2aXNpYmxlIHx8 IG1vZGVfY2hhbmdlZCk7CisJCXR1cm5fb24gPSB2aXNpYmxlICYmICghd2FzX3Zpc2libGUgfHwg bW9kZV9jaGFuZ2VkKTsKKwkJZmIgPSBwbGFuZV9zdGF0ZS0+ZmI7CisKKwkJRFJNX0RFQlVHX0FU T01JQygiQ3J0YyAlaSBoYXMgcGxhbmUgJWkgd2l0aCBmYiAlaVxuIiwgaWR4LAorCQkJcGxhbmUt PmJhc2UuaWQsIGZiID8gZmItPmJhc2UuaWQgOiAtMSk7CisJCURSTV9ERUJVR19BVE9NSUMoIlx0 dmlzaWJsZSAlaSAtPiAlaSwgb2ZmICVpLCBvbiAlaSwgbXMgJWlcbiIsCisJCQl3YXNfdmlzaWJs ZSwgdmlzaWJsZSwgdHVybl9vZmYsIHR1cm5fb24sIG1vZGVfY2hhbmdlZCk7CisKKwkJLyogcGxh bmUgYmVpbmcgdHVybmVkIG9mZiBhcyBwYXJ0IG9mIG1vZGVzZXQgb3IgY2hhbmdlcz8gKi8KKwkJ aWYgKGludGVsX3dtX25lZWRfdXBkYXRlKHBsYW5lLCBwbGFuZV9zdGF0ZSkpCisJCQlpbnRlbF9j cnRjLT5hdG9taWMudXBkYXRlX3dtID0gdHJ1ZTsKKworCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5n ZW4gPj0gOSAmJgorCQkgICAgcGxhbmUtPmJhc2UudHlwZSAhPSBEUk1fUExBTkVfVFlQRV9DVVJT T1IpIHsKKwkJCXJldCA9IHNrbF91cGRhdGVfc2NhbGVyX3VzZXJzKGludGVsX2NydGMsIHBpcGVf Y29uZmlnLAorCQkJCQl0b19pbnRlbF9wbGFuZShwbGFuZSksCisJCQkJCXRvX2ludGVsX3BsYW5l X3N0YXRlKHBsYW5lX3N0YXRlKSwgMCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJ CX0KKworCQkvKgorCQkgKiAncHJlcGFyZScgaXMgbmV2ZXIgY2FsbGVkIHdoZW4gcGxhbmUgaXMg YmVpbmcgZGlzYWJsZWQsIHNvCisJCSAqIHdlIG5lZWQgdG8gaGFuZGxlIGZyb250YnVmZmVyIHRy YWNraW5nIGFzIGEgc3BlY2lhbCBjYXNlCisJCSAqLworCQlpZiAob2xkX3BsYW5lX3N0YXRlLT5i YXNlLmZiICYmICF2aXNpYmxlKQorCQkJaW50ZWxfY3J0Yy0+YXRvbWljLmRpc2FibGVkX3BsYW5l cyB8PSAxIDw8IGk7CisKKwkJc3dpdGNoIChwbGFuZS0+YmFzZS50eXBlKSB7CisJCWNhc2UgRFJN X1BMQU5FX1RZUEVfUFJJTUFSWToKKwkJCWlmICh2aXNpYmxlKQorCQkJCWludGVsX2NydGMtPmF0 b21pYy5mYl9iaXRzIHw9CisJCQkJICAgIElOVEVMX0ZST05UQlVGRkVSX1BSSU1BUlkoaW50ZWxf Y3J0Yy0+cGlwZSk7CisKKwkJCWludGVsX2NydGMtPmF0b21pYy53YWl0X2Zvcl9mbGlwcyA9IHRy dWU7CisJCQlpbnRlbF9jcnRjLT5hdG9taWMucHJlX2Rpc2FibGVfcHJpbWFyeSA9IHR1cm5fb2Zm OworCQkJaW50ZWxfY3J0Yy0+YXRvbWljLnBvc3RfZW5hYmxlX3ByaW1hcnkgPSB0dXJuX29uOwor CisJCQlpZiAodHVybl9vZmYpCisJCQkJaW50ZWxfY3J0Yy0+YXRvbWljLmRpc2FibGVfZmJjID0g dHJ1ZTsKKworCQkJLyoKKwkJCSAqIEZCQyBkb2VzIG5vdCB3b3JrIG9uIHNvbWUgcGxhdGZvcm1z IGZvciByb3RhdGVkCisJCQkgKiBwbGFuZXMsIHNvIGRpc2FibGUgaXQgd2hlbiByb3RhdGlvbiBp cyBub3QgMCBhbmQKKwkJCSAqIHVwZGF0ZSBpdCB3aGVuIHJvdGF0aW9uIGlzIHNldCBiYWNrIHRv IDAuCisJCQkgKgorCQkJICogRklYTUU6IFRoaXMgaXMgcmVkdW5kYW50IHdpdGggdGhlIGZiYyB1 cGRhdGUgZG9uZSBpbgorCQkJICogdGhlIHByaW1hcnkgcGxhbmUgZW5hYmxlIGZ1bmN0aW9uIGV4 Y2VwdCB0aGF0IHRoYXQKKwkJCSAqIG9uZSBpcyBkb25lIHRvbyBsYXRlLiBXZSBldmVudHVhbGx5 IG5lZWQgdG8gdW5pZnkKKwkJCSAqIHRoaXMuCisJCQkgKi8KKworCQkJaWYgKHZpc2libGUgJiYK KwkJCSAgICBJTlRFTF9JTkZPKGRldiktPmdlbiA8PSA0ICYmICFJU19HNFgoZGV2KSAmJgorCQkJ ICAgIGRldl9wcml2LT5mYmMuY3J0YyA9PSBpbnRlbF9jcnRjICYmCisJCQkgICAgcGxhbmVfc3Rh dGUtPnJvdGF0aW9uICE9IEJJVChEUk1fUk9UQVRFXzApKQorCQkJCWludGVsX2NydGMtPmF0b21p Yy5kaXNhYmxlX2ZiYyA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBCRFcgc2lnbmFscyBmbGlwIGRv bmUgaW1tZWRpYXRlbHkgaWYgdGhlIHBsYW5lCisJCQkgKiBpcyBkaXNhYmxlZCwgZXZlbiBpZiB0 aGUgcGxhbmUgZW5hYmxlIGlzIGFscmVhZHkKKwkJCSAqIGFybWVkIHRvIG9jY3VyIGF0IHRoZSBu ZXh0IHZibGFuayA6KAorCQkJICovCisJCQlpZiAodHVybl9vbiAmJiBJU19CUk9BRFdFTEwoZGV2 KSkKKwkJCQlpbnRlbF9jcnRjLT5hdG9taWMud2FpdF92YmxhbmsgPSB0cnVlOworCisJCQlpbnRl bF9jcnRjLT5hdG9taWMudXBkYXRlX2ZiYyA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBEUk1f UExBTkVfVFlQRV9DVVJTT1I6CisJCQlpZiAodmlzaWJsZSkKKwkJCQlpbnRlbF9jcnRjLT5hdG9t aWMuZmJfYml0cyB8PQorCQkJCSAgICBJTlRFTF9GUk9OVEJVRkZFUl9DVVJTT1IoaW50ZWxfY3J0 Yy0+cGlwZSk7CisJCQlicmVhazsKKwkJY2FzZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgorCQkJ aWYgKHZpc2libGUpCisJCQkJaW50ZWxfY3J0Yy0+YXRvbWljLmZiX2JpdHMgfD0KKwkJCQkgICAg SU5URUxfRlJPTlRCVUZGRVJfU1BSSVRFKGludGVsX2NydGMtPnBpcGUpOworCisJCQlpZiAodHVy bl9vZmYpIHsKKwkJCQlpbnRlbF9jcnRjLT5hdG9taWMud2FpdF92YmxhbmsgPSB0cnVlOworCQkJ CWludGVsX2NydGMtPmF0b21pYy51cGRhdGVfc3ByaXRlX3dhdGVybWFya3MgfD0KKwkJCQkJMSA8 PCBpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2 b2lkIGludGVsX2JlZ2luX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKQEAgLTEz MDg3LDEwICsxMzIxNiwxMyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9iZWdpbl9jcnRjX2NvbW1pdChz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwog CiAJLyogUGVyZm9ybSB2YmxhbmsgZXZhc2lvbiBhcm91bmQgY29tbWl0IG9wZXJhdGlvbiAqLwot CWlmIChpbnRlbF9jcnRjLT5hY3RpdmUpCisJaWYgKGludGVsX2NydGMtPmFjdGl2ZSAmJiAhbmVl ZHNfbW9kZXNldChjcnRjLT5zdGF0ZSkgJiYKKwkgICAgIWRldl9wcml2LT5wb3dlcl9kb21haW5z LmluaXRfcG93ZXJfb24pCiAJCWludGVsX2NydGMtPmF0b21pYy5ldmFkZSA9CiAJCQlpbnRlbF9w aXBlX3VwZGF0ZV9zdGFydChpbnRlbF9jcnRjLAogCQkJCQkJJmludGVsX2NydGMtPmF0b21pYy5z dGFydF92YmxfY291bnQpOworCWVsc2UKKwkJaW50ZWxfY3J0Yy0+YXRvbWljLmV2YWRlID0gZmFs c2U7CiB9CiAKIHN0YXRpYyB2b2lkIGludGVsX2ZpbmlzaF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCkBAIC0xMzA5OSw2ICsxMzIzMSw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2Zp bmlzaF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0 YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJc3RydWN0IGRybV9wbGFuZSAq cDsKKwl1bnNpZ25lZCBwbGFuZV9tYXNrOwogCiAJaWYgKGludGVsX2NydGMtPmF0b21pYy5ldmFk ZSkKIAkJaW50ZWxfcGlwZV91cGRhdGVfZW5kKGludGVsX2NydGMsCkBAIC0xMzEyMCwxMiArMTMy NTMsMTMgQEAgc3RhdGljIHZvaWQgaW50ZWxfZmluaXNoX2NydGNfY29tbWl0KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKIAlpZiAoaW50ZWxfY3J0Yy0+YXRvbWljLnBvc3RfZW5hYmxlX3ByaW1hcnkp CiAJCWludGVsX3Bvc3RfZW5hYmxlX3ByaW1hcnkoY3J0Yyk7CiAKLQlkcm1fZm9yX2VhY2hfbGVn YWN5X3BsYW5lKHAsICZkZXYtPm1vZGVfY29uZmlnLnBsYW5lX2xpc3QpCi0JCWlmIChpbnRlbF9j cnRjLT5hdG9taWMudXBkYXRlX3Nwcml0ZV93YXRlcm1hcmtzICYgZHJtX3BsYW5lX2luZGV4KHAp KQotCQkJaW50ZWxfdXBkYXRlX3Nwcml0ZV93YXRlcm1hcmtzKHAsIGNydGMsIDAsIDAsIDAsCi0J CQkJCQkgICAgICAgZmFsc2UsIGZhbHNlKTsKKwlwbGFuZV9tYXNrID0gaW50ZWxfY3J0Yy0+YXRv bWljLnVwZGF0ZV9zcHJpdGVfd2F0ZXJtYXJrczsKKwlkcm1fZm9yX2VhY2hfcGxhbmVfbWFzayhw LCBkZXYsIHBsYW5lX21hc2spCisJCWludGVsX3VwZGF0ZV9zcHJpdGVfd2F0ZXJtYXJrcyhwLCBj cnRjLCAwLCAwLCAwLCBmYWxzZSwgZmFsc2UpOwogCiAJbWVtc2V0KCZpbnRlbF9jcnRjLT5hdG9t aWMsIDAsIHNpemVvZihpbnRlbF9jcnRjLT5hdG9taWMpKTsKKwljcnRjLT5zdGF0ZS0+bW9kZV9j aGFuZ2VkID0gZmFsc2U7CisJY3J0Yy0+c3RhdGUtPmFjdGl2ZV9jaGFuZ2VkID0gZmFsc2U7CiB9 CiAKIC8qKgpAQCAtMTMyMzgsMTMgKzEzMzcyLDkgQEAgaW50ZWxfY2hlY2tfY3Vyc29yX3BsYW5l KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXN0cnVjdCBkcm1fcmVjdCAqc3JjID0gJnN0YXRl LT5zcmM7CiAJY29uc3Qgc3RydWN0IGRybV9yZWN0ICpjbGlwID0gJnN0YXRlLT5jbGlwOwogCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwotCXN0cnVj dCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwogCXVuc2lnbmVkIHN0cmlkZTsKIAlpbnQgcmV0Owog Ci0JY3J0YyA9IGNydGMgPyBjcnRjIDogcGxhbmUtPmNydGM7Ci0JaW50ZWxfY3J0YyA9IHRvX2lu dGVsX2NydGMoY3J0Yyk7Ci0KIAlyZXQgPSBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShw bGFuZSwgY3J0YywgZmIsCiAJCQkJCSAgICBzcmMsIGRlc3QsIGNsaXAsCiAJCQkJCSAgICBEUk1f UExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCkBAIC0xMzI1Niw3ICsxMzM4Niw3IEBAIGludGVsX2No ZWNrX2N1cnNvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAogCS8qIGlmIHdlIHdh bnQgdG8gdHVybiBvZmYgdGhlIGN1cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAqLwogCWlm ICghb2JqKQotCQlnb3RvIGZpbmlzaDsKKwkJcmV0dXJuIDA7CiAKIAkvKiBDaGVjayBmb3Igd2hp Y2ggY3Vyc29yIHR5cGVzIHdlIHN1cHBvcnQgKi8KIAlpZiAoIWN1cnNvcl9zaXplX29rKGRldiwg c3RhdGUtPmJhc2UuY3J0Y193LCBzdGF0ZS0+YmFzZS5jcnRjX2gpKSB7CkBAIC0xMzI3MywxOSAr MTM0MDMsMTAgQEAgaW50ZWxfY2hlY2tfY3Vyc29yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAogCiAJaWYgKGZiLT5tb2RpZmllclswXSAhPSBEUk1fRk9STUFUX01PRF9OT05FKSB7CiAJ CURSTV9ERUJVR19LTVMoImN1cnNvciBjYW5ub3QgYmUgdGlsZWRcbiIpOwotCQlyZXQgPSAtRUlO VkFMOwotCX0KLQotZmluaXNoOgotCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUpIHsKLQkJaWYgKHBs YW5lLT5zdGF0ZS0+Y3J0Y193ICE9IHN0YXRlLT5iYXNlLmNydGNfdykKLQkJCWludGVsX2NydGMt PmF0b21pYy51cGRhdGVfd20gPSB0cnVlOwotCi0JCWludGVsX2NydGMtPmF0b21pYy5mYl9iaXRz IHw9Ci0JCQlJTlRFTF9GUk9OVEJVRkZFUl9DVVJTT1IoaW50ZWxfY3J0Yy0+cGlwZSk7CisJCXJl dHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRp YyB2b2lkCkBAIC0xMzMwNiwyMCArMTM0MjcsMjYgQEAgaW50ZWxfZGlzYWJsZV9jdXJzb3JfcGxh bmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIHN0YXRpYyB2b2lkCiBpbnRlbF9jb21taXRf Y3Vyc29yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQkJICBzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnN0YXRlKQorCQkJICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm5ld19z dGF0ZSkKIHsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOworCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG5ld19zdGF0ZS0+YmFzZS5jcnRjOwogCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2OwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRj OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooc3RhdGUt PmJhc2UuZmIpOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9v YmoobmV3X3N0YXRlLT5iYXNlLmZiKTsKIAl1aW50MzJfdCBhZGRyOwogCiAJY3J0YyA9IGNydGMg PyBjcnRjIDogcGxhbmUtPmNydGM7CiAJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7 CiAKLQlwbGFuZS0+ZmIgPSBzdGF0ZS0+YmFzZS5mYjsKLQljcnRjLT5jdXJzb3JfeCA9IHN0YXRl LT5iYXNlLmNydGNfeDsKLQljcnRjLT5jdXJzb3JfeSA9IHN0YXRlLT5iYXNlLmNydGNfeTsKKwlw bGFuZS0+ZmIgPSBuZXdfc3RhdGUtPmJhc2UuZmI7CisJY3J0Yy0+Y3Vyc29yX3ggPSBuZXdfc3Rh dGUtPmJhc2UuY3J0Y194OworCWNydGMtPmN1cnNvcl95ID0gbmV3X3N0YXRlLT5iYXNlLmNydGNf eTsKKworCWlmICghbmV3X3N0YXRlLT52aXNpYmxlIHx8CisJICAgIFdBUk5fT04obmV3X3N0YXRl LT52aXNpYmxlICYmICFjcnRjLT5zdGF0ZS0+YWN0aXZlKSkgeworCQlpbnRlbF9kaXNhYmxlX2N1 cnNvcl9wbGFuZShwbGFuZSwgY3J0YywgZmFsc2UpOworCQlyZXR1cm47CisJfQogCiAJaWYgKGlu dGVsX2NydGMtPmN1cnNvcl9ibyA9PSBvYmopCiAJCWdvdG8gdXBkYXRlOwpAQCAtMTMzMzMsMTAg KzEzNDYwLDkgQEAgaW50ZWxfY29tbWl0X2N1cnNvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKIAogCWludGVsX2NydGMtPmN1cnNvcl9hZGRyID0gYWRkcjsKIAlpbnRlbF9jcnRjLT5j dXJzb3JfYm8gPSBvYmo7Ci11cGRhdGU6CiAKLQlpZiAoaW50ZWxfY3J0Yy0+YWN0aXZlKQotCQlp bnRlbF9jcnRjX3VwZGF0ZV9jdXJzb3IoY3J0Yywgc3RhdGUtPnZpc2libGUpOwordXBkYXRlOgor CWludGVsX2NydGNfdXBkYXRlX2N1cnNvcihjcnRjLCBuZXdfc3RhdGUtPnZpc2libGUpOwogfQog CiBzdGF0aWMgc3RydWN0IGRybV9wbGFuZSAqaW50ZWxfY3Vyc29yX3BsYW5lX2NyZWF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LApAQCAtMTQ2OTUsNyArMTQ4MjEsMTQgQEAgc3RhdGljIHZvaWQg aW50ZWxfbW9kZXNldF9yZWFkb3V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ CWNydGMtPmJhc2UuZW5hYmxlZCA9IGNydGMtPmFjdGl2ZTsKIAogCQlwbGFuZV9zdGF0ZSA9IHRv X2ludGVsX3BsYW5lX3N0YXRlKHByaW1hcnktPnN0YXRlKTsKLQkJcGxhbmVfc3RhdGUtPnZpc2li bGUgPSBwcmltYXJ5X2dldF9od19zdGF0ZShjcnRjKTsKKwkJcGxhbmVfc3RhdGUtPmh3X2VuYWJs ZWQgPSBwbGFuZV9zdGF0ZS0+dmlzaWJsZSA9CisJCQlwcmltYXJ5X2dldF9od19zdGF0ZShjcnRj KTsKKwkJaWYgKHBsYW5lX3N0YXRlLT52aXNpYmxlKQorCQkJY3J0Yy0+YmFzZS5zdGF0ZS0+cGxh bmVfbWFzayB8PQorCQkJCTEgPDwgZHJtX3BsYW5lX2luZGV4KHByaW1hcnkpOworCQllbHNlCisJ CQljcnRjLT5iYXNlLnN0YXRlLT5wbGFuZV9tYXNrICY9CisJCQkJfigxIDw8IGRybV9wbGFuZV9p bmRleChwcmltYXJ5KSk7CiAKIAkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIGh3IHN0YXRlIHJl YWRvdXQ6ICVzXG4iLAogCQkJICAgICAgY3J0Yy0+YmFzZS5iYXNlLmlkLApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaAppbmRleCAxZTg5MjA5OGVlYTIuLjllZjg5YzkxYWE1YyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmgKQEAgLTIzNSw3ICsyMzUsNyBAQCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgewogCXN0cnVjdCBkcm1fcmVjdCBzcmM7CiAJc3RydWN0IGRybV9yZWN0IGRzdDsKIAlzdHJ1 Y3QgZHJtX3JlY3QgY2xpcDsKLQlib29sIHZpc2libGU7CisJYm9vbCB2aXNpYmxlLCBod19lbmFi bGVkOwogCiAJLyoKIAkgKiBzY2FsZXJfaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMK aW5kZXggNDk3ZTc5NTNhZDRkLi4yODI5MWFiMDk5M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3Nwcml0ZS5jCkBAIC03NTksNyArNzU5LDYgQEAgaW50ZWxfY2hlY2tfc3ByaXRlX3BsYW5lKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFu ZS0+ZGV2OwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhz dGF0ZS0+YmFzZS5jcnRjKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsK IAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUp OwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmJhc2UuZmI7CiAJaW50IGNy dGNfeCwgY3J0Y195OwpAQCAtNzcxLDE2ICs3NzAsOSBAQCBpbnRlbF9jaGVja19zcHJpdGVfcGxh bmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJaW50IGhzY2FsZSwgdnNjYWxlOwogCWludCBt YXhfc2NhbGUsIG1pbl9zY2FsZTsKIAlpbnQgcGl4ZWxfc2l6ZTsKLQlpbnQgcmV0OwotCi0JaW50 ZWxfY3J0YyA9IGludGVsX2NydGMgPyBpbnRlbF9jcnRjIDogdG9faW50ZWxfY3J0YyhwbGFuZS0+ Y3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9IHN0YXRlLT5iYXNlLnN0YXRlID8KLQkJaW50ZWxfYXRvbWlj X2dldF9jcnRjX3N0YXRlKHN0YXRlLT5iYXNlLnN0YXRlLCBpbnRlbF9jcnRjKSA6IE5VTEw7CiAK LQlpZiAoIWZiKSB7Ci0JCXN0YXRlLT52aXNpYmxlID0gZmFsc2U7Ci0JCWdvdG8gZmluaXNoOwot CX0KKwlpZiAoIWZiKQorCQlyZXR1cm4gMDsKIAogCS8qIERvbid0IG1vZGlmeSBhbm90aGVyIHBp cGUncyBwbGFuZSAqLwogCWlmIChpbnRlbF9wbGFuZS0+cGlwZSAhPSBpbnRlbF9jcnRjLT5waXBl KSB7CkBAIC04MDMsNiArNzk1LDkgQEAgaW50ZWxfY2hlY2tfc3ByaXRlX3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAogCW1pbl9zY2FsZSA9IGludGVsX3BsYW5lLT5jYW5fc2NhbGUgPyAx IDogKDEgPDwgMTYpOwogCiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkpIHsKKwkJc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQorCQkJaW50ZWxfYXRvbWljX2dldF9j cnRjX3N0YXRlKHN0YXRlLT5iYXNlLnN0YXRlLCBpbnRlbF9jcnRjKTsKKwogCQltaW5fc2NhbGUg PSAxOwogCQltYXhfc2NhbGUgPSBza2xfbWF4X3NjYWxlKGludGVsX2NydGMsIGNydGNfc3RhdGUp OwogCX0KQEAgLTgxNiw3ICs4MTEsNyBAQCBpbnRlbF9jaGVja19zcHJpdGVfcGxhbmUoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCiAJdnNjYWxlID0gZHJtX3JlY3RfY2FsY192c2NhbGVfcmVsYXhl ZChzcmMsIGRzdCwgbWluX3NjYWxlLCBtYXhfc2NhbGUpOwogCUJVR19PTih2c2NhbGUgPCAwKTsK IAotCXN0YXRlLT52aXNpYmxlID0gIGRybV9yZWN0X2NsaXBfc2NhbGVkKHNyYywgZHN0LCBjbGlw LCBoc2NhbGUsIHZzY2FsZSk7CisJc3RhdGUtPnZpc2libGUgPSBkcm1fcmVjdF9jbGlwX3NjYWxl ZChzcmMsIGRzdCwgY2xpcCwgaHNjYWxlLCB2c2NhbGUpOwogCiAJY3J0Y194ID0gZHN0LT54MTsK IAljcnRjX3kgPSBkc3QtPnkxOwpAQCAtOTIxLDM2ICs5MTYsNiBAQCBpbnRlbF9jaGVja19zcHJp dGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJZHN0LT55MSA9IGNydGNfeTsKIAlk c3QtPnkyID0gY3J0Y195ICsgY3J0Y19oOwogCi1maW5pc2g6Ci0JLyoKLQkgKiBJZiB0aGUgc3By aXRlIGlzIGNvbXBsZXRlbHkgY292ZXJpbmcgdGhlIHByaW1hcnkgcGxhbmUsCi0JICogd2UgY2Fu IGRpc2FibGUgdGhlIHByaW1hcnkgYW5kIHNhdmUgcG93ZXIuCi0JICovCi0JaWYgKGludGVsX2Ny dGMtPmFjdGl2ZSkgewotCQlpbnRlbF9jcnRjLT5hdG9taWMuZmJfYml0cyB8PQotCQkJSU5URUxf RlJPTlRCVUZGRVJfU1BSSVRFKGludGVsX2NydGMtPnBpcGUpOwotCi0JCWlmIChpbnRlbF93bV9u ZWVkX3VwZGF0ZShwbGFuZSwgJnN0YXRlLT5iYXNlKSkKLQkJCWludGVsX2NydGMtPmF0b21pYy51 cGRhdGVfd20gPSB0cnVlOwotCi0JCWlmICghc3RhdGUtPnZpc2libGUpIHsKLQkJCS8qCi0JCQkg KiBBdm9pZCB1bmRlcnJ1bnMgd2hlbiBkaXNhYmxpbmcgdGhlIHNwcml0ZS4KLQkJCSAqIEZJWE1F IHJlbW92ZSBvbmNlIHdhdGVybWFyayB1cGRhdGVzIGFyZSBkb25lIHByb3Blcmx5LgotCQkJICov Ci0JCQlpbnRlbF9jcnRjLT5hdG9taWMud2FpdF92YmxhbmsgPSB0cnVlOwotCQkJaW50ZWxfY3J0 Yy0+YXRvbWljLnVwZGF0ZV9zcHJpdGVfd2F0ZXJtYXJrcyB8PQotCQkJCSgxIDw8IGRybV9wbGFu ZV9pbmRleChwbGFuZSkpOwotCQl9Ci0JfQotCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49 IDkpIHsKLQkJcmV0ID0gc2tsX3VwZGF0ZV9zY2FsZXJfdXNlcnMoaW50ZWxfY3J0YywgY3J0Y19z dGF0ZSwgaW50ZWxfcGxhbmUsCi0JCQlzdGF0ZSwgMCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4g cmV0OwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC05NTksNyArOTI0LDYgQEAgaW50ZWxfY29t bWl0X3Nwcml0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCSAgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0 ZS0+YmFzZS5jcnRjOwotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwogCXN0cnVjdCBp bnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7CiAJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+YmFzZS5mYjsKIAlpbnQgY3J0Y194LCBjcnRj X3k7CkBAIC05NjcsMjYgKzkzMSwyMiBAQCBpbnRlbF9jb21taXRfc3ByaXRlX3BsYW5lKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAogCXVpbnQzMl90IHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19o OwogCiAJY3J0YyA9IGNydGMgPyBjcnRjIDogcGxhbmUtPmNydGM7Ci0JaW50ZWxfY3J0YyA9IHRv X2ludGVsX2NydGMoY3J0Yyk7Ci0KIAlwbGFuZS0+ZmIgPSBmYjsKIAotCWlmIChpbnRlbF9jcnRj LT5hY3RpdmUpIHsKLQkJaWYgKHN0YXRlLT52aXNpYmxlKSB7Ci0JCQljcnRjX3ggPSBzdGF0ZS0+ ZHN0LngxOwotCQkJY3J0Y195ID0gc3RhdGUtPmRzdC55MTsKLQkJCWNydGNfdyA9IGRybV9yZWN0 X3dpZHRoKCZzdGF0ZS0+ZHN0KTsKLQkJCWNydGNfaCA9IGRybV9yZWN0X2hlaWdodCgmc3RhdGUt PmRzdCk7Ci0JCQlzcmNfeCA9IHN0YXRlLT5zcmMueDEgPj4gMTY7Ci0JCQlzcmNfeSA9IHN0YXRl LT5zcmMueTEgPj4gMTY7Ci0JCQlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZzdGF0ZS0+c3JjKSA+ PiAxNjsKLQkJCXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZzdGF0ZS0+c3JjKSA+PiAxNjsKLQkJ CWludGVsX3BsYW5lLT51cGRhdGVfcGxhbmUocGxhbmUsIGNydGMsIGZiLAotCQkJCQkJICBjcnRj X3gsIGNydGNfeSwgY3J0Y193LCBjcnRjX2gsCi0JCQkJCQkgIHNyY194LCBzcmNfeSwgc3JjX3cs IHNyY19oKTsKLQkJfSBlbHNlIHsKLQkJCWludGVsX3BsYW5lLT5kaXNhYmxlX3BsYW5lKHBsYW5l LCBjcnRjLCBmYWxzZSk7Ci0JCX0KKwlpZiAoc3RhdGUtPnZpc2libGUgJiYgY3J0Yy0+c3RhdGUt PmFjdGl2ZSkgeworCQljcnRjX3ggPSBzdGF0ZS0+ZHN0LngxOworCQljcnRjX3kgPSBzdGF0ZS0+ ZHN0LnkxOworCQljcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmc3RhdGUtPmRzdCk7CisJCWNydGNf aCA9IGRybV9yZWN0X2hlaWdodCgmc3RhdGUtPmRzdCk7CisJCXNyY194ID0gc3RhdGUtPnNyYy54 MSA+PiAxNjsKKwkJc3JjX3kgPSBzdGF0ZS0+c3JjLnkxID4+IDE2OworCQlzcmNfdyA9IGRybV9y ZWN0X3dpZHRoKCZzdGF0ZS0+c3JjKSA+PiAxNjsKKwkJc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQo JnN0YXRlLT5zcmMpID4+IDE2OworCQlpbnRlbF9wbGFuZS0+dXBkYXRlX3BsYW5lKHBsYW5lLCBj cnRjLCBmYiwKKwkJCQkJICBjcnRjX3gsIGNydGNfeSwgY3J0Y193LCBjcnRjX2gsCisJCQkJCSAg c3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2gpOworCX0gZWxzZSB7CisJCWludGVsX3BsYW5lLT5k aXNhYmxlX3BsYW5lKHBsYW5lLCBjcnRjLCBmYWxzZSk7CiAJfQogfQogCi0tIAoyLjEuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK