From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eugeni Dodonov Subject: =?utf-8?q?=5BPATCH_1/5=5D_drm/i915=3A_move_fbc-relate?= =?utf-8?q?d_functionality_into_intel=5Fpm_module?= Date: Mon, 16 Apr 2012 22:20:34 -0300 Message-ID: <1334625638-11971-2-git-send-email-eugeni.dodonov@intel.com> References: <1334625638-11971-1-git-send-email-eugeni.dodonov@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from oproxy9.bluehost.com (oproxy9.bluehost.com [69.89.24.6]) by gabe.freedesktop.org (Postfix) with SMTP id CCB9CA023C for ; Mon, 16 Apr 2012 18:20:58 -0700 (PDT) In-Reply-To: <1334625638-11971-1-git-send-email-eugeni.dodonov@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org Cc: Eugeni Dodonov List-Id: intel-gfx@lists.freedesktop.org VGhpcyBjb21taXQgbW92ZXMgRnJhbWUgQnVmZmVyIENvbXByZXNzaW9uLXJlbGF0ZWQgb3BlcmF0 aW9ucyBhbmQgc3VwcG9ydApmdW5jdGlvbnMgaW50byB0aGUgbmV3IGludGVsX3BtIG1vZHVsZS4K ClNpZ25lZC1vZmYtYnk6IEV1Z2VuaSBEb2Rvbm92IDxldWdlbmkuZG9kb25vdkBpbnRlbC5jb20+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgIHwgICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAgNDg0IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICB8ICAg MTUgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgIHwgIDUyMSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDUzNyBpbnNlcnRp b25zKCspLCA0ODQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggZjgwMTMzMC4uYjY1 YzA2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDcgQEAgaTkxNS15IDo9IGk5 MTVfZHJ2Lm8gaTkxNV9kbWEubyBpOTE1X2lycS5vIFwKIAkgIGludGVsX3Nkdm8ubyBcCiAJICBp bnRlbF9tb2Rlcy5vIFwKIAkgIGludGVsX3BhbmVsLm8gXAorCSAgaW50ZWxfcG0ubyBcCiAJICBp bnRlbF9pMmMubyBcCiAJICBpbnRlbF9mYi5vIFwKIAkgIGludGVsX3R2Lm8gXApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IGZkZjhjOWYuLmFhM2NjNzAgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTE2MjcsNDkwICsxNjI3LDYgQEAgc3RhdGljIHZv aWQgaW50ZWxfZGlzYWJsZV9wY2hfcG9ydHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAogCWRpc2FibGVfcGNoX2hkbWkoZGV2X3ByaXYsIHBpcGUsIEhETUlEKTsKIH0KIAotc3Rh dGljIHZvaWQgaTh4eF9kaXNhYmxlX2ZiYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMy IGZiY19jdGw7Ci0KLQkvKiBEaXNhYmxlIGNvbXByZXNzaW9uICovCi0JZmJjX2N0bCA9IEk5MTVf UkVBRChGQkNfQ09OVFJPTCk7Ci0JaWYgKChmYmNfY3RsICYgRkJDX0NUTF9FTikgPT0gMCkKLQkJ cmV0dXJuOwotCi0JZmJjX2N0bCAmPSB+RkJDX0NUTF9FTjsKLQlJOTE1X1dSSVRFKEZCQ19DT05U Uk9MLCBmYmNfY3RsKTsKLQotCS8qIFdhaXQgZm9yIGNvbXByZXNzaW5nIGJpdCB0byBjbGVhciAq LwotCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKEZCQ19TVEFUVVMpICYgRkJDX1NUQVRfQ09NUFJF U1NJTkcpID09IDAsIDEwKSkgewotCQlEUk1fREVCVUdfS01TKCJGQkMgaWRsZSB0aW1lZCBvdXRc biIpOwotCQlyZXR1cm47Ci0JfQotCi0JRFJNX0RFQlVHX0tNUygiZGlzYWJsZWQgRkJDXG4iKTsK LX0KLQotc3RhdGljIHZvaWQgaTh4eF9lbmFibGVfZmJjKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywg dW5zaWduZWQgbG9uZyBpbnRlcnZhbCkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBjcnRjLT5mYjsKLQlzdHJ1Y3Qg aW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwot CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYi0+b2JqOwotCXN0cnVj dCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQlpbnQgY2Zi X3BpdGNoOwotCWludCBwbGFuZSwgaTsKLQl1MzIgZmJjX2N0bCwgZmJjX2N0bDI7Ci0KLQljZmJf cGl0Y2ggPSBkZXZfcHJpdi0+Y2ZiX3NpemUgLyBGQkNfTExfU0laRTsKLQlpZiAoZmItPnBpdGNo ZXNbMF0gPCBjZmJfcGl0Y2gpCi0JCWNmYl9waXRjaCA9IGZiLT5waXRjaGVzWzBdOwotCi0JLyog RkJDX0NUTCB3YW50cyA2NEIgdW5pdHMgKi8KLQljZmJfcGl0Y2ggPSAoY2ZiX3BpdGNoIC8gNjQp IC0gMTsKLQlwbGFuZSA9IGludGVsX2NydGMtPnBsYW5lID09IDAgPyBGQkNfQ1RMX1BMQU5FQSA6 IEZCQ19DVExfUExBTkVCOwotCi0JLyogQ2xlYXIgb2xkIHRhZ3MgKi8KLQlmb3IgKGkgPSAwOyBp IDwgKEZCQ19MTF9TSVpFIC8gMzIpICsgMTsgaSsrKQotCQlJOTE1X1dSSVRFKEZCQ19UQUcgKyAo aSAqIDQpLCAwKTsKLQotCS8qIFNldCBpdCB1cC4uLiAqLwotCWZiY19jdGwyID0gRkJDX0NUTF9G RU5DRV9EQkwgfCBGQkNfQ1RMX0lETEVfSU1NIHwgRkJDX0NUTF9DUFVfRkVOQ0U7Ci0JZmJjX2N0 bDIgfD0gcGxhbmU7Ci0JSTkxNV9XUklURShGQkNfQ09OVFJPTDIsIGZiY19jdGwyKTsKLQlJOTE1 X1dSSVRFKEZCQ19GRU5DRV9PRkYsIGNydGMtPnkpOwotCi0JLyogZW5hYmxlIGl0Li4uICovCi0J ZmJjX2N0bCA9IEZCQ19DVExfRU4gfCBGQkNfQ1RMX1BFUklPRElDOwotCWlmIChJU19JOTQ1R00o ZGV2KSkKLQkJZmJjX2N0bCB8PSBGQkNfQ1RMX0MzX0lETEU7IC8qIDk0NSBuZWVkcyBzcGVjaWFs IFNSIGhhbmRsaW5nICovCi0JZmJjX2N0bCB8PSAoY2ZiX3BpdGNoICYgMHhmZikgPDwgRkJDX0NU TF9TVFJJREVfU0hJRlQ7Ci0JZmJjX2N0bCB8PSAoaW50ZXJ2YWwgJiAweDJmZmYpIDw8IEZCQ19D VExfSU5URVJWQUxfU0hJRlQ7Ci0JZmJjX2N0bCB8PSBvYmotPmZlbmNlX3JlZzsKLQlJOTE1X1dS SVRFKEZCQ19DT05UUk9MLCBmYmNfY3RsKTsKLQotCURSTV9ERUJVR19LTVMoImVuYWJsZWQgRkJD LCBwaXRjaCAlZCwgeW9mZiAlZCwgcGxhbmUgJWQsICIsCi0JCSAgICAgIGNmYl9waXRjaCwgY3J0 Yy0+eSwgaW50ZWxfY3J0Yy0+cGxhbmUpOwotfQotCi1zdGF0aWMgYm9vbCBpOHh4X2ZiY19lbmFi bGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCXJldHVybiBJOTE1X1JFQUQoRkJDX0NP TlRST0wpICYgRkJDX0NUTF9FTjsKLX0KLQotc3RhdGljIHZvaWQgZzR4X2VuYWJsZV9mYmMoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCB1bnNpZ25lZCBsb25nIGludGVydmFsKQotewotCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9 IGNydGMtPmZiOwotCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRl bF9mcmFtZWJ1ZmZlcihmYik7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGlu dGVsX2ZiLT5vYmo7Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9j cnRjKGNydGMpOwotCWludCBwbGFuZSA9IGludGVsX2NydGMtPnBsYW5lID09IDAgPyBEUEZDX0NU TF9QTEFORUEgOiBEUEZDX0NUTF9QTEFORUI7Ci0JdW5zaWduZWQgbG9uZyBzdGFsbF93YXRlcm1h cmsgPSAyMDA7Ci0JdTMyIGRwZmNfY3RsOwotCi0JZHBmY19jdGwgPSBwbGFuZSB8IERQRkNfU1Jf RU4gfCBEUEZDX0NUTF9MSU1JVF8xWDsKLQlkcGZjX2N0bCB8PSBEUEZDX0NUTF9GRU5DRV9FTiB8 IG9iai0+ZmVuY2VfcmVnOwotCUk5MTVfV1JJVEUoRFBGQ19DSElDS0VOLCBEUEZDX0hUX01PRElG WSk7Ci0KLQlJOTE1X1dSSVRFKERQRkNfUkVDT01QX0NUTCwgRFBGQ19SRUNPTVBfU1RBTExfRU4g fAotCQkgICAoc3RhbGxfd2F0ZXJtYXJrIDw8IERQRkNfUkVDT01QX1NUQUxMX1dNX1NISUZUKSB8 Ci0JCSAgIChpbnRlcnZhbCA8PCBEUEZDX1JFQ09NUF9USU1FUl9DT1VOVF9TSElGVCkpOwotCUk5 MTVfV1JJVEUoRFBGQ19GRU5DRV9ZT0ZGLCBjcnRjLT55KTsKLQotCS8qIGVuYWJsZSBpdC4uLiAq LwotCUk5MTVfV1JJVEUoRFBGQ19DT05UUk9MLCBJOTE1X1JFQUQoRFBGQ19DT05UUk9MKSB8IERQ RkNfQ1RMX0VOKTsKLQotCURSTV9ERUJVR19LTVMoImVuYWJsZWQgZmJjIG9uIHBsYW5lICVkXG4i LCBpbnRlbF9jcnRjLT5wbGFuZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGc0eF9kaXNhYmxlX2ZiYyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIGRwZmNfY3RsOwotCi0JLyogRGlzYWJsZSBj b21wcmVzc2lvbiAqLwotCWRwZmNfY3RsID0gSTkxNV9SRUFEKERQRkNfQ09OVFJPTCk7Ci0JaWYg KGRwZmNfY3RsICYgRFBGQ19DVExfRU4pIHsKLQkJZHBmY19jdGwgJj0gfkRQRkNfQ1RMX0VOOwot CQlJOTE1X1dSSVRFKERQRkNfQ09OVFJPTCwgZHBmY19jdGwpOwotCi0JCURSTV9ERUJVR19LTVMo ImRpc2FibGVkIEZCQ1xuIik7Ci0JfQotfQotCi1zdGF0aWMgYm9vbCBnNHhfZmJjX2VuYWJsZWQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JcmV0dXJuIEk5MTVfUkVBRChEUEZDX0NPTlRS T0wpICYgRFBGQ19DVExfRU47Ci19Ci0KLXN0YXRpYyB2b2lkIHNhbmR5YnJpZGdlX2JsaXRfZmJj X3VwZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIGJsdF9lY29za3BkOwotCi0J LyogTWFrZSBzdXJlIGJsaXR0ZXIgbm90aWZpZXMgRkJDIG9mIHdyaXRlcyAqLwotCWdlbjZfZ3Rf Zm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOwotCWJsdF9lY29za3BkID0gSTkxNV9SRUFEKEdFTjZf QkxJVFRFUl9FQ09TS1BEKTsKLQlibHRfZWNvc2twZCB8PSBHRU42X0JMSVRURVJfRkJDX05PVElG WSA8PAotCQlHRU42X0JMSVRURVJfTE9DS19TSElGVDsKLQlJOTE1X1dSSVRFKEdFTjZfQkxJVFRF Ul9FQ09TS1BELCBibHRfZWNvc2twZCk7Ci0JYmx0X2Vjb3NrcGQgfD0gR0VONl9CTElUVEVSX0ZC Q19OT1RJRlk7Ci0JSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQp OwotCWJsdF9lY29za3BkICY9IH4oR0VONl9CTElUVEVSX0ZCQ19OT1RJRlkgPDwKLQkJCSBHRU42 X0JMSVRURVJfTE9DS19TSElGVCk7Ci0JSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwg Ymx0X2Vjb3NrcGQpOwotCVBPU1RJTkdfUkVBRChHRU42X0JMSVRURVJfRUNPU0tQRCk7Ci0JZ2Vu Nl9ndF9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyb25sYWtl X2VuYWJsZV9mYmMoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1bnNpZ25lZCBsb25nIGludGVydmFs KQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IGNydGMtPmZiOwotCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50 ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiA9IGludGVsX2ZiLT5vYmo7Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2Ny dGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCWludCBwbGFuZSA9IGludGVsX2NydGMtPnBsYW5l ID09IDAgPyBEUEZDX0NUTF9QTEFORUEgOiBEUEZDX0NUTF9QTEFORUI7Ci0JdW5zaWduZWQgbG9u ZyBzdGFsbF93YXRlcm1hcmsgPSAyMDA7Ci0JdTMyIGRwZmNfY3RsOwotCi0JZHBmY19jdGwgPSBJ OTE1X1JFQUQoSUxLX0RQRkNfQ09OVFJPTCk7Ci0JZHBmY19jdGwgJj0gRFBGQ19SRVNFUlZFRDsK LQlkcGZjX2N0bCB8PSAocGxhbmUgfCBEUEZDX0NUTF9MSU1JVF8xWCk7Ci0JLyogU2V0IHBlcnNp c3RlbnQgbW9kZSBmb3IgZnJvbnQtYnVmZmVyIHJlbmRlcmluZywgYWxhIFguICovCi0JZHBmY19j dGwgfD0gRFBGQ19DVExfUEVSU0lTVEVOVF9NT0RFOwotCWRwZmNfY3RsIHw9IChEUEZDX0NUTF9G RU5DRV9FTiB8IG9iai0+ZmVuY2VfcmVnKTsKLQlJOTE1X1dSSVRFKElMS19EUEZDX0NISUNLRU4s IERQRkNfSFRfTU9ESUZZKTsKLQotCUk5MTVfV1JJVEUoSUxLX0RQRkNfUkVDT01QX0NUTCwgRFBG Q19SRUNPTVBfU1RBTExfRU4gfAotCQkgICAoc3RhbGxfd2F0ZXJtYXJrIDw8IERQRkNfUkVDT01Q X1NUQUxMX1dNX1NISUZUKSB8Ci0JCSAgIChpbnRlcnZhbCA8PCBEUEZDX1JFQ09NUF9USU1FUl9D T1VOVF9TSElGVCkpOwotCUk5MTVfV1JJVEUoSUxLX0RQRkNfRkVOQ0VfWU9GRiwgY3J0Yy0+eSk7 Ci0JSTkxNV9XUklURShJTEtfRkJDX1JUX0JBU0UsIG9iai0+Z3R0X29mZnNldCB8IElMS19GQkNf UlRfVkFMSUQpOwotCS8qIGVuYWJsZSBpdC4uLiAqLwotCUk5MTVfV1JJVEUoSUxLX0RQRkNfQ09O VFJPTCwgZHBmY19jdGwgfCBEUEZDX0NUTF9FTik7Ci0KLQlpZiAoSVNfR0VONihkZXYpKSB7Ci0J CUk5MTVfV1JJVEUoU05CX0RQRkNfQ1RMX1NBLAotCQkJICAgU05CX0NQVV9GRU5DRV9FTkFCTEUg fCBvYmotPmZlbmNlX3JlZyk7Ci0JCUk5MTVfV1JJVEUoRFBGQ19DUFVfRkVOQ0VfT0ZGU0VULCBj cnRjLT55KTsKLQkJc2FuZHlicmlkZ2VfYmxpdF9mYmNfdXBkYXRlKGRldik7Ci0JfQotCi0JRFJN X0RFQlVHX0tNUygiZW5hYmxlZCBmYmMgb24gcGxhbmUgJWRcbiIsIGludGVsX2NydGMtPnBsYW5l KTsKLX0KLQotc3RhdGljIHZvaWQgaXJvbmxha2VfZGlzYWJsZV9mYmMoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwotCXUzMiBkcGZjX2N0bDsKLQotCS8qIERpc2FibGUgY29tcHJlc3Npb24gKi8K LQlkcGZjX2N0bCA9IEk5MTVfUkVBRChJTEtfRFBGQ19DT05UUk9MKTsKLQlpZiAoZHBmY19jdGwg JiBEUEZDX0NUTF9FTikgewotCQlkcGZjX2N0bCAmPSB+RFBGQ19DVExfRU47Ci0JCUk5MTVfV1JJ VEUoSUxLX0RQRkNfQ09OVFJPTCwgZHBmY19jdGwpOwotCi0JCURSTV9ERUJVR19LTVMoImRpc2Fi bGVkIEZCQ1xuIik7Ci0JfQotfQotCi1zdGF0aWMgYm9vbCBpcm9ubGFrZV9mYmNfZW5hYmxlZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlyZXR1cm4gSTkxNV9SRUFEKElMS19EUEZDX0NP TlRST0wpICYgRFBGQ19DVExfRU47Ci19Ci0KLWJvb2wgaW50ZWxfZmJjX2VuYWJsZWQoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5hYmxl ZCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIGRldl9wcml2LT5kaXNwbGF5LmZiY19lbmFi bGVkKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2ZiY193b3JrX2ZuKHN0cnVjdCB3b3Jr X3N0cnVjdCAqX193b3JrKQotewotCXN0cnVjdCBpbnRlbF9mYmNfd29yayAqd29yayA9Ci0JCWNv bnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsoX193b3JrKSwKLQkJCSAgICAgc3RydWN0IGludGVs X2ZiY193b3JrLCB3b3JrKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gd29yay0+Y3J0Yy0+ ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JaWYgKHdvcmsgPT0gZGV2 X3ByaXYtPmZiY193b3JrKSB7Ci0JCS8qIERvdWJsZSBjaGVjayB0aGF0IHdlIGhhdmVuJ3Qgc3dp dGNoZWQgZmIgd2l0aG91dCBjYW5jZWxsaW5nCi0JCSAqIHRoZSBwcmlvciB3b3JrLgotCQkgKi8K LQkJaWYgKHdvcmstPmNydGMtPmZiID09IHdvcmstPmZiKSB7Ci0JCQlkZXZfcHJpdi0+ZGlzcGxh eS5lbmFibGVfZmJjKHdvcmstPmNydGMsCi0JCQkJCQkgICAgIHdvcmstPmludGVydmFsKTsKLQot CQkJZGV2X3ByaXYtPmNmYl9wbGFuZSA9IHRvX2ludGVsX2NydGMod29yay0+Y3J0YyktPnBsYW5l OwotCQkJZGV2X3ByaXYtPmNmYl9mYiA9IHdvcmstPmNydGMtPmZiLT5iYXNlLmlkOwotCQkJZGV2 X3ByaXYtPmNmYl95ID0gd29yay0+Y3J0Yy0+eTsKLQkJfQotCi0JCWRldl9wcml2LT5mYmNfd29y ayA9IE5VTEw7Ci0JfQotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0Ja2Zy ZWUod29yayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2NhbmNlbF9mYmNfd29yayhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaWYgKGRldl9wcml2LT5mYmNfd29yayA9 PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlEUk1fREVCVUdfS01TKCJjYW5jZWxsaW5nIHBlbmRpbmcg RkJDIGVuYWJsZVxuIik7Ci0KLQkvKiBTeW5jaHJvbmlzYXRpb24gaXMgcHJvdmlkZWQgYnkgc3Ry dWN0X211dGV4IGFuZCBjaGVja2luZyBvZgotCSAqIGRldl9wcml2LT5mYmNfd29yaywgc28gd2Ug Y2FuIHBlcmZvcm0gdGhlIGNhbmNlbGxhdGlvbgotCSAqIGVudGlyZWx5IGFzeW5jaHJvbm91c2x5 LgotCSAqLwotCWlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+ZmJjX3dvcmstPndv cmspKQotCQkvKiB0YXNrbGV0IHdhcyBraWxsZWQgYmVmb3JlIGJlaW5nIHJ1biwgY2xlYW4gdXAg Ki8KLQkJa2ZyZWUoZGV2X3ByaXYtPmZiY193b3JrKTsKLQotCS8qIE1hcmsgdGhlIHdvcmsgYXMg bm8gbG9uZ2VyIHdhbnRlZCBzbyB0aGF0IGlmIGl0IGRvZXMKLQkgKiB3YWtlLXVwIChiZWNhdXNl IHRoZSB3b3JrIHdhcyBhbHJlYWR5IHJ1bm5pbmcgYW5kIHdhaXRpbmcKLQkgKiBmb3Igb3VyIG11 dGV4KSwgaXQgd2lsbCBkaXNjb3ZlciB0aGF0IGlzIG5vIGxvbmdlcgotCSAqIG5lY2Vzc2FyeSB0 byBydW4uCi0JICovCi0JZGV2X3ByaXYtPmZiY193b3JrID0gTlVMTDsKLX0KLQotc3RhdGljIHZv aWQgaW50ZWxfZW5hYmxlX2ZiYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHVuc2lnbmVkIGxvbmcg aW50ZXJ2YWwpCi17Ci0Jc3RydWN0IGludGVsX2ZiY193b3JrICp3b3JrOwotCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmICghZGV2X3ByaXYtPmRpc3BsYXkuZW5hYmxl X2ZiYykKLQkJcmV0dXJuOwotCi0JaW50ZWxfY2FuY2VsX2ZiY193b3JrKGRldl9wcml2KTsKLQot CXdvcmsgPSBremFsbG9jKHNpemVvZiAqd29yaywgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdvcmsgPT0g TlVMTCkgewotCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfZmJjKGNydGMsIGludGVydmFsKTsK LQkJcmV0dXJuOwotCX0KLQotCXdvcmstPmNydGMgPSBjcnRjOwotCXdvcmstPmZiID0gY3J0Yy0+ ZmI7Ci0Jd29yay0+aW50ZXJ2YWwgPSBpbnRlcnZhbDsKLQlJTklUX0RFTEFZRURfV09SSygmd29y ay0+d29yaywgaW50ZWxfZmJjX3dvcmtfZm4pOwotCi0JZGV2X3ByaXYtPmZiY193b3JrID0gd29y azsKLQotCURSTV9ERUJVR19LTVMoInNjaGVkdWxpbmcgZGVsYXllZCBGQkMgZW5hYmxlXG4iKTsK LQotCS8qIERlbGF5IHRoZSBhY3R1YWwgZW5hYmxpbmcgdG8gbGV0IHBhZ2VmbGlwcGluZyBjZWFz ZSBhbmQgdGhlCi0JICogZGlzcGxheSB0byBzZXR0bGUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBjb21w cmVzc2lvbi4gTm90ZSB0aGF0Ci0JICogdGhpcyBkZWxheSBhbHNvIHNlcnZlcyBhIHNlY29uZCBw dXJwb3NlOiBpdCBhbGxvd3MgZm9yIGEKLQkgKiB2YmxhbmsgdG8gcGFzcyBhZnRlciBkaXNhYmxp bmcgdGhlIEZCQyBiZWZvcmUgd2UgYXR0ZW1wdAotCSAqIHRvIG1vZGlmeSB0aGUgY29udHJvbCBy ZWdpc3RlcnMuCi0JICoKLQkgKiBBIG1vcmUgY29tcGxpY2F0ZWQgc29sdXRpb24gd291bGQgaW52 b2x2ZSB0cmFja2luZyB2YmxhbmtzCi0JICogZm9sbG93aW5nIHRoZSB0ZXJtaW5hdGlvbiBvZiB0 aGUgcGFnZS1mbGlwcGluZyBzZXF1ZW5jZQotCSAqIGFuZCBpbmRlZWQgcGVyZm9ybWluZyB0aGUg ZW5hYmxlIGFzIGEgY28tcm91dGluZSBhbmQgbm90Ci0JICogd2FpdGluZyBzeW5jaHJvbm91c2x5 IHVwb24gdGhlIHZibGFuay4KLQkgKi8KLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJndvcmstPndv cmssIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKLX0KLQotdm9pZCBpbnRlbF9kaXNhYmxlX2ZiYyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpbnRlbF9jYW5jZWxfZmJjX3dvcmsoZGV2X3By aXYpOwotCi0JaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYykKLQkJcmV0dXJuOwot Ci0JZGV2X3ByaXYtPmRpc3BsYXkuZGlzYWJsZV9mYmMoZGV2KTsKLQlkZXZfcHJpdi0+Y2ZiX3Bs YW5lID0gLTE7Ci19Ci0KLS8qKgotICogaW50ZWxfdXBkYXRlX2ZiYyAtIGVuYWJsZS9kaXNhYmxl IEZCQyBhcyBuZWVkZWQKLSAqIEBkZXY6IHRoZSBkcm1fZGV2aWNlCi0gKgotICogU2V0IHVwIHRo ZSBmcmFtZWJ1ZmZlciBjb21wcmVzc2lvbiBoYXJkd2FyZSBhdCBtb2RlIHNldCB0aW1lLiAgV2UK LSAqIGVuYWJsZSBpdCBpZiBwb3NzaWJsZToKLSAqICAgLSBwbGFuZSBBIG9ubHkgKG9uIHByZS05 NjUpCi0gKiAgIC0gbm8gcGl4ZWwgbXVsaXRwbHkvbGluZSBkdXBsaWNhdGlvbgotICogICAtIG5v IGFscGhhIGJ1ZmZlciBkaXNjYXJkCi0gKiAgIC0gbm8gZHVhbCB3aWRlCi0gKiAgIC0gZnJhbWVi dWZmZXIgPD0gMjA0OCBpbiB3aWR0aCwgMTUzNiBpbiBoZWlnaHQKLSAqCi0gKiBXZSBjYW4ndCBh c3N1bWUgdGhhdCBhbnkgY29tcHJlc3Npb24gd2lsbCB0YWtlIHBsYWNlICh3b3JzdCBjYXNlKSwK LSAqIHNvIHRoZSBjb21wcmVzc2VkIGJ1ZmZlciBoYXMgdG8gYmUgdGhlIHNhbWUgc2l6ZSBhcyB0 aGUgdW5jb21wcmVzc2VkCi0gKiBvbmUuICBJdCBhbHNvIG11c3QgcmVzaWRlIChhbG9uZyB3aXRo IHRoZSBsaW5lIGxlbmd0aCBidWZmZXIpIGluCi0gKiBzdG9sZW4gbWVtb3J5LgotICoKLSAqIFdl IG5lZWQgdG8gZW5hYmxlL2Rpc2FibGUgRkJDIG9uIGEgZ2xvYmFsIGJhc2lzLgotICovCi1zdGF0 aWMgdm9pZCBpbnRlbF91cGRhdGVfZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1 Y3QgZHJtX2NydGMgKmNydGMgPSBOVUxMLCAqdG1wX2NydGM7Ci0Jc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGM7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Ci0Jc3RydWN0IGludGVs X2ZyYW1lYnVmZmVyICppbnRlbF9mYjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq OwotCWludCBlbmFibGVfZmJjOwotCi0JRFJNX0RFQlVHX0tNUygiXG4iKTsKLQotCWlmICghaTkx NV9wb3dlcnNhdmUpCi0JCXJldHVybjsKLQotCWlmICghSTkxNV9IQVNfRkJDKGRldikpCi0JCXJl dHVybjsKLQotCS8qCi0JICogSWYgRkJDIGlzIGFscmVhZHkgb24sIHdlIGp1c3QgaGF2ZSB0byB2 ZXJpZnkgdGhhdCB3ZSBjYW4KLQkgKiBrZWVwIGl0IHRoYXQgd2F5Li4uCi0JICogTmVlZCB0byBk aXNhYmxlIGlmOgotCSAqICAgLSBtb3JlIHRoYW4gb25lIHBpcGUgaXMgYWN0aXZlCi0JICogICAt IGNoYW5naW5nIEZCQyBwYXJhbXMgKHN0cmlkZSwgZmVuY2UsIG1vZGUpCi0JICogICAtIG5ldyBm YiBpcyB0b28gbGFyZ2UgdG8gZml0IGluIGNvbXByZXNzZWQgYnVmZmVyCi0JICogICAtIGdvaW5n IHRvIGFuIHVuc3VwcG9ydGVkIGNvbmZpZyAoaW50ZXJsYWNlLCBwaXhlbCBtdWx0aXBseSwgZXRj LikKLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9jcnRjLCAmZGV2LT5tb2RlX2NvbmZp Zy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJaWYgKHRtcF9jcnRjLT5lbmFibGVkICYmIHRtcF9jcnRj LT5mYikgewotCQkJaWYgKGNydGMpIHsKLQkJCQlEUk1fREVCVUdfS01TKCJtb3JlIHRoYW4gb25l IHBpcGUgYWN0aXZlLCBkaXNhYmxpbmcgY29tcHJlc3Npb25cbiIpOwotCQkJCWRldl9wcml2LT5u b19mYmNfcmVhc29uID0gRkJDX01VTFRJUExFX1BJUEVTOwotCQkJCWdvdG8gb3V0X2Rpc2FibGU7 Ci0JCQl9Ci0JCQljcnRjID0gdG1wX2NydGM7Ci0JCX0KLQl9Ci0KLQlpZiAoIWNydGMgfHwgY3J0 Yy0+ZmIgPT0gTlVMTCkgewotCQlEUk1fREVCVUdfS01TKCJubyBvdXRwdXQsIGRpc2FibGluZ1xu Iik7Ci0JCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJDX05PX09VVFBVVDsKLQkJZ290byBv dXRfZGlzYWJsZTsKLQl9Ci0KLQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQlm YiA9IGNydGMtPmZiOwotCWludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwotCW9i aiA9IGludGVsX2ZiLT5vYmo7Ci0KLQllbmFibGVfZmJjID0gaTkxNV9lbmFibGVfZmJjOwotCWlm IChlbmFibGVfZmJjIDwgMCkgewotCQlEUk1fREVCVUdfS01TKCJmYmMgc2V0IHRvIHBlci1jaGlw IGRlZmF1bHRcbiIpOwotCQllbmFibGVfZmJjID0gMTsKLQkJaWYgKElOVEVMX0lORk8oZGV2KS0+ Z2VuIDw9IDYpCi0JCQllbmFibGVfZmJjID0gMDsKLQl9Ci0JaWYgKCFlbmFibGVfZmJjKSB7Ci0J CURSTV9ERUJVR19LTVMoImZiYyBkaXNhYmxlZCBwZXIgbW9kdWxlIHBhcmFtXG4iKTsKLQkJZGV2 X3ByaXYtPm5vX2ZiY19yZWFzb24gPSBGQkNfTU9EVUxFX1BBUkFNOwotCQlnb3RvIG91dF9kaXNh YmxlOwotCX0KLQlpZiAoaW50ZWxfZmItPm9iai0+YmFzZS5zaXplID4gZGV2X3ByaXYtPmNmYl9z aXplKSB7Ci0JCURSTV9ERUJVR19LTVMoImZyYW1lYnVmZmVyIHRvbyBsYXJnZSwgZGlzYWJsaW5n ICIKLQkJCSAgICAgICJjb21wcmVzc2lvblxuIik7Ci0JCWRldl9wcml2LT5ub19mYmNfcmVhc29u ID0gRkJDX1NUT0xFTl9UT09fU01BTEw7Ci0JCWdvdG8gb3V0X2Rpc2FibGU7Ci0JfQotCWlmICgo Y3J0Yy0+bW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB8fAotCSAgICAoY3J0 Yy0+bW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikpIHsKLQkJRFJNX0RFQlVHX0tN UygibW9kZSBpbmNvbXBhdGlibGUgd2l0aCBjb21wcmVzc2lvbiwgIgotCQkJICAgICAgImRpc2Fi bGluZ1xuIik7Ci0JCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJDX1VOU1VQUE9SVEVEX01P REU7Ci0JCWdvdG8gb3V0X2Rpc2FibGU7Ci0JfQotCWlmICgoY3J0Yy0+bW9kZS5oZGlzcGxheSA+ IDIwNDgpIHx8Ci0JICAgIChjcnRjLT5tb2RlLnZkaXNwbGF5ID4gMTUzNikpIHsKLQkJRFJNX0RF QlVHX0tNUygibW9kZSB0b28gbGFyZ2UgZm9yIGNvbXByZXNzaW9uLCBkaXNhYmxpbmdcbiIpOwot CQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19NT0RFX1RPT19MQVJHRTsKLQkJZ290byBv dXRfZGlzYWJsZTsKLQl9Ci0JaWYgKChJU19JOTE1R00oZGV2KSB8fCBJU19JOTQ1R00oZGV2KSkg JiYgaW50ZWxfY3J0Yy0+cGxhbmUgIT0gMCkgewotCQlEUk1fREVCVUdfS01TKCJwbGFuZSBub3Qg MCwgZGlzYWJsaW5nIGNvbXByZXNzaW9uXG4iKTsKLQkJZGV2X3ByaXYtPm5vX2ZiY19yZWFzb24g PSBGQkNfQkFEX1BMQU5FOwotCQlnb3RvIG91dF9kaXNhYmxlOwotCX0KLQotCS8qIFRoZSB1c2Ug b2YgYSBDUFUgZmVuY2UgaXMgbWFuZGF0b3J5IGluIG9yZGVyIHRvIGRldGVjdCB3cml0ZXMKLQkg KiBieSB0aGUgQ1BVIHRvIHRoZSBzY2Fub3V0IGFuZCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIEZC Qy4KLQkgKi8KLQlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19YIHx8Ci0JICAg IG9iai0+ZmVuY2VfcmVnID09IEk5MTVfRkVOQ0VfUkVHX05PTkUpIHsKLQkJRFJNX0RFQlVHX0tN UygiZnJhbWVidWZmZXIgbm90IHRpbGVkIG9yIGZlbmNlZCwgZGlzYWJsaW5nIGNvbXByZXNzaW9u XG4iKTsKLQkJZGV2X3ByaXYtPm5vX2ZiY19yZWFzb24gPSBGQkNfTk9UX1RJTEVEOwotCQlnb3Rv IG91dF9kaXNhYmxlOwotCX0KLQotCS8qIElmIHRoZSBrZXJuZWwgZGVidWdnZXIgaXMgYWN0aXZl LCBhbHdheXMgZGlzYWJsZSBjb21wcmVzc2lvbiAqLwotCWlmIChpbl9kYmdfbWFzdGVyKCkpCi0J CWdvdG8gb3V0X2Rpc2FibGU7Ci0KLQkvKiBJZiB0aGUgc2Nhbm91dCBoYXMgbm90IGNoYW5nZWQs IGRvbid0IG1vZGlmeSB0aGUgRkJDIHNldHRpbmdzLgotCSAqIE5vdGUgdGhhdCB3ZSBtYWtlIHRo ZSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9uIHRoYXQgdGhlIGZiLT5vYmoKLQkgKiBjYW5ub3QgYmUg dW5waW5uZWQgKGFuZCBoYXZlIGl0cyBHVFQgb2Zmc2V0IGFuZCBmZW5jZSByZXZva2VkKQotCSAq IHdpdGhvdXQgZmlyc3QgYmVpbmcgZGVjb3VwbGVkIGZyb20gdGhlIHNjYW5vdXQgYW5kIEZCQyBk aXNhYmxlZC4KLQkgKi8KLQlpZiAoZGV2X3ByaXYtPmNmYl9wbGFuZSA9PSBpbnRlbF9jcnRjLT5w bGFuZSAmJgotCSAgICBkZXZfcHJpdi0+Y2ZiX2ZiID09IGZiLT5iYXNlLmlkICYmCi0JICAgIGRl dl9wcml2LT5jZmJfeSA9PSBjcnRjLT55KQotCQlyZXR1cm47Ci0KLQlpZiAoaW50ZWxfZmJjX2Vu YWJsZWQoZGV2KSkgewotCQkvKiBXZSB1cGRhdGUgRkJDIGFsb25nIHR3byBwYXRocywgYWZ0ZXIg Y2hhbmdpbmcgZmIvY3J0YwotCQkgKiBjb25maWd1cmF0aW9uIChtb2Rlc3dpdGNoaW5nKSBhbmQg YWZ0ZXIgcGFnZS1mbGlwcGluZwotCQkgKiBmaW5pc2hlcy4gRm9yIHRoZSBsYXR0ZXIsIHdlIGtu b3cgdGhhdCBub3Qgb25seSBkaWQKLQkJICogd2UgZGlzYWJsZSB0aGUgRkJDIGF0IHRoZSBzdGFy dCBvZiB0aGUgcGFnZS1mbGlwCi0JCSAqIHNlcXVlbmNlLCBidXQgYWxzbyBtb3JlIHRoYW4gb25l IHZibGFuayBoYXMgcGFzc2VkLgotCQkgKgotCQkgKiBGb3IgdGhlIGZvcm1lciBjYXNlIG9mIG1v ZGVzd2l0Y2hpbmcsIGl0IGlzIHBvc3NpYmxlCi0JCSAqIHRvIHN3aXRjaCBiZXR3ZWVuIHR3byBG QkMgdmFsaWQgY29uZmlndXJhdGlvbnMKLQkJICogaW5zdGFudGFuZW91c2x5IHNvIHdlIGRvIG5l ZWQgdG8gZGlzYWJsZSB0aGUgRkJDCi0JCSAqIGJlZm9yZSB3ZSBjYW4gbW9kaWZ5IGl0cyBjb250 cm9sIHJlZ2lzdGVycy4gV2UgYWxzbwotCQkgKiBoYXZlIHRvIHdhaXQgZm9yIHRoZSBuZXh0IHZi bGFuayBmb3IgdGhhdCB0byB0YWtlCi0JCSAqIGVmZmVjdC4gSG93ZXZlciwgc2luY2Ugd2UgZGVs YXkgZW5hYmxpbmcgRkJDIHdlIGNhbgotCQkgKiBhc3N1bWUgdGhhdCBhIHZibGFuayBoYXMgcGFz c2VkIHNpbmNlIGRpc2FibGluZyBhbmQKLQkJICogdGhhdCB3ZSBjYW4gc2FmZWx5IGFsdGVyIHRo ZSByZWdpc3RlcnMgaW4gdGhlIGRlZmVycmVkCi0JCSAqIGNhbGxiYWNrLgotCQkgKgotCQkgKiBJ biB0aGUgc2NlbmFyaW8gdGhhdCB3ZSBnbyBmcm9tIGEgdmFsaWQgdG8gaW52YWxpZAotCQkgKiBh bmQgdGhlbiBiYWNrIHRvIHZhbGlkIEZCQyBjb25maWd1cmF0aW9uIHdlIGhhdmUKLQkJICogbm8g c3RyaWN0IGVuZm9yY2VtZW50IHRoYXQgYSB2Ymxhbmsgb2NjdXJyZWQgc2luY2UKLQkJICogZGlz YWJsaW5nIHRoZSBGQkMuIEhvd2V2ZXIsIGFsb25nIGFsbCBjdXJyZW50IHBpcGUKLQkJICogZGlz YWJsaW5nIHBhdGhzIHdlIGRvIG5lZWQgdG8gd2FpdCBmb3IgYSB2YmxhbmsgYXQKLQkJICogc29t ZSBwb2ludC4gQW5kIHdlIHdhaXQgYmVmb3JlIGVuYWJsaW5nIEZCQyBhbnl3YXkuCi0JCSAqLwot CQlEUk1fREVCVUdfS01TKCJkaXNhYmxpbmcgYWN0aXZlIEZCQyBmb3IgdXBkYXRlXG4iKTsKLQkJ aW50ZWxfZGlzYWJsZV9mYmMoZGV2KTsKLQl9Ci0KLQlpbnRlbF9lbmFibGVfZmJjKGNydGMsIDUw MCk7Ci0JcmV0dXJuOwotCi1vdXRfZGlzYWJsZToKLQkvKiBNdWx0aXBsZSBkaXNhYmxlcyBzaG91 bGQgYmUgaGFybWxlc3MgKi8KLQlpZiAoaW50ZWxfZmJjX2VuYWJsZWQoZGV2KSkgewotCQlEUk1f REVCVUdfS01TKCJ1bnN1cHBvcnRlZCBjb25maWcsIGRpc2FibGluZyBGQkNcbiIpOwotCQlpbnRl bF9kaXNhYmxlX2ZiYyhkZXYpOwotCX0KLX0KLQogaW50CiBpbnRlbF9waW5fYW5kX2ZlbmNlX2Zi X29iaihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggODc0OGU1ZS4uZGVmMTEy ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTQzNCw0ICs0MzQsMTkgQEAgZXh0ZXJu IGludCBpbnRlbF9zcHJpdGVfZ2V0X2NvbG9ya2V5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCiAKIGV4dGVybiB1MzIgaW50ZWxfZHBpb19yZWFkKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgaW50IHJlZyk7CiAKKy8qIFBvd2VyLXJlbGF0ZWQgZnVuY3Rpb25z LCBsb2NhdGVkIGluIGludGVsX3BtLmMgKi8KKy8qIEZCQyAqLworZXh0ZXJuIHZvaWQgaTh4eF9k aXNhYmxlX2ZiYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGk4eHhfZW5h YmxlX2ZiYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpOwor ZXh0ZXJuIGJvb2wgaTh4eF9mYmNfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4 dGVybiB2b2lkIGc0eF9lbmFibGVfZmJjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdW5zaWduZWQg bG9uZyBpbnRlcnZhbCk7CitleHRlcm4gdm9pZCBnNHhfZGlzYWJsZV9mYmMoc3RydWN0IGRybV9k ZXZpY2UgKmRldik7CitleHRlcm4gYm9vbCBnNHhfZmJjX2VuYWJsZWQoc3RydWN0IGRybV9kZXZp Y2UgKmRldik7CitleHRlcm4gdm9pZCBpcm9ubGFrZV9lbmFibGVfZmJjKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywgdW5zaWduZWQgbG9uZyBpbnRlcnZhbCk7CitleHRlcm4gdm9pZCBpcm9ubGFrZV9k aXNhYmxlX2ZiYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBib29sIGlyb25sYWtl X2ZiY19lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGJvb2wgaW50ZWxf ZmJjX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9l bmFibGVfZmJjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdW5zaWduZWQgbG9uZyBpbnRlcnZhbCk7 CitleHRlcm4gdm9pZCBpbnRlbF91cGRhdGVfZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwor CiAjZW5kaWYgLyogX19JTlRFTF9EUlZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmJkMzA1Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAtMCwwICsxLDUyMSBAQAorLyoK KyAqIENvcHlyaWdodCDCqSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBFdWdl bmkgRG9kb25vdiA8ZXVnZW5pLmRvZG9ub3ZAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVk ZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKworLyogRkJDLCBvciBGcmFt ZSBCdWZmZXIgQ29tcHJlc3Npb24sIGlzIGEgdGVjaG5pcXVlIGVtcGxveWVkIHRvIGNvbXByZXNz IHRoZSBmcmFtZWJ1ZmZlciBjb250ZW50cyBpbi1tZW1vcnksIGFpbWluZyBhdCByZWR1Y2luZyB0 aGUgcmVxdWlyZWQgYmFuZHdpZHRoIGR1cmluZyBpbi1tZW1vcnkgdHJhbnNmZXJzIGFuZCwgdGhl cmVmb3JlLCByZWR1Y2UgdGhlIHBvd2VyIHBhY2tldC4KKyAqCisgKiBUaGUgYmVuZWZpdHMgb2Yg RkJDIGFyZSBtb3N0bHkgdmlzaWJsZSB3aXRoIHNvbGlkIGJhY2tncm91bmRzIGFuZCB2YXJpYXRp b24tbGVzcyBwYXR0ZXJucy4KKyAqCisgKiBGQkMtcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGNhbiBi ZSBlbmFibGVkIGJ5IHRoZSBtZWFucyBvZiB0aGUgaTkxNS5pOTE1X2VuYWJsZV9mYmMgcGFyYW1l dGVyCisgKi8KKwordm9pZCBpOHh4X2Rpc2FibGVfZmJjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKKwl1MzIgZmJjX2N0bDsKKworCS8qIERpc2FibGUgY29tcHJlc3Npb24gKi8KKwlmYmNfY3Rs ID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MKTsKKwlpZiAoKGZiY19jdGwgJiBGQkNfQ1RMX0VOKSA9 PSAwKQorCQlyZXR1cm47CisKKwlmYmNfY3RsICY9IH5GQkNfQ1RMX0VOOworCUk5MTVfV1JJVEUo RkJDX0NPTlRST0wsIGZiY19jdGwpOworCisJLyogV2FpdCBmb3IgY29tcHJlc3NpbmcgYml0IHRv IGNsZWFyICovCisJaWYgKHdhaXRfZm9yKChJOTE1X1JFQUQoRkJDX1NUQVRVUykgJiBGQkNfU1RB VF9DT01QUkVTU0lORykgPT0gMCwgMTApKSB7CisJCURSTV9ERUJVR19LTVMoIkZCQyBpZGxlIHRp bWVkIG91dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlEUk1fREVCVUdfS01TKCJkaXNhYmxlZCBG QkNcbiIpOworfQorCit2b2lkIGk4eHhfZW5hYmxlX2ZiYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMs IHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNy dGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gY3J0Yy0+ZmI7CisJc3RydWN0 IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmItPm9iajsKKwlzdHJ1 Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IGNm Yl9waXRjaDsKKwlpbnQgcGxhbmUsIGk7CisJdTMyIGZiY19jdGwsIGZiY19jdGwyOworCisJY2Zi X3BpdGNoID0gZGV2X3ByaXYtPmNmYl9zaXplIC8gRkJDX0xMX1NJWkU7CisJaWYgKGZiLT5waXRj aGVzWzBdIDwgY2ZiX3BpdGNoKQorCQljZmJfcGl0Y2ggPSBmYi0+cGl0Y2hlc1swXTsKKworCS8q IEZCQ19DVEwgd2FudHMgNjRCIHVuaXRzICovCisJY2ZiX3BpdGNoID0gKGNmYl9waXRjaCAvIDY0 KSAtIDE7CisJcGxhbmUgPSBpbnRlbF9jcnRjLT5wbGFuZSA9PSAwID8gRkJDX0NUTF9QTEFORUEg OiBGQkNfQ1RMX1BMQU5FQjsKKworCS8qIENsZWFyIG9sZCB0YWdzICovCisJZm9yIChpID0gMDsg aSA8IChGQkNfTExfU0laRSAvIDMyKSArIDE7IGkrKykKKwkJSTkxNV9XUklURShGQkNfVEFHICsg KGkgKiA0KSwgMCk7CisKKwkvKiBTZXQgaXQgdXAuLi4gKi8KKwlmYmNfY3RsMiA9IEZCQ19DVExf RkVOQ0VfREJMIHwgRkJDX0NUTF9JRExFX0lNTSB8IEZCQ19DVExfQ1BVX0ZFTkNFOworCWZiY19j dGwyIHw9IHBsYW5lOworCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wyLCBmYmNfY3RsMik7CisJSTkx NV9XUklURShGQkNfRkVOQ0VfT0ZGLCBjcnRjLT55KTsKKworCS8qIGVuYWJsZSBpdC4uLiAqLwor CWZiY19jdGwgPSBGQkNfQ1RMX0VOIHwgRkJDX0NUTF9QRVJJT0RJQzsKKwlpZiAoSVNfSTk0NUdN KGRldikpCisJCWZiY19jdGwgfD0gRkJDX0NUTF9DM19JRExFOyAvKiA5NDUgbmVlZHMgc3BlY2lh bCBTUiBoYW5kbGluZyAqLworCWZiY19jdGwgfD0gKGNmYl9waXRjaCAmIDB4ZmYpIDw8IEZCQ19D VExfU1RSSURFX1NISUZUOworCWZiY19jdGwgfD0gKGludGVydmFsICYgMHgyZmZmKSA8PCBGQkNf Q1RMX0lOVEVSVkFMX1NISUZUOworCWZiY19jdGwgfD0gb2JqLT5mZW5jZV9yZWc7CisJSTkxNV9X UklURShGQkNfQ09OVFJPTCwgZmJjX2N0bCk7CisKKwlEUk1fREVCVUdfS01TKCJlbmFibGVkIEZC QywgcGl0Y2ggJWQsIHlvZmYgJWQsIHBsYW5lICVkLCAiLAorCQkgICAgICBjZmJfcGl0Y2gsIGNy dGMtPnksIGludGVsX2NydGMtPnBsYW5lKTsKK30KKworYm9vbCBpOHh4X2ZiY19lbmFibGVkKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXJldHVybiBJOTE1X1JFQUQoRkJDX0NPTlRST0wp ICYgRkJDX0NUTF9FTjsKK30KKwordm9pZCBnNHhfZW5hYmxlX2ZiYyhzdHJ1Y3QgZHJtX2NydGMg KmNydGMsIHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gY3J0Yy0+ZmI7CisJ c3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVy KGZiKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmItPm9iajsK KwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJ aW50IHBsYW5lID0gaW50ZWxfY3J0Yy0+cGxhbmUgPT0gMCA/IERQRkNfQ1RMX1BMQU5FQSA6IERQ RkNfQ1RMX1BMQU5FQjsKKwl1bnNpZ25lZCBsb25nIHN0YWxsX3dhdGVybWFyayA9IDIwMDsKKwl1 MzIgZHBmY19jdGw7CisKKwlkcGZjX2N0bCA9IHBsYW5lIHwgRFBGQ19TUl9FTiB8IERQRkNfQ1RM X0xJTUlUXzFYOworCWRwZmNfY3RsIHw9IERQRkNfQ1RMX0ZFTkNFX0VOIHwgb2JqLT5mZW5jZV9y ZWc7CisJSTkxNV9XUklURShEUEZDX0NISUNLRU4sIERQRkNfSFRfTU9ESUZZKTsKKworCUk5MTVf V1JJVEUoRFBGQ19SRUNPTVBfQ1RMLCBEUEZDX1JFQ09NUF9TVEFMTF9FTiB8CisJCSAgIChzdGFs bF93YXRlcm1hcmsgPDwgRFBGQ19SRUNPTVBfU1RBTExfV01fU0hJRlQpIHwKKwkJICAgKGludGVy dmFsIDw8IERQRkNfUkVDT01QX1RJTUVSX0NPVU5UX1NISUZUKSk7CisJSTkxNV9XUklURShEUEZD X0ZFTkNFX1lPRkYsIGNydGMtPnkpOworCisJLyogZW5hYmxlIGl0Li4uICovCisJSTkxNV9XUklU RShEUEZDX0NPTlRST0wsIEk5MTVfUkVBRChEUEZDX0NPTlRST0wpIHwgRFBGQ19DVExfRU4pOwor CisJRFJNX0RFQlVHX0tNUygiZW5hYmxlZCBmYmMgb24gcGxhbmUgJWRcbiIsIGludGVsX2NydGMt PnBsYW5lKTsKK30KKwordm9pZCBnNHhfZGlzYWJsZV9mYmMoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOworCXUzMiBkcGZjX2N0bDsKKworCS8qIERpc2FibGUgY29tcHJlc3Npb24gKi8KKwlkcGZj X2N0bCA9IEk5MTVfUkVBRChEUEZDX0NPTlRST0wpOworCWlmIChkcGZjX2N0bCAmIERQRkNfQ1RM X0VOKSB7CisJCWRwZmNfY3RsICY9IH5EUEZDX0NUTF9FTjsKKwkJSTkxNV9XUklURShEUEZDX0NP TlRST0wsIGRwZmNfY3RsKTsKKworCQlEUk1fREVCVUdfS01TKCJkaXNhYmxlZCBGQkNcbiIpOwor CX0KK30KKworYm9vbCBnNHhfZmJjX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwor CisJcmV0dXJuIEk5MTVfUkVBRChEUEZDX0NPTlRST0wpICYgRFBGQ19DVExfRU47Cit9CisKK3N0 YXRpYyB2b2lkIHNhbmR5YnJpZGdlX2JsaXRfZmJjX3VwZGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7CisJdTMyIGJsdF9lY29za3BkOworCisJLyogTWFrZSBzdXJlIGJsaXR0ZXIgbm90aWZp ZXMgRkJDIG9mIHdyaXRlcyAqLworCWdlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOwor CWJsdF9lY29za3BkID0gSTkxNV9SRUFEKEdFTjZfQkxJVFRFUl9FQ09TS1BEKTsKKwlibHRfZWNv c2twZCB8PSBHRU42X0JMSVRURVJfRkJDX05PVElGWSA8PAorCQlHRU42X0JMSVRURVJfTE9DS19T SElGVDsKKwlJOTE1X1dSSVRFKEdFTjZfQkxJVFRFUl9FQ09TS1BELCBibHRfZWNvc2twZCk7CisJ Ymx0X2Vjb3NrcGQgfD0gR0VONl9CTElUVEVSX0ZCQ19OT1RJRlk7CisJSTkxNV9XUklURShHRU42 X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQpOworCWJsdF9lY29za3BkICY9IH4oR0VONl9C TElUVEVSX0ZCQ19OT1RJRlkgPDwKKwkJCSBHRU42X0JMSVRURVJfTE9DS19TSElGVCk7CisJSTkx NV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQpOworCVBPU1RJTkdfUkVB RChHRU42X0JMSVRURVJfRUNPU0tQRCk7CisJZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChkZXZfcHJp dik7Cit9CisKK3ZvaWQgaXJvbmxha2VfZW5hYmxlX2ZiYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMs IHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNy dGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gY3J0Yy0+ZmI7CisJc3RydWN0 IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmItPm9iajsKKwlzdHJ1 Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IHBs YW5lID0gaW50ZWxfY3J0Yy0+cGxhbmUgPT0gMCA/IERQRkNfQ1RMX1BMQU5FQSA6IERQRkNfQ1RM X1BMQU5FQjsKKwl1bnNpZ25lZCBsb25nIHN0YWxsX3dhdGVybWFyayA9IDIwMDsKKwl1MzIgZHBm Y19jdGw7CisKKwlkcGZjX2N0bCA9IEk5MTVfUkVBRChJTEtfRFBGQ19DT05UUk9MKTsKKwlkcGZj X2N0bCAmPSBEUEZDX1JFU0VSVkVEOworCWRwZmNfY3RsIHw9IChwbGFuZSB8IERQRkNfQ1RMX0xJ TUlUXzFYKTsKKwkvKiBTZXQgcGVyc2lzdGVudCBtb2RlIGZvciBmcm9udC1idWZmZXIgcmVuZGVy aW5nLCBhbGEgWC4gKi8KKwlkcGZjX2N0bCB8PSBEUEZDX0NUTF9QRVJTSVNURU5UX01PREU7CisJ ZHBmY19jdGwgfD0gKERQRkNfQ1RMX0ZFTkNFX0VOIHwgb2JqLT5mZW5jZV9yZWcpOworCUk5MTVf V1JJVEUoSUxLX0RQRkNfQ0hJQ0tFTiwgRFBGQ19IVF9NT0RJRlkpOworCisJSTkxNV9XUklURShJ TEtfRFBGQ19SRUNPTVBfQ1RMLCBEUEZDX1JFQ09NUF9TVEFMTF9FTiB8CisJCSAgIChzdGFsbF93 YXRlcm1hcmsgPDwgRFBGQ19SRUNPTVBfU1RBTExfV01fU0hJRlQpIHwKKwkJICAgKGludGVydmFs IDw8IERQRkNfUkVDT01QX1RJTUVSX0NPVU5UX1NISUZUKSk7CisJSTkxNV9XUklURShJTEtfRFBG Q19GRU5DRV9ZT0ZGLCBjcnRjLT55KTsKKwlJOTE1X1dSSVRFKElMS19GQkNfUlRfQkFTRSwgb2Jq LT5ndHRfb2Zmc2V0IHwgSUxLX0ZCQ19SVF9WQUxJRCk7CisJLyogZW5hYmxlIGl0Li4uICovCisJ STkxNV9XUklURShJTEtfRFBGQ19DT05UUk9MLCBkcGZjX2N0bCB8IERQRkNfQ1RMX0VOKTsKKwor CWlmIChJU19HRU42KGRldikpIHsKKwkJSTkxNV9XUklURShTTkJfRFBGQ19DVExfU0EsCisJCQkg ICBTTkJfQ1BVX0ZFTkNFX0VOQUJMRSB8IG9iai0+ZmVuY2VfcmVnKTsKKwkJSTkxNV9XUklURShE UEZDX0NQVV9GRU5DRV9PRkZTRVQsIGNydGMtPnkpOworCQlzYW5keWJyaWRnZV9ibGl0X2ZiY191 cGRhdGUoZGV2KTsKKwl9CisKKwlEUk1fREVCVUdfS01TKCJlbmFibGVkIGZiYyBvbiBwbGFuZSAl ZFxuIiwgaW50ZWxfY3J0Yy0+cGxhbmUpOworfQorCit2b2lkIGlyb25sYWtlX2Rpc2FibGVfZmJj KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgZHBmY19jdGw7CisKKwkvKiBEaXNhYmxl IGNvbXByZXNzaW9uICovCisJZHBmY19jdGwgPSBJOTE1X1JFQUQoSUxLX0RQRkNfQ09OVFJPTCk7 CisJaWYgKGRwZmNfY3RsICYgRFBGQ19DVExfRU4pIHsKKwkJZHBmY19jdGwgJj0gfkRQRkNfQ1RM X0VOOworCQlJOTE1X1dSSVRFKElMS19EUEZDX0NPTlRST0wsIGRwZmNfY3RsKTsKKworCQlEUk1f REVCVUdfS01TKCJkaXNhYmxlZCBGQkNcbiIpOworCX0KK30KKworYm9vbCBpcm9ubGFrZV9mYmNf ZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlyZXR1cm4gSTkxNV9SRUFEKElM S19EUEZDX0NPTlRST0wpICYgRFBGQ19DVExfRU47Cit9CisKK2Jvb2wgaW50ZWxfZmJjX2VuYWJs ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS5m YmNfZW5hYmxlZCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIGRldl9wcml2LT5kaXNwbGF5 LmZiY19lbmFibGVkKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2ZiY193b3JrX2ZuKHN0 cnVjdCB3b3JrX3N0cnVjdCAqX193b3JrKQoreworCXN0cnVjdCBpbnRlbF9mYmNfd29yayAqd29y ayA9CisJCWNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsoX193b3JrKSwKKwkJCSAgICAgc3Ry dWN0IGludGVsX2ZiY193b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gd29y ay0+Y3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKHdv cmsgPT0gZGV2X3ByaXYtPmZiY193b3JrKSB7CisJCS8qIERvdWJsZSBjaGVjayB0aGF0IHdlIGhh dmVuJ3Qgc3dpdGNoZWQgZmIgd2l0aG91dCBjYW5jZWxsaW5nCisJCSAqIHRoZSBwcmlvciB3b3Jr LgorCQkgKi8KKwkJaWYgKHdvcmstPmNydGMtPmZiID09IHdvcmstPmZiKSB7CisJCQlkZXZfcHJp di0+ZGlzcGxheS5lbmFibGVfZmJjKHdvcmstPmNydGMsCisJCQkJCQkgICAgIHdvcmstPmludGVy dmFsKTsKKworCQkJZGV2X3ByaXYtPmNmYl9wbGFuZSA9IHRvX2ludGVsX2NydGMod29yay0+Y3J0 YyktPnBsYW5lOworCQkJZGV2X3ByaXYtPmNmYl9mYiA9IHdvcmstPmNydGMtPmZiLT5iYXNlLmlk OworCQkJZGV2X3ByaXYtPmNmYl95ID0gd29yay0+Y3J0Yy0+eTsKKwkJfQorCisJCWRldl9wcml2 LT5mYmNfd29yayA9IE5VTEw7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp OworCisJa2ZyZWUod29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2NhbmNlbF9mYmNfd29y ayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKGRldl9wcml2LT5m YmNfd29yayA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlEUk1fREVCVUdfS01TKCJjYW5jZWxsaW5n IHBlbmRpbmcgRkJDIGVuYWJsZVxuIik7CisKKwkvKiBTeW5jaHJvbmlzYXRpb24gaXMgcHJvdmlk ZWQgYnkgc3RydWN0X211dGV4IGFuZCBjaGVja2luZyBvZgorCSAqIGRldl9wcml2LT5mYmNfd29y aywgc28gd2UgY2FuIHBlcmZvcm0gdGhlIGNhbmNlbGxhdGlvbgorCSAqIGVudGlyZWx5IGFzeW5j aHJvbm91c2x5LgorCSAqLworCWlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+ZmJj X3dvcmstPndvcmspKQorCQkvKiB0YXNrbGV0IHdhcyBraWxsZWQgYmVmb3JlIGJlaW5nIHJ1biwg Y2xlYW4gdXAgKi8KKwkJa2ZyZWUoZGV2X3ByaXYtPmZiY193b3JrKTsKKworCS8qIE1hcmsgdGhl IHdvcmsgYXMgbm8gbG9uZ2VyIHdhbnRlZCBzbyB0aGF0IGlmIGl0IGRvZXMKKwkgKiB3YWtlLXVw IChiZWNhdXNlIHRoZSB3b3JrIHdhcyBhbHJlYWR5IHJ1bm5pbmcgYW5kIHdhaXRpbmcKKwkgKiBm b3Igb3VyIG11dGV4KSwgaXQgd2lsbCBkaXNjb3ZlciB0aGF0IGlzIG5vIGxvbmdlcgorCSAqIG5l Y2Vzc2FyeSB0byBydW4uCisJICovCisJZGV2X3ByaXYtPmZiY193b3JrID0gTlVMTDsKK30KKwor dm9pZCBpbnRlbF9lbmFibGVfZmJjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdW5zaWduZWQgbG9u ZyBpbnRlcnZhbCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZmJjX3dvcmsgKndvcms7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS5lbmFi bGVfZmJjKQorCQlyZXR1cm47CisKKwlpbnRlbF9jYW5jZWxfZmJjX3dvcmsoZGV2X3ByaXYpOwor CisJd29yayA9IGt6YWxsb2Moc2l6ZW9mICp3b3JrLCBHRlBfS0VSTkVMKTsKKwlpZiAod29yayA9 PSBOVUxMKSB7CisJCWRldl9wcml2LT5kaXNwbGF5LmVuYWJsZV9mYmMoY3J0YywgaW50ZXJ2YWwp OworCQlyZXR1cm47CisJfQorCisJd29yay0+Y3J0YyA9IGNydGM7CisJd29yay0+ZmIgPSBjcnRj LT5mYjsKKwl3b3JrLT5pbnRlcnZhbCA9IGludGVydmFsOworCUlOSVRfREVMQVlFRF9XT1JLKCZ3 b3JrLT53b3JrLCBpbnRlbF9mYmNfd29ya19mbik7CisKKwlkZXZfcHJpdi0+ZmJjX3dvcmsgPSB3 b3JrOworCisJRFJNX0RFQlVHX0tNUygic2NoZWR1bGluZyBkZWxheWVkIEZCQyBlbmFibGVcbiIp OworCisJLyogRGVsYXkgdGhlIGFjdHVhbCBlbmFibGluZyB0byBsZXQgcGFnZWZsaXBwaW5nIGNl YXNlIGFuZCB0aGUKKwkgKiBkaXNwbGF5IHRvIHNldHRsZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGNv bXByZXNzaW9uLiBOb3RlIHRoYXQKKwkgKiB0aGlzIGRlbGF5IGFsc28gc2VydmVzIGEgc2Vjb25k IHB1cnBvc2U6IGl0IGFsbG93cyBmb3IgYQorCSAqIHZibGFuayB0byBwYXNzIGFmdGVyIGRpc2Fi bGluZyB0aGUgRkJDIGJlZm9yZSB3ZSBhdHRlbXB0CisJICogdG8gbW9kaWZ5IHRoZSBjb250cm9s IHJlZ2lzdGVycy4KKwkgKgorCSAqIEEgbW9yZSBjb21wbGljYXRlZCBzb2x1dGlvbiB3b3VsZCBp bnZvbHZlIHRyYWNraW5nIHZibGFua3MKKwkgKiBmb2xsb3dpbmcgdGhlIHRlcm1pbmF0aW9uIG9m IHRoZSBwYWdlLWZsaXBwaW5nIHNlcXVlbmNlCisJICogYW5kIGluZGVlZCBwZXJmb3JtaW5nIHRo ZSBlbmFibGUgYXMgYSBjby1yb3V0aW5lIGFuZCBub3QKKwkgKiB3YWl0aW5nIHN5bmNocm9ub3Vz bHkgdXBvbiB0aGUgdmJsYW5rLgorCSAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd29yay0+ d29yaywgbXNlY3NfdG9famlmZmllcyg1MCkpOworfQorCit2b2lkIGludGVsX2Rpc2FibGVfZmJj KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWludGVsX2NhbmNlbF9mYmNfd29yayhkZXZf cHJpdik7CisKKwlpZiAoIWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjKQorCQlyZXR1cm47 CisKKwlkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYyhkZXYpOworCWRldl9wcml2LT5jZmJf cGxhbmUgPSAtMTsKK30KKworLyoqCisgKiBpbnRlbF91cGRhdGVfZmJjIC0gZW5hYmxlL2Rpc2Fi bGUgRkJDIGFzIG5lZWRlZAorICogQGRldjogdGhlIGRybV9kZXZpY2UKKyAqCisgKiBTZXQgdXAg dGhlIGZyYW1lYnVmZmVyIGNvbXByZXNzaW9uIGhhcmR3YXJlIGF0IG1vZGUgc2V0IHRpbWUuICBX ZQorICogZW5hYmxlIGl0IGlmIHBvc3NpYmxlOgorICogICAtIHBsYW5lIEEgb25seSAob24gcHJl LTk2NSkKKyAqICAgLSBubyBwaXhlbCBtdWxpdHBseS9saW5lIGR1cGxpY2F0aW9uCisgKiAgIC0g bm8gYWxwaGEgYnVmZmVyIGRpc2NhcmQKKyAqICAgLSBubyBkdWFsIHdpZGUKKyAqICAgLSBmcmFt ZWJ1ZmZlciA8PSAyMDQ4IGluIHdpZHRoLCAxNTM2IGluIGhlaWdodAorICoKKyAqIFdlIGNhbid0 IGFzc3VtZSB0aGF0IGFueSBjb21wcmVzc2lvbiB3aWxsIHRha2UgcGxhY2UgKHdvcnN0IGNhc2Up LAorICogc28gdGhlIGNvbXByZXNzZWQgYnVmZmVyIGhhcyB0byBiZSB0aGUgc2FtZSBzaXplIGFz IHRoZSB1bmNvbXByZXNzZWQKKyAqIG9uZS4gIEl0IGFsc28gbXVzdCByZXNpZGUgKGFsb25nIHdp dGggdGhlIGxpbmUgbGVuZ3RoIGJ1ZmZlcikgaW4KKyAqIHN0b2xlbiBtZW1vcnkuCisgKgorICog V2UgbmVlZCB0byBlbmFibGUvZGlzYWJsZSBGQkMgb24gYSBnbG9iYWwgYmFzaXMuCisgKi8KK3Zv aWQgaW50ZWxfdXBkYXRlX2ZiYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gTlVMTCwgKnRtcF9jcnRjOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCXN0cnVjdCBpbnRlbF9mcmFt ZWJ1ZmZlciAqaW50ZWxfZmI7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlp bnQgZW5hYmxlX2ZiYzsKKworCURSTV9ERUJVR19LTVMoIlxuIik7CisKKwlpZiAoIWk5MTVfcG93 ZXJzYXZlKQorCQlyZXR1cm47CisKKwlpZiAoIUk5MTVfSEFTX0ZCQyhkZXYpKQorCQlyZXR1cm47 CisKKwkvKgorCSAqIElmIEZCQyBpcyBhbHJlYWR5IG9uLCB3ZSBqdXN0IGhhdmUgdG8gdmVyaWZ5 IHRoYXQgd2UgY2FuCisJICoga2VlcCBpdCB0aGF0IHdheS4uLgorCSAqIE5lZWQgdG8gZGlzYWJs ZSBpZjoKKwkgKiAgIC0gbW9yZSB0aGFuIG9uZSBwaXBlIGlzIGFjdGl2ZQorCSAqICAgLSBjaGFu Z2luZyBGQkMgcGFyYW1zIChzdHJpZGUsIGZlbmNlLCBtb2RlKQorCSAqICAgLSBuZXcgZmIgaXMg dG9vIGxhcmdlIHRvIGZpdCBpbiBjb21wcmVzc2VkIGJ1ZmZlcgorCSAqICAgLSBnb2luZyB0byBh biB1bnN1cHBvcnRlZCBjb25maWcgKGludGVybGFjZSwgcGl4ZWwgbXVsdGlwbHksIGV0Yy4pCisJ ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0 Y19saXN0LCBoZWFkKSB7CisJCWlmICh0bXBfY3J0Yy0+ZW5hYmxlZCAmJiB0bXBfY3J0Yy0+ZmIp IHsKKwkJCWlmIChjcnRjKSB7CisJCQkJRFJNX0RFQlVHX0tNUygibW9yZSB0aGFuIG9uZSBwaXBl IGFjdGl2ZSwgZGlzYWJsaW5nIGNvbXByZXNzaW9uXG4iKTsKKwkJCQlkZXZfcHJpdi0+bm9fZmJj X3JlYXNvbiA9IEZCQ19NVUxUSVBMRV9QSVBFUzsKKwkJCQlnb3RvIG91dF9kaXNhYmxlOworCQkJ fQorCQkJY3J0YyA9IHRtcF9jcnRjOworCQl9CisJfQorCisJaWYgKCFjcnRjIHx8IGNydGMtPmZi ID09IE5VTEwpIHsKKwkJRFJNX0RFQlVHX0tNUygibm8gb3V0cHV0LCBkaXNhYmxpbmdcbiIpOwor CQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19OT19PVVRQVVQ7CisJCWdvdG8gb3V0X2Rp c2FibGU7CisJfQorCisJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJZmIgPSBj cnRjLT5mYjsKKwlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKKwlvYmogPSBp bnRlbF9mYi0+b2JqOworCisJZW5hYmxlX2ZiYyA9IGk5MTVfZW5hYmxlX2ZiYzsKKwlpZiAoZW5h YmxlX2ZiYyA8IDApIHsKKwkJRFJNX0RFQlVHX0tNUygiZmJjIHNldCB0byBwZXItY2hpcCBkZWZh dWx0XG4iKTsKKwkJZW5hYmxlX2ZiYyA9IDE7CisJCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8 PSA2KQorCQkJZW5hYmxlX2ZiYyA9IDA7CisJfQorCWlmICghZW5hYmxlX2ZiYykgeworCQlEUk1f REVCVUdfS01TKCJmYmMgZGlzYWJsZWQgcGVyIG1vZHVsZSBwYXJhbVxuIik7CisJCWRldl9wcml2 LT5ub19mYmNfcmVhc29uID0gRkJDX01PRFVMRV9QQVJBTTsKKwkJZ290byBvdXRfZGlzYWJsZTsK Kwl9CisJaWYgKGludGVsX2ZiLT5vYmotPmJhc2Uuc2l6ZSA+IGRldl9wcml2LT5jZmJfc2l6ZSkg eworCQlEUk1fREVCVUdfS01TKCJmcmFtZWJ1ZmZlciB0b28gbGFyZ2UsIGRpc2FibGluZyAiCisJ CQkgICAgICAiY29tcHJlc3Npb25cbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZC Q19TVE9MRU5fVE9PX1NNQUxMOworCQlnb3RvIG91dF9kaXNhYmxlOworCX0KKwlpZiAoKGNydGMt Pm1vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkgfHwKKwkgICAgKGNydGMtPm1v ZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pKSB7CisJCURSTV9ERUJVR19LTVMoIm1v ZGUgaW5jb21wYXRpYmxlIHdpdGggY29tcHJlc3Npb24sICIKKwkJCSAgICAgICJkaXNhYmxpbmdc biIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19VTlNVUFBPUlRFRF9NT0RFOwor CQlnb3RvIG91dF9kaXNhYmxlOworCX0KKwlpZiAoKGNydGMtPm1vZGUuaGRpc3BsYXkgPiAyMDQ4 KSB8fAorCSAgICAoY3J0Yy0+bW9kZS52ZGlzcGxheSA+IDE1MzYpKSB7CisJCURSTV9ERUJVR19L TVMoIm1vZGUgdG9vIGxhcmdlIGZvciBjb21wcmVzc2lvbiwgZGlzYWJsaW5nXG4iKTsKKwkJZGV2 X3ByaXYtPm5vX2ZiY19yZWFzb24gPSBGQkNfTU9ERV9UT09fTEFSR0U7CisJCWdvdG8gb3V0X2Rp c2FibGU7CisJfQorCWlmICgoSVNfSTkxNUdNKGRldikgfHwgSVNfSTk0NUdNKGRldikpICYmIGlu dGVsX2NydGMtPnBsYW5lICE9IDApIHsKKwkJRFJNX0RFQlVHX0tNUygicGxhbmUgbm90IDAsIGRp c2FibGluZyBjb21wcmVzc2lvblxuIik7CisJCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJD X0JBRF9QTEFORTsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisKKwkvKiBUaGUgdXNlIG9mIGEg Q1BVIGZlbmNlIGlzIG1hbmRhdG9yeSBpbiBvcmRlciB0byBkZXRlY3Qgd3JpdGVzCisJICogYnkg dGhlIENQVSB0byB0aGUgc2Nhbm91dCBhbmQgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBGQkMuCisJ ICovCisJaWYgKG9iai0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfWCB8fAorCSAgICBvYmot PmZlbmNlX3JlZyA9PSBJOTE1X0ZFTkNFX1JFR19OT05FKSB7CisJCURSTV9ERUJVR19LTVMoImZy YW1lYnVmZmVyIG5vdCB0aWxlZCBvciBmZW5jZWQsIGRpc2FibGluZyBjb21wcmVzc2lvblxuIik7 CisJCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJDX05PVF9USUxFRDsKKwkJZ290byBvdXRf ZGlzYWJsZTsKKwl9CisKKwkvKiBJZiB0aGUga2VybmVsIGRlYnVnZ2VyIGlzIGFjdGl2ZSwgYWx3 YXlzIGRpc2FibGUgY29tcHJlc3Npb24gKi8KKwlpZiAoaW5fZGJnX21hc3RlcigpKQorCQlnb3Rv IG91dF9kaXNhYmxlOworCisJLyogSWYgdGhlIHNjYW5vdXQgaGFzIG5vdCBjaGFuZ2VkLCBkb24n dCBtb2RpZnkgdGhlIEZCQyBzZXR0aW5ncy4KKwkgKiBOb3RlIHRoYXQgd2UgbWFrZSB0aGUgZnVu ZGFtZW50YWwgYXNzdW1wdGlvbiB0aGF0IHRoZSBmYi0+b2JqCisJICogY2Fubm90IGJlIHVucGlu bmVkIChhbmQgaGF2ZSBpdHMgR1RUIG9mZnNldCBhbmQgZmVuY2UgcmV2b2tlZCkKKwkgKiB3aXRo b3V0IGZpcnN0IGJlaW5nIGRlY291cGxlZCBmcm9tIHRoZSBzY2Fub3V0IGFuZCBGQkMgZGlzYWJs ZWQuCisJICovCisJaWYgKGRldl9wcml2LT5jZmJfcGxhbmUgPT0gaW50ZWxfY3J0Yy0+cGxhbmUg JiYKKwkgICAgZGV2X3ByaXYtPmNmYl9mYiA9PSBmYi0+YmFzZS5pZCAmJgorCSAgICBkZXZfcHJp di0+Y2ZiX3kgPT0gY3J0Yy0+eSkKKwkJcmV0dXJuOworCisJaWYgKGludGVsX2ZiY19lbmFibGVk KGRldikpIHsKKwkJLyogV2UgdXBkYXRlIEZCQyBhbG9uZyB0d28gcGF0aHMsIGFmdGVyIGNoYW5n aW5nIGZiL2NydGMKKwkJICogY29uZmlndXJhdGlvbiAobW9kZXN3aXRjaGluZykgYW5kIGFmdGVy IHBhZ2UtZmxpcHBpbmcKKwkJICogZmluaXNoZXMuIEZvciB0aGUgbGF0dGVyLCB3ZSBrbm93IHRo YXQgbm90IG9ubHkgZGlkCisJCSAqIHdlIGRpc2FibGUgdGhlIEZCQyBhdCB0aGUgc3RhcnQgb2Yg dGhlIHBhZ2UtZmxpcAorCQkgKiBzZXF1ZW5jZSwgYnV0IGFsc28gbW9yZSB0aGFuIG9uZSB2Ymxh bmsgaGFzIHBhc3NlZC4KKwkJICoKKwkJICogRm9yIHRoZSBmb3JtZXIgY2FzZSBvZiBtb2Rlc3dp dGNoaW5nLCBpdCBpcyBwb3NzaWJsZQorCQkgKiB0byBzd2l0Y2ggYmV0d2VlbiB0d28gRkJDIHZh bGlkIGNvbmZpZ3VyYXRpb25zCisJCSAqIGluc3RhbnRhbmVvdXNseSBzbyB3ZSBkbyBuZWVkIHRv IGRpc2FibGUgdGhlIEZCQworCQkgKiBiZWZvcmUgd2UgY2FuIG1vZGlmeSBpdHMgY29udHJvbCBy ZWdpc3RlcnMuIFdlIGFsc28KKwkJICogaGF2ZSB0byB3YWl0IGZvciB0aGUgbmV4dCB2Ymxhbmsg Zm9yIHRoYXQgdG8gdGFrZQorCQkgKiBlZmZlY3QuIEhvd2V2ZXIsIHNpbmNlIHdlIGRlbGF5IGVu YWJsaW5nIEZCQyB3ZSBjYW4KKwkJICogYXNzdW1lIHRoYXQgYSB2YmxhbmsgaGFzIHBhc3NlZCBz aW5jZSBkaXNhYmxpbmcgYW5kCisJCSAqIHRoYXQgd2UgY2FuIHNhZmVseSBhbHRlciB0aGUgcmVn aXN0ZXJzIGluIHRoZSBkZWZlcnJlZAorCQkgKiBjYWxsYmFjay4KKwkJICoKKwkJICogSW4gdGhl IHNjZW5hcmlvIHRoYXQgd2UgZ28gZnJvbSBhIHZhbGlkIHRvIGludmFsaWQKKwkJICogYW5kIHRo ZW4gYmFjayB0byB2YWxpZCBGQkMgY29uZmlndXJhdGlvbiB3ZSBoYXZlCisJCSAqIG5vIHN0cmlj dCBlbmZvcmNlbWVudCB0aGF0IGEgdmJsYW5rIG9jY3VycmVkIHNpbmNlCisJCSAqIGRpc2FibGlu ZyB0aGUgRkJDLiBIb3dldmVyLCBhbG9uZyBhbGwgY3VycmVudCBwaXBlCisJCSAqIGRpc2FibGlu ZyBwYXRocyB3ZSBkbyBuZWVkIHRvIHdhaXQgZm9yIGEgdmJsYW5rIGF0CisJCSAqIHNvbWUgcG9p bnQuIEFuZCB3ZSB3YWl0IGJlZm9yZSBlbmFibGluZyBGQkMgYW55d2F5LgorCQkgKi8KKwkJRFJN X0RFQlVHX0tNUygiZGlzYWJsaW5nIGFjdGl2ZSBGQkMgZm9yIHVwZGF0ZVxuIik7CisJCWludGVs X2Rpc2FibGVfZmJjKGRldik7CisJfQorCisJaW50ZWxfZW5hYmxlX2ZiYyhjcnRjLCA1MDApOwor CXJldHVybjsKKworb3V0X2Rpc2FibGU6CisJLyogTXVsdGlwbGUgZGlzYWJsZXMgc2hvdWxkIGJl IGhhcm1sZXNzICovCisJaWYgKGludGVsX2ZiY19lbmFibGVkKGRldikpIHsKKwkJRFJNX0RFQlVH X0tNUygidW5zdXBwb3J0ZWQgY29uZmlnLCBkaXNhYmxpbmcgRkJDXG4iKTsKKwkJaW50ZWxfZGlz YWJsZV9mYmMoZGV2KTsKKwl9Cit9CisKLS0gCjEuNy4xMAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK