From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH 16/25] drm/i915: Rewrite fbc Date: Wed, 18 Jun 2014 20:58:49 +0300 Message-ID: <1403114338-30513-17-git-send-email-ville.syrjala@linux.intel.com> References: <1403114338-30513-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 92CB96E759 for ; Wed, 18 Jun 2014 11:00:21 -0700 (PDT) In-Reply-To: <1403114338-30513-1-git-send-email-ville.syrjala@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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClJl ZGVzaWduIHRoZSBmYmMgY29kZSB0byBkZWFsIHdpdGggbXVsdGlwbGUgcGlwZXMgYmV0dGVyLCBm aXggdGhlCmxvY2tpbmcgcHJvYmxlbXMsIGFuZCBpbiBnZW5lcmFsIHRyeSB0byB1dGlsaXplIHRo ZSBoYXJkd2FyZSBmcm9udApidWZmZXIgdHJhY2tpbmcgZmVhdHVyZXMgdG8gdGhlaXIgZnVsbCBl eHRlbnQuCgpGb3IgZWFjaCBjcnRjIHdlIHdpbGwgY29tcHV0ZSBhIHBlbmRpbmcgZmJjIHNjb3Jl IGFzIChwaXhlbF9yYXRlICogY3BwKS4KQXQgYXBwcm9wcmlhdGUgdGltZXMgKGFmdGVyIGEgZmxp cCwgb24gdGhlIG5leHQgdmJsYW5rIGFmdGVyIHNldF9iYXNlLApldGMuKSB0aGUgcGVuZGluZyBz Y29yZSB3aWxsIGdldCBwcm9tb3RlZCB0byBhbmQgYWN0aXZlIHNjb3JlLiBCYXNlZCBvbgp0aGUg YWN0aXZlIHNjb3JlIG9mIGFsbCBjcnRjcyB3ZSB0aGVuIHBpY2sgd2hpY2ggY3J0YyBpcyBiZXN0 IGNhbmRpZGF0ZQpmb3IgZmJjLgoKTm90ZSB0aGF0IHRoaXMgbm93IGFsbG93cyBGQkMgdG8gYmUg ZW5hYmxlZCB3aGVuIG11bHRpcGxlIHBpcGVzIGFyZQphY3RpdmUuIFRoYXQgc2VlbXMgaGF2ZSBi ZWVuIGFsd2F5cyBpbnRlbmRlZCBhcyBzdXBwb3J0ZWQgb24gRkJDMiwgYnV0CnRoZSBGQkMxIGRv Y3MgYXJlIGEgYml0IG1vcmUgY29uc2VydmF0aXZlIGFib3V0IHRoaXMuIEJ1dCB0aGF0IG1pZ2h0 CmJlIGp1c3QgYW4gb3ZlcnNpZ2h0IGluIHRoZSBkb2NzLiBUaGUgY29kZSBub3cgYWxsb3dzIEZC QyB3aXRoIG11bHRpcGxlCmFjdGl2ZSBwaXBlcyBldmVuIG9uIEZCQzEsIGFuZCB0aHVzIGZhciBJ J3ZlIG5vdCBzZWVuIGFueSBpbGwgZWZmZWN0cwpmcm9tIHRoaXMgb24gbXkgODU1LgoKVGhlIGxv Y2tpbmcgaXMgbm93IGhhbmRsZWQgYnkgYSBuZXcgZmJjLm11dGV4IHdoaWNoIHByb3RlY3RzIG1v c3Qgb2YKZGV2X3ByaXYtPmZiYyBhbmQgdGhlIGhhcmR3YXJlIHN0YXRlLiBkZXZfcHJpdi0+ZmJj Lm9iaiBpcyB1c2VkIHRvIHRyYWNrCnRoZSBmcm9udCBidWZmZXIgZm9yIHJlbmRlci9ibGl0dGVy IHRyYWNraW5nIHNvIGl0J3MgcHJvdGVjdGVkIGJ5CnN0cnVjdF9tdXRleC4KClNpZ25lZC1vZmYt Ynk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICB8ICAxMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jIHwgMTA1ICsrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmggICAgIHwgIDE4ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAg fCA2NjUgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3Nwcml0ZS5jICB8ICAxNSArLQogNiBmaWxlcyBjaGFuZ2VkLCA1NjkgaW5z ZXJ0aW9ucygrKSwgMjQ4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4 IGYwNDZhM2MuLjlkOTdhZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtNTM4LDYgKzUz OCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9kcm1fZnJlZXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp CiAJCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2KTsKIAogCQlpbnRlbF9pcHNfY2xlYW51cChk ZXYpOworCQlpbnRlbF9mYmNfY2xlYW51cChkZXYpOwogCiAJCWludGVsX21vZGVzZXRfc3VzcGVu ZF9odyhkZXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGU4OGJhZWUuLmEwZTYx NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNjAwLDIxICs2MDAsMjQgQEAgc3RydWN0 IGludGVsX2NvbnRleHQgewogfTsKIAogc3RydWN0IGk5MTVfZmJjIHsKKwkvKiBwcm90ZWN0cyBt b3N0IGZiYyBzdGF0ZSAqLworCXN0cnVjdCBtdXRleCBtdXRleDsKKwogCXN0cnVjdCBpbnRlbF9j cnRjICpjcnRjOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAl1aW50MzJfdCBwaXhlbF9mb3JtYXQ7 CisJdW5zaWduZWQgaW50IHNjb3JlOwogCWludCBmZW5jZV9yZWcsIHBpdGNoLCB5OwogCiAJc3Ry dWN0IGRybV9tbV9ub2RlICpjb21wcmVzc2VkX2ZiOwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqY29t cHJlc3NlZF9sbGI7CiAKKwkvKiBmb3IgcmVuZGVyIHRyYWNraW5nLCBwcm90ZWN0ZWQgYnkgc3Ry dWN0X211dGV4ICovCiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAotCXN0cnVj dCBpbnRlbF9mYmNfd29yayB7Ci0JCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKLQkJc3RydWN0 IGRybV9jcnRjICpjcnRjOwotCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKLQl9ICpmYmNf d29yazsKKwlzdHJ1Y3QgaW50ZWxfcmluZ19ub3RpZnkgbm90aWZ5OworCisJc3RydWN0IHdvcmtf c3RydWN0IGVuYWJsZV93b3JrLCB1cGRhdGVfd29yazsKIAogCWVudW0gbm9fZmJjX3JlYXNvbiB7 CiAJCUZCQ19PSywgLyogRkJDIGlzIGVuYWJsZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwppbmRleCBiZWVhZDI0Li5lNGNhY2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCkBAIC0yNzQ2LDEzICsyNzQ2LDM3IEBAIGludGVsX3BpcGVfc2V0X2Jhc2Uoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCiAJCWludGVsX2NydGMtPmNvbmZpZy5w aXBlX3NyY19oID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKIAl9CiAKLQlkZXZfcHJp di0+ZGlzcGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBmYiwgeCwgeSk7Ci0KIAlvbGRf ZmIgPSBjcnRjLT5wcmltYXJ5LT5mYjsKIAljcnRjLT5wcmltYXJ5LT5mYiA9IGZiOwogCWNydGMt PnggPSB4OwogCWNydGMtPnkgPSB5OwogCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmZiYy5tdXRl eCk7CisJaW50ZWxfZmJjX3ByZV9wYWdlX2ZsaXAoaW50ZWxfY3J0Yyk7CisKKwlkZXZfcHJpdi0+ ZGlzcGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBmYiwgeCwgeSk7CisKKwkvKgorCSAq IE5vdyB3ZSBjYW4gdXBkYXRlIGZiYy5vYmogZm9yIHJlbmRlci9ibGl0dGVyIHRyYWNraW5nLgor CSAqIFRoZSBmbGlwIHdpbGwgbnVrZSBzbyBubyBuZWVkIGZvciBzZXFubyB3YWl0cyBoZXJlLgor CSAqLworCWlmIChpbnRlbF9jcnRjID09IGludGVsX2ZiY19iZXN0X2NydGMoZGV2KSkgeworCQkv KgorCQkgKiBmYmMgc2hvdWxkIG5vdCBiZSBlbmFibGVkIHVubGVzcyBpdCdzCisJCSAqIG9uIHRo ZSBjdXJyZW50IGNydGMgdGhhbmtzIHRvCisJCSAqIGludGVsX2ZiY19wcmVfcGFnZV9mbGlwKCku CisJCSAqLworCQlXQVJOX09OKGRldl9wcml2LT5mYmMuY3J0YyAhPSBOVUxMICYmCisJCQlkZXZf cHJpdi0+ZmJjLmNydGMgIT0gaW50ZWxfY3J0Yyk7CisKKwkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1 Y3RfbXV0ZXgpOworCQlpbnRlbF9mYmNfdXBkYXRlX29iamVjdChkZXYsIHRvX2ludGVsX2ZyYW1l YnVmZmVyKGZiKS0+b2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJ fQorCisJaW50ZWxfZmJjX3Bvc3RfcGFnZV9mbGlwKGludGVsX2NydGMsIHRydWUpOworCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPmZiYy5tdXRleCk7CisKIAlpZiAob2xkX2ZiKSB7CiAJCWlmIChp bnRlbF9jcnRjLT5hY3RpdmUgJiYgb2xkX2ZiICE9IGZiKQogCQkJaW50ZWxfd2FpdF9mb3JfdmJs YW5rKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSk7CkBAIC0yNzYyLDcgKzI3ODYsNiBAQCBpbnRlbF9w aXBlX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHgsIGludCB5LAogCX0KIAog CW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpbnRlbF91cGRhdGVfZmJjKGRldik7 CiAJaW50ZWxfZWRwX3Bzcl91cGRhdGUoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0 X211dGV4KTsKIApAQCAtMzk5NCw4ICs0MDE3LDExIEBAIHN0YXRpYyB2b2lkIGludGVsX2NydGNf ZW5hYmxlX3BsYW5lcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAKIAloc3dfZW5hYmxlX2lwcyhp bnRlbF9jcnRjKTsKIAorCW11dGV4X2xvY2soJmRldl9wcml2LT5mYmMubXV0ZXgpOworCWludGVs X2ZiY19wb3N0X3BsYW5lX2VuYWJsZShpbnRlbF9jcnRjKTsKKwltdXRleF91bmxvY2soJmRldl9w cml2LT5mYmMubXV0ZXgpOworCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWlu dGVsX3VwZGF0ZV9mYmMoZGV2KTsKIAlpbnRlbF9lZHBfcHNyX3VwZGF0ZShkZXYpOwogCW11dGV4 X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogfQpAQCAtNDAxMCw4ICs0MDM2LDkgQEAgc3Rh dGljIHZvaWQgaW50ZWxfY3J0Y19kaXNhYmxlX3BsYW5lcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMp CiAKIAlpbnRlbF9jcnRjX3dhaXRfZm9yX3BlbmRpbmdfZmxpcHMoY3J0Yyk7CiAKLQlpZiAoZGV2 X3ByaXYtPmZiYy5jcnRjID09IGludGVsX2NydGMpCi0JCWludGVsX2Rpc2FibGVfZmJjKGRldik7 CisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmZiYy5tdXRleCk7CisJaW50ZWxfZmJjX2Rpc2FibGUo aW50ZWxfY3J0Yyk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKIAogCWhz d19kaXNhYmxlX2lwcyhpbnRlbF9jcnRjKTsKIApAQCAtNDI4Nyw4ICs0MzE0LDExIEBAIHN0YXRp YyB2b2lkIGlyb25sYWtlX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJaW50 ZWxfY3J0Yy0+YWN0aXZlID0gZmFsc2U7CiAJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoY3J0Yyk7 CiAKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwlpbnRlbF9mYmNfc2NoZWR1 bGVfdXBkYXRlKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwog CW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpbnRlbF91cGRhdGVfZmJjKGRldik7 CiAJaW50ZWxfZWRwX3Bzcl91cGRhdGUoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0 X211dGV4KTsKIH0KQEAgLTQzMzUsOCArNDM2NSwxMSBAQCBzdGF0aWMgdm9pZCBoYXN3ZWxsX2Ny dGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJaW50ZWxfY3J0Yy0+YWN0aXZlID0g ZmFsc2U7CiAJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoY3J0Yyk7CiAKKwltdXRleF9sb2NrKCZk ZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwlpbnRlbF9mYmNfc2NoZWR1bGVfdXBkYXRlKGRldik7CisJ bXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwogCW11dGV4X2xvY2soJmRldi0+ c3RydWN0X211dGV4KTsKLQlpbnRlbF91cGRhdGVfZmJjKGRldik7CiAJaW50ZWxfZWRwX3Bzcl91 cGRhdGUoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIH0KQEAgLTQ4 ODcsOCArNDkyMCwxMSBAQCBzdGF0aWMgdm9pZCBpOXh4X2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiAJaW50ZWxfY3J0Yy0+YWN0aXZlID0gZmFsc2U7CiAJaW50ZWxfdXBkYXRl X3dhdGVybWFya3MoY3J0Yyk7CiAKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsK KwlpbnRlbF9mYmNfc2NoZWR1bGVfdXBkYXRlKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJp di0+ZmJjLm11dGV4KTsKKwogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpbnRl bF91cGRhdGVfZmJjKGRldik7CiAJaW50ZWxfZWRwX3Bzcl91cGRhdGUoZGV2KTsKIAltdXRleF91 bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIH0KQEAgLTg5MjQsOCArODk2MCw2IEBAIHN0YXRp YyB2b2lkIGludGVsX3VucGluX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICpfX3dvcmspCiAJ aW50ZWxfdW5waW5fZmJfb2JqKHdvcmstPm9sZF9mYl9vYmopOwogCWRybV9nZW1fb2JqZWN0X3Vu cmVmZXJlbmNlKCZ3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqLT5iYXNlKTsKIAlkcm1fZ2VtX29iamVj dF91bnJlZmVyZW5jZSgmd29yay0+b2xkX2ZiX29iai0+YmFzZSk7Ci0KLQlpbnRlbF91cGRhdGVf ZmJjKGRldik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlCVUdfT04o YXRvbWljX3JlYWQoJnRvX2ludGVsX2NydGMod29yay0+Y3J0YyktPnVucGluX3dvcmtfY291bnQp ID09IDApOwpAQCAtODk3Myw2ICs5MDA3LDggQEAgc3RhdGljIHZvaWQgZG9faW50ZWxfZmluaXNo X3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiAJcXVldWVfd29yayhkZXZfcHJp di0+d3EsICZ3b3JrLT53b3JrKTsKIAorCWludGVsX2ZiY19maW5pc2hfcGFnZV9mbGlwKGludGVs X2NydGMpOworCiAJdHJhY2VfaTkxNV9mbGlwX2NvbXBsZXRlKGludGVsX2NydGMtPnBsYW5lLCB3 b3JrLT5wZW5kaW5nX2ZsaXBfb2JqKTsKIH0KIApAQCAtOTUzMSw4ICs5NTY3LDE3IEBAIHN0YXRp YyBpbnQgaW50ZWxfY3J0Y19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiAJYXRv bWljX2luYygmaW50ZWxfY3J0Yy0+dW5waW5fd29ya19jb3VudCk7CiAKKwltdXRleF91bmxvY2so JmRldi0+c3RydWN0X211dGV4KTsKKwogCWNydGMtPnByaW1hcnktPmZiID0gZmI7CiAKKwltdXRl eF9sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwlpbnRlbF9mYmNfcHJlX3BhZ2VfZmxpcChp bnRlbF9jcnRjKTsKKworCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7 CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwX2ZiYzsKKwogCS8qIFJlZmVyZW5jZSB0aGUgb2Jq ZWN0cyBmb3IgdGhlIHNjaGVkdWxlZCB3b3JrLiAqLwogCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5j ZSgmd29yay0+b2xkX2ZiX29iai0+YmFzZSk7CiAJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZv YmotPmJhc2UpOwpAQCAtOTU1OCwxMCArOTYwMywyOCBAQCBzdGF0aWMgaW50IGludGVsX2NydGNf cGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlpZiAocmV0KQogCQlnb3RvIGNsZWFu dXBfYWxsOwogCi0JaW50ZWxfZGlzYWJsZV9mYmMoZGV2KTsKKwkvKgorCSAqIE5vdyB3ZSBjYW4g dXBkYXRlIGZiYy5vYmogZm9yIHJlbmRlci9ibGl0dGVyIHRyYWNraW5nLgorCSAqIFRoZSBmbGlw IHdpbGwgbnVrZSBzbyBubyBuZWVkIGZvciBzZXFubyB3YWl0cyBoZXJlLgorCSAqLworCWlmIChp bnRlbF9jcnRjID09IGludGVsX2ZiY19iZXN0X2NydGMoZGV2KSkgeworCQkvKgorCQkgKiBmYmMg c2hvdWxkIG5vdCBiZSBlbmFibGVkIHVubGVzcyBpdCdzCisJCSAqIG9uIHRoZSBjdXJyZW50IGNy dGMgdGhhbmtzIHRvCisJCSAqIGludGVsX2ZiY19wcmVfcGFnZV9mbGlwKCkuCisJCSAqLworCQlX QVJOX09OKGRldl9wcml2LT5mYmMuY3J0YyAhPSBOVUxMICYmCisJCQlkZXZfcHJpdi0+ZmJjLmNy dGMgIT0gaW50ZWxfY3J0Yyk7CisKKwkJaW50ZWxfZmJjX3VwZGF0ZV9vYmplY3QoZGV2LCBvYmop OworCX0KKwogCWludGVsX21hcmtfZmJfYnVzeShvYmosIE5VTEwpOwogCW11dGV4X3VubG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCisJaW50ZWxfZmJjX3Bvc3RfcGFnZV9mbGlwKGludGVsX2Ny dGMsIGZhbHNlKTsKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5mYmMubXV0ZXgpOworCiAJdHJh Y2VfaTkxNV9mbGlwX3JlcXVlc3QoaW50ZWxfY3J0Yy0+cGxhbmUsIG9iaik7CiAKIAlyZXR1cm4g MDsKQEAgLTk1NjksNyArOTYzMiwyMCBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfcGFnZV9mbGlw KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIGNsZWFudXBfYWxsOgogCWRybV9nZW1fb2JqZWN0X3Vu cmVmZXJlbmNlKCZ3b3JrLT5vbGRfZmJfb2JqLT5iYXNlKTsKIAlkcm1fZ2VtX29iamVjdF91bnJl ZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsK KworY2xlYW51cF9mYmM6CisJLyoKKwkgKiBSZXN0b3JlIGZiIGJlZm9yZSBkb2luZyB0aGUgZmJj IGNsZWFudXAgc28gdGhhdAorCSAqIGZiYy5wZW5kaW5nX3Njb3JlIGdldHMgY29ycmVjdGx5IGNv bXB1dGVkLgorCSAqLwogCWNydGMtPnByaW1hcnktPmZiID0gb2xkX2ZiOworCS8qIFRoaXMgc2hv dWxkIGdldCBmYmMgYmFjayBvbiB0cmFjaywgZXZlbnR1YWxseSAqLworCWludGVsX2ZiY19kaXNh YmxlKGludGVsX2NydGMpOworCWludGVsX2ZiY19wb3N0X3BsYW5lX2VuYWJsZShpbnRlbF9jcnRj KTsKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5mYmMubXV0ZXgpOworCisJbXV0ZXhfbG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWF0b21pY19kZWMoJmludGVsX2NydGMtPnVucGluX3dvcmtf Y291bnQpOwogCWludGVsX3VucGluX2ZiX29iaihvYmopOwogY2xlYW51cF91bmxvY2s6CkBAIC0x MTU0OCw2ICsxMTYyNCw4IEBAIHN0YXRpYyB2b2lkIGludGVsX2NydGNfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBpbnQgcGlwZSkKIAlzcGluX2xvY2tfaW5pdCgmaW50ZWxfY3J0Yy0+bG9j ayk7CiAJSU5JVF9MSVNUX0hFQUQoJmludGVsX2NydGMtPnZibGFua19ub3RpZnlfbGlzdCk7CiAK KwlpbnRlbF9mYmNfY3J0Y19pbml0KGludGVsX2NydGMpOworCiAJQlVHX09OKHBpcGUgPj0gQVJS QVlfU0laRShkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nKSB8fAogCSAgICAgICBkZXZf cHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2ludGVsX2NydGMtPnBsYW5lXSAhPSBOVUxMKTsK IAlkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2ludGVsX2NydGMtPnBsYW5lXSA9ICZp bnRlbF9jcnRjLT5iYXNlOwpAQCAtMTI4NDksOCArMTI5MjcsNiBAQCB2b2lkIGludGVsX21vZGVz ZXRfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQlpbnRlbF9pbmNyZWFzZV9wbGxj bG9jayhjcnRjKTsKIAl9CiAKLQlpbnRlbF9kaXNhYmxlX2ZiYyhkZXYpOwotCiAJaW50ZWxfZGlz YWJsZV9ndF9wb3dlcnNhdmUoZGV2KTsKIAogCWlyb25sYWtlX3RlYXJkb3duX3JjNihkZXYpOwpA QCAtMTI4NTgsNiArMTI5MzQsNyBAQCB2b2lkIGludGVsX21vZGVzZXRfY2xlYW51cChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJ aW50ZWxfaXBzX2NsZWFudXAoZGV2KTsKKwlpbnRlbF9mYmNfY2xlYW51cChkZXYpOwogCiAJLyog Zmx1c2ggYW55IGRlbGF5ZWQgdGFza3Mgb3IgcGVuZGluZyB3b3JrICovCiAJZmx1c2hfc2NoZWR1 bGVkX3dvcmsoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggMWRhMWY3Yi4uNTJlOTVm MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTQyMCw2ICs0MjAsMTEgQEAgc3RydWN0 IGludGVsX2NydGMgewogCiAJc3RydWN0IGxpc3RfaGVhZCB2Ymxhbmtfbm90aWZ5X2xpc3Q7CiAJ c3BpbmxvY2tfdCBsb2NrOworCisJc3RydWN0IHsKKwkJc3RydWN0IGludGVsX3ZibGFua19ub3Rp Znkgbm90aWZ5OworCQl1bnNpZ25lZCBpbnQgc2NvcmUsIHBlbmRpbmdfc2NvcmU7CisJfSBmYmM7 CiB9OwogCiBzdHJ1Y3QgaW50ZWxfcGxhbmVfd21fcGFyYW1ldGVycyB7CkBAIC05NTksOSArOTY0 LDE4IEBAIHZvaWQgaW50ZWxfdXBkYXRlX3Nwcml0ZV93YXRlcm1hcmtzKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAogdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwog dm9pZCBpbnRlbF9wbV9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGJvb2wgaW50ZWxf ZmJjX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci12b2lkIGludGVsX2Rpc2FibGVf ZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotdm9pZCBpbnRlbF91cGRhdGVfZmJjKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpbnRlbF9mYmNfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKK3ZvaWQgaW50ZWxfZmJjX2NydGNfaW5pdChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 Yyk7Cit2b2lkIGludGVsX2ZiY19jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9p ZCBpbnRlbF9mYmNfcHJlX3BhZ2VfZmxpcChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cit2b2lk IGludGVsX2ZiY19wb3N0X3BhZ2VfZmxpcChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywgYm9vbCB1 c2VfdmJsYW5rX25vdGlmeSk7Cit2b2lkIGludGVsX2ZiY19maW5pc2hfcGFnZV9mbGlwKHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjKTsKK3ZvaWQgaW50ZWxfZmJjX3VwZGF0ZV9vYmplY3Qoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aik7Cit2b2lkIGludGVsX2ZiY19wb3N0X3BsYW5lX2VuYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0Yyk7Cit2b2lkIGludGVsX2ZiY19kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsK K3ZvaWQgaW50ZWxfZmJjX3NjaGVkdWxlX3VwZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK K3N0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9mYmNfYmVzdF9jcnRjKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwogdm9pZCBpbnRlbF9ncHVfaXBzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KTsKIHZvaWQgaW50ZWxfZ3B1X2lwc190ZWFyZG93bih2b2lkKTsKIGludCBpbnRl bF9wb3dlcl9kb21haW5zX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKik7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcG0uYwppbmRleCA2YjIyZTQwLi5kZDNmODA3IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMKQEAgLTMwOCw2ICszMDgsMjggQEAgYm9vbCBpbnRlbF9mYmNfZW5hYmxlZChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQogCXJldHVybiBkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5hYmxlZChk ZXYpOwogfQogCit2b2lkIGludGVsX2ZiY191cGRhdGVfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5mYmMubXV0ZXgpOworCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJmRldi0+c3RydWN0X211dGV4KTsKKworCWludGVsX3Jpbmdfbm90aWZ5X2NhbmNlbCgm ZGV2X3ByaXYtPmZiYy5ub3RpZnkpOworCisJaWYgKG9iaiA9PSBkZXZfcHJpdi0+ZmJjLm9iaikK KwkJcmV0dXJuOworCisJaWYgKG9iaikKKwkJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZvYmot PmJhc2UpOworCisJaWYgKGRldl9wcml2LT5mYmMub2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJl ZmVyZW5jZSgmZGV2X3ByaXYtPmZiYy5vYmotPmJhc2UpOworCisJZGV2X3ByaXYtPmZiYy5vYmog PSBvYmo7Cit9CisKIHN0YXRpYyB2b2lkIGludGVsX2ZiY191cGRhdGVfcGFyYW1zKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNl LmRldjsKQEAgLTMxNiwxMTcgKzMzOCw1NSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9mYmNfdXBkYXRl X3BhcmFtcyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpLT5vYmo7CiAKIAlkZXZfcHJpdi0+ ZmJjLmNydGMgPSBjcnRjOworCWRldl9wcml2LT5mYmMuc2NvcmUgPSBjcnRjLT5mYmMuc2NvcmU7 CiAJZGV2X3ByaXYtPmZiYy5waXhlbF9mb3JtYXQgPSBmYi0+cGl4ZWxfZm9ybWF0OwogCWRldl9w cml2LT5mYmMucGl0Y2ggPSBmYi0+cGl0Y2hlc1swXTsKLQlkZXZfcHJpdi0+ZmJjLm9iaiA9IG9i ajsKIAlkZXZfcHJpdi0+ZmJjLmZlbmNlX3JlZyA9IG9iai0+ZmVuY2VfcmVnOwogCWRldl9wcml2 LT5mYmMueSA9IGNydGMtPmJhc2UueTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfZmJjX3dvcmtf Zm4oc3RydWN0IHdvcmtfc3RydWN0ICpfX3dvcmspCi17Ci0Jc3RydWN0IGludGVsX2ZiY193b3Jr ICp3b3JrID0KLQkJY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayhfX3dvcmspLAotCQkJICAg ICBzdHJ1Y3QgaW50ZWxfZmJjX3dvcmssIHdvcmspOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSB3b3JrLT5jcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKIAotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlp ZiAod29yayA9PSBkZXZfcHJpdi0+ZmJjLmZiY193b3JrKSB7Ci0JCS8qIERvdWJsZSBjaGVjayB0 aGF0IHdlIGhhdmVuJ3Qgc3dpdGNoZWQgZmIgd2l0aG91dCBjYW5jZWxsaW5nCi0JCSAqIHRoZSBw cmlvciB3b3JrLgotCQkgKi8KLQkJaWYgKHdvcmstPmNydGMtPnByaW1hcnktPmZiID09IHdvcmst PmZiKSB7Ci0JCQlpbnRlbF9mYmNfdXBkYXRlX3BhcmFtcyh0b19pbnRlbF9jcnRjKHdvcmstPmNy dGMpKTsKLQkJCWRldl9wcml2LT5kaXNwbGF5LmVuYWJsZV9mYmMoZGV2KTsKLQkJfQotCi0JCWRl dl9wcml2LT5mYmMuZmJjX3dvcmsgPSBOVUxMOwotCX0KLQltdXRleF91bmxvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKLQotCWtmcmVlKHdvcmspOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9jYW5j ZWxfZmJjX3dvcmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWlmIChk ZXZfcHJpdi0+ZmJjLmZiY193b3JrID09IE5VTEwpCi0JCXJldHVybjsKLQotCURSTV9ERUJVR19L TVMoImNhbmNlbGxpbmcgcGVuZGluZyBGQkMgZW5hYmxlXG4iKTsKLQotCS8qIFN5bmNocm9uaXNh dGlvbiBpcyBwcm92aWRlZCBieSBzdHJ1Y3RfbXV0ZXggYW5kIGNoZWNraW5nIG9mCi0JICogZGV2 X3ByaXYtPmZiYy5mYmNfd29yaywgc28gd2UgY2FuIHBlcmZvcm0gdGhlIGNhbmNlbGxhdGlvbgot CSAqIGVudGlyZWx5IGFzeW5jaHJvbm91c2x5LgotCSAqLwotCWlmIChjYW5jZWxfZGVsYXllZF93 b3JrKCZkZXZfcHJpdi0+ZmJjLmZiY193b3JrLT53b3JrKSkKLQkJLyogdGFza2xldCB3YXMga2ls bGVkIGJlZm9yZSBiZWluZyBydW4sIGNsZWFuIHVwICovCi0JCWtmcmVlKGRldl9wcml2LT5mYmMu ZmJjX3dvcmspOwotCi0JLyogTWFyayB0aGUgd29yayBhcyBubyBsb25nZXIgd2FudGVkIHNvIHRo YXQgaWYgaXQgZG9lcwotCSAqIHdha2UtdXAgKGJlY2F1c2UgdGhlIHdvcmsgd2FzIGFscmVhZHkg cnVubmluZyBhbmQgd2FpdGluZwotCSAqIGZvciBvdXIgbXV0ZXgpLCBpdCB3aWxsIGRpc2NvdmVy IHRoYXQgaXMgbm8gbG9uZ2VyCi0JICogbmVjZXNzYXJ5IHRvIHJ1bi4KLQkgKi8KLQlkZXZfcHJp di0+ZmJjLmZiY193b3JrID0gTlVMTDsKKwlkZXZfcHJpdi0+ZmJjLm5vX2ZiY19yZWFzb24gPSBG QkNfT0s7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9mYmMoc3RydWN0IGRybV9jcnRj ICpjcnRjKQorc3RhdGljIHZvaWQgX19pbnRlbF9mYmNfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YykKIHsKLQlzdHJ1Y3QgaW50ZWxfZmJjX3dvcmsgKndvcms7Ci0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2OwogCi0JaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS5l bmFibGVfZmJjKQorCWlmICghY3J0YykKIAkJcmV0dXJuOwogCi0JaW50ZWxfY2FuY2VsX2ZiY193 b3JrKGRldl9wcml2KTsKKwlkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7CiAKLQl3b3JrID0ga3phbGxvYyhzaXplb2YoKndvcmspLCBHRlBfS0VSTkVM KTsKLQlpZiAod29yayA9PSBOVUxMKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRl IEZCQyB3b3JrIHN0cnVjdHVyZVxuIik7Ci0JCWludGVsX2ZiY191cGRhdGVfcGFyYW1zKHRvX2lu dGVsX2NydGMoY3J0YykpOwotCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfZmJjKGRldik7Ci0J CXJldHVybjsKLQl9CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPmZiYy5tdXRleCk7 CiAKLQl3b3JrLT5jcnRjID0gY3J0YzsKLQl3b3JrLT5mYiA9IGNydGMtPnByaW1hcnktPmZiOwot CUlOSVRfREVMQVlFRF9XT1JLKCZ3b3JrLT53b3JrLCBpbnRlbF9mYmNfd29ya19mbik7CisJaWYg KGRldl9wcml2LT5mYmMuY3J0YyAhPSBjcnRjKQorCQlyZXR1cm47CiAKLQlkZXZfcHJpdi0+ZmJj LmZiY193b3JrID0gd29yazsKKwlkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYyhkZXYpOwor CWRldl9wcml2LT5mYmMuY3J0YyA9IE5VTEw7CisJZGV2X3ByaXYtPmZiYy5zY29yZSA9IDA7CisJ ZGV2X3ByaXYtPmZiYy5waXhlbF9mb3JtYXQgPSAwOworCWRldl9wcml2LT5mYmMucGl0Y2ggPSAw OworCWRldl9wcml2LT5mYmMuZmVuY2VfcmVnID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKKwlkZXZf cHJpdi0+ZmJjLnkgPSAwOwogCi0JLyogRGVsYXkgdGhlIGFjdHVhbCBlbmFibGluZyB0byBsZXQg cGFnZWZsaXBwaW5nIGNlYXNlIGFuZCB0aGUKLQkgKiBkaXNwbGF5IHRvIHNldHRsZSBiZWZvcmUg c3RhcnRpbmcgdGhlIGNvbXByZXNzaW9uLiBOb3RlIHRoYXQKLQkgKiB0aGlzIGRlbGF5IGFsc28g c2VydmVzIGEgc2Vjb25kIHB1cnBvc2U6IGl0IGFsbG93cyBmb3IgYQotCSAqIHZibGFuayB0byBw YXNzIGFmdGVyIGRpc2FibGluZyB0aGUgRkJDIGJlZm9yZSB3ZSBhdHRlbXB0Ci0JICogdG8gbW9k aWZ5IHRoZSBjb250cm9sIHJlZ2lzdGVycy4KLQkgKgotCSAqIEEgbW9yZSBjb21wbGljYXRlZCBz b2x1dGlvbiB3b3VsZCBpbnZvbHZlIHRyYWNraW5nIHZibGFua3MKLQkgKiBmb2xsb3dpbmcgdGhl IHRlcm1pbmF0aW9uIG9mIHRoZSBwYWdlLWZsaXBwaW5nIHNlcXVlbmNlCi0JICogYW5kIGluZGVl ZCBwZXJmb3JtaW5nIHRoZSBlbmFibGUgYXMgYSBjby1yb3V0aW5lIGFuZCBub3QKLQkgKiB3YWl0 aW5nIHN5bmNocm9ub3VzbHkgdXBvbiB0aGUgdmJsYW5rLgotCSAqCi0JICogV2FGYmNXYWl0Rm9y VkJsYW5rQmVmb3JlRW5hYmxlOmlsayxzbmIKLQkgKi8KLQlzY2hlZHVsZV9kZWxheWVkX3dvcmso JndvcmstPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7CisJaW50ZWxfZmJjX3VwZGF0ZV9vYmplY3QoZGV2LCBOVUxMKTsKKwltdXRl eF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIH0KIAotdm9pZCBpbnRlbF9kaXNhYmxlX2Zi YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQordm9pZCBpbnRlbF9mYmNfZGlzYWJsZShzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YykKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFz ZS5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKIAotCWludGVsX2NhbmNlbF9mYmNfd29yayhkZXZfcHJpdik7CisJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZGV2X3ByaXYtPmZiYy5tdXRleCk7CiAKLQlpZiAoIWRldl9wcml2LT5kaXNwbGF5 LmRpc2FibGVfZmJjKQotCQlyZXR1cm47CisJaW50ZWxfdmJsYW5rX25vdGlmeV9jYW5jZWwoJmNy dGMtPmZiYy5ub3RpZnkpOworCWNydGMtPmZiYy5zY29yZSA9IGNydGMtPmZiYy5wZW5kaW5nX3Nj b3JlID0gMDsKIAotCWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjKGRldik7Ci0JZGV2X3By aXYtPmZiYy5jcnRjID0gTlVMTDsKLQlkZXZfcHJpdi0+ZmJjLnBpeGVsX2Zvcm1hdCA9IDA7Ci0J ZGV2X3ByaXYtPmZiYy5waXRjaCA9IDA7Ci0JZGV2X3ByaXYtPmZiYy5mZW5jZV9yZWcgPSBJOTE1 X0ZFTkNFX1JFR19OT05FOwotCWRldl9wcml2LT5mYmMueSA9IDA7CisJX19pbnRlbF9mYmNfZGlz YWJsZShjcnRjKTsKIH0KIAogc3RhdGljIGJvb2wgc2V0X25vX2ZiY19yZWFzb24oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LApAQCAtNjczLDIwMSArNjMzLDQ2NCBAQCBzdGF0aWMg Ym9vbCBpbnRlbF9mYmMyX3Bvc3NpYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogCXJldHVy biB0cnVlOwogfQogCi1zdGF0aWMgc3RydWN0IGludGVsX2NydGMgKmludGVsX2ZiYzFfcGlja19j cnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBpbnRlbF9mYmNfdXBkYXRl X3BlbmRpbmdfc2NvcmUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCiB7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGludGVsX2NydGMgKnRtcF9jcnRj LCAqY3J0YyA9IE5VTEw7CisJdW5zaWduZWQgaW50IHBpeGVsX3JhdGUsIGNwcDsKKwlib29sIG9r OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0 Y19saXN0LCBiYXNlLmhlYWQpIHsKLQkJaWYgKCF0bXBfY3J0Yy0+YWN0aXZlKQotCQkJY29udGlu dWU7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmY3J0Yy0+YmFzZS5tdXRleC5tdXRleC5iYXNlKTsK Kwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKIAotCQlpZiAoY3J0 YykgewotCQkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNfTVVMVElQTEVfUElQ RVMpKQotCQkJCURSTV9ERUJVR19LTVMoIm1vcmUgdGhhbiBvbmUgcGlwZSBhY3RpdmUsIGRpc2Fi bGluZyBGQkNcbiIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KKwlXQVJOX09OKGludGVsX3ZibGFu a19ub3RpZnlfcGVuZGluZygmY3J0Yy0+ZmJjLm5vdGlmeSkpOwogCi0JCWNydGMgPSB0bXBfY3J0 YzsKLQl9CisJaWYgKElTX0c0WChkZXYpIHx8IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDUpCisJ CW9rID0gaW50ZWxfZmJjMl9wb3NzaWJsZShjcnRjKTsKKwllbHNlCisJCW9rID0gaW50ZWxfZmJj MV9wb3NzaWJsZShjcnRjKTsKIAotCWlmICghY3J0YyB8fCAhaW50ZWxfZmJjMV9wb3NzaWJsZShj cnRjKSkgewotCQlpZiAoc2V0X25vX2ZiY19yZWFzb24oZGV2X3ByaXYsIEZCQ19VTlNVUFBPUlRF RF9DT05GSUcpKQotCQkJRFJNX0RFQlVHX0tNUygibm8gc3VpdGFibGUgcGxhbmUsIGRpc2FibGlu ZyBGQkNcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIW9rKSB7CisJCWNydGMtPmZiYy5wZW5k aW5nX3Njb3JlID0gMDsKKwkJcmV0dXJuOwogCX0KIAotCXJldHVybiBjcnRjOworCS8qCisJICog SWYgd2UgaGF2ZSBtdWx0aXBsZSBwb3NzaWJpbGl0aWVzLCBwcmVmZXIgdGhlIHBpcGUgd2l0aAor CSAqIHRoZSBoaWdoZXN0IGRhdGEgcmF0ZSAocGl4ZWxfcmF0ZSAqIGNwcCkuCisJICoKKwkgKiBG SVhNRTogaXMgdGhpcyBhIGdvb2QgaGV1cmlzdGljPworCSAqCisJICogRklYTUU6IFdlIHNob3Vs ZCBoYXZlIHNvbWV0aGluZyBsaWtlIGlsa19waXBlX3BpeGVsX3JhdGUoKQorCSAqIGZvciBHTUNI IHBsYXRmb3JtcyB0b28sIGJ1dCBoZXJlIGl0IGRvZXNuJ3QgbWF0dGVyIHNpbmNlCisJICogd2Ug YW55d2F5IGRpc2FsbG93IEZCQyB3aXRoIHBhbmVsIGZpdHRpbmcgb24gZzR4LgorCSAqLworCWlm IChIQVNfUENIX1NQTElUKGRldikpCisJCXBpeGVsX3JhdGUgPSBpbGtfcGlwZV9waXhlbF9yYXRl KGRldiwgJmNydGMtPmJhc2UpOworCWVsc2UKKwkJcGl4ZWxfcmF0ZSA9IGNydGMtPmNvbmZpZy5h ZGp1c3RlZF9tb2RlLmNydGNfY2xvY2s7CisKKwljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChj cnRjLT5iYXNlLnByaW1hcnktPmZiLT5waXhlbF9mb3JtYXQsIDApOworCisJY3J0Yy0+ZmJjLnBl bmRpbmdfc2NvcmUgPSBwaXhlbF9yYXRlICogY3BwOwogfQogCi1zdGF0aWMgc3RydWN0IGludGVs X2NydGMgKmludGVsX2ZiYzJfcGlja19jcnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0 aWMgdm9pZCBpbnRlbF9mYmNfc2NoZWR1bGVfZW5hYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj KQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBp bnRlbF9jcnRjICp0bXBfY3J0YywgKmNydGMgPSBOVUxMOwotCXVuc2lnbmVkIGludCBwaXhlbF9y YXRlID0gMDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0KKwkJdG9faW50ZWxf ZnJhbWVidWZmZXIoY3J0Yy0+YmFzZS5wcmltYXJ5LT5mYiktPm9iajsKKwlpbnQgcmV0OwogCi0J bGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0 LCBiYXNlLmhlYWQpIHsKLQkJdW5zaWduZWQgaW50IHRtcF9waXhlbF9yYXRlOworCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJmNydGMtPmJhc2UubXV0ZXgubXV0ZXguYmFzZSk7CisJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZGV2X3ByaXYtPmZiYy5tdXRleCk7CiAKLQkJaWYgKCFpbnRlbF9mYmMyX3Bvc3Np YmxlKHRtcF9jcnRjKSkKLQkJCWNvbnRpbnVlOworCVdBUk5fT04oZGV2X3ByaXYtPmZiYy5jcnRj ID09IGNydGMpOwogCisJLyoKKwkgKiBNdXN0IGRpc2FibGUgZmJjIGJlZm9yZSB0b3VjaGluZyB0 aGUgY29tcHJlc3NlZAorCSAqIGJ1ZmZlciwgb3IgbW9zdCBmYmMgcGFyYW1lcmVycy4KKwkgKgor CSAqIE5vdGUgdGhhdCB0aGVyZSBtaWdodCBiZSBhIHBlbmRpbmcgcmluZyBub3RpZnkKKwkgKiBz dGlsbCBidXQgZmJjIG11dGV4IHdpbGwgcHJldmVudCBpdCBmcm9tIGRvaWduIHN0dWZmLgorCSAq CisJICogVXNlIHRoZSBsb3cgbGV2ZWwgZnVuY3Rpb24gdG8gYXZvaWQgY2xlYXJpbmcgZmJjLm9i agorCSAqIHRvIHNraXAgdGhlIHNlcW5vIHdhaXQgaW4gY2FzZSB0aGUgY3J0YyBjaGFuZ2VzIGJ1 dAorCSAqIHRoZSBvYmogZG9lc24ndC4KKwkgKi8KKwlkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxl X2ZiYyhkZXYpOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0ID0g aTkxNV9nZW1fc3RvbGVuX3NldHVwX2NvbXByZXNzaW9uKGRldiwgb2JqLT5iYXNlLnNpemUpOwor CWlmIChyZXQpIHsKIAkJLyoKLQkJICogSWYgd2UgaGF2ZSBtdWx0aXBsZSBwb3NzaWJpbGl0aWVz LCBwcmVmZXIKLQkJICogdGhlIHBpcGUgd2l0aCB0aGUgaGlnaGVzdCBwaXhlbCByYXRlLgotCQkg KgotCQkgKiBGSVhNRTogaXMgdGhpcyBhIGdvb2QgaGV1cmlzdGljPwotCQkgKgotCQkgKiBGSVhN RTogV2Ugc2hvdWxkIGhhdmUgc29tZXRoaW5nIGxpa2UgaWxrX3BpcGVfcGl4ZWxfcmF0ZSgpCi0J CSAqIGZvciBHTUNIIHBsYXRmb3JtcyB0b28sIGJ1dCBoZXJlIGl0IGRvZXNuJ3QgbWF0dGVyIHNp bmNlCi0JCSAqIHdlIGFueXdheSBkaXNhbGxvdyBGQkMgd2l0aCBwYW5lbCBmaXR0aW5nIG9uIGc0 eC4KKwkJICogRklYTUUgd2hhdCBub3c/IG1heWJlIGNsZWFyIHRoZSBzY29yZSBmb3IKKwkJICog dGhlIGN1cnJlbnQgY3J0YyBzbyB3ZSBtaWdodCB0cnkgYWdhaW4gb24KKwkJICogYW5vdGhlciBj cnRjPwogCQkgKi8KLQkJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKLQkJCXRtcF9waXhlbF9yYXRl ID0gaWxrX3BpcGVfcGl4ZWxfcmF0ZShkZXYsICZ0bXBfY3J0Yy0+YmFzZSk7Ci0JCWVsc2UKLQkJ CXRtcF9waXhlbF9yYXRlID0gdG1wX2NydGMtPmNvbmZpZy5hZGp1c3RlZF9tb2RlLmNydGNfY2xv Y2s7CisJCWk5MTVfZ2VtX3N0b2xlbl9jbGVhbnVwX2NvbXByZXNzaW9uKGRldik7CisJCW11dGV4 X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlfX2ludGVsX2ZiY19kaXNhYmxlKGRldl9w cml2LT5mYmMuY3J0Yyk7CisJCXJldHVybjsKKwl9CiAKLQkJaWYgKHBpeGVsX3JhdGUgPCB0bXBf cGl4ZWxfcmF0ZSkgewotCQkJY3J0YyA9IHRtcF9jcnRjOwotCQkJcGl4ZWxfcmF0ZSA9IHRtcF9w aXhlbF9yYXRlOworCS8qCisJICogSWYgdGhlIG9iamVjdCBjaGFuZ2VzLCB3ZSBtdXN0IG1ha2Ug c3VyZSB3ZSB3YWl0IGZvcgorCSAqIGFsbCBwcmV2aW91cyB3cml0ZXMgdG8gbGFuZCBiZWZvcmUg ZW5hYmxpbmcgZmJjLgorCSAqLworCWlmIChkZXZfcHJpdi0+ZmJjLm9iaiAhPSBvYmopIHsKKwkJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IE5VTEw7CisKKwkJaW50ZWxfZmJjX3VwZGF0 ZV9vYmplY3QoZGV2LCBvYmopOworCQlkZXZfcHJpdi0+ZmJjLm5vdGlmeS5zZXFubyA9IG9iai0+ bGFzdF93cml0ZV9zZXFubzsKKwkJaWYgKGRldl9wcml2LT5mYmMubm90aWZ5LnNlcW5vICE9IDAp CisJCQlyaW5nID0gb2JqLT5yaW5nOworCisJCWlmIChyaW5nKSB7CisJCQlyZXQgPSBpbnRlbF9y aW5nX25vdGlmeV9hZGQocmluZywgJmRldl9wcml2LT5mYmMubm90aWZ5KTsKKwkJCWlmIChyZXQp IHsKKwkJCQkvKiBGSVhNRSB3aGF0IG5vdz8gKi8KKwkJCQlpOTE1X2dlbV9zdG9sZW5fY2xlYW51 cF9jb21wcmVzc2lvbihkZXYpOworCQkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp OworCQkJCV9faW50ZWxfZmJjX2Rpc2FibGUoZGV2X3ByaXYtPmZiYy5jcnRjKTsKKwkJCQlyZXR1 cm47CisJCQl9CiAJCX0KIAl9CiAKLQlpZiAoIWNydGMpCi0JCWlmIChzZXRfbm9fZmJjX3JlYXNv bihkZXZfcHJpdiwgRkJDX1VOU1VQUE9SVEVEX0NPTkZJRykpCi0JCQlEUk1fREVCVUdfS01TKCJu byBzdWl0YWJsZSBwbGFuZSwgZGlzYWJsaW5nIEZCQ1xuIik7CisJbXV0ZXhfdW5sb2NrKCZkZXYt PnN0cnVjdF9tdXRleCk7CisKKwlpbnRlbF9mYmNfdXBkYXRlX3BhcmFtcyhjcnRjKTsKIAotCXJl dHVybiBjcnRjOworCS8qCisJICogSWYgdGhlIG9iamVjdCBjaGFuZ2VkIGFkZCBhIG5ldyByaW5n IG5vdGlmaWNhdGlvbi4KKwkgKiBJZiB0aGUgb2JqZWN0IGRpZG4ndCBjaGFuZ2Ugd2UgZWl0aGVy IHdhaXQgZm9yIHRoZQorCSAqIGFscmVhZHkgcGVuZGluZyByaW5nIG5vdGlmaWNhdGlvbiwgb3Ig d2UganVzdCBkaXJlY3RseQorCSAqIGVuYWJsZSBmYmMgKGFzIHRoZSBzZXFubyBtdXN0IGhhdmUg cGFzc2VkIGFscmVhZHkpLgorCSAqLworCWlmICghaW50ZWxfcmluZ19ub3RpZnlfcGVuZGluZygm ZGV2X3ByaXYtPmZiYy5ub3RpZnkpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfZmJjKGRl dik7CiB9CiAKLS8qKgotICogaW50ZWxfdXBkYXRlX2ZiYyAtIGVuYWJsZS9kaXNhYmxlIEZCQyBh cyBuZWVkZWQKLSAqIEBkZXY6IHRoZSBkcm1fZGV2aWNlCi0gKgotICogU2V0IHVwIHRoZSBmcmFt ZWJ1ZmZlciBjb21wcmVzc2lvbiBoYXJkd2FyZSBhdCBtb2RlIHNldCB0aW1lLiAgV2UKLSAqIGVu YWJsZSBpdCBpZiBwb3NzaWJsZToKLSAqICAgLSBwbGFuZSBBIG9ubHkgKG9uIHByZS05NjUpCi0g KiAgIC0gbm8gcGl4ZWwgbXVsaXRwbHkvbGluZSBkdXBsaWNhdGlvbgotICogICAtIG5vIGFscGhh IGJ1ZmZlciBkaXNjYXJkCi0gKiAgIC0gbm8gZHVhbCB3aWRlCi0gKiAgIC0gZnJhbWVidWZmZXIg PD0gbWF4X2hkaXNwbGF5IGluIHdpZHRoLCBtYXhfdmRpc3BsYXkgaW4gaGVpZ2h0Ci0gKgotICog V2UgY2FuJ3QgYXNzdW1lIHRoYXQgYW55IGNvbXByZXNzaW9uIHdpbGwgdGFrZSBwbGFjZSAod29y c3QgY2FzZSksCi0gKiBzbyB0aGUgY29tcHJlc3NlZCBidWZmZXIgaGFzIHRvIGJlIHRoZSBzYW1l IHNpemUgYXMgdGhlIHVuY29tcHJlc3NlZAotICogb25lLiAgSXQgYWxzbyBtdXN0IHJlc2lkZSAo YWxvbmcgd2l0aCB0aGUgbGluZSBsZW5ndGggYnVmZmVyKSBpbgotICogc3RvbGVuIG1lbW9yeS4K LSAqCi0gKiBXZSBuZWVkIHRvIGVuYWJsZS9kaXNhYmxlIEZCQyBvbiBhIGdsb2JhbCBiYXNpcy4K LSAqLwotdm9pZCBpbnRlbF91cGRhdGVfZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdHJ1 Y3QgaW50ZWxfY3J0YyAqaW50ZWxfZmJjX2Jlc3RfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGM7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmI7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywgKmJlc3RfY3J0YzsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5m YmMubXV0ZXgpOwogCiAJaWYgKCFIQVNfRkJDKGRldikpIHsKIAkJc2V0X25vX2ZiY19yZWFzb24o ZGV2X3ByaXYsIEZCQ19VTlNVUFBPUlRFRCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAJ fQogCiAJaWYgKCFpOTE1LnBvd2Vyc2F2ZSkgewogCQlpZiAoc2V0X25vX2ZiY19yZWFzb24oZGV2 X3ByaXYsIEZCQ19NT0RVTEVfUEFSQU0pKQogCQkJRFJNX0RFQlVHX0tNUygiZmJjIGRpc2FibGVk IHBlciBtb2R1bGUgcGFyYW1cbiIpOwotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAog CWlmIChpOTE1LmVuYWJsZV9mYmMgPCAwKSB7CiAJCWlmIChzZXRfbm9fZmJjX3JlYXNvbihkZXZf cHJpdiwgRkJDX0NISVBfREVGQVVMVCkpCi0JCQlEUk1fREVCVUdfS01TKCJkaXNhYmxlZCBwZXIg Y2hpcCBkZWZhdWx0XG4iKTsKLQkJZ290byBvdXRfZGlzYWJsZTsKKwkJCURSTV9ERUJVR19LTVMo ImZiYyBkaXNhYmxlZCBwZXIgY2hpcCBkZWZhdWx0XG4iKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQor CiAJaWYgKCFpOTE1LmVuYWJsZV9mYmMpIHsKIAkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9w cml2LCBGQkNfTU9EVUxFX1BBUkFNKSkKIAkJCURSTV9ERUJVR19LTVMoImZiYyBkaXNhYmxlZCBw ZXIgbW9kdWxlIHBhcmFtXG4iKTsKLQkJZ290byBvdXRfZGlzYWJsZTsKKwkJcmV0dXJuIE5VTEw7 CiAJfQogCi0JaWYgKElTX0c0WChkZXYpIHx8IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDUpCi0J CWNydGMgPSBpbnRlbF9mYmMyX3BpY2tfY3J0YyhkZXYpOwotCWVsc2UKLQkJY3J0YyA9IGludGVs X2ZiYzFfcGlja19jcnRjKGRldik7CisJLyogcHJlZmVyIHRvIG1haW50YWluIHRoZSBzdGF0dXMg cXVvIGlmIHNjb3JlcyBhcmUgZXF1YWwgKi8KKwliZXN0X2NydGMgPSBkZXZfcHJpdi0+ZmJjLmNy dGM7CiAKLQlpZiAoIWNydGMpCi0JCWdvdG8gb3V0X2Rpc2FibGU7CisJZm9yX2VhY2hfaW50ZWxf Y3J0YyhkZXZfcHJpdi0+ZGV2LCBjcnRjKSB7CisJCWlmIChjcnRjLT5mYmMuc2NvcmUgPT0gMCkK KwkJCWNvbnRpbnVlOwogCi0JZmIgPSBjcnRjLT5iYXNlLnByaW1hcnktPmZiOwotCW9iaiA9IHRv X2ludGVsX2ZyYW1lYnVmZmVyKGZiKS0+b2JqOworCQlpZiAoIWJlc3RfY3J0YyB8fCBjcnRjLT5m YmMuc2NvcmUgPiBiZXN0X2NydGMtPmZiYy5zY29yZSkKKwkJCWJlc3RfY3J0YyA9IGNydGM7CisJ fQogCi0JLyogSWYgdGhlIGtlcm5lbCBkZWJ1Z2dlciBpcyBhY3RpdmUsIGFsd2F5cyBkaXNhYmxl IGNvbXByZXNzaW9uICovCi0JaWYgKGluX2RiZ19tYXN0ZXIoKSkKLQkJZ290byBvdXRfZGlzYWJs ZTsKKwlXQVJOX09OKGJlc3RfY3J0YyAmJiBiZXN0X2NydGMtPmZiYy5zY29yZSA9PSAwKTsKIAot CWlmIChpOTE1X2dlbV9zdG9sZW5fc2V0dXBfY29tcHJlc3Npb24oZGV2LCBvYmotPmJhc2Uuc2l6 ZSkpIHsKLQkJaWYgKHNldF9ub19mYmNfcmVhc29uKGRldl9wcml2LCBGQkNfU1RPTEVOX1RPT19T TUFMTCkpCi0JCQlEUk1fREVCVUdfS01TKCJmcmFtZWJ1ZmZlciB0b28gbGFyZ2UsIGRpc2FibGlu ZyBjb21wcmVzc2lvblxuIik7Ci0JCWdvdG8gb3V0X2Rpc2FibGU7Ci0JfQorCWlmICghYmVzdF9j cnRjKQorCQlpZiAoc2V0X25vX2ZiY19yZWFzb24oZGV2X3ByaXYsIEZCQ19VTlNVUFBPUlRFRF9D T05GSUcpKQorCQkJRFJNX0RFQlVHX0tNUygibm8gc3VpdGFibGUgcGxhbmUsIGRpc2FibGluZyBG QkNcbiIpOworCisJcmV0dXJuIGJlc3RfY3J0YzsKK30KIAotCS8qIElmIHRoZSBzY2Fub3V0IGhh cyBub3QgY2hhbmdlZCwgZG9uJ3QgbW9kaWZ5IHRoZSBGQkMgc2V0dGluZ3MuCi0JICogTm90ZSB0 aGF0IHdlIG1ha2UgdGhlIGZ1bmRhbWVudGFsIGFzc3VtcHRpb24gdGhhdCB0aGUgZmItPm9iagot CSAqIGNhbm5vdCBiZSB1bnBpbm5lZCAoYW5kIGhhdmUgaXRzIEdUVCBvZmZzZXQgYW5kIGZlbmNl IHJldm9rZWQpCi0JICogd2l0aG91dCBmaXJzdCBiZWluZyBkZWNvdXBsZWQgZnJvbSB0aGUgc2Nh bm91dCBhbmQgRkJDIGRpc2FibGVkLgorc3RhdGljIHZvaWQgaW50ZWxfZmJjX2Rpc2FibGVfZnVs bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlfX2ludGVsX2ZiY19kaXNhYmxlKGRldl9w cml2LT5mYmMuY3J0Yyk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWk5MTVf Z2VtX3N0b2xlbl9jbGVhbnVwX2NvbXByZXNzaW9uKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYt PnN0cnVjdF9tdXRleCk7Cit9CisKK3ZvaWQgaW50ZWxfZmJjX3NjaGVkdWxlX3VwZGF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmJlc3RfY3J0YzsKKwor CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5mYmMubXV0ZXgpOworCisJYmVzdF9jcnRj ID0gaW50ZWxfZmJjX2Jlc3RfY3J0YyhkZXYpOworCisJaWYgKGJlc3RfY3J0YyA9PSBOVUxMKQor CQlpbnRlbF9mYmNfZGlzYWJsZV9mdWxsKGRldik7CisJZWxzZSBpZiAoYmVzdF9jcnRjICE9IGRl dl9wcml2LT5mYmMuY3J0YykKKwkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPmZiYy51cGRhdGVf d29yayk7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2ZiY19uZWVkX3JlaW5pdChzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBj cnRjLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBjcnRjLT5iYXNlLnByaW1hcnktPmZiOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmogPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYiktPm9iajsKKworCXJldHVybiBjcnRjICE9IGRl dl9wcml2LT5mYmMuY3J0YyB8fAorCQlvYmotPmJhc2Uuc2l6ZSA+IGRldl9wcml2LT5mYmMuc2l6 ZSB8fAorCQlkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKSAhPQorCQlk cm1fZm9ybWF0X3BsYW5lX2NwcChkZXZfcHJpdi0+ZmJjLnBpeGVsX2Zvcm1hdCwgMCkgfHwKKwkJ ZmItPnBpdGNoZXNbMF0gIT0gZGV2X3ByaXYtPmZiYy5waXRjaDsKK30KKwordm9pZCBpbnRlbF9m YmNfcHJlX3BhZ2VfZmxpcChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqYmVzdF9j cnRjOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmY3J0Yy0+YmFzZS5tdXRleC5tdXRleC5iYXNl KTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKworCVdBUk5f T04oY3J0Yy0+ZmJjLnNjb3JlID09IDAgJiYgZGV2X3ByaXYtPmZiYy5jcnRjID09IGNydGMpOwor CisJaW50ZWxfdmJsYW5rX25vdGlmeV9jYW5jZWwoJmNydGMtPmZiYy5ub3RpZnkpOworCWludGVs X2ZiY191cGRhdGVfcGVuZGluZ19zY29yZShjcnRjKTsKKworCS8qCisJICogSWYgZmJjIHdhcyBh bHJlYWR5IHBvc3NpYmxlIHdlIGNhbiB1cGRhdGUgaW1tZWRpYXRlbHksCisJICogb3RoZXJ3aXNl IHdlIHdpbGwgd2FpdCB1bnRpbCB0aGUgZmxpcCBpcyBmaW5pc2hlZC4KKwkgKi8KKwlpZiAoY3J0 Yy0+ZmJjLnNjb3JlICE9IDApCisJCWNydGMtPmZiYy5zY29yZSA9IGNydGMtPmZiYy5wZW5kaW5n X3Njb3JlOworCisJLyoKKwkgKiBEaXNhYmxlIGZiYyBpZiB3ZSdyZSBub3QgKHlldCkgY2FwYWJs ZSwgb3IgaWYKKwkgKiB3ZSBqdXN0IG5lZWQgYSBmdWxsIGRpc2FibGUrZW5hYmxlIHJlaW5pdC4K KwkgKi8KKwlpZiAoY3J0Yy0+ZmJjLnNjb3JlID09IDAgfHwgaW50ZWxfZmJjX25lZWRfcmVpbml0 KGNydGMpKQorCQlfX2ludGVsX2ZiY19kaXNhYmxlKGNydGMpOworCisJYmVzdF9jcnRjID0gaW50 ZWxfZmJjX2Jlc3RfY3J0YyhkZXYpOworCisJLyoKKwkgKiBTaW5jZSB0aGUgY3VycmVudCBjcnRj IGlzIHRoZSBiZXN0LCB3ZSdyZSBnb2luZyB0byB1cGRhdGUKKwkgKiBmYmMub2JqIHRvIHRoZSBj dXJyZW50IGZiICh1c3VhbGx5IGEgYml0IGxhdGVyIHdoZW4gd2UgaGF2ZQorCSAqIHRoZSBwcm90 ZWN0aW9uIG9mIHN0cnVjdF9tdXRleCksIEJlZm9yZSBkb2luZyB0aGF0IGhvd2V2ZXIsCisJICog d2UgbXVzdCBraWNrIG91dCB0aGUgcHJldmlvdXMgb3duZXIuCiAJICovCi0JaWYgKGRldl9wcml2 LT5mYmMuY3J0YyA9PSBjcnRjICYmCi0JICAgIGRldl9wcml2LT5mYmMub2JqID09IG9iaiAmJgot CSAgICBkZXZfcHJpdi0+ZmJjLnBpeGVsX2Zvcm1hdCA9PSBmYi0+cGl4ZWxfZm9ybWF0ICYmCi0J ICAgIGRldl9wcml2LT5mYmMucGl0Y2ggPT0gZmItPnBpdGNoZXNbMF0gJiYKLQkgICAgZGV2X3By aXYtPmZiYy5mZW5jZV9yZWcgPT0gb2JqLT5mZW5jZV9yZWcgJiYKLQkgICAgZGV2X3ByaXYtPmZi Yy55ID09IGNydGMtPmJhc2UueSkKKwlpZiAoY3J0YyA9PSBiZXN0X2NydGMgJiYgY3J0YyAhPSBk ZXZfcHJpdi0+ZmJjLmNydGMpCisJCV9faW50ZWxfZmJjX2Rpc2FibGUoZGV2X3ByaXYtPmZiYy5j cnRjKTsKKworCWlmIChkZXZfcHJpdi0+ZmJjLmNydGMgPT0gY3J0YykgeworCQkvKiBXZSBzdGls bCBoYXZlIGZiYywgc28ganVzdCB1cGRhdGUgdGhlIGZlbmNlLiAqLworCQlpbnRlbF9mYmNfdXBk YXRlX3BhcmFtcyhjcnRjKTsKKwkJZGV2X3ByaXYtPmRpc3BsYXkuZW5hYmxlX2ZiYyhkZXYpOwor CX0KK30KKwordm9pZCBpbnRlbF9mYmNfcG9zdF9wYWdlX2ZsaXAoc3RydWN0IGludGVsX2NydGMg KmNydGMsCisJCQkgICAgICBib29sIHVzZV92Ymxhbmtfbm90aWZ5KQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9jcnRjICpiZXN0X2Ny dGM7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZjcnRjLT5iYXNlLm11dGV4Lm11dGV4LmJhc2Up OworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5mYmMubXV0ZXgpOworCisJV0FSTl9P TihpbnRlbF92Ymxhbmtfbm90aWZ5X3BlbmRpbmcoJmNydGMtPmZiYy5ub3RpZnkpKTsKKworCWJl c3RfY3J0YyA9IGludGVsX2ZiY19iZXN0X2NydGMoZGV2KTsKKworCS8qIGFscmVhZHkgaGFuZGxl ZCBpbiBpbnRlbF9mYmNfcHJlX3BhZ2VmbGlwKCkgKi8KKwlpZiAoY3J0YyA9PSBkZXZfcHJpdi0+ ZmJjLmNydGMpIHsKKwkJV0FSTl9PTihjcnRjLT5mYmMucGVuZGluZ19zY29yZSAhPSBjcnRjLT5m YmMuc2NvcmUgfHwKKwkJCWNydGMgIT0gYmVzdF9jcnRjKTsKIAkJcmV0dXJuOworCX0KIAotCWlm IChpbnRlbF9mYmNfZW5hYmxlZChkZXYpKSB7Ci0JCS8qIFdlIHVwZGF0ZSBGQkMgYWxvbmcgdHdv IHBhdGhzLCBhZnRlciBjaGFuZ2luZyBmYi9jcnRjCi0JCSAqIGNvbmZpZ3VyYXRpb24gKG1vZGVz d2l0Y2hpbmcpIGFuZCBhZnRlciBwYWdlLWZsaXBwaW5nCi0JCSAqIGZpbmlzaGVzLiBGb3IgdGhl IGxhdHRlciwgd2Uga25vdyB0aGF0IG5vdCBvbmx5IGRpZAotCQkgKiB3ZSBkaXNhYmxlIHRoZSBG QkMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYWdlLWZsaXAKLQkJICogc2VxdWVuY2UsIGJ1dCBhbHNv IG1vcmUgdGhhbiBvbmUgdmJsYW5rIGhhcyBwYXNzZWQuCi0JCSAqCi0JCSAqIEZvciB0aGUgZm9y bWVyIGNhc2Ugb2YgbW9kZXN3aXRjaGluZywgaXQgaXMgcG9zc2libGUKLQkJICogdG8gc3dpdGNo IGJldHdlZW4gdHdvIEZCQyB2YWxpZCBjb25maWd1cmF0aW9ucwotCQkgKiBpbnN0YW50YW5lb3Vz bHkgc28gd2UgZG8gbmVlZCB0byBkaXNhYmxlIHRoZSBGQkMKLQkJICogYmVmb3JlIHdlIGNhbiBt b2RpZnkgaXRzIGNvbnRyb2wgcmVnaXN0ZXJzLiBXZSBhbHNvCi0JCSAqIGhhdmUgdG8gd2FpdCBm b3IgdGhlIG5leHQgdmJsYW5rIGZvciB0aGF0IHRvIHRha2UKLQkJICogZWZmZWN0LiBIb3dldmVy LCBzaW5jZSB3ZSBkZWxheSBlbmFibGluZyBGQkMgd2UgY2FuCi0JCSAqIGFzc3VtZSB0aGF0IGEg dmJsYW5rIGhhcyBwYXNzZWQgc2luY2UgZGlzYWJsaW5nIGFuZAotCQkgKiB0aGF0IHdlIGNhbiBz YWZlbHkgYWx0ZXIgdGhlIHJlZ2lzdGVycyBpbiB0aGUgZGVmZXJyZWQKLQkJICogY2FsbGJhY2su Ci0JCSAqCi0JCSAqIEluIHRoZSBzY2VuYXJpbyB0aGF0IHdlIGdvIGZyb20gYSB2YWxpZCB0byBp bnZhbGlkCi0JCSAqIGFuZCB0aGVuIGJhY2sgdG8gdmFsaWQgRkJDIGNvbmZpZ3VyYXRpb24gd2Ug aGF2ZQotCQkgKiBubyBzdHJpY3QgZW5mb3JjZW1lbnQgdGhhdCBhIHZibGFuayBvY2N1cnJlZCBz aW5jZQotCQkgKiBkaXNhYmxpbmcgdGhlIEZCQy4gSG93ZXZlciwgYWxvbmcgYWxsIGN1cnJlbnQg cGlwZQotCQkgKiBkaXNhYmxpbmcgcGF0aHMgd2UgZG8gbmVlZCB0byB3YWl0IGZvciBhIHZibGFu ayBhdAotCQkgKiBzb21lIHBvaW50LiBBbmQgd2Ugd2FpdCBiZWZvcmUgZW5hYmxpbmcgRkJDIGFu eXdheS4KKwlpZiAoY3J0Yy0+ZmJjLnBlbmRpbmdfc2NvcmUgIT0gY3J0Yy0+ZmJjLnNjb3JlKSB7 CisJCWludCByZXQ7CisKKwkJV0FSTl9PTihjcnRjLT5mYmMucGVuZGluZ19zY29yZSA9PSAwIHx8 CisJCQljcnRjLT5mYmMuc2NvcmUgIT0gMCk7CisKKwkJLyogd2lsbCBiZSBoYW5kbGVkIGJ5IGlu dGVsX2ZiY19maW5pc2hfcGFnZV9mbGlwKCkgKi8KKwkJaWYgKCF1c2VfdmJsYW5rX25vdGlmeSkK KwkJCXJldHVybjsKKworCQkvKgorCQkgKiBmYmMgd2Fzbid0IHBvc3NpYmxlIHByZXZpb3N1bHks IHNvIG11c3Qgd2FpdCBmb3IgdGhlCisJCSAqIG5leHQgdmJsYW5rIGJlZm9yZSBmYmMuc2NvcmUg Y2FuIGJlIHVwZGF0ZWQuCiAJCSAqLwotCQlEUk1fREVCVUdfS01TKCJkaXNhYmxpbmcgYWN0aXZl IEZCQyBmb3IgdXBkYXRlXG4iKTsKLQkJaW50ZWxfZGlzYWJsZV9mYmMoZGV2KTsKKwkJY3J0Yy0+ ZmJjLm5vdGlmeS52YmxfY291bnQgPSBpbnRlbF9jcnRjX3ZibF9jb3VudF9yZWxfdG9fYWJzKGNy dGMsIDEpOworCQlyZXQgPSBpbnRlbF92Ymxhbmtfbm90aWZ5X2FkZChjcnRjLCAmY3J0Yy0+ZmJj Lm5vdGlmeSk7CisJCVdBUk5fT04ocmV0ICE9IDApOworCQlyZXR1cm47CiAJfQogCi0JaW50ZWxf ZW5hYmxlX2ZiYygmY3J0Yy0+YmFzZSk7Ci0JZGV2X3ByaXYtPmZiYy5ub19mYmNfcmVhc29uID0g RkJDX09LOwotCXJldHVybjsKKwkvKgorCSAqIElmIHdlJ3JlIHRoZSBiZXN0IGJ1dCBub3QgY3Vy cmVudGx5IGFjdGl2ZSwKKwkgKiBwZXJmb3JtIHRoZSBmdWxsIGZiYyBlbmFibGUuIFdlIGhhdmUg dGhlIGNydGMtPm11dGV4CisJICogc28gbm8gbmVlZCB0byBzY2hlZHVsZSBhIHdvcmsgZm9yIHRo aXMuCisJICogQnV0IG1heWJlIHdlIHdhbnQgdGhlIHdvcmsgYW55d2F5IHRvIGF2b2lkIGRvaW5n CisJICogc28gbXVjaCB3b3JrIGluIHRoZSBwYWdlIGZsaXAgaW9jdGw/CisJICoKKwkgKiBJZiBz b21lb25lIGVsc2UgaXMgYmV0dGVyIHN1aXRlZCBmb3IgdGhlIHRhc2ssCisJICogc2NoZWR1bGUg YSBmdWxsIHVwZGF0ZSB3b3JrLgorCSAqLworCWlmIChiZXN0X2NydGMgPT0gY3J0YykKKwkJaW50 ZWxfZmJjX3NjaGVkdWxlX2VuYWJsZShjcnRjKTsKKwllbHNlCisJCWludGVsX2ZiY19zY2hlZHVs ZV91cGRhdGUoZGV2KTsKK30KKwordm9pZCBpbnRlbF9mYmNfZmluaXNoX3BhZ2VfZmxpcChzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBjcnRjLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisKKwlXQVJOX09OKGludGVsX3ZibGFu a19ub3RpZnlfcGVuZGluZygmY3J0Yy0+ZmJjLm5vdGlmeSkpOwogCi1vdXRfZGlzYWJsZToKLQkv KiBNdWx0aXBsZSBkaXNhYmxlcyBzaG91bGQgYmUgaGFybWxlc3MgKi8KLQlpZiAoaW50ZWxfZmJj X2VuYWJsZWQoZGV2KSkgewotCQlEUk1fREVCVUdfS01TKCJ1bnN1cHBvcnRlZCBjb25maWcsIGRp c2FibGluZyBGQkNcbiIpOwotCQlpbnRlbF9kaXNhYmxlX2ZiYyhkZXYpOworCWlmIChjcnRjLT5m YmMuc2NvcmUgIT0gY3J0Yy0+ZmJjLnBlbmRpbmdfc2NvcmUpIHsKKwkJV0FSTl9PTihjcnRjLT5m YmMucGVuZGluZ19zY29yZSA9PSAwKTsKKwkJY3J0Yy0+ZmJjLnNjb3JlID0gY3J0Yy0+ZmJjLnBl bmRpbmdfc2NvcmU7CisJCXNjaGVkdWxlX3dvcmsoJmRldl9wcml2LT5mYmMudXBkYXRlX3dvcmsp OwogCX0KLQlpOTE1X2dlbV9zdG9sZW5fY2xlYW51cF9jb21wcmVzc2lvbihkZXYpOwogfQogCisv KgorICogVXBkYXRlIGZiYy5wZW5kaW5nX3Njb3JlLCBhbmQgc2NoZWR1bGUgYW4gdXBkYXRlIG9m CisgKiBmYmMuc2NvcmUgZm9yIHRoZSBjcnRjLiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZAor ICogd2hlbiBmYmMgd2Fzbid0IHByZXZpb3N1bHkgcG9zc2libGUsIGllLiBhZnRlcgorICogZW5h YmxpbmcgdGhlIHByaW1hcnkgcGxhbmUuCisgKi8KK3ZvaWQgaW50ZWxfZmJjX3Bvc3RfcGxhbmVf ZW5hYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmY3J0Yy0+YmFzZS5t dXRleC5tdXRleC5iYXNlKTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ZmJjLm11 dGV4KTsKKworCVdBUk5fT04oaW50ZWxfdmJsYW5rX25vdGlmeV9wZW5kaW5nKCZjcnRjLT5mYmMu bm90aWZ5KSk7CisKKwlXQVJOX09OKGNydGMtPmZiYy5zY29yZSAhPSAwIHx8IGRldl9wcml2LT5m YmMuY3J0YyA9PSBjcnRjKTsKKworCWludGVsX2ZiY191cGRhdGVfcGVuZGluZ19zY29yZShjcnRj KTsKKwlpZiAoY3J0Yy0+ZmJjLnBlbmRpbmdfc2NvcmUgIT0gMCkKKwkJaW50ZWxfZmJjX3Bvc3Rf cGFnZV9mbGlwKGNydGMsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9mYmNfdmJsYW5r X25vdGlmeShzdHJ1Y3QgaW50ZWxfdmJsYW5rX25vdGlmeSAqbm90aWZ5KQoreworCXN0cnVjdCBp bnRlbF9jcnRjICpjcnRjID0KKwkJY29udGFpbmVyX29mKG5vdGlmeSwgc3RydWN0IGludGVsX2Ny dGMsIGZiYy5ub3RpZnkpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNy dGMtPmJhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKKworCVdBUk5fT04oY3J0Yy0+ZmJjLnNjb3JlICE9 IDAgfHwKKwkJY3J0Yy0+ZmJjLnNjb3JlID09IGNydGMtPmZiYy5wZW5kaW5nX3Njb3JlKTsKKwor CWNydGMtPmZiYy5zY29yZSA9IGNydGMtPmZiYy5wZW5kaW5nX3Njb3JlOworCXNjaGVkdWxlX3dv cmsoJmRldl9wcml2LT5mYmMudXBkYXRlX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9m YmNfZW5hYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSwgZmJjLmVuYWJsZV93b3JrKTsKKworCW11dGV4X2xvY2soJmRldl9wcml2 LT5mYmMubXV0ZXgpOworCisJaWYgKGRldl9wcml2LT5mYmMuY3J0YyAmJgorCSAgICAhaW50ZWxf cmluZ19ub3RpZnlfcGVuZGluZygmZGV2X3ByaXYtPmZiYy5ub3RpZnkpKQorCQlkZXZfcHJpdi0+ ZGlzcGxheS5lbmFibGVfZmJjKGRldl9wcml2LT5kZXYpOworCisJbXV0ZXhfdW5sb2NrKCZkZXZf cHJpdi0+ZmJjLm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZmJjX3Jpbmdfbm90aWZ5 KHN0cnVjdCBpbnRlbF9yaW5nX25vdGlmeSAqbm90aWZ5KQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9CisJCWNvbnRhaW5lcl9vZihub3RpZnksIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlLCBmYmMubm90aWZ5KTsKKworCXNjaGVkdWxlX3dvcmsoJmRldl9wcml2LT5mYmMu ZW5hYmxlX3dvcmspOworfQorCit2b2lkIGludGVsX2ZiY19jcnRjX2luaXQoc3RydWN0IGludGVs X2NydGMgKmNydGMpCit7CisJY3J0Yy0+ZmJjLm5vdGlmeS5ub3RpZnkgPSBpbnRlbF9mYmNfdmJs YW5rX25vdGlmeTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZmJjX3VwZGF0ZV93b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsIGZiYy51 cGRhdGVfd29yayk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJ c3RydWN0IGludGVsX2NydGMgKmNydGMsICpiZXN0X2NydGM7CisKKwlpZiAoaW5fZGJnX21hc3Rl cigpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwor CWNydGMgPSBpbnRlbF9mYmNfYmVzdF9jcnRjKGRldik7CisKKwlpZiAoY3J0YyA9PSBOVUxMKQor CQlpbnRlbF9mYmNfZGlzYWJsZV9mdWxsKGRldik7CisJZWxzZSBpZiAoY3J0YyA9PSBkZXZfcHJp di0+ZmJjLmNydGMpCisJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwkJY3J0YyA9IE5VTEw7CisKKwlt dXRleF91bmxvY2soJmRldl9wcml2LT5mYmMubXV0ZXgpOworCisJaWYgKCFjcnRjKQorCQlyZXR1 cm47CisKKwlkcm1fbW9kZXNldF9sb2NrKCZjcnRjLT5iYXNlLm11dGV4LCBOVUxMKTsKKwltdXRl eF9sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKworCS8qIGNoZWNrIHRoYXQgdGhpbmdzIGRp ZG4ndCBjaGFuZ2Ugd2hlbiB3ZSBkcm9wcGVkIGZiYy5tdXRleCAqLworCWJlc3RfY3J0YyA9IGlu dGVsX2ZiY19iZXN0X2NydGMoZGV2KTsKKwlpZiAoY3J0YyA9PSBiZXN0X2NydGMgJiYgY3J0YyAh PSBkZXZfcHJpdi0+ZmJjLmNydGMpCisJCWludGVsX2ZiY19zY2hlZHVsZV9lbmFibGUoY3J0Yyk7 CisKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5mYmMubXV0ZXgpOworCWRybV9tb2Rlc2V0X3Vu bG9jaygmY3J0Yy0+YmFzZS5tdXRleCk7Cit9CisKKy8qIHRvIGJlIGNhbGxlZCBiZWZvcmUgY3J0 YyBpbml0ICovCiB2b2lkIGludGVsX2ZiY19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK IAogCWRldl9wcml2LT5mYmMuZmVuY2VfcmVnID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKKworCW11 dGV4X2luaXQoJmRldl9wcml2LT5mYmMubXV0ZXgpOworCWRldl9wcml2LT5mYmMubm90aWZ5Lm5v dGlmeSA9IGludGVsX2ZiY19yaW5nX25vdGlmeTsKKwlJTklUX1dPUksoJmRldl9wcml2LT5mYmMu ZW5hYmxlX3dvcmssIGludGVsX2ZiY19lbmFibGVfd29yayk7CisJSU5JVF9XT1JLKCZkZXZfcHJp di0+ZmJjLnVwZGF0ZV93b3JrLCBpbnRlbF9mYmNfdXBkYXRlX3dvcmspOworfQorCisvKiB0byBi ZSBjYWxsZWQgYWZ0ZXIgYWxsIGNydGNzIGFyZSBkaXNhYmxlZCAqLwordm9pZCBpbnRlbF9mYmNf Y2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmNy dGM7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwlmb3JfZWFjaF9pbnRl bF9jcnRjKGRldiwgY3J0YykKKwkJaW50ZWxfZmJjX2Rpc2FibGUoY3J0Yyk7CisJbXV0ZXhfdW5s b2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwljYW5jZWxfd29ya19zeW5jKCZkZXZfcHJpdi0+ ZmJjLnVwZGF0ZV93b3JrKTsKKworCWludGVsX3Jpbmdfbm90aWZ5X2NhbmNlbCgmZGV2X3ByaXYt PmZiYy5ub3RpZnkpOworCWNhbmNlbF93b3JrX3N5bmMoJmRldl9wcml2LT5mYmMuZW5hYmxlX3dv cmspOworCisJV0FSTl9PTihkZXZfcHJpdi0+ZmJjLmNydGMgIT0gTlVMTCk7CisKKwltdXRleF9s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaTkxNV9nZW1fc3RvbGVuX2NsZWFudXBfY29tcHJl c3Npb24oZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIH0KIAogc3Rh dGljIHZvaWQgaTkxNV9waW5ldmlld19nZXRfbWVtX2ZyZXEoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKQEAgLTY4MDgsNiArNzAzMSw4IEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7CiAKKwltdXRleF9pbml0KCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwogCWlm IChIQVNfRkJDKGRldikpIHsKIAkJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDcpIHsKIAkJ CWRldl9wcml2LT5kaXNwbGF5LmZiY19lbmFibGVkID0gaXJvbmxha2VfZmJjX2VuYWJsZWQ7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCmluZGV4IGUwNGNhNWQuLjQ1MDliZGEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCkBAIC02ODgsNiArNjg4LDcgQEAgc3RhdGljIHZv aWQKIGludGVsX3Bvc3RfZW5hYmxlX3ByaW1hcnkoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewog CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAKIAkvKgpAQCAtNjk4LDkgKzY5OSw5 IEBAIGludGVsX3Bvc3RfZW5hYmxlX3ByaW1hcnkoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCSAq LwogCWhzd19lbmFibGVfaXBzKGludGVsX2NydGMpOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1 Y3RfbXV0ZXgpOwotCWludGVsX3VwZGF0ZV9mYmMoZGV2KTsKLQltdXRleF91bmxvY2soJmRldi0+ c3RydWN0X211dGV4KTsKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwlpbnRl bF9mYmNfcG9zdF9wbGFuZV9lbmFibGUoaW50ZWxfY3J0Yyk7CisJbXV0ZXhfdW5sb2NrKCZkZXZf cHJpdi0+ZmJjLm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTcxMCwxMCArNzExLDEwIEBA IGludGVsX3ByZV9kaXNhYmxlX3ByaW1hcnkoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0 IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwogCi0JbXV0ZXhf bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWlmIChkZXZfcHJpdi0+ZmJjLmNydGMgPT0gaW50 ZWxfY3J0YykKLQkJaW50ZWxfZGlzYWJsZV9mYmMoZGV2KTsKLQltdXRleF91bmxvY2soJmRldi0+ c3RydWN0X211dGV4KTsKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKKwlpbnRl bF9mYmNfZGlzYWJsZShpbnRlbF9jcnRjKTsKKwlpbnRlbF9mYmNfc2NoZWR1bGVfdXBkYXRlKGRl dik7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZmJjLm11dGV4KTsKIAogCS8qCiAJICogRklY TUUgSVBTIHNob3VsZCBiZSBmaW5lIGFzIGxvbmcgYXMgb25lIHBsYW5lIGlzCi0tIAoxLjguNS41 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=