From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: [PATCH 3/4] drm/i915: Introduce intel_psr.c Date: Fri, 7 Nov 2014 15:55:17 -0800 Message-ID: <1415404518-24955-3-git-send-email-rodrigo.vivi@intel.com> References: <1415404518-24955-1-git-send-email-rodrigo.vivi@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 2B36D6EFB7 for ; Fri, 7 Nov 2014 15:55:10 -0800 (PST) In-Reply-To: <1415404518-24955-1-git-send-email-rodrigo.vivi@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: Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org Tm8gZnVuY3Rpb25hbCBjaGFuZ2VzLiBKdXN0IGNsZWFuaW5nIGFuZCByZW9yZ2FuaXppbmcgaXQu CgpTaWduZWQtb2ZmLWJ5OiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcC5jICAgICAgICAgIHwgMzg2ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgICAgIHwgIDIxICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mcm9udGJ1ZmZlci5jIHwgICA0ICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wc3IuYyAgICAgICAgIHwgNDEzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgNDMzIGluc2VydGlvbnMoKyksIDM5OCBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wc3IuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggODkxZTU4NC4uZTQwODNlNCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUKQEAgLTUxLDYgKzUxLDcgQEAgaTkxNS15ICs9IGludGVsX2F1ZGlvLm8g XAogCSAgaW50ZWxfZnJvbnRidWZmZXIubyBcCiAJICBpbnRlbF9tb2Rlcy5vIFwKIAkgIGludGVs X292ZXJsYXkubyBcCisJICBpbnRlbF9wc3IubyBcCiAJICBpbnRlbF9zaWRlYmFuZC5vIFwKIAkg IGludGVsX3Nwcml0ZS5vCiBpOTE1LSQoQ09ORklHX0FDUEkpCQkrPSBpbnRlbF9hY3BpLm8gaW50 ZWxfb3ByZWdpb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRp LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwppbmRleCA2ODcwM2NlLi5hNWE4 YWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAgc3Rh dGljIHZvaWQgaW50ZWxfZW5hYmxlX2RkaShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5j b2RlcikKIAkJCWludGVsX2RwX3N0b3BfbGlua190cmFpbihpbnRlbF9kcCk7CiAKIAkJaW50ZWxf ZWRwX2JhY2tsaWdodF9vbihpbnRlbF9kcCk7Ci0JCWludGVsX2VkcF9wc3JfZW5hYmxlKGludGVs X2RwKTsKKwkJaW50ZWxfcHNyX2VuYWJsZShpbnRlbF9kcCk7CiAJfQogCiAJaWYgKGludGVsX2Ny dGMtPmNvbmZpZy5oYXNfYXVkaW8pIHsKQEAgLTEyNTQsNyArMTI1NCw3IEBAIHN0YXRpYyB2b2lk IGludGVsX2Rpc2FibGVfZGRpKHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyKQog CWlmICh0eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsKIAkJc3RydWN0IGludGVsX2RwICppbnRl bF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKIAotCQlpbnRlbF9lZHBfcHNyX2Rpc2Fi bGUoaW50ZWxfZHApOworCQlpbnRlbF9wc3JfZGlzYWJsZShpbnRlbF9kcCk7CiAJCWludGVsX2Vk cF9iYWNrbGlnaHRfb2ZmKGludGVsX2RwKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKaW5kZXggZmYwNzFhNy4uM2JjZGY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwpAQCAtMTIyMzEsNyArMTIyMzEsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9zZXR1 cF9vdXRwdXRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJaWYgKFNVUFBPUlRTX1RWKGRldikp CiAJCWludGVsX3R2X2luaXQoZGV2KTsKIAotCWludGVsX2VkcF9wc3JfaW5pdChkZXYpOworCWlu dGVsX3Bzcl9pbml0KGRldik7CiAKIAlmb3JfZWFjaF9pbnRlbF9lbmNvZGVyKGRldiwgZW5jb2Rl cikgewogCQllbmNvZGVyLT5iYXNlLnBvc3NpYmxlX2NydGNzID0gZW5jb2Rlci0+Y3J0Y19tYXNr OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggY2FiNTdlMi4uMWFkMWZiYiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcC5jCkBAIC0yMDY2LDM5MCArMjA2Niw2IEBAIHN0YXRpYyB2b2lkIGludGVs X2RwX2dldF9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCiAJfQogfQogCi1z dGF0aWMgYm9vbCBpc19lZHBfcHNyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0JcmV0 dXJuIGludGVsX2RwLT5wc3JfZHBjZFswXSAmIERQX1BTUl9JU19TVVBQT1JURUQ7Ci19Ci0KLXN0 YXRpYyBib29sIGludGVsX2VkcF9pc19wc3JfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7Ci0KLQlpZiAoIUhBU19QU1IoZGV2KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIEk5 MTVfUkVBRChFRFBfUFNSX0NUTChkZXYpKSAmIEVEUF9QU1JfRU5BQkxFOwotfQotCi1zdGF0aWMg dm9pZCBpbnRlbF9lZHBfcHNyX3dyaXRlX3ZzYyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAot CQkJCSAgICBzdHJ1Y3QgZWRwX3ZzY19wc3IgKnZzY19wc3IpCi17Ci0Jc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGRpZ19wb3J0LT5iYXNlLmJhc2UuZGV2OwotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGludGVs X2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGRpZ19wb3J0LT5iYXNlLmJhc2UuY3J0Yyk7Ci0J dTMyIGN0bF9yZWcgPSBIU1dfVFZJREVPX0RJUF9DVEwoY3J0Yy0+Y29uZmlnLmNwdV90cmFuc2Nv ZGVyKTsKLQl1MzIgZGF0YV9yZWcgPSBIU1dfVFZJREVPX0RJUF9WU0NfREFUQShjcnRjLT5jb25m aWcuY3B1X3RyYW5zY29kZXIpOwotCXVpbnQzMl90ICpkYXRhID0gKHVpbnQzMl90ICopIHZzY19w c3I7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQkvKiBBcyBwZXIgQlNQZWMgKFBpcGUgVmlkZW8gRGF0 YSBJc2xhbmQgUGFja2V0KSwgd2UgbmVlZCB0byBkaXNhYmxlCi0JICAgdGhlIHZpZGVvIERJUCBi ZWluZyB1cGRhdGVkIGJlZm9yZSBwcm9ncmFtIHZpZGVvIERJUCBkYXRhIGJ1ZmZlcgotCSAgIHJl Z2lzdGVycyBmb3IgRElQIGJlaW5nIHVwZGF0ZWQuICovCi0JSTkxNV9XUklURShjdGxfcmVnLCAw KTsKLQlQT1NUSU5HX1JFQUQoY3RsX3JlZyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVklERU9fRElQ X1ZTQ19EQVRBX1NJWkU7IGkgKz0gNCkgewotCQlpZiAoaSA8IHNpemVvZihzdHJ1Y3QgZWRwX3Zz Y19wc3IpKQotCQkJSTkxNV9XUklURShkYXRhX3JlZyArIGksICpkYXRhKyspOwotCQllbHNlCi0J CQlJOTE1X1dSSVRFKGRhdGFfcmVnICsgaSwgMCk7Ci0JfQotCi0JSTkxNV9XUklURShjdGxfcmVn LCBWSURFT19ESVBfRU5BQkxFX1ZTQ19IU1cpOwotCVBPU1RJTkdfUkVBRChjdGxfcmVnKTsKLX0K LQotc3RhdGljIHZvaWQgaW50ZWxfZWRwX3Bzcl9zZXR1cF92c2Moc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCkKLXsKLQlzdHJ1Y3QgZWRwX3ZzY19wc3IgcHNyX3ZzYzsKLQotCS8qIFByZXBhcmUg VlNDIHBhY2tldCBhcyBwZXIgRURQIDEuMyBzcGVjLCBUYWJsZSAzLjEwICovCi0JbWVtc2V0KCZw c3JfdnNjLCAwLCBzaXplb2YocHNyX3ZzYykpOwotCXBzcl92c2Muc2RwX2hlYWRlci5IQjAgPSAw OwotCXBzcl92c2Muc2RwX2hlYWRlci5IQjEgPSAweDc7Ci0JcHNyX3ZzYy5zZHBfaGVhZGVyLkhC MiA9IDB4MjsKLQlwc3JfdnNjLnNkcF9oZWFkZXIuSEIzID0gMHg4OwotCWludGVsX2VkcF9wc3Jf d3JpdGVfdnNjKGludGVsX2RwLCAmcHNyX3ZzYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2Vk cF9wc3JfZW5hYmxlX3Npbmsoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKLXsKLQlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXY7Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50 MzJfdCBhdXhfY2xvY2tfZGl2aWRlcjsKLQlpbnQgcHJlY2hhcmdlID0gMHgzOwotCWJvb2wgb25s eV9zdGFuZGJ5ID0gZmFsc2U7Ci0Jc3RhdGljIGNvbnN0IHVpbnQ4X3QgYXV4X21zZ1tdID0gewot CQlbMF0gPSBEUF9BVVhfTkFUSVZFX1dSSVRFIDw8IDQsCi0JCVsxXSA9IERQX1NFVF9QT1dFUiA+ PiA4LAotCQlbMl0gPSBEUF9TRVRfUE9XRVIgJiAweGZmLAotCQlbM10gPSAxIC0gMSwKLQkJWzRd ID0gRFBfU0VUX1BPV0VSX0QwLAotCX07Ci0JaW50IGk7Ci0KLQlCVUlMRF9CVUdfT04oc2l6ZW9m KGF1eF9tc2cpID4gMjApOwotCi0JYXV4X2Nsb2NrX2RpdmlkZXIgPSBpbnRlbF9kcC0+Z2V0X2F1 eF9jbG9ja19kaXZpZGVyKGludGVsX2RwLCAwKTsKLQotCWlmIChJU19CUk9BRFdFTEwoZGV2KSAm JiBkaWdfcG9ydC0+cG9ydCAhPSBQT1JUX0EpCi0JCW9ubHlfc3RhbmRieSA9IHRydWU7Ci0KLQkv KiBFbmFibGUgUFNSIGluIHNpbmsgKi8KLQlpZiAoaW50ZWxfZHAtPnBzcl9kcGNkWzFdICYgRFBf UFNSX05PX1RSQUlOX09OX0VYSVQgfHwgb25seV9zdGFuZGJ5KQotCQlkcm1fZHBfZHBjZF93cml0 ZWIoJmludGVsX2RwLT5hdXgsIERQX1BTUl9FTl9DRkcsCi0JCQkJICAgRFBfUFNSX0VOQUJMRSAm IH5EUF9QU1JfTUFJTl9MSU5LX0FDVElWRSk7Ci0JZWxzZQotCQlkcm1fZHBfZHBjZF93cml0ZWIo JmludGVsX2RwLT5hdXgsIERQX1BTUl9FTl9DRkcsCi0JCQkJICAgRFBfUFNSX0VOQUJMRSB8IERQ X1BTUl9NQUlOX0xJTktfQUNUSVZFKTsKLQotCS8qIFNldHVwIEFVWCByZWdpc3RlcnMgKi8KLQlm b3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGF1eF9tc2cpOyBpICs9IDQpCi0JCUk5MTVfV1JJVEUoRURQ X1BTUl9BVVhfREFUQTEoZGV2KSArIGksCi0JCQkgICBpbnRlbF9kcF9wYWNrX2F1eCgmYXV4X21z Z1tpXSwgc2l6ZW9mKGF1eF9tc2cpIC0gaSkpOwotCi0JSTkxNV9XUklURShFRFBfUFNSX0FVWF9D VEwoZGV2KSwKLQkJICAgRFBfQVVYX0NIX0NUTF9USU1FX09VVF80MDB1cyB8Ci0JCSAgIChzaXpl b2YoYXV4X21zZykgPDwgRFBfQVVYX0NIX0NUTF9NRVNTQUdFX1NJWkVfU0hJRlQpIHwKLQkJICAg KHByZWNoYXJnZSA8PCBEUF9BVVhfQ0hfQ1RMX1BSRUNIQVJHRV8yVVNfU0hJRlQpIHwKLQkJICAg KGF1eF9jbG9ja19kaXZpZGVyIDw8IERQX0FVWF9DSF9DVExfQklUX0NMT0NLXzJYX1NISUZUKSk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2VkcF9wc3JfZW5hYmxlX3NvdXJjZShzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0 ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBk aWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IG1heF9zbGVlcF90aW1lID0gMHgxZjsK LQkvKiBMYXRlbHkgaXQgd2FzIGlkZW50aWZpZWQgdGhhdCBkZXBlbmRpbmcgb24gcGFuZWwgaWRs ZSBmcmFtZSBjb3VudAotCSAqIGNhbGN1bGF0ZWQgYXQgSFcgY2FuIGJlIG9mZiBieSAxLiBTbyBs ZXQncyB1c2Ugd2hhdCBjYW1lCi0JICogZnJvbSBWQlQgKyAxIGFuZCBhdCBtaW5pbXVtIDIgdG8g c3RheSBvbiB0aGUgc2FmZXN0IHNpZGUuCi0JICovCi0JdWludDMyX3QgaWRsZV9mcmFtZXMgPSBk ZXZfcHJpdi0+dmJ0LnBzci5pZGxlX2ZyYW1lcyA/Ci0JCQkgICAgICAgZGV2X3ByaXYtPnZidC5w c3IuaWRsZV9mcmFtZXMgKyAxIDogMjsKLQl1aW50MzJfdCB2YWwgPSAweDA7Ci0JY29uc3QgdWlu dDMyX3QgbGlua19lbnRyeV90aW1lID0gRURQX1BTUl9NSU5fTElOS19FTlRSWV9USU1FXzhfTElO RVM7Ci0JYm9vbCBvbmx5X3N0YW5kYnkgPSBmYWxzZTsKLQotCWlmIChJU19CUk9BRFdFTEwoZGV2 KSAmJiBkaWdfcG9ydC0+cG9ydCAhPSBQT1JUX0EpCi0JCW9ubHlfc3RhbmRieSA9IHRydWU7Ci0K LQlpZiAoaW50ZWxfZHAtPnBzcl9kcGNkWzFdICYgRFBfUFNSX05PX1RSQUlOX09OX0VYSVQgfHwg b25seV9zdGFuZGJ5KSB7Ci0JCXZhbCB8PSBFRFBfUFNSX0xJTktfU1RBTkRCWTsKLQkJdmFsIHw9 IEVEUF9QU1JfVFAyX1RQM19USU1FXzB1czsKLQkJdmFsIHw9IEVEUF9QU1JfVFAxX1RJTUVfMHVz OwotCQl2YWwgfD0gRURQX1BTUl9TS0lQX0FVWF9FWElUOwotCQl2YWwgfD0gSVNfQlJPQURXRUxM KGRldikgPyBCRFdfUFNSX1NJTkdMRV9GUkFNRSA6IDA7Ci0JfSBlbHNlCi0JCXZhbCB8PSBFRFBf UFNSX0xJTktfRElTQUJMRTsKLQotCUk5MTVfV1JJVEUoRURQX1BTUl9DVEwoZGV2KSwgdmFsIHwK LQkJICAgKElTX0JST0FEV0VMTChkZXYpID8gMCA6IGxpbmtfZW50cnlfdGltZSkgfAotCQkgICBt YXhfc2xlZXBfdGltZSA8PCBFRFBfUFNSX01BWF9TTEVFUF9USU1FX1NISUZUIHwKLQkJICAgaWRs ZV9mcmFtZXMgPDwgRURQX1BTUl9JRExFX0ZSQU1FX1NISUZUIHwKLQkJICAgRURQX1BTUl9FTkFC TEUpOwotfQotCi1zdGF0aWMgYm9vbCBpbnRlbF9lZHBfcHNyX21hdGNoX2NvbmRpdGlvbnMoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCkKLXsKLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpk aWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBk aWdfcG9ydC0+YmFzZS5iYXNlLmNydGM7Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMg PSB0b19pbnRlbF9jcnRjKGNydGMpOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYt PnBzci5sb2NrKTsKLQlXQVJOX09OKCFkcm1fbW9kZXNldF9pc19sb2NrZWQoJmRldi0+bW9kZV9j b25maWcuY29ubmVjdGlvbl9tdXRleCkpOwotCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tl ZCgmY3J0Yy0+bXV0ZXgpKTsKLQotCWRldl9wcml2LT5wc3Iuc291cmNlX29rID0gZmFsc2U7Ci0K LQlpZiAoSVNfSEFTV0VMTChkZXYpICYmIGRpZ19wb3J0LT5wb3J0ICE9IFBPUlRfQSkgewotCQlE Uk1fREVCVUdfS01TKCJIU1cgdGllcyBQU1IgdG8gRERJIEEgKGVEUClcbiIpOwotCQlyZXR1cm4g ZmFsc2U7Ci0JfQotCi0JaWYgKCFpOTE1LmVuYWJsZV9wc3IpIHsKLQkJRFJNX0RFQlVHX0tNUygi UFNSIGRpc2FibGUgYnkgZmxhZ1xuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKiBCZWxv dyBsaW1pdGF0aW9ucyBhcmVuJ3QgdmFsaWQgZm9yIEJyb2Fkd2VsbCAqLwotCWlmIChJU19CUk9B RFdFTEwoZGV2KSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoSTkxNV9SRUFEKEhTV19TVEVSRU9fM0Rf Q1RMKGludGVsX2NydGMtPmNvbmZpZy5jcHVfdHJhbnNjb2RlcikpICYKLQkgICAgUzNEX0VOQUJM RSkgewotCQlEUk1fREVCVUdfS01TKCJQU1IgY29uZGl0aW9uIGZhaWxlZDogU3RlcmVvIDNEIGlz IEVuYWJsZWRcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGludGVsX2NydGMtPmNv bmZpZy5hZGp1c3RlZF9tb2RlLmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpIHsKLQkJ RFJNX0RFQlVHX0tNUygiUFNSIGNvbmRpdGlvbiBmYWlsZWQ6IEludGVybGFjZWQgaXMgRW5hYmxl ZFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLSBvdXQ6Ci0JZGV2X3ByaXYtPnBzci5zb3Vy Y2Vfb2sgPSB0cnVlOwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9lZHBf cHNyX2RvX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHAp OwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRl djsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OwotCi0JV0FSTl9PTihJOTE1X1JFQUQoRURQX1BTUl9DVEwoZGV2KSkgJiBFRFBfUFNSX0VOQUJM RSk7Ci0JV0FSTl9PTihkZXZfcHJpdi0+cHNyLmFjdGl2ZSk7Ci0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmZGV2X3ByaXYtPnBzci5sb2NrKTsKLQotCS8qIEVuYWJsZS9SZS1lbmFibGUgUFNSIG9uIHRo ZSBob3N0ICovCi0JaW50ZWxfZWRwX3Bzcl9lbmFibGVfc291cmNlKGludGVsX2RwKTsKLQotCWRl dl9wcml2LT5wc3IuYWN0aXZlID0gdHJ1ZTsKLX0KLQotdm9pZCBpbnRlbF9lZHBfcHNyX2VuYWJs ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBpbnRlbF9kcF90b19kZXYoaW50ZWxfZHApOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoIUhBU19QU1IoZGV2KSkgewotCQlE Uk1fREVCVUdfS01TKCJQU1Igbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtXG4iKTsKLQkJ cmV0dXJuOwotCX0KLQotCWlmICghaXNfZWRwX3BzcihpbnRlbF9kcCkpIHsKLQkJRFJNX0RFQlVH X0tNUygiUFNSIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwYW5lbFxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwotCWlmIChkZXZfcHJpdi0+cHNy LmVuYWJsZWQpIHsKLQkJRFJNX0RFQlVHX0tNUygiUFNSIGFscmVhZHkgaW4gdXNlXG4iKTsKLQkJ Z290byB1bmxvY2s7Ci0JfQotCi0JaWYgKCFpbnRlbF9lZHBfcHNyX21hdGNoX2NvbmRpdGlvbnMo aW50ZWxfZHApKQotCQlnb3RvIHVubG9jazsKLQotCWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1 ZmZlcl9iaXRzID0gMDsKLQotCWludGVsX2VkcF9wc3Jfc2V0dXBfdnNjKGludGVsX2RwKTsKLQot CS8qIEF2b2lkIGNvbnRpbnVvdXMgUFNSIGV4aXQgYnkgbWFza2luZyBtZW11cCBhbmQgaHBkICov Ci0JSTkxNV9XUklURShFRFBfUFNSX0RFQlVHX0NUTChkZXYpLCBFRFBfUFNSX0RFQlVHX01BU0tf TUVNVVAgfAotCQkgICBFRFBfUFNSX0RFQlVHX01BU0tfSFBEIHwgRURQX1BTUl9ERUJVR19NQVNL X0xQU1ApOwotCi0JLyogRW5hYmxlIFBTUiBvbiB0aGUgcGFuZWwgKi8KLQlpbnRlbF9lZHBfcHNy X2VuYWJsZV9zaW5rKGludGVsX2RwKTsKLQotCWRldl9wcml2LT5wc3IuZW5hYmxlZCA9IGludGVs X2RwOwotdW5sb2NrOgotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKLX0KLQot dm9pZCBpbnRlbF9lZHBfcHNyX2Rpc2FibGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKLXsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZHBfdG9fZGV2KGludGVsX2RwKTsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0J bXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKLQlpZiAoIWRldl9wcml2LT5wc3IuZW5h YmxlZCkgewotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Ci0JCXJldHVybjsK LQl9Ci0KLQlpZiAoZGV2X3ByaXYtPnBzci5hY3RpdmUpIHsKLQkJSTkxNV9XUklURShFRFBfUFNS X0NUTChkZXYpLAotCQkJICAgSTkxNV9SRUFEKEVEUF9QU1JfQ1RMKGRldikpICYgfkVEUF9QU1Jf RU5BQkxFKTsKLQotCQkvKiBXYWl0IHRpbGwgUFNSIGlzIGlkbGUgKi8KLQkJaWYgKF93YWl0X2Zv cigoSTkxNV9SRUFEKEVEUF9QU1JfU1RBVFVTX0NUTChkZXYpKSAmCi0JCQkgICAgICAgRURQX1BT Ul9TVEFUVVNfU1RBVEVfTUFTSykgPT0gMCwgMjAwMCwgMTApKQotCQkJRFJNX0VSUk9SKCJUaW1l ZCBvdXQgd2FpdGluZyBmb3IgUFNSIElkbGUgU3RhdGVcbiIpOwotCi0JCWRldl9wcml2LT5wc3Iu YWN0aXZlID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJV0FSTl9PTihJOTE1X1JFQUQoRURQX1BTUl9D VEwoZGV2KSkgJiBFRFBfUFNSX0VOQUJMRSk7Ci0JfQotCi0JZGV2X3ByaXYtPnBzci5lbmFibGVk ID0gTlVMTDsKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Ci0KLQljYW5jZWxf ZGVsYXllZF93b3JrX3N5bmMoJmRldl9wcml2LT5wc3Iud29yayk7Ci19Ci0KLXN0YXRpYyB2b2lk IGludGVsX2VkcF9wc3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHR5cGVv ZigqZGV2X3ByaXYpLCBwc3Iud29yay53b3JrKTsKLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw ID0gZGV2X3ByaXYtPnBzci5lbmFibGVkOwotCi0JLyogV2UgaGF2ZSB0byBtYWtlIHN1cmUgUFNS IGlzIHJlYWR5IGZvciByZS1lbmFibGUKLQkgKiBvdGhlcndpc2UgaXQga2VlcHMgZGlzYWJsZWQg dW50aWwgbmV4dCBmdWxsIGVuYWJsZS9kaXNhYmxlIGN5Y2xlLgotCSAqIFBTUiBtaWdodCB0YWtl IHNvbWUgdGltZSB0byBnZXQgZnVsbHkgZGlzYWJsZWQKLQkgKiBhbmQgYmUgcmVhZHkgZm9yIHJl LWVuYWJsZS4KLQkgKi8KLQlpZiAod2FpdF9mb3IoKEk5MTVfUkVBRChFRFBfUFNSX1NUQVRVU19D VEwoZGV2X3ByaXYtPmRldikpICYKLQkJICAgICAgRURQX1BTUl9TVEFUVVNfU1RBVEVfTUFTSykg PT0gMCwgNTApKSB7Ci0JCURSTV9FUlJPUigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFBTUiBJZGxl IGZvciByZS1lbmFibGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGV2X3By aXYtPnBzci5sb2NrKTsKLQlpbnRlbF9kcCA9IGRldl9wcml2LT5wc3IuZW5hYmxlZDsKLQotCWlm ICghaW50ZWxfZHApCi0JCWdvdG8gdW5sb2NrOwotCi0JLyoKLQkgKiBUaGUgZGVsYXllZCB3b3Jr IGNhbiByYWNlIHdpdGggYW4gaW52YWxpZGF0ZSBoZW5jZSB3ZSBuZWVkIHRvCi0JICogcmVjaGVj ay4gU2luY2UgcHNyX2ZsdXNoIGZpcnN0IGNsZWFycyB0aGlzIGFuZCB0aGVuIHJlc2NoZWR1bGVz IHdlCi0JICogd29uJ3QgZXZlciBtaXNzIGEgZmx1c2ggd2hlbiBiYWlsaW5nIG91dCBoZXJlLgot CSAqLwotCWlmIChkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cykKLQkJZ290byB1 bmxvY2s7Ci0KLQlpbnRlbF9lZHBfcHNyX2RvX2VuYWJsZShpbnRlbF9kcCk7Ci11bmxvY2s6Ci0J bXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwotfQotCi1zdGF0aWMgdm9pZCBpbnRl bF9lZHBfcHNyX2RvX2V4aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKGRldl9w cml2LT5wc3IuYWN0aXZlKSB7Ci0JCXUzMiB2YWwgPSBJOTE1X1JFQUQoRURQX1BTUl9DVEwoZGV2 KSk7Ci0KLQkJV0FSTl9PTighKHZhbCAmIEVEUF9QU1JfRU5BQkxFKSk7Ci0KLQkJSTkxNV9XUklU RShFRFBfUFNSX0NUTChkZXYpLCB2YWwgJiB+RURQX1BTUl9FTkFCTEUpOwotCi0JCWRldl9wcml2 LT5wc3IuYWN0aXZlID0gZmFsc2U7Ci0JfQotCi19Ci0KLXZvaWQgaW50ZWxfZWRwX3Bzcl9pbnZh bGlkYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgICB1bnNpZ25lZCBmcm9udGJ1 ZmZlcl9iaXRzKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCWVudW0gcGlwZSBwaXBlOwot Ci0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKLQlpZiAoIWRldl9wcml2LT5wc3Iu ZW5hYmxlZCkgewotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Ci0JCXJldHVy bjsKLQl9Ci0KLQljcnRjID0gZHBfdG9fZGlnX3BvcnQoZGV2X3ByaXYtPnBzci5lbmFibGVkKS0+ YmFzZS5iYXNlLmNydGM7Ci0JcGlwZSA9IHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGU7Ci0KLQlp bnRlbF9lZHBfcHNyX2RvX2V4aXQoZGV2KTsKLQotCWZyb250YnVmZmVyX2JpdHMgJj0gSU5URUxf RlJPTlRCVUZGRVJfQUxMX01BU0socGlwZSk7Ci0KLQlkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRi dWZmZXJfYml0cyB8PSBmcm9udGJ1ZmZlcl9iaXRzOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYt PnBzci5sb2NrKTsKLX0KLQotdm9pZCBpbnRlbF9lZHBfcHNyX2ZsdXNoKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCi0JCQkgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cykKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YzsKLQllbnVtIHBpcGUgcGlwZTsKLQotCW11dGV4X2xvY2soJmRldl9wcml2LT5w c3IubG9jayk7Ci0JaWYgKCFkZXZfcHJpdi0+cHNyLmVuYWJsZWQpIHsKLQkJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+cHNyLmxvY2spOwotCQlyZXR1cm47Ci0JfQotCi0JY3J0YyA9IGRwX3RvX2Rp Z19wb3J0KGRldl9wcml2LT5wc3IuZW5hYmxlZCktPmJhc2UuYmFzZS5jcnRjOwotCXBpcGUgPSB0 b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOwotCWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZl cl9iaXRzICY9IH5mcm9udGJ1ZmZlcl9iaXRzOwotCi0JLyoKLQkgKiBPbiBIYXN3ZWxsIHNwcml0 ZSBwbGFuZSB1cGRhdGVzIGRvbid0IHJlc3VsdCBpbiBhIHBzciBpbnZhbGlkYXRpbmcKLQkgKiBz aWduYWwgaW4gdGhlIGhhcmR3YXJlLiBXaGljaCBtZWFucyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGZh a2UgdGhpcyBpbgotCSAqIHNvZnR3YXJlIGZvciBhbGwgZmx1c2hlcywgbm90IGp1c3Qgd2hlbiB3 ZSd2ZSBzZWVuIGEgcHJlY2VkaW5nCi0JICogaW52YWxpZGF0aW9uIHRocm91Z2ggZnJvbnRidWZm ZXIgcmVuZGVyaW5nLgotCSAqLwotCWlmIChJU19IQVNXRUxMKGRldikgJiYKLQkgICAgKGZyb250 YnVmZmVyX2JpdHMgJiBJTlRFTF9GUk9OVEJVRkZFUl9TUFJJVEUocGlwZSkpKQotCQlpbnRlbF9l ZHBfcHNyX2RvX2V4aXQoZGV2KTsKLQotCWlmICghZGV2X3ByaXYtPnBzci5hY3RpdmUgJiYgIWRl dl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQotCQlzY2hlZHVsZV9kZWxheWVkX3dv cmsoJmRldl9wcml2LT5wc3Iud29yaywKLQkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKDEwMCkp OwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKLX0KLQotdm9pZCBpbnRlbF9l ZHBfcHNyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JSU5JVF9ERUxBWUVEX1dP UksoJmRldl9wcml2LT5wc3Iud29yaywgaW50ZWxfZWRwX3Bzcl93b3JrKTsKLQltdXRleF9pbml0 KCZkZXZfcHJpdi0+cHNyLmxvY2spOwotfQotCiBzdGF0aWMgdm9pZCBpbnRlbF9kaXNhYmxlX2Rw KHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQogewogCXN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoJmVuY29kZXItPmJhc2UpOwpAQCAtNTEyMCw3ICs0NzM2 LDcgQEAgdm9pZCBpbnRlbF9kcF9zZXRfZHJyc19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBpbnQgcmVmcmVzaF9yYXRlKQogCSAqIGhhcmQgdG8gdGVsbCB3aXRob3V0IHNlZWluZyB0aGUg dXNlciBvZiB0aGlzIGZ1bmN0aW9uIG9mIHRoaXMgY29kZS4KIAkgKiBDaGVjayBsb2NraW5nIGFu ZCBvcmRlcmluZyBvbmNlIHRoYXQgbGFuZHMuCiAJICovCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+ Z2VuIDwgOCAmJiBpbnRlbF9lZHBfaXNfcHNyX2VuYWJsZWQoZGV2KSkgeworCWlmIChJTlRFTF9J TkZPKGRldiktPmdlbiA8IDggJiYgaW50ZWxfcHNyX2lzX2VuYWJsZWQoZGV2KSkgewogCQlEUk1f REVCVUdfS01TKCJEUlJTIGlzIGRpc2FibGVkIGFzIFBTUiBpcyBlbmFibGVkXG4iKTsKIAkJcmV0 dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggNWM2MjJhZC4uZGYyNWEwOSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTk5MiwyMSArOTkyLDE2IEBAIHZvaWQgaW50 ZWxfZWRwX2JhY2tsaWdodF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7CiB2b2lkIGlu dGVsX2VkcF9wYW5lbF92ZGRfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7CiB2b2lkIGlu dGVsX2VkcF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKIHZvaWQgaW50ZWxf ZWRwX3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKLXZvaWQgaW50ZWxfZWRw X3Bzcl9lbmFibGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Ci12b2lkIGludGVsX2VkcF9w c3JfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKIHZvaWQgaW50ZWxfZHBfc2V0 X2RycnNfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHJlZnJlc2hfcmF0ZSk7Ci12 b2lkIGludGVsX2VkcF9wc3JfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJ ICAgICAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cyk7Ci12b2lkIGludGVsX2VkcF9wc3JfZmx1 c2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSB1bnNpZ25lZCBmcm9udGJ1ZmZlcl9iaXRz KTsKLXZvaWQgaW50ZWxfZWRwX3Bzcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotCiB2 b2lkIGludGVsX2RwX2FkZF9wcm9wZXJ0aWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogdm9pZCBpbnRlbF9kcF9tc3Rfc3VzcGVu ZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaW50ZWxfZHBfbXN0X3Jlc3VtZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKIGludCBpbnRlbF9kcF9tYXhfbGlua19idyhzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKTsKIHZvaWQgaW50ZWxfZHBfaG90X3BsdWcoc3RydWN0IGludGVsX2Vu Y29kZXIgKmludGVsX2VuY29kZXIpOwogdm9pZCB2bHZfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit1aW50MzJfdCBpbnRlbF9kcF9wYWNr X2F1eChjb25zdCB1aW50OF90ICpzcmMsIGludCBzcmNfYnl0ZXMpOwordm9pZCBpbnRlbF9kcF91 bnBhY2tfYXV4KHVpbnQzMl90IHNyYywgdWludDhfdCAqZHN0LCBpbnQgZHN0X2J5dGVzKTsKKwog LyogaW50ZWxfZHBfbXN0LmMgKi8KIGludCBpbnRlbF9kcF9tc3RfZW5jb2Rlcl9pbml0KHN0cnVj dCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LCBpbnQgY29ubl9pZCk7CiB2b2lk IGludGVsX2RwX21zdF9lbmNvZGVyX2NsZWFudXAoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq aW50ZWxfZGlnX3BvcnQpOwpAQCAtMTEwNyw2ICsxMTAyLDE2IEBAIGV4dGVybiBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqaW50ZWxfZmluZF9wYW5lbF9kb3duY2xvY2soCiAJCQkJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKmZpeGVkX21vZGUsCiAJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3Rvcik7CiAKKy8qIGludGVsX3Bzci5jICovCitib29sIGludGVsX3Bzcl9pc19lbmFibGVk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBpbnRlbF9wc3JfZW5hYmxlKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApOwordm9pZCBpbnRlbF9wc3JfZGlzYWJsZShzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKTsKK3ZvaWQgaW50ZWxfcHNyX2ludmFsaWRhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCSAgICAgIHVuc2lnbmVkIGZyb250YnVmZmVyX2JpdHMpOwordm9pZCBpbnRl bF9wc3JfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSB1bnNpZ25lZCBmcm9udGJ1 ZmZlcl9iaXRzKTsKK3ZvaWQgaW50ZWxfcHNyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 CisKIC8qIGludGVsX3J1bnRpbWVfcG0uYyAqLwogaW50IGludGVsX3Bvd2VyX2RvbWFpbnNfaW5p dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqKTsKIHZvaWQgaW50ZWxfcG93ZXJfZG9tYWluc19m aW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZnJvbnRidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Zyb250YnVmZmVyLmMKaW5kZXggNThjZjJlNi4uNzlmNmQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZnJvbnRidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9mcm9udGJ1ZmZlci5jCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBpbnRlbF9m Yl9vYmpfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCiAJaW50 ZWxfbWFya19mYl9idXN5KGRldiwgb2JqLT5mcm9udGJ1ZmZlcl9iaXRzLCByaW5nKTsKIAotCWlu dGVsX2VkcF9wc3JfaW52YWxpZGF0ZShkZXYsIG9iai0+ZnJvbnRidWZmZXJfYml0cyk7CisJaW50 ZWxfcHNyX2ludmFsaWRhdGUoZGV2LCBvYmotPmZyb250YnVmZmVyX2JpdHMpOwogfQogCiAvKioK QEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIGludGVsX2Zyb250YnVmZmVyX2ZsdXNoKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAKIAlpbnRlbF9tYXJrX2ZiX2J1c3koZGV2LCBmcm9udGJ1ZmZlcl9i aXRzLCBOVUxMKTsKIAotCWludGVsX2VkcF9wc3JfZmx1c2goZGV2LCBmcm9udGJ1ZmZlcl9iaXRz KTsKKwlpbnRlbF9wc3JfZmx1c2goZGV2LCBmcm9udGJ1ZmZlcl9iaXRzKTsKIAogCS8qCiAJICog RklYTUU6IFVuY29uZGl0aW9uYWwgZmJjIGZsdXNoaW5nIGhlcmUgaXMgYSByYXRoZXIgZ3Jvc3Mg aGFjayBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Bzci5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcHNyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNzkzZjQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3Bzci5jCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIw MTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisKKyNpbmNsdWRlICJpbnRl bF9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCitzdGF0aWMgYm9vbCBpc19lZHBfcHNy KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJcmV0dXJuIGludGVsX2RwLT5wc3JfZHBj ZFswXSAmIERQX1BTUl9JU19TVVBQT1JURUQ7Cit9CisKK2Jvb2wgaW50ZWxfcHNyX2lzX2VuYWJs ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFIQVNfUFNSKGRldikpCisJCXJl dHVybiBmYWxzZTsKKworCXJldHVybiBJOTE1X1JFQUQoRURQX1BTUl9DVEwoZGV2KSkgJiBFRFBf UFNSX0VOQUJMRTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcHNyX3dyaXRlX3ZzYyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLAorCQkJCSAgICBzdHJ1Y3QgZWRwX3ZzY19wc3IgKnZzY19wc3Ip Cit7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9y dChpbnRlbF9kcCk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRpZ19wb3J0LT5iYXNlLmJh c2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGRpZ19wb3J0 LT5iYXNlLmJhc2UuY3J0Yyk7CisJdTMyIGN0bF9yZWcgPSBIU1dfVFZJREVPX0RJUF9DVEwoY3J0 Yy0+Y29uZmlnLmNwdV90cmFuc2NvZGVyKTsKKwl1MzIgZGF0YV9yZWcgPSBIU1dfVFZJREVPX0RJ UF9WU0NfREFUQShjcnRjLT5jb25maWcuY3B1X3RyYW5zY29kZXIpOworCXVpbnQzMl90ICpkYXRh ID0gKHVpbnQzMl90ICopIHZzY19wc3I7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBBcyBwZXIg QlNQZWMgKFBpcGUgVmlkZW8gRGF0YSBJc2xhbmQgUGFja2V0KSwgd2UgbmVlZCB0byBkaXNhYmxl CisJICAgdGhlIHZpZGVvIERJUCBiZWluZyB1cGRhdGVkIGJlZm9yZSBwcm9ncmFtIHZpZGVvIERJ UCBkYXRhIGJ1ZmZlcgorCSAgIHJlZ2lzdGVycyBmb3IgRElQIGJlaW5nIHVwZGF0ZWQuICovCisJ STkxNV9XUklURShjdGxfcmVnLCAwKTsKKwlQT1NUSU5HX1JFQUQoY3RsX3JlZyk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgVklERU9fRElQX1ZTQ19EQVRBX1NJWkU7IGkgKz0gNCkgeworCQlpZiAoaSA8 IHNpemVvZihzdHJ1Y3QgZWRwX3ZzY19wc3IpKQorCQkJSTkxNV9XUklURShkYXRhX3JlZyArIGks ICpkYXRhKyspOworCQllbHNlCisJCQlJOTE1X1dSSVRFKGRhdGFfcmVnICsgaSwgMCk7CisJfQor CisJSTkxNV9XUklURShjdGxfcmVnLCBWSURFT19ESVBfRU5BQkxFX1ZTQ19IU1cpOworCVBPU1RJ TkdfUkVBRChjdGxfcmVnKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcHNyX3NldHVwX3ZzYyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBlZHBfdnNjX3BzciBwc3JfdnNj OworCisJLyogUHJlcGFyZSBWU0MgcGFja2V0IGFzIHBlciBFRFAgMS4zIHNwZWMsIFRhYmxlIDMu MTAgKi8KKwltZW1zZXQoJnBzcl92c2MsIDAsIHNpemVvZihwc3JfdnNjKSk7CisJcHNyX3ZzYy5z ZHBfaGVhZGVyLkhCMCA9IDA7CisJcHNyX3ZzYy5zZHBfaGVhZGVyLkhCMSA9IDB4NzsKKwlwc3Jf dnNjLnNkcF9oZWFkZXIuSEIyID0gMHgyOworCXBzcl92c2Muc2RwX2hlYWRlci5IQjMgPSAweDg7 CisJaW50ZWxfcHNyX3dyaXRlX3ZzYyhpbnRlbF9kcCwgJnBzcl92c2MpOworfQorCitzdGF0aWMg dm9pZCBpbnRlbF9wc3JfZW5hYmxlX3Npbmsoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sK KwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGlu dGVsX2RwKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGlnX3BvcnQtPmJhc2UuYmFzZS5k ZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKKwl1aW50MzJfdCBhdXhfY2xvY2tfZGl2aWRlcjsKKwlpbnQgcHJlY2hhcmdlID0gMHgzOwor CWJvb2wgb25seV9zdGFuZGJ5ID0gZmFsc2U7CisJc3RhdGljIGNvbnN0IHVpbnQ4X3QgYXV4X21z Z1tdID0geworCQlbMF0gPSBEUF9BVVhfTkFUSVZFX1dSSVRFIDw8IDQsCisJCVsxXSA9IERQX1NF VF9QT1dFUiA+PiA4LAorCQlbMl0gPSBEUF9TRVRfUE9XRVIgJiAweGZmLAorCQlbM10gPSAxIC0g MSwKKwkJWzRdID0gRFBfU0VUX1BPV0VSX0QwLAorCX07CisJaW50IGk7CisKKwlCVUlMRF9CVUdf T04oc2l6ZW9mKGF1eF9tc2cpID4gMjApOworCisJYXV4X2Nsb2NrX2RpdmlkZXIgPSBpbnRlbF9k cC0+Z2V0X2F1eF9jbG9ja19kaXZpZGVyKGludGVsX2RwLCAwKTsKKworCWlmIChJU19CUk9BRFdF TEwoZGV2KSAmJiBkaWdfcG9ydC0+cG9ydCAhPSBQT1JUX0EpCisJCW9ubHlfc3RhbmRieSA9IHRy dWU7CisKKwkvKiBFbmFibGUgUFNSIGluIHNpbmsgKi8KKwlpZiAoaW50ZWxfZHAtPnBzcl9kcGNk WzFdICYgRFBfUFNSX05PX1RSQUlOX09OX0VYSVQgfHwgb25seV9zdGFuZGJ5KQorCQlkcm1fZHBf ZHBjZF93cml0ZWIoJmludGVsX2RwLT5hdXgsIERQX1BTUl9FTl9DRkcsCisJCQkJICAgRFBfUFNS X0VOQUJMRSAmIH5EUF9QU1JfTUFJTl9MSU5LX0FDVElWRSk7CisJZWxzZQorCQlkcm1fZHBfZHBj ZF93cml0ZWIoJmludGVsX2RwLT5hdXgsIERQX1BTUl9FTl9DRkcsCisJCQkJICAgRFBfUFNSX0VO QUJMRSB8IERQX1BTUl9NQUlOX0xJTktfQUNUSVZFKTsKKworCS8qIFNldHVwIEFVWCByZWdpc3Rl cnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGF1eF9tc2cpOyBpICs9IDQpCisJCUk5MTVf V1JJVEUoRURQX1BTUl9BVVhfREFUQTEoZGV2KSArIGksCisJCQkgICBpbnRlbF9kcF9wYWNrX2F1 eCgmYXV4X21zZ1tpXSwgc2l6ZW9mKGF1eF9tc2cpIC0gaSkpOworCisJSTkxNV9XUklURShFRFBf UFNSX0FVWF9DVEwoZGV2KSwKKwkJICAgRFBfQVVYX0NIX0NUTF9USU1FX09VVF80MDB1cyB8CisJ CSAgIChzaXplb2YoYXV4X21zZykgPDwgRFBfQVVYX0NIX0NUTF9NRVNTQUdFX1NJWkVfU0hJRlQp IHwKKwkJICAgKHByZWNoYXJnZSA8PCBEUF9BVVhfQ0hfQ1RMX1BSRUNIQVJHRV8yVVNfU0hJRlQp IHwKKwkJICAgKGF1eF9jbG9ja19kaXZpZGVyIDw8IERQX0FVWF9DSF9DVExfQklUX0NMT0NLXzJY X1NISUZUKSk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVfc291cmNlKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGln X3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGRpZ19wb3J0LT5iYXNlLmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgbWF4X3NsZWVwX3RpbWUgPSAw eDFmOworCS8qIExhdGVseSBpdCB3YXMgaWRlbnRpZmllZCB0aGF0IGRlcGVuZGluZyBvbiBwYW5l bCBpZGxlIGZyYW1lIGNvdW50CisJICogY2FsY3VsYXRlZCBhdCBIVyBjYW4gYmUgb2ZmIGJ5IDEu IFNvIGxldCdzIHVzZSB3aGF0IGNhbWUKKwkgKiBmcm9tIFZCVCArIDEgYW5kIGF0IG1pbmltdW0g MiB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLgorCSAqLworCXVpbnQzMl90IGlkbGVfZnJhbWVzID0g ZGV2X3ByaXYtPnZidC5wc3IuaWRsZV9mcmFtZXMgPworCQkJICAgICAgIGRldl9wcml2LT52YnQu cHNyLmlkbGVfZnJhbWVzICsgMSA6IDI7CisJdWludDMyX3QgdmFsID0gMHgwOworCWNvbnN0IHVp bnQzMl90IGxpbmtfZW50cnlfdGltZSA9IEVEUF9QU1JfTUlOX0xJTktfRU5UUllfVElNRV84X0xJ TkVTOworCWJvb2wgb25seV9zdGFuZGJ5ID0gZmFsc2U7CisKKwlpZiAoSVNfQlJPQURXRUxMKGRl dikgJiYgZGlnX3BvcnQtPnBvcnQgIT0gUE9SVF9BKQorCQlvbmx5X3N0YW5kYnkgPSB0cnVlOwor CisJaWYgKGludGVsX2RwLT5wc3JfZHBjZFsxXSAmIERQX1BTUl9OT19UUkFJTl9PTl9FWElUIHx8 IG9ubHlfc3RhbmRieSkgeworCQl2YWwgfD0gRURQX1BTUl9MSU5LX1NUQU5EQlk7CisJCXZhbCB8 PSBFRFBfUFNSX1RQMl9UUDNfVElNRV8wdXM7CisJCXZhbCB8PSBFRFBfUFNSX1RQMV9USU1FXzB1 czsKKwkJdmFsIHw9IEVEUF9QU1JfU0tJUF9BVVhfRVhJVDsKKwkJdmFsIHw9IElTX0JST0FEV0VM TChkZXYpID8gQkRXX1BTUl9TSU5HTEVfRlJBTUUgOiAwOworCX0gZWxzZQorCQl2YWwgfD0gRURQ X1BTUl9MSU5LX0RJU0FCTEU7CisKKwlJOTE1X1dSSVRFKEVEUF9QU1JfQ1RMKGRldiksIHZhbCB8 CisJCSAgIChJU19CUk9BRFdFTEwoZGV2KSA/IDAgOiBsaW5rX2VudHJ5X3RpbWUpIHwKKwkJICAg bWF4X3NsZWVwX3RpbWUgPDwgRURQX1BTUl9NQVhfU0xFRVBfVElNRV9TSElGVCB8CisJCSAgIGlk bGVfZnJhbWVzIDw8IEVEUF9QU1JfSURMRV9GUkFNRV9TSElGVCB8CisJCSAgIEVEUF9QU1JfRU5B QkxFKTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfcHNyX21hdGNoX2NvbmRpdGlvbnMoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkaWdf cG9ydC0+YmFzZS5iYXNlLmNydGM7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0 b19pbnRlbF9jcnRjKGNydGMpOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBz ci5sb2NrKTsKKwlXQVJOX09OKCFkcm1fbW9kZXNldF9pc19sb2NrZWQoJmRldi0+bW9kZV9jb25m aWcuY29ubmVjdGlvbl9tdXRleCkpOworCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgm Y3J0Yy0+bXV0ZXgpKTsKKworCWRldl9wcml2LT5wc3Iuc291cmNlX29rID0gZmFsc2U7CisKKwlp ZiAoSVNfSEFTV0VMTChkZXYpICYmIGRpZ19wb3J0LT5wb3J0ICE9IFBPUlRfQSkgeworCQlEUk1f REVCVUdfS01TKCJIU1cgdGllcyBQU1IgdG8gRERJIEEgKGVEUClcbiIpOworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJaWYgKCFpOTE1LmVuYWJsZV9wc3IpIHsKKwkJRFJNX0RFQlVHX0tNUygiUFNS IGRpc2FibGUgYnkgZmxhZ1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBCZWxvdyBs aW1pdGF0aW9ucyBhcmVuJ3QgdmFsaWQgZm9yIEJyb2Fkd2VsbCAqLworCWlmIChJU19CUk9BRFdF TEwoZGV2KSkKKwkJZ290byBvdXQ7CisKKwlpZiAoSTkxNV9SRUFEKEhTV19TVEVSRU9fM0RfQ1RM KGludGVsX2NydGMtPmNvbmZpZy5jcHVfdHJhbnNjb2RlcikpICYKKwkgICAgUzNEX0VOQUJMRSkg eworCQlEUk1fREVCVUdfS01TKCJQU1IgY29uZGl0aW9uIGZhaWxlZDogU3RlcmVvIDNEIGlzIEVu YWJsZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGludGVsX2NydGMtPmNvbmZp Zy5hZGp1c3RlZF9tb2RlLmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpIHsKKwkJRFJN X0RFQlVHX0tNUygiUFNSIGNvbmRpdGlvbiBmYWlsZWQ6IEludGVybGFjZWQgaXMgRW5hYmxlZFxu Iik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKyBvdXQ6CisJZGV2X3ByaXYtPnBzci5zb3VyY2Vf b2sgPSB0cnVlOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZG9f ZW5hYmxlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RpZ19wb3J0LT5iYXNlLmJhc2UuZGV2OworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlX QVJOX09OKEk5MTVfUkVBRChFRFBfUFNSX0NUTChkZXYpKSAmIEVEUF9QU1JfRU5BQkxFKTsKKwlX QVJOX09OKGRldl9wcml2LT5wc3IuYWN0aXZlKTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZf cHJpdi0+cHNyLmxvY2spOworCisJLyogRW5hYmxlL1JlLWVuYWJsZSBQU1Igb24gdGhlIGhvc3Qg Ki8KKwlpbnRlbF9wc3JfZW5hYmxlX3NvdXJjZShpbnRlbF9kcCk7CisKKwlkZXZfcHJpdi0+cHNy LmFjdGl2ZSA9IHRydWU7Cit9CisKK3ZvaWQgaW50ZWxfcHNyX2VuYWJsZShzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19w b3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFIQVNfUFNSKGRldikpIHsK KwkJRFJNX0RFQlVHX0tNUygiUFNSIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybVxuIik7 CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWlzX2VkcF9wc3IoaW50ZWxfZHApKSB7CisJCURSTV9E RUJVR19LTVMoIlBTUiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcGFuZWxcbiIpOworCQlyZXR1cm47 CisJfQorCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKKwlpZiAoZGV2X3ByaXYt PnBzci5lbmFibGVkKSB7CisJCURSTV9ERUJVR19LTVMoIlBTUiBhbHJlYWR5IGluIHVzZVxuIik7 CisJCWdvdG8gdW5sb2NrOworCX0KKworCWlmICghaW50ZWxfcHNyX21hdGNoX2NvbmRpdGlvbnMo aW50ZWxfZHApKQorCQlnb3RvIHVubG9jazsKKworCWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1 ZmZlcl9iaXRzID0gMDsKKworCWludGVsX3Bzcl9zZXR1cF92c2MoaW50ZWxfZHApOworCisJLyog QXZvaWQgY29udGludW91cyBQU1IgZXhpdCBieSBtYXNraW5nIG1lbXVwIGFuZCBocGQgKi8KKwlJ OTE1X1dSSVRFKEVEUF9QU1JfREVCVUdfQ1RMKGRldiksIEVEUF9QU1JfREVCVUdfTUFTS19NRU1V UCB8CisJCSAgIEVEUF9QU1JfREVCVUdfTUFTS19IUEQgfCBFRFBfUFNSX0RFQlVHX01BU0tfTFBT UCk7CisKKwkvKiBFbmFibGUgUFNSIG9uIHRoZSBwYW5lbCAqLworCWludGVsX3Bzcl9lbmFibGVf c2luayhpbnRlbF9kcCk7CisKKwlkZXZfcHJpdi0+cHNyLmVuYWJsZWQgPSBpbnRlbF9kcDsKK3Vu bG9jazoKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cit9CisKK3ZvaWQgaW50 ZWxfcHNyX2Rpc2FibGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2Rw KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFzZS5k ZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7CisJaWYgKCFkZXZfcHJpdi0+ cHNyLmVuYWJsZWQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOworCQly ZXR1cm47CisJfQorCisJaWYgKGRldl9wcml2LT5wc3IuYWN0aXZlKSB7CisJCUk5MTVfV1JJVEUo RURQX1BTUl9DVEwoZGV2KSwKKwkJCSAgIEk5MTVfUkVBRChFRFBfUFNSX0NUTChkZXYpKSAmIH5F RFBfUFNSX0VOQUJMRSk7CisKKwkJLyogV2FpdCB0aWxsIFBTUiBpcyBpZGxlICovCisJCWlmIChf d2FpdF9mb3IoKEk5MTVfUkVBRChFRFBfUFNSX1NUQVRVU19DVEwoZGV2KSkgJgorCQkJICAgICAg IEVEUF9QU1JfU1RBVFVTX1NUQVRFX01BU0spID09IDAsIDIwMDAsIDEwKSkKKwkJCURSTV9FUlJP UigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFBTUiBJZGxlIFN0YXRlXG4iKTsKKworCQlkZXZfcHJp di0+cHNyLmFjdGl2ZSA9IGZhbHNlOworCX0gZWxzZSB7CisJCVdBUk5fT04oSTkxNV9SRUFEKEVE UF9QU1JfQ1RMKGRldikpICYgRURQX1BTUl9FTkFCTEUpOworCX0KKworCWRldl9wcml2LT5wc3Iu ZW5hYmxlZCA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOworCisJ Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXZfcHJpdi0+cHNyLndvcmspOworfQorCitzdGF0 aWMgdm9pZCBpbnRlbF9wc3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHR5 cGVvZigqZGV2X3ByaXYpLCBwc3Iud29yay53b3JrKTsKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwID0gZGV2X3ByaXYtPnBzci5lbmFibGVkOworCisJLyogV2UgaGF2ZSB0byBtYWtlIHN1cmUg UFNSIGlzIHJlYWR5IGZvciByZS1lbmFibGUKKwkgKiBvdGhlcndpc2UgaXQga2VlcHMgZGlzYWJs ZWQgdW50aWwgbmV4dCBmdWxsIGVuYWJsZS9kaXNhYmxlIGN5Y2xlLgorCSAqIFBTUiBtaWdodCB0 YWtlIHNvbWUgdGltZSB0byBnZXQgZnVsbHkgZGlzYWJsZWQKKwkgKiBhbmQgYmUgcmVhZHkgZm9y IHJlLWVuYWJsZS4KKwkgKi8KKwlpZiAod2FpdF9mb3IoKEk5MTVfUkVBRChFRFBfUFNSX1NUQVRV U19DVEwoZGV2X3ByaXYtPmRldikpICYKKwkJICAgICAgRURQX1BTUl9TVEFUVVNfU1RBVEVfTUFT SykgPT0gMCwgNTApKSB7CisJCURSTV9FUlJPUigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFBTUiBJ ZGxlIGZvciByZS1lbmFibGVcbiIpOworCQlyZXR1cm47CisJfQorCisJbXV0ZXhfbG9jaygmZGV2 X3ByaXYtPnBzci5sb2NrKTsKKwlpbnRlbF9kcCA9IGRldl9wcml2LT5wc3IuZW5hYmxlZDsKKwor CWlmICghaW50ZWxfZHApCisJCWdvdG8gdW5sb2NrOworCisJLyoKKwkgKiBUaGUgZGVsYXllZCB3 b3JrIGNhbiByYWNlIHdpdGggYW4gaW52YWxpZGF0ZSBoZW5jZSB3ZSBuZWVkIHRvCisJICogcmVj aGVjay4gU2luY2UgcHNyX2ZsdXNoIGZpcnN0IGNsZWFycyB0aGlzIGFuZCB0aGVuIHJlc2NoZWR1 bGVzIHdlCisJICogd29uJ3QgZXZlciBtaXNzIGEgZmx1c2ggd2hlbiBiYWlsaW5nIG91dCBoZXJl LgorCSAqLworCWlmIChkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cykKKwkJZ290 byB1bmxvY2s7CisKKwlpbnRlbF9wc3JfZG9fZW5hYmxlKGludGVsX2RwKTsKK3VubG9jazoKKwlt dXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVs X3Bzcl9leGl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+cHNy LmFjdGl2ZSkgeworCQl1MzIgdmFsID0gSTkxNV9SRUFEKEVEUF9QU1JfQ1RMKGRldikpOworCisJ CVdBUk5fT04oISh2YWwgJiBFRFBfUFNSX0VOQUJMRSkpOworCisJCUk5MTVfV1JJVEUoRURQX1BT Ul9DVEwoZGV2KSwgdmFsICYgfkVEUF9QU1JfRU5BQkxFKTsKKworCQlkZXZfcHJpdi0+cHNyLmFj dGl2ZSA9IGZhbHNlOworCX0KKworfQorCit2b2lkIGludGVsX3Bzcl9pbnZhbGlkYXRlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICB1bnNpZ25lZCBmcm9udGJ1ZmZlcl9iaXRzKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCWVudW0gcGlwZSBwaXBlOworCisJbXV0ZXhfbG9j aygmZGV2X3ByaXYtPnBzci5sb2NrKTsKKwlpZiAoIWRldl9wcml2LT5wc3IuZW5hYmxlZCkgewor CQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7CisJCXJldHVybjsKKwl9CisKKwlj cnRjID0gZHBfdG9fZGlnX3BvcnQoZGV2X3ByaXYtPnBzci5lbmFibGVkKS0+YmFzZS5iYXNlLmNy dGM7CisJcGlwZSA9IHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGU7CisKKwlpbnRlbF9wc3JfZXhp dChkZXYpOworCisJZnJvbnRidWZmZXJfYml0cyAmPSBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFT SyhwaXBlKTsKKworCWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzIHw9IGZyb250 YnVmZmVyX2JpdHM7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOworfQorCit2 b2lkIGludGVsX3Bzcl9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHVuc2lnbmVk IGZyb250YnVmZmVyX2JpdHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJZW51bSBwaXBl IHBpcGU7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOworCWlmICghZGV2X3By aXYtPnBzci5lbmFibGVkKSB7CisJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsK KwkJcmV0dXJuOworCX0KKworCWNydGMgPSBkcF90b19kaWdfcG9ydChkZXZfcHJpdi0+cHNyLmVu YWJsZWQpLT5iYXNlLmJhc2UuY3J0YzsKKwlwaXBlID0gdG9faW50ZWxfY3J0YyhjcnRjKS0+cGlw ZTsKKwlkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyAmPSB+ZnJvbnRidWZmZXJf Yml0czsKKworCS8qCisJICogT24gSGFzd2VsbCBzcHJpdGUgcGxhbmUgdXBkYXRlcyBkb24ndCBy ZXN1bHQgaW4gYSBwc3IgaW52YWxpZGF0aW5nCisJICogc2lnbmFsIGluIHRoZSBoYXJkd2FyZS4g V2hpY2ggbWVhbnMgd2UgbmVlZCB0byBtYW51YWxseSBmYWtlIHRoaXMgaW4KKwkgKiBzb2Z0d2Fy ZSBmb3IgYWxsIGZsdXNoZXMsIG5vdCBqdXN0IHdoZW4gd2UndmUgc2VlbiBhIHByZWNlZGluZwor CSAqIGludmFsaWRhdGlvbiB0aHJvdWdoIGZyb250YnVmZmVyIHJlbmRlcmluZy4KKwkgKi8KKwlp ZiAoSVNfSEFTV0VMTChkZXYpICYmCisJICAgIChmcm9udGJ1ZmZlcl9iaXRzICYgSU5URUxfRlJP TlRCVUZGRVJfU1BSSVRFKHBpcGUpKSkKKwkJaW50ZWxfcHNyX2V4aXQoZGV2KTsKKworCWlmICgh ZGV2X3ByaXYtPnBzci5hY3RpdmUgJiYgIWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9i aXRzKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5wc3Iud29yaywKKwkJCQkg ICAgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBz ci5sb2NrKTsKK30KKwordm9pZCBpbnRlbF9wc3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisKKwlJTklUX0RFTEFZRURfV09SSygmZGV2X3ByaXYtPnBzci53b3JrLCBpbnRlbF9wc3Jf d29yayk7CisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBzci5sb2NrKTsKK30KLS0gCjEuOS4zCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=