From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: [PATCH 1/4] drm/i915: extract intel_eld.c from intel_display.c Date: Wed, 9 Apr 2014 18:44:30 -0300 Message-ID: <1397079873-18257-2-git-send-email-przanoni@gmail.com> References: <1397079873-18257-1-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yh0-f50.google.com (mail-yh0-f50.google.com [209.85.213.50]) by gabe.freedesktop.org (Postfix) with ESMTP id 0F50C6E479 for ; Wed, 9 Apr 2014 14:44:51 -0700 (PDT) Received: by mail-yh0-f50.google.com with SMTP id c41so3060668yho.9 for ; Wed, 09 Apr 2014 14:44:51 -0700 (PDT) In-Reply-To: <1397079873-18257-1-git-send-email-przanoni@gmail.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: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CgpTaW5jZSBpbnRl bF9kaXNwbGF5LmMgaXMgd2F5IHRvbyBiaWcgZm9yIG91ciBsaXR0bGUgaGVhZHMuCgpTaWduZWQt b2ZmLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgMzIyICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICB8ICAgOSArLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZWxkLmMgICAgIHwgMzU1ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDM2NiBpbnNlcnRpb25zKCspLCAzMjEg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZWxkLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGIxNDQ1YjcuLjFlYzAzMTcgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCkBAIC0zNSw2ICszNSw3IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJz ZXIubyBcCiAjIG1vZGVzZXR0aW5nIGNvcmUgY29kZQogaTkxNS15ICs9IGludGVsX2Jpb3MubyBc CiAJICBpbnRlbF9kaXNwbGF5Lm8gXAorCSAgaW50ZWxfZWxkLm8gXAogCSAgaW50ZWxfbW9kZXMu byBcCiAJICBpbnRlbF9vdmVybGF5Lm8gXAogCSAgaW50ZWxfc2lkZWJhbmQubyBcCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggMWFmMWQxNC4uOTE3NWNmYyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMzQxLDcgKzM0MSw3IEBAIHN0YXRpYyB2b2lk IHZsdl9jbG9jayhpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpjbG9jaykKIC8qKgogICogUmV0 dXJucyB3aGV0aGVyIGFueSBvdXRwdXQgb24gdGhlIHNwZWNpZmllZCBwaXBlIGlzIG9mIHRoZSBz cGVjaWZpZWQgdHlwZQogICovCi1zdGF0aWMgYm9vbCBpbnRlbF9waXBlX2hhc190eXBlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywgaW50IHR5cGUpCitib29sIGludGVsX3BpcGVfaGFzX3R5cGUoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwpAQCAtNzI0NSwz MTcgKzcyNDUsNiBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9j cnRjICpjcnRjLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQgY2xvY2s7 Ci0JdTMyIGNvbmZpZzsKLX0gaGRtaV9hdWRpb19jbG9ja1tdID0gewotCXsgRElWX1JPVU5EX1VQ KDI1MjAwICogMTAwMCwgMTAwMSksIEFVRF9DT05GSUdfUElYRUxfQ0xPQ0tfSERNSV8yNTE3NSB9 LAotCXsgMjUyMDAsIEFVRF9DT05GSUdfUElYRUxfQ0xPQ0tfSERNSV8yNTIwMCB9LCAvKiBkZWZh dWx0IHBlciBic3BlYyAqLwotCXsgMjcwMDAsIEFVRF9DT05GSUdfUElYRUxfQ0xPQ0tfSERNSV8y NzAwMCB9LAotCXsgMjcwMDAgKiAxMDAxIC8gMTAwMCwgQVVEX0NPTkZJR19QSVhFTF9DTE9DS19I RE1JXzI3MDI3IH0sCi0JeyA1NDAwMCwgQVVEX0NPTkZJR19QSVhFTF9DTE9DS19IRE1JXzU0MDAw IH0sCi0JeyA1NDAwMCAqIDEwMDEgLyAxMDAwLCBBVURfQ09ORklHX1BJWEVMX0NMT0NLX0hETUlf NTQwNTQgfSwKLQl7IERJVl9ST1VORF9VUCg3NDI1MCAqIDEwMDAsIDEwMDEpLCBBVURfQ09ORklH X1BJWEVMX0NMT0NLX0hETUlfNzQxNzYgfSwKLQl7IDc0MjUwLCBBVURfQ09ORklHX1BJWEVMX0NM T0NLX0hETUlfNzQyNTAgfSwKLQl7IERJVl9ST1VORF9VUCgxNDg1MDAgKiAxMDAwLCAxMDAxKSwg QVVEX0NPTkZJR19QSVhFTF9DTE9DS19IRE1JXzE0ODM1MiB9LAotCXsgMTQ4NTAwLCBBVURfQ09O RklHX1BJWEVMX0NMT0NLX0hETUlfMTQ4NTAwIH0sCi19OwotCi0vKiBnZXQgQVVEX0NPTkZJR19Q SVhFTF9DTE9DS19IRE1JXyogdmFsdWUgZm9yIG1vZGUgKi8KLXN0YXRpYyB1MzIgYXVkaW9fY29u ZmlnX2hkbWlfcGl4ZWxfY2xvY2soc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0J aW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZG1pX2F1ZGlvX2Nsb2NrKTsg aSsrKSB7Ci0JCWlmIChtb2RlLT5jbG9jayA9PSBoZG1pX2F1ZGlvX2Nsb2NrW2ldLmNsb2NrKQot CQkJYnJlYWs7Ci0JfQotCi0JaWYgKGkgPT0gQVJSQVlfU0laRShoZG1pX2F1ZGlvX2Nsb2NrKSkg ewotCQlEUk1fREVCVUdfS01TKCJIRE1JIGF1ZGlvIHBpeGVsIGNsb2NrIHNldHRpbmcgZm9yICVk IG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzXG4iLCBtb2RlLT5jbG9jayk7Ci0J CWkgPSAxOwotCX0KLQotCURSTV9ERUJVR19LTVMoIkNvbmZpZ3VyaW5nIEhETUkgYXVkaW8gZm9y IHBpeGVsIGNsb2NrICVkICgweCUwOHgpXG4iLAotCQkgICAgICBoZG1pX2F1ZGlvX2Nsb2NrW2ld LmNsb2NrLAotCQkgICAgICBoZG1pX2F1ZGlvX2Nsb2NrW2ldLmNvbmZpZyk7Ci0KLQlyZXR1cm4g aGRtaV9hdWRpb19jbG9ja1tpXS5jb25maWc7Ci19Ci0KLXN0YXRpYyBib29sIGludGVsX2VsZF91 cHRvZGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJICAgICAgIGludCBy ZWdfZWxkdiwgdWludDMyX3QgYml0c19lbGR2LAotCQkJICAgICAgIGludCByZWdfZWxkYSwgdWlu dDMyX3QgYml0c19lbGRhLAotCQkJICAgICAgIGludCByZWdfZWRpZCkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7Ci0J dWludDhfdCAqZWxkID0gY29ubmVjdG9yLT5lbGQ7Ci0JdWludDMyX3QgaTsKLQotCWkgPSBJOTE1 X1JFQUQocmVnX2VsZHYpOwotCWkgJj0gYml0c19lbGR2OwotCi0JaWYgKCFlbGRbMF0pCi0JCXJl dHVybiAhaTsKLQotCWlmICghaSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaSA9IEk5MTVfUkVBRChy ZWdfZWxkYSk7Ci0JaSAmPSB+Yml0c19lbGRhOwotCUk5MTVfV1JJVEUocmVnX2VsZGEsIGkpOwot Ci0JZm9yIChpID0gMDsgaSA8IGVsZFsyXTsgaSsrKQotCQlpZiAoSTkxNV9SRUFEKHJlZ19lZGlk KSAhPSAqKCh1aW50MzJfdCAqKWVsZCArIGkpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJu IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGc0eF93cml0ZV9lbGQoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKLQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7Ci0JdWludDhfdCAqZWxkID0gY29u bmVjdG9yLT5lbGQ7Ci0JdWludDMyX3QgZWxkdjsKLQl1aW50MzJfdCBsZW47Ci0JdWludDMyX3Qg aTsKLQotCWkgPSBJOTE1X1JFQUQoRzRYX0FVRF9WSURfRElEKTsKLQotCWlmIChpID09IElOVEVM X0FVRElPX0RFVkJMQyB8fCBpID09IElOVEVMX0FVRElPX0RFVkNMKQotCQllbGR2ID0gRzRYX0VM RFZfREVWQ0xfREVWQkxDOwotCWVsc2UKLQkJZWxkdiA9IEc0WF9FTERWX0RFVkNURzsKLQotCWlm IChpbnRlbF9lbGRfdXB0b2RhdGUoY29ubmVjdG9yLAotCQkJICAgICAgIEc0WF9BVURfQ05UTF9T VCwgZWxkdiwKLQkJCSAgICAgICBHNFhfQVVEX0NOVExfU1QsIEc0WF9FTERfQUREUiwKLQkJCSAg ICAgICBHNFhfSERNSVdfSERNSUVESUQpKQotCQlyZXR1cm47Ci0KLQlpID0gSTkxNV9SRUFEKEc0 WF9BVURfQ05UTF9TVCk7Ci0JaSAmPSB+KGVsZHYgfCBHNFhfRUxEX0FERFIpOwotCWxlbiA9IChp ID4+IDkpICYgMHgxZjsJCS8qIEVMRCBidWZmZXIgc2l6ZSAqLwotCUk5MTVfV1JJVEUoRzRYX0FV RF9DTlRMX1NULCBpKTsKLQotCWlmICghZWxkWzBdKQotCQlyZXR1cm47Ci0KLQlsZW4gPSBtaW5f dCh1aW50OF90LCBlbGRbMl0sIGxlbik7Ci0JRFJNX0RFQlVHX0RSSVZFUigiRUxEIHNpemUgJWRc biIsIGxlbik7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQlJOTE1X1dSSVRFKEc0WF9I RE1JV19IRE1JRURJRCwgKigodWludDMyX3QgKillbGQgKyBpKSk7Ci0KLQlpID0gSTkxNV9SRUFE KEc0WF9BVURfQ05UTF9TVCk7Ci0JaSB8PSBlbGR2OwotCUk5MTVfV1JJVEUoRzRYX0FVRF9DTlRM X1NULCBpKTsKLX0KLQotc3RhdGljIHZvaWQgaGFzd2VsbF93cml0ZV9lbGQoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKLQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJ CSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQotewotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGNvbm5lY3Rvci0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50 OF90ICplbGQgPSBjb25uZWN0b3ItPmVsZDsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2OwotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhj cnRjKTsKLQl1aW50MzJfdCBlbGR2OwotCXVpbnQzMl90IGk7Ci0JaW50IGxlbjsKLQlpbnQgcGlw ZSA9IHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGU7Ci0JaW50IHRtcDsKLQotCWludCBoZG1pd19o ZG1pZWRpZCA9IEhTV19BVURfRURJRF9EQVRBKHBpcGUpOwotCWludCBhdWRfY250bF9zdCA9IEhT V19BVURfRElQX0VMRF9DVFJMKHBpcGUpOwotCWludCBhdWRfY29uZmlnID0gSFNXX0FVRF9DRkco cGlwZSk7Ci0JaW50IGF1ZF9jbnRybF9zdDIgPSBIU1dfQVVEX1BJTl9FTERfQ1BfVkxEOwotCi0J LyogQXVkaW8gb3V0cHV0IGVuYWJsZSAqLwotCURSTV9ERUJVR19EUklWRVIoIkhETUkgYXVkaW86 IGVuYWJsZSBjb2RlY1xuIik7Ci0JdG1wID0gSTkxNV9SRUFEKGF1ZF9jbnRybF9zdDIpOwotCXRt cCB8PSAoQVVESU9fT1VUUFVUX0VOQUJMRV9BIDw8IChwaXBlICogNCkpOwotCUk5MTVfV1JJVEUo YXVkX2NudHJsX3N0MiwgdG1wKTsKLQotCS8qIFdhaXQgZm9yIDEgdmVydGljYWwgYmxhbmsgKi8K LQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBwaXBlKTsKLQotCS8qIFNldCBFTEQgdmFsaWQg c3RhdGUgKi8KLQl0bXAgPSBJOTE1X1JFQUQoYXVkX2NudHJsX3N0Mik7Ci0JRFJNX0RFQlVHX0RS SVZFUigiSERNSSBhdWRpbzogcGluIGVsZCB2bGQgc3RhdHVzPTB4JTA4eFxuIiwgdG1wKTsKLQl0 bXAgfD0gKEFVRElPX0VMRF9WQUxJRF9BIDw8IChwaXBlICogNCkpOwotCUk5MTVfV1JJVEUoYXVk X2NudHJsX3N0MiwgdG1wKTsKLQl0bXAgPSBJOTE1X1JFQUQoYXVkX2NudHJsX3N0Mik7Ci0JRFJN X0RFQlVHX0RSSVZFUigiSERNSSBhdWRpbzogZWxkIHZsZCBzdGF0dXM9MHglMDh4XG4iLCB0bXAp OwotCi0JLyogRW5hYmxlIEhETUkgbW9kZSAqLwotCXRtcCA9IEk5MTVfUkVBRChhdWRfY29uZmln KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJIRE1JIGF1ZGlvOiBhdWRpbyBjb25mOiAweCUwOHhcbiIs IHRtcCk7Ci0JLyogY2xlYXIgTl9wcm9ncmFtaW5nX2VuYWJsZSBhbmQgTl92YWx1ZV9pbmRleCAq LwotCXRtcCAmPSB+KEFVRF9DT05GSUdfTl9WQUxVRV9JTkRFWCB8IEFVRF9DT05GSUdfTl9QUk9H X0VOQUJMRSk7Ci0JSTkxNV9XUklURShhdWRfY29uZmlnLCB0bXApOwotCi0JRFJNX0RFQlVHX0RS SVZFUigiRUxEIG9uIHBpcGUgJWNcbiIsIHBpcGVfbmFtZShwaXBlKSk7Ci0KLQllbGR2ID0gQVVE SU9fRUxEX1ZBTElEX0EgPDwgKHBpcGUgKiA0KTsKLQlpbnRlbF9jcnRjLT5lbGRfdmxkID0gdHJ1 ZTsKLQotCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9ESVNQTEFZ UE9SVCkpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiRUxEOiBEaXNwbGF5UG9ydCBkZXRlY3RlZFxu Iik7Ci0JCWVsZFs1XSB8PSAoMSA8PCAyKTsJLyogQ29ubl9UeXBlLCAweDEgPSBEaXNwbGF5UG9y dCAqLwotCQlJOTE1X1dSSVRFKGF1ZF9jb25maWcsIEFVRF9DT05GSUdfTl9WQUxVRV9JTkRFWCk7 IC8qIDB4MSA9IERQICovCi0JfSBlbHNlIHsKLQkJSTkxNV9XUklURShhdWRfY29uZmlnLCBhdWRp b19jb25maWdfaGRtaV9waXhlbF9jbG9jayhtb2RlKSk7Ci0JfQotCi0JaWYgKGludGVsX2VsZF91 cHRvZGF0ZShjb25uZWN0b3IsCi0JCQkgICAgICAgYXVkX2NudHJsX3N0MiwgZWxkdiwKLQkJCSAg ICAgICBhdWRfY250bF9zdCwgSUJYX0VMRF9BRERSRVNTLAotCQkJICAgICAgIGhkbWl3X2hkbWll ZGlkKSkKLQkJcmV0dXJuOwotCi0JaSA9IEk5MTVfUkVBRChhdWRfY250cmxfc3QyKTsKLQlpICY9 IH5lbGR2OwotCUk5MTVfV1JJVEUoYXVkX2NudHJsX3N0MiwgaSk7Ci0KLQlpZiAoIWVsZFswXSkK LQkJcmV0dXJuOwotCi0JaSA9IEk5MTVfUkVBRChhdWRfY250bF9zdCk7Ci0JaSAmPSB+SUJYX0VM RF9BRERSRVNTOwotCUk5MTVfV1JJVEUoYXVkX2NudGxfc3QsIGkpOwotCWkgPSAoaSA+PiAyOSkg JiBESVBfUE9SVF9TRUxfTUFTSzsJCS8qIERJUF9Qb3J0X1NlbGVjdCwgMHgxID0gUG9ydEIgKi8K LQlEUk1fREVCVUdfRFJJVkVSKCJwb3J0IG51bTolZFxuIiwgaSk7Ci0KLQlsZW4gPSBtaW5fdCh1 aW50OF90LCBlbGRbMl0sIDIxKTsJLyogODQgYnl0ZXMgb2YgaHcgRUxEIGJ1ZmZlciAqLwotCURS TV9ERUJVR19EUklWRVIoIkVMRCBzaXplICVkXG4iLCBsZW4pOwotCWZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykKLQkJSTkxNV9XUklURShoZG1pd19oZG1pZWRpZCwgKigodWludDMyX3QgKillbGQg KyBpKSk7Ci0KLQlpID0gSTkxNV9SRUFEKGF1ZF9jbnRybF9zdDIpOwotCWkgfD0gZWxkdjsKLQlJ OTE1X1dSSVRFKGF1ZF9jbnRybF9zdDIsIGkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIGlyb25sYWtl X3dyaXRlX2VsZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJICAgICAgIHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjb25uZWN0b3It PmRldi0+ZGV2X3ByaXZhdGU7Ci0JdWludDhfdCAqZWxkID0gY29ubmVjdG9yLT5lbGQ7Ci0JdWlu dDMyX3QgZWxkdjsKLQl1aW50MzJfdCBpOwotCWludCBsZW47Ci0JaW50IGhkbWl3X2hkbWllZGlk OwotCWludCBhdWRfY29uZmlnOwotCWludCBhdWRfY250bF9zdDsKLQlpbnQgYXVkX2NudHJsX3N0 MjsKLQlpbnQgcGlwZSA9IHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGU7Ci0KLQlpZiAoSEFTX1BD SF9JQlgoY29ubmVjdG9yLT5kZXYpKSB7Ci0JCWhkbWl3X2hkbWllZGlkID0gSUJYX0hETUlXX0hE TUlFRElEKHBpcGUpOwotCQlhdWRfY29uZmlnID0gSUJYX0FVRF9DRkcocGlwZSk7Ci0JCWF1ZF9j bnRsX3N0ID0gSUJYX0FVRF9DTlRMX1NUKHBpcGUpOwotCQlhdWRfY250cmxfc3QyID0gSUJYX0FV RF9DTlRMX1NUMjsKLQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoY29ubmVjdG9yLT5kZXYpKSB7 Ci0JCWhkbWl3X2hkbWllZGlkID0gVkxWX0hETUlXX0hETUlFRElEKHBpcGUpOwotCQlhdWRfY29u ZmlnID0gVkxWX0FVRF9DRkcocGlwZSk7Ci0JCWF1ZF9jbnRsX3N0ID0gVkxWX0FVRF9DTlRMX1NU KHBpcGUpOwotCQlhdWRfY250cmxfc3QyID0gVkxWX0FVRF9DTlRMX1NUMjsKLQl9IGVsc2Ugewot CQloZG1pd19oZG1pZWRpZCA9IENQVF9IRE1JV19IRE1JRURJRChwaXBlKTsKLQkJYXVkX2NvbmZp ZyA9IENQVF9BVURfQ0ZHKHBpcGUpOwotCQlhdWRfY250bF9zdCA9IENQVF9BVURfQ05UTF9TVChw aXBlKTsKLQkJYXVkX2NudHJsX3N0MiA9IENQVF9BVURfQ05UUkxfU1QyOwotCX0KLQotCURSTV9E RUJVR19EUklWRVIoIkVMRCBvbiBwaXBlICVjXG4iLCBwaXBlX25hbWUocGlwZSkpOwotCi0JaWYg KElTX1ZBTExFWVZJRVcoY29ubmVjdG9yLT5kZXYpKSAgewotCQlzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqaW50ZWxfZW5jb2RlcjsKLQkJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGln X3BvcnQ7Ci0KLQkJaW50ZWxfZW5jb2RlciA9IGludGVsX2F0dGFjaGVkX2VuY29kZXIoY29ubmVj dG9yKTsKLQkJaW50ZWxfZGlnX3BvcnQgPSBlbmNfdG9fZGlnX3BvcnQoJmludGVsX2VuY29kZXIt PmJhc2UpOwotCQlpID0gaW50ZWxfZGlnX3BvcnQtPnBvcnQ7Ci0JfSBlbHNlIHsKLQkJaSA9IEk5 MTVfUkVBRChhdWRfY250bF9zdCk7Ci0JCWkgPSAoaSA+PiAyOSkgJiBESVBfUE9SVF9TRUxfTUFT SzsKLQkJLyogRElQX1BvcnRfU2VsZWN0LCAweDEgPSBQb3J0QiAqLwotCX0KLQotCWlmICghaSkg ewotCQlEUk1fREVCVUdfRFJJVkVSKCJBdWRpbyBkaXJlY3RlZCB0byB1bmtub3duIHBvcnRcbiIp OwotCQkvKiBvcGVyYXRlIGJsaW5kbHkgb24gYWxsIHBvcnRzICovCi0JCWVsZHYgPSBJQlhfRUxE X1ZBTElEQjsKLQkJZWxkdiB8PSBJQlhfRUxEX1ZBTElEQiA8PCA0OwotCQllbGR2IHw9IElCWF9F TERfVkFMSURCIDw8IDg7Ci0JfSBlbHNlIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiRUxEIG9uIHBv cnQgJWNcbiIsIHBvcnRfbmFtZShpKSk7Ci0JCWVsZHYgPSBJQlhfRUxEX1ZBTElEQiA8PCAoKGkg LSAxKSAqIDQpOwotCX0KLQotCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09V VFBVVF9ESVNQTEFZUE9SVCkpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiRUxEOiBEaXNwbGF5UG9y dCBkZXRlY3RlZFxuIik7Ci0JCWVsZFs1XSB8PSAoMSA8PCAyKTsJLyogQ29ubl9UeXBlLCAweDEg PSBEaXNwbGF5UG9ydCAqLwotCQlJOTE1X1dSSVRFKGF1ZF9jb25maWcsIEFVRF9DT05GSUdfTl9W QUxVRV9JTkRFWCk7IC8qIDB4MSA9IERQICovCi0JfSBlbHNlIHsKLQkJSTkxNV9XUklURShhdWRf Y29uZmlnLCBhdWRpb19jb25maWdfaGRtaV9waXhlbF9jbG9jayhtb2RlKSk7Ci0JfQotCi0JaWYg KGludGVsX2VsZF91cHRvZGF0ZShjb25uZWN0b3IsCi0JCQkgICAgICAgYXVkX2NudHJsX3N0Miwg ZWxkdiwKLQkJCSAgICAgICBhdWRfY250bF9zdCwgSUJYX0VMRF9BRERSRVNTLAotCQkJICAgICAg IGhkbWl3X2hkbWllZGlkKSkKLQkJcmV0dXJuOwotCi0JaSA9IEk5MTVfUkVBRChhdWRfY250cmxf c3QyKTsKLQlpICY9IH5lbGR2OwotCUk5MTVfV1JJVEUoYXVkX2NudHJsX3N0MiwgaSk7Ci0KLQlp ZiAoIWVsZFswXSkKLQkJcmV0dXJuOwotCi0JaSA9IEk5MTVfUkVBRChhdWRfY250bF9zdCk7Ci0J aSAmPSB+SUJYX0VMRF9BRERSRVNTOwotCUk5MTVfV1JJVEUoYXVkX2NudGxfc3QsIGkpOwotCi0J bGVuID0gbWluX3QodWludDhfdCwgZWxkWzJdLCAyMSk7CS8qIDg0IGJ5dGVzIG9mIGh3IEVMRCBi dWZmZXIgKi8KLQlEUk1fREVCVUdfRFJJVkVSKCJFTEQgc2l6ZSAlZFxuIiwgbGVuKTsKLQlmb3Ig KGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCUk5MTVfV1JJVEUoaGRtaXdfaGRtaWVkaWQsICooKHVp bnQzMl90ICopZWxkICsgaSkpOwotCi0JaSA9IEk5MTVfUkVBRChhdWRfY250cmxfc3QyKTsKLQlp IHw9IGVsZHY7Ci0JSTkxNV9XUklURShhdWRfY250cmxfc3QyLCBpKTsKLX0KLQotdm9pZCBpbnRl bF93cml0ZV9lbGQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAotCQkgICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlKQotewotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGVuY29k ZXItPmNydGM7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQljb25uZWN0b3IgPSBkcm1fc2VsZWN0X2Vs ZChlbmNvZGVyLCBtb2RlKTsKLQlpZiAoIWNvbm5lY3RvcikKLQkJcmV0dXJuOwotCi0JRFJNX0RF QlVHX0RSSVZFUigiRUxEIG9uIFtDT05ORUNUT1I6JWQ6JXNdLCBbRU5DT0RFUjolZDolc11cbiIs Ci0JCQkgY29ubmVjdG9yLT5iYXNlLmlkLAotCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29u bmVjdG9yKSwKLQkJCSBjb25uZWN0b3ItPmVuY29kZXItPmJhc2UuaWQsCi0JCQkgZHJtX2dldF9l bmNvZGVyX25hbWUoY29ubmVjdG9yLT5lbmNvZGVyKSk7Ci0KLQljb25uZWN0b3ItPmVsZFs2XSA9 IGRybV9hdl9zeW5jX2RlbGF5KGNvbm5lY3RvciwgbW9kZSkgLyAyOwotCi0JaWYgKGRldl9wcml2 LT5kaXNwbGF5LndyaXRlX2VsZCkKLQkJZGV2X3ByaXYtPmRpc3BsYXkud3JpdGVfZWxkKGNvbm5l Y3RvciwgY3J0YywgbW9kZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGk4NDVfdXBkYXRlX2N1cnNvcihz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUzMiBiYXNlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5kZXY7CkBAIC0xMTA2MSwzMiArMTA3NTAsMjcgQEAgc3RhdGljIHZvaWQgaW50 ZWxfaW5pdF9kaXNwbGF5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJaWYgKEhBU19QQ0hfU1BM SVQoZGV2KSkgewogCQlpZiAoSVNfR0VONShkZXYpKSB7CiAJCQlkZXZfcHJpdi0+ZGlzcGxheS5m ZGlfbGlua190cmFpbiA9IGlyb25sYWtlX2ZkaV9saW5rX3RyYWluOwotCQkJZGV2X3ByaXYtPmRp c3BsYXkud3JpdGVfZWxkID0gaXJvbmxha2Vfd3JpdGVfZWxkOwogCQl9IGVsc2UgaWYgKElTX0dF TjYoZGV2KSkgewogCQkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBnZW42X2Zk aV9saW5rX3RyYWluOwotCQkJZGV2X3ByaXYtPmRpc3BsYXkud3JpdGVfZWxkID0gaXJvbmxha2Vf d3JpdGVfZWxkOwogCQkJZGV2X3ByaXYtPmRpc3BsYXkubW9kZXNldF9nbG9iYWxfcmVzb3VyY2Vz ID0KIAkJCQlzbmJfbW9kZXNldF9nbG9iYWxfcmVzb3VyY2VzOwogCQl9IGVsc2UgaWYgKElTX0lW WUJSSURHRShkZXYpKSB7CiAJCQkvKiBGSVhNRTogZGV0ZWN0IEIwKyBzdGVwcGluZyBhbmQgdXNl IGF1dG8gdHJhaW5pbmcgKi8KIAkJCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWluID0g aXZiX21hbnVhbF9mZGlfbGlua190cmFpbjsKLQkJCWRldl9wcml2LT5kaXNwbGF5LndyaXRlX2Vs ZCA9IGlyb25sYWtlX3dyaXRlX2VsZDsKIAkJCWRldl9wcml2LT5kaXNwbGF5Lm1vZGVzZXRfZ2xv YmFsX3Jlc291cmNlcyA9CiAJCQkJaXZiX21vZGVzZXRfZ2xvYmFsX3Jlc291cmNlczsKIAkJfSBl bHNlIGlmIChJU19IQVNXRUxMKGRldikgfHwgSVNfR0VOOChkZXYpKSB7CiAJCQlkZXZfcHJpdi0+ ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGhzd19mZGlfbGlua190cmFpbjsKLQkJCWRldl9wcml2 LT5kaXNwbGF5LndyaXRlX2VsZCA9IGhhc3dlbGxfd3JpdGVfZWxkOwogCQkJZGV2X3ByaXYtPmRp c3BsYXkubW9kZXNldF9nbG9iYWxfcmVzb3VyY2VzID0KIAkJCQloYXN3ZWxsX21vZGVzZXRfZ2xv YmFsX3Jlc291cmNlczsKIAkJfQotCX0gZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKLQkJZGV2X3By aXYtPmRpc3BsYXkud3JpdGVfZWxkID0gZzR4X3dyaXRlX2VsZDsKIAl9IGVsc2UgaWYgKElTX1ZB TExFWVZJRVcoZGV2KSkgewogCQlkZXZfcHJpdi0+ZGlzcGxheS5tb2Rlc2V0X2dsb2JhbF9yZXNv dXJjZXMgPQogCQkJdmFsbGV5dmlld19tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXM7Ci0JCWRldl9w cml2LT5kaXNwbGF5LndyaXRlX2VsZCA9IGlyb25sYWtlX3dyaXRlX2VsZDsKIAl9CiAKKwlpbnRl bF9lbGRfaW5pdChkZXZfcHJpdik7CisKIAkvKiBEZWZhdWx0IGp1c3QgcmV0dXJucyAtRU5PREVW IHRvIGluZGljYXRlIHVuc3VwcG9ydGVkICovCiAJZGV2X3ByaXYtPmRpc3BsYXkucXVldWVfZmxp cCA9IGludGVsX2RlZmF1bHRfcXVldWVfZmxpcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApp bmRleCA2YjUxMjYwLi43OTMzZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtNzI4 LDggKzcyOCw2IEBAIHZvaWQgYXNzZXJ0X2ZkaV9yeF9wbGwoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAogdm9pZCBhc3NlcnRfcGlwZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLCBib29sIHN0YXRlKTsKICNkZWZpbmUgYXNzZXJ0X3Bp cGVfZW5hYmxlZChkLCBwKSBhc3NlcnRfcGlwZShkLCBwLCB0cnVlKQogI2RlZmluZSBhc3NlcnRf cGlwZV9kaXNhYmxlZChkLCBwKSBhc3NlcnRfcGlwZShkLCBwLCBmYWxzZSkKLXZvaWQgaW50ZWxf d3JpdGVfZWxkKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKLQkJICAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiB1bnNpZ25lZCBsb25nIGludGVsX2dlbjRfY29tcHV0ZV9w YWdlX29mZnNldChpbnQgKngsIGludCAqeSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgdGlsaW5n X21vZGUsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGJwcCwKQEAgLTc1Myw2ICs3NTEsNyBAQCBp bnQgdmFsbGV5dmlld19nZXRfdmNvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 CiB2b2lkIGludGVsX21vZGVfZnJvbV9waXBlX2NvbmZpZyhzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKIAkJCQkgc3RydWN0IGludGVsX2NydGNfY29uZmlnICpwaXBlX2NvbmZpZyk7CiBp bnQgaW50ZWxfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0KTsKK2Jvb2wgaW50ZWxfcGlwZV9o YXNfdHlwZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB0eXBlKTsKIAogLyogaW50ZWxfZHAu YyAqLwogdm9pZCBpbnRlbF9kcF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBvdXRw dXRfcmVnLCBlbnVtIHBvcnQgcG9ydCk7CkBAIC03ODYsNiArNzg1LDEyIEBAIGJvb2wgaW50ZWxf ZHNpX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGludGVsX2R2b19pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiAKKy8qIGludGVsX2VsZC5jICovCit2b2lkIGludGVs X3dyaXRlX2VsZChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCSAgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpOwordm9pZCBpbnRlbF9lbGRfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCisKIC8qIGxlZ2FjeSBmYmRldiBlbXVsYXRpb24gaW4g aW50ZWxfZmJkZXYuYyAqLwogI2lmZGVmIENPTkZJR19EUk1fSTkxNV9GQkRFVgogZXh0ZXJuIGlu dCBpbnRlbF9mYmRldl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZWxkLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9lbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2ZiYTI5Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZWxkLmMKQEAgLTAs MCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwNi0yMDA3LCAyMDE0IEludGVsIENv cnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqIEF1dGhvcnM6CisgKglFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICovCisK KyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJkcm1fY3J0Yy5oIgorI2luY2x1ZGUg ImRybV9lZGlkLmgiCisKK3N0YXRpYyBib29sIGludGVsX2VsZF91cHRvZGF0ZShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICAgIGludCByZWdfZWxkdiwgdWludDMyX3Qg Yml0c19lbGR2LAorCQkJICAgICAgIGludCByZWdfZWxkYSwgdWludDMyX3QgYml0c19lbGRhLAor CQkJICAgICAgIGludCByZWdfZWRpZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7CisJdWludDhfdCAqZWxkID0gY29u bmVjdG9yLT5lbGQ7CisJdWludDMyX3QgaTsKKworCWkgPSBJOTE1X1JFQUQocmVnX2VsZHYpOwor CWkgJj0gYml0c19lbGR2OworCisJaWYgKCFlbGRbMF0pCisJCXJldHVybiAhaTsKKworCWlmICgh aSkKKwkJcmV0dXJuIGZhbHNlOworCisJaSA9IEk5MTVfUkVBRChyZWdfZWxkYSk7CisJaSAmPSB+ Yml0c19lbGRhOworCUk5MTVfV1JJVEUocmVnX2VsZGEsIGkpOworCisJZm9yIChpID0gMDsgaSA8 IGVsZFsyXTsgaSsrKQorCQlpZiAoSTkxNV9SRUFEKHJlZ19lZGlkKSAhPSAqKCh1aW50MzJfdCAq KWVsZCArIGkpKQorCQkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgeworCWludCBjbG9jazsKKwl1MzIgY29uZmlnOworfSBoZG1pX2F1ZGlvX2Nsb2Nr W10gPSB7CisJeyBESVZfUk9VTkRfVVAoMjUyMDAgKiAxMDAwLCAxMDAxKSwgQVVEX0NPTkZJR19Q SVhFTF9DTE9DS19IRE1JXzI1MTc1IH0sCisJeyAyNTIwMCwgQVVEX0NPTkZJR19QSVhFTF9DTE9D S19IRE1JXzI1MjAwIH0sIC8qIGRlZmF1bHQgcGVyIGJzcGVjICovCisJeyAyNzAwMCwgQVVEX0NP TkZJR19QSVhFTF9DTE9DS19IRE1JXzI3MDAwIH0sCisJeyAyNzAwMCAqIDEwMDEgLyAxMDAwLCBB VURfQ09ORklHX1BJWEVMX0NMT0NLX0hETUlfMjcwMjcgfSwKKwl7IDU0MDAwLCBBVURfQ09ORklH X1BJWEVMX0NMT0NLX0hETUlfNTQwMDAgfSwKKwl7IDU0MDAwICogMTAwMSAvIDEwMDAsIEFVRF9D T05GSUdfUElYRUxfQ0xPQ0tfSERNSV81NDA1NCB9LAorCXsgRElWX1JPVU5EX1VQKDc0MjUwICog MTAwMCwgMTAwMSksIEFVRF9DT05GSUdfUElYRUxfQ0xPQ0tfSERNSV83NDE3NiB9LAorCXsgNzQy NTAsIEFVRF9DT05GSUdfUElYRUxfQ0xPQ0tfSERNSV83NDI1MCB9LAorCXsgRElWX1JPVU5EX1VQ KDE0ODUwMCAqIDEwMDAsIDEwMDEpLCBBVURfQ09ORklHX1BJWEVMX0NMT0NLX0hETUlfMTQ4MzUy IH0sCisJeyAxNDg1MDAsIEFVRF9DT05GSUdfUElYRUxfQ0xPQ0tfSERNSV8xNDg1MDAgfSwKK307 CisKKy8qIGdldCBBVURfQ09ORklHX1BJWEVMX0NMT0NLX0hETUlfKiB2YWx1ZSBmb3IgbW9kZSAq Lworc3RhdGljIHUzMiBhdWRpb19jb25maWdfaGRtaV9waXhlbF9jbG9jayhzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGhkbWlfYXVkaW9fY2xvY2spOyBpKyspIHsKKwkJaWYgKG1vZGUtPmNsb2NrID09IGhkbWlf YXVkaW9fY2xvY2tbaV0uY2xvY2spCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBBUlJBWV9T SVpFKGhkbWlfYXVkaW9fY2xvY2spKSB7CisJCURSTV9ERUJVR19LTVMoIkhETUkgYXVkaW8gcGl4 ZWwgY2xvY2sgc2V0dGluZyBmb3IgJWQgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVs dHNcbiIsIG1vZGUtPmNsb2NrKTsKKwkJaSA9IDE7CisJfQorCisJRFJNX0RFQlVHX0tNUygiQ29u ZmlndXJpbmcgSERNSSBhdWRpbyBmb3IgcGl4ZWwgY2xvY2sgJWQgKDB4JTA4eClcbiIsCisJCSAg ICAgIGhkbWlfYXVkaW9fY2xvY2tbaV0uY2xvY2ssCisJCSAgICAgIGhkbWlfYXVkaW9fY2xvY2tb aV0uY29uZmlnKTsKKworCXJldHVybiBoZG1pX2F1ZGlvX2Nsb2NrW2ldLmNvbmZpZzsKK30KKwor c3RhdGljIHZvaWQgZzR4X3dyaXRlX2VsZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAorCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNvbm5l Y3Rvci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50OF90ICplbGQgPSBjb25uZWN0b3ItPmVsZDsK Kwl1aW50MzJfdCBlbGR2OworCXVpbnQzMl90IGxlbjsKKwl1aW50MzJfdCBpOworCisJaSA9IEk5 MTVfUkVBRChHNFhfQVVEX1ZJRF9ESUQpOworCisJaWYgKGkgPT0gSU5URUxfQVVESU9fREVWQkxD IHx8IGkgPT0gSU5URUxfQVVESU9fREVWQ0wpCisJCWVsZHYgPSBHNFhfRUxEVl9ERVZDTF9ERVZC TEM7CisJZWxzZQorCQllbGR2ID0gRzRYX0VMRFZfREVWQ1RHOworCisJaWYgKGludGVsX2VsZF91 cHRvZGF0ZShjb25uZWN0b3IsCisJCQkgICAgICAgRzRYX0FVRF9DTlRMX1NULCBlbGR2LAorCQkJ ICAgICAgIEc0WF9BVURfQ05UTF9TVCwgRzRYX0VMRF9BRERSLAorCQkJICAgICAgIEc0WF9IRE1J V19IRE1JRURJRCkpCisJCXJldHVybjsKKworCWkgPSBJOTE1X1JFQUQoRzRYX0FVRF9DTlRMX1NU KTsKKwlpICY9IH4oZWxkdiB8IEc0WF9FTERfQUREUik7CisJbGVuID0gKGkgPj4gOSkgJiAweDFm OwkJLyogRUxEIGJ1ZmZlciBzaXplICovCisJSTkxNV9XUklURShHNFhfQVVEX0NOVExfU1QsIGkp OworCisJaWYgKCFlbGRbMF0pCisJCXJldHVybjsKKworCWxlbiA9IG1pbl90KHVpbnQ4X3QsIGVs ZFsyXSwgbGVuKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJFTEQgc2l6ZSAlZFxuIiwgbGVuKTsKKwlm b3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCUk5MTVfV1JJVEUoRzRYX0hETUlXX0hETUlFRElE LCAqKCh1aW50MzJfdCAqKWVsZCArIGkpKTsKKworCWkgPSBJOTE1X1JFQUQoRzRYX0FVRF9DTlRM X1NUKTsKKwlpIHw9IGVsZHY7CisJSTkxNV9XUklURShHNFhfQVVEX0NOVExfU1QsIGkpOworfQor CitzdGF0aWMgdm9pZCBpcm9ubGFrZV93cml0ZV9lbGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgICAgICAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gY29ubmVjdG9yLT5kZXYtPmRldl9wcml2YXRlOworCXVpbnQ4X3QgKmVsZCA9 IGNvbm5lY3Rvci0+ZWxkOworCXVpbnQzMl90IGVsZHY7CisJdWludDMyX3QgaTsKKwlpbnQgbGVu OworCWludCBoZG1pd19oZG1pZWRpZDsKKwlpbnQgYXVkX2NvbmZpZzsKKwlpbnQgYXVkX2NudGxf c3Q7CisJaW50IGF1ZF9jbnRybF9zdDI7CisJaW50IHBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGMp LT5waXBlOworCisJaWYgKEhBU19QQ0hfSUJYKGNvbm5lY3Rvci0+ZGV2KSkgeworCQloZG1pd19o ZG1pZWRpZCA9IElCWF9IRE1JV19IRE1JRURJRChwaXBlKTsKKwkJYXVkX2NvbmZpZyA9IElCWF9B VURfQ0ZHKHBpcGUpOworCQlhdWRfY250bF9zdCA9IElCWF9BVURfQ05UTF9TVChwaXBlKTsKKwkJ YXVkX2NudHJsX3N0MiA9IElCWF9BVURfQ05UTF9TVDI7CisJfSBlbHNlIGlmIChJU19WQUxMRVlW SUVXKGNvbm5lY3Rvci0+ZGV2KSkgeworCQloZG1pd19oZG1pZWRpZCA9IFZMVl9IRE1JV19IRE1J RURJRChwaXBlKTsKKwkJYXVkX2NvbmZpZyA9IFZMVl9BVURfQ0ZHKHBpcGUpOworCQlhdWRfY250 bF9zdCA9IFZMVl9BVURfQ05UTF9TVChwaXBlKTsKKwkJYXVkX2NudHJsX3N0MiA9IFZMVl9BVURf Q05UTF9TVDI7CisJfSBlbHNlIHsKKwkJaGRtaXdfaGRtaWVkaWQgPSBDUFRfSERNSVdfSERNSUVE SUQocGlwZSk7CisJCWF1ZF9jb25maWcgPSBDUFRfQVVEX0NGRyhwaXBlKTsKKwkJYXVkX2NudGxf c3QgPSBDUFRfQVVEX0NOVExfU1QocGlwZSk7CisJCWF1ZF9jbnRybF9zdDIgPSBDUFRfQVVEX0NO VFJMX1NUMjsKKwl9CisKKwlEUk1fREVCVUdfRFJJVkVSKCJFTEQgb24gcGlwZSAlY1xuIiwgcGlw ZV9uYW1lKHBpcGUpKTsKKworCWlmIChJU19WQUxMRVlWSUVXKGNvbm5lY3Rvci0+ZGV2KSkgIHsK KwkJc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXI7CisJCXN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0OworCisJCWludGVsX2VuY29kZXIgPSBpbnRlbF9h dHRhY2hlZF9lbmNvZGVyKGNvbm5lY3Rvcik7CisJCWludGVsX2RpZ19wb3J0ID0gZW5jX3RvX2Rp Z19wb3J0KCZpbnRlbF9lbmNvZGVyLT5iYXNlKTsKKwkJaSA9IGludGVsX2RpZ19wb3J0LT5wb3J0 OworCX0gZWxzZSB7CisJCWkgPSBJOTE1X1JFQUQoYXVkX2NudGxfc3QpOworCQlpID0gKGkgPj4g MjkpICYgRElQX1BPUlRfU0VMX01BU0s7CisJCS8qIERJUF9Qb3J0X1NlbGVjdCwgMHgxID0gUG9y dEIgKi8KKwl9CisKKwlpZiAoIWkpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiQXVkaW8gZGlyZWN0 ZWQgdG8gdW5rbm93biBwb3J0XG4iKTsKKwkJLyogb3BlcmF0ZSBibGluZGx5IG9uIGFsbCBwb3J0 cyAqLworCQllbGR2ID0gSUJYX0VMRF9WQUxJREI7CisJCWVsZHYgfD0gSUJYX0VMRF9WQUxJREIg PDwgNDsKKwkJZWxkdiB8PSBJQlhfRUxEX1ZBTElEQiA8PCA4OworCX0gZWxzZSB7CisJCURSTV9E RUJVR19EUklWRVIoIkVMRCBvbiBwb3J0ICVjXG4iLCBwb3J0X25hbWUoaSkpOworCQllbGR2ID0g SUJYX0VMRF9WQUxJREIgPDwgKChpIC0gMSkgKiA0KTsKKwl9CisKKwlpZiAoaW50ZWxfcGlwZV9o YXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQpKSB7CisJCURSTV9ERUJVR19E UklWRVIoIkVMRDogRGlzcGxheVBvcnQgZGV0ZWN0ZWRcbiIpOworCQllbGRbNV0gfD0gKDEgPDwg Mik7CS8qIENvbm5fVHlwZSwgMHgxID0gRGlzcGxheVBvcnQgKi8KKwkJSTkxNV9XUklURShhdWRf Y29uZmlnLCBBVURfQ09ORklHX05fVkFMVUVfSU5ERVgpOyAvKiAweDEgPSBEUCAqLworCX0gZWxz ZSB7CisJCUk5MTVfV1JJVEUoYXVkX2NvbmZpZywgYXVkaW9fY29uZmlnX2hkbWlfcGl4ZWxfY2xv Y2sobW9kZSkpOworCX0KKworCWlmIChpbnRlbF9lbGRfdXB0b2RhdGUoY29ubmVjdG9yLAorCQkJ ICAgICAgIGF1ZF9jbnRybF9zdDIsIGVsZHYsCisJCQkgICAgICAgYXVkX2NudGxfc3QsIElCWF9F TERfQUREUkVTUywKKwkJCSAgICAgICBoZG1pd19oZG1pZWRpZCkpCisJCXJldHVybjsKKworCWkg PSBJOTE1X1JFQUQoYXVkX2NudHJsX3N0Mik7CisJaSAmPSB+ZWxkdjsKKwlJOTE1X1dSSVRFKGF1 ZF9jbnRybF9zdDIsIGkpOworCisJaWYgKCFlbGRbMF0pCisJCXJldHVybjsKKworCWkgPSBJOTE1 X1JFQUQoYXVkX2NudGxfc3QpOworCWkgJj0gfklCWF9FTERfQUREUkVTUzsKKwlJOTE1X1dSSVRF KGF1ZF9jbnRsX3N0LCBpKTsKKworCWxlbiA9IG1pbl90KHVpbnQ4X3QsIGVsZFsyXSwgMjEpOwkv KiA4NCBieXRlcyBvZiBodyBFTEQgYnVmZmVyICovCisJRFJNX0RFQlVHX0RSSVZFUigiRUxEIHNp emUgJWRcbiIsIGxlbik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlJOTE1X1dSSVRF KGhkbWl3X2hkbWllZGlkLCAqKCh1aW50MzJfdCAqKWVsZCArIGkpKTsKKworCWkgPSBJOTE1X1JF QUQoYXVkX2NudHJsX3N0Mik7CisJaSB8PSBlbGR2OworCUk5MTVfV1JJVEUoYXVkX2NudHJsX3N0 MiwgaSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhc3dlbGxfd3JpdGVfZWxkKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkg ICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7CisJdWludDhf dCAqZWxkID0gY29ubmVjdG9yLT5lbGQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmRldjsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0 Yyk7CisJdWludDMyX3QgZWxkdjsKKwl1aW50MzJfdCBpOworCWludCBsZW47CisJaW50IHBpcGUg PSB0b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOworCWludCB0bXA7CisKKwlpbnQgaGRtaXdfaGRt aWVkaWQgPSBIU1dfQVVEX0VESURfREFUQShwaXBlKTsKKwlpbnQgYXVkX2NudGxfc3QgPSBIU1df QVVEX0RJUF9FTERfQ1RSTChwaXBlKTsKKwlpbnQgYXVkX2NvbmZpZyA9IEhTV19BVURfQ0ZHKHBp cGUpOworCWludCBhdWRfY250cmxfc3QyID0gSFNXX0FVRF9QSU5fRUxEX0NQX1ZMRDsKKworCS8q IEF1ZGlvIG91dHB1dCBlbmFibGUgKi8KKwlEUk1fREVCVUdfRFJJVkVSKCJIRE1JIGF1ZGlvOiBl bmFibGUgY29kZWNcbiIpOworCXRtcCA9IEk5MTVfUkVBRChhdWRfY250cmxfc3QyKTsKKwl0bXAg fD0gKEFVRElPX09VVFBVVF9FTkFCTEVfQSA8PCAocGlwZSAqIDQpKTsKKwlJOTE1X1dSSVRFKGF1 ZF9jbnRybF9zdDIsIHRtcCk7CisKKwkvKiBXYWl0IGZvciAxIHZlcnRpY2FsIGJsYW5rICovCisJ aW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldiwgcGlwZSk7CisKKwkvKiBTZXQgRUxEIHZhbGlkIHN0 YXRlICovCisJdG1wID0gSTkxNV9SRUFEKGF1ZF9jbnRybF9zdDIpOworCURSTV9ERUJVR19EUklW RVIoIkhETUkgYXVkaW86IHBpbiBlbGQgdmxkIHN0YXR1cz0weCUwOHhcbiIsIHRtcCk7CisJdG1w IHw9IChBVURJT19FTERfVkFMSURfQSA8PCAocGlwZSAqIDQpKTsKKwlJOTE1X1dSSVRFKGF1ZF9j bnRybF9zdDIsIHRtcCk7CisJdG1wID0gSTkxNV9SRUFEKGF1ZF9jbnRybF9zdDIpOworCURSTV9E RUJVR19EUklWRVIoIkhETUkgYXVkaW86IGVsZCB2bGQgc3RhdHVzPTB4JTA4eFxuIiwgdG1wKTsK KworCS8qIEVuYWJsZSBIRE1JIG1vZGUgKi8KKwl0bXAgPSBJOTE1X1JFQUQoYXVkX2NvbmZpZyk7 CisJRFJNX0RFQlVHX0RSSVZFUigiSERNSSBhdWRpbzogYXVkaW8gY29uZjogMHglMDh4XG4iLCB0 bXApOworCS8qIGNsZWFyIE5fcHJvZ3JhbWluZ19lbmFibGUgYW5kIE5fdmFsdWVfaW5kZXggKi8K Kwl0bXAgJj0gfihBVURfQ09ORklHX05fVkFMVUVfSU5ERVggfCBBVURfQ09ORklHX05fUFJPR19F TkFCTEUpOworCUk5MTVfV1JJVEUoYXVkX2NvbmZpZywgdG1wKTsKKworCURSTV9ERUJVR19EUklW RVIoIkVMRCBvbiBwaXBlICVjXG4iLCBwaXBlX25hbWUocGlwZSkpOworCisJZWxkdiA9IEFVRElP X0VMRF9WQUxJRF9BIDw8IChwaXBlICogNCk7CisJaW50ZWxfY3J0Yy0+ZWxkX3ZsZCA9IHRydWU7 CisKKwlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfRElTUExBWVBP UlQpKSB7CisJCURSTV9ERUJVR19EUklWRVIoIkVMRDogRGlzcGxheVBvcnQgZGV0ZWN0ZWRcbiIp OworCQllbGRbNV0gfD0gKDEgPDwgMik7CS8qIENvbm5fVHlwZSwgMHgxID0gRGlzcGxheVBvcnQg Ki8KKwkJSTkxNV9XUklURShhdWRfY29uZmlnLCBBVURfQ09ORklHX05fVkFMVUVfSU5ERVgpOyAv KiAweDEgPSBEUCAqLworCX0gZWxzZSB7CisJCUk5MTVfV1JJVEUoYXVkX2NvbmZpZywgYXVkaW9f Y29uZmlnX2hkbWlfcGl4ZWxfY2xvY2sobW9kZSkpOworCX0KKworCWlmIChpbnRlbF9lbGRfdXB0 b2RhdGUoY29ubmVjdG9yLAorCQkJICAgICAgIGF1ZF9jbnRybF9zdDIsIGVsZHYsCisJCQkgICAg ICAgYXVkX2NudGxfc3QsIElCWF9FTERfQUREUkVTUywKKwkJCSAgICAgICBoZG1pd19oZG1pZWRp ZCkpCisJCXJldHVybjsKKworCWkgPSBJOTE1X1JFQUQoYXVkX2NudHJsX3N0Mik7CisJaSAmPSB+ ZWxkdjsKKwlJOTE1X1dSSVRFKGF1ZF9jbnRybF9zdDIsIGkpOworCisJaWYgKCFlbGRbMF0pCisJ CXJldHVybjsKKworCWkgPSBJOTE1X1JFQUQoYXVkX2NudGxfc3QpOworCWkgJj0gfklCWF9FTERf QUREUkVTUzsKKwlJOTE1X1dSSVRFKGF1ZF9jbnRsX3N0LCBpKTsKKwlpID0gKGkgPj4gMjkpICYg RElQX1BPUlRfU0VMX01BU0s7CQkvKiBESVBfUG9ydF9TZWxlY3QsIDB4MSA9IFBvcnRCICovCisJ RFJNX0RFQlVHX0RSSVZFUigicG9ydCBudW06JWRcbiIsIGkpOworCisJbGVuID0gbWluX3QodWlu dDhfdCwgZWxkWzJdLCAyMSk7CS8qIDg0IGJ5dGVzIG9mIGh3IEVMRCBidWZmZXIgKi8KKwlEUk1f REVCVUdfRFJJVkVSKCJFTEQgc2l6ZSAlZFxuIiwgbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVu OyBpKyspCisJCUk5MTVfV1JJVEUoaGRtaXdfaGRtaWVkaWQsICooKHVpbnQzMl90ICopZWxkICsg aSkpOworCisJaSA9IEk5MTVfUkVBRChhdWRfY250cmxfc3QyKTsKKwlpIHw9IGVsZHY7CisJSTkx NV9XUklURShhdWRfY250cmxfc3QyLCBpKTsKK30KKwordm9pZCBpbnRlbF93cml0ZV9lbGQoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGVuY29kZXItPmNydGM7CisJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g ZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7CisKKwljb25uZWN0b3IgPSBkcm1fc2VsZWN0X2VsZChlbmNvZGVyLCBtb2Rl KTsKKwlpZiAoIWNvbm5lY3RvcikKKwkJcmV0dXJuOworCisJRFJNX0RFQlVHX0RSSVZFUigiRUxE IG9uIFtDT05ORUNUT1I6JWQ6JXNdLCBbRU5DT0RFUjolZDolc11cbiIsCisJCQkgY29ubmVjdG9y LT5iYXNlLmlkLAorCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSwKKwkJCSBj b25uZWN0b3ItPmVuY29kZXItPmJhc2UuaWQsCisJCQkgZHJtX2dldF9lbmNvZGVyX25hbWUoY29u bmVjdG9yLT5lbmNvZGVyKSk7CisKKwljb25uZWN0b3ItPmVsZFs2XSA9IGRybV9hdl9zeW5jX2Rl bGF5KGNvbm5lY3RvciwgbW9kZSkgLyAyOworCisJaWYgKGRldl9wcml2LT5kaXNwbGF5LndyaXRl X2VsZCkKKwkJZGV2X3ByaXYtPmRpc3BsYXkud3JpdGVfZWxkKGNvbm5lY3RvciwgY3J0YywgbW9k ZSk7Cit9CisKK3ZvaWQgaW50ZWxfZWxkX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCisJ aWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgeworCQlpZiAoSVNfR0VONShkZXYpIHx8IElTX0dFTjYo ZGV2KSB8fCBJU19JVllCUklER0UoZGV2KSkKKwkJCWRldl9wcml2LT5kaXNwbGF5LndyaXRlX2Vs ZCA9IGlyb25sYWtlX3dyaXRlX2VsZDsKKwkJZWxzZSBpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElT X0dFTjgoZGV2KSkKKwkJCWRldl9wcml2LT5kaXNwbGF5LndyaXRlX2VsZCA9IGhhc3dlbGxfd3Jp dGVfZWxkOworCX0gZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKKwkJZGV2X3ByaXYtPmRpc3BsYXku d3JpdGVfZWxkID0gZzR4X3dyaXRlX2VsZDsKKwl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2 KSkgeworCQlkZXZfcHJpdi0+ZGlzcGxheS53cml0ZV9lbGQgPSBpcm9ubGFrZV93cml0ZV9lbGQ7 CisJfQorfQotLSAKMS45LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==