From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH 6/6] drm/i915: Rework intel_crtc_page_flip to be almost atomic. Date: Wed, 23 Mar 2016 14:24:32 +0100 Message-ID: <1458739472-6582-7-git-send-email-maarten.lankhorst@linux.intel.com> References: <1458739472-6582-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 [IPv6:2a02:2308::216:3eff:fe92:dfa3]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8F6BE6E856 for ; Wed, 23 Mar 2016 13:24:39 +0000 (UTC) In-Reply-To: <1458739472-6582-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 List-Id: intel-gfx@lists.freedesktop.org Q3JlYXRlIGEgd29yayBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGFsbCBjaGFuZ2Vz LiBUaGlzIHdpbGwKYmUgdXNlZCBsYXRlciBvbiBpbiB0aGUgYXRvbWljIGNvbW1pdCBmdW5jdGlv bi4KClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBs aW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMg IHwgIDM3ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCA2NjEgKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rydi5oICAgICB8ICAxMyArLQogMyBmaWxlcyBjaGFuZ2VkLCA0MjQgaW5zZXJ0aW9ucygr KSwgMjg3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXgg MWY5Y2JlODMyODVlLi45Yjc0MGQ4YTNmNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdm cy5jCkBAIC01NjQsMzAgKzU2NCw0MyBAQCBzdGF0aWMgdm9pZCBpOTE1X2R1bXBfcGFnZWZsaXAo c3RydWN0IHNlcV9maWxlICptLAogCQkJICAgICAgIHN0cnVjdCBpbnRlbF9mbGlwX3dvcmsgKndv cmspCiB7CiAJY29uc3QgY2hhciBwaXBlID0gcGlwZV9uYW1lKGNydGMtPnBpcGUpOwotCWNvbnN0 IGNoYXIgcGxhbmUgPSBwbGFuZV9uYW1lKGNydGMtPnBsYW5lKTsKIAl1MzIgcGVuZGluZzsKIAl1 MzIgYWRkcjsKKwlpbnQgaTsKIAogCXBlbmRpbmcgPSBhdG9taWNfcmVhZCgmd29yay0+cGVuZGlu Zyk7CiAJaWYgKHBlbmRpbmcgPT0gSU5URUxfRkxJUF9JTkFDVElWRSkgewogCQlzZXFfcHJpbnRm KG0sICJGbGlwIGlvY3RsIHByZXBhcmluZyBvbiBwaXBlICVjIChwbGFuZSAlYylcbiIsCi0JCQkg ICBwaXBlLCBwbGFuZSk7CisJCQkgICBwaXBlLCBwbGFuZV9uYW1lKGNydGMtPnBsYW5lKSk7CiAJ fSBlbHNlIHsKIAkJc2VxX3ByaW50ZihtLCAiRmxpcCBwZW5kaW5nICh3YWl0aW5nIGZvciB2c3lu Yykgb24gcGlwZSAlYyAocGxhbmUgJWMpXG4iLAotCQkJICAgcGlwZSwgcGxhbmUpOworCQkJICAg cGlwZSwgcGxhbmVfbmFtZShjcnRjLT5wbGFuZSkpOwogCX0KLQlpZiAod29yay0+ZmxpcF9xdWV1 ZWRfcmVxKSB7Ci0JCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9Ci0JCQlpOTE1X2dl bV9yZXF1ZXN0X2dldF9lbmdpbmUod29yay0+ZmxpcF9xdWV1ZWRfcmVxKTsKIAotCQlzZXFfcHJp bnRmKG0sICJGbGlwIHF1ZXVlZCBvbiAlcyBhdCBzZXFubyAleCwgbmV4dCBzZXFubyAleCBbY3Vy cmVudCBicmVhZGNydW1iICV4XSwgY29tcGxldGVkPyAlZFxuIiwKKworCWZvciAoaSA9IDA7IGkg PCB3b3JrLT5udW1fcGxhbmVzOyBpKyspIHsKKwkJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpv bGRfcGxhbmVfc3RhdGUgPSB3b3JrLT5vbGRfcGxhbmVfc3RhdGVbaV07CisJCXN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lID0gb2xkX3BsYW5lX3N0YXRlLT5iYXNlLnBsYW5lOworCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSA9IG9sZF9wbGFuZV9zdGF0ZS0+d2FpdF9yZXE7CisJCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCQlzZXFfcHJpbnRmKG0sICJbUExBTkU6 JWldIHBhcnQgb2YgZmxpcC5cbiIsIHBsYW5lLT5iYXNlLmlkKTsKKworCQlpZiAoIXJlcSkgewor CQkJc2VxX3ByaW50ZihtLCAiUGxhbmUgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgZW5naW5lXG4i KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZW5naW5lID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRf ZW5naW5lKHJlcSk7CisKKwkJc2VxX3ByaW50ZihtLCAiUGxhbmUgYmxvY2tlZCBvbiAlcyBhdCBz ZXFubyAleCwgbmV4dCBzZXFubyAleCBbY3VycmVudCBicmVhZGNydW1iICV4XSwgY29tcGxldGVk PyAlZFxuIiwKIAkJCSAgIGVuZ2luZS0+bmFtZSwKLQkJCSAgIGk5MTVfZ2VtX3JlcXVlc3RfZ2V0 X3NlcW5vKHdvcmstPmZsaXBfcXVldWVkX3JlcSksCisJCQkgICBpOTE1X2dlbV9yZXF1ZXN0X2dl dF9zZXFubyhyZXEpLAogCQkJICAgZGV2X3ByaXYtPm5leHRfc2Vxbm8sCiAJCQkgICBlbmdpbmUt PmdldF9zZXFubyhlbmdpbmUsIHRydWUpLAotCQkJICAgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0 ZWQod29yay0+ZmxpcF9xdWV1ZWRfcmVxLCB0cnVlKSk7Ci0JfSBlbHNlCi0JCXNlcV9wcmludGYo bSwgIkZsaXAgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgZW5naW5lXG4iKTsKKwkJCSAgIGk5MTVf Z2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgdHJ1ZSkpOworCX0KKwogCXNlcV9wcmludGYobSwg IkZsaXAgcXVldWVkIG9uIGZyYW1lICVkLCAod2FzIHJlYWR5IG9uIGZyYW1lICVkKSwgbm93ICVk XG4iLAogCQkgICB3b3JrLT5mbGlwX3F1ZXVlZF92YmxhbmssCiAJCSAgIHdvcmstPmZsaXBfcmVh ZHlfdmJsYW5rLApAQCAtNjAwLDcgKzYxMyw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHVtcF9wYWdl ZmxpcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCWFkZHIgPSBJOTE1X1JFQUQoRFNQQUREUihjcnRj LT5wbGFuZSkpOwogCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2Nhbm91dCBhZGRyZXNzIDB4JTA4 eFxuIiwgYWRkcik7CiAKLQlpZiAod29yay0+cGVuZGluZ19mbGlwX29iaikgeworCWlmICh3b3Jr LT5mbGlwX3F1ZXVlZF9yZXEpIHsKIAkJc2VxX3ByaW50ZihtLCAiTmV3IGZyYW1lYnVmZmVyIGFk ZHJlc3MgMHglMDhseFxuIiwgKGxvbmcpd29yay0+Z3R0X29mZnNldCk7CiAJCXNlcV9wcmludGYo bSwgIk1NSU8gdXBkYXRlIGNvbXBsZXRlZD8gJWRcbiIsICBhZGRyID09IHdvcmstPmd0dF9vZmZz ZXQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCA4YWYxZGRiZDM1 NDkuLjViMDliNDVjNTRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAt NDksNyArNDksNyBAQAogCiBzdGF0aWMgYm9vbCBpc19tbWlvX3dvcmsoc3RydWN0IGludGVsX2Zs aXBfd29yayAqd29yaykKIHsKLQlyZXR1cm4gd29yay0+bW1pb193b3JrLmZ1bmM7CisJcmV0dXJu ICF3b3JrLT5mbGlwX3F1ZXVlZF9yZXE7CiB9CiAKIC8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBm b3IgZ2VuIDw9IDMgKi8KQEAgLTI1NDksMjAgKzI1NDksNiBAQCBvdXRfdW5yZWZfb2JqOgogCXJl dHVybiBmYWxzZTsKIH0KIAotLyogVXBkYXRlIHBsYW5lLT5zdGF0ZS0+ZmIgdG8gbWF0Y2ggcGxh bmUtPmZiIGFmdGVyIGRyaXZlci1pbnRlcm5hbCB1cGRhdGVzICovCi1zdGF0aWMgdm9pZAotdXBk YXRlX3N0YXRlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQotewotCWlmIChwbGFuZS0+ZmIg PT0gcGxhbmUtPnN0YXRlLT5mYikKLQkJcmV0dXJuOwotCi0JaWYgKHBsYW5lLT5zdGF0ZS0+ZmIp Ci0JCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShwbGFuZS0+c3RhdGUtPmZiKTsKLQlwbGFu ZS0+c3RhdGUtPmZiID0gcGxhbmUtPmZiOwotCWlmIChwbGFuZS0+c3RhdGUtPmZiKQotCQlkcm1f ZnJhbWVidWZmZXJfcmVmZXJlbmNlKHBsYW5lLT5zdGF0ZS0+ZmIpOwotfQotCiBzdGF0aWMgdm9p ZAogaW50ZWxfZmluZF9pbml0aWFsX3BsYW5lX29iaihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YywKIAkJCSAgICAgc3RydWN0IGludGVsX2luaXRpYWxfcGxhbmVfY29uZmlnICpwbGFuZV9j b25maWcpCkBAIC0zODM3LDggKzM4MjMsOCBAQCBib29sIGludGVsX2hhc19wZW5kaW5nX2ZiX3Vu cGluKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiBzdGF0aWMgdm9pZCBwYWdlX2ZsaXBfY29tcGxl dGVkKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLCBzdHJ1Y3QgaW50ZWxfZmxpcF93b3Jr ICp3b3JrKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo aW50ZWxfY3J0Yy0+YmFzZS5kZXYpOwotCi0JbGlzdF9kZWxfaW5pdCgmd29yay0+aGVhZCk7CisJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3BsYW5lX3N0YXRlOworCXN0cnVjdCBkcm1fcGxh bmUgKnByaW1hcnkgPSBpbnRlbF9jcnRjLT5iYXNlLnByaW1hcnk7CiAKIAlpZiAod29yay0+ZXZl bnQpCiAJCWRybV9zZW5kX3ZibGFua19ldmVudChpbnRlbF9jcnRjLT5iYXNlLmRldiwKQEAgLTM4 NDcsMTEgKzM4MzMsMTkgQEAgc3RhdGljIHZvaWQgcGFnZV9mbGlwX2NvbXBsZXRlZChzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0Yywgc3RydWN0IGludGVsX2ZsaXAKIAogCWRybV9jcnRjX3Zi bGFua19wdXQoJmludGVsX2NydGMtPmJhc2UpOwogCi0Jd2FrZV91cF9hbGwoJmRldl9wcml2LT5w ZW5kaW5nX2ZsaXBfcXVldWUpOwotCXF1ZXVlX3dvcmsoZGV2X3ByaXYtPndxLCAmd29yay0+dW5w aW5fd29yayk7CisJbmV3X3BsYW5lX3N0YXRlID0gJndvcmstPm9sZF9wbGFuZV9zdGF0ZVswXS0+ YmFzZTsKKwlpZiAod29yay0+bnVtX3BsYW5lcyA+PSAxICYmCisJICAgIG5ld19wbGFuZV9zdGF0 ZS0+cGxhbmUgPT0gcHJpbWFyeSAmJgorCSAgICBuZXdfcGxhbmVfc3RhdGUtPmZiKQorCQl0cmFj ZV9pOTE1X2ZsaXBfY29tcGxldGUoaW50ZWxfY3J0Yy0+cGxhbmUsCisJCQkJCSBpbnRlbF9mYl9v YmoobmV3X3BsYW5lX3N0YXRlLT5mYikpOwogCi0JdHJhY2VfaTkxNV9mbGlwX2NvbXBsZXRlKGlu dGVsX2NydGMtPnBsYW5lLAotCQkJCSB3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqKTsKKwlpZiAod29y ay0+Y2FuX2FzeW5jX3VucGluKSB7CisJCWxpc3RfZGVsX2luaXQoJndvcmstPmhlYWQpOworCQl3 YWtlX3VwX2FsbCgmZGV2X3ByaXYtPnBlbmRpbmdfZmxpcF9xdWV1ZSk7CisJfQorCisJcXVldWVf d29yayhkZXZfcHJpdi0+d3EsICZ3b3JrLT51bnBpbl93b3JrKTsKIH0KIAogc3RhdGljIGludCBp bnRlbF9jcnRjX3dhaXRfZm9yX3BlbmRpbmdfZmxpcHMoc3RydWN0IGRybV9jcnRjICpjcnRjKQpA QCAtMzg3Nyw3ICszODcxLDkgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3dhaXRfZm9yX3BlbmRp bmdfZmxpcHMoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQlzcGluX2xvY2tfaXJxKCZkZXYtPmV2 ZW50X2xvY2spOwogCQl3b3JrID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZpbnRlbF9jcnRj LT5mbGlwX3dvcmssCiAJCQkJCQlzdHJ1Y3QgaW50ZWxfZmxpcF93b3JrLCBoZWFkKTsKLQkJaWYg KHdvcmsgJiYgIWlzX21taW9fd29yayh3b3JrKSkgeworCisJCWlmICh3b3JrICYmICFpc19tbWlv X3dvcmsod29yaykgJiYKKwkJICAgICF3b3JrX2J1c3koJndvcmstPnVucGluX3dvcmspKSB7CiAJ CQlXQVJOX09OQ0UoMSwgIlJlbW92aW5nIHN0dWNrIHBhZ2UgZmxpcFxuIik7CiAJCQlwYWdlX2Zs aXBfY29tcGxldGVkKGludGVsX2NydGMsIHdvcmspOwogCQl9CkBAIC0xMDgwNiwzMSArMTA4MDIs MTA1IEBAIHN0YXRpYyB2b2lkIGludGVsX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCiAJa2ZyZWUoaW50ZWxfY3J0Yyk7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfcG9z dF9mbGlwX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfZmxpcF93b3JrICp3b3JrLAorCQkJCQlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUg PSB3b3JrLT5uZXdfY3J0Y19zdGF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9 IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwlpZiAoY3J0Y19zdGF0ZS0+ZGlzYWJsZV9jeHNyKQor CQlpbnRlbF9jcnRjLT53bS5jeHNyX2FsbG93ZWQgPSB0cnVlOworCisJaWYgKGNydGNfc3RhdGUt PnVwZGF0ZV93bV9wb3N0ICYmIGNydGNfc3RhdGUtPmJhc2UuYWN0aXZlKQorCQlpbnRlbF91cGRh dGVfd2F0ZXJtYXJrcyhjcnRjKTsKKworCWlmICh3b3JrLT5udW1fcGxhbmVzID4gMCAmJgorCSAg ICB3b3JrLT5vbGRfcGxhbmVfc3RhdGVbMF0tPmJhc2UucGxhbmUgPT0gY3J0Yy0+cHJpbWFyeSkg eworCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0KKwkJCXdvcmstPm5l d19wbGFuZV9zdGF0ZVswXTsKKworCQlpZiAocGxhbmVfc3RhdGUtPnZpc2libGUgJiYKKwkJICAg IChuZWVkc19tb2Rlc2V0KCZjcnRjX3N0YXRlLT5iYXNlKSB8fAorCQkgICAgICF3b3JrLT5vbGRf cGxhbmVfc3RhdGVbMF0tPnZpc2libGUpKQorCQkJaW50ZWxfcG9zdF9lbmFibGVfcHJpbWFyeShj cnRjKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGludGVsX3VucGluX3dvcmtfZm4oc3RydWN0IHdv cmtfc3RydWN0ICpfX3dvcmspCiB7CiAJc3RydWN0IGludGVsX2ZsaXBfd29yayAqd29yayA9CiAJ CWNvbnRhaW5lcl9vZihfX3dvcmssIHN0cnVjdCBpbnRlbF9mbGlwX3dvcmssIHVucGluX3dvcmsp OwotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0Yyh3b3JrLT5jcnRjKTsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9w bGFuZSAqcHJpbWFyeSA9IGNydGMtPmJhc2UucHJpbWFyeTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNy dGMgPSB3b3JrLT5vbGRfY3J0Y19zdGF0ZS0+YmFzZS5jcnRjOworCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CiAKLQlpZiAoaXNfbW1pb193b3JrKHdvcmspKQotCQlm bHVzaF93b3JrKCZ3b3JrLT5tbWlvX3dvcmspOworCWlmICh3b3JrLT5mYl9iaXRzKQorCQlpbnRl bF9mcm9udGJ1ZmZlcl9mbGlwX2NvbXBsZXRlKGRldiwgd29yay0+ZmJfYml0cyk7CiAKLQltdXRl eF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JaW50ZWxfdW5waW5fZmJfb2JqKHdvcmstPm9s ZF9mYiwgcHJpbWFyeS0+c3RhdGUtPnJvdGF0aW9uKTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVy ZW5jZSgmd29yay0+cGVuZGluZ19mbGlwX29iai0+YmFzZSk7CisJLyoKKwkgKiBVbmxlc3Mgd29y ay0+Y2FuX2FzeW5jX3VucGluIGlzIGZhbHNlLCB0aGVyZSdzIG5vIHdheSB0byBlbnN1cmUKKwkg KiB0aGF0IHdvcmstPm5ld19jcnRjX3N0YXRlIGNvbnRhaW5zIHZhbGlkIG1lbW9yeSBkdXJpbmcg dW5waW4KKwkgKiBiZWNhdXNlIGludGVsX2F0b21pY19jb21taXQgbWF5IGZyZWUgaXQgYmVmb3Jl IHRoaXMgcnVucy4KKwkgKi8KKwlpZiAoIXdvcmstPmNhbl9hc3luY191bnBpbikKKwkJaW50ZWxf Y3J0Y19wb3N0X2ZsaXBfdXBkYXRlKHdvcmssIGNydGMpOworCisJaWYgKHdvcmstPmZiX2JpdHMg JiB0b19pbnRlbF9wbGFuZShjcnRjLT5wcmltYXJ5KS0+ZnJvbnRidWZmZXJfYml0KQorCQlpbnRl bF9mYmNfcG9zdF91cGRhdGUoaW50ZWxfY3J0Yyk7CisKKwlpZiAod29yay0+cHV0X3Bvd2VyX2Rv bWFpbnMpCisJCW1vZGVzZXRfcHV0X3Bvd2VyX2RvbWFpbnMoZGV2X3ByaXYsIHdvcmstPnB1dF9w b3dlcl9kb21haW5zKTsKKworCS8qIE1ha2Ugc3VyZSBtbWlvIHdvcmsgaXMgY29tcGxldGVseSBm aW5pc2hlZCBiZWZvcmUgZnJlZWluZyBhbGwgc3RhdGUgaGVyZS4gKi8KKwlmbHVzaF93b3JrKCZ3 b3JrLT5tbWlvX3dvcmspOworCisJaWYgKCF3b3JrLT5jYW5fYXN5bmNfdW5waW4gfHwgIWxpc3Rf ZW1wdHkoJndvcmstPmhlYWQpKSB7CisJCXNwaW5fbG9ja19pcnEoJmRldi0+ZXZlbnRfbG9jayk7 CisJCVdBUk4obGlzdF9lbXB0eSgmd29yay0+aGVhZCkgIT0gd29yay0+Y2FuX2FzeW5jX3VucGlu LAorCQkgICAgICJbQ1JUQzolaV0gUGluIHdvcmsgJXAgYXN5bmMgJWkgd2l0aCAlaSBwbGFuZXMs IGFjdGl2ZSAlaSAtPiAlaSBtcyAlaVxuIiwKKwkJICAgICBjcnRjLT5iYXNlLmlkLCB3b3JrLCB3 b3JrLT5jYW5fYXN5bmNfdW5waW4sIHdvcmstPm51bV9wbGFuZXMsCisJCSAgICAgd29yay0+b2xk X2NydGNfc3RhdGUtPmJhc2UuYWN0aXZlLCB3b3JrLT5uZXdfY3J0Y19zdGF0ZS0+YmFzZS5hY3Rp dmUsCisJCSAgICAgbmVlZHNfbW9kZXNldCgmd29yay0+bmV3X2NydGNfc3RhdGUtPmJhc2UpKTsK KworCQlpZiAoIWxpc3RfZW1wdHkoJndvcmstPmhlYWQpKQorCQkJbGlzdF9kZWwoJndvcmstPmhl YWQpOworCisJCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+cGVuZGluZ19mbGlwX3F1ZXVlKTsKKwkJ c3Bpbl91bmxvY2tfaXJxKCZkZXYtPmV2ZW50X2xvY2spOworCX0KIAogCWlmICh3b3JrLT5mbGlw X3F1ZXVlZF9yZXEpCi0JCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZ3b3JrLT5mbGlwX3F1ZXVl ZF9yZXEsIE5VTEwpOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlpOTE1 X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlX191bmxvY2tlZCh3b3JrLT5mbGlwX3F1ZXVlZF9yZXEp OworCisJZm9yIChpID0gMDsgaSA8IHdvcmstPm51bV9wbGFuZXM7IGkrKykgeworCQlzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSA9CisJCQl3b3JrLT5vbGRfcGxhbmVf c3RhdGVbaV07CisJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYiA9IG9sZF9wbGFuZV9z dGF0ZS0+YmFzZS5mYjsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBvbGRfcGxhbmVfc3Rh dGUtPmJhc2UucGxhbmU7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwogCi0J aW50ZWxfZnJvbnRidWZmZXJfZmxpcF9jb21wbGV0ZShkZXYsIHRvX2ludGVsX3BsYW5lKHByaW1h cnkpLT5mcm9udGJ1ZmZlcl9iaXQpOwotCWludGVsX2ZiY19wb3N0X3VwZGF0ZShjcnRjKTsKLQlk cm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2Uod29yay0+b2xkX2ZiKTsKKwkJcmVxID0gb2xkX3Bs YW5lX3N0YXRlLT53YWl0X3JlcTsKKwkJb2xkX3BsYW5lX3N0YXRlLT53YWl0X3JlcSA9IE5VTEw7 CisJCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2VfX3VubG9ja2VkKHJlcSk7CiAKLQlCVUdf T04oYXRvbWljX3JlYWQoJmNydGMtPnVucGluX3dvcmtfY291bnQpID09IDApOwotCWF0b21pY19k ZWMoJmNydGMtPnVucGluX3dvcmtfY291bnQpOworCQlmZW5jZV9wdXQob2xkX3BsYW5lX3N0YXRl LT5iYXNlLmZlbmNlKTsKKwkJb2xkX3BsYW5lX3N0YXRlLT5iYXNlLmZlbmNlID0gTlVMTDsKKwor CQlpZiAob2xkX2ZiICYmCisJCSAgICAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfQ1VS U09SIHx8CisJCSAgICAgIUlOVEVMX0lORk8oZGV2X3ByaXYpLT5jdXJzb3JfbmVlZHNfcGh5c2lj YWwpKSB7CisJCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQlpbnRlbF91bnBp bl9mYl9vYmoob2xkX2ZiLCBvbGRfcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb24pOworCQkJbXV0 ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCX0KKworCQlpbnRlbF9wbGFuZV9kZXN0 cm95X3N0YXRlKHBsYW5lLCAmb2xkX3BsYW5lX3N0YXRlLT5iYXNlKTsKKwl9CisKKwlpZiAoIVdB Uk5fT04oYXRvbWljX3JlYWQoJmludGVsX2NydGMtPnVucGluX3dvcmtfY291bnQpID09IDApKQor CQlhdG9taWNfZGVjKCZpbnRlbF9jcnRjLT51bnBpbl93b3JrX2NvdW50KTsKIAogCWtmcmVlKHdv cmspOwogfQpAQCAtMTA5MTAsNyArMTA5ODAsNyBAQCBzdGF0aWMgdm9pZCBkb19pbnRlbF9maW5p c2hfcGFnZV9mbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAKIAlpZiAod29yayA9PSBOVUxM IHx8CiAJICAgIGF0b21pY19yZWFkKCZ3b3JrLT5wZW5kaW5nKSA9PSBJTlRFTF9GTElQX0lOQUNU SVZFIHx8Ci0JICAgICFwYWdlX2ZsaXBfZmluaXNoZWQoaW50ZWxfY3J0Yywgd29yaykpIHsKKwkg ICAgIXBhZ2VfZmxpcF9maW5pc2hlZChpbnRlbF9jcnRjLCB3b3JrKSB8fCB3b3JrX2J1c3koJndv cmstPnVucGluX3dvcmspKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRf bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQpAQCAtMTA5MzYsMTUgKzExMDA2LDYgQEAgdm9p ZCBpbnRlbF9maW5pc2hfcGFnZV9mbGlwX3BsYW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGlu dCBwbGFuZSkKIAlkb19pbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgY3J0Yyk7CiB9CiAKLXN0 YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9tYXJrX3BhZ2VfZmxpcF9hY3RpdmUoc3RydWN0IGludGVs X2ZsaXBfd29yayAqd29yaykKLXsKLQkvKiBFbnN1cmUgdGhhdCB0aGUgd29yayBpdGVtIGlzIGNv bnNpc3RlbnQgd2hlbiBhY3RpdmF0aW5nIGl0IC4uLiAqLwotCXNtcF93bWIoKTsKLQlhdG9taWNf c2V0KCZ3b3JrLT5wZW5kaW5nLCBJTlRFTF9GTElQX1BFTkRJTkcpOwotCS8qIGFuZCB0aGF0IGl0 IGlzIG1hcmtlZCBhY3RpdmUgYXMgc29vbiBhcyB0aGUgaXJxIGNvdWxkIGZpcmUuICovCi0Jc21w X3dtYigpOwotfQotCiBzdGF0aWMgaW50IGludGVsX2dlbjJfcXVldWVfZmxpcChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJIHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLApAQCAtMTExNzYsNzIgKzExMjM3LDIwMSBAQCBzdGF0aWMgaW50 IGludGVsX2dlbjdfcXVldWVfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXJldHVybiAw OwogfQogCi1zdGF0aWMgYm9vbCB1c2VfbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKLQkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3N0YXRpYyBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVsX2dldF9mbGlwX2VuZ2luZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JLyoKLQkgKiBU aGlzIGlzIG5vdCBiZWluZyB1c2VkIGZvciBvbGRlciBwbGF0Zm9ybXMsIGJlY2F1c2UKLQkgKiBu b24tYXZhaWxhYmlsaXR5IG9mIGZsaXAgZG9uZSBpbnRlcnJ1cHQgZm9yY2VzIHVzIHRvIHVzZQot CSAqIENTIGZsaXBzLiBPbGRlciBwbGF0Zm9ybXMgZGVyaXZlIGZsaXAgZG9uZSB1c2luZyBzb21l IGNsZXZlcgotCSAqIHRyaWNrcyBpbnZvbHZpbmcgdGhlIGZsaXBfcGVuZGluZyBzdGF0dXMgYml0 cyBhbmQgdmJsYW5rIGlycXMuCi0JICogU28gdXNpbmcgTU1JTyBmbGlwcyB0aGVyZSB3b3VsZCBk aXNydXB0IHRoaXMgbWVjaGFuaXNtLgotCSAqLworCWlmIChJU19WQUxMRVlWSUVXKGRldikgfHwg SVNfSVZZQlJJREdFKGRldikgfHwgSVNfSEFTV0VMTChkZXYpKQorCQlyZXR1cm4gJmRldl9wcml2 LT5lbmdpbmVbQkNTXTsKIAotCWlmIChlbmdpbmUgPT0gTlVMTCkKLQkJcmV0dXJuIHRydWU7CisJ aWYgKGRldl9wcml2LT5pbmZvLmdlbiA+PSA3KSB7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZTsKIAotCWlmIChpOTE1LnVzZV9tbWlvX2ZsaXAgPCAwKQorCQllbmdpbmUgPSBpOTE1 X2dlbV9yZXF1ZXN0X2dldF9lbmdpbmUob2JqLT5sYXN0X3dyaXRlX3JlcSk7CisJCWlmIChlbmdp bmUgJiYgZW5naW5lLT5pZCA9PSBSQ1MpCisJCQlyZXR1cm4gZW5naW5lOworCisJCXJldHVybiAm ZGV2X3ByaXYtPmVuZ2luZVtCQ1NdOworCX0gZWxzZQorCQlyZXR1cm4gJmRldl9wcml2LT5lbmdp bmVbUkNTXTsKK30KKworc3RhdGljIGJvb2wKK2ZsaXBfZmJfY29tcGF0aWJsZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJICAgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvbGRfb2JqID0gaW50ZWxfZmJfb2JqKG9sZF9mYik7CisKKwlpZiAob2xkX2ZiLT5waXhlbF9m b3JtYXQgIT0gZmItPnBpeGVsX2Zvcm1hdCkKIAkJcmV0dXJuIGZhbHNlOwotCWVsc2UgaWYgKGk5 MTUudXNlX21taW9fZmxpcCA+IDApCi0JCXJldHVybiB0cnVlOwotCWVsc2UgaWYgKGk5MTUuZW5h YmxlX2V4ZWNsaXN0cykKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZSBpZiAob2JqLT5iYXNlLmRtYV9i dWYgJiYKLQkJICFyZXNlcnZhdGlvbl9vYmplY3RfdGVzdF9zaWduYWxlZF9yY3Uob2JqLT5iYXNl LmRtYV9idWYtPnJlc3YsCi0JCQkJCQkgICAgICAgZmFsc2UpKQotCQlyZXR1cm4gdHJ1ZTsKLQll bHNlCi0JCXJldHVybiBlbmdpbmUgIT0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfZW5naW5lKG9iai0+ bGFzdF93cml0ZV9yZXEpOworCisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID4gMyAmJgorCSAg ICAoZmItPm9mZnNldHNbMF0gIT0gb2xkX2ZiLT5vZmZzZXRzWzBdIHx8CisJICAgICBmYi0+cGl0 Y2hlc1swXSAhPSBvbGRfZmItPnBpdGNoZXNbMF0pKQorCQlyZXR1cm4gZmFsc2U7CisKKwkJCS8q IHZsdjogRElTUExBWV9GTElQIGZhaWxzIHRvIGNoYW5nZSB0aWxpbmcgKi8KKwlpZiAoSVNfVkFM TEVZVklFVyhkZXYpICYmIG9iai0+dGlsaW5nX21vZGUgIT0gb2xkX29iai0+dGlsaW5nX21vZGUp CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAoraW50 ZWxfZGlzcGxheV9mbGlwX3ByZXBhcmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRy bV9jcnRjICpjcnRjLAorCQkJICAgc3RydWN0IGludGVsX2ZsaXBfd29yayAqd29yaykKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKworCWlm ICh3b3JrLT5mbGlwX3ByZXBhcmVkKQorCQlyZXR1cm47CisKKwl3b3JrLT5mbGlwX3ByZXBhcmVk ID0gdHJ1ZTsKKworCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA1IHx8IElTX0c0WChkZXYp KQorCQl3b3JrLT5mbGlwX2NvdW50ID0gSTkxNV9SRUFEKFBJUEVfRkxJUENPVU5UX0c0WChpbnRl bF9jcnRjLT5waXBlKSkgKyAxOworCXdvcmstPmZsaXBfcXVldWVkX3ZibGFuayA9IGRybV9jcnRj X3ZibGFua19jb3VudChjcnRjKTsKKworCWludGVsX2Zyb250YnVmZmVyX2ZsaXBfcHJlcGFyZShk ZXYsIHdvcmstPm5ld19jcnRjX3N0YXRlLT5mYl9iaXRzKTsKK30KKworc3RhdGljIHZvaWQgaW50 ZWxfZmxpcF9zY2hlZHVsZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9mbGlwX3dvcmsgKndvcmssIHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUgPSB3b3JrLT5uZXdfcGxh bmVfc3RhdGVbMF07CisJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUgPSB3b3Jr LT5vbGRfcGxhbmVfc3RhdGVbMF07CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsICpvbGRf ZmI7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0ID0gTlVMTDsKKwlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKKwlzdHJ1Y3QgZmVuY2UgKmZlbmNlOworCWludCByZXQ7CisKKwlpZiAoaTkxNV90ZXJt aW5hbGx5X3dlZGdlZCgmZGV2X3ByaXYtPmdwdV9lcnJvcikgfHwKKwkgICAgaTkxNV9yZXNldF9p bl9wcm9ncmVzcygmZGV2X3ByaXYtPmdwdV9lcnJvcikgfHwKKwkgICAgaTkxNS5lbmFibGVfZXhl Y2xpc3RzIHx8IGk5MTUudXNlX21taW9fZmxpcCA+IDAgfHwKKwkgICAgIWRldl9wcml2LT5kaXNw bGF5LnF1ZXVlX2ZsaXApCisJCWdvdG8gbW1pbzsKKworCS8qIE5vdCByaWdodCBhZnRlciBtb2Rl c2V0dGluZywgc3VyZmFjZSBwYXJhbWV0ZXJzIG5lZWQgdG8gYmUgdXBkYXRlZCAqLworCWlmIChu ZWVkc19tb2Rlc2V0KGNydGMtPnN0YXRlKSB8fAorCSAgICB0b19pbnRlbF9jcnRjX3N0YXRlKGNy dGMtPnN0YXRlKS0+dXBkYXRlX3BpcGUpCisJCWdvdG8gbW1pbzsKKworCS8qIE9ubHkgYWxsb3cg YSBtbWlvIGZsaXAgZm9yIGEgcHJpbWFyeSBwbGFuZSB3aXRob3V0IGEgZG1hLWJ1ZiBmZW5jZSAq LworCWlmICh3b3JrLT5udW1fcGxhbmVzICE9IDEgfHwKKwkgICAgbmV3X3N0YXRlLT5iYXNlLnBs YW5lICE9IGNydGMtPnByaW1hcnkgfHwKKwkgICAgbmV3X3N0YXRlLT5iYXNlLmZlbmNlKQorCQln b3RvIG1taW87CisKKwlmZW5jZSA9IHdvcmstPm9sZF9wbGFuZV9zdGF0ZVswXS0+YmFzZS5mZW5j ZTsKKwlpZiAoZmVuY2UgJiYgIWZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlKSkKKwkJZ290byBtbWlv OworCisJb2xkX2ZiID0gb2xkX3N0YXRlLT5iYXNlLmZiOworCWZiID0gbmV3X3N0YXRlLT5iYXNl LmZiOworCW9iaiA9IGludGVsX2ZiX29iaihmYik7CisKKwl0cmFjZV9pOTE1X2ZsaXBfcmVxdWVz dCh0b19pbnRlbF9jcnRjKGNydGMpLT5wbGFuZSwgb2JqKTsKKworCS8qIE9ubHkgd2hlbiB1cGRh dGluZyBhIGFscmVhZHkgdmlzaWJsZSBmYi4gKi8KKwlpZiAoIW5ld19zdGF0ZS0+dmlzaWJsZSB8 fCAhb2xkX3N0YXRlLT52aXNpYmxlKQorCQlnb3RvIG1taW87CisKKwlpZiAoIWZsaXBfZmJfY29t cGF0aWJsZShkZXYsIGZiLCBvbGRfZmIpKQorCQlnb3RvIG1taW87CisKKwllbmdpbmUgPSBpbnRl bF9nZXRfZmxpcF9lbmdpbmUoZGV2LCBkZXZfcHJpdiwgb2JqKTsKKwlpZiAoaTkxNS51c2VfbW1p b19mbGlwID09IDAgJiYgb2JqLT5sYXN0X3dyaXRlX3JlcSAmJgorCSAgICBpOTE1X2dlbV9yZXF1 ZXN0X2dldF9lbmdpbmUob2JqLT5sYXN0X3dyaXRlX3JlcSkgIT0gZW5naW5lKQorCQlnb3RvIG1t aW87CisKKwl3b3JrLT5ndHRfb2Zmc2V0ID0gaW50ZWxfcGxhbmVfb2JqX29mZnNldCh0b19pbnRl bF9wbGFuZShjcnRjLT5wcmltYXJ5KSwgb2JqLCAwKTsKKwl3b3JrLT5ndHRfb2Zmc2V0ICs9IHRv X2ludGVsX2NydGMoY3J0YyktPmRzcGFkZHJfb2Zmc2V0OworCisJcmV0ID0gaTkxNV9nZW1fb2Jq ZWN0X3N5bmMob2JqLCBlbmdpbmUsICZyZXF1ZXN0KTsKKwlpZiAoIXJldCAmJiAhcmVxdWVzdCkg eworCQlyZXF1ZXN0ID0gaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhlbmdpbmUsIE5VTEwpOworCQly ZXQgPSBQVFJfRVJSX09SX1pFUk8ocmVxdWVzdCk7CisKKwkJaWYgKHJldCkKKwkJCXJlcXVlc3Qg PSBOVUxMOworCX0KKworCWludGVsX2Rpc3BsYXlfZmxpcF9wcmVwYXJlKGRldiwgY3J0Yywgd29y ayk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gZGV2X3ByaXYtPmRpc3BsYXkucXVldWVfZmxpcChk ZXYsIGNydGMsIGZiLCBvYmosIHJlcXVlc3QsIDApOworCisJaWYgKCFyZXQpIHsKKwkJaTkxNV9n ZW1fcmVxdWVzdF9hc3NpZ24oJndvcmstPmZsaXBfcXVldWVkX3JlcSwgcmVxdWVzdCk7CisJCXNt cF9tYl9fYmVmb3JlX2F0b21pYygpOworCQlhdG9taWNfc2V0KCZ3b3JrLT5wZW5kaW5nLCBJTlRF TF9GTElQX1BFTkRJTkcpOworCQlpOTE1X2FkZF9yZXF1ZXN0X25vX2ZsdXNoKHJlcXVlc3QpOwor CQlyZXR1cm47CisJfQorCWlmIChyZXF1ZXN0KQorCQlpOTE1X2dlbV9yZXF1ZXN0X2NhbmNlbChy ZXF1ZXN0KTsKKworbW1pbzoKKwl0b19pbnRlbF9jcnRjKGNydGMpLT5yZXNldF9jb3VudGVyID0K KwkJYXRvbWljX3JlYWQoJmRldl9wcml2LT5ncHVfZXJyb3IucmVzZXRfY291bnRlcik7CisJc2No ZWR1bGVfd29yaygmd29yay0+bW1pb193b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfbW1p b19mbGlwX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiB7CiAJc3RydWN0IGludGVs X2ZsaXBfd29yayAqd29yayA9CiAJCWNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgaW50ZWxfZmxpcF93 b3JrLCBtbWlvX3dvcmspOwotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0 Yyh3b3JrLT5jcnRjKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7 CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gd29yay0+b2xkX2NydGNfc3RhdGUtPmJhc2UuY3J0 YzsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7 CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSB3b3JrLT5uZXdfY3J0Y19z dGF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGludGVs X3BsYW5lICpwcmltYXJ5ID0gdG9faW50ZWxfcGxhbmUoY3J0Yy0+YmFzZS5wcmltYXJ5KTsKLQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKHByaW1hcnktPmJh c2Uuc3RhdGUtPmZiKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTsKKwlpbnQg aTsKIAotCWlmICh3b3JrLT5mbGlwX3F1ZXVlZF9yZXEpCi0JCVdBUk5fT04oX19pOTE1X3dhaXRf cmVxdWVzdCh3b3JrLT5mbGlwX3F1ZXVlZF9yZXEsCi0JCQkJCSAgICBjcnRjLT5yZXNldF9jb3Vu dGVyLAorCWZvciAoaSA9IDA7IGkgPCB3b3JrLT5udW1fcGxhbmVzOyBpKyspIHsKKwkJc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUgPSB3b3JrLT5vbGRfcGxhbmVfc3Rh dGVbaV07CisKKwkJLyogRm9yIGZyYW1lYnVmZmVyIGJhY2tlZCBieSBkbWFidWYsIHdhaXQgZm9y IGZlbmNlICovCisJCWlmIChvbGRfcGxhbmVfc3RhdGUtPmJhc2UuZmVuY2UpCisJCQlXQVJOX09O KGZlbmNlX3dhaXQob2xkX3BsYW5lX3N0YXRlLT5iYXNlLmZlbmNlLCBmYWxzZSkgPCAwKTsKKwor CQlyZXEgPSBvbGRfcGxhbmVfc3RhdGUtPndhaXRfcmVxOworCQlpZiAoIXJlcSkKKwkJCWNvbnRp bnVlOworCisJCVdBUk5fT04oX19pOTE1X3dhaXRfcmVxdWVzdChyZXEsIGludGVsX2NydGMtPnJl c2V0X2NvdW50ZXIsCiAJCQkJCSAgICBmYWxzZSwgTlVMTCwKIAkJCQkJICAgICZkZXZfcHJpdi0+ cnBzLm1taW9mbGlwcykpOworCX0KKworCWludGVsX2Rpc3BsYXlfZmxpcF9wcmVwYXJlKGRldiwg Y3J0Yywgd29yayk7CisKKwlpbnRlbF9waXBlX3VwZGF0ZV9zdGFydChpbnRlbF9jcnRjKTsKKwlp ZiAoIW5lZWRzX21vZGVzZXQoJmNydGNfc3RhdGUtPmJhc2UpKSB7CisJCWlmIChjcnRjX3N0YXRl LT51cGRhdGVfcGlwZSkKKwkJCWludGVsX3VwZGF0ZV9waXBlX2NvbmZpZyhpbnRlbF9jcnRjLCB3 b3JrLT5vbGRfY3J0Y19zdGF0ZSk7CisJCWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49 IDkpCisJCQlza2xfZGV0YWNoX3NjYWxlcnMoaW50ZWxfY3J0Yyk7CisJfQorCisJZm9yIChpID0g MDsgaSA8IHdvcmstPm51bV9wbGFuZXM7IGkrKykgeworCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKm5ld19wbGFuZV9zdGF0ZSA9IHdvcmstPm5ld19wbGFuZV9zdGF0ZVtpXTsKKwkJc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKG5ld19wbGFuZV9zdGF0ZS0+YmFz ZS5wbGFuZSk7CisKKwkJcGxhbmUtPnVwZGF0ZV9wbGFuZSgmcGxhbmUtPmJhc2UsIGNydGNfc3Rh dGUsIG5ld19wbGFuZV9zdGF0ZSk7CisJfQogCi0JLyogRm9yIGZyYW1lYnVmZmVyIGJhY2tlZCBi eSBkbWFidWYsIHdhaXQgZm9yIGZlbmNlICovCi0JaWYgKG9iai0+YmFzZS5kbWFfYnVmKQotCQlX QVJOX09OKHJlc2VydmF0aW9uX29iamVjdF93YWl0X3RpbWVvdXRfcmN1KG9iai0+YmFzZS5kbWFf YnVmLT5yZXN2LAotCQkJCQkJCSAgICBmYWxzZSwgZmFsc2UsCi0JCQkJCQkJICAgIE1BWF9TQ0hF RFVMRV9USU1FT1VUKSA8IDApOwotCi0JaW50ZWxfcGlwZV91cGRhdGVfc3RhcnQoY3J0Yyk7Ci0J cHJpbWFyeS0+dXBkYXRlX3BsYW5lKCZwcmltYXJ5LT5iYXNlLAotCQkJICAgICAgY3J0Yy0+Y29u ZmlnLAotCQkJICAgICAgdG9faW50ZWxfcGxhbmVfc3RhdGUocHJpbWFyeS0+YmFzZS5zdGF0ZSkp OwogCWF0b21pY19zZXQoJndvcmstPnBlbmRpbmcsIElOVEVMX0ZMSVBfUEVORElORyk7Ci0JaW50 ZWxfcGlwZV91cGRhdGVfZW5kKGNydGMpOwotfQogCi1zdGF0aWMgaW50IGludGVsX2RlZmF1bHRf cXVldWVfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCi0JCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCSAgICBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSwKLQkJCQkgICAgdWludDY0X3QgZ3R0X29mZnNldCkKLXsKLQlyZXR1 cm4gLUVOT0RFVjsKKwlpbnRlbF9waXBlX3VwZGF0ZV9lbmQoaW50ZWxfY3J0Yyk7CiB9CiAKIHN0 YXRpYyBib29sIF9faW50ZWxfcGFnZWZsaXBfc3RhbGxfY2hlY2soc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKQEAgLTExMjU0LDcgKzExNDQ0LDggQEAgc3RhdGljIGJvb2wgX19pbnRlbF9wYWdlZmxp cF9zdGFsbF9jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXUzMiBwZW5kaW5nOwogCiAJ cGVuZGluZyA9IGF0b21pY19yZWFkKCZ3b3JrLT5wZW5kaW5nKTsKLQlpZiAocGVuZGluZyA9PSBJ TlRFTF9GTElQX0lOQUNUSVZFKQorCWlmIChwZW5kaW5nID09IElOVEVMX0ZMSVBfSU5BQ1RJVkUg fHwKKwkgICAgd29ya19idXN5KCZ3b3JrLT51bnBpbl93b3JrKSkKIAkJcmV0dXJuIGZhbHNlOwog CiAJLyoKQEAgLTExMzE4LDYgKzExNTA5LDMzIEBAIHZvaWQgaW50ZWxfY2hlY2tfcGFnZV9mbGlw KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQogCXNwaW5fdW5sb2NrKCZkZXYtPmV2 ZW50X2xvY2spOwogfQogCitzdGF0aWMgc3RydWN0IGZlbmNlICppbnRlbF9nZXRfZXhjbF9mZW5j ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCByZXNlcnZhdGlv bl9vYmplY3QgKnJlc3Y7CisKKworCWlmICghb2JqLT5iYXNlLmRtYV9idWYpCisJCXJldHVybiBO VUxMOworCisJcmVzdiA9IG9iai0+YmFzZS5kbWFfYnVmLT5yZXN2OworCisJLyogRm9yIGZyYW1l YnVmZmVyIGJhY2tlZCBieSBkbWFidWYsIHdhaXQgZm9yIGZlbmNlICovCisJd2hpbGUgKDEpIHsK KwkJc3RydWN0IGZlbmNlICpmZW5jZV9leGNsLCAqcmV0ID0gTlVMTDsKKworCQlyY3VfcmVhZF9s b2NrKCk7CisKKwkJZmVuY2VfZXhjbCA9IHJjdV9kZXJlZmVyZW5jZShyZXN2LT5mZW5jZV9leGNs KTsKKwkJaWYgKGZlbmNlX2V4Y2wpCisJCQlyZXQgPSBmZW5jZV9nZXRfcmN1KGZlbmNlX2V4Y2wp OworCisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCWlmIChyZXQgPT0gZmVuY2VfZXhjbCkKKwkJ CXJldHVybiByZXQ7CisJfQorfQorCiBzdGF0aWMgaW50IGludGVsX2NydGNfcGFnZV9mbGlwKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJ CQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCwKQEAgLTExMzI1LDE3ICsx MTU0MywyMCBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiID0gY3J0Yy0+cHJpbWFyeS0+ZmI7CisJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlLCAqbmV3X3N0YXRlID0gTlVMTDsKKwlzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpvbGRfZmIgPSBjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+ZmI7CiAJc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7CiAJc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fcGxhbmUgKnBy aW1hcnkgPSBjcnRjLT5wcmltYXJ5OwotCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlw ZTsKIAlzdHJ1Y3QgaW50ZWxfZmxpcF93b3JrICp3b3JrOwotCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZTsKLQlib29sIG1taW9fZmxpcDsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcXVlc3QgPSBOVUxMOwogCWludCByZXQ7CiAKKwlvbGRfc3RhdGUgPSBjcnRjLT5wcmlt YXJ5LT5zdGF0ZTsKKworCWlmICghY3J0Yy0+c3RhdGUtPmFjdGl2ZSkKKwkJcmV0dXJuIC1FSU5W QUw7CisKIAkvKgogCSAqIGRybV9tb2RlX3BhZ2VfZmxpcF9pb2N0bCgpIHNob3VsZCBhbHJlYWR5 IGNhdGNoIHRoaXMsIGJ1dCBkb3VibGUKIAkgKiBjaGVjayB0byBiZSBzYWZlLiAgSW4gdGhlIGZ1 dHVyZSB3ZSBtYXkgZW5hYmxlIHBhZ2VmbGlwcGluZyBmcm9tCkBAIC0xMTM0NSw3ICsxMTU2Niw3 IEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRj LAogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQ2FuJ3QgY2hhbmdlIHBpeGVsIGZvcm1hdCB2aWEg TUkgZGlzcGxheSBmbGlwcy4gKi8KLQlpZiAoZmItPnBpeGVsX2Zvcm1hdCAhPSBjcnRjLT5wcmlt YXJ5LT5mYi0+cGl4ZWxfZm9ybWF0KQorCWlmIChmYi0+cGl4ZWxfZm9ybWF0ICE9IG9sZF9mYi0+ cGl4ZWxfZm9ybWF0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCkBAIC0xMTM1MywyNSArMTE1 NzQsNDQgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCiAJICogTm90ZSB0aGF0IHBpdGNoIGNoYW5nZXMgY291bGQgYWxzbyBhZmZlY3QgdGhl c2UgcmVnaXN0ZXIuCiAJICovCiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID4gMyAmJgotCSAg ICAoZmItPm9mZnNldHNbMF0gIT0gY3J0Yy0+cHJpbWFyeS0+ZmItPm9mZnNldHNbMF0gfHwKLQkg ICAgIGZiLT5waXRjaGVzWzBdICE9IGNydGMtPnByaW1hcnktPmZiLT5waXRjaGVzWzBdKSkKKwkg ICAgKGZiLT5vZmZzZXRzWzBdICE9IG9sZF9mYi0+b2Zmc2V0c1swXSB8fAorCSAgICAgZmItPnBp dGNoZXNbMF0gIT0gb2xkX2ZiLT5waXRjaGVzWzBdKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlp ZiAoaTkxNV90ZXJtaW5hbGx5X3dlZGdlZCgmZGV2X3ByaXYtPmdwdV9lcnJvcikpCi0JCWdvdG8g b3V0X2hhbmc7Ci0KIAl3b3JrID0ga3phbGxvYyhzaXplb2YoKndvcmspLCBHRlBfS0VSTkVMKTsK LQlpZiAod29yayA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwluZXdfY3J0Y19zdGF0ZSA9 IGludGVsX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMpOworCW5ld19zdGF0ZSA9IGludGVsX3Bs YW5lX2R1cGxpY2F0ZV9zdGF0ZShwcmltYXJ5KTsKKworCWlmICghd29yayB8fCAhbmV3X2NydGNf c3RhdGUgfHwgIW5ld19zdGF0ZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXA7 CisJfQorCisJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKG5ld19zdGF0ZS0+ZmIpOworCWRy bV9mcmFtZWJ1ZmZlcl9yZWZlcmVuY2UoZmIpOworCW5ld19zdGF0ZS0+ZmIgPSBmYjsKIAogCXdv cmstPmV2ZW50ID0gZXZlbnQ7Ci0Jd29yay0+Y3J0YyA9IGNydGM7Ci0Jd29yay0+b2xkX2ZiID0g b2xkX2ZiOwogCUlOSVRfV09SSygmd29yay0+dW5waW5fd29yaywgaW50ZWxfdW5waW5fd29ya19m bik7CisJSU5JVF9XT1JLKCZ3b3JrLT5tbWlvX3dvcmssIGludGVsX21taW9fZmxpcF93b3JrX2Z1 bmMpOworCisJd29yay0+bmV3X2NydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKG5ld19j cnRjX3N0YXRlKTsKKwl3b3JrLT5vbGRfY3J0Y19zdGF0ZSA9IGludGVsX2NydGMtPmNvbmZpZzsK KworCXdvcmstPmZiX2JpdHMgPSB0b19pbnRlbF9wbGFuZShwcmltYXJ5KS0+ZnJvbnRidWZmZXJf Yml0OworCXdvcmstPm5ld19jcnRjX3N0YXRlLT5mYl9iaXRzID0gd29yay0+ZmJfYml0czsKIAor CXdvcmstPmNhbl9hc3luY191bnBpbiA9IHRydWU7CisJd29yay0+bnVtX3BsYW5lcyA9IDE7CisJ d29yay0+b2xkX3BsYW5lX3N0YXRlWzBdID0gdG9faW50ZWxfcGxhbmVfc3RhdGUob2xkX3N0YXRl KTsKKwl3b3JrLT5uZXdfcGxhbmVfc3RhdGVbMF0gPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShuZXdf c3RhdGUpOworCisJLyogU3RlcCAxOiB2Ymxhbmsgd2FpdGluZyBhbmQgd29ya3F1ZXVlIHRocm90 dGxpbmcsCisJICogc2ltaWxhciB0byBpbnRlbF9hdG9taWNfcHJlcGFyZV9jb21taXQKKwkgKi8K IAlyZXQgPSBkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpOwogCWlmIChyZXQpCi0JCWdvdG8gZnJl ZV93b3JrOworCQlnb3RvIGNsZWFudXA7CiAKIAkvKiBXZSBib3Jyb3cgdGhlIGV2ZW50IHNwaW4g bG9jayBmb3IgcHJvdGVjdGluZyBmbGlwX3dvcmsgKi8KIAlzcGluX2xvY2tfaXJxKCZkZXYtPmV2 ZW50X2xvY2spOwpAQCAtMTEzOTIsOSArMTE2MzIsOCBAQCBzdGF0aWMgaW50IGludGVsX2NydGNf cGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCURSTV9ERUJVR19EUklWRVIoImZs aXAgcXVldWU6IGNydGMgYWxyZWFkeSBidXN5XG4iKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZGV2 LT5ldmVudF9sb2NrKTsKIAotCQkJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKLQkJCWtmcmVl KHdvcmspOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gY2xl YW51cF92Ymxhbms7CiAJCX0KIAl9CiAJbGlzdF9hZGRfdGFpbCgmd29yay0+aGVhZCwgJmludGVs X2NydGMtPmZsaXBfd29yayk7CkBAIC0xMTQwMywxNTcgKzExNjQyLDYyIEBAIHN0YXRpYyBpbnQg aW50ZWxfY3J0Y19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCWlmIChhdG9taWNf cmVhZCgmaW50ZWxfY3J0Yy0+dW5waW5fd29ya19jb3VudCkgPj0gMikKIAkJZmx1c2hfd29ya3F1 ZXVlKGRldl9wcml2LT53cSk7CiAKLQkvKiBSZWZlcmVuY2UgdGhlIG9iamVjdHMgZm9yIHRoZSBz Y2hlZHVsZWQgd29yay4gKi8KLQlkcm1fZnJhbWVidWZmZXJfcmVmZXJlbmNlKHdvcmstPm9sZF9m Yik7Ci0JZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZvYmotPmJhc2UpOwotCi0JY3J0Yy0+cHJp bWFyeS0+ZmIgPSBmYjsKLQl1cGRhdGVfc3RhdGVfZmIoY3J0Yy0+cHJpbWFyeSk7Ci0JaW50ZWxf ZmJjX3ByZV91cGRhdGUoaW50ZWxfY3J0Yyk7Ci0KLQl3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqID0g b2JqOwotCi0JcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoZGV2KTsKKwkvKiBz dGVwIDIsIHNpbWlsYXIgdG8gaW50ZWxfcHJlcGFyZV9wbGFuZV9mYiAqLworCXJldCA9IG11dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlmIChyZXQpCi0JCWdv dG8gY2xlYW51cDsKLQotCWF0b21pY19pbmMoJmludGVsX2NydGMtPnVucGluX3dvcmtfY291bnQp OwotCWludGVsX2NydGMtPnJlc2V0X2NvdW50ZXIgPSBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmdw dV9lcnJvci5yZXNldF9jb3VudGVyKTsKLQotCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA1 IHx8IElTX0c0WChkZXYpKQotCQl3b3JrLT5mbGlwX2NvdW50ID0gSTkxNV9SRUFEKFBJUEVfRkxJ UENPVU5UX0c0WChwaXBlKSkgKyAxOwotCi0JaWYgKElTX1ZBTExFWVZJRVcoZGV2KSB8fCBJU19D SEVSUllWSUVXKGRldikpIHsKLQkJZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmVbQkNTXTsKLQkJ aWYgKG9iai0+dGlsaW5nX21vZGUgIT0gaW50ZWxfZmJfb2JqKHdvcmstPm9sZF9mYiktPnRpbGlu Z19tb2RlKQotCQkJLyogdmx2OiBESVNQTEFZX0ZMSVAgZmFpbHMgdG8gY2hhbmdlIHRpbGluZyAq LwotCQkJZW5naW5lID0gTlVMTDsKLQl9IGVsc2UgaWYgKElTX0lWWUJSSURHRShkZXYpIHx8IElT X0hBU1dFTEwoZGV2KSkgewotCQllbmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZVtCQ1NdOwotCX0g ZWxzZSBpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNykgewotCQllbmdpbmUgPSBpOTE1X2dl bV9yZXF1ZXN0X2dldF9lbmdpbmUob2JqLT5sYXN0X3dyaXRlX3JlcSk7Ci0JCWlmIChlbmdpbmUg PT0gTlVMTCB8fCBlbmdpbmUtPmlkICE9IFJDUykKLQkJCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5n aW5lW0JDU107Ci0JfSBlbHNlIHsKLQkJZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmVbUkNTXTsK LQl9Ci0KLQltbWlvX2ZsaXAgPSB1c2VfbW1pb19mbGlwKGVuZ2luZSwgb2JqKTsKLQotCS8qIFdo ZW4gdXNpbmcgQ1MgZmxpcHMsIHdlIHdhbnQgdG8gZW1pdCBzZW1hcGhvcmVzIGJldHdlZW4gcmlu Z3MuCi0JICogSG93ZXZlciwgd2hlbiB1c2luZyBtbWlvIGZsaXBzIHdlIHdpbGwgY3JlYXRlIGEg dGFzayB0byBkbyB0aGUKLQkgKiBzeW5jaHJvbmlzYXRpb24sIHNvIGFsbCB3ZSB3YW50IGhlcmUg aXMgdG8gcGluIHRoZSBmcmFtZWJ1ZmZlcgotCSAqIGludG8gdGhlIGRpc3BsYXkgcGxhbmUgYW5k IHNraXAgYW55IHdhaXRzLgotCSAqLwotCWlmICghbW1pb19mbGlwKSB7Ci0JCXJldCA9IGk5MTVf Z2VtX29iamVjdF9zeW5jKG9iaiwgZW5naW5lLCAmcmVxdWVzdCk7Ci0JCWlmICghcmV0ICYmICFy ZXF1ZXN0KSB7Ci0JCQlyZXF1ZXN0ID0gaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhlbmdpbmUsIE5V TEwpOwotCQkJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKHJlcXVlc3QpOwotCQl9CisJCWdvdG8gY2xl YW51cF93b3JrOwogCi0JCWlmIChyZXQpCi0JCQlnb3RvIGNsZWFudXBfcGVuZGluZzsKLQl9Ci0K LQlyZXQgPSBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihmYiwgcHJpbWFyeS0+c3RhdGUtPnJv dGF0aW9uKTsKKwlyZXQgPSBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihmYiwgbmV3X3N0YXRl LT5yb3RhdGlvbik7CiAJaWYgKHJldCkKLQkJZ290byBjbGVhbnVwX3BlbmRpbmc7CisJCWdvdG8g Y2xlYW51cF91bmxvY2s7CiAKLQl3b3JrLT5ndHRfb2Zmc2V0ID0gaW50ZWxfcGxhbmVfb2JqX29m ZnNldCh0b19pbnRlbF9wbGFuZShwcmltYXJ5KSwKLQkJCQkJCSAgb2JqLCAwKTsKLQl3b3JrLT5n dHRfb2Zmc2V0ICs9IGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0OwotCXdvcmstPmZsaXBfcXVl dWVkX3ZibGFuayA9IGRybV9jcnRjX3ZibGFua19jb3VudChjcnRjKTsKKwlpOTE1X2dlbV90cmFj a19mYihpbnRlbF9mYl9vYmoob2xkX2ZiKSwgb2JqLAorCQkJICB0b19pbnRlbF9wbGFuZShwcmlt YXJ5KS0+ZnJvbnRidWZmZXJfYml0KTsKKworCS8qIHBvaW50IG9mIG5vIHJldHVybiwgc3dhcCBz dGF0ZSAqLworCXByaW1hcnktPnN0YXRlID0gbmV3X3N0YXRlOworCWNydGMtPnN0YXRlID0gbmV3 X2NydGNfc3RhdGU7CisJaW50ZWxfY3J0Yy0+Y29uZmlnID0gdG9faW50ZWxfY3J0Y19zdGF0ZShu ZXdfY3J0Y19zdGF0ZSk7CisJcHJpbWFyeS0+ZmIgPSBmYjsKIAotCWlmIChtbWlvX2ZsaXApIHsK LQkJSU5JVF9XT1JLKCZ3b3JrLT5tbWlvX3dvcmssIGludGVsX21taW9fZmxpcF93b3JrX2Z1bmMp OworCS8qIHNjaGVkdWxpbmcgZmxpcCB3b3JrICovCisJYXRvbWljX2luYygmaW50ZWxfY3J0Yy0+ dW5waW5fd29ya19jb3VudCk7CiAKLQkJaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJndvcmstPmZs aXBfcXVldWVkX3JlcSwKKwlpZiAob2JqLT5sYXN0X3dyaXRlX3JlcSAmJgorCSAgICAhaTkxNV9n ZW1fcmVxdWVzdF9jb21wbGV0ZWQob2JqLT5sYXN0X3dyaXRlX3JlcSwgdHJ1ZSkpCisJCWk5MTVf Z2VtX3JlcXVlc3RfYXNzaWduKCZ3b3JrLT5vbGRfcGxhbmVfc3RhdGVbMF0tPndhaXRfcmVxLAog CQkJCQlvYmotPmxhc3Rfd3JpdGVfcmVxKTsKIAotCQlzY2hlZHVsZV93b3JrKCZ3b3JrLT5tbWlv X3dvcmspOwotCX0gZWxzZSB7Ci0JCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZ3b3JrLT5mbGlw X3F1ZXVlZF9yZXEsIHJlcXVlc3QpOwotCQlyZXQgPSBkZXZfcHJpdi0+ZGlzcGxheS5xdWV1ZV9m bGlwKGRldiwgY3J0YywgZmIsIG9iaiwgcmVxdWVzdCwKLQkJCQkJCSAgIHdvcmstPmd0dF9vZmZz ZXQpOwotCQlpZiAocmV0KQotCQkJZ290byBjbGVhbnVwX3VucGluOworCWlmIChvYmotPmJhc2Uu ZG1hX2J1ZikKKwkJd29yay0+b2xkX3BsYW5lX3N0YXRlWzBdLT5iYXNlLmZlbmNlID0gaW50ZWxf Z2V0X2V4Y2xfZmVuY2Uob2JqKTsKIAotCQlpbnRlbF9tYXJrX3BhZ2VfZmxpcF9hY3RpdmUod29y ayk7Ci0JCWk5MTVfYWRkX3JlcXVlc3Rfbm9fZmx1c2gocmVxdWVzdCk7Ci0JfQorCWludGVsX2Zi Y19wcmVfdXBkYXRlKGludGVsX2NydGMpOwogCi0Jd29yay0+ZmxpcF9xdWV1ZWRfdmJsYW5rID0g ZHJtX2NydGNfdmJsYW5rX2NvdW50KGNydGMpOworCWludGVsX2ZsaXBfc2NoZWR1bGVfcmVxdWVz dCh3b3JrLCBjcnRjKTsKIAotCWk5MTVfZ2VtX3RyYWNrX2ZiKGludGVsX2ZiX29iaih3b3JrLT5v bGRfZmIpLCBvYmosCi0JCQkgIHRvX2ludGVsX3BsYW5lKHByaW1hcnkpLT5mcm9udGJ1ZmZlcl9i aXQpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JaW50ZWxfZnJvbnRi dWZmZXJfZmxpcF9wcmVwYXJlKGRldiwKLQkJCQkgICAgICAgdG9faW50ZWxfcGxhbmUocHJpbWFy eSktPmZyb250YnVmZmVyX2JpdCk7Ci0KIAl0cmFjZV9pOTE1X2ZsaXBfcmVxdWVzdChpbnRlbF9j cnRjLT5wbGFuZSwgb2JqKTsKIAogCXJldHVybiAwOwogCi1jbGVhbnVwX3VucGluOgotCWludGVs X3VucGluX2ZiX29iaihmYiwgY3J0Yy0+cHJpbWFyeS0+c3RhdGUtPnJvdGF0aW9uKTsKLWNsZWFu dXBfcGVuZGluZzoKLQlpZiAoIUlTX0VSUl9PUl9OVUxMKHJlcXVlc3QpKQotCQlpOTE1X2dlbV9y ZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKLQlhdG9taWNfZGVjKCZpbnRlbF9jcnRjLT51bnBpbl93 b3JrX2NvdW50KTsKK2NsZWFudXBfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwotY2xlYW51cDoKLQljcnRjLT5wcmltYXJ5LT5mYiA9IG9sZF9mYjsKLQl1cGRhdGVf c3RhdGVfZmIoY3J0Yy0+cHJpbWFyeSk7Ci0KLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91 bmxvY2tlZCgmb2JqLT5iYXNlKTsKLQlkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2Uod29yay0+ b2xkX2ZiKTsKLQorY2xlYW51cF93b3JrOgogCXNwaW5fbG9ja19pcnEoJmRldi0+ZXZlbnRfbG9j ayk7CiAJbGlzdF9kZWwoJndvcmstPmhlYWQpOwogCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5ldmVu dF9sb2NrKTsKIAorY2xlYW51cF92Ymxhbms6CiAJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsK LWZyZWVfd29yazoKLQlrZnJlZSh3b3JrKTsKLQotCWlmIChyZXQgPT0gLUVJTykgewotCQlzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Ci0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlOwotCi1vdXRfaGFuZzoKLQkJc3RhdGUgPSBkcm1fYXRvbWljX3N0YXRlX2FsbG9j KGRldik7Ci0JCWlmICghc3RhdGUpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJc3RhdGUtPmFjcXVp cmVfY3R4ID0gZHJtX21vZGVzZXRfbGVnYWN5X2FjcXVpcmVfY3R4KGNydGMpOwotCi1yZXRyeToK LQkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZSwgcHJpbWFy eSk7Ci0JCXJldCA9IFBUUl9FUlJfT1JfWkVSTyhwbGFuZV9zdGF0ZSk7Ci0JCWlmICghcmV0KSB7 Ci0JCQlkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUocGxhbmVfc3RhdGUsIGZiKTsKLQotCQkJ cmV0ID0gZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUocGxhbmVfc3RhdGUsIGNydGMpOwot CQkJaWYgKCFyZXQpCi0JCQkJcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwotCQl9Ci0K LQkJaWYgKHJldCA9PSAtRURFQURMSykgewotCQkJZHJtX21vZGVzZXRfYmFja29mZihzdGF0ZS0+ YWNxdWlyZV9jdHgpOwotCQkJZHJtX2F0b21pY19zdGF0ZV9jbGVhcihzdGF0ZSk7Ci0JCQlnb3Rv IHJldHJ5OwotCQl9CitjbGVhbnVwOgorCWlmIChuZXdfc3RhdGUpCisJCWludGVsX3BsYW5lX2Rl c3Ryb3lfc3RhdGUocHJpbWFyeSwgbmV3X3N0YXRlKTsKIAotCQlpZiAocmV0KQotCQkJZHJtX2F0 b21pY19zdGF0ZV9mcmVlKHN0YXRlKTsKKwlpZiAobmV3X2NydGNfc3RhdGUpCisJCWludGVsX2Ny dGNfZGVzdHJveV9zdGF0ZShjcnRjLCBuZXdfY3J0Y19zdGF0ZSk7CiAKLQkJaWYgKHJldCA9PSAw ICYmIGV2ZW50KSB7Ci0JCQlzcGluX2xvY2tfaXJxKCZkZXYtPmV2ZW50X2xvY2spOwotCQkJZHJt X3NlbmRfdmJsYW5rX2V2ZW50KGRldiwgcGlwZSwgZXZlbnQpOwotCQkJc3Bpbl91bmxvY2tfaXJx KCZkZXYtPmV2ZW50X2xvY2spOwotCQl9Ci0JfQorCWtmcmVlKHdvcmspOwogCXJldHVybiByZXQ7 CiB9CiAKQEAgLTEzNTg4LDMzICsxMzczMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny dGNfZnVuY3MgaW50ZWxfY3J0Y19mdW5jcyA9IHsKIAkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBp bnRlbF9jcnRjX2Rlc3Ryb3lfc3RhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZlbmNlICppbnRl bF9nZXRfZXhjbF9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCXN0 cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnJlc3Y7Ci0KLQotCWlmICghb2JqLT5iYXNlLmRtYV9i dWYpCi0JCXJldHVybiBOVUxMOwotCi0JcmVzdiA9IG9iai0+YmFzZS5kbWFfYnVmLT5yZXN2Owot Ci0JLyogRm9yIGZyYW1lYnVmZmVyIGJhY2tlZCBieSBkbWFidWYsIHdhaXQgZm9yIGZlbmNlICov Ci0Jd2hpbGUgKDEpIHsKLQkJc3RydWN0IGZlbmNlICpmZW5jZV9leGNsLCAqcmV0ID0gTlVMTDsK LQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQkJZmVuY2VfZXhjbCA9IHJjdV9kZXJlZmVyZW5jZShy ZXN2LT5mZW5jZV9leGNsKTsKLQkJaWYgKGZlbmNlX2V4Y2wpCi0JCQlyZXQgPSBmZW5jZV9nZXRf cmN1KGZlbmNlX2V4Y2wpOwotCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCWlmIChyZXQgPT0g ZmVuY2VfZXhjbCkKLQkJCXJldHVybiByZXQ7Ci0JfQotfQotCiAvKioKICAqIGludGVsX3ByZXBh cmVfcGxhbmVfZmIgLSBQcmVwYXJlIGZiIGZvciB1c2FnZSBvbiBwbGFuZQogICogQHBsYW5lOiBk cm0gcGxhbmUgdG8gcHJlcGFyZSBmb3IKQEAgLTE0ODc2LDcgKzE0OTkzLDcgQEAgdm9pZCBpbnRl bF9pbml0X2Rpc3BsYXlfaG9va3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog CQkvKiBEcm9wIHRocm91Z2ggLSB1bnN1cHBvcnRlZCBzaW5jZSBleGVjbGlzdCBvbmx5LiAqLwog CWRlZmF1bHQ6CiAJCS8qIERlZmF1bHQganVzdCByZXR1cm5zIC1FTk9ERVYgdG8gaW5kaWNhdGUg dW5zdXBwb3J0ZWQgKi8KLQkJZGV2X3ByaXYtPmRpc3BsYXkucXVldWVfZmxpcCA9IGludGVsX2Rl ZmF1bHRfcXVldWVfZmxpcDsKKwkJYnJlYWs7CiAJfQogfQogCkBAIC0xNTgzMiw5ICsxNTk0OSw5 IEBAIHZvaWQgaW50ZWxfbW9kZXNldF9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQog CQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIGJvb3QgZmIgb24gcGlwZSAlZFxuIiwKIAkJCQkg IHRvX2ludGVsX2NydGMoYyktPnBpcGUpOwogCQkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNl KGMtPnByaW1hcnktPmZiKTsKLQkJCWMtPnByaW1hcnktPmZiID0gTlVMTDsKKwkJCWRybV9mcmFt ZWJ1ZmZlcl91bnJlZmVyZW5jZShjLT5wcmltYXJ5LT5zdGF0ZS0+ZmIpOworCQkJYy0+cHJpbWFy eS0+ZmIgPSBjLT5wcmltYXJ5LT5zdGF0ZS0+ZmIgPSBOVUxMOwogCQkJYy0+cHJpbWFyeS0+Y3J0 YyA9IGMtPnByaW1hcnktPnN0YXRlLT5jcnRjID0gTlVMTDsKLQkJCXVwZGF0ZV9zdGF0ZV9mYihj LT5wcmltYXJ5KTsKIAkJCWMtPnN0YXRlLT5wbGFuZV9tYXNrICY9IH4oMSA8PCBkcm1fcGxhbmVf aW5kZXgoYy0+cHJpbWFyeSkpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRl eCA2OTdjZjY4NTg1OGQuLmI0OTQ4MjQ4NzRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgK QEAgLTkzMyw5ICs5MzMsNiBAQCBzdHJ1Y3QgaW50ZWxfZmxpcF93b3JrIHsKIAlzdHJ1Y3Qgd29y a19zdHJ1Y3QgdW5waW5fd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbW1pb193b3JrOwogCi0J c3RydWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYjsK LQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqcGVuZGluZ19mbGlwX29iajsKIAlzdHJ1Y3Qg ZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKIAlhdG9taWNfdCBwZW5kaW5nOwogI2Rl ZmluZSBJTlRFTF9GTElQX0lOQUNUSVZFCTAKQEAgLTk0NSw2ICs5NDIsMTYgQEAgc3RydWN0IGlu dGVsX2ZsaXBfd29yayB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpmbGlwX3F1ZXVl ZF9yZXE7CiAJdTMyIGZsaXBfcXVldWVkX3ZibGFuazsKIAl1MzIgZmxpcF9yZWFkeV92Ymxhbms7 CisKKwl1bnNpZ25lZCBwdXRfcG93ZXJfZG9tYWluczsKKwl1bnNpZ25lZCBudW1fcGxhbmVzOwor CisJYm9vbCBjYW5fYXN5bmNfdW5waW4sIGZsaXBfcHJlcGFyZWQ7CisJdW5zaWduZWQgZmJfYml0 czsKKworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwgKm5ld19jcnRj X3N0YXRlOworCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlW0k5MTVf TUFYX1BMQU5FUyArIDFdOworCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqbmV3X3BsYW5lX3N0 YXRlW0k5MTVfTUFYX1BMQU5FUyArIDFdOwogfTsKIAogc3RydWN0IGludGVsX2xvYWRfZGV0ZWN0 X3BpcGUgewotLSAKMi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=