From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: [RFC 1/2] drm/i915: start moving state checker to intel_verify.c Date: Tue, 16 Apr 2019 13:36:02 +0300 Message-ID: <20190416103603.8266-1-jani.nikula@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7A0AF89289 for ; Tue, 16 Apr 2019 10:33:44 +0000 (UTC) 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: jani.nikula@intel.com List-Id: intel-gfx@lists.freedesktop.org U2lnbmVkLW9mZi1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgNDc0ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgIDEyICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3ZlcmlmeS5jICB8IDQ2NCArKysrKysrKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmVyaWZ5LmggIHwgIDIyICsrCiA1IGZp bGVzIGNoYW5nZWQsIDUxMCBpbnNlcnRpb25zKCspLCA0NjMgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmVyaWZ5LmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZXJpZnkuaAoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUKaW5kZXggZmJjYjA5MDQuLmEwMDBmYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBA IC0xNjYsNiArMTY2LDcgQEAgaTkxNS15ICs9IGR2b19jaDcwMTcubyBcCiAJICBpbnRlbF9wYW5l bC5vIFwKIAkgIGludGVsX3Nkdm8ubyBcCiAJICBpbnRlbF90di5vIFwKKwkgIGludGVsX3Zlcmlm eS5vIFwKIAkgIHZsdl9kc2kubyBcCiAJICB2bHZfZHNpX3BsbC5vIFwKIAkgIGludGVsX3Zkc2Mu bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDNiZDQwYS4uMzFhOTMxIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC02OSw2ICs2OSw3IEBACiAjaW5j bHVkZSAiaW50ZWxfc2R2by5oIgogI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgogI2luY2x1ZGUg ImludGVsX3R2LmgiCisjaW5jbHVkZSAiaW50ZWxfdmVyaWZ5LmgiCiAKIC8qIFByaW1hcnkgcGxh bmUgZm9ybWF0cyBmb3IgZ2VuIDw9IDMgKi8KIHN0YXRpYyBjb25zdCB1MzIgaTh4eF9wcmltYXJ5 X2Zvcm1hdHNbXSA9IHsKQEAgLTEyNDMsNyArMTI0NCw3IEBAIHZvaWQgYXNzZXJ0X3BpcGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJcGlwZV9uYW1lKHBpcGUpLCBvbm9m ZihzdGF0ZSksIG9ub2ZmKGN1cl9zdGF0ZSkpOwogfQogCi1zdGF0aWMgdm9pZCBhc3NlcnRfcGxh bmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwgYm9vbCBzdGF0ZSkKK3ZvaWQgYXNzZXJ0X3Bs YW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsIGJvb2wgc3RhdGUpCiB7CiAJZW51bSBwaXBl IHBpcGU7CiAJYm9vbCBjdXJfc3RhdGU7CkBAIC02NjA3LDQ1ICs2NjA4LDYgQEAgdm9pZCBpbnRl bF9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogCWtmcmVlKGlu dGVsX2VuY29kZXIpOwogfQogCi0vKiBDcm9zcyBjaGVjayB0aGUgYWN0dWFsIGh3IHN0YXRlIHdp dGggb3VyIG93biBtb2Rlc2V0IHN0YXRlIHRyYWNraW5nIChhbmQgaXQncwotICogaW50ZXJuYWwg Y29uc2lzdGVuY3kpLiAqLwotc3RhdGljIHZvaWQgaW50ZWxfY29ubmVjdG9yX3ZlcmlmeV9zdGF0 ZShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkJCSBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpj b25uZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKLQot CURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLAotCQkgICAgICBjb25uZWN0b3It PmJhc2UuYmFzZS5pZCwKLQkJICAgICAgY29ubmVjdG9yLT5iYXNlLm5hbWUpOwotCi0JaWYgKGNv bm5lY3Rvci0+Z2V0X2h3X3N0YXRlKGNvbm5lY3RvcikpIHsKLQkJc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIgPSBjb25uZWN0b3ItPmVuY29kZXI7Ci0KLQkJSTkxNV9TVEFURV9XQVJOKCFj cnRjX3N0YXRlLAotCQkJICJjb25uZWN0b3IgZW5hYmxlZCB3aXRob3V0IGF0dGFjaGVkIGNydGNc biIpOwotCi0JCWlmICghY3J0Y19zdGF0ZSkKLQkJCXJldHVybjsKLQotCQlJOTE1X1NUQVRFX1dB Uk4oIWNydGNfc3RhdGUtPmFjdGl2ZSwKLQkJICAgICAgImNvbm5lY3RvciBpcyBhY3RpdmUsIGJ1 dCBhdHRhY2hlZCBjcnRjIGlzbid0XG4iKTsKLQotCQlpZiAoIWVuY29kZXIgfHwgZW5jb2Rlci0+ dHlwZSA9PSBJTlRFTF9PVVRQVVRfRFBfTVNUKQotCQkJcmV0dXJuOwotCi0JCUk5MTVfU1RBVEVf V0FSTihjb25uX3N0YXRlLT5iZXN0X2VuY29kZXIgIT0gJmVuY29kZXItPmJhc2UsCi0JCQkiYXRv bWljIGVuY29kZXIgZG9lc24ndCBtYXRjaCBhdHRhY2hlZCBlbmNvZGVyXG4iKTsKLQotCQlJOTE1 X1NUQVRFX1dBUk4oY29ubl9zdGF0ZS0+Y3J0YyAhPSBlbmNvZGVyLT5iYXNlLmNydGMsCi0JCQki YXR0YWNoZWQgZW5jb2RlciBjcnRjIGRpZmZlcnMgZnJvbSBjb25uZWN0b3IgY3J0Y1xuIik7Ci0J fSBlbHNlIHsKLQkJSTkxNV9TVEFURV9XQVJOKGNydGNfc3RhdGUgJiYgY3J0Y19zdGF0ZS0+YWN0 aXZlLAotCQkJImF0dGFjaGVkIGNydGMgaXMgYWN0aXZlLCBidXQgY29ubmVjdG9yIGlzbid0XG4i KTsKLQkJSTkxNV9TVEFURV9XQVJOKCFjcnRjX3N0YXRlICYmIGNvbm5fc3RhdGUtPmJlc3RfZW5j b2RlciwKLQkJCSJiZXN0IGVuY29kZXIgc2V0IHdpdGhvdXQgY3J0YyFcbiIpOwotCX0KLX0KLQog c3RhdGljIGludCBwaXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSkKIHsKIAlpZiAoY3J0Y19zdGF0ZS0+YmFzZS5lbmFibGUgJiYgY3J0Y19z dGF0ZS0+aGFzX3BjaF9lbmNvZGVyKQpAQCAtNjg3OSw3ICs2ODQxLDcgQEAgc3RhdGljIHUzMiBp bGtfcGlwZV9waXhlbF9yYXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2Nv bmZpZykKIAlyZXR1cm4gcGl4ZWxfcmF0ZTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19j b21wdXRlX3BpeGVsX3JhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit2 b2lkIGludGVsX2NydGNfY29tcHV0ZV9waXhlbF9yYXRlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXYpOwogCkBAIC0xMTU4NCw5ICsxMTU0Niw5 IEBAIHN0YXRpYyBjb25zdCBjaGFyICpvdXRwdXRfZm9ybWF0cyhlbnVtIGludGVsX291dHB1dF9m b3JtYXQgZm9ybWF0KQogCXJldHVybiBvdXRwdXRfZm9ybWF0X3N0cltmb3JtYXRdOwogfQogCi1z dGF0aWMgdm9pZCBpbnRlbF9kdW1wX3BpcGVfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj LAotCQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywKLQkJCQkgICBj b25zdCBjaGFyICpjb250ZXh0KQordm9pZCBpbnRlbF9kdW1wX3BpcGVfY29uZmlnKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjLAorCQkJICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2Nv bmZpZywKKwkJCSAgICBjb25zdCBjaGFyICpjb250ZXh0KQogewogCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7CkBAIC0xMjA3Niw3ICsxMjAzOCw3IEBAIHN0YXRpYyBib29sIGZh c3Rib290X2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVy biBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wKK2Jvb2wKIGludGVsX3BpcGVfY29uZmlnX2NvbXBh cmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3VycmVudF9jb25maWcsCiAJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpwaXBlX2NvbmZpZywKQEAgLTEyMzg5LDggKzEyMzUxLDggQEAgaW50ZWxfcGlwZV9jb25maWdf Y29tcGFyZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJcmV0dXJuIHJldDsK IH0KIAotc3RhdGljIHZvaWQgaW50ZWxfcGlwZV9jb25maWdfc2FuaXR5X2NoZWNrKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKnBpcGVfY29uZmlnKQordm9pZCBpbnRlbF9waXBlX2NvbmZpZ19zYW5pdHlfY2hl Y2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCiB7CiAJaWYgKHBpcGVfY29uZmlnLT5o YXNfcGNoX2VuY29kZXIpIHsKIAkJaW50IGZkaV9kb3RjbG9jayA9IGludGVsX2RvdGNsb2NrX2Nh bGN1bGF0ZShpbnRlbF9mZGlfbGlua19mcmVxKGRldl9wcml2LCBwaXBlX2NvbmZpZyksCkBAIC0x MjQwNyw0MjAgKzEyMzY5LDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfcGlwZV9jb25maWdfc2FuaXR5 X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAl9CiB9CiAKLXN0YXRp YyB2b2lkIHZlcmlmeV93bV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkgICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpuZXdfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5kZXYpOwotCXN0cnVjdCBza2xfaHdfc3RhdGUg ewotCQlzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSBkZGJfeVtJOTE1X01BWF9QTEFORVNdOwotCQlzdHJ1 Y3Qgc2tsX2RkYl9lbnRyeSBkZGJfdXZbSTkxNV9NQVhfUExBTkVTXTsKLQkJc3RydWN0IHNrbF9k ZGJfYWxsb2NhdGlvbiBkZGI7Ci0JCXN0cnVjdCBza2xfcGlwZV93bSB3bTsKLQl9ICpodzsKLQlz dHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpzd19kZGI7Ci0Jc3RydWN0IHNrbF9waXBlX3dtICpz d193bTsKLQlzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSAqaHdfZGRiX2VudHJ5LCAqc3dfZGRiX2VudHJ5 OwotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsK LQljb25zdCBlbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Ci0JaW50IHBsYW5lLCBs ZXZlbCwgbWF4X2xldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7Ci0KLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA8IDkgfHwgIW5ld19zdGF0ZS0+YWN0aXZlKQotCQlyZXR1cm47Ci0K LQlodyA9IGt6YWxsb2Moc2l6ZW9mKCpodyksIEdGUF9LRVJORUwpOwotCWlmICghaHcpCi0JCXJl dHVybjsKLQotCXNrbF9waXBlX3dtX2dldF9od19zdGF0ZShpbnRlbF9jcnRjLCAmaHctPndtKTsK LQlzd193bSA9ICZ0b19pbnRlbF9jcnRjX3N0YXRlKG5ld19zdGF0ZSktPndtLnNrbC5vcHRpbWFs OwotCi0Jc2tsX3BpcGVfZGRiX2dldF9od19zdGF0ZShpbnRlbF9jcnRjLCBody0+ZGRiX3ksIGh3 LT5kZGJfdXYpOwotCi0Jc2tsX2RkYl9nZXRfaHdfc3RhdGUoZGV2X3ByaXYsICZody0+ZGRiKTsK LQlzd19kZGIgPSAmZGV2X3ByaXYtPndtLnNrbF9ody5kZGI7Ci0KLQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMSAmJgotCSAgICBody0+ZGRiLmVuYWJsZWRfc2xpY2VzICE9IHN3X2RkYi0+ ZW5hYmxlZF9zbGljZXMpCi0JCURSTV9FUlJPUigibWlzbWF0Y2ggaW4gREJVRiBTbGljZXMgKGV4 cGVjdGVkICV1LCBnb3QgJXUpXG4iLAotCQkJICBzd19kZGItPmVuYWJsZWRfc2xpY2VzLAotCQkJ ICBody0+ZGRiLmVuYWJsZWRfc2xpY2VzKTsKLQotCS8qIHBsYW5lcyAqLwotCWZvcl9lYWNoX3Vu aXZlcnNhbF9wbGFuZShkZXZfcHJpdiwgcGlwZSwgcGxhbmUpIHsKLQkJc3RydWN0IHNrbF9wbGFu ZV93bSAqaHdfcGxhbmVfd20sICpzd19wbGFuZV93bTsKLQotCQlod19wbGFuZV93bSA9ICZody0+ d20ucGxhbmVzW3BsYW5lXTsKLQkJc3dfcGxhbmVfd20gPSAmc3dfd20tPnBsYW5lc1twbGFuZV07 Ci0KLQkJLyogV2F0ZXJtYXJrcyAqLwotCQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xl dmVsOyBsZXZlbCsrKSB7Ci0JCQlpZiAoc2tsX3dtX2xldmVsX2VxdWFscygmaHdfcGxhbmVfd20t PndtW2xldmVsXSwKLQkJCQkJCSZzd19wbGFuZV93bS0+d21bbGV2ZWxdKSkKLQkJCQljb250aW51 ZTsKLQotCQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBXTSBwaXBlICVjIHBsYW5lICVkIGxldmVs ICVkIChleHBlY3RlZCBlPSVkIGI9JXUgbD0ldSwgZ290IGU9JWQgYj0ldSBsPSV1KVxuIiwKLQkJ CQkgIHBpcGVfbmFtZShwaXBlKSwgcGxhbmUgKyAxLCBsZXZlbCwKLQkJCQkgIHN3X3BsYW5lX3dt LT53bVtsZXZlbF0ucGxhbmVfZW4sCi0JCQkJICBzd19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5l X3Jlc19iLAotCQkJCSAgc3dfcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfbCwKLQkJCQkg IGh3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfZW4sCi0JCQkJICBod19wbGFuZV93bS0+d21b bGV2ZWxdLnBsYW5lX3Jlc19iLAotCQkJCSAgaHdfcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9y ZXNfbCk7Ci0JCX0KLQotCQlpZiAoIXNrbF93bV9sZXZlbF9lcXVhbHMoJmh3X3BsYW5lX3dtLT50 cmFuc193bSwKLQkJCQkJICZzd19wbGFuZV93bS0+dHJhbnNfd20pKSB7Ci0JCQlEUk1fRVJST1Io Im1pc21hdGNoIGluIHRyYW5zIFdNIHBpcGUgJWMgcGxhbmUgJWQgKGV4cGVjdGVkIGU9JWQgYj0l dSBsPSV1LCBnb3QgZT0lZCBiPSV1IGw9JXUpXG4iLAotCQkJCSAgcGlwZV9uYW1lKHBpcGUpLCBw bGFuZSArIDEsCi0JCQkJICBzd19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfZW4sCi0JCQkJICBz d19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2IsCi0JCQkJICBzd19wbGFuZV93bS0+dHJh bnNfd20ucGxhbmVfcmVzX2wsCi0JCQkJICBod19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfZW4s Ci0JCQkJICBod19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2IsCi0JCQkJICBod19wbGFu ZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wpOwotCQl9Ci0KLQkJLyogRERCICovCi0JCWh3X2Rk Yl9lbnRyeSA9ICZody0+ZGRiX3lbcGxhbmVdOwotCQlzd19kZGJfZW50cnkgPSAmdG9faW50ZWxf Y3J0Y19zdGF0ZShuZXdfc3RhdGUpLT53bS5za2wucGxhbmVfZGRiX3lbcGxhbmVdOwotCi0JCWlm ICghc2tsX2RkYl9lbnRyeV9lcXVhbChod19kZGJfZW50cnksIHN3X2RkYl9lbnRyeSkpIHsKLQkJ CURSTV9FUlJPUigibWlzbWF0Y2ggaW4gRERCIHN0YXRlIHBpcGUgJWMgcGxhbmUgJWQgKGV4cGVj dGVkICgldSwldSksIGZvdW5kICgldSwldSkpXG4iLAotCQkJCSAgcGlwZV9uYW1lKHBpcGUpLCBw bGFuZSArIDEsCi0JCQkJICBzd19kZGJfZW50cnktPnN0YXJ0LCBzd19kZGJfZW50cnktPmVuZCwK LQkJCQkgIGh3X2RkYl9lbnRyeS0+c3RhcnQsIGh3X2RkYl9lbnRyeS0+ZW5kKTsKLQkJfQotCX0K LQotCS8qCi0JICogY3Vyc29yCi0JICogSWYgdGhlIGN1cnNvciBwbGFuZSBpc24ndCBhY3RpdmUs IHdlIG1heSBub3QgaGF2ZSB1cGRhdGVkIGl0J3MgZGRiCi0JICogYWxsb2NhdGlvbi4gSW4gdGhh dCBjYXNlIHNpbmNlIHRoZSBkZGIgYWxsb2NhdGlvbiB3aWxsIGJlIHVwZGF0ZWQKLQkgKiBvbmNl IHRoZSBwbGFuZSBiZWNvbWVzIHZpc2libGUsIHdlIGNhbiBza2lwIHRoaXMgY2hlY2sKLQkgKi8K LQlpZiAoMSkgewotCQlzdHJ1Y3Qgc2tsX3BsYW5lX3dtICpod19wbGFuZV93bSwgKnN3X3BsYW5l X3dtOwotCi0JCWh3X3BsYW5lX3dtID0gJmh3LT53bS5wbGFuZXNbUExBTkVfQ1VSU09SXTsKLQkJ c3dfcGxhbmVfd20gPSAmc3dfd20tPnBsYW5lc1tQTEFORV9DVVJTT1JdOwotCi0JCS8qIFdhdGVy bWFya3MgKi8KLQkJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykg ewotCQkJaWYgKHNrbF93bV9sZXZlbF9lcXVhbHMoJmh3X3BsYW5lX3dtLT53bVtsZXZlbF0sCi0J CQkJCQkmc3dfcGxhbmVfd20tPndtW2xldmVsXSkpCi0JCQkJY29udGludWU7Ci0KLQkJCURSTV9F UlJPUigibWlzbWF0Y2ggaW4gV00gcGlwZSAlYyBjdXJzb3IgbGV2ZWwgJWQgKGV4cGVjdGVkIGU9 JWQgYj0ldSBsPSV1LCBnb3QgZT0lZCBiPSV1IGw9JXUpXG4iLAotCQkJCSAgcGlwZV9uYW1lKHBp cGUpLCBsZXZlbCwKLQkJCQkgIHN3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfZW4sCi0JCQkJ ICBzd19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iLAotCQkJCSAgc3dfcGxhbmVfd20t PndtW2xldmVsXS5wbGFuZV9yZXNfbCwKLQkJCQkgIGh3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxh bmVfZW4sCi0JCQkJICBod19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iLAotCQkJCSAg aHdfcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfbCk7Ci0JCX0KLQotCQlpZiAoIXNrbF93 bV9sZXZlbF9lcXVhbHMoJmh3X3BsYW5lX3dtLT50cmFuc193bSwKLQkJCQkJICZzd19wbGFuZV93 bS0+dHJhbnNfd20pKSB7Ci0JCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIHRyYW5zIFdNIHBpcGUg JWMgY3Vyc29yIChleHBlY3RlZCBlPSVkIGI9JXUgbD0ldSwgZ290IGU9JWQgYj0ldSBsPSV1KVxu IiwKLQkJCQkgIHBpcGVfbmFtZShwaXBlKSwKLQkJCQkgIHN3X3BsYW5lX3dtLT50cmFuc193bS5w bGFuZV9lbiwKLQkJCQkgIHN3X3BsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfYiwKLQkJCQkg IHN3X3BsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfbCwKLQkJCQkgIGh3X3BsYW5lX3dtLT50 cmFuc193bS5wbGFuZV9lbiwKLQkJCQkgIGh3X3BsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNf YiwKLQkJCQkgIGh3X3BsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfbCk7Ci0JCX0KLQotCQkv KiBEREIgKi8KLQkJaHdfZGRiX2VudHJ5ID0gJmh3LT5kZGJfeVtQTEFORV9DVVJTT1JdOwotCQlz d19kZGJfZW50cnkgPSAmdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfc3RhdGUpLT53bS5za2wucGxh bmVfZGRiX3lbUExBTkVfQ1VSU09SXTsKLQotCQlpZiAoIXNrbF9kZGJfZW50cnlfZXF1YWwoaHdf ZGRiX2VudHJ5LCBzd19kZGJfZW50cnkpKSB7Ci0JCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIERE QiBzdGF0ZSBwaXBlICVjIGN1cnNvciAoZXhwZWN0ZWQgKCV1LCV1KSwgZm91bmQgKCV1LCV1KSlc biIsCi0JCQkJICBwaXBlX25hbWUocGlwZSksCi0JCQkJICBzd19kZGJfZW50cnktPnN0YXJ0LCBz d19kZGJfZW50cnktPmVuZCwKLQkJCQkgIGh3X2RkYl9lbnRyeS0+c3RhcnQsIGh3X2RkYl9lbnRy eS0+ZW5kKTsKLQkJfQotCX0KLQotCWtmcmVlKGh3KTsKLX0KLQotc3RhdGljIHZvaWQKLXZlcmlm eV9jb25uZWN0b3Jfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICAgICAgIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJICAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpuZXdfY29ubl9zdGF0ZTsKLQlpbnQgaTsKLQotCWZvcl9lYWNoX25ld19j b25uZWN0b3JfaW5fc3RhdGUoc3RhdGUsIGNvbm5lY3RvciwgbmV3X2Nvbm5fc3RhdGUsIGkpIHsK LQkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gY29ubmVjdG9yLT5lbmNvZGVyOwotCQlz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSBOVUxMOwotCi0JCWlmIChuZXdfY29u bl9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGNydGMpCi0JCQlj cnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIG5ld19jb25u X3N0YXRlLT5jcnRjKTsKLQotCQlpbnRlbF9jb25uZWN0b3JfdmVyaWZ5X3N0YXRlKGNydGNfc3Rh dGUsIG5ld19jb25uX3N0YXRlKTsKLQotCQlJOTE1X1NUQVRFX1dBUk4obmV3X2Nvbm5fc3RhdGUt PmJlc3RfZW5jb2RlciAhPSBlbmNvZGVyLAotCQkgICAgICJjb25uZWN0b3IncyBhdG9taWMgZW5j b2RlciBkb2Vzbid0IG1hdGNoIGxlZ2FjeSBlbmNvZGVyXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB2 b2lkCi12ZXJpZnlfZW5jb2Rlcl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXI7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQlzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUsICpuZXdfY29ubl9zdGF0ZTsKLQlpbnQgaTsKLQot CWZvcl9lYWNoX2ludGVsX2VuY29kZXIoZGV2LCBlbmNvZGVyKSB7Ci0JCWJvb2wgZW5hYmxlZCA9 IGZhbHNlLCBmb3VuZCA9IGZhbHNlOwotCQllbnVtIHBpcGUgcGlwZTsKLQotCQlEUk1fREVCVUdf S01TKCJbRU5DT0RFUjolZDolc11cbiIsCi0JCQkgICAgICBlbmNvZGVyLT5iYXNlLmJhc2UuaWQs Ci0JCQkgICAgICBlbmNvZGVyLT5iYXNlLm5hbWUpOwotCi0JCWZvcl9lYWNoX29sZG5ld19jb25u ZWN0b3JfaW5fc3RhdGUoc3RhdGUsIGNvbm5lY3Rvciwgb2xkX2Nvbm5fc3RhdGUsCi0JCQkJCQkg ICBuZXdfY29ubl9zdGF0ZSwgaSkgewotCQkJaWYgKG9sZF9jb25uX3N0YXRlLT5iZXN0X2VuY29k ZXIgPT0gJmVuY29kZXItPmJhc2UpCi0JCQkJZm91bmQgPSB0cnVlOwotCi0JCQlpZiAobmV3X2Nv bm5fc3RhdGUtPmJlc3RfZW5jb2RlciAhPSAmZW5jb2Rlci0+YmFzZSkKLQkJCQljb250aW51ZTsK LQkJCWZvdW5kID0gZW5hYmxlZCA9IHRydWU7Ci0KLQkJCUk5MTVfU1RBVEVfV0FSTihuZXdfY29u bl9zdGF0ZS0+Y3J0YyAhPQotCQkJCQllbmNvZGVyLT5iYXNlLmNydGMsCi0JCQkgICAgICJjb25u ZWN0b3IncyBjcnRjIGRvZXNuJ3QgbWF0Y2ggZW5jb2RlciBjcnRjXG4iKTsKLQkJfQotCi0JCWlm ICghZm91bmQpCi0JCQljb250aW51ZTsKLQotCQlJOTE1X1NUQVRFX1dBUk4oISFlbmNvZGVyLT5i YXNlLmNydGMgIT0gZW5hYmxlZCwKLQkJICAgICAiZW5jb2RlcidzIGVuYWJsZWQgc3RhdGUgbWlz bWF0Y2ggIgotCQkgICAgICIoZXhwZWN0ZWQgJWksIGZvdW5kICVpKVxuIiwKLQkJICAgICAhIWVu Y29kZXItPmJhc2UuY3J0YywgZW5hYmxlZCk7Ci0KLQkJaWYgKCFlbmNvZGVyLT5iYXNlLmNydGMp IHsKLQkJCWJvb2wgYWN0aXZlOwotCi0JCQlhY3RpdmUgPSBlbmNvZGVyLT5nZXRfaHdfc3RhdGUo ZW5jb2RlciwgJnBpcGUpOwotCQkJSTkxNV9TVEFURV9XQVJOKGFjdGl2ZSwKLQkJCSAgICAgImVu Y29kZXIgZGV0YWNoZWQgYnV0IHN0aWxsIGVuYWJsZWQgb24gcGlwZSAlYy5cbiIsCi0JCQkgICAg IHBpcGVfbmFtZShwaXBlKSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi12ZXJpZnlfY3J0 Y19zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCSAgc3RydWN0IGRybV9jcnRjX3N0YXRl ICpvbGRfY3J0Y19zdGF0ZSwKLQkJICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0 YXRlKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCXN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyOwotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50 ZWxfY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsICpz d19jb25maWc7Ci0Jc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZTsKLQlib29sIGFj dGl2ZTsKLQotCW9sZF9zdGF0ZSA9IG9sZF9jcnRjX3N0YXRlLT5zdGF0ZTsKLQlfX2RybV9hdG9t aWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShvbGRfY3J0Y19zdGF0ZSk7Ci0JcGlwZV9jb25m aWcgPSB0b19pbnRlbF9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKTsKLQltZW1zZXQocGlwZV9j b25maWcsIDAsIHNpemVvZigqcGlwZV9jb25maWcpKTsKLQlwaXBlX2NvbmZpZy0+YmFzZS5jcnRj ID0gY3J0YzsKLQlwaXBlX2NvbmZpZy0+YmFzZS5zdGF0ZSA9IG9sZF9zdGF0ZTsKLQotCURSTV9E RUJVR19LTVMoIltDUlRDOiVkOiVzXVxuIiwgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSk7Ci0K LQlhY3RpdmUgPSBkZXZfcHJpdi0+ZGlzcGxheS5nZXRfcGlwZV9jb25maWcoaW50ZWxfY3J0Yywg cGlwZV9jb25maWcpOwotCi0JLyogd2Uga2VlcCBib3RoIHBpcGVzIGVuYWJsZWQgb24gODMwICov Ci0JaWYgKElTX0k4MzAoZGV2X3ByaXYpKQotCQlhY3RpdmUgPSBuZXdfY3J0Y19zdGF0ZS0+YWN0 aXZlOwotCi0JSTkxNV9TVEFURV9XQVJOKG5ld19jcnRjX3N0YXRlLT5hY3RpdmUgIT0gYWN0aXZl LAotCSAgICAgImNydGMgYWN0aXZlIHN0YXRlIGRvZXNuJ3QgbWF0Y2ggd2l0aCBodyBzdGF0ZSAi Ci0JICAgICAiKGV4cGVjdGVkICVpLCBmb3VuZCAlaSlcbiIsIG5ld19jcnRjX3N0YXRlLT5hY3Rp dmUsIGFjdGl2ZSk7Ci0KLQlJOTE1X1NUQVRFX1dBUk4oaW50ZWxfY3J0Yy0+YWN0aXZlICE9IG5l d19jcnRjX3N0YXRlLT5hY3RpdmUsCi0JICAgICAidHJhbnNpdGlvbmFsIGFjdGl2ZSBzdGF0ZSBk b2VzIG5vdCBtYXRjaCBhdG9taWMgaHcgc3RhdGUgIgotCSAgICAgIihleHBlY3RlZCAlaSwgZm91 bmQgJWkpXG4iLCBuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlLCBpbnRlbF9jcnRjLT5hY3RpdmUpOwot Ci0JZm9yX2VhY2hfZW5jb2Rlcl9vbl9jcnRjKGRldiwgY3J0YywgZW5jb2RlcikgewotCQllbnVt IHBpcGUgcGlwZTsKLQotCQlhY3RpdmUgPSBlbmNvZGVyLT5nZXRfaHdfc3RhdGUoZW5jb2Rlciwg JnBpcGUpOwotCQlJOTE1X1NUQVRFX1dBUk4oYWN0aXZlICE9IG5ld19jcnRjX3N0YXRlLT5hY3Rp dmUsCi0JCQkiW0VOQ09ERVI6JWldIGFjdGl2ZSAlaSB3aXRoIGNydGMgYWN0aXZlICVpXG4iLAot CQkJZW5jb2Rlci0+YmFzZS5iYXNlLmlkLCBhY3RpdmUsIG5ld19jcnRjX3N0YXRlLT5hY3RpdmUp OwotCi0JCUk5MTVfU1RBVEVfV0FSTihhY3RpdmUgJiYgaW50ZWxfY3J0Yy0+cGlwZSAhPSBwaXBl LAotCQkJCSJFbmNvZGVyIGNvbm5lY3RlZCB0byB3cm9uZyBwaXBlICVjXG4iLAotCQkJCXBpcGVf bmFtZShwaXBlKSk7Ci0KLQkJaWYgKGFjdGl2ZSkKLQkJCWVuY29kZXItPmdldF9jb25maWcoZW5j b2RlciwgcGlwZV9jb25maWcpOwotCX0KLQotCWludGVsX2NydGNfY29tcHV0ZV9waXhlbF9yYXRl KHBpcGVfY29uZmlnKTsKLQotCWlmICghbmV3X2NydGNfc3RhdGUtPmFjdGl2ZSkKLQkJcmV0dXJu OwotCi0JaW50ZWxfcGlwZV9jb25maWdfc2FuaXR5X2NoZWNrKGRldl9wcml2LCBwaXBlX2NvbmZp Zyk7Ci0KLQlzd19jb25maWcgPSB0b19pbnRlbF9jcnRjX3N0YXRlKG5ld19jcnRjX3N0YXRlKTsK LQlpZiAoIWludGVsX3BpcGVfY29uZmlnX2NvbXBhcmUoZGV2X3ByaXYsIHN3X2NvbmZpZywKLQkJ CQkgICAgICAgcGlwZV9jb25maWcsIGZhbHNlKSkgewotCQlJOTE1X1NUQVRFX1dBUk4oMSwgInBp cGUgc3RhdGUgZG9lc24ndCBtYXRjaCFcbiIpOwotCQlpbnRlbF9kdW1wX3BpcGVfY29uZmlnKGlu dGVsX2NydGMsIHBpcGVfY29uZmlnLAotCQkJCSAgICAgICAiW2h3IHN0YXRlXSIpOwotCQlpbnRl bF9kdW1wX3BpcGVfY29uZmlnKGludGVsX2NydGMsIHN3X2NvbmZpZywKLQkJCQkgICAgICAgIltz dyBzdGF0ZV0iKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnRlbF92ZXJpZnlfcGxhbmVzKHN0 cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmU7Ci0JY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKLQlp bnQgaTsKLQotCWZvcl9lYWNoX25ld19pbnRlbF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUs Ci0JCQkJCSAgcGxhbmVfc3RhdGUsIGkpCi0JCWFzc2VydF9wbGFuZShwbGFuZSwgcGxhbmVfc3Rh dGUtPnNsYXZlIHx8Ci0JCQkgICAgIHBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpOwotfQotCi1z dGF0aWMgdm9pZAotdmVyaWZ5X3NpbmdsZV9kcGxsX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKLQkJCSBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCwKLQkJCSBz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdfc3Rh dGUpCi17Ci0Jc3RydWN0IGludGVsX2RwbGxfaHdfc3RhdGUgZHBsbF9od19zdGF0ZTsKLQl1bnNp Z25lZCBpbnQgY3J0Y19tYXNrOwotCWJvb2wgYWN0aXZlOwotCi0JbWVtc2V0KCZkcGxsX2h3X3N0 YXRlLCAwLCBzaXplb2YoZHBsbF9od19zdGF0ZSkpOwotCi0JRFJNX0RFQlVHX0tNUygiJXNcbiIs IHBsbC0+aW5mby0+bmFtZSk7Ci0KLQlhY3RpdmUgPSBwbGwtPmluZm8tPmZ1bmNzLT5nZXRfaHdf c3RhdGUoZGV2X3ByaXYsIHBsbCwgJmRwbGxfaHdfc3RhdGUpOwotCi0JaWYgKCEocGxsLT5pbmZv LT5mbGFncyAmIElOVEVMX0RQTExfQUxXQVlTX09OKSkgewotCQlJOTE1X1NUQVRFX1dBUk4oIXBs bC0+b24gJiYgcGxsLT5hY3RpdmVfbWFzaywKLQkJICAgICAicGxsIGluIGFjdGl2ZSB1c2UgYnV0 IG5vdCBvbiBpbiBzdyB0cmFja2luZ1xuIik7Ci0JCUk5MTVfU1RBVEVfV0FSTihwbGwtPm9uICYm ICFwbGwtPmFjdGl2ZV9tYXNrLAotCQkgICAgICJwbGwgaXMgb24gYnV0IG5vdCB1c2VkIGJ5IGFu eSBhY3RpdmUgY3J0Y1xuIik7Ci0JCUk5MTVfU1RBVEVfV0FSTihwbGwtPm9uICE9IGFjdGl2ZSwK LQkJICAgICAicGxsIG9uIHN0YXRlIG1pc21hdGNoIChleHBlY3RlZCAlaSwgZm91bmQgJWkpXG4i LAotCQkgICAgIHBsbC0+b24sIGFjdGl2ZSk7Ci0JfQotCi0JaWYgKCFjcnRjKSB7Ci0JCUk5MTVf U1RBVEVfV0FSTihwbGwtPmFjdGl2ZV9tYXNrICYgfnBsbC0+c3RhdGUuY3J0Y19tYXNrLAotCQkJ CSJtb3JlIGFjdGl2ZSBwbGwgdXNlcnMgdGhhbiByZWZlcmVuY2VzOiAleCB2cyAleFxuIiwKLQkJ CQlwbGwtPmFjdGl2ZV9tYXNrLCBwbGwtPnN0YXRlLmNydGNfbWFzayk7Ci0KLQkJcmV0dXJuOwot CX0KLQotCWNydGNfbWFzayA9IGRybV9jcnRjX21hc2soY3J0Yyk7Ci0KLQlpZiAobmV3X3N0YXRl LT5hY3RpdmUpCi0JCUk5MTVfU1RBVEVfV0FSTighKHBsbC0+YWN0aXZlX21hc2sgJiBjcnRjX21h c2spLAotCQkJCSJwbGwgYWN0aXZlIG1pc21hdGNoIChleHBlY3RlZCBwaXBlICVjIGluIGFjdGl2 ZSBtYXNrIDB4JTAyeClcbiIsCi0JCQkJcGlwZV9uYW1lKGRybV9jcnRjX2luZGV4KGNydGMpKSwg cGxsLT5hY3RpdmVfbWFzayk7Ci0JZWxzZQotCQlJOTE1X1NUQVRFX1dBUk4ocGxsLT5hY3RpdmVf bWFzayAmIGNydGNfbWFzaywKLQkJCQkicGxsIGFjdGl2ZSBtaXNtYXRjaCAoZGlkbid0IGV4cGVj dCBwaXBlICVjIGluIGFjdGl2ZSBtYXNrIDB4JTAyeClcbiIsCi0JCQkJcGlwZV9uYW1lKGRybV9j cnRjX2luZGV4KGNydGMpKSwgcGxsLT5hY3RpdmVfbWFzayk7Ci0KLQlJOTE1X1NUQVRFX1dBUk4o IShwbGwtPnN0YXRlLmNydGNfbWFzayAmIGNydGNfbWFzayksCi0JCQkicGxsIGVuYWJsZWQgY3J0 Y3MgbWlzbWF0Y2ggKGV4cGVjdGVkIDB4JXggaW4gMHglMDJ4KVxuIiwKLQkJCWNydGNfbWFzaywg cGxsLT5zdGF0ZS5jcnRjX21hc2spOwotCi0JSTkxNV9TVEFURV9XQVJOKHBsbC0+b24gJiYgbWVt Y21wKCZwbGwtPnN0YXRlLmh3X3N0YXRlLAotCQkJCQkgICZkcGxsX2h3X3N0YXRlLAotCQkJCQkg IHNpemVvZihkcGxsX2h3X3N0YXRlKSksCi0JCQkicGxsIGh3IHN0YXRlIG1pc21hdGNoXG4iKTsK LX0KLQotc3RhdGljIHZvaWQKLXZlcmlmeV9zaGFyZWRfZHBsbF9zdGF0ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkgc3RydWN0IGRybV9jcnRjX3N0 YXRlICpvbGRfY3J0Y19zdGF0ZSwKLQkJCSBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm5ld19jcnRj X3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX3N0YXRlID0gdG9faW50ZWxfY3J0 Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSk7Ci0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19z dGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUobmV3X2NydGNfc3RhdGUpOwotCi0JaWYgKG5ld19z dGF0ZS0+c2hhcmVkX2RwbGwpCi0JCXZlcmlmeV9zaW5nbGVfZHBsbF9zdGF0ZShkZXZfcHJpdiwg bmV3X3N0YXRlLT5zaGFyZWRfZHBsbCwgY3J0YywgbmV3X2NydGNfc3RhdGUpOwotCi0JaWYgKG9s ZF9zdGF0ZS0+c2hhcmVkX2RwbGwgJiYKLQkgICAgb2xkX3N0YXRlLT5zaGFyZWRfZHBsbCAhPSBu ZXdfc3RhdGUtPnNoYXJlZF9kcGxsKSB7Ci0JCXVuc2lnbmVkIGludCBjcnRjX21hc2sgPSBkcm1f Y3J0Y19tYXNrKGNydGMpOwotCQlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCA9IG9sZF9z dGF0ZS0+c2hhcmVkX2RwbGw7Ci0KLQkJSTkxNV9TVEFURV9XQVJOKHBsbC0+YWN0aXZlX21hc2sg JiBjcnRjX21hc2ssCi0JCQkJInBsbCBhY3RpdmUgbWlzbWF0Y2ggKGRpZG4ndCBleHBlY3QgcGlw ZSAlYyBpbiBhY3RpdmUgbWFzaylcbiIsCi0JCQkJcGlwZV9uYW1lKGRybV9jcnRjX2luZGV4KGNy dGMpKSk7Ci0JCUk5MTVfU1RBVEVfV0FSTihwbGwtPnN0YXRlLmNydGNfbWFzayAmIGNydGNfbWFz aywKLQkJCQkicGxsIGVuYWJsZWQgY3J0Y3MgbWlzbWF0Y2ggKGZvdW5kICV4IGluIGVuYWJsZWQg bWFzaylcbiIsCi0JCQkJcGlwZV9uYW1lKGRybV9jcnRjX2luZGV4KGNydGMpKSk7Ci0JfQotfQot Ci1zdGF0aWMgdm9pZAotaW50ZWxfbW9kZXNldF92ZXJpZnlfY3J0YyhzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCi0JCQkgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCSAgc3RydWN0 IGRybV9jcnRjX3N0YXRlICpvbGRfc3RhdGUsCi0JCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq bmV3X3N0YXRlKQotewotCWlmICghbmVlZHNfbW9kZXNldChuZXdfc3RhdGUpICYmCi0JICAgICF0 b19pbnRlbF9jcnRjX3N0YXRlKG5ld19zdGF0ZSktPnVwZGF0ZV9waXBlKQotCQlyZXR1cm47Ci0K LQl2ZXJpZnlfd21fc3RhdGUoY3J0YywgbmV3X3N0YXRlKTsKLQl2ZXJpZnlfY29ubmVjdG9yX3N0 YXRlKGNydGMtPmRldiwgc3RhdGUsIGNydGMpOwotCXZlcmlmeV9jcnRjX3N0YXRlKGNydGMsIG9s ZF9zdGF0ZSwgbmV3X3N0YXRlKTsKLQl2ZXJpZnlfc2hhcmVkX2RwbGxfc3RhdGUoY3J0Yy0+ZGV2 LCBjcnRjLCBvbGRfc3RhdGUsIG5ld19zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi12ZXJpZnlf ZGlzYWJsZWRfZHBsbF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQlpbnQgaTsKLQotCWZv ciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+bnVtX3NoYXJlZF9kcGxsOyBpKyspCi0JCXZlcmlmeV9z aW5nbGVfZHBsbF9zdGF0ZShkZXZfcHJpdiwgJmRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0sIE5V TEwsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotaW50ZWxfbW9kZXNldF92ZXJpZnlfZGlzYWJs ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSkKLXsKLQl2ZXJpZnlfZW5jb2Rlcl9zdGF0ZShkZXYsIHN0YXRlKTsKLQl2ZXJp ZnlfY29ubmVjdG9yX3N0YXRlKGRldiwgc3RhdGUsIE5VTEwpOwotCXZlcmlmeV9kaXNhYmxlZF9k cGxsX3N0YXRlKGRldik7Ci19Ci0KIHN0YXRpYyB2b2lkIHVwZGF0ZV9zY2FubGluZV9vZmZzZXQo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7CiAJc3RydWN0IGlu dGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7CkBA IC0xMzUyMSw3ICsxMzA2OSw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2F0b21pY19jb21taXRfdGFp bChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJCWlmICghaW50ZWxfY2FuX2VuYWJs ZV9zYWd2KHN0YXRlKSkKIAkJCWludGVsX2Rpc2FibGVfc2FndihkZXZfcHJpdik7CiAKLQkJaW50 ZWxfbW9kZXNldF92ZXJpZnlfZGlzYWJsZWQoZGV2LCBzdGF0ZSk7CisJCWludGVsX3ZlcmlmeV9t b2Rlc2V0X2Rpc2FibGVkKGRldiwgc3RhdGUpOwogCX0KIAogCS8qIENvbXBsZXRlIHRoZSBldmVu dHMgZm9yIHBpcGVzIHRoYXQgaGF2ZSBub3cgYmVlbiBkaXNhYmxlZCAqLwpAQCAtMTM1ODksNyAr MTMxMzcsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCQlpZiAocHV0X2RvbWFpbnNbaV0pCiAJCQltb2Rlc2V0 X3B1dF9wb3dlcl9kb21haW5zKGRldl9wcml2LCBwdXRfZG9tYWluc1tpXSk7CiAKLQkJaW50ZWxf bW9kZXNldF92ZXJpZnlfY3J0YyhjcnRjLCBzdGF0ZSwgb2xkX2NydGNfc3RhdGUsIG5ld19jcnRj X3N0YXRlKTsKKwkJaW50ZWxfdmVyaWZ5X21vZGVzZXRfY3J0YyhjcnRjLCBzdGF0ZSwgb2xkX2Ny dGNfc3RhdGUsIG5ld19jcnRjX3N0YXRlKTsKIAl9CiAKIAlpZiAoaW50ZWxfc3RhdGUtPm1vZGVz ZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IGEzOGI5Yy4uNzc3NjdjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMTY2OCw2ICsxNjY4LDE3IEBAIGludCBpbnRlbF9nZXRf cGlwZV9mcm9tX2NydGNfaWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKIAkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBlbnVtIHRyYW5zY29k ZXIgaW50ZWxfcGlwZV90b19jcHVfdHJhbnNjb2RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJCQkJCSAgICAgZW51bSBwaXBlIHBpcGUpOwordm9pZCBpbnRlbF9waXBlX2Nv bmZpZ19zYW5pdHlfY2hlY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJ CSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOworYm9vbAor aW50ZWxfcGlwZV9jb25maWdfY29tcGFyZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCisJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjdXJyZW50X2NvbmZpZywKKwkJCSAg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAorCQkJICBib29sIGFkanVzdCk7 Cit2b2lkIGludGVsX2R1bXBfcGlwZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJ CQkgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAorCQkJICAgIGNvbnN0 IGNoYXIgKmNvbnRleHQpOwordm9pZCBpbnRlbF9jcnRjX2NvbXB1dGVfcGl4ZWxfcmF0ZShzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiBzdGF0aWMgaW5saW5lIGJvb2wKIGlu dGVsX2NydGNfaGFzX3R5cGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCiAJCSAgICBlbnVtIGludGVsX291dHB1dF90eXBlIHR5cGUpCkBAIC0xNzYwLDYgKzE3NzEs NyBAQCB2b2lkIGFzc2VydF9mZGlfcnhfcGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKIHZvaWQgYXNzZXJ0X3BpcGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LCBlbnVtIHBpcGUgcGlwZSwgYm9vbCBzdGF0ZSk7CiAjZGVmaW5lIGFzc2VydF9waXBlX2VuYWJs ZWQoZCwgcCkgYXNzZXJ0X3BpcGUoZCwgcCwgdHJ1ZSkKICNkZWZpbmUgYXNzZXJ0X3BpcGVfZGlz YWJsZWQoZCwgcCkgYXNzZXJ0X3BpcGUoZCwgcCwgZmFsc2UpCit2b2lkIGFzc2VydF9wbGFuZShz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLCBib29sIHN0YXRlKTsKIHZvaWQgaW50ZWxfcHJlcGFy ZV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9m aW5pc2hfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaHN3 X2VuYWJsZV9wYzgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3ZlcmlmeS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfdmVyaWZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwLi40 Yzg5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZXJp ZnkuYwpAQCAtMCwwICsxLDQ2NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1 ZGUgPGRybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYu aCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9wbS5oIgorI2luY2x1 ZGUgImludGVsX3ZlcmlmeS5oIgorCitzdGF0aWMgdm9pZCB2ZXJpZnlfd21fc3RhdGUoc3RydWN0 IGRybV9jcnRjICpjcnRjLAorCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X3N0YXRl KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+ ZGV2KTsKKwlzdHJ1Y3Qgc2tsX2h3X3N0YXRlIHsKKwkJc3RydWN0IHNrbF9kZGJfZW50cnkgZGRi X3lbSTkxNV9NQVhfUExBTkVTXTsKKwkJc3RydWN0IHNrbF9kZGJfZW50cnkgZGRiX3V2W0k5MTVf TUFYX1BMQU5FU107CisJCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gZGRiOworCQlzdHJ1Y3Qg c2tsX3BpcGVfd20gd207CisJfSAqaHc7CisJc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqc3df ZGRiOworCXN0cnVjdCBza2xfcGlwZV93bSAqc3dfd207CisJc3RydWN0IHNrbF9kZGJfZW50cnkg Kmh3X2RkYl9lbnRyeSwgKnN3X2RkYl9lbnRyeTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJY29uc3QgZW51bSBwaXBlIHBpcGUgPSBpbnRl bF9jcnRjLT5waXBlOworCWludCBwbGFuZSwgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9tYXhf bGV2ZWwoZGV2X3ByaXYpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA5IHx8ICFuZXdf c3RhdGUtPmFjdGl2ZSkKKwkJcmV0dXJuOworCisJaHcgPSBremFsbG9jKHNpemVvZigqaHcpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWh3KQorCQlyZXR1cm47CisKKwlza2xfcGlwZV93bV9nZXRfaHdf c3RhdGUoaW50ZWxfY3J0YywgJmh3LT53bSk7CisJc3dfd20gPSAmdG9faW50ZWxfY3J0Y19zdGF0 ZShuZXdfc3RhdGUpLT53bS5za2wub3B0aW1hbDsKKworCXNrbF9waXBlX2RkYl9nZXRfaHdfc3Rh dGUoaW50ZWxfY3J0YywgaHctPmRkYl95LCBody0+ZGRiX3V2KTsKKworCXNrbF9kZGJfZ2V0X2h3 X3N0YXRlKGRldl9wcml2LCAmaHctPmRkYik7CisJc3dfZGRiID0gJmRldl9wcml2LT53bS5za2xf aHcuZGRiOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYKKwkgICAgaHctPmRk Yi5lbmFibGVkX3NsaWNlcyAhPSBzd19kZGItPmVuYWJsZWRfc2xpY2VzKQorCQlEUk1fRVJST1Io Im1pc21hdGNoIGluIERCVUYgU2xpY2VzIChleHBlY3RlZCAldSwgZ290ICV1KVxuIiwKKwkJCSAg c3dfZGRiLT5lbmFibGVkX3NsaWNlcywKKwkJCSAgaHctPmRkYi5lbmFibGVkX3NsaWNlcyk7CisK KwkvKiBwbGFuZXMgKi8KKwlmb3JfZWFjaF91bml2ZXJzYWxfcGxhbmUoZGV2X3ByaXYsIHBpcGUs IHBsYW5lKSB7CisJCXN0cnVjdCBza2xfcGxhbmVfd20gKmh3X3BsYW5lX3dtLCAqc3dfcGxhbmVf d207CisKKwkJaHdfcGxhbmVfd20gPSAmaHctPndtLnBsYW5lc1twbGFuZV07CisJCXN3X3BsYW5l X3dtID0gJnN3X3dtLT5wbGFuZXNbcGxhbmVdOworCisJCS8qIFdhdGVybWFya3MgKi8KKwkJZm9y IChsZXZlbCA9IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgeworCQkJaWYgKHNrbF93 bV9sZXZlbF9lcXVhbHMoJmh3X3BsYW5lX3dtLT53bVtsZXZlbF0sCisJCQkJCQkmc3dfcGxhbmVf d20tPndtW2xldmVsXSkpCisJCQkJY29udGludWU7CisKKwkJCURSTV9FUlJPUigibWlzbWF0Y2gg aW4gV00gcGlwZSAlYyBwbGFuZSAlZCBsZXZlbCAlZCAoZXhwZWN0ZWQgZT0lZCBiPSV1IGw9JXUs IGdvdCBlPSVkIGI9JXUgbD0ldSlcbiIsCisJCQkJICBwaXBlX25hbWUocGlwZSksIHBsYW5lICsg MSwgbGV2ZWwsCisJCQkJICBzd19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX2VuLAorCQkJCSAg c3dfcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfYiwKKwkJCQkgIHN3X3BsYW5lX3dtLT53 bVtsZXZlbF0ucGxhbmVfcmVzX2wsCisJCQkJICBod19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5l X2VuLAorCQkJCSAgaHdfcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfYiwKKwkJCQkgIGh3 X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2wpOworCQl9CisKKwkJaWYgKCFza2xfd21f bGV2ZWxfZXF1YWxzKCZod19wbGFuZV93bS0+dHJhbnNfd20sCisJCQkJCSAmc3dfcGxhbmVfd20t PnRyYW5zX3dtKSkgeworCQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiB0cmFucyBXTSBwaXBlICVj IHBsYW5lICVkIChleHBlY3RlZCBlPSVkIGI9JXUgbD0ldSwgZ290IGU9JWQgYj0ldSBsPSV1KVxu IiwKKwkJCQkgIHBpcGVfbmFtZShwaXBlKSwgcGxhbmUgKyAxLAorCQkJCSAgc3dfcGxhbmVfd20t PnRyYW5zX3dtLnBsYW5lX2VuLAorCQkJCSAgc3dfcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX3Jl c19iLAorCQkJCSAgc3dfcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX3Jlc19sLAorCQkJCSAgaHdf cGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX2VuLAorCQkJCSAgaHdfcGxhbmVfd20tPnRyYW5zX3dt LnBsYW5lX3Jlc19iLAorCQkJCSAgaHdfcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX3Jlc19sKTsK KwkJfQorCisJCS8qIEREQiAqLworCQlod19kZGJfZW50cnkgPSAmaHctPmRkYl95W3BsYW5lXTsK KwkJc3dfZGRiX2VudHJ5ID0gJnRvX2ludGVsX2NydGNfc3RhdGUobmV3X3N0YXRlKS0+d20uc2ts LnBsYW5lX2RkYl95W3BsYW5lXTsKKworCQlpZiAoIXNrbF9kZGJfZW50cnlfZXF1YWwoaHdfZGRi X2VudHJ5LCBzd19kZGJfZW50cnkpKSB7CisJCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIEREQiBz dGF0ZSBwaXBlICVjIHBsYW5lICVkIChleHBlY3RlZCAoJXUsJXUpLCBmb3VuZCAoJXUsJXUpKVxu IiwKKwkJCQkgIHBpcGVfbmFtZShwaXBlKSwgcGxhbmUgKyAxLAorCQkJCSAgc3dfZGRiX2VudHJ5 LT5zdGFydCwgc3dfZGRiX2VudHJ5LT5lbmQsCisJCQkJICBod19kZGJfZW50cnktPnN0YXJ0LCBo d19kZGJfZW50cnktPmVuZCk7CisJCX0KKwl9CisKKwkvKgorCSAqIGN1cnNvcgorCSAqIElmIHRo ZSBjdXJzb3IgcGxhbmUgaXNuJ3QgYWN0aXZlLCB3ZSBtYXkgbm90IGhhdmUgdXBkYXRlZCBpdCdz IGRkYgorCSAqIGFsbG9jYXRpb24uIEluIHRoYXQgY2FzZSBzaW5jZSB0aGUgZGRiIGFsbG9jYXRp b24gd2lsbCBiZSB1cGRhdGVkCisJICogb25jZSB0aGUgcGxhbmUgYmVjb21lcyB2aXNpYmxlLCB3 ZSBjYW4gc2tpcCB0aGlzIGNoZWNrCisJICovCisJaWYgKDEpIHsKKwkJc3RydWN0IHNrbF9wbGFu ZV93bSAqaHdfcGxhbmVfd20sICpzd19wbGFuZV93bTsKKworCQlod19wbGFuZV93bSA9ICZody0+ d20ucGxhbmVzW1BMQU5FX0NVUlNPUl07CisJCXN3X3BsYW5lX3dtID0gJnN3X3dtLT5wbGFuZXNb UExBTkVfQ1VSU09SXTsKKworCQkvKiBXYXRlcm1hcmtzICovCisJCWZvciAobGV2ZWwgPSAwOyBs ZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVsKyspIHsKKwkJCWlmIChza2xfd21fbGV2ZWxfZXF1YWxz KCZod19wbGFuZV93bS0+d21bbGV2ZWxdLAorCQkJCQkJJnN3X3BsYW5lX3dtLT53bVtsZXZlbF0p KQorCQkJCWNvbnRpbnVlOworCisJCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIFdNIHBpcGUgJWMg Y3Vyc29yIGxldmVsICVkIChleHBlY3RlZCBlPSVkIGI9JXUgbD0ldSwgZ290IGU9JWQgYj0ldSBs PSV1KVxuIiwKKwkJCQkgIHBpcGVfbmFtZShwaXBlKSwgbGV2ZWwsCisJCQkJICBzd19wbGFuZV93 bS0+d21bbGV2ZWxdLnBsYW5lX2VuLAorCQkJCSAgc3dfcGxhbmVfd20tPndtW2xldmVsXS5wbGFu ZV9yZXNfYiwKKwkJCQkgIHN3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2wsCisJCQkJ ICBod19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX2VuLAorCQkJCSAgaHdfcGxhbmVfd20tPndt W2xldmVsXS5wbGFuZV9yZXNfYiwKKwkJCQkgIGh3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVf cmVzX2wpOworCQl9CisKKwkJaWYgKCFza2xfd21fbGV2ZWxfZXF1YWxzKCZod19wbGFuZV93bS0+ dHJhbnNfd20sCisJCQkJCSAmc3dfcGxhbmVfd20tPnRyYW5zX3dtKSkgeworCQkJRFJNX0VSUk9S KCJtaXNtYXRjaCBpbiB0cmFucyBXTSBwaXBlICVjIGN1cnNvciAoZXhwZWN0ZWQgZT0lZCBiPSV1 IGw9JXUsIGdvdCBlPSVkIGI9JXUgbD0ldSlcbiIsCisJCQkJICBwaXBlX25hbWUocGlwZSksCisJ CQkJICBzd19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfZW4sCisJCQkJICBzd19wbGFuZV93bS0+ dHJhbnNfd20ucGxhbmVfcmVzX2IsCisJCQkJICBzd19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVf cmVzX2wsCisJCQkJICBod19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfZW4sCisJCQkJICBod19w bGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2IsCisJCQkJICBod19wbGFuZV93bS0+dHJhbnNf d20ucGxhbmVfcmVzX2wpOworCQl9CisKKwkJLyogRERCICovCisJCWh3X2RkYl9lbnRyeSA9ICZo dy0+ZGRiX3lbUExBTkVfQ1VSU09SXTsKKwkJc3dfZGRiX2VudHJ5ID0gJnRvX2ludGVsX2NydGNf c3RhdGUobmV3X3N0YXRlKS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl07CisKKwkJ aWYgKCFza2xfZGRiX2VudHJ5X2VxdWFsKGh3X2RkYl9lbnRyeSwgc3dfZGRiX2VudHJ5KSkgewor CQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEREIgc3RhdGUgcGlwZSAlYyBjdXJzb3IgKGV4cGVj dGVkICgldSwldSksIGZvdW5kICgldSwldSkpXG4iLAorCQkJCSAgcGlwZV9uYW1lKHBpcGUpLAor CQkJCSAgc3dfZGRiX2VudHJ5LT5zdGFydCwgc3dfZGRiX2VudHJ5LT5lbmQsCisJCQkJICBod19k ZGJfZW50cnktPnN0YXJ0LCBod19kZGJfZW50cnktPmVuZCk7CisJCX0KKwl9CisKKwlrZnJlZSho dyk7Cit9CisKKy8qIENyb3NzIGNoZWNrIHRoZSBhY3R1YWwgaHcgc3RhdGUgd2l0aCBvdXIgb3du IG1vZGVzZXQgc3RhdGUgdHJhY2tpbmcgKGFuZCBpdCdzCisgKiBpbnRlcm5hbCBjb25zaXN0ZW5j eSkuICovCitzdGF0aWMgdm9pZCBpbnRlbF9jb25uZWN0b3JfdmVyaWZ5X3N0YXRlKHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkJIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICpjb25uX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uX3N0YXRlLT5jb25uZWN0b3IpOworCisJRFJNX0RFQlVH X0tNUygiW0NPTk5FQ1RPUjolZDolc11cbiIsCisJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5iYXNl LmlkLAorCQkgICAgICBjb25uZWN0b3ItPmJhc2UubmFtZSk7CisKKwlpZiAoY29ubmVjdG9yLT5n ZXRfaHdfc3RhdGUoY29ubmVjdG9yKSkgeworCQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciA9IGNvbm5lY3Rvci0+ZW5jb2RlcjsKKworCQlJOTE1X1NUQVRFX1dBUk4oIWNydGNfc3RhdGUs CisJCQkgImNvbm5lY3RvciBlbmFibGVkIHdpdGhvdXQgYXR0YWNoZWQgY3J0Y1xuIik7CisKKwkJ aWYgKCFjcnRjX3N0YXRlKQorCQkJcmV0dXJuOworCisJCUk5MTVfU1RBVEVfV0FSTighY3J0Y19z dGF0ZS0+YWN0aXZlLAorCQkgICAgICAiY29ubmVjdG9yIGlzIGFjdGl2ZSwgYnV0IGF0dGFjaGVk IGNydGMgaXNuJ3RcbiIpOworCisJCWlmICghZW5jb2RlciB8fCBlbmNvZGVyLT50eXBlID09IElO VEVMX09VVFBVVF9EUF9NU1QpCisJCQlyZXR1cm47CisKKwkJSTkxNV9TVEFURV9XQVJOKGNvbm5f c3RhdGUtPmJlc3RfZW5jb2RlciAhPSAmZW5jb2Rlci0+YmFzZSwKKwkJCSJhdG9taWMgZW5jb2Rl ciBkb2Vzbid0IG1hdGNoIGF0dGFjaGVkIGVuY29kZXJcbiIpOworCisJCUk5MTVfU1RBVEVfV0FS Tihjb25uX3N0YXRlLT5jcnRjICE9IGVuY29kZXItPmJhc2UuY3J0YywKKwkJCSJhdHRhY2hlZCBl bmNvZGVyIGNydGMgZGlmZmVycyBmcm9tIGNvbm5lY3RvciBjcnRjXG4iKTsKKwl9IGVsc2Ugewor CQlJOTE1X1NUQVRFX1dBUk4oY3J0Y19zdGF0ZSAmJiBjcnRjX3N0YXRlLT5hY3RpdmUsCisJCQki YXR0YWNoZWQgY3J0YyBpcyBhY3RpdmUsIGJ1dCBjb25uZWN0b3IgaXNuJ3RcbiIpOworCQlJOTE1 X1NUQVRFX1dBUk4oIWNydGNfc3RhdGUgJiYgY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyLAorCQkJ ImJlc3QgZW5jb2RlciBzZXQgd2l0aG91dCBjcnRjIVxuIik7CisJfQorfQorCitzdGF0aWMgdm9p ZAordmVyaWZ5X2Nvbm5lY3Rvcl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAg ICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkgICAgICAgc3RydWN0IGRybV9j cnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25uX3N0YXRlOworCWludCBpOworCisJZm9yX2Vh Y2hfbmV3X2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yLCBuZXdfY29ubl9zdGF0 ZSwgaSkgeworCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBjb25uZWN0b3ItPmVuY29k ZXI7CisJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IE5VTEw7CisKKwkJaWYg KG5ld19jb25uX3N0YXRlLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKworCQlpZiAoY3J0 YykKKwkJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwg bmV3X2Nvbm5fc3RhdGUtPmNydGMpOworCisJCWludGVsX2Nvbm5lY3Rvcl92ZXJpZnlfc3RhdGUo Y3J0Y19zdGF0ZSwgbmV3X2Nvbm5fc3RhdGUpOworCisJCUk5MTVfU1RBVEVfV0FSTihuZXdfY29u bl9zdGF0ZS0+YmVzdF9lbmNvZGVyICE9IGVuY29kZXIsCisJCSAgICAgImNvbm5lY3RvcidzIGF0 b21pYyBlbmNvZGVyIGRvZXNuJ3QgbWF0Y2ggbGVnYWN5IGVuY29kZXJcbiIpOworCX0KK30KKwor c3RhdGljIHZvaWQKK3ZlcmlmeV9lbmNvZGVyX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZSwgKm5ld19jb25uX3N0YXRlOworCWlu dCBpOworCisJZm9yX2VhY2hfaW50ZWxfZW5jb2RlcihkZXYsIGVuY29kZXIpIHsKKwkJYm9vbCBl bmFibGVkID0gZmFsc2UsIGZvdW5kID0gZmFsc2U7CisJCWVudW0gcGlwZSBwaXBlOworCisJCURS TV9ERUJVR19LTVMoIltFTkNPREVSOiVkOiVzXVxuIiwKKwkJCSAgICAgIGVuY29kZXItPmJhc2Uu YmFzZS5pZCwKKwkJCSAgICAgIGVuY29kZXItPmJhc2UubmFtZSk7CisKKwkJZm9yX2VhY2hfb2xk bmV3X2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yLCBvbGRfY29ubl9zdGF0ZSwK KwkJCQkJCSAgIG5ld19jb25uX3N0YXRlLCBpKSB7CisJCQlpZiAob2xkX2Nvbm5fc3RhdGUtPmJl c3RfZW5jb2RlciA9PSAmZW5jb2Rlci0+YmFzZSkKKwkJCQlmb3VuZCA9IHRydWU7CisKKwkJCWlm IChuZXdfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyICE9ICZlbmNvZGVyLT5iYXNlKQorCQkJCWNv bnRpbnVlOworCQkJZm91bmQgPSBlbmFibGVkID0gdHJ1ZTsKKworCQkJSTkxNV9TVEFURV9XQVJO KG5ld19jb25uX3N0YXRlLT5jcnRjICE9CisJCQkJCWVuY29kZXItPmJhc2UuY3J0YywKKwkJCSAg ICAgImNvbm5lY3RvcidzIGNydGMgZG9lc24ndCBtYXRjaCBlbmNvZGVyIGNydGNcbiIpOworCQl9 CisKKwkJaWYgKCFmb3VuZCkKKwkJCWNvbnRpbnVlOworCisJCUk5MTVfU1RBVEVfV0FSTighIWVu Y29kZXItPmJhc2UuY3J0YyAhPSBlbmFibGVkLAorCQkgICAgICJlbmNvZGVyJ3MgZW5hYmxlZCBz dGF0ZSBtaXNtYXRjaCAiCisJCSAgICAgIihleHBlY3RlZCAlaSwgZm91bmQgJWkpXG4iLAorCQkg ICAgICEhZW5jb2Rlci0+YmFzZS5jcnRjLCBlbmFibGVkKTsKKworCQlpZiAoIWVuY29kZXItPmJh c2UuY3J0YykgeworCQkJYm9vbCBhY3RpdmU7CisKKwkJCWFjdGl2ZSA9IGVuY29kZXItPmdldF9o d19zdGF0ZShlbmNvZGVyLCAmcGlwZSk7CisJCQlJOTE1X1NUQVRFX1dBUk4oYWN0aXZlLAorCQkJ ICAgICAiZW5jb2RlciBkZXRhY2hlZCBidXQgc3RpbGwgZW5hYmxlZCBvbiBwaXBlICVjLlxuIiwK KwkJCSAgICAgcGlwZV9uYW1lKHBpcGUpKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3Zl cmlmeV9jcnRjX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLAorCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3 X2NydGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJc3RydWN0 IGludGVsX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMg PSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2Nv bmZpZywgKnN3X2NvbmZpZzsKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlOwor CWJvb2wgYWN0aXZlOworCisJb2xkX3N0YXRlID0gb2xkX2NydGNfc3RhdGUtPnN0YXRlOworCV9f ZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKG9sZF9jcnRjX3N0YXRlKTsKKwlw aXBlX2NvbmZpZyA9IHRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUpOworCW1lbXNl dChwaXBlX2NvbmZpZywgMCwgc2l6ZW9mKCpwaXBlX2NvbmZpZykpOworCXBpcGVfY29uZmlnLT5i YXNlLmNydGMgPSBjcnRjOworCXBpcGVfY29uZmlnLT5iYXNlLnN0YXRlID0gb2xkX3N0YXRlOwor CisJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWQ6JXNdXG4iLCBjcnRjLT5iYXNlLmlkLCBjcnRjLT5u YW1lKTsKKworCWFjdGl2ZSA9IGRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyhpbnRl bF9jcnRjLCBwaXBlX2NvbmZpZyk7CisKKwkvKiB3ZSBrZWVwIGJvdGggcGlwZXMgZW5hYmxlZCBv biA4MzAgKi8KKwlpZiAoSVNfSTgzMChkZXZfcHJpdikpCisJCWFjdGl2ZSA9IG5ld19jcnRjX3N0 YXRlLT5hY3RpdmU7CisKKwlJOTE1X1NUQVRFX1dBUk4obmV3X2NydGNfc3RhdGUtPmFjdGl2ZSAh PSBhY3RpdmUsCisJICAgICAiY3J0YyBhY3RpdmUgc3RhdGUgZG9lc24ndCBtYXRjaCB3aXRoIGh3 IHN0YXRlICIKKwkgICAgICIoZXhwZWN0ZWQgJWksIGZvdW5kICVpKVxuIiwgbmV3X2NydGNfc3Rh dGUtPmFjdGl2ZSwgYWN0aXZlKTsKKworCUk5MTVfU1RBVEVfV0FSTihpbnRlbF9jcnRjLT5hY3Rp dmUgIT0gbmV3X2NydGNfc3RhdGUtPmFjdGl2ZSwKKwkgICAgICJ0cmFuc2l0aW9uYWwgYWN0aXZl IHN0YXRlIGRvZXMgbm90IG1hdGNoIGF0b21pYyBodyBzdGF0ZSAiCisJICAgICAiKGV4cGVjdGVk ICVpLCBmb3VuZCAlaSlcbiIsIG5ld19jcnRjX3N0YXRlLT5hY3RpdmUsIGludGVsX2NydGMtPmFj dGl2ZSk7CisKKwlmb3JfZWFjaF9lbmNvZGVyX29uX2NydGMoZGV2LCBjcnRjLCBlbmNvZGVyKSB7 CisJCWVudW0gcGlwZSBwaXBlOworCisJCWFjdGl2ZSA9IGVuY29kZXItPmdldF9od19zdGF0ZShl bmNvZGVyLCAmcGlwZSk7CisJCUk5MTVfU1RBVEVfV0FSTihhY3RpdmUgIT0gbmV3X2NydGNfc3Rh dGUtPmFjdGl2ZSwKKwkJCSJbRU5DT0RFUjolaV0gYWN0aXZlICVpIHdpdGggY3J0YyBhY3RpdmUg JWlcbiIsCisJCQllbmNvZGVyLT5iYXNlLmJhc2UuaWQsIGFjdGl2ZSwgbmV3X2NydGNfc3RhdGUt PmFjdGl2ZSk7CisKKwkJSTkxNV9TVEFURV9XQVJOKGFjdGl2ZSAmJiBpbnRlbF9jcnRjLT5waXBl ICE9IHBpcGUsCisJCQkJIkVuY29kZXIgY29ubmVjdGVkIHRvIHdyb25nIHBpcGUgJWNcbiIsCisJ CQkJcGlwZV9uYW1lKHBpcGUpKTsKKworCQlpZiAoYWN0aXZlKQorCQkJZW5jb2Rlci0+Z2V0X2Nv bmZpZyhlbmNvZGVyLCBwaXBlX2NvbmZpZyk7CisJfQorCisJaW50ZWxfY3J0Y19jb21wdXRlX3Bp eGVsX3JhdGUocGlwZV9jb25maWcpOworCisJaWYgKCFuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlKQor CQlyZXR1cm47CisKKwlpbnRlbF9waXBlX2NvbmZpZ19zYW5pdHlfY2hlY2soZGV2X3ByaXYsIHBp cGVfY29uZmlnKTsKKworCXN3X2NvbmZpZyA9IHRvX2ludGVsX2NydGNfc3RhdGUobmV3X2NydGNf c3RhdGUpOworCWlmICghaW50ZWxfcGlwZV9jb25maWdfY29tcGFyZShkZXZfcHJpdiwgc3dfY29u ZmlnLAorCQkJCSAgICAgICBwaXBlX2NvbmZpZywgZmFsc2UpKSB7CisJCUk5MTVfU1RBVEVfV0FS TigxLCAicGlwZSBzdGF0ZSBkb2Vzbid0IG1hdGNoIVxuIik7CisJCWludGVsX2R1bXBfcGlwZV9j b25maWcoaW50ZWxfY3J0YywgcGlwZV9jb25maWcsCisJCQkJICAgICAgICJbaHcgc3RhdGVdIik7 CisJCWludGVsX2R1bXBfcGlwZV9jb25maWcoaW50ZWxfY3J0Yywgc3dfY29uZmlnLAorCQkJCSAg ICAgICAiW3N3IHN0YXRlXSIpOworCX0KK30KKwordm9pZAoraW50ZWxfdmVyaWZ5X3BsYW5lcyhz dHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lOworCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJ aW50IGk7CisKKwlmb3JfZWFjaF9uZXdfaW50ZWxfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5l LAorCQkJCQkgIHBsYW5lX3N0YXRlLCBpKQorCQlhc3NlcnRfcGxhbmUocGxhbmUsIHBsYW5lX3N0 YXRlLT5zbGF2ZSB8fAorCQkJICAgICBwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKTsKK30KKwor c3RhdGljIHZvaWQKK3ZlcmlmeV9zaW5nbGVfZHBsbF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCisJCQkgc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwsCisJCQkg c3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X3N0 YXRlKQoreworCXN0cnVjdCBpbnRlbF9kcGxsX2h3X3N0YXRlIGRwbGxfaHdfc3RhdGU7CisJdW5z aWduZWQgaW50IGNydGNfbWFzazsKKwlib29sIGFjdGl2ZTsKKworCW1lbXNldCgmZHBsbF9od19z dGF0ZSwgMCwgc2l6ZW9mKGRwbGxfaHdfc3RhdGUpKTsKKworCURSTV9ERUJVR19LTVMoIiVzXG4i LCBwbGwtPmluZm8tPm5hbWUpOworCisJYWN0aXZlID0gcGxsLT5pbmZvLT5mdW5jcy0+Z2V0X2h3 X3N0YXRlKGRldl9wcml2LCBwbGwsICZkcGxsX2h3X3N0YXRlKTsKKworCWlmICghKHBsbC0+aW5m by0+ZmxhZ3MgJiBJTlRFTF9EUExMX0FMV0FZU19PTikpIHsKKwkJSTkxNV9TVEFURV9XQVJOKCFw bGwtPm9uICYmIHBsbC0+YWN0aXZlX21hc2ssCisJCSAgICAgInBsbCBpbiBhY3RpdmUgdXNlIGJ1 dCBub3Qgb24gaW4gc3cgdHJhY2tpbmdcbiIpOworCQlJOTE1X1NUQVRFX1dBUk4ocGxsLT5vbiAm JiAhcGxsLT5hY3RpdmVfbWFzaywKKwkJICAgICAicGxsIGlzIG9uIGJ1dCBub3QgdXNlZCBieSBh bnkgYWN0aXZlIGNydGNcbiIpOworCQlJOTE1X1NUQVRFX1dBUk4ocGxsLT5vbiAhPSBhY3RpdmUs CisJCSAgICAgInBsbCBvbiBzdGF0ZSBtaXNtYXRjaCAoZXhwZWN0ZWQgJWksIGZvdW5kICVpKVxu IiwKKwkJICAgICBwbGwtPm9uLCBhY3RpdmUpOworCX0KKworCWlmICghY3J0YykgeworCQlJOTE1 X1NUQVRFX1dBUk4ocGxsLT5hY3RpdmVfbWFzayAmIH5wbGwtPnN0YXRlLmNydGNfbWFzaywKKwkJ CQkibW9yZSBhY3RpdmUgcGxsIHVzZXJzIHRoYW4gcmVmZXJlbmNlczogJXggdnMgJXhcbiIsCisJ CQkJcGxsLT5hY3RpdmVfbWFzaywgcGxsLT5zdGF0ZS5jcnRjX21hc2spOworCisJCXJldHVybjsK Kwl9CisKKwljcnRjX21hc2sgPSBkcm1fY3J0Y19tYXNrKGNydGMpOworCisJaWYgKG5ld19zdGF0 ZS0+YWN0aXZlKQorCQlJOTE1X1NUQVRFX1dBUk4oIShwbGwtPmFjdGl2ZV9tYXNrICYgY3J0Y19t YXNrKSwKKwkJCQkicGxsIGFjdGl2ZSBtaXNtYXRjaCAoZXhwZWN0ZWQgcGlwZSAlYyBpbiBhY3Rp dmUgbWFzayAweCUwMngpXG4iLAorCQkJCXBpcGVfbmFtZShkcm1fY3J0Y19pbmRleChjcnRjKSks IHBsbC0+YWN0aXZlX21hc2spOworCWVsc2UKKwkJSTkxNV9TVEFURV9XQVJOKHBsbC0+YWN0aXZl X21hc2sgJiBjcnRjX21hc2ssCisJCQkJInBsbCBhY3RpdmUgbWlzbWF0Y2ggKGRpZG4ndCBleHBl Y3QgcGlwZSAlYyBpbiBhY3RpdmUgbWFzayAweCUwMngpXG4iLAorCQkJCXBpcGVfbmFtZShkcm1f Y3J0Y19pbmRleChjcnRjKSksIHBsbC0+YWN0aXZlX21hc2spOworCisJSTkxNV9TVEFURV9XQVJO KCEocGxsLT5zdGF0ZS5jcnRjX21hc2sgJiBjcnRjX21hc2spLAorCQkJInBsbCBlbmFibGVkIGNy dGNzIG1pc21hdGNoIChleHBlY3RlZCAweCV4IGluIDB4JTAyeClcbiIsCisJCQljcnRjX21hc2ss IHBsbC0+c3RhdGUuY3J0Y19tYXNrKTsKKworCUk5MTVfU1RBVEVfV0FSTihwbGwtPm9uICYmIG1l bWNtcCgmcGxsLT5zdGF0ZS5od19zdGF0ZSwKKwkJCQkJICAmZHBsbF9od19zdGF0ZSwKKwkJCQkJ ICBzaXplb2YoZHBsbF9od19zdGF0ZSkpLAorCQkJInBsbCBodyBzdGF0ZSBtaXNtYXRjaFxuIik7 Cit9CisKK3N0YXRpYyB2b2lkCit2ZXJpZnlfc2hhcmVkX2RwbGxfc3RhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqb2xkX2NydGNfc3RhdGUsCisJCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdfY3J0 Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGRldik7CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSA9IHRvX2ludGVsX2Ny dGNfc3RhdGUob2xkX2NydGNfc3RhdGUpOworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdf c3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKG5ld19jcnRjX3N0YXRlKTsKKworCWlmIChuZXdf c3RhdGUtPnNoYXJlZF9kcGxsKQorCQl2ZXJpZnlfc2luZ2xlX2RwbGxfc3RhdGUoZGV2X3ByaXYs IG5ld19zdGF0ZS0+c2hhcmVkX2RwbGwsIGNydGMsIG5ld19jcnRjX3N0YXRlKTsKKworCWlmIChv bGRfc3RhdGUtPnNoYXJlZF9kcGxsICYmCisJICAgIG9sZF9zdGF0ZS0+c2hhcmVkX2RwbGwgIT0g bmV3X3N0YXRlLT5zaGFyZWRfZHBsbCkgeworCQl1bnNpZ25lZCBpbnQgY3J0Y19tYXNrID0gZHJt X2NydGNfbWFzayhjcnRjKTsKKwkJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwgPSBvbGRf c3RhdGUtPnNoYXJlZF9kcGxsOworCisJCUk5MTVfU1RBVEVfV0FSTihwbGwtPmFjdGl2ZV9tYXNr ICYgY3J0Y19tYXNrLAorCQkJCSJwbGwgYWN0aXZlIG1pc21hdGNoIChkaWRuJ3QgZXhwZWN0IHBp cGUgJWMgaW4gYWN0aXZlIG1hc2spXG4iLAorCQkJCXBpcGVfbmFtZShkcm1fY3J0Y19pbmRleChj cnRjKSkpOworCQlJOTE1X1NUQVRFX1dBUk4ocGxsLT5zdGF0ZS5jcnRjX21hc2sgJiBjcnRjX21h c2ssCisJCQkJInBsbCBlbmFibGVkIGNydGNzIG1pc21hdGNoIChmb3VuZCAleCBpbiBlbmFibGVk IG1hc2spXG4iLAorCQkJCXBpcGVfbmFtZShkcm1fY3J0Y19pbmRleChjcnRjKSkpOworCX0KK30K Kwordm9pZAoraW50ZWxfdmVyaWZ5X21vZGVzZXRfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CisJCQkgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgc3RydWN0IGRybV9j cnRjX3N0YXRlICpvbGRfc3RhdGUsCisJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X3N0 YXRlKQoreworCWlmICghZHJtX2F0b21pY19jcnRjX25lZWRzX21vZGVzZXQobmV3X3N0YXRlKSAm JgorCSAgICAhdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfc3RhdGUpLT51cGRhdGVfcGlwZSkKKwkJ cmV0dXJuOworCisJdmVyaWZ5X3dtX3N0YXRlKGNydGMsIG5ld19zdGF0ZSk7CisJdmVyaWZ5X2Nv bm5lY3Rvcl9zdGF0ZShjcnRjLT5kZXYsIHN0YXRlLCBjcnRjKTsKKwl2ZXJpZnlfY3J0Y19zdGF0 ZShjcnRjLCBvbGRfc3RhdGUsIG5ld19zdGF0ZSk7CisJdmVyaWZ5X3NoYXJlZF9kcGxsX3N0YXRl KGNydGMtPmRldiwgY3J0Yywgb2xkX3N0YXRlLCBuZXdfc3RhdGUpOworfQorCitzdGF0aWMgdm9p ZAordmVyaWZ5X2Rpc2FibGVkX2RwbGxfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJaW50 IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBsbDsgaSsrKQor CQl2ZXJpZnlfc2luZ2xlX2RwbGxfc3RhdGUoZGV2X3ByaXYsICZkZXZfcHJpdi0+c2hhcmVkX2Rw bGxzW2ldLCBOVUxMLCBOVUxMKTsKK30KKwordm9pZAoraW50ZWxfdmVyaWZ5X21vZGVzZXRfZGlz YWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSkKK3sKKwl2ZXJpZnlfZW5jb2Rlcl9zdGF0ZShkZXYsIHN0YXRlKTsKKwl2 ZXJpZnlfY29ubmVjdG9yX3N0YXRlKGRldiwgc3RhdGUsIE5VTEwpOworCXZlcmlmeV9kaXNhYmxl ZF9kcGxsX3N0YXRlKGRldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF92ZXJpZnkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3ZlcmlmeS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMC4uNGI3NTFlYQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3ZlcmlmeS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAx OSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19JTlRFTF9WRVJJRllfSF9fCisj ZGVmaW5lIF9fSU5URUxfVkVSSUZZX0hfXworCitzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZTsKK3N0 cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZTsKK3N0cnVjdCBkcm1fZGV2aWNl OworCit2b2lkIGludGVsX3ZlcmlmeV9tb2Rlc2V0X2NydGMoc3RydWN0IGRybV9jcnRjICpjcnRj LAorCQkJICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKm5ld19zdGF0ZSk7Cit2b2lkIGludGVsX3ZlcmlmeV9tb2Rlc2V0X2Rpc2FibGVk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlKTsKK3ZvaWQgaW50ZWxfdmVyaWZ5X3BsYW5lcyhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSk7CisKKyNlbmRpZiAvKiBfX0lOVEVMX1ZFUklGWV9IX18gKi8KLS0gCjIuMjAu MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4