From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH 41/42] drm/i915: Read hw state into an atomic state struct Date: Mon, 11 May 2015 16:25:17 +0200 Message-ID: <1431354318-11995-42-git-send-email-maarten.lankhorst@linux.intel.com> References: <1431354318-11995-1-git-send-email-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTP id 509C36E3FB for ; Mon, 11 May 2015 07:25:46 -0700 (PDT) In-Reply-To: <1431354318-11995-1-git-send-email-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Ander Conselvan de Oliveira List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxhbmRlci5jb25zZWx2YW4uZGUub2xp dmVpcmFAaW50ZWwuY29tPgoKVGhpcyBsZXRzIHVzIGNoYW5nZSB0aGUgZm9yY2UgcmVzdG9yZSBw YXRoIGluIHNldHVwX2h3X3N0YXRlKCkgdG8gdXNlIGEKc2luZ2xlIGNhbGwgdG8gaW50ZWxfbW9k ZV9zZXQoKSB0byByZXN0b3JlIGFsbCB0aGUgcHJldmlvdXMgdXNlcgpyZXF1ZXN0ZWQgc3RhdGUu CgpTaWduZWQtb2ZmLWJ5OiBBbmRlciBDb25zZWx2YW4gZGUgT2xpdmVpcmEgPGFuZGVyLmNvbnNl bHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hv cnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMgIHwgIDIyICstLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jIHwgMzExICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgIDMgKwogMyBmaWxlcyBj aGFuZ2VkLCAyMzAgaW5zZXJ0aW9ucygrKSwgMTA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfYXRvbWljLmMKaW5kZXggODI4NmE3OWY0ZGIxLi5mYjc5OTQ5NzgzZTMgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jCkBAIC0zODYsMjEgKzM4NiwxNyBAQCBpbnQgaW50 ZWxfYXRvbWljX3NldHVwX3NjYWxlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlyZXR1cm4g MDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2R1cGxpY2F0ZV9kcGxsX3N0YXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgIHN0cnVjdCBpbnRlbF9hdG9taWNfc3Rh dGUgKnN0YXRlKQordm9pZAoraW50ZWxfYXRvbWljX2R1cGxpY2F0ZV9kcGxsX3N0YXRlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgIHN0cnVjdCBpbnRlbF9zaGFyZWRf ZHBsbF9jb25maWcgKnNoYXJlZF9kcGxsKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbDsK IAllbnVtIGludGVsX2RwbGxfaWQgaTsKIAotCXN0YXRlLT5kcGxsX3NldCA9IHRydWU7Ci0KIAkv KiBDb3B5IHNoYXJlZCBkcGxsIHN0YXRlICovCiAJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5u dW1fc2hhcmVkX2RwbGw7IGkrKykgewotCQlwbGwgPSAmZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tp XTsKKwkJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwgPSAmZGV2X3ByaXYtPnNoYXJlZF9k cGxsc1tpXTsKIAotCQltZW1jcHkoJnN0YXRlLT5zaGFyZWRfZHBsbFtpXSwKLQkJICAgICAgICZw bGwtPmNvbmZpZywgc2l6ZW9mKHBsbC0+Y29uZmlnKSk7CisJCXNoYXJlZF9kcGxsW2ldID0gcGxs LT5jb25maWc7CiAJfQogfQogCkBAIC00MDksOCArNDA1LDEyIEBAIGludGVsX2F0b21pY19nZXRf c2hhcmVkX2RwbGxfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnMpCiB7CiAJc3RydWN0 IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUgPSB0b19pbnRlbF9hdG9taWNfc3RhdGUocyk7CiAK LQlpZiAoIXN0YXRlLT5kcGxsX3NldCkKLQkJaW50ZWxfYXRvbWljX2R1cGxpY2F0ZV9kcGxsX3N0 YXRlKHN0YXRlLT5iYXNlLmRldiwgc3RhdGUpOworCWlmICghc3RhdGUtPmRwbGxfc2V0KSB7CisJ CXN0YXRlLT5kcGxsX3NldCA9IHRydWU7CisKKwkJaW50ZWxfYXRvbWljX2R1cGxpY2F0ZV9kcGxs X3N0YXRlKHRvX2k5MTUoc3RhdGUtPmJhc2UuZGV2KSwKKwkJCQkJCSAgc3RhdGUtPnNoYXJlZF9k cGxsKTsKKwl9CiAKIAlyZXR1cm4gc3RhdGUtPnNoYXJlZF9kcGxsOwogfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDlhMTlkODhjYjVjZS4uMzg2ZDk1OTlkOTE4IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xNDY4NSwxMTEgKzE0Njg1LDIxNiBA QCBzdGF0aWMgYm9vbCBwcmltYXJ5X2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjcnRjLT5iYXNlLmRl di0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoIWNydGMtPmJhc2Uuc3RhdGUtPmFjdGl2ZSkKKwlpZiAo IWNydGMtPmJhc2UuZW5hYmxlZCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIEk5MTVfUkVB RChEU1BDTlRSKGNydGMtPnBsYW5lKSkgJiBESVNQTEFZX1BMQU5FX0VOQUJMRTsKIH0KIAotc3Rh dGljIHZvaWQgaW50ZWxfbW9kZXNldF9yZWFkb3V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCi0JCQkJCSAgIHVuc2lnbmVkICpjcnRjX21hc2spCitzdGF0aWMgaW50IHJlYWRvdXRf aHdfY3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJIHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZW51bSBwaXBlIHBpcGU7Ci0Jc3RydWN0IGludGVsX2Ny dGMgKmNydGM7Ci0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Ci0Jc3RydWN0IGludGVs X2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCWludCBpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmRldik7CisJc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGU7CisJc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSA9IGNydGMtPmJhc2Uu cHJpbWFyeTsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpkcm1fcGxhbmVfc3RhdGU7CisJc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKIAotCSpjcnRjX21hc2sgPSAwOwot CWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBjcnRjKSB7Ci0JCXN0cnVjdCBkcm1fcGxhbmUgKnBy aW1hcnkgPSBjcnRjLT5iYXNlLnByaW1hcnk7Ci0JCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGU7Ci0JCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyA9Ci0J CQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOworCWNydGNfc3RhdGUgPSBp bnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOworCWlmIChJU19FUlIoY3J0 Y19zdGF0ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwogCi0JCW1lbXNldChwaXBl X2NvbmZpZywgMCwgc2l6ZW9mKCpwaXBlX2NvbmZpZykpOworCW1lbXNldChjcnRjX3N0YXRlLCAw LCBzaXplb2YoKmNydGNfc3RhdGUpKTsKKwljcnRjX3N0YXRlLT5iYXNlLmNydGMgPSAmY3J0Yy0+ YmFzZTsKKwljcnRjX3N0YXRlLT5iYXNlLnN0YXRlID0gc3RhdGU7CiAKLQkJcGlwZV9jb25maWct PnF1aXJrcyB8PSBQSVBFX0NPTkZJR19RVUlSS19JTkhFUklURURfTU9ERTsKKwljcnRjX3N0YXRl LT5xdWlya3MgfD0gUElQRV9DT05GSUdfUVVJUktfSU5IRVJJVEVEX01PREU7CiAKLQkJaWYgKGNy dGMtPmJhc2Uuc3RhdGUtPmFjdGl2ZSkKLQkJCSpjcnRjX21hc2sgfD0gZHJtX2NydGNfaW5kZXgo JmNydGMtPmJhc2UpOworCWNydGNfc3RhdGUtPmJhc2UuZW5hYmxlID0gY3J0Y19zdGF0ZS0+YmFz ZS5hY3RpdmUgPQorCWNydGMtPmJhc2UuZW5hYmxlZCA9IGRldl9wcml2LT5kaXNwbGF5LmdldF9w aXBlX2NvbmZpZyhjcnRjLCBjcnRjX3N0YXRlKTsKIAotCQljcnRjLT5iYXNlLmVuYWJsZWQgPSBw aXBlX2NvbmZpZy0+YmFzZS5lbmFibGUgPQotCQlwaXBlX2NvbmZpZy0+YmFzZS5hY3RpdmUgPQot CQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X3BpcGVfY29uZmlnKGNydGMsIHBpcGVfY29uZmlnKTsK Kwlkcm1fcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZSwgcHJp bWFyeSk7CisJaWYgKElTX0VSUihkcm1fcGxhbmVfc3RhdGUpKQorCQlyZXR1cm4gUFRSX0VSUihk cm1fcGxhbmVfc3RhdGUpOwogCi0JCXBsYW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUo cHJpbWFyeS0+c3RhdGUpOwotCQlwbGFuZV9zdGF0ZS0+aHdfZW5hYmxlZCA9IHBsYW5lX3N0YXRl LT52aXNpYmxlID0KLQkJCXByaW1hcnlfZ2V0X2h3X3N0YXRlKGNydGMpOwotCQlpZiAocGxhbmVf c3RhdGUtPnZpc2libGUpCi0JCQljcnRjLT5iYXNlLnN0YXRlLT5wbGFuZV9tYXNrIHw9Ci0JCQkJ MSA8PCBkcm1fcGxhbmVfaW5kZXgocHJpbWFyeSk7Ci0JCWVsc2UKLQkJCWNydGMtPmJhc2Uuc3Rh dGUtPnBsYW5lX21hc2sgJj0KLQkJCQl+KDEgPDwgZHJtX3BsYW5lX2luZGV4KHByaW1hcnkpKTsK KwlwbGFuZV9zdGF0ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKGRybV9wbGFuZV9zdGF0ZSk7CisJ cGxhbmVfc3RhdGUtPmh3X2VuYWJsZWQgPSBwbGFuZV9zdGF0ZS0+dmlzaWJsZSA9CisJCXByaW1h cnlfZ2V0X2h3X3N0YXRlKGNydGMpOwogCi0JCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSBodyBz dGF0ZSByZWFkb3V0OiAlc1xuIiwKLQkJCSAgICAgIGNydGMtPmJhc2UuYmFzZS5pZCwKLQkJCSAg ICAgIGNydGMtPmJhc2Uuc3RhdGUtPmFjdGl2ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwot CX0KKwlpZiAocGxhbmVfc3RhdGUtPnZpc2libGUpCisJCWNydGNfc3RhdGUtPmJhc2UucGxhbmVf bWFzayB8PSAxIDw8IGRybV9wbGFuZV9pbmRleChwcmltYXJ5KTsKKwllbHNlCisJCWNydGNfc3Rh dGUtPmJhc2UucGxhbmVfbWFzayAmPSB+KDEgPDwgZHJtX3BsYW5lX2luZGV4KHByaW1hcnkpKTsK KworCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSBodyBzdGF0ZSByZWFkb3V0OiAlc1xuIiwKKwkJ ICAgICAgY3J0Yy0+YmFzZS5iYXNlLmlkLAorCQkgICAgICBjcnRjX3N0YXRlLT5iYXNlLmFjdGl2 ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCisJcmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBp bnQgcmVhZG91dF9od19wbGxfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmRl dik7CisJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsX2NvbmZpZyAqc2hhcmVkX2RwbGw7CisJc3Ry dWN0IGludGVsX2NydGMgKmNydGM7CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGU7CisJaW50IGk7CisKKwlzaGFyZWRfZHBsbCA9IGludGVsX2F0b21pY19nZXRfc2hhcmVkX2Rw bGxfc3RhdGUoc3RhdGUpOwogCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+bnVtX3NoYXJlZF9k cGxsOyBpKyspIHsKIAkJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwgPSAmZGV2X3ByaXYt PnNoYXJlZF9kcGxsc1tpXTsKIAogCQlwbGwtPm9uID0gcGxsLT5nZXRfaHdfc3RhdGUoZGV2X3By aXYsIHBsbCwKLQkJCQkJICAgICZwbGwtPmNvbmZpZy5od19zdGF0ZSk7CisJCQkJCSAgICAmc2hh cmVkX2RwbGxbaV0uaHdfc3RhdGUpOworCiAJCXBsbC0+YWN0aXZlID0gMDsKLQkJcGxsLT5jb25m aWcuY3J0Y19tYXNrID0gMDsKLQkJZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKLQkJ CWlmIChjcnRjLT5iYXNlLnN0YXRlLT5hY3RpdmUgJiYKLQkJCSAgICBpID09IHRvX2ludGVsX2Ny dGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSktPnNoYXJlZF9kcGxsKSB7CisJCXNoYXJlZF9kcGxs W2ldLmNydGNfbWFzayA9IDA7CisKKwkJZm9yX2VhY2hfaW50ZWxfY3J0YyhzdGF0ZS0+ZGV2LCBj cnRjKSB7CisJCQljcnRjX3N0YXRlID0gaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRl LCBjcnRjKTsKKwkJCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCisJCQkJcmV0dXJuIFBUUl9FUlIo Y3J0Y19zdGF0ZSk7CisKKwkJCWlmIChjcnRjX3N0YXRlLT5iYXNlLmFjdGl2ZSAmJgorCQkJICAg IGNydGNfc3RhdGUtPnNoYXJlZF9kcGxsID09IGkpIHsKIAkJCQlwbGwtPmFjdGl2ZSsrOwotCQkJ CXBsbC0+Y29uZmlnLmNydGNfbWFzayB8PSAxIDw8IGNydGMtPnBpcGU7CisJCQkJc2hhcmVkX2Rw bGxbaV0uY3J0Y19tYXNrIHw9CisJCQkJCTEgPDwgY3J0Yy0+cGlwZTsKIAkJCX0KIAkJfQogCiAJ CURSTV9ERUJVR19LTVMoIiVzIGh3IHN0YXRlIHJlYWRvdXQ6IGNydGNfbWFzayAweCUwOHgsIG9u ICVpXG4iLAotCQkJICAgICAgcGxsLT5uYW1lLCBwbGwtPmNvbmZpZy5jcnRjX21hc2ssIHBsbC0+ b24pOworCQkJICAgICAgcGxsLT5uYW1lLCBzaGFyZWRfZHBsbFtpXS5jcnRjX21hc2ssCisJCQkg ICAgICBwbGwtPm9uKTsKIAotCQlpZiAocGxsLT5jb25maWcuY3J0Y19tYXNrKQorCQlpZiAoc2hh cmVkX2RwbGxbaV0uY3J0Y19tYXNrKQogCQkJaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3By aXYsIFBPV0VSX0RPTUFJTl9QTExTKTsKIAl9CiAKLQlmb3JfZWFjaF9pbnRlbF9lbmNvZGVyKGRl diwgZW5jb2RlcikgewotCQlwaXBlID0gMDsKKwlyZXR1cm4gMDsKK30KIAotCQlpZiAoZW5jb2Rl ci0+Z2V0X2h3X3N0YXRlKGVuY29kZXIsICZwaXBlKSkgewotCQkJY3J0YyA9IHRvX2ludGVsX2Ny dGMoZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5nW3BpcGVdKTsKLQkJCWVuY29kZXItPmJh c2UuY3J0YyA9ICZjcnRjLT5iYXNlOwotCQkJZW5jb2Rlci0+Z2V0X2NvbmZpZyhlbmNvZGVyLAot CQkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSkpOwotCQl9IGVsc2Ugewot CQkJZW5jb2Rlci0+YmFzZS5jcnRjID0gTlVMTDsKLQkJfQorc3RhdGljIHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICoKK2dldF9jb25uZWN0b3Jfc3RhdGVfZm9yX2VuY29kZXIoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy KQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKKwlpbnQgaTsKIAotCQllbmNvZGVyLT5jb25u ZWN0b3JzX2FjdGl2ZSA9IGZhbHNlOwotCQlEUk1fREVCVUdfS01TKCJbRU5DT0RFUjolZDolc10g aHcgc3RhdGUgcmVhZG91dDogJXMsIHBpcGUgJWNcbiIsCi0JCQkgICAgICBlbmNvZGVyLT5iYXNl LmJhc2UuaWQsCi0JCQkgICAgICBlbmNvZGVyLT5iYXNlLm5hbWUsCi0JCQkgICAgICBlbmNvZGVy LT5iYXNlLmNydGMgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAotCQkJICAgICAgcGlwZV9uYW1l KHBpcGUpKTsKLQl9CisJZm9yX2VhY2hfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBjb25uZWN0 b3IsIGNvbm5lY3Rvcl9zdGF0ZSwgaSkKKwkJaWYgKGNvbm5lY3Rvcl9zdGF0ZS0+YmVzdF9lbmNv ZGVyID09ICZlbmNvZGVyLT5iYXNlKQorCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0ZTsKKworCXJl dHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHJlYWRvdXRfaHdfY29ubmVjdG9yX2VuY29kZXJf c3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBzdGF0ZS0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoc3RhdGUtPmRldik7CisJc3RydWN0IGludGVsX2NydGMgKmNydGM7CisJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpkcm1fY3J0Y19zdGF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZTsKKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1 Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKmNvbm5lY3Rvcl9zdGF0ZTsKKwllbnVtIHBpcGUgcGlwZTsKIAogCWZvcl9lYWNoX2ludGVs X2Nvbm5lY3RvcihkZXYsIGNvbm5lY3RvcikgeworCQljb25uZWN0b3Jfc3RhdGUgPQorCQkJZHJt X2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCAmY29ubmVjdG9yLT5iYXNlKTsKKwkJ aWYgKElTX0VSUihjb25uZWN0b3Jfc3RhdGUpKQorCQkJcmV0dXJuIFBUUl9FUlIoY29ubmVjdG9y X3N0YXRlKTsKKwogCQlpZiAoY29ubmVjdG9yLT5nZXRfaHdfc3RhdGUoY29ubmVjdG9yKSkgewog CQkJY29ubmVjdG9yLT5iYXNlLmRwbXMgPSBEUk1fTU9ERV9EUE1TX09OOwotCQkJY29ubmVjdG9y LT5lbmNvZGVyLT5jb25uZWN0b3JzX2FjdGl2ZSA9IHRydWU7CiAJCQljb25uZWN0b3ItPmJhc2Uu ZW5jb2RlciA9ICZjb25uZWN0b3ItPmVuY29kZXItPmJhc2U7CiAJCX0gZWxzZSB7CiAJCQljb25u ZWN0b3ItPmJhc2UuZHBtcyA9IERSTV9NT0RFX0RQTVNfT0ZGOwogCQkJY29ubmVjdG9yLT5iYXNl LmVuY29kZXIgPSBOVUxMOwogCQl9CisKKwkJLyogV2UnbGwgdXBkYXRlIHRoZSBjcnRjIGZpZWxk IHdoZW4gcmVhZGluZyBlbmNvZGVyIHN0YXRlICovCisJCWNvbm5lY3Rvcl9zdGF0ZS0+Y3J0YyA9 IE5VTEw7CisKKwkJY29ubmVjdG9yX3N0YXRlLT5iZXN0X2VuY29kZXIgPSBjb25uZWN0b3ItPmJh c2UuZW5jb2RlcjsKKwogCQlEUk1fREVCVUdfS01TKCJbQ09OTkVDVE9SOiVkOiVzXSBodyBzdGF0 ZSByZWFkb3V0OiAlc1xuIiwKIAkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5iYXNlLmlkLAogCQkJ ICAgICAgY29ubmVjdG9yLT5iYXNlLm5hbWUsCiAJCQkgICAgICBjb25uZWN0b3ItPmJhc2UuZW5j b2RlciA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwogCX0KKworCWZvcl9lYWNoX2ludGVsX2Vu Y29kZXIoZGV2LCBlbmNvZGVyKSB7CisJCXBpcGUgPSAwOworCisJCWNvbm5lY3Rvcl9zdGF0ZSA9 CisJCQlnZXRfY29ubmVjdG9yX3N0YXRlX2Zvcl9lbmNvZGVyKHN0YXRlLCBlbmNvZGVyKTsKKwor CQllbmNvZGVyLT5jb25uZWN0b3JzX2FjdGl2ZSA9ICEhY29ubmVjdG9yX3N0YXRlOworCisJCWlm IChlbmNvZGVyLT5nZXRfaHdfc3RhdGUoZW5jb2RlciwgJnBpcGUpKSB7CisJCQllbmNvZGVyLT5i YXNlLmNydGMgPQorCQkJCWRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBlXTsKKwkJ CWNydGMgPSB0b19pbnRlbF9jcnRjKGVuY29kZXItPmJhc2UuY3J0Yyk7CisKKwkJCWRybV9jcnRj X3N0YXRlID0KKwkJCQlzdGF0ZS0+Y3J0Y19zdGF0ZXNbZHJtX2NydGNfaW5kZXgoJmNydGMtPmJh c2UpXTsKKwkJCWNydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGRybV9jcnRjX3N0YXRl KTsKKworCQkJZW5jb2Rlci0+Z2V0X2NvbmZpZyhlbmNvZGVyLCBjcnRjX3N0YXRlKTsKKworCQkJ aWYgKGNvbm5lY3Rvcl9zdGF0ZSkKKwkJCQljb25uZWN0b3Jfc3RhdGUtPmNydGMgPSAmY3J0Yy0+ YmFzZTsKKwkJfSBlbHNlIHsKKwkJCWVuY29kZXItPmJhc2UuY3J0YyA9IE5VTEw7CisJCX0KKwor CQlEUk1fREVCVUdfS01TKCJbRU5DT0RFUjolZDolc10gaHcgc3RhdGUgcmVhZG91dDogJXMsIHBp cGUgJWNcbiIsCisJCQkgICAgICBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsCisJCQkgICAgICBlbmNv ZGVyLT5iYXNlLm5hbWUsCisJCQkgICAgICBlbmNvZGVyLT5iYXNlLmNydGMgPyAiZW5hYmxlZCIg OiAiZGlzYWJsZWQiLAorCQkJICAgICAgcGlwZV9uYW1lKHBpcGUpKTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICoKK2ludGVsX21vZGVzZXRf cmVhZG91dF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpbnRl bF9jcnRjICpjcnRjOworCWludCByZXQgPSAwOworCisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlOworCisJc3RhdGUgPSBkcm1fYXRvbWljX3N0YXRlX2FsbG9jKGRldik7CisJaWYgKCFz dGF0ZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzdGF0ZS0+YWNxdWlyZV9jdHgg PSBkZXYtPm1vZGVfY29uZmlnLmFjcXVpcmVfY3R4OworCisJZm9yX2VhY2hfaW50ZWxfY3J0Yyhk ZXYsIGNydGMpIHsKKwkJcmV0ID0gcmVhZG91dF9od19jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsK KwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gcmVhZG91dF9od19w bGxfc3RhdGUoc3RhdGUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlyZXQgPSBy ZWFkb3V0X2h3X2Nvbm5lY3Rvcl9lbmNvZGVyX3N0YXRlKHN0YXRlKTsKKwlpZiAocmV0KQorCQln b3RvIGVycl9mcmVlOworCisJcmV0dXJuIHN0YXRlOworCitlcnJfZnJlZToKKwlkcm1fYXRvbWlj X3N0YXRlX2ZyZWUoc3RhdGUpOworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKIC8qIFNjYW4g b3V0IHRoZSBjdXJyZW50IGh3IG1vZGVzZXQgc3RhdGUsIHNhbml0aXplcyBpdCBhbmQgbWFwcyBp dCBpbnRvIHRoZSBkcm0KQEAgLTE0Nzk4LDQzICsxNDkwMyw2MSBAQCB2b2lkIGludGVsX21vZGVz ZXRfc2V0dXBfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgIGJvb2wgZm9y Y2VfcmVzdG9yZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOwotCWVudW0gcGlwZSBwaXBlOwotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRj OworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGU7CiAJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbF9jb25maWcgc2hhcmVk X2RwbGxzW0k5MTVfTlVNX1BMTFNdOwogCWludCBpOwogCi0JdW5zaWduZWQgY3J0Y19tYXNrOwor CXN0YXRlID0gaW50ZWxfbW9kZXNldF9yZWFkb3V0X2h3X3N0YXRlKGRldik7CisJaWYgKElTX0VS UihzdGF0ZSkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBvdXQgaHcgc3RhdGVcbiIp OworCQlyZXR1cm47CisJfQorCisJZHJtX2F0b21pY19oZWxwZXJfc3dhcF9zdGF0ZShkZXYsIHN0 YXRlKTsKIAotCWludGVsX21vZGVzZXRfcmVhZG91dF9od19zdGF0ZShkZXYsICZjcnRjX21hc2sp OworCS8qIHN3YXAgc3cvaHcgZHBsbCBzdGF0ZSAqLworCUJVSUxEX0JVR19PTihzaXplb2Yoc2hh cmVkX2RwbGxzKSAhPQorCQkgICAgIHNpemVvZih0b19pbnRlbF9hdG9taWNfc3RhdGUoc3RhdGUp LT5zaGFyZWRfZHBsbCkpOwogCi0JLyoKLQkgKiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBjb25maWcs IGNvcHkgaXQgdG8gZWFjaCBDUlRDIHN0cnVjdAotCSAqIE5vdGUgdGhhdCB0aGlzIGNvdWxkIGdv IGF3YXkgaWYgd2UgbW92ZSB0byB1c2luZyBjcnRjX2NvbmZpZwotCSAqIGNoZWNraW5nIGV2ZXJ5 d2hlcmUuCi0JICovCi0JZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKLQkJaWYgKGNy dGMtPmJhc2Uuc3RhdGUtPmFjdGl2ZSAmJiBpOTE1LmZhc3Rib290KSB7Ci0JCQlpbnRlbF9tb2Rl X2Zyb21fcGlwZV9jb25maWcoJmNydGMtPmJhc2UubW9kZSwKLQkJCQl0b19pbnRlbF9jcnRjX3N0 YXRlKGNydGMtPmJhc2Uuc3RhdGUpKTsKLQkJCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSBmb3Vu ZCBhY3RpdmUgbW9kZTogIiwKLQkJCQkgICAgICBjcnRjLT5iYXNlLmJhc2UuaWQpOwotCQkJZHJt X21vZGVfZGVidWdfcHJpbnRtb2RlbGluZSgmY3J0Yy0+YmFzZS5tb2RlKTsKLQkJfQotCX0KKwlp bnRlbF9hdG9taWNfZHVwbGljYXRlX2RwbGxfc3RhdGUoZGV2X3ByaXYsIHNoYXJlZF9kcGxscyk7 CisJaW50ZWxfc2hhcmVkX2RwbGxfY29tbWl0KHN0YXRlKTsKKwltZW1jcHkodG9faW50ZWxfYXRv bWljX3N0YXRlKHN0YXRlKS0+c2hhcmVkX2RwbGwsCisJICAgICAgIHNoYXJlZF9kcGxscywgc2l6 ZW9mKCpzaGFyZWRfZHBsbHMpICogZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBsbCk7CiAKIAkvKiBI VyBzdGF0ZSBpcyByZWFkIG91dCwgbm93IHdlIG5lZWQgdG8gc2FuaXRpemUgdGhpcyBtZXNzLiAq LwogCWZvcl9lYWNoX2ludGVsX2VuY29kZXIoZGV2LCBlbmNvZGVyKSB7CiAJCWludGVsX3Nhbml0 aXplX2VuY29kZXIoZW5jb2Rlcik7CiAJfQogCi0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlw ZSkgewotCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWc7CisJZm9yX2VhY2hf Y3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgeworCQlzdHJ1Y3QgaW50 ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwkJLyogcHJldmVu dCB1bm5uZWVkZWQgcmVzdG9yZXMgd2l0aCBmb3JjZV9yZXN0b3JlICovCisJCWNydGNfc3RhdGUt PmFjdGl2ZV9jaGFuZ2VkID0KKwkJY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkID0KKwkJY3J0Y19z dGF0ZS0+cGxhbmVzX2NoYW5nZWQgPSBmYWxzZTsKKworCQlpZiAoY3J0Yy0+ZW5hYmxlZCkgewor CQkJaW50ZWxfbW9kZV9mcm9tX3BpcGVfY29uZmlnKCZjcnRjLT5zdGF0ZS0+bW9kZSwKKwkJCQl0 b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKSk7CisKKwkJCWRybV9tb2RlX2NvcHkoJmNy dGMtPm1vZGUsICZjcnRjLT5zdGF0ZS0+bW9kZSk7CisJCQlkcm1fbW9kZV9jb3B5KCZjcnRjLT5o d21vZGUsCisJCQkJICAgICAgJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlKTsKKwkJfQogCi0J CWNydGMgPSB0b19pbnRlbF9jcnRjKGRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBl XSk7Ci0JCXBpcGVfY29uZmlnID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRl KTsKKwkJaW50ZWxfc2FuaXRpemVfY3J0YyhpbnRlbF9jcnRjLAorCQkJCSAgICB0b19pbnRlbF9j cnRjX3N0YXRlKGNydGMtPnN0YXRlKSk7CiAKLQkJaW50ZWxfc2FuaXRpemVfY3J0YyhjcnRjLCBw aXBlX2NvbmZpZyk7Ci0JCWludGVsX2R1bXBfcGlwZV9jb25maWcoY3J0YywgcGlwZV9jb25maWcs CisJCS8qCisJCSAqIHNhbml0aXplX2NydGMgbWF5IGhhdmUgZm9yY2VkIGFuIHVwZGF0ZSBvZiBj cnRjLT5zdGF0ZSwKKwkJICogc28gcmVsb2FkIGluIGludGVsX2R1bXBfcGlwZV9jb25maWcKKwkJ ICovCisJCWludGVsX2R1bXBfcGlwZV9jb25maWcoaW50ZWxfY3J0YywKKwkJCQkgICAgICAgdG9f aW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSksCiAJCQkJICAgICAgICJbc2V0dXBfaHdfc3Rh dGVdIik7CiAJfQogCkBAIC0xNDg1OCwxOSArMTQ5ODEsMTcgQEAgdm9pZCBpbnRlbF9tb2Rlc2V0 X3NldHVwX2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCWlsa193bV9nZXRfaHdf c3RhdGUoZGV2KTsKIAogCWlmIChmb3JjZV9yZXN0b3JlKSB7Ci0JCWk5MTVfcmVkaXNhYmxlX3Zn YShkZXYpOworCQlpbnQgcmV0OwogCi0JCS8qCi0JCSAqIFdlIG5lZWQgdG8gdXNlIHJhdyBpbnRl cmZhY2VzIGZvciByZXN0b3Jpbmcgc3RhdGUgdG8gYXZvaWQKLQkJICogY2hlY2tpbmcgKGJvZ3Vz KSBpbnRlcm1lZGlhdGUgc3RhdGVzLgotCQkgKi8KLQkJZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwg cGlwZSkgewotCQkJc3RydWN0IGRybV9jcnRjICpjcnRjID0KLQkJCQlkZXZfcHJpdi0+cGlwZV90 b19jcnRjX21hcHBpbmdbcGlwZV07CisJCWk5MTVfcmVkaXNhYmxlX3ZnYShkZXYpOwogCi0JCQlp ZiAoY3J0Y19tYXNrICYgKDEgPDwgZHJtX2NydGNfaW5kZXgoY3J0YykpKQotCQkJCWludGVsX2Ny dGNfcmVzdG9yZV9tb2RlKGNydGMpOworCQlyZXQgPSBpbnRlbF9zZXRfbW9kZShzdGF0ZSk7CisJ CWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlc3RvcmUgcHJldmlvdXMgbW9k ZVxuIik7CisJCQlkcm1fYXRvbWljX3N0YXRlX2ZyZWUoc3RhdGUpOwogCQl9CisJfSBlbHNlIHsK KwkJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRlKTsKIAl9CiAKIAlpbnRlbF9tb2Rlc2V0X2No ZWNrX3N0YXRlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDQ5NzFhNWEzNWRi NC4uNDg1MjA5OTNjM2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMTM5NiwxMCAr MTM5NiwxMyBAQCBpbnQgaW50ZWxfY29ubmVjdG9yX2F0b21pY19nZXRfcHJvcGVydHkoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqaW50ZWxf Y3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIHZvaWQgaW50ZWxf Y3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCSAgICAgICBzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKTsKKwogc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKmlu dGVsX2F0b21pY19uZXdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGludGVs X2F0b21pY19jbGVhcl9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqKTsKIHN0cnVjdCBp bnRlbF9zaGFyZWRfZHBsbF9jb25maWcgKgogaW50ZWxfYXRvbWljX2dldF9zaGFyZWRfZHBsbF9z dGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqcyk7Cit2b2lkIGludGVsX2F0b21pY19kdXBs aWNhdGVfZHBsbF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqLAorCQkJCSAgICAgICBz dHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGxfY29uZmlnICopOwogCiBzdGF0aWMgaW5saW5lIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICoKIGludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0tIAoyLjEuMAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK