From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: [PATCH 14/31] drm/i915: Create intel_drrs.c Date: Thu, 5 Nov 2015 10:50:06 -0800 Message-ID: <1446749423-4789-15-git-send-email-rodrigo.vivi@intel.com> References: <1446749423-4789-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 mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 300236E4B7 for ; Thu, 5 Nov 2015 10:49:50 -0800 (PST) In-Reply-To: <1446749423-4789-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 Tm8gZnVuY3Rpb25hbCBjaGFuZ2UuIEp1c3Igb3JnYW5pemluZyBkaXNwbGF5IHBtIGZlYXR1cmVz CmluIGEgc3RhbmRhcmRpemVkIGFuZCB1bmlmb3JtIHdheS4KClRoaXMgZmlyc3Qgc3RlcCBhbGxv dyB1cyB0byBmaXggZHJycyBpbml0aWFsaXphdGlvbiB0aGF0CmlzIGJyb2tlbiB3aXRoIGZhc3Ri b290IGJ5IGRlZmF1bHQuCgpTaWduZWQtb2ZmLWJ5OiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2 aUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAg ICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgICAgICAgICB8ICAg NCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyAgICAgICAgICB8IDM4NiArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJy cy5jICAgICAgICB8IDQwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgICAgIHwgIDE1ICstCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9mcm9udGJ1ZmZlci5jIHwgICA0ICstCiA2IGZpbGVzIGNoYW5nZWQsIDQy NiBpbnNlcnRpb25zKCspLCAzOTQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJycy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA1 YzkyYTQ3Li5kYTNkMmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtNTEsNyArNTEsOCBAQCBp OTE1LXkgKz0gaW50ZWxfcmVuZGVyc3RhdGVfZ2VuNi5vIFwKIAkgIGludGVsX3JlbmRlcnN0YXRl X2dlbjkubwogCiAjIGRpc3BsYXkgcG0KLWk5MTUteSArPSBpbnRlbF9mYmMubyBcCitpOTE1LXkg Kz0gaW50ZWxfZHJycy5vIFwKKwkgIGludGVsX2ZiYy5vIFwKIAkgIGludGVsX2lwcy5vIFwKIAkg IGludGVsX3Bzci5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rk aS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKaW5kZXggMzZkYjk3MC4uOTcy YWNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKQEAgLTI0MDQsNyArMjQwNCw3IEBAIHN0 YXRpYyB2b2lkIGludGVsX2VuYWJsZV9kZGkoc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2Vu Y29kZXIpCiAJCQlpbnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4oaW50ZWxfZHApOwogCiAJCWludGVs X2VkcF9iYWNrbGlnaHRfb24oaW50ZWxfZHApOwotCQlpbnRlbF9lZHBfZHJyc19lbmFibGUoaW50 ZWxfZHApOworCQlpbnRlbF9kcnJzX2VuYWJsZShpbnRlbF9kcCk7CiAJfQogCiAJaWYgKGludGVs X2NydGMtPmNvbmZpZy0+aGFzX2F1ZGlvKSB7CkBAIC0yNDMwLDcgKzI0MzAsNyBAQCBzdGF0aWMg dm9pZCBpbnRlbF9kaXNhYmxlX2RkaShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2Rl cikKIAlpZiAodHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7CiAJCXN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CiAKLQkJaW50ZWxfZWRwX2RycnNf ZGlzYWJsZShpbnRlbF9kcCk7CisJCWludGVsX2RycnNfZGlzYWJsZShpbnRlbF9kcCk7CiAJCWlu dGVsX2VkcF9iYWNrbGlnaHRfb2ZmKGludGVsX2RwKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHAuYwppbmRleCBmMGVlNDk3Li5hNDIxYzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAg LTUyMTIsMzg4ICs1MjEyLDYgQEAgaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJf cmVnaXN0ZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCSAgICAgIEk5MTVfUkVBRChwcF9k aXZfcmVnKSk7CiB9CiAKLS8qKgotICogaW50ZWxfZHBfc2V0X2RycnNfc3RhdGUgLSBwcm9ncmFt IHJlZ2lzdGVycyBmb3IgUlIgc3dpdGNoIHRvIHRha2UgZWZmZWN0Ci0gKiBAZGV2OiBEUk0gZGV2 aWNlCi0gKiBAcmVmcmVzaF9yYXRlOiBSUiB0byBiZSBwcm9ncmFtbWVkCi0gKgotICogVGhpcyBm dW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuIHJlZnJlc2ggcmF0ZSAoUlIpIGhhcyB0byBiZSBjaGFu Z2VkIGZyb20KLSAqIG9uZSBmcmVxdWVuY3kgdG8gYW5vdGhlci4gU3dpdGNoZXMgY2FuIGJlIGJl dHdlZW4gaGlnaCBhbmQgbG93IFJSCi0gKiBzdXBwb3J0ZWQgYnkgdGhlIHBhbmVsIG9yIHRvIGFu eSBvdGhlciBSUiBiYXNlZCBvbiBtZWRpYSBwbGF5YmFjayAoaW4KLSAqIHRoaXMgY2FzZSwgUlIg dmFsdWUgbmVlZHMgdG8gYmUgcGFzc2VkIGZyb20gdXNlciBzcGFjZSkuCi0gKgotICogVGhlIGNh bGxlciBvZiB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHRha2UgYSBsb2NrIG9uIGRldl9wcml2LT5k cnJzLgotICovCi1zdGF0aWMgdm9pZCBpbnRlbF9kcF9zZXRfZHJyc19zdGF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBpbnQgcmVmcmVzaF9yYXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXI7Ci0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBOVUxMOwot CXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBkZXZfcHJpdi0+ZHJycy5kcDsKLQlzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY29uZmlnID0gTlVMTDsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0YyA9IE5VTEw7Ci0JZW51bSBkcnJzX3JlZnJlc2hfcmF0ZV90eXBlIGluZGV4ID0gRFJS U19ISUdIX1JSOwotCi0JaWYgKHJlZnJlc2hfcmF0ZSA8PSAwKSB7Ci0JCURSTV9ERUJVR19LTVMo IlJlZnJlc2ggcmF0ZSBzaG91bGQgYmUgcG9zaXRpdmUgbm9uLXplcm8uXG4iKTsKLQkJcmV0dXJu OwotCX0KLQotCWlmIChpbnRlbF9kcCA9PSBOVUxMKSB7Ci0JCURSTV9ERUJVR19LTVMoIkRSUlMg bm90IHN1cHBvcnRlZC5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZGlnX3BvcnQgPSBkcF90b19k aWdfcG9ydChpbnRlbF9kcCk7Ci0JZW5jb2RlciA9ICZkaWdfcG9ydC0+YmFzZTsKLQlpbnRlbF9j cnRjID0gdG9faW50ZWxfY3J0YyhlbmNvZGVyLT5iYXNlLmNydGMpOwotCi0JaWYgKCFpbnRlbF9j cnRjKSB7Ci0JCURSTV9ERUJVR19LTVMoIkRSUlM6IGludGVsX2NydGMgbm90IGluaXRpYWxpemVk XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWNvbmZpZyA9IGludGVsX2NydGMtPmNvbmZpZzsKLQot CWlmIChkZXZfcHJpdi0+ZHJycy50eXBlIDwgU0VBTUxFU1NfRFJSU19TVVBQT1JUKSB7Ci0JCURS TV9ERUJVR19LTVMoIk9ubHkgU2VhbWxlc3MgRFJSUyBzdXBwb3J0ZWQuXG4iKTsKLQkJcmV0dXJu OwotCX0KLQotCWlmIChpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yLT5wYW5lbC5kb3duY2xv Y2tfbW9kZS0+dnJlZnJlc2ggPT0KLQkJCXJlZnJlc2hfcmF0ZSkKLQkJaW5kZXggPSBEUlJTX0xP V19SUjsKLQotCWlmIChpbmRleCA9PSBkZXZfcHJpdi0+ZHJycy5yZWZyZXNoX3JhdGVfdHlwZSkg ewotCQlEUk1fREVCVUdfS01TKAotCQkJIkRSUlMgcmVxdWVzdGVkIGZvciBwcmV2aW91c2x5IHNl dCBSUi4uLmlnbm9yaW5nXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghaW50ZWxfY3J0Yy0+ YWN0aXZlKSB7Ci0JCURSTV9ERUJVR19LTVMoImVEUCBlbmNvZGVyIGRpc2FibGVkLiBDUlRDIG5v dCBBY3RpdmVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2Vu ID49IDggJiYgIUlTX0NIRVJSWVZJRVcoZGV2KSkgewotCQlzd2l0Y2ggKGluZGV4KSB7Ci0JCWNh c2UgRFJSU19ISUdIX1JSOgotCQkJaW50ZWxfZHBfc2V0X21fbihpbnRlbF9jcnRjLCBNMV9OMSk7 Ci0JCQlicmVhazsKLQkJY2FzZSBEUlJTX0xPV19SUjoKLQkJCWludGVsX2RwX3NldF9tX24oaW50 ZWxfY3J0YywgTTJfTjIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFJSU19NQVhfUlI6Ci0JCWRlZmF1 bHQ6Ci0JCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIHJlZnJlc2hyYXRlIHR5cGVcbiIpOwotCQl9 Ci0JfSBlbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+IDYpIHsKLQkJdTMyIHJlZyA9IFBJ UEVDT05GKGludGVsX2NydGMtPmNvbmZpZy0+Y3B1X3RyYW5zY29kZXIpOwotCQl1MzIgdmFsOwot Ci0JCXZhbCA9IEk5MTVfUkVBRChyZWcpOwotCQlpZiAoaW5kZXggPiBEUlJTX0hJR0hfUlIpIHsK LQkJCWlmIChJU19WQUxMRVlWSUVXKGRldikpCi0JCQkJdmFsIHw9IFBJUEVDT05GX0VEUF9SUl9N T0RFX1NXSVRDSF9WTFY7Ci0JCQllbHNlCi0JCQkJdmFsIHw9IFBJUEVDT05GX0VEUF9SUl9NT0RF X1NXSVRDSDsKLQkJfSBlbHNlIHsKLQkJCWlmIChJU19WQUxMRVlWSUVXKGRldikpCi0JCQkJdmFs ICY9IH5QSVBFQ09ORl9FRFBfUlJfTU9ERV9TV0lUQ0hfVkxWOwotCQkJZWxzZQotCQkJCXZhbCAm PSB+UElQRUNPTkZfRURQX1JSX01PREVfU1dJVENIOwotCQl9Ci0JCUk5MTVfV1JJVEUocmVnLCB2 YWwpOwotCX0KLQotCWRldl9wcml2LT5kcnJzLnJlZnJlc2hfcmF0ZV90eXBlID0gaW5kZXg7Ci0K LQlEUk1fREVCVUdfS01TKCJlRFAgUmVmcmVzaCBSYXRlIHNldCB0byA6ICVkSHpcbiIsIHJlZnJl c2hfcmF0ZSk7Ci19Ci0KLS8qKgotICogaW50ZWxfZWRwX2RycnNfZW5hYmxlIC0gaW5pdCBkcnJz IHN0cnVjdCBpZiBzdXBwb3J0ZWQKLSAqIEBpbnRlbF9kcDogRFAgc3RydWN0Ci0gKgotICogSW5p dGlhbGl6ZXMgZnJvbnRidWZmZXJfYml0cyBhbmQgZHJycy5kcAotICovCi12b2lkIGludGVsX2Vk cF9kcnJzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBpbnRlbF9kcF90b19kZXYoaW50ZWxfZHApOwotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Ci0Jc3RydWN0 IGRybV9jcnRjICpjcnRjID0gZGlnX3BvcnQtPmJhc2UuYmFzZS5jcnRjOwotCXN0cnVjdCBpbnRl bF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQotCWlmICghaW50ZWxf Y3J0Yy0+Y29uZmlnLT5oYXNfZHJycykgewotCQlEUk1fREVCVUdfS01TKCJQYW5lbCBkb2Vzbid0 IHN1cHBvcnQgRFJSU1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaW50ZWxfY3J0Yy0+Y29u ZmlnLT5wc3JfcmVhZHkgJiYgaTkxNS5lbmFibGVfcHNyKSB7Ci0JCURSTV9ERUJVR19LTVMoIkRS UlM6IFBTUiB3aWxsIGJlIGVuYWJsZWQgb24gdGhpcyBjcnRjXG4iKTsKLQkJcmV0dXJuOwotCX0K LQotCW11dGV4X2xvY2soJmRldl9wcml2LT5kcnJzLm11dGV4KTsKLQlpZiAoV0FSTl9PTihkZXZf cHJpdi0+ZHJycy5kcCkpIHsKLQkJRFJNX0VSUk9SKCJEUlJTIGFscmVhZHkgZW5hYmxlZFxuIik7 Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCWRldl9wcml2LT5kcnJzLmJ1c3lfZnJvbnRidWZmZXJf Yml0cyA9IDA7Ci0KLQlkZXZfcHJpdi0+ZHJycy5kcCA9IGludGVsX2RwOwotCi11bmxvY2s6Ci0J bXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJycy5tdXRleCk7Ci19Ci0KLS8qKgotICogaW50ZWxf ZWRwX2RycnNfZGlzYWJsZSAtIERpc2FibGUgRFJSUwotICogQGludGVsX2RwOiBEUCBzdHJ1Y3QK LSAqCi0gKi8KLXZvaWQgaW50ZWxfZWRwX2RycnNfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kcF90b19kZXYoaW50 ZWxfZHApOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Ci0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdf cG9ydChpbnRlbF9kcCk7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjID0gZGlnX3BvcnQtPmJhc2Uu YmFzZS5jcnRjOwotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKLQotCWlmICghaW50ZWxfY3J0Yy0+Y29uZmlnLT5oYXNfZHJycykKLQkJcmV0dXJu OwotCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRycnMubXV0ZXgpOwotCWlmICghZGV2X3ByaXYt PmRycnMuZHApIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJycy5tdXRleCk7Ci0JCXJl dHVybjsKLQl9Ci0KLQlpZiAoZGV2X3ByaXYtPmRycnMucmVmcmVzaF9yYXRlX3R5cGUgPT0gRFJS U19MT1dfUlIpCi0JCWludGVsX2RwX3NldF9kcnJzX3N0YXRlKGRldl9wcml2LT5kZXYsCi0JCQlp bnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yLT5wYW5lbC4KLQkJCWZpeGVkX21vZGUtPnZyZWZy ZXNoKTsKLQotCWRldl9wcml2LT5kcnJzLmRwID0gTlVMTDsKLQltdXRleF91bmxvY2soJmRldl9w cml2LT5kcnJzLm11dGV4KTsKLQotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYt PmRycnMud29yayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2VkcF9kcnJzX2Rvd25jbG9ja193 b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpkZXZfcHJpdiksIGRy cnMud29yay53b3JrKTsKLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwOwotCi0JbXV0ZXhfbG9j aygmZGV2X3ByaXYtPmRycnMubXV0ZXgpOwotCi0JaW50ZWxfZHAgPSBkZXZfcHJpdi0+ZHJycy5k cDsKLQotCWlmICghaW50ZWxfZHApCi0JCWdvdG8gdW5sb2NrOwotCi0JLyoKLQkgKiBUaGUgZGVs YXllZCB3b3JrIGNhbiByYWNlIHdpdGggYW4gaW52YWxpZGF0ZSBoZW5jZSB3ZSBuZWVkIHRvCi0J ICogcmVjaGVjay4KLQkgKi8KLQotCWlmIChkZXZfcHJpdi0+ZHJycy5idXN5X2Zyb250YnVmZmVy X2JpdHMpCi0JCWdvdG8gdW5sb2NrOwotCi0JaWYgKGRldl9wcml2LT5kcnJzLnJlZnJlc2hfcmF0 ZV90eXBlICE9IERSUlNfTE9XX1JSKQotCQlpbnRlbF9kcF9zZXRfZHJyc19zdGF0ZShkZXZfcHJp di0+ZGV2LAotCQkJaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3Rvci0+cGFuZWwuCi0JCQlkb3du Y2xvY2tfbW9kZS0+dnJlZnJlc2gpOwotCi11bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJp di0+ZHJycy5tdXRleCk7Ci19Ci0KLS8qKgotICogaW50ZWxfZWRwX2RycnNfaW52YWxpZGF0ZSAt IERpc2FibGUgSWRsZW5lc3MgRFJSUwotICogQGRldjogRFJNIGRldmljZQotICogQGZyb250YnVm ZmVyX2JpdHM6IGZyb250YnVmZmVyIHBsYW5lIHRyYWNraW5nIGJpdHMKLSAqCi0gKiBUaGlzIGZ1 bmN0aW9uIGdldHMgY2FsbGVkIGV2ZXJ5dGltZSByZW5kZXJpbmcgb24gdGhlIGdpdmVuIHBsYW5l cyBzdGFydC4KLSAqIEhlbmNlIERSUlMgbmVlZHMgdG8gYmUgVXBjbG9ja2VkLCBpLmUuIChMT1df UlIgLT4gSElHSF9SUikuCi0gKgotICogRGlydHkgZnJvbnRidWZmZXJzIHJlbGV2YW50IHRvIERS UlMgYXJlIHRyYWNrZWQgaW4gYnVzeV9mcm9udGJ1ZmZlcl9iaXRzLgotICovCi12b2lkIGludGVs X2VkcF9kcnJzX2ludmFsaWRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJdW5zaWduZWQg ZnJvbnRidWZmZXJfYml0cykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQllbnVtIHBpcGUg cGlwZTsKLQotCWlmIChkZXZfcHJpdi0+ZHJycy50eXBlID09IERSUlNfTk9UX1NVUFBPUlRFRCkK LQkJcmV0dXJuOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmZGV2X3ByaXYtPmRycnMud29yayk7 Ci0KLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJycy5tdXRleCk7Ci0JaWYgKCFkZXZfcHJpdi0+ ZHJycy5kcCkgewotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcnJzLm11dGV4KTsKLQkJcmV0 dXJuOwotCX0KLQotCWNydGMgPSBkcF90b19kaWdfcG9ydChkZXZfcHJpdi0+ZHJycy5kcCktPmJh c2UuYmFzZS5jcnRjOwotCXBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOwotCi0JZnJv bnRidWZmZXJfYml0cyAmPSBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhwaXBlKTsKLQlkZXZf cHJpdi0+ZHJycy5idXN5X2Zyb250YnVmZmVyX2JpdHMgfD0gZnJvbnRidWZmZXJfYml0czsKLQot CS8qIGludmFsaWRhdGUgbWVhbnMgYnVzeSBzY3JlZW4gaGVuY2UgdXBjbG9jayAqLwotCWlmIChm cm9udGJ1ZmZlcl9iaXRzICYmIGRldl9wcml2LT5kcnJzLnJlZnJlc2hfcmF0ZV90eXBlID09IERS UlNfTE9XX1JSKQotCQlpbnRlbF9kcF9zZXRfZHJyc19zdGF0ZShkZXZfcHJpdi0+ZGV2LAotCQkJ CWRldl9wcml2LT5kcnJzLmRwLT5hdHRhY2hlZF9jb25uZWN0b3ItPnBhbmVsLgotCQkJCWZpeGVk X21vZGUtPnZyZWZyZXNoKTsKLQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRycnMubXV0ZXgp OwotfQotCi0vKioKLSAqIGludGVsX2VkcF9kcnJzX2ZsdXNoIC0gUmVzdGFydCBJZGxlbmVzcyBE UlJTCi0gKiBAZGV2OiBEUk0gZGV2aWNlCi0gKiBAZnJvbnRidWZmZXJfYml0czogZnJvbnRidWZm ZXIgcGxhbmUgdHJhY2tpbmcgYml0cwotICoKLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQg ZXZlcnkgdGltZSByZW5kZXJpbmcgb24gdGhlIGdpdmVuIHBsYW5lcyBoYXMKLSAqIGNvbXBsZXRl ZCBvciBmbGlwIG9uIGEgY3J0YyBpcyBjb21wbGV0ZWQuIFNvIERSUlMgc2hvdWxkIGJlIHVwY2xv Y2tlZAotICogKExPV19SUiAtPiBISUdIX1JSKS4gQW5kIGFsc28gSWRsZW5lc3MgZGV0ZWN0aW9u IHNob3VsZCBiZSBzdGFydGVkIGFnYWluLAotICogaWYgbm8gb3RoZXIgcGxhbmVzIGFyZSBkaXJ0 eS4KLSAqCi0gKiBEaXJ0eSBmcm9udGJ1ZmZlcnMgcmVsZXZhbnQgdG8gRFJSUyBhcmUgdHJhY2tl ZCBpbiBidXN5X2Zyb250YnVmZmVyX2JpdHMuCi0gKi8KLXZvaWQgaW50ZWxfZWRwX2RycnNfZmx1 c2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cykK LXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQllbnVtIHBpcGUgcGlwZTsKLQotCWlmIChkZXZf cHJpdi0+ZHJycy50eXBlID09IERSUlNfTk9UX1NVUFBPUlRFRCkKLQkJcmV0dXJuOwotCi0JY2Fu Y2VsX2RlbGF5ZWRfd29yaygmZGV2X3ByaXYtPmRycnMud29yayk7Ci0KLQltdXRleF9sb2NrKCZk ZXZfcHJpdi0+ZHJycy5tdXRleCk7Ci0JaWYgKCFkZXZfcHJpdi0+ZHJycy5kcCkgewotCQltdXRl eF91bmxvY2soJmRldl9wcml2LT5kcnJzLm11dGV4KTsKLQkJcmV0dXJuOwotCX0KLQotCWNydGMg PSBkcF90b19kaWdfcG9ydChkZXZfcHJpdi0+ZHJycy5kcCktPmJhc2UuYmFzZS5jcnRjOwotCXBp cGUgPSB0b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOwotCi0JZnJvbnRidWZmZXJfYml0cyAmPSBJ TlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhwaXBlKTsKLQlkZXZfcHJpdi0+ZHJycy5idXN5X2Zy b250YnVmZmVyX2JpdHMgJj0gfmZyb250YnVmZmVyX2JpdHM7Ci0KLQkvKiBmbHVzaCBtZWFucyBi dXN5IHNjcmVlbiBoZW5jZSB1cGNsb2NrICovCi0JaWYgKGZyb250YnVmZmVyX2JpdHMgJiYgZGV2 X3ByaXYtPmRycnMucmVmcmVzaF9yYXRlX3R5cGUgPT0gRFJSU19MT1dfUlIpCi0JCWludGVsX2Rw X3NldF9kcnJzX3N0YXRlKGRldl9wcml2LT5kZXYsCi0JCQkJZGV2X3ByaXYtPmRycnMuZHAtPmF0 dGFjaGVkX2Nvbm5lY3Rvci0+cGFuZWwuCi0JCQkJZml4ZWRfbW9kZS0+dnJlZnJlc2gpOwotCi0J LyoKLQkgKiBmbHVzaCBhbHNvIG1lYW5zIG5vIG1vcmUgYWN0aXZpdHkgaGVuY2Ugc2NoZWR1bGUg ZG93bmNsb2NrLCBpZiBhbGwKLQkgKiBvdGhlciBmYnMgYXJlIHF1aWVzY2VudCB0b28KLQkgKi8K LQlpZiAoIWRldl9wcml2LT5kcnJzLmJ1c3lfZnJvbnRidWZmZXJfYml0cykKLQkJc2NoZWR1bGVf ZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+ZHJycy53b3JrLAotCQkJCW1zZWNzX3RvX2ppZmZpZXMo MTAwMCkpOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRycnMubXV0ZXgpOwotfQotCi0vKioK LSAqIERPQzogRGlzcGxheSBSZWZyZXNoIFJhdGUgU3dpdGNoaW5nIChEUlJTKQotICoKLSAqIERp c3BsYXkgUmVmcmVzaCBSYXRlIFN3aXRjaGluZyAoRFJSUykgaXMgYSBwb3dlciBjb25zZXJ2YXRp b24gZmVhdHVyZQotICogd2hpY2ggZW5hYmxlcyBzd3RjaGluZyBiZXR3ZWVuIGxvdyBhbmQgaGln aCByZWZyZXNoIHJhdGVzLAotICogZHluYW1pY2FsbHksIGJhc2VkIG9uIHRoZSB1c2FnZSBzY2Vu YXJpby4gVGhpcyBmZWF0dXJlIGlzIGFwcGxpY2FibGUKLSAqIGZvciBpbnRlcm5hbCBwYW5lbHMu Ci0gKgotICogSW5kaWNhdGlvbiB0aGF0IHRoZSBwYW5lbCBzdXBwb3J0cyBEUlJTIGlzIGdpdmVu IGJ5IHRoZSBwYW5lbCBFRElELCB3aGljaAotICogd291bGQgbGlzdCBtdWx0aXBsZSByZWZyZXNo IHJhdGVzIGZvciBvbmUgcmVzb2x1dGlvbi4KLSAqCi0gKiBEUlJTIGlzIG9mIDIgdHlwZXMgLSBz dGF0aWMgYW5kIHNlYW1sZXNzLgotICogU3RhdGljIERSUlMgaW52b2x2ZXMgY2hhbmdpbmcgcmVm cmVzaCByYXRlIChSUikgYnkgZG9pbmcgYSBmdWxsIG1vZGVzZXQKLSAqIChtYXkgYXBwZWFyIGFz IGEgYmxpbmsgb24gc2NyZWVuKSBhbmQgaXMgdXNlZCBpbiBkb2NrLXVuZG9jayBzY2VuYXJpby4K LSAqIFNlYW1sZXNzIERSUlMgaW52b2x2ZXMgY2hhbmdpbmcgUlIgd2l0aG91dCBhbnkgdmlzdWFs IGVmZmVjdCB0byB0aGUgdXNlcgotICogYW5kIGNhbiBiZSB1c2VkIGR1cmluZyBub3JtYWwgc3lz dGVtIHVzYWdlLiBUaGlzIGlzIGRvbmUgYnkgcHJvZ3JhbW1pbmcKLSAqIGNlcnRhaW4gcmVnaXN0 ZXJzLgotICoKLSAqIFN1cHBvcnQgZm9yIHN0YXRpYy9zZWFtbGVzcyBEUlJTIG1heSBiZSBpbmRp Y2F0ZWQgaW4gdGhlIFZCVCBiYXNlZCBvbgotICogaW5wdXRzIGZyb20gdGhlIHBhbmVsIHNwZWMu Ci0gKgotICogRFJSUyBzYXZlcyBwb3dlciBieSBzd2l0Y2hpbmcgdG8gbG93IFJSIGJhc2VkIG9u IHVzYWdlIHNjZW5hcmlvcy4KLSAqCi0gKiBlRFAgRFJSUzotCi0gKiAgICAgICAgVGhlIGltcGxl bWVudGF0aW9uIGlzIGJhc2VkIG9uIGZyb250YnVmZmVyIHRyYWNraW5nIGltcGxlbWVudGF0aW9u LgotICogV2hlbiB0aGVyZSBpcyBhIGRpc3R1cmJhbmNlIG9uIHRoZSBzY3JlZW4gdHJpZ2dlcmVk IGJ5IHVzZXIgYWN0aXZpdHkgb3IgYQotICogcGVyaW9kaWMgc3lzdGVtIGFjdGl2aXR5LCBEUlJT IGlzIGRpc2FibGVkIChSUiBpcyBjaGFuZ2VkIHRvIGhpZ2ggUlIpLgotICogV2hlbiB0aGVyZSBp cyBubyBtb3ZlbWVudCBvbiBzY3JlZW4sIGFmdGVyIGEgdGltZW91dCBvZiAxIHNlY29uZCwgYSBz d2l0Y2gKLSAqIHRvIGxvdyBSUiBpcyBtYWRlLgotICogICAgICAgIEZvciBpbnRlZ3JhdGlvbiB3 aXRoIGZyb250YnVmZmVyIHRyYWNraW5nIGNvZGUsCi0gKiBpbnRlbF9lZHBfZHJyc19pbnZhbGlk YXRlKCkgYW5kIGludGVsX2VkcF9kcnJzX2ZsdXNoKCkgYXJlIGNhbGxlZC4KLSAqCi0gKiBEUlJT IGNhbiBiZSBmdXJ0aGVyIGV4dGVuZGVkIHRvIHN1cHBvcnQgb3RoZXIgaW50ZXJuYWwgcGFuZWxz IGFuZCBhbHNvCi0gKiB0aGUgc2NlbmFyaW8gb2YgdmlkZW8gcGxheWJhY2sgd2hlcmVpbiBSUiBp cyBzZXQgYmFzZWQgb24gdGhlIHJhdGUKLSAqIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UuCi0gKi8K LQotLyoqCi0gKiBpbnRlbF9kcF9kcnJzX2luaXQgLSBJbml0IGJhc2ljIERSUlMgd29yayBhbmQg bXV0ZXguCi0gKiBAaW50ZWxfY29ubmVjdG9yOiBlRFAgY29ubmVjdG9yCi0gKiBAZml4ZWRfbW9k ZTogcHJlZmVycmVkIG1vZGUgb2YgcGFuZWwKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzICBjYWxs ZWQgb25seSBvbmNlIGF0IGRyaXZlciBsb2FkIHRvIGluaXRpYWxpemUgYmFzaWMKLSAqIERSUlMg c3R1ZmYuCi0gKgotICogUmV0dXJuczoKLSAqIERvd25jbG9jayBtb2RlIGlmIHBhbmVsIHN1cHBv cnRzIGl0LCBlbHNlIHJldHVybiBOVUxMLgotICogRFJSUyBzdXBwb3J0IGlzIGRldGVybWluZWQg YnkgdGhlIHByZXNlbmNlIG9mIGRvd25jbG9jayBtb2RlIChhcGFydAotICogZnJvbSBWQlQgc2V0 dGluZykuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqCi1pbnRlbF9kcF9k cnJzX2luaXQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yLAotCQlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZml4ZWRfbW9kZSkKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yID0gJmludGVsX2Nvbm5lY3Rvci0+YmFzZTsKLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZG93bmNs b2NrX21vZGUgPSBOVUxMOwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJmRldl9wcml2LT5kcnJzLndv cmssIGludGVsX2VkcF9kcnJzX2Rvd25jbG9ja193b3JrKTsKLQltdXRleF9pbml0KCZkZXZfcHJp di0+ZHJycy5tdXRleCk7Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPD0gNikgewotCQlE Uk1fREVCVUdfS01TKCJEUlJTIHN1cHBvcnRlZCBmb3IgR2VuNyBhbmQgYWJvdmVcbiIpOwotCQly ZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoZGV2X3ByaXYtPnZidC5kcnJzX3R5cGUgIT0gU0VBTUxF U1NfRFJSU19TVVBQT1JUKSB7Ci0JCURSTV9ERUJVR19LTVMoIlZCVCBkb2Vzbid0IHN1cHBvcnQg RFJSU1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWRvd25jbG9ja19tb2RlID0gaW50ZWxf ZmluZF9wYW5lbF9kb3duY2xvY2sKLQkJCQkJKGRldiwgZml4ZWRfbW9kZSwgY29ubmVjdG9yKTsK LQotCWlmICghZG93bmNsb2NrX21vZGUpIHsKLQkJRFJNX0RFQlVHX0tNUygiRG93bmNsb2NrIG1v ZGUgaXMgbm90IGZvdW5kLiBEUlJTIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gTlVMTDsK LQl9Ci0KLQlkZXZfcHJpdi0+ZHJycy50eXBlID0gZGV2X3ByaXYtPnZidC5kcnJzX3R5cGU7Ci0K LQlkZXZfcHJpdi0+ZHJycy5yZWZyZXNoX3JhdGVfdHlwZSA9IERSUlNfSElHSF9SUjsKLQlEUk1f REVCVUdfS01TKCJzZWFtbGVzcyBEUlJTIHN1cHBvcnRlZCBmb3IgZURQIHBhbmVsLlxuIik7Ci0J cmV0dXJuIGRvd25jbG9ja19tb2RlOwotfQotCiBzdGF0aWMgYm9vbCBpbnRlbF9lZHBfaW5pdF9j b25uZWN0b3Ioc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKIAkJCQkgICAgIHN0cnVjdCBpbnRl bF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKIHsKQEAgLTU2NTUsOCArNTI3Myw4IEBAIHN0 YXRpYyBib29sIGludGVsX2VkcF9pbml0X2Nvbm5lY3RvcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwLAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NhbiwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVz LCBoZWFkKSB7CiAJCWlmICgoc2Nhbi0+dHlwZSAmIERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEKSkg ewogCQkJZml4ZWRfbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIHNjYW4pOwotCQkJZG93 bmNsb2NrX21vZGUgPSBpbnRlbF9kcF9kcnJzX2luaXQoCi0JCQkJCQlpbnRlbF9jb25uZWN0b3Is IGZpeGVkX21vZGUpOworCQkJZG93bmNsb2NrX21vZGUgPSBpbnRlbF9kcnJzX2luaXQoaW50ZWxf Y29ubmVjdG9yLAorCQkJCQkJCSBmaXhlZF9tb2RlKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJycy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmRjZTE2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnJzLmMKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBD b3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAor ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K KyAqLworCisjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKwor LyoqCisgKiBET0M6IERpc3BsYXkgUmVmcmVzaCBSYXRlIFN3aXRjaGluZyAoRFJSUykKKyAqCisg KiBEaXNwbGF5IFJlZnJlc2ggUmF0ZSBTd2l0Y2hpbmcgKERSUlMpIGlzIGEgcG93ZXIgY29uc2Vy dmF0aW9uIGZlYXR1cmUKKyAqIHdoaWNoIGVuYWJsZXMgc3d0Y2hpbmcgYmV0d2VlbiBsb3cgYW5k IGhpZ2ggcmVmcmVzaCByYXRlcywKKyAqIGR5bmFtaWNhbGx5LCBiYXNlZCBvbiB0aGUgdXNhZ2Ug c2NlbmFyaW8uIFRoaXMgZmVhdHVyZSBpcyBhcHBsaWNhYmxlCisgKiBmb3IgaW50ZXJuYWwgcGFu ZWxzLgorICoKKyAqIEluZGljYXRpb24gdGhhdCB0aGUgcGFuZWwgc3VwcG9ydHMgRFJSUyBpcyBn aXZlbiBieSB0aGUgcGFuZWwgRURJRCwgd2hpY2gKKyAqIHdvdWxkIGxpc3QgbXVsdGlwbGUgcmVm cmVzaCByYXRlcyBmb3Igb25lIHJlc29sdXRpb24uCisgKgorICogRFJSUyBpcyBvZiAyIHR5cGVz IC0gc3RhdGljIGFuZCBzZWFtbGVzcy4KKyAqIFN0YXRpYyBEUlJTIGludm9sdmVzIGNoYW5naW5n IHJlZnJlc2ggcmF0ZSAoUlIpIGJ5IGRvaW5nIGEgZnVsbCBtb2Rlc2V0CisgKiAobWF5IGFwcGVh ciBhcyBhIGJsaW5rIG9uIHNjcmVlbikgYW5kIGlzIHVzZWQgaW4gZG9jay11bmRvY2sgc2NlbmFy aW8uCisgKiBTZWFtbGVzcyBEUlJTIGludm9sdmVzIGNoYW5naW5nIFJSIHdpdGhvdXQgYW55IHZp c3VhbCBlZmZlY3QgdG8gdGhlIHVzZXIKKyAqIGFuZCBjYW4gYmUgdXNlZCBkdXJpbmcgbm9ybWFs IHN5c3RlbSB1c2FnZS4gVGhpcyBpcyBkb25lIGJ5IHByb2dyYW1taW5nCisgKiBjZXJ0YWluIHJl Z2lzdGVycy4KKyAqCisgKiBTdXBwb3J0IGZvciBzdGF0aWMvc2VhbWxlc3MgRFJSUyBtYXkgYmUg aW5kaWNhdGVkIGluIHRoZSBWQlQgYmFzZWQgb24KKyAqIGlucHV0cyBmcm9tIHRoZSBwYW5lbCBz cGVjLgorICoKKyAqIERSUlMgc2F2ZXMgcG93ZXIgYnkgc3dpdGNoaW5nIHRvIGxvdyBSUiBiYXNl ZCBvbiB1c2FnZSBzY2VuYXJpb3MuCisgKgorICogZURQIERSUlM6LQorICogICAgICAgIFRoZSBp bXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBmcm9udGJ1ZmZlciB0cmFja2luZyBpbXBsZW1lbnRh dGlvbi4KKyAqIFdoZW4gdGhlcmUgaXMgYSBkaXN0dXJiYW5jZSBvbiB0aGUgc2NyZWVuIHRyaWdn ZXJlZCBieSB1c2VyIGFjdGl2aXR5IG9yIGEKKyAqIHBlcmlvZGljIHN5c3RlbSBhY3Rpdml0eSwg RFJSUyBpcyBkaXNhYmxlZCAoUlIgaXMgY2hhbmdlZCB0byBoaWdoIFJSKS4KKyAqIFdoZW4gdGhl cmUgaXMgbm8gbW92ZW1lbnQgb24gc2NyZWVuLCBhZnRlciBhIHRpbWVvdXQgb2YgMSBzZWNvbmQs IGEgc3dpdGNoCisgKiB0byBsb3cgUlIgaXMgbWFkZS4KKyAqICAgICAgICBGb3IgaW50ZWdyYXRp b24gd2l0aCBmcm9udGJ1ZmZlciB0cmFja2luZyBjb2RlLAorICogaW50ZWxfZWRwX2RycnNfaW52 YWxpZGF0ZSgpIGFuZCBpbnRlbF9lZHBfZHJyc19mbHVzaCgpIGFyZSBjYWxsZWQuCisgKgorICog RFJSUyBjYW4gYmUgZnVydGhlciBleHRlbmRlZCB0byBzdXBwb3J0IG90aGVyIGludGVybmFsIHBh bmVscyBhbmQgYWxzbworICogdGhlIHNjZW5hcmlvIG9mIHZpZGVvIHBsYXliYWNrIHdoZXJlaW4g UlIgaXMgc2V0IGJhc2VkIG9uIHRoZSByYXRlCisgKiByZXF1ZXN0ZWQgYnkgdXNlcnNwYWNlLgor ICovCisKKy8qKgorICogaW50ZWxfZHJyc19zZXRfc3RhdGUgLSBwcm9ncmFtIHJlZ2lzdGVycyBm b3IgUlIgc3dpdGNoIHRvIHRha2UgZWZmZWN0CisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcmVm cmVzaF9yYXRlOiBSUiB0byBiZSBwcm9ncmFtbWVkCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRz IGNhbGxlZCB3aGVuIHJlZnJlc2ggcmF0ZSAoUlIpIGhhcyB0byBiZSBjaGFuZ2VkIGZyb20KKyAq IG9uZSBmcmVxdWVuY3kgdG8gYW5vdGhlci4gU3dpdGNoZXMgY2FuIGJlIGJldHdlZW4gaGlnaCBh bmQgbG93IFJSCisgKiBzdXBwb3J0ZWQgYnkgdGhlIHBhbmVsIG9yIHRvIGFueSBvdGhlciBSUiBi YXNlZCBvbiBtZWRpYSBwbGF5YmFjayAoaW4KKyAqIHRoaXMgY2FzZSwgUlIgdmFsdWUgbmVlZHMg dG8gYmUgcGFzc2VkIGZyb20gdXNlciBzcGFjZSkuCisgKgorICogVGhlIGNhbGxlciBvZiB0aGlz IGZ1bmN0aW9uIG5lZWRzIHRvIHRha2UgYSBsb2NrIG9uIGRldl9wcml2LT5kcnJzLgorICovCitz dGF0aWMgdm9pZCBpbnRlbF9kcnJzX3NldF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBp bnQgcmVmcmVzaF9yYXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7CisJc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBOVUxMOworCXN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAgPSBkZXZfcHJpdi0+ZHJycy5kcDsKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY29uZmlnID0gTlVMTDsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IE5VTEw7 CisJZW51bSBkcnJzX3JlZnJlc2hfcmF0ZV90eXBlIGluZGV4ID0gRFJSU19ISUdIX1JSOworCisJ aWYgKHJlZnJlc2hfcmF0ZSA8PSAwKSB7CisJCURSTV9ERUJVR19LTVMoIlJlZnJlc2ggcmF0ZSBz aG91bGQgYmUgcG9zaXRpdmUgbm9uLXplcm8uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChp bnRlbF9kcCA9PSBOVUxMKSB7CisJCURSTV9ERUJVR19LTVMoIkRSUlMgbm90IHN1cHBvcnRlZC5c biIpOworCQlyZXR1cm47CisJfQorCisJZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9k cCk7CisJZW5jb2RlciA9ICZkaWdfcG9ydC0+YmFzZTsKKwlpbnRlbF9jcnRjID0gdG9faW50ZWxf Y3J0YyhlbmNvZGVyLT5iYXNlLmNydGMpOworCisJaWYgKCFpbnRlbF9jcnRjKSB7CisJCURSTV9E RUJVR19LTVMoIkRSUlM6IGludGVsX2NydGMgbm90IGluaXRpYWxpemVkXG4iKTsKKwkJcmV0dXJu OworCX0KKworCWNvbmZpZyA9IGludGVsX2NydGMtPmNvbmZpZzsKKworCWlmIChkZXZfcHJpdi0+ ZHJycy50eXBlIDwgU0VBTUxFU1NfRFJSU19TVVBQT1JUKSB7CisJCURSTV9ERUJVR19LTVMoIk9u bHkgU2VhbWxlc3MgRFJSUyBzdXBwb3J0ZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChp bnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yLT5wYW5lbC5kb3duY2xvY2tfbW9kZS0+dnJlZnJl c2ggPT0KKwkJCXJlZnJlc2hfcmF0ZSkKKwkJaW5kZXggPSBEUlJTX0xPV19SUjsKKworCWlmIChp bmRleCA9PSBkZXZfcHJpdi0+ZHJycy5yZWZyZXNoX3JhdGVfdHlwZSkgeworCQlEUk1fREVCVUdf S01TKAorCQkJIkRSUlMgcmVxdWVzdGVkIGZvciBwcmV2aW91c2x5IHNldCBSUi4uLmlnbm9yaW5n XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghaW50ZWxfY3J0Yy0+YWN0aXZlKSB7CisJCURS TV9ERUJVR19LTVMoImVEUCBlbmNvZGVyIGRpc2FibGVkLiBDUlRDIG5vdCBBY3RpdmVcbiIpOwor CQlyZXR1cm47CisJfQorCisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDggJiYgIUlTX0NI RVJSWVZJRVcoZGV2KSkgeworCQlzd2l0Y2ggKGluZGV4KSB7CisJCWNhc2UgRFJSU19ISUdIX1JS OgorCQkJaW50ZWxfZHBfc2V0X21fbihpbnRlbF9jcnRjLCBNMV9OMSk7CisJCQlicmVhazsKKwkJ Y2FzZSBEUlJTX0xPV19SUjoKKwkJCWludGVsX2RwX3NldF9tX24oaW50ZWxfY3J0YywgTTJfTjIp OworCQkJYnJlYWs7CisJCWNhc2UgRFJSU19NQVhfUlI6CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJS T1IoIlVuc3VwcG9ydGVkIHJlZnJlc2hyYXRlIHR5cGVcbiIpOworCQl9CisJfSBlbHNlIGlmIChJ TlRFTF9JTkZPKGRldiktPmdlbiA+IDYpIHsKKwkJdTMyIHJlZyA9IFBJUEVDT05GKGludGVsX2Ny dGMtPmNvbmZpZy0+Y3B1X3RyYW5zY29kZXIpOworCQl1MzIgdmFsOworCisJCXZhbCA9IEk5MTVf UkVBRChyZWcpOworCQlpZiAoaW5kZXggPiBEUlJTX0hJR0hfUlIpIHsKKwkJCWlmIChJU19WQUxM RVlWSUVXKGRldikpCisJCQkJdmFsIHw9IFBJUEVDT05GX0VEUF9SUl9NT0RFX1NXSVRDSF9WTFY7 CisJCQllbHNlCisJCQkJdmFsIHw9IFBJUEVDT05GX0VEUF9SUl9NT0RFX1NXSVRDSDsKKwkJfSBl bHNlIHsKKwkJCWlmIChJU19WQUxMRVlWSUVXKGRldikpCisJCQkJdmFsICY9IH5QSVBFQ09ORl9F RFBfUlJfTU9ERV9TV0lUQ0hfVkxWOworCQkJZWxzZQorCQkJCXZhbCAmPSB+UElQRUNPTkZfRURQ X1JSX01PREVfU1dJVENIOworCQl9CisJCUk5MTVfV1JJVEUocmVnLCB2YWwpOworCX0KKworCWRl dl9wcml2LT5kcnJzLnJlZnJlc2hfcmF0ZV90eXBlID0gaW5kZXg7CisKKwlEUk1fREVCVUdfS01T KCJlRFAgUmVmcmVzaCBSYXRlIHNldCB0byA6ICVkSHpcbiIsIHJlZnJlc2hfcmF0ZSk7Cit9CisK Ky8qKgorICogaW50ZWxfZHJyc19lbmFibGUgLSBpbml0IGRycnMgc3RydWN0IGlmIHN1cHBvcnRl ZAorICogQGludGVsX2RwOiBEUCBzdHJ1Y3QKKyAqCisgKiBJbml0aWFsaXplcyBmcm9udGJ1ZmZl cl9iaXRzIGFuZCBkcnJzLmRwCisgKi8KK3ZvaWQgaW50ZWxfZHJyc19lbmFibGUoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9y dCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g ZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkaWdfcG9y dC0+YmFzZS5iYXNlLmNydGM7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19p bnRlbF9jcnRjKGNydGMpOworCisJaWYgKCFpbnRlbF9jcnRjLT5jb25maWctPmhhc19kcnJzKSB7 CisJCURSTV9ERUJVR19LTVMoIlBhbmVsIGRvZXNuJ3Qgc3VwcG9ydCBEUlJTXG4iKTsKKwkJcmV0 dXJuOworCX0KKworCWlmIChpbnRlbF9jcnRjLT5jb25maWctPnBzcl9yZWFkeSAmJiBpOTE1LmVu YWJsZV9wc3IpIHsKKwkJRFJNX0RFQlVHX0tNUygiRFJSUzogUFNSIHdpbGwgYmUgZW5hYmxlZCBv biB0aGlzIGNydGNcbiIpOworCQlyZXR1cm47CisJfQorCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYt PmRycnMubXV0ZXgpOworCWlmIChXQVJOX09OKGRldl9wcml2LT5kcnJzLmRwKSkgeworCQlEUk1f RVJST1IoIkRSUlMgYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJ ZGV2X3ByaXYtPmRycnMuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzID0gMDsKKworCWRldl9wcml2LT5k cnJzLmRwID0gaW50ZWxfZHA7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5k cnJzLm11dGV4KTsKK30KKworLyoqCisgKiBpbnRlbF9lZHBfZHJyc19kaXNhYmxlIC0gRGlzYWJs ZSBEUlJTCisgKiBAaW50ZWxfZHA6IERQIHN0cnVjdAorICoKKyAqLwordm9pZCBpbnRlbF9kcnJz X2Rpc2FibGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXY7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMgPSBkaWdfcG9ydC0+YmFzZS5iYXNlLmNydGM7CisJc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBpbnRlbF9wYW5lbCAq cGFuZWwgPSAmaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3Rvci0+cGFuZWw7CisKKwlpZiAoIWlu dGVsX2NydGMtPmNvbmZpZy0+aGFzX2RycnMpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmRl dl9wcml2LT5kcnJzLm11dGV4KTsKKwlpZiAoIWRldl9wcml2LT5kcnJzLmRwKSB7CisJCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPmRycnMubXV0ZXgpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRl dl9wcml2LT5kcnJzLnJlZnJlc2hfcmF0ZV90eXBlID09IERSUlNfTE9XX1JSKQorCQlpbnRlbF9k cnJzX3NldF9zdGF0ZShkZXZfcHJpdi0+ZGV2LAorCQkJCSAgICAgcGFuZWwtPmZpeGVkX21vZGUt PnZyZWZyZXNoKTsKKworCWRldl9wcml2LT5kcnJzLmRwID0gTlVMTDsKKwltdXRleF91bmxvY2so JmRldl9wcml2LT5kcnJzLm11dGV4KTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2 X3ByaXYtPmRycnMud29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2RycnNfZG93bmNsb2Nr X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKmRldl9wcml2KSwg ZHJycy53b3JrLndvcmspOworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHA7CisJc3RydWN0IGlu dGVsX3BhbmVsICpwYW5lbDsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5kcnJzLm11dGV4KTsK KwlpbnRlbF9kcCA9IGRldl9wcml2LT5kcnJzLmRwOworCisJaWYgKCFpbnRlbF9kcCkKKwkJZ290 byB1bmxvY2s7CisKKwlwYW5lbCA9ICZpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yLT5wYW5l bDsKKwkvKgorCSAqIFRoZSBkZWxheWVkIHdvcmsgY2FuIHJhY2Ugd2l0aCBhbiBpbnZhbGlkYXRl IGhlbmNlIHdlIG5lZWQgdG8KKwkgKiByZWNoZWNrLgorCSAqLworCisJaWYgKGRldl9wcml2LT5k cnJzLmJ1c3lfZnJvbnRidWZmZXJfYml0cykKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoZGV2X3By aXYtPmRycnMucmVmcmVzaF9yYXRlX3R5cGUgIT0gRFJSU19MT1dfUlIpCisJCWludGVsX2RycnNf c2V0X3N0YXRlKGRldl9wcml2LT5kZXYsCisJCQkJICAgICBwYW5lbC0+Zml4ZWRfbW9kZS0+dnJl ZnJlc2gpOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJycy5tdXRleCk7 Cit9CisKKy8qKgorICogaW50ZWxfZHJyc19pbnZhbGlkYXRlIC0gRGlzYWJsZSBJZGxlbmVzcyBE UlJTCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAZnJvbnRidWZmZXJfYml0czogZnJvbnRidWZm ZXIgcGxhbmUgdHJhY2tpbmcgYml0cworICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQg ZXZlcnl0aW1lIHJlbmRlcmluZyBvbiB0aGUgZ2l2ZW4gcGxhbmVzIHN0YXJ0LgorICogSGVuY2Ug RFJSUyBuZWVkcyB0byBiZSBVcGNsb2NrZWQsIGkuZS4gKExPV19SUiAtPiBISUdIX1JSKS4KKyAq CisgKiBEaXJ0eSBmcm9udGJ1ZmZlcnMgcmVsZXZhbnQgdG8gRFJSUyBhcmUgdHJhY2tlZCBpbiBi dXN5X2Zyb250YnVmZmVyX2JpdHMuCisgKi8KK3ZvaWQgaW50ZWxfZHJyc19pbnZhbGlkYXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGZyb250YnVmZmVyX2JpdHMpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlz dHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGludGVsX3BhbmVsICpwYW5lbDsKKwllbnVt IHBpcGUgcGlwZTsKKworCWlmIChkZXZfcHJpdi0+ZHJycy50eXBlID09IERSUlNfTk9UX1NVUFBP UlRFRCkKKwkJcmV0dXJuOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmZGV2X3ByaXYtPmRycnMu d29yayk7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJycy5tdXRleCk7CisJaWYgKCFkZXZf cHJpdi0+ZHJycy5kcCkgeworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcnJzLm11dGV4KTsK KwkJcmV0dXJuOworCX0KKworCXBhbmVsID0gJmRldl9wcml2LT5kcnJzLmRwLT5hdHRhY2hlZF9j b25uZWN0b3ItPnBhbmVsOworCWNydGMgPSBkcF90b19kaWdfcG9ydChkZXZfcHJpdi0+ZHJycy5k cCktPmJhc2UuYmFzZS5jcnRjOworCXBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOwor CisJZnJvbnRidWZmZXJfYml0cyAmPSBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhwaXBlKTsK KwlkZXZfcHJpdi0+ZHJycy5idXN5X2Zyb250YnVmZmVyX2JpdHMgfD0gZnJvbnRidWZmZXJfYml0 czsKKworCS8qIGludmFsaWRhdGUgbWVhbnMgYnVzeSBzY3JlZW4gaGVuY2UgdXBjbG9jayAqLwor CWlmIChmcm9udGJ1ZmZlcl9iaXRzICYmIGRldl9wcml2LT5kcnJzLnJlZnJlc2hfcmF0ZV90eXBl ID09IERSUlNfTE9XX1JSKQorCQlpbnRlbF9kcnJzX3NldF9zdGF0ZShkZXZfcHJpdi0+ZGV2LAor CQkJCSAgICAgcGFuZWwtPmZpeGVkX21vZGUtPnZyZWZyZXNoKTsKKworCW11dGV4X3VubG9jaygm ZGV2X3ByaXYtPmRycnMubXV0ZXgpOworfQorCisvKioKKyAqIGludGVsX2RycnNfZmx1c2ggLSBS ZXN0YXJ0IElkbGVuZXNzIERSUlMKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBmcm9udGJ1ZmZl cl9iaXRzOiBmcm9udGJ1ZmZlciBwbGFuZSB0cmFja2luZyBiaXRzCisgKgorICogVGhpcyBmdW5j dGlvbiBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIHJlbmRlcmluZyBvbiB0aGUgZ2l2ZW4gcGxhbmVz IGhhcworICogY29tcGxldGVkIG9yIGZsaXAgb24gYSBjcnRjIGlzIGNvbXBsZXRlZC4gU28gRFJS UyBzaG91bGQgYmUgdXBjbG9ja2VkCisgKiAoTE9XX1JSIC0+IEhJR0hfUlIpLiBBbmQgYWxzbyBJ ZGxlbmVzcyBkZXRlY3Rpb24gc2hvdWxkIGJlIHN0YXJ0ZWQgYWdhaW4sCisgKiBpZiBubyBvdGhl ciBwbGFuZXMgYXJlIGRpcnR5LgorICoKKyAqIERpcnR5IGZyb250YnVmZmVycyByZWxldmFudCB0 byBEUlJTIGFyZSB0cmFja2VkIGluIGJ1c3lfZnJvbnRidWZmZXJfYml0cy4KKyAqLwordm9pZCBp bnRlbF9kcnJzX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGZyb250 YnVmZmVyX2JpdHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGludGVsX3Bh bmVsICpwYW5lbDsKKwllbnVtIHBpcGUgcGlwZTsKKworCWlmIChkZXZfcHJpdi0+ZHJycy50eXBl ID09IERSUlNfTk9UX1NVUFBPUlRFRCkKKwkJcmV0dXJuOworCisJY2FuY2VsX2RlbGF5ZWRfd29y aygmZGV2X3ByaXYtPmRycnMud29yayk7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJycy5t dXRleCk7CisJaWYgKCFkZXZfcHJpdi0+ZHJycy5kcCkgeworCQltdXRleF91bmxvY2soJmRldl9w cml2LT5kcnJzLm11dGV4KTsKKwkJcmV0dXJuOworCX0KKwlwYW5lbCA9ICZkZXZfcHJpdi0+ZHJy cy5kcC0+YXR0YWNoZWRfY29ubmVjdG9yLT5wYW5lbDsKKwljcnRjID0gZHBfdG9fZGlnX3BvcnQo ZGV2X3ByaXYtPmRycnMuZHApLT5iYXNlLmJhc2UuY3J0YzsKKwlwaXBlID0gdG9faW50ZWxfY3J0 YyhjcnRjKS0+cGlwZTsKKworCWZyb250YnVmZmVyX2JpdHMgJj0gSU5URUxfRlJPTlRCVUZGRVJf QUxMX01BU0socGlwZSk7CisJZGV2X3ByaXYtPmRycnMuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzICY9 IH5mcm9udGJ1ZmZlcl9iaXRzOworCisJLyogZmx1c2ggbWVhbnMgYnVzeSBzY3JlZW4gaGVuY2Ug dXBjbG9jayAqLworCWlmIChmcm9udGJ1ZmZlcl9iaXRzICYmIGRldl9wcml2LT5kcnJzLnJlZnJl c2hfcmF0ZV90eXBlID09IERSUlNfTE9XX1JSKQorCQlpbnRlbF9kcnJzX3NldF9zdGF0ZShkZXZf cHJpdi0+ZGV2LAorCQkJCSAgICAgcGFuZWwtPmZpeGVkX21vZGUtPnZyZWZyZXNoKTsKKworCS8q CisJICogZmx1c2ggYWxzbyBtZWFucyBubyBtb3JlIGFjdGl2aXR5IGhlbmNlIHNjaGVkdWxlIGRv d25jbG9jaywgaWYgYWxsCisJICogb3RoZXIgZmJzIGFyZSBxdWllc2NlbnQgdG9vCisJICovCisJ aWYgKCFkZXZfcHJpdi0+ZHJycy5idXN5X2Zyb250YnVmZmVyX2JpdHMpCisJCXNjaGVkdWxlX2Rl bGF5ZWRfd29yaygmZGV2X3ByaXYtPmRycnMud29yaywKKwkJCQltc2Vjc190b19qaWZmaWVzKDEw MDApKTsKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kcnJzLm11dGV4KTsKK30KKworLyoqCisg KiBpbnRlbF9kcnJzX2luaXQgLSBJbml0IGJhc2ljIERSUlMgd29yayBhbmQgbXV0ZXguCisgKiBA aW50ZWxfY29ubmVjdG9yOiBlRFAgY29ubmVjdG9yCisgKiBAZml4ZWRfbW9kZTogcHJlZmVycmVk IG1vZGUgb2YgcGFuZWwKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzICBjYWxsZWQgb25seSBvbmNl IGF0IGRyaXZlciBsb2FkIHRvIGluaXRpYWxpemUgYmFzaWMKKyAqIERSUlMgc3R1ZmYuCisgKgor ICogUmV0dXJuczoKKyAqIERvd25jbG9jayBtb2RlIGlmIHBhbmVsIHN1cHBvcnRzIGl0LCBlbHNl IHJldHVybiBOVUxMLgorICogRFJSUyBzdXBwb3J0IGlzIGRldGVybWluZWQgYnkgdGhlIHByZXNl bmNlIG9mIGRvd25jbG9jayBtb2RlIChhcGFydAorICogZnJvbSBWQlQgc2V0dGluZykuCisgKi8K K3N0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoKK2ludGVsX2RycnNfaW5pdChzdHJ1Y3QgaW50ZWxf Y29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpm aXhlZF9tb2RlKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSAmaW50ZWxf Y29ubmVjdG9yLT5iYXNlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRl djsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkb3duY2xvY2tfbW9kZSA9IE5VTEw7CisKKwlJ TklUX0RFTEFZRURfV09SSygmZGV2X3ByaXYtPmRycnMud29yaywgaW50ZWxfZHJyc19kb3duY2xv Y2tfd29yayk7CisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmRycnMubXV0ZXgpOworCisJaWYgKElO VEVMX0lORk8oZGV2KS0+Z2VuIDw9IDYpIHsKKwkJRFJNX0RFQlVHX0tNUygiRFJSUyBzdXBwb3J0 ZWQgZm9yIEdlbjcgYW5kIGFib3ZlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGRl dl9wcml2LT52YnQuZHJyc190eXBlICE9IFNFQU1MRVNTX0RSUlNfU1VQUE9SVCkgeworCQlEUk1f REVCVUdfS01TKCJWQlQgZG9lc24ndCBzdXBwb3J0IERSUlNcbiIpOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwlkb3duY2xvY2tfbW9kZSA9IGludGVsX2ZpbmRfcGFuZWxfZG93bmNsb2NrCisJCQkJ CShkZXYsIGZpeGVkX21vZGUsIGNvbm5lY3Rvcik7CisKKwlpZiAoIWRvd25jbG9ja19tb2RlKSB7 CisJCURSTV9ERUJVR19LTVMoIkRvd25jbG9jayBtb2RlIGlzIG5vdCBmb3VuZC4gRFJSUyBub3Qg c3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZGV2X3ByaXYtPmRycnMudHlw ZSA9IGRldl9wcml2LT52YnQuZHJyc190eXBlOworCisJZGV2X3ByaXYtPmRycnMucmVmcmVzaF9y YXRlX3R5cGUgPSBEUlJTX0hJR0hfUlI7CisJRFJNX0RFQlVHX0tNUygic2VhbWxlc3MgRFJSUyBz dXBwb3J0ZWQgZm9yIGVEUCBwYW5lbC5cbiIpOworCXJldHVybiBkb3duY2xvY2tfbW9kZTsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggZDU5OWQ1NC4uNzM0MDZjMyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTEyMDksNiArMTIwOSwxNiBAQCB1MzIgc2tsX3BsYW5lX2N0 bF9mb3JtYXQodWludDMyX3QgcGl4ZWxfZm9ybWF0KTsKIHUzMiBza2xfcGxhbmVfY3RsX3RpbGlu Zyh1aW50NjRfdCBmYl9tb2RpZmllcik7CiB1MzIgc2tsX3BsYW5lX2N0bF9yb3RhdGlvbih1bnNp Z25lZCBpbnQgcm90YXRpb24pOwogCisvKiBpbnRlbF9kcnJzLmMgKi8KK3ZvaWQgaW50ZWxfZHJy c19lbmFibGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cit2b2lkIGludGVsX2RycnNfZGlz YWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKK3ZvaWQgaW50ZWxfZHJyc19pbnZhbGlk YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGZyb250YnVmZmVyX2JpdHMp Owordm9pZCBpbnRlbF9kcnJzX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVk IGZyb250YnVmZmVyX2JpdHMpOworc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKgoraW50ZWxfZHJy c19pbml0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciwKKwkJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKmZpeGVkX21vZGUpOworCiAvKiBpbnRlbF9pcHMuYyAqLwogYm9v bCBpbnRlbF9pcHNfcmVhZHkoc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCSAgICAgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwpAQCAtMTI1NiwxMSArMTI2Niw2IEBAIHZv aWQgaW50ZWxfZHBfaG90X3BsdWcoc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIp Owogdm9pZCB2bHZfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7CiB1aW50MzJfdCBpbnRlbF9kcF9wYWNrX2F1eChjb25zdCB1aW50OF90ICpz cmMsIGludCBzcmNfYnl0ZXMpOwogdm9pZCBpbnRlbF9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lKTsKLXZvaWQgaW50ZWxfZWRwX2RycnNfZW5hYmxlKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApOwotdm9pZCBpbnRlbF9lZHBfZHJyc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApOwotdm9pZCBpbnRlbF9lZHBfZHJyc19pbnZhbGlkYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCi0JCXVuc2lnbmVkIGZyb250YnVmZmVyX2JpdHMpOwotdm9pZCBpbnRlbF9l ZHBfZHJyc19mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBmcm9udGJ1ZmZl cl9iaXRzKTsKIGJvb2wgaW50ZWxfZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJCSBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpw b3J0KTsKIHZvaWQgaHN3X2RwX3NldF9kZGlfcGxsX3NlbChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqcGlwZV9jb25maWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZnJvbnRidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Zyb250YnVmZmVyLmMK aW5kZXggYWM4NTM1Ny4uZjc2OTUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZnJvbnRidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mcm9u dGJ1ZmZlci5jCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgaW50ZWxfZmJfb2JqX2ludmFsaWRhdGUo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAl9CiAKIAlpbnRlbF9wc3JfaW52YWxp ZGF0ZShkZXYsIG9iai0+ZnJvbnRidWZmZXJfYml0cyk7Ci0JaW50ZWxfZWRwX2RycnNfaW52YWxp ZGF0ZShkZXYsIG9iai0+ZnJvbnRidWZmZXJfYml0cyk7CisJaW50ZWxfZHJyc19pbnZhbGlkYXRl KGRldiwgb2JqLT5mcm9udGJ1ZmZlcl9iaXRzKTsKIAlpbnRlbF9mYmNfaW52YWxpZGF0ZShkZXZf cHJpdiwgb2JqLT5mcm9udGJ1ZmZlcl9iaXRzLCBvcmlnaW4pOwogfQogCkBAIC0xMjcsNyArMTI3 LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZnJvbnRidWZmZXJfZmx1c2goc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKIAlpZiAoIWZyb250YnVmZmVyX2JpdHMpCiAJCXJldHVybjsKIAotCWludGVsX2Vk cF9kcnJzX2ZsdXNoKGRldiwgZnJvbnRidWZmZXJfYml0cyk7CisJaW50ZWxfZHJyc19mbHVzaChk ZXYsIGZyb250YnVmZmVyX2JpdHMpOwogCWludGVsX3Bzcl9mbHVzaChkZXYsIGZyb250YnVmZmVy X2JpdHMsIG9yaWdpbik7CiAJaW50ZWxfZmJjX2ZsdXNoKGRldl9wcml2LCBmcm9udGJ1ZmZlcl9i aXRzLCBvcmlnaW4pOwogfQotLSAKMi40LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==