From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: [RFC 22/29] drm/i915: gvt: Full display virtualization Date: Thu, 28 Jan 2016 18:21:44 +0800 Message-ID: <1453976511-27322-23-git-send-email-zhi.a.wang@intel.com> References: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 619FF6E7FD for ; Thu, 28 Jan 2016 02:24:54 -0800 (PST) In-Reply-To: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, igvt-g@lists.01.org Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQmluZyBOaXUgPGJpbmcubml1QGludGVsLmNvbT4KClRoaXMgcGF0Y2ggaW50cm9kdWNl cyB0aGUgR1ZULWcgZnVsbCBkaXNwbGF5IHZpcnR1YWxpemF0aW9uIHN1YnN5c3RlbS4KCkl0IGNv bnNpc3RzIGEgY29sbGVjdGlvbiBvZiBkaXNwbGF5IE1NSU8gaGFuZGxlcnMsIGxpa2UgcG93ZXIg d2VsbCByZWdpc3RlcgpoYW5kbGVyLCBwaXBlIHJlZ2lzdGVyIGhhbmRsZXIsIHBsYW5lIHJlZ2lz dGVyIGhhbmRsZXIsIHdoaWNoIHdpbGwgZW11bGF0ZQphbGwgZGlzcGxheSBNTUlPcyBiZWhhdmlv ciB0byBzdXBwb3J0IHZpcnR1YWwgbW9kZSBzZXR0aW5nIHNlcXVlbmNlIGZvcgpndWVzdC4KClNp Z25lZC1vZmYtYnk6IEJpbmcgTml1IDxiaW5nLm5pdUBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6 IFpoaSBXYW5nIDx6aGkuYS53YW5nQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvTWFrZWZpbGUgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kaXNw bGF5LmMgICB8IDIzMyArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kaXNwbGF5 LmggICB8IDEyOSArKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2VkaWQuYyAgICAgIHwg NDkzICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2VkaWQuaCAg ICAgIHwgMTg0ICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYyAgICAgICB8 ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmggICAgICAgfCAgMTIgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2hhbmRsZXJzLmMgIHwgOTc0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaW5zdGFuY2UuYyAg fCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ludGVycnVwdC5jIHwgIDI2ICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaW50ZXJydXB0LmggfCAgIDcgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L3JlZy5oICAgICAgIHwgICAzICsKIDEyIGZpbGVzIGNoYW5nZWQsIDIwNjkg aW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvZGlzcGxheS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2Rpc3BsYXkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9lZGlkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvZWRpZC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCmluZGV4IGIwYTNhMWEu LmMxNDZjNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZQor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiBH VlRfU09VUkNFIDo9IGd2dC5vIHBhcmFtcy5vIGFwZXJ0dXJlX2dtLm8gbW1pby5vIGhhbmRsZXJz Lm8gaW5zdGFuY2UubyBcCiAJCXRyYWNlX3BvaW50cy5vIGludGVycnVwdC5vIGd0dC5vIGNmZ19z cGFjZS5vIG9wcmVnaW9uLm8gdXRpbGl0eS5vIFwKLQkJZmJfZGVjb2Rlci5vCisJCWZiX2RlY29k ZXIubyBkaXNwbGF5Lm8gZWRpZC5vCiAKIGNjZmxhZ3MteQkJCSs9IC1JJChzcmMpIC1JJChzcmMp Ly4uIC1XYWxsIC1XZXJyb3IgLVduby11bnVzZWQtZnVuY3Rpb24KIGk5MTVfZ3Z0LXkJCQk6PSAk KEdWVF9TT1VSQ0UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGlzcGxh eS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2Rpc3BsYXkuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5jOTUxMTUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2Rpc3BsYXkuYwpAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqIENvcHly aWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNp bmNsdWRlICJndnQuaCIKKworaW50IGd2dF9nZXRfZWRwX3BpcGUoc3RydWN0IHZndF9kZXZpY2Ug KnZndCkKK3sKKwl1MzIgZGF0YSA9IF9fdnJlZyh2Z3QsIF9UUkFOU19ERElfRlVOQ19DVExfRURQ KTsKKwlpbnQgcGlwZSA9IEk5MTVfTUFYX1BJUEVTOworCisJc3dpdGNoIChkYXRhICYgVFJBTlNf RERJX0VEUF9JTlBVVF9NQVNLKSB7CisJCWNhc2UgVFJBTlNfRERJX0VEUF9JTlBVVF9BX09OOgor CQljYXNlIFRSQU5TX0RESV9FRFBfSU5QVVRfQV9PTk9GRjoKKwkJCXBpcGUgPSBQSVBFX0E7CisJ CQlicmVhazsKKwkJY2FzZSBUUkFOU19ERElfRURQX0lOUFVUX0JfT05PRkY6CisJCQlwaXBlID0g UElQRV9COworCQkJYnJlYWs7CisJCWNhc2UgVFJBTlNfRERJX0VEUF9JTlBVVF9DX09OT0ZGOgor CQkJcGlwZSA9IFBJUEVfQzsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcGlwZTsKK30KKworYm9v bCBndnRfZWRwX3BpcGVfaXNfZW5hYmxlZChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCWlm ICghKF9fdnJlZyh2Z3QsIF9SRUdfUElQRV9FRFBfQ09ORikgJiBQSVBFQ09ORl9FTkFCTEUpKQor CQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShfX3ZyZWcodmd0LCBfVFJBTlNfRERJX0ZVTkNfQ1RM X0VEUCkgJiBUUkFOU19ERElfRlVOQ19FTkFCTEUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworYm9vbCBndnRfcGlwZV9pc19lbmFibGVkKHN0cnVjdCB2Z3RfZGV2aWNl ICp2Z3QsIGludCBwaXBlKQoreworCUFTU0VSVChwaXBlID49IFBJUEVfQSAmJiBwaXBlIDwgSTkx NV9NQVhfUElQRVMpOworCisJaWYgKF9fdnJlZyh2Z3QsIEdWVF9QSVBFQ09ORihwaXBlKSkgJiBQ SVBFQ09ORl9FTkFCTEUpCisJCXJldHVybiB0cnVlOworCisJaWYgKGd2dF9lZHBfcGlwZV9pc19l bmFibGVkKHZndCkgJiYKKwkJCWd2dF9nZXRfZWRwX3BpcGUodmd0KSA9PSBwaXBlKQorCQlyZXR1 cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgdmlydHVhbF9kcF9tb25pdG9yX2VkaWRbXSA9IHsKKwkweDAwLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4MDAsMHgyMiwweGYwLDB4NTQsMHgyOSwKKwkweDAwLDB4MDAsMHgwMCww eDAwLDB4MDQsMHgxNywweDAxLDB4MDQsMHhhNSwweDM0LDB4MjAsMHg3OCwKKwkweDIzLDB4ZmMs MHg4MSwweGE0LDB4NTUsMHg0ZCwweDlkLDB4MjUsMHgxMiwweDUwLDB4NTQsMHgyMSwKKwkweDA4 LDB4MDAsMHhkMSwweGMwLDB4ODEsMHhjMCwweDgxLDB4NDAsMHg4MSwweDgwLDB4OTUsMHgwMCwK KwkweGE5LDB4NDAsMHhiMywweDAwLDB4MDEsMHgwMSwweDI4LDB4M2MsMHg4MCwweGEwLDB4NzAs MHhiMCwKKwkweDIzLDB4NDAsMHgzMCwweDIwLDB4MzYsMHgwMCwweDA2LDB4NDQsMHgyMSwweDAw LDB4MDAsMHgxYSwKKwkweDAwLDB4MDAsMHgwMCwweGZkLDB4MDAsMHgxOCwweDNjLDB4MTgsMHg1 MCwweDExLDB4MDAsMHgwYSwKKwkweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDAwLDB4 MDAsMHgwMCwweGZjLDB4MDAsMHg0OCwKKwkweDUwLDB4MjAsMHg1YSwweDUyLDB4MzIsMHgzNCww eDM0LDB4MzAsMHg3NywweDBhLDB4MjAsMHgyMCwKKwkweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAs MHg0MywweDRlLDB4MzQsMHgzMywweDMwLDB4MzQsMHgzMCwKKwkweDQ0LDB4NTgsMHg1MSwweDBh LDB4MjAsMHgyMCwweDAxLDB4NDQsMHgwMiwweDAzLDB4MTksMHhjMSwKKwkweDRjLDB4OTAsMHgx ZiwweDA1LDB4MTQsMHgwNCwweDEzLDB4MDMsMHgwMiwweDA3LDB4MDYsMHgxMiwKKwkweDAxLDB4 MjMsMHgwOSwweDA3LDB4MDcsMHg4MywweDAxLDB4MDAsMHgwMCwweDAyLDB4M2EsMHg4MCwKKwkw eDE4LDB4NzEsMHgzOCwweDJkLDB4NDAsMHg1OCwweDJjLDB4NDUsMHgwMCwweDA2LDB4NDQsMHgy MSwKKwkweDAwLDB4MDAsMHgxZSwweDAyLDB4M2EsMHg4MCwweGQwLDB4NzIsMHgzOCwweDJkLDB4 NDAsMHgxMCwKKwkweDJjLDB4NDUsMHg4MCwweDA2LDB4NDQsMHgyMSwweDAwLDB4MDAsMHgxZSww eDAxLDB4MWQsMHgwMCwKKwkweDcyLDB4NTEsMHhkMCwweDFlLDB4MjAsMHg2ZSwweDI4LDB4NTUs MHgwMCwweDA2LDB4NDQsMHgyMSwKKwkweDAwLDB4MDAsMHgxZSwweDAxLDB4MWQsMHgwMCwweGJj LDB4NTIsMHhkMCwweDFlLDB4MjAsMHhiOCwKKwkweDI4LDB4NTUsMHg0MCwweDA2LDB4NDQsMHgy MSwweDAwLDB4MDAsMHgxZSwweDhjLDB4MGEsMHhkMCwKKwkweDhhLDB4MjAsMHhlMCwweDJkLDB4 MTAsMHgxMCwweDNlLDB4OTYsMHgwMCwweDA2LDB4NDQsMHgyMSwKKwkweDAwLDB4MDAsMHgxOCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkweDAwLDB4MDAs MHgwMCwweDdiLAorfTsKKworI2RlZmluZSBEUENEX0hFQURFUl9TSVpFICAgICAgICAweGIKKwor dTggZHBjZF9maXhfZGF0YVtEUENEX0hFQURFUl9TSVpFXSA9IHsKKyAgICAgICAgMHgxMSwgMHgw YSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAor fTsKKworc3RhdGljIHZvaWQgZW11bGF0ZV9tb25pdG9yX3N0YXR1c19jaGFuZ2Uoc3RydWN0IHZn dF9kZXZpY2UgKnZndCkKK3sKKwlfX3ZyZWcodmd0LCBfU0RFSVNSKSAmPSB+KF9SRUdCSVRfRFBf Ql9IT1RQTFVHIHwKKwkJCV9SRUdCSVRfRFBfQ19IT1RQTFVHIHwKKwkJCV9SRUdCSVRfRFBfRF9I T1RQTFVHKTsKKworCWlmIChkcHlfaGFzX21vbml0b3Jfb25fcG9ydCh2Z3QsIFBPUlRfQikpCisJ CV9fdnJlZyh2Z3QsIF9TREVJU1IpIHw9IF9SRUdCSVRfRFBfQl9IT1RQTFVHOworCisJaWYgKGRw eV9oYXNfbW9uaXRvcl9vbl9wb3J0KHZndCwgUE9SVF9DKSkKKwkJX192cmVnKHZndCwgX1NERUlT UikgfD0gX1JFR0JJVF9EUF9DX0hPVFBMVUc7CisKKwlpZiAoZHB5X2hhc19tb25pdG9yX29uX3Bv cnQodmd0LCBQT1JUX0QpKQorCQlfX3ZyZWcodmd0LCBfU0RFSVNSKSB8PSBfUkVHQklUX0RQX0Rf SE9UUExVRzsKKworCWlmIChkcHlfaGFzX21vbml0b3Jfb25fcG9ydCh2Z3QsIFBPUlRfQSkpCisJ CV9fdnJlZyh2Z3QsIF9HRU44X0RFX1BPUlRfSVNSKSB8PSBHRU44X1BPUlRfRFBfQV9IT1RQTFVH OworfQorCitzdGF0aWMgdm9pZCBjbGVhbl92aXJ0dWFsX2RwX21vbml0b3Ioc3RydWN0IHZndF9k ZXZpY2UgKnZndCkKK3sKKwlzdHJ1Y3QgZ3RfcG9ydCAqcG9ydCA9IGd2dF92cG9ydCh2Z3QsIFBP UlRfQSk7CisKKwlpZiAocG9ydC0+ZWRpZCkgeworCQlrZnJlZShwb3J0LT5lZGlkKTsKKwkJcG9y dC0+ZWRpZCA9IE5VTEw7CisJfQorCisJaWYgKHBvcnQtPmRwY2QpIHsKKwkJa2ZyZWUocG9ydC0+ ZHBjZCk7CisJCXBvcnQtPmRwY2QgPSBOVUxMOworCX0KK30KKworc3RhdGljIGJvb2wgc2V0dXBf dmlydHVhbF9kcF9tb25pdG9yKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCit7CisJc3RydWN0IGd0 X3BvcnQgKnBvcnQgPSBndnRfdnBvcnQodmd0LCBQT1JUX0EpOworCisJcG9ydC0+ZWRpZCA9IGt6 YWxsb2Moc2l6ZW9mKCoocG9ydC0+ZWRpZCkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvcnQtPmVk aWQpCisJCWdvdG8gZXJyOworCisJcG9ydC0+ZHBjZCA9IGt6YWxsb2Moc2l6ZW9mKCoocG9ydC0+ ZHBjZCkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvcnQtPmRwY2QpCisJCWdvdG8gZXJyOworCisJ bWVtY3B5KHBvcnQtPmVkaWQtPmVkaWRfYmxvY2ssIHZpcnR1YWxfZHBfbW9uaXRvcl9lZGlkLAor CQkJRURJRF9TSVpFKTsKKwlwb3J0LT5lZGlkLT5kYXRhX3ZhbGlkID0gdHJ1ZTsKKworCW1lbWNw eShwb3J0LT5kcGNkLT5kYXRhLCBkcGNkX2ZpeF9kYXRhLCBEUENEX0hFQURFUl9TSVpFKTsKKwlw b3J0LT5kcGNkLT5kYXRhX3ZhbGlkID0gdHJ1ZTsKKworCXBvcnQtPnR5cGUgPSBHVlRfRFBfQTsK KworCWVtdWxhdGVfbW9uaXRvcl9zdGF0dXNfY2hhbmdlKHZndCk7CisJcmV0dXJuIHRydWU7Citl cnI6CisJY2xlYW5fdmlydHVhbF9kcF9tb25pdG9yKHZndCk7CisJcmV0dXJuIGZhbHNlOworfQor Citib29sIGd2dF91cGRhdGVfZGlzcGxheV9ldmVudHNfZW11bGF0aW9uKHN0cnVjdCBwZ3RfZGV2 aWNlICpwZGV2KQoreworCXN0cnVjdCBndnRfaXJxX3N0YXRlICppcnEgPSAmcGRldi0+aXJxX3N0 YXRlOworCXN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Q7CisJYm9vbCBoYXZlX2VuYWJsZWRfcGlwZSA9 IGZhbHNlOworCWludCBwaXBlLCBpZDsKKworCUFTU0VSVChtdXRleF9pc19sb2NrZWQoJnBkZXYt PmxvY2spKTsKKworCWhydGltZXJfY2FuY2VsKCZpcnEtPmRweV90aW1lci50aW1lcik7CisKKwlm b3JfZWFjaF9vbmxpbmVfaW5zdGFuY2UocGRldiwgdmd0LCBpZCkgeworCQlmb3IgKHBpcGUgPSAw OyBwaXBlIDwgSTkxNV9NQVhfUElQRVM7IHBpcGUrKykgeworCQkJaGF2ZV9lbmFibGVkX3BpcGUg PQorCQkJCWd2dF9waXBlX2lzX2VuYWJsZWQodmd0LCBwaXBlKTsKKwkJCWlmIChoYXZlX2VuYWJs ZWRfcGlwZSkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChoYXZlX2VuYWJsZWRfcGlwZSkK KwkJaHJ0aW1lcl9zdGFydCgmaXJxLT5kcHlfdGltZXIudGltZXIsCisJCQkJa3RpbWVfYWRkX25z KGt0aW1lX2dldCgpLCBpcnEtPmRweV90aW1lci5wZXJpb2QpLAorCQkJCUhSVElNRVJfTU9ERV9B QlMpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlbXVsYXRlX3ZibGFua19vbl9w aXBlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIGludCBwaXBlKQoreworCWludCB2YmxhbmtfZXZl bnRbXSA9IHsKKwkJW1BJUEVfQV0gPSBQSVBFX0FfVkJMQU5LLAorCQlbUElQRV9CXSA9IFBJUEVf Ql9WQkxBTkssCisJCVtQSVBFX0NdID0gUElQRV9DX1ZCTEFOSywKKwl9OworCisJQVNTRVJUKHBp cGUgPj0gUElQRV9BICYmIHBpcGUgPD0gUElQRV9DKTsKKworCWlmIChndnRfcGlwZV9pc19lbmFi bGVkKHZndCwgcGlwZSkpCisJCWd2dF90cmlnZ2VyX3ZpcnR1YWxfZXZlbnQodmd0LCB2Ymxhbmtf ZXZlbnRbcGlwZV0pOworfQorCitzdGF0aWMgdm9pZCBlbXVsYXRlX3ZibGFua19mb3JfaW5zdGFu Y2Uoc3RydWN0IHZndF9kZXZpY2UgKnZndCkKK3sKKwlpbnQgcGlwZTsKKworCWZvciAocGlwZSA9 IDA7IHBpcGUgPCBJOTE1X01BWF9QSVBFUzsgcGlwZSsrKQorCQllbXVsYXRlX3ZibGFua19vbl9w aXBlKHZndCwgcGlwZSk7Cit9CisKK3ZvaWQgZ3Z0X2VtdWxhdGVfZGlzcGxheV9ldmVudHMoc3Ry dWN0IHBndF9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHZndF9kZXZpY2UgKnZndDsKKwlpbnQg aWQ7CisKKwlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZwZGV2LT5sb2NrKSk7CisKKwlmb3JfZWFj aF9vbmxpbmVfaW5zdGFuY2UocGRldiwgdmd0LCBpZCkKKwkJZW11bGF0ZV92YmxhbmtfZm9yX2lu c3RhbmNlKHZndCk7Cit9CisKK3ZvaWQgZ3Z0X2NsZWFuX3ZpcnR1YWxfZGlzcGxheV9zdGF0ZShz dHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCWNsZWFuX3ZpcnR1YWxfZHBfbW9uaXRvcih2Z3Qp OworfQorCitib29sIGd2dF9pbml0X3ZpcnR1YWxfZGlzcGxheV9zdGF0ZShzdHJ1Y3Qgdmd0X2Rl dmljZSAqdmd0KQoreworCWd2dF9pbml0X2kyY19lZGlkKHZndCk7CisJcmV0dXJuIHNldHVwX3Zp cnR1YWxfZHBfbW9uaXRvcih2Z3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kaXNwbGF5LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhOGFhYQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kaXNwbGF5LmgKQEAgLTAsMCArMSwxMjkgQEAK Ky8qCisgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FS RS4KKyAqLworCisjaWZuZGVmIF9HVlRfRElTUExBWV9IXworI2RlZmluZSBfR1ZUX0RJU1BMQVlf SF8KKworI2RlZmluZSBTQklfUkVHX01BWAkyMAorI2RlZmluZSBEUENEX1NJWkUJMHg3MDAKKwor I2RlZmluZSBkcHlfaXNfdmFsaWRfcG9ydChwb3J0KQkJCQkJCQlcCisJCSgoKHBvcnQpID49IFBP UlRfQSkgJiYgKChwb3J0KSA8IEk5MTVfTUFYX1BPUlRTKSkKKworI2RlZmluZSBndnRfdnBvcnQo dmd0LCBwb3J0KSBcCisJKCYodmd0KS0+c3RhdGUuZGlzcGxheS5wb3J0c1twb3J0XSkKKworI2Rl ZmluZSBkcHlfaGFzX21vbml0b3Jfb25fcG9ydCh2Z3QsIHBvcnQpCQkJCQlcCisJCSh2Z3QgJiYg ZHB5X2lzX3ZhbGlkX3BvcnQocG9ydCkgJiYJCQkJXAorCQlndnRfdnBvcnQodmd0LCBwb3J0KS0+ ZWRpZCAmJiBndnRfdnBvcnQodmd0LCBwb3J0KS0+ZWRpZC0+ZGF0YV92YWxpZCkKKworI2RlZmlu ZSBkcHlfcG9ydF9pc19kcCh2Z3QsIHBvcnQpCQkJCQkJXAorCQkoKHZndCkgJiYgZHB5X2lzX3Zh bGlkX3BvcnQocG9ydCkJCQkJXAorCQkmJiAoKGd2dF92cG9ydCh2Z3QsIHBvcnQpLT50eXBlID09 IEdWVF9EUF9BKSB8fAkJCVwKKwkJICAgIChndnRfdnBvcnQodmd0LCBwb3J0KS0+dHlwZSA9PSBH VlRfRFBfQikgfHwJCQlcCisJCSAgICAoZ3Z0X3Zwb3J0KHZndCwgcG9ydCktPnR5cGUgPT0gR1ZU X0RQX0MpIHx8CQkJXAorCQkgICAgKGd2dF92cG9ydCh2Z3QsIHBvcnQpLT50eXBlID09IEdWVF9E UF9EKSkpCisKKyNkZWZpbmUgR1ZUX01BWF9VRVZFTlRfVkFSUwkzCisvKiBEUENEIHN0YXJ0ICov CisjZGVmaW5lIERQQ0RfU0laRQkweDcwMAorCisvKiBEUENEIGFkZHJlc3NlcyAqLworI2RlZmlu ZSBEUENEX1JFVgkJCTB4MDAwCisjZGVmaW5lIERQQ0RfTUFYX0xJTktfUkFURQkJMHgwMDEKKyNk ZWZpbmUgRFBDRF9NQVhfTEFORV9DT1VOVAkJMHgwMDIKKworI2RlZmluZSBEUENEX1RSQUlOSU5H X1BBVFRFUk5fU0VUCTB4MTAyCisjZGVmaW5lCURQQ0RfU0lOS19DT1VOVAkJCTB4MjAwCisjZGVm aW5lIERQQ0RfTEFORTBfMV9TVEFUVVMJCTB4MjAyCisjZGVmaW5lIERQQ0RfTEFORTJfM19TVEFU VVMJCTB4MjAzCisjZGVmaW5lIERQQ0RfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRAkweDIwNAor I2RlZmluZSBEUENEX1NJTktfU1RBVFVTCQkweDIwNQorCisvKiBsaW5rIHRyYWluaW5nICovCisj ZGVmaW5lIERQQ0RfVFJBSU5JTkdfUEFUVEVSTl9TRVRfTUFTSwkweDAzCisjZGVmaW5lIERQQ0Rf TElOS19UUkFJTklOR19ESVNBQkxFRAkweDAwCisjZGVmaW5lIERQQ0RfVFJBSU5JTkdfUEFUVEVS Tl8xCQkweDAxCisjZGVmaW5lIERQQ0RfVFJBSU5JTkdfUEFUVEVSTl8yCQkweDAyCisKKyNkZWZp bmUgRFBDRF9DUF9SRUFEWV9NQVNLCQkoMSA8PCA2KQorCisvKiBsYW5lIHN0YXR1cyAqLworI2Rl ZmluZSBEUENEX0xBTkVTX0NSX0RPTkUJCTB4MTEKKyNkZWZpbmUgRFBDRF9MQU5FU19FUV9ET05F CQkweDIyCisjZGVmaW5lIERQQ0RfU1lNQk9MX0xPQ0tFRAkJMHg0NAorCisjZGVmaW5lIERQQ0Rf SU5URVJMQU5FX0FMSUdOX0RPTkUJMHgwMQorCisjZGVmaW5lIERQQ0RfU0lOS19JTl9TWU5DCQkw eDAzCisKKy8qIERQQ0QgZW5kICovCisKK3N0cnVjdCBzYmlfcmVnaXN0ZXIgeworCXVuc2lnbmVk IGludCBvZmZzZXQ7CisJdTMyIHZhbHVlOworfTsKKworc3RydWN0IHNiaV9yZWdpc3RlcnMgewor CWludCBudW1iZXI7CisJc3RydWN0IHNiaV9yZWdpc3RlciByZWdpc3RlcnNbU0JJX1JFR19NQVhd OworfTsKKworZW51bSBndnRfcGxhbmVfdHlwZSB7CisJUFJJTUFSWV9QTEFORSA9IDAsCisJQ1VS U09SX1BMQU5FLAorCVNQUklURV9QTEFORSwKKwlNQVhfUExBTkUKK307CisKK3N0cnVjdCBndnRf ZHBjZF9kYXRhIHsKKwlib29sIGRhdGFfdmFsaWQ7CisJdTggZGF0YVtEUENEX1NJWkVdOworfTsK KworZW51bSBndnRfcG9ydF90eXBlIHsKKwlHVlRfQ1JUID0gMCwKKwlHVlRfRFBfQSwKKwlHVlRf RFBfQiwKKwlHVlRfRFBfQywKKwlHVlRfRFBfRCwKKwlHVlRfSERNSV9CLAorCUdWVF9IRE1JX0Ms CisJR1ZUX0hETUlfRCwKKwlHVlRfUE9SVF9NQVgKK307CisKK3N0cnVjdCBndF9wb3J0IHsKKwlz dHJ1Y3QgZ3Z0X2VkaWRfZGF0YV90CSplZGlkOwkvKiBwZXIgZGlzcGxheSBFRElEIGluZm9ybWF0 aW9uICovCisJc3RydWN0IGd2dF9kcGNkX2RhdGEJKmRwY2Q7CS8qIHBlciBkaXNwbGF5IERQQ0Qg aW5mb3JtYXRpb24gKi8KKwllbnVtIGd2dF9wb3J0X3R5cGUJdHlwZTsKK307CisKK2V4dGVybiBp bnQgZ3Z0X2dldF9lZHBfcGlwZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KTsKK2V4dGVybiBib29s IGd2dF9lZHBfcGlwZV9pc19lbmFibGVkKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpOworZXh0ZXJu IGJvb2wgZ3Z0X3BpcGVfaXNfZW5hYmxlZChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCBpbnQgcGlw ZSk7CisKK2Jvb2wgZ3Z0X2luaXRfdmlydHVhbF9kaXNwbGF5X3N0YXRlKHN0cnVjdCB2Z3RfZGV2 aWNlICp2Z3QpOwordm9pZCBndnRfY2xlYW5fdmlydHVhbF9kaXNwbGF5X3N0YXRlKHN0cnVjdCB2 Z3RfZGV2aWNlICp2Z3QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZWRpZC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTBiYTMKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZWRpZC5jCkBAIC0wLDAgKzEsNDkzIEBACisvKgorICog Q29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK KyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8K KworI2luY2x1ZGUgImd2dC5oIgorCitzdGF0aWMgdW5zaWduZWQgY2hhciBlZGlkX2dldF9ieXRl KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCit7CisJdW5zaWduZWQgY2hhciBjaHIgPSAwOworCXN0 cnVjdCBndnRfaTJjX2VkaWRfdCAqZWRpZCA9ICZ2Z3QtPnN0YXRlLmRpc3BsYXkuZ3Z0X2kyY19l ZGlkOworCisJaWYgKGVkaWQtPnN0YXRlID09IEkyQ19OT1RfU1BFQ0lGSUVEIHx8ICFlZGlkLT5z bGF2ZV9zZWxlY3RlZCkgeworCQlndnRfd2FybigiRHJpdmVyIHRyaWVzIHRvIHJlYWQgRURJRCB3 aXRob3V0IHByb3BlciBzZXF1ZW5jZSFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGVkaWQt PmN1cnJlbnRfZWRpZF9yZWFkID49IEVESURfU0laRSkgeworCQlndnRfd2FybigiZWRpZF9nZXRf Ynl0ZSgpIGV4Y2VlZHMgdGhlIHNpemUgb2YgRURJRCFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisK KwlpZiAoIWVkaWQtPmVkaWRfYXZhaWxhYmxlKSB7CisJCWd2dF93YXJuKCJSZWFkaW5nIEVESUQg YnV0IEVESUQgaXMgbm90IGF2YWlsYWJsZSEiCisJCQkiIFdpbGwgcmV0dXJuIDAuXG4iKTsKKwkJ cmV0dXJuIDA7CisJfQorCisJaWYgKGRweV9oYXNfbW9uaXRvcl9vbl9wb3J0KHZndCwgZWRpZC0+ cG9ydCkpIHsKKwkJc3RydWN0IGd2dF9lZGlkX2RhdGFfdCAqZWRpZF9kYXRhID0gZ3Z0X3Zwb3J0 KHZndCwgZWRpZC0+cG9ydCktPmVkaWQ7CisJCWNociA9IGVkaWRfZGF0YS0+ZWRpZF9ibG9ja1tl ZGlkLT5jdXJyZW50X2VkaWRfcmVhZF07CisJCWd2dF9kYmcoR1ZUX0RCR19FRElELAorCQkJImVk aWRfZ2V0X2J5dGUgd2l0aCBvZmZzZXQgJWQgYW5kIHZhbHVlICVkXG4iLAorCQkJZWRpZC0+Y3Vy cmVudF9lZGlkX3JlYWQsIGNocik7CisJCWVkaWQtPmN1cnJlbnRfZWRpZF9yZWFkICsrOworCX0g ZWxzZSB7CisJCWd2dF93YXJuKCJObyBFRElEIGF2YWlsYWJsZSBkdXJpbmcgdGhlIHJlYWRpbmc/ XG4iKTsKKwl9CisKKwlyZXR1cm4gY2hyOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gcG9ydCBn dnRfZ2V0X3BvcnRfZnJvbV9nbWJ1czAodTMyIGdtYnVzMCl7CisJZW51bSBwb3J0IHBvcnQgPSBJ OTE1X01BWF9QT1JUUzsKKwlpbnQgcG9ydF9zZWxlY3QgPSBnbWJ1czAgJiBfR01CVVNfUElOX1NF TF9NQVNLOworCisJaWYgKHBvcnRfc2VsZWN0ID09IDIpCisJCXBvcnQgPSBQT1JUX0U7CisJZWxz ZSBpZiAocG9ydF9zZWxlY3QgPT0gNCkKKwkJcG9ydCA9IFBPUlRfQzsKKwllbHNlIGlmIChwb3J0 X3NlbGVjdCA9PSA1KQorCQlwb3J0ID0gUE9SVF9COworCWVsc2UgaWYgKHBvcnRfc2VsZWN0ID09 IDYpCisJCXBvcnQgPSBQT1JUX0Q7CisKKwlyZXR1cm4gcG9ydDsKK30KKwordm9pZCBndnRfcmVz ZXRfZ21idXNfY29udHJvbGxlcihzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCV9fdnJlZyh2 Z3QsIF9QQ0hfR01CVVMyKSA9IEdNQlVTX0hXX1JEWTsKKwlpZiAoIXZndC0+c3RhdGUuZGlzcGxh eS5ndnRfaTJjX2VkaWQuZWRpZF9hdmFpbGFibGUpIHsKKwkJX192cmVnKHZndCwgX1BDSF9HTUJV UzIpIHw9IEdNQlVTX1NBVE9FUjsKKwl9CisJdmd0LT5zdGF0ZS5kaXNwbGF5Lmd2dF9pMmNfZWRp ZC5nbWJ1cy5waGFzZSA9IEdNQlVTX0lETEVfUEhBU0U7Cit9CisKKworLyogR01CVVMwICovCitz dGF0aWMgYm9vbCBndnRfZ21idXMwX21taW9fd3JpdGUoc3RydWN0IHZndF9kZXZpY2UgKnZndCwK KwkJCXVuc2lnbmVkIGludCBvZmZzZXQsIHZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVz KQoreworCXUzMiB3dmFsdWUgPSAqKHUzMiAqKXBfZGF0YTsKKwllbnVtIHBvcnQgcG9ydCA9IEk5 MTVfTUFYX1BPUlRTOworCWludCBwaW5fc2VsZWN0ID0gd3ZhbHVlICYgX0dNQlVTX1BJTl9TRUxf TUFTSzsKKworCWd2dF9pbml0X2kyY19lZGlkKHZndCk7CisKKwlpZiAocGluX3NlbGVjdCA9PSAw KQorCQlyZXR1cm4gdHJ1ZTsKKworCXZndC0+c3RhdGUuZGlzcGxheS5ndnRfaTJjX2VkaWQuc3Rh dGUgPSBJMkNfR01CVVM7CisJcG9ydCA9IGd2dF9nZXRfcG9ydF9mcm9tX2dtYnVzMChwaW5fc2Vs ZWN0KTsKKwlpZiAoIWRweV9pc192YWxpZF9wb3J0KHBvcnQpKSB7CisJCWd2dF9kYmcoR1ZUX0RC R19FRElELAorCQkJIlZNKCVkKTogRHJpdmVyIHRyaWVzIEdNQlVTIHdyaXRlIG5vdCBvbiB2YWxp ZCBwb3J0IVxuIgorCQkJImdtYnVzIHdyaXRlIHZhbHVlIGlzOiAweCV4XG4iLCB2Z3QtPmlkLCB3 dmFsdWUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwl2Z3QtPnN0YXRlLmRpc3BsYXkuZ3Z0X2ky Y19lZGlkLmdtYnVzLnBoYXNlID0gR01CVVNfSURMRV9QSEFTRTsKKworCS8qIEZJWE1FOiBuZXZl ciBjbGVhciBHTUJVU19IV19XQUlUX1BIQVNFICovCisJX192cmVnKHZndCwgX1BDSF9HTUJVUzIp ICY9IH4gR01CVVNfQUNUSVZFOworCV9fdnJlZyh2Z3QsIF9QQ0hfR01CVVMyKSB8PSBHTUJVU19I V19SRFkgfCBHTUJVU19IV19XQUlUX1BIQVNFOworCisJaWYgKGRweV9oYXNfbW9uaXRvcl9vbl9w b3J0KHZndCwgcG9ydCkgJiYgIWRweV9wb3J0X2lzX2RwKHZndCwgcG9ydCkpIHsKKwkJdmd0LT5z dGF0ZS5kaXNwbGF5Lmd2dF9pMmNfZWRpZC5wb3J0ID0gcG9ydDsKKwkJdmd0LT5zdGF0ZS5kaXNw bGF5Lmd2dF9pMmNfZWRpZC5lZGlkX2F2YWlsYWJsZSA9IHRydWU7CisJCV9fdnJlZyh2Z3QsIF9Q Q0hfR01CVVMyKSAmPSB+R01CVVNfU0FUT0VSOworCX0gZWxzZSB7CisJCV9fdnJlZyh2Z3QsIF9Q Q0hfR01CVVMyKSB8PSBHTUJVU19TQVRPRVI7CisJfQorCisJbWVtY3B5KHBfZGF0YSwgKGNoYXIg Kil2Z3QtPnN0YXRlLm1taW8udnJlZyArIG9mZnNldCwgYnl0ZXMpOworCXJldHVybiB0cnVlOwor fQorCitzdGF0aWMgYm9vbCBndnRfZ21idXMxX21taW9fd3JpdGUoc3RydWN0IHZndF9kZXZpY2Ug KnZndCwgdW5zaWduZWQgaW50IG9mZnNldCwKK3ZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5 dGVzKQoreworCXUzMiBzbGF2ZV9hZGRyOworCXN0cnVjdCBndnRfaTJjX2VkaWRfdCAqaTJjX2Vk aWQgPSAmdmd0LT5zdGF0ZS5kaXNwbGF5Lmd2dF9pMmNfZWRpZDsKKworCXUzMiB3dmFsdWUgPSAq KHUzMiAqKXBfZGF0YTsKKwlpZiAoX192cmVnKHZndCwgb2Zmc2V0KSAmIEdNQlVTX1NXX0NMUl9J TlQpIHsKKwkJaWYgKCEod3ZhbHVlICYgR01CVVNfU1dfQ0xSX0lOVCkpIHsKKwkJCV9fdnJlZyh2 Z3QsIG9mZnNldCkgJj0gfkdNQlVTX1NXX0NMUl9JTlQ7CisJCQlndnRfcmVzZXRfZ21idXNfY29u dHJvbGxlcih2Z3QpOworCQl9CisJCS8qIFRPRE86ICJUaGlzIGJpdCBpcyBjbGVhcmVkIHRvIHpl cm8gd2hlbiBhbiBldmVudAorCQkgKiBjYXVzZXMgdGhlIEhXX1JEWSBiaXQgdHJhbnNpdGlvbiB0 byBvY2N1ciAiKi8KKwl9IGVsc2UgeworCQkvKiBwZXIgYnNwZWMgc2V0dGluZyB0aGlzIGJpdCBj YW4gY2F1c2U6CisJCSAxKSBJTlQgc3RhdHVzIGJpdCBjbGVhcmVkCisJCSAyKSBIV19SRFkgYml0 IGFzc2VydGVkCisJCSAqLworCQlpZiAod3ZhbHVlICYgR01CVVNfU1dfQ0xSX0lOVCkgeworCQkJ X192cmVnKHZndCwgX1BDSF9HTUJVUzIpICY9IH5HTUJVU19JTlQ7CisJCQlfX3ZyZWcodmd0LCBf UENIX0dNQlVTMikgfD0gR01CVVNfSFdfUkRZOworCQl9CisKKwkJLyogRm9yIHZpcnR1YWxpemF0 aW9uLCB3ZSBzdXBwb3NlIHRoYXQgSFcgaXMgYWx3YXlzIHJlYWR5LAorCQkgKiBzbyBHTUJVU19T V19SRFkgc2hvdWxkIGFsd2F5cyBiZSBjbGVhcmVkCisJCSAqLworCQlpZiAod3ZhbHVlICYgR01C VVNfU1dfUkRZKQorCQkJd3ZhbHVlICY9IH5HTUJVU19TV19SRFk7CisKKwkJaTJjX2VkaWQtPmdt YnVzLnRvdGFsX2J5dGVfY291bnQgPQorCQkJZ21idXMxX3RvdGFsX2J5dGVfY291bnQod3ZhbHVl KTsKKwkJc2xhdmVfYWRkciA9IGdtYnVzMV9zbGF2ZV9hZGRyKHd2YWx1ZSk7CisKKwkJLyogdmd0 IGdtYnVzIG9ubHkgc3VwcG9ydCBFRElEICovCisJCWlmIChzbGF2ZV9hZGRyID09IEVESURfQURE UikgeworCQkJaTJjX2VkaWQtPnNsYXZlX3NlbGVjdGVkID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChz bGF2ZV9hZGRyICE9IDApIHsKKwkJCWd2dF9kYmcoR1ZUX0RCR19EUFksCisJCQkJInZHVCglZCk6 IHVuc3VwcG9ydGVkIGdtYnVzIHNsYXZlIGFkZHIoMHgleClcbiIKKwkJCQkiCWdtYnVzIG9wZXJh dGlvbnMgd2lsbCBiZSBpZ25vcmVkLlxuIiwKKwkJCQkJdmd0LT5pZCwgc2xhdmVfYWRkcik7CisJ CX0KKworCQlpZiAod3ZhbHVlICYgR01CVVNfQ1lDTEVfSU5ERVgpIHsKKwkJCWkyY19lZGlkLT5j dXJyZW50X2VkaWRfcmVhZCA9IGdtYnVzMV9zbGF2ZV9pbmRleCh3dmFsdWUpOworCQl9CisKKwkJ aTJjX2VkaWQtPmdtYnVzLmN5Y2xlX3R5cGUgPSBnbWJ1czFfYnVzX2N5Y2xlKHd2YWx1ZSk7CisJ CXN3aXRjaCAoZ21idXMxX2J1c19jeWNsZSh3dmFsdWUpKSB7CisJCQljYXNlIEdNQlVTX05PQ1lD TEU6CisJCQkJYnJlYWs7CisJCQljYXNlIEdNQlVTX1NUT1A6CisJCQkJLyogRnJvbSBzcGVjOgor CQkJCVRoaXMgY2FuIG9ubHkgY2F1c2UgYSBTVE9QIHRvIGJlIGdlbmVyYXRlZAorCQkJCWlmIGEg R01CVVMgY3ljbGUgaXMgZ2VuZXJhdGVkLCB0aGUgR01CVVMgaXMKKwkJCQljdXJyZW50bHkgaW4g YSBkYXRhL3dhaXQvaWRsZSBwaGFzZSwgb3IgaXQgaXMgaW4gYQorCQkJCVdBSVQgcGhhc2UKKwkJ CQkgKi8KKwkJCQlpZiAoZ21idXMxX2J1c19jeWNsZShfX3ZyZWcodmd0LCBvZmZzZXQpKSAhPSBH TUJVU19OT0NZQ0xFKSB7CisJCQkJCWd2dF9pbml0X2kyY19lZGlkKHZndCk7CisJCQkJCS8qIEFm dGVyIHRoZSAnc3RvcCcgY3ljbGUsIGh3IHN0YXRlIHdvdWxkIGJlY29tZQorCQkJCQkgKiAnc3Rv cCBwaGFzZScgYW5kIHRoZW4gJ2lkbGUgcGhhc2UnIGFmdGVyIGEgZmV3CisJCQkJCSAqIG1pbGxp c2Vjb25kcy4gSW4gZW11bGF0aW9uLCB3ZSBqdXN0IHNldCBpdCBhcworCQkJCQkgKiAnaWRsZSBw aGFzZScgKCdzdG9wIHBoYXNlJyBpcyBub3QKKwkJCQkJICogdmlzaWJsZSBpbiBnbWJ1cyBpbnRl cmZhY2UpCisJCQkJCSAqLworCQkJCQlpMmNfZWRpZC0+Z21idXMucGhhc2UgPSBHTUJVU19JRExF X1BIQVNFOworCQkJCQkvKgorCQkJCQlGSVhNRTogbmV2ZXIgY2xlYXIgR01CVVNfV0FJVAorCQkJ CQlfX3ZyZWcodmd0LCBfUENIX0dNQlVTMikgJj0KKwkJCQkJCX4oR01CVVNfQUNUSVZFIHwgR01C VVNfSFdfV0FJVF9QSEFTRSk7CisJCQkJCSovCisJCQkJCV9fdnJlZyh2Z3QsIF9QQ0hfR01CVVMy KSAmPSB+R01CVVNfQUNUSVZFOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTklEWF9OU19X OgorCQkJY2FzZSBJRFhfTlNfVzoKKwkJCWNhc2UgTklEWF9TVE9QOgorCQkJY2FzZSBJRFhfU1RP UDoKKwkJCQkvKiBGcm9tIGh3IHNwZWMgdGhlIEdNQlVTIHBoYXNlCisJCQkJICogdHJhbnNpdGlv biBsaWtlIHRoaXM6CisJCQkJICogU1RBUlQgKC0tPklOREVYKSAtLT5EQVRBCisJCQkJICovCisJ CQkJaTJjX2VkaWQtPmdtYnVzLnBoYXNlID0gR01CVVNfREFUQV9QSEFTRTsKKwkJCQlfX3ZyZWco dmd0LCBfUENIX0dNQlVTMikgfD0gR01CVVNfQUNUSVZFOworCQkJCS8qIEZJWE1FOiBuZXZlciBj bGVhciBHTUJVU19XQUlUICovCisJCQkJLy9fX3ZyZWcodmd0LCBfUENIX0dNQlVTMikgJj0gfkdN QlVTX0hXX1dBSVRfUEhBU0U7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWd2dF9lcnIo IlVua25vd24vcmVzZXJ2ZWQgR01CVVMgY3ljbGUgZGV0ZWN0ZWQhIik7CisJCQkJYnJlYWs7CisJ CX0KKwkJLyogRnJvbSBodyBzcGVjIHRoZSBXQUlUIHN0YXRlIHdpbGwgYmUKKwkJICogY2xlYXJl ZDoKKwkJICogKDEpIGluIGEgbmV3IEdNQlVTIGN5Y2xlCisJCSAqICgyKSBieSBnZW5lcmF0aW5n IGEgc3RvcAorCQkgKi8KKwkJLyogRklYTUU6IG5ldmVyIGNsZWFyIEdNQlVTX1dBSVQKKwkJaWYg KGdtYnVzMV9idXNfY3ljbGUod3ZhbHVlKSAhPSBHTUJVU19OT0NZQ0xFKQorCQkJX192cmVnKHZn dCwgX1BDSF9HTUJVUzIpICY9IH5HTUJVU19IV19XQUlUX1BIQVNFOworCQkqLworCisJCV9fdnJl Zyh2Z3QsIG9mZnNldCkgPSB3dmFsdWU7CisJfQorCXJldHVybiB0cnVlOworfQorCitib29sIGd2 dF9nbWJ1czNfbW1pb193cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQg b2Zmc2V0LAorCXZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVzKQoreworCUFTU0VSVF9W TSgwLCB2Z3QpOworCXJldHVybiB0cnVlOworfQorCitib29sIGd2dF9nbWJ1czNfbW1pb19yZWFk KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXZvaWQgKnBf ZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVzKQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgYnl0 ZV9kYXRhOworCXN0cnVjdCBndnRfaTJjX2VkaWRfdCAqaTJjX2VkaWQgPSAmdmd0LT5zdGF0ZS5k aXNwbGF5Lmd2dF9pMmNfZWRpZDsKKwlpbnQgYnl0ZV9sZWZ0ID0gaTJjX2VkaWQtPmdtYnVzLnRv dGFsX2J5dGVfY291bnQgLQorCQkJCWkyY19lZGlkLT5jdXJyZW50X2VkaWRfcmVhZDsKKwlpbnQg Ynl0ZV9jb3VudCA9IGJ5dGVfbGVmdDsKKwl1MzIgcmVnX2RhdGEgPSAwOworCisJLyogRGF0YSBj YW4gb25seSBiZSByZWNldmllZCBpZiBwcmV2aW91cyBzZXR0aW5ncyBjb3JyZWN0ICovCisJaWYg KF9fdnJlZyh2Z3QsIF9QQ0hfR01CVVMxKSAmIEdNQlVTX1NMQVZFX1JFQUQpIHsKKwkJaWYgKGJ5 dGVfbGVmdCA8PSAwKSB7CisJCQltZW1jcHkoKGNoYXIgKilwX2RhdGEsIChjaGFyICopdmd0LT5z dGF0ZS5tbWlvLnZyZWcgKyBvZmZzZXQsIGJ5dGVzKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisK KwkJaWYgKGJ5dGVfY291bnQgPiA0KQorCQkJYnl0ZV9jb3VudCA9IDQ7CisJCWZvciAoaSA9IDA7 IGk8IGJ5dGVfY291bnQ7IGkrKykgeworCQkJYnl0ZV9kYXRhID0gZWRpZF9nZXRfYnl0ZSh2Z3Qp OworCQkJcmVnX2RhdGEgfD0gKGJ5dGVfZGF0YSA8PCAoaSA8PCAzKSk7CisJCX0KKworCQltZW1j cHkoKGNoYXIgKilwX2RhdGEsIChjaGFyICopJnJlZ19kYXRhLCBieXRlX2NvdW50KTsKKwkJbWVt Y3B5KChjaGFyICopdmd0LT5zdGF0ZS5tbWlvLnZyZWcgKyBvZmZzZXQsIChjaGFyICopJnJlZ19k YXRhLCBieXRlX2NvdW50KTsKKworCQlpZiAoYnl0ZV9sZWZ0IDw9IDQpIHsKKwkJCXN3aXRjaCAo aTJjX2VkaWQtPmdtYnVzLmN5Y2xlX3R5cGUpIHsKKwkJCQljYXNlIE5JRFhfU1RPUDoKKwkJCQlj YXNlIElEWF9TVE9QOgorCQkJCQlpMmNfZWRpZC0+Z21idXMucGhhc2UgPSBHTUJVU19JRExFX1BI QVNFOworCQkJCQlicmVhazsKKwkJCQljYXNlIE5JRFhfTlNfVzoKKwkJCQljYXNlIElEWF9OU19X OgorCQkJCWRlZmF1bHQ6CisJCQkJCWkyY19lZGlkLT5nbWJ1cy5waGFzZSA9IEdNQlVTX1dBSVRf UEhBU0U7CisJCQkJCWJyZWFrOworCQkJfQorCQkJZ3Z0X2luaXRfaTJjX2VkaWQodmd0KTsKKwkJ fQorCisJCS8qIFJlYWQgR01CVVMzIGR1cmluZyBzZW5kIG9wZXJhdGlvbiwgcmV0dXJuIHRoZSBs YXRlc3Qgd3JpdHRlbiB2YWx1ZSAqLworCX0gZWxzZSB7CisJCW1lbWNweSgoY2hhciAqKXBfZGF0 YSwgKGNoYXIgKil2Z3QtPnN0YXRlLm1taW8udnJlZyArIG9mZnNldCwgYnl0ZXMpOworCQlwcmlu dGsoInZHVCglZCk6IHdhcm5pbmc6IGdtYnVzMyByZWFkIHdpdGggbm90aGluZyByZXR1bmVkXG4i LAorCQkJCXZndC0+aWQpOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBn dnRfZ21idXMyX21taW9fcmVhZChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQg b2Zmc2V0LAorCQl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcykKK3sKKwl1MzIgdmFs dWUgPSBfX3ZyZWcodmd0LCBvZmZzZXQpOworCWlmICghKF9fdnJlZyh2Z3QsIG9mZnNldCkgJiBH TUJVU19JTlVTRSkpIHsKKwkJX192cmVnKHZndCwgb2Zmc2V0KSB8PSBHTUJVU19JTlVTRTsKKwl9 CisKKwltZW1jcHkocF9kYXRhLCAodm9pZCAqKSZ2YWx1ZSwgYnl0ZXMpOworCXJldHVybiB0cnVl OworfQorCitib29sIGd2dF9nbWJ1czJfbW1pb193cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRl cykKK3sKKwl1MzIgd3ZhbHVlID0gKih1MzIgKilwX2RhdGE7CisJaWYgKHd2YWx1ZSAmIEdNQlVT X0lOVVNFKQorCQlfX3ZyZWcodmd0LCBvZmZzZXQpICY9IH5HTUJVU19JTlVTRTsKKwkvKiBBbGwg b3RoZXIgYml0cyBhcmUgcmVhZC1vbmx5ICovCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZ3Z0 X2kyY19oYW5kbGVfZ21idXNfcmVhZChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBp bnQgb2Zmc2V0LAorCXZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVzKQoreworCUFTU0VS VChieXRlcyA8PSA4ICYmICEob2Zmc2V0ICYgKGJ5dGVzIC0gMSkpKTsKKwlzd2l0Y2ggKG9mZnNl dCkgeworCQljYXNlIF9QQ0hfR01CVVMyOgorCQkJcmV0dXJuIGd2dF9nbWJ1czJfbW1pb19yZWFk KHZndCwgb2Zmc2V0LCBwX2RhdGEsIGJ5dGVzKTsKKwkJY2FzZSBfUENIX0dNQlVTMzoKKwkJCXJl dHVybiBndnRfZ21idXMzX21taW9fcmVhZCh2Z3QsIG9mZnNldCwgcF9kYXRhLCBieXRlcyk7CisJ CWRlZmF1bHQ6CisJCQltZW1jcHkocF9kYXRhLCAoY2hhciAqKXZndC0+c3RhdGUubW1pby52cmVn ICsgb2Zmc2V0LCBieXRlcyk7CisJfQorCXJldHVybiB0cnVlOworfQorCitib29sIGd2dF9pMmNf aGFuZGxlX2dtYnVzX3dyaXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBv ZmZzZXQsCisJdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJQVNTRVJUKGJ5 dGVzIDw9IDggJiYgIShvZmZzZXQgJiAoYnl0ZXMgLSAxKSkpOworCXN3aXRjaCAob2Zmc2V0KSB7 CisJCWNhc2UgX1BDSF9HTUJVUzA6CisJCQlyZXR1cm4gZ3Z0X2dtYnVzMF9tbWlvX3dyaXRlKHZn dCwgb2Zmc2V0LCBwX2RhdGEsIGJ5dGVzKTsKKwkJY2FzZSBfUENIX0dNQlVTMToKKwkJCXJldHVy biBndnRfZ21idXMxX21taW9fd3JpdGUodmd0LCBvZmZzZXQsIHBfZGF0YSwgYnl0ZXMpOworCQlj YXNlIF9QQ0hfR01CVVMyOgorCQkJcmV0dXJuIGd2dF9nbWJ1czJfbW1pb193cml0ZSh2Z3QsIG9m ZnNldCwgcF9kYXRhLCBieXRlcyk7CisJCS8qIFRPRE86ICovCisJCWNhc2UgX1BDSF9HTUJVUzM6 CisJCQlCVUcoKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJZGVmYXVsdDoKKwkJCW1lbWNweSgoY2hh ciAqKXZndC0+c3RhdGUubW1pby52cmVnICsgb2Zmc2V0LCBwX2RhdGEsIGJ5dGVzKTsKKwl9CisJ cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgQVVYX0NIX1JFR0lTVEVSUyBndnRfZ2V0 X2F1eF9jaF9yZWcodW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlBVVhfQ0hfUkVHSVNURVJTIHJl ZzsKKwlzd2l0Y2ggKG9mZnNldCAmIDB4ZmYpIHsKKwljYXNlIDB4MTA6CisJCXJlZyA9IEFVWF9D SF9DVEw7CisJCWJyZWFrOworCWNhc2UgMHgxNDoKKwkJcmVnID0gQVVYX0NIX0RBVEExOworCQli cmVhazsKKwljYXNlIDB4MTg6CisJCXJlZyA9IEFVWF9DSF9EQVRBMjsKKwkJYnJlYWs7CisJY2Fz ZSAweDFjOgorCQlyZWcgPSBBVVhfQ0hfREFUQTM7CisJCWJyZWFrOworCWNhc2UgMHgyMDoKKwkJ cmVnID0gQVVYX0NIX0RBVEE0OworCQlicmVhazsKKwljYXNlIDB4MjQ6CisJCXJlZyA9IEFVWF9D SF9EQVRBNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnID0gQVVYX0NIX0lOVjsKKwkJYnJl YWs7CisJfQorCXJldHVybiByZWc7Cit9CisKKyNkZWZpbmUgQVVYX0NUTF9NU0dfTEVOR1RIKHJl ZykgXAorCSgocmVnICYgX0RQX0FVWF9DSF9DVExfTUVTU0FHRV9TSVpFX01BU0spID4+IFwKKwkJ X0RQX0FVWF9DSF9DVExfTUVTU0FHRV9TSVpFX1NISUZUKQorCit2b2lkIGd2dF9pMmNfaGFuZGxl X2F1eF9jaF93cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAorCQkJCWVudW0gcG9ydCBwb3J0 X2lkeCwKKwkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCXZvaWQgKnBfZGF0YSkKK3sKKwlz dHJ1Y3QgZ3Z0X2kyY19lZGlkX3QgKmkyY19lZGlkID0gJnZndC0+c3RhdGUuZGlzcGxheS5ndnRf aTJjX2VkaWQ7CisJaW50IG1zZ19sZW5ndGgsIHJldF9tc2dfc2l6ZTsKKwlpbnQgbXNnLCBhZGRy LCBjdHJsLCBvcDsKKwlpbnQgdmFsdWUgPSAqKGludCAqKXBfZGF0YTsKKwlpbnQgYXV4X2RhdGFf Zm9yX3dyaXRlID0gMDsKKwlBVVhfQ0hfUkVHSVNURVJTIHJlZyA9IGd2dF9nZXRfYXV4X2NoX3Jl ZyhvZmZzZXQpOworCisJaWYgKHJlZyAhPSBBVVhfQ0hfQ1RMKSB7CisJCV9fdnJlZyh2Z3QsIG9m ZnNldCkgPSB2YWx1ZTsKKwkJcmV0dXJuOworCX0KKworCW1zZ19sZW5ndGggPSBBVVhfQ1RMX01T R19MRU5HVEgodmFsdWUpOworCS8vIGNoZWNrIHRoZSBtc2cgaW4gREFUQSByZWdpc3Rlci4KKwlt c2cgPSBfX3ZyZWcodmd0LCBvZmZzZXQgKyA0KTsKKwlhZGRyID0gKG1zZyA+PiA4KSAmIDB4ZmZm ZjsKKwljdHJsID0gKG1zZyA+PiAyNCkmIDB4ZmY7CisJb3AgPSBjdHJsID4+IDQ7CisJaWYgKCEo dmFsdWUgJiBfUkVHQklUX0RQX0FVWF9DSF9DVExfU0VORF9CVVNZKSkgeworCQkvKiBUaGUgY3Rs IHdyaXRlIHRvIGNsZWFyIHNvbWUgc3RhdGVzICovCisJCXJldHVybjsKKwl9CisKKwkvKiBBbHdh eXMgc2V0IHRoZSB3YW50ZWQgdmFsdWUgZm9yIHZtcy4gKi8KKwlyZXRfbXNnX3NpemUgPSAoKChv cCAmIDB4MSkgPT0gR1ZUX0FVWF9JMkNfUkVBRCkgPyAyIDogMSk7CisJX192cmVnKHZndCwgb2Zm c2V0KSA9CisJCV9SRUdCSVRfRFBfQVVYX0NIX0NUTF9ET05FIHwKKwkJKChyZXRfbXNnX3NpemUg PDwgX0RQX0FVWF9DSF9DVExfTUVTU0FHRV9TSVpFX1NISUZUKSAmCisJCV9EUF9BVVhfQ0hfQ1RM X01FU1NBR0VfU0laRV9NQVNLKTsKKworCWlmIChtc2dfbGVuZ3RoID09IDMpIHsKKwkJaWYgKCEo b3AgJiBHVlRfQVVYX0kyQ19NT1QpKSB7CisJCQkvKiBzdG9wICovCisJCQlndnRfZGJnKEdWVF9E QkdfRURJRCwKKwkJCQkiQVVYX0NIOiBzdG9wLiByZXNldCBJMkMhXG4iKTsKKwkJCWd2dF9pbml0 X2kyY19lZGlkKHZndCk7CisJCX0gZWxzZSB7CisJCQkvKiBzdGFydCBvciByZXN0YXJ0ICovCisJ CQlndnRfZGJnKEdWVF9EQkdfRURJRCwKKwkJCQkiQVVYX0NIOiBzdGFydCBvciByZXN0YXJ0IEky QyFcbiIpOworCQkJaTJjX2VkaWQtPmF1eF9jaC5pMmNfb3Zlcl9hdXhfY2ggPSB0cnVlOworCQkJ aTJjX2VkaWQtPmF1eF9jaC5hdXhfY2hfbW90ID0gdHJ1ZTsKKwkJCWlmIChhZGRyID09IDApIHsK KwkJCQkvKiByZXNldCB0aGUgYWRkcmVzcyAqLworCQkJCWd2dF9kYmcoR1ZUX0RCR19FRElELAor CQkJCQkiQVVYX0NIOiByZXNldCBJMkMhXG4iKTsKKwkJCQlndnRfaW5pdF9pMmNfZWRpZCh2Z3Qp OworCQkJfSBlbHNlIGlmIChhZGRyID09IEVESURfQUREUikgeworCQkJCWd2dF9kYmcoR1ZUX0RC R19FRElELAorCQkJCQkiQVVYX0NIOiBzZXR0aW5nIEVESURfQUREUiFcbiIpOworCQkJCWkyY19l ZGlkLT5zdGF0ZSA9IEkyQ19BVVhfQ0g7CisJCQkJaTJjX2VkaWQtPnBvcnQgPSBwb3J0X2lkeDsK KwkJCQlpMmNfZWRpZC0+c2xhdmVfc2VsZWN0ZWQgPSB0cnVlOworCQkJCWlmIChkcHlfaGFzX21v bml0b3Jfb25fcG9ydCh2Z3QsIHBvcnRfaWR4KSAmJgorCQkJCQlkcHlfcG9ydF9pc19kcCh2Z3Qs IHBvcnRfaWR4KSkKKwkJCQkJaTJjX2VkaWQtPmVkaWRfYXZhaWxhYmxlID0gdHJ1ZTsKKwkJCX0g ZWxzZSB7CisJCQkJZ3Z0X2RiZyhHVlRfREJHX0VESUQsCisJCSJOb3Qgc3VwcG9ydGVkIGFkZHJl c3MgYWNjZXNzIFsweCV4XXdpdGggSTJDIG92ZXIgQVVYX0NIIVxuIiwKKwkJCQlhZGRyKTsKKwkJ CX0KKwkJfQorCX0gZWxzZSBpZiAoKG9wICYgMHgxKSA9PSBHVlRfQVVYX0kyQ19XUklURSkgewor CQkvKiBUT0RPCisJCSAqIFdlIG9ubHkgc3VwcG9ydCBFRElEIHJlYWRpbmcgZnJvbSBJMkNfb3Zl cl9BVVguIEFuZAorCQkgKiB3ZSBkbyBub3QgZXhwZWN0IHRoZSBpbmRleCBtb2RlIHRvIGJlIHVz ZWQuIFJpZ2h0IG5vdworCQkgKiB0aGUgV1JJVEUgb3BlcmF0aW9uIGlzIGlnbm9yZWQuIEl0IGlz IGdvb2QgZW5vdWdoIHRvCisJCSAqIHN1cHBvcnQgdGhlIGdmeCBkcml2ZXIgdG8gZG8gRURJRCBh Y2Nlc3MuCisJCSAqLworCX0gZWxzZSB7CisJCUFTU0VSVCgob3AgJiAweDEpID09IEdWVF9BVVhf STJDX1JFQUQpOworCQlBU1NFUlQobXNnX2xlbmd0aCA9PSA0KTsKKwkJaWYgKGkyY19lZGlkLT5l ZGlkX2F2YWlsYWJsZSAmJiBpMmNfZWRpZC0+c2xhdmVfc2VsZWN0ZWQpIHsKKwkJCXVuc2lnbmVk IGNoYXIgdmFsID0gZWRpZF9nZXRfYnl0ZSh2Z3QpOworCQkJYXV4X2RhdGFfZm9yX3dyaXRlID0g KHZhbCA8PCAxNik7CisJCX0KKwl9CisKKwkvKiB3cml0ZSB0aGUgcmV0dXJuIHZhbHVlIGluIEFV WF9DSF9EQVRBIHJlZyB3aGljaCBpbmNsdWRlczoKKwkgKiBBQ0sgb2YgSTJDX1dSSVRFCisJICog cmV0dXJuZWQgYnl0ZSBpZiBpdCBpcyBSRUFECisJICovCisJYXV4X2RhdGFfZm9yX3dyaXRlIHw9 IChHVlRfQVVYX0kyQ19SRVBMWV9BQ0sgJiAweGZmKSA8PCAyNDsKKwlfX3ZyZWcodmd0LCBvZmZz ZXQgKyA0KSA9IGF1eF9kYXRhX2Zvcl93cml0ZTsKKworCXJldHVybjsKK30KKwordm9pZCBndnRf aW5pdF9pMmNfZWRpZChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCXN0cnVjdCBndnRfaTJj X2VkaWRfdCAqZWRpZCA9ICZ2Z3QtPnN0YXRlLmRpc3BsYXkuZ3Z0X2kyY19lZGlkOworCisJZWRp ZC0+c3RhdGUgPSBJMkNfTk9UX1NQRUNJRklFRDsKKworCWVkaWQtPnBvcnQgPSBJOTE1X01BWF9Q T1JUUzsKKwllZGlkLT5zbGF2ZV9zZWxlY3RlZCA9IGZhbHNlOworCWVkaWQtPmVkaWRfYXZhaWxh YmxlID0gZmFsc2U7CisJZWRpZC0+Y3VycmVudF9lZGlkX3JlYWQgPSAwOworCisJbWVtc2V0KCZl ZGlkLT5nbWJ1cywgMCwgc2l6ZW9mKHN0cnVjdCBndnRfaTJjX2dtYnVzX3QpKTsKKworCWVkaWQt PmF1eF9jaC5pMmNfb3Zlcl9hdXhfY2ggPSBmYWxzZTsKKwllZGlkLT5hdXhfY2guYXV4X2NoX21v dCA9IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2VkaWQu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9lZGlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYWE4MGZmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9lZGlkLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykg MjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cisg KgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwK KyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9H VlRfRURJRF9IXworI2RlZmluZSBfR1ZUX0VESURfSF8KKworI2RlZmluZSBFRElEX1NJWkUJCTEy OAorI2RlZmluZSBFRElEX0FERFIJCTB4NTAgLyogTGludXggaHZtIEVESUQgYWRkciAqLworCisj ZGVmaW5lIEdWVF9BVVhfTkFUSVZFX1dSSVRFCQkJMHg4CisjZGVmaW5lIEdWVF9BVVhfTkFUSVZF X1JFQUQJCQkweDkKKyNkZWZpbmUgR1ZUX0FVWF9JMkNfV1JJVEUJCQkweDAKKyNkZWZpbmUgR1ZU X0FVWF9JMkNfUkVBRAkJCTB4MQorI2RlZmluZSBHVlRfQVVYX0kyQ19TVEFUVVMJCQkweDIKKyNk ZWZpbmUgR1ZUX0FVWF9JMkNfTU9UCQkJCTB4NAorI2RlZmluZSBHVlRfQVVYX0kyQ19SRVBMWV9B Q0sJCQkoMHgwIDw8IDYpCisKKyNkZWZpbmUgX1JFR0JJVF9EUF9BVVhfQ0hfQ1RMX1NFTkRfQlVT WSAoMSA8PCAzMSkKKyNkZWZpbmUgX1JFR0JJVF9EUF9BVVhfQ0hfQ1RMX0RPTkUgKDEgPDwgMzAp CisjZGVmaW5lIF9EUF9BVVhfQ0hfQ1RMX01FU1NBR0VfU0laRV9TSElGVCAJMjAKKyNkZWZpbmUg X0RQX0FVWF9DSF9DVExfTUVTU0FHRV9TSVpFX01BU0sgCSgweDFmIDw8IDIwKQorCitzdHJ1Y3Qg Z3Z0X2VkaWRfZGF0YV90eworCWJvb2wgZGF0YV92YWxpZDsKKwl1bnNpZ25lZCBjaGFyIGVkaWRf YmxvY2tbRURJRF9TSVpFXTsKK307CisKK2VudW0gZ21idXNfY3ljbGVfdHlwZV90eworCUdNQlVT X05PQ1lDTEUJPSAweDAsCisJTklEWF9OU19XCT0gMHgxLAorCUlEWF9OU19XCT0gMHgzLAorCUdN QlVTX1NUT1AJPSAweDQsCisJTklEWF9TVE9QCT0gMHg1LAorCUlEWF9TVE9QCT0gMHg3Cit9Owor CisvKgorICogU3RhdGVzIG9mIEdNQlVTCisgKgorICogR01CVVMwLTMgY291bGQgYmUgcmVsYXRl ZCB0byB0aGUgRURJRCB2aXJ0dWFsaXphdGlvbi4gQW5vdGhlciB0d28gR01CVVMKKyAqIHJlZ2lz dGVycywgR01CVVM0IChpbnRlcnJ1cHQgbWFzaykgYW5kIEdNQlVTNSAoMiBieXRlIGluZGVzIHJl Z2lzdGVyKSwgYXJlCisgKiBub3QgY29uc2lkZXJlZCBoZXJlLiBCZWxvdyBkZXNjcmliZXMgdGhl IHVzYWdlIG9mIEdNQlVTIHJlZ2lzdGVycyB0aGF0IGFyZQorICogY2FyZWQgYnkgdGhlIEVESUQg dmlydHVhbGl6YXRpb24KKyAqCisgKiBHTUJVUzA6CisgKiAJUi9XCisgKiAJcG9ydCBzZWxlY3Rp b24uIHZhbHVlIG9mIGJpdDAgLSBiaXQyIGNvcnJlc3BvbmRzIHRvIHRoZSBHUElPIHJlZ2lzdGVy cy4KKyAqCisgKiBHTUJVUzE6CisgKiAJUi9XIFByb3RlY3QKKyAqIAlDb21tYW5kIGFuZCBTdGF0 dXMuCisgKiAJYml0MCBpcyB0aGUgZGlyZWN0aW9uIGJpdDogMSBpcyByZWFkOyAwIGlzIHdyaXRl LgorICogCWJpdDEgLSBiaXQ3IGlzIHNsYXZlIDctYml0IGFkZHJlc3MuCisgKiAJYml0MTYgLSBi aXQyNCB0b3RhbCBieXRlIGNvdW50IChpZ25vcmU/KQorICoKKyAqIEdNQlVTMjoKKyAqIAlNb3N0 IG9mIGJpdHMgYXJlIHJlYWQgb25seSBleGNlcHQgYml0IDE1IChJTl9VU0UpCisgKiAJU3RhdHVz IHJlZ2lzdGVyCisgKiAJYml0MCAtIGJpdDggY3VycmVudCBieXRlIGNvdW50CisgKiAJYml0IDEx OiBoYXJkd2FyZSByZWFkeTsKKyAqCisgKiBHTUJVUzM6CisgKglSZWFkL1dyaXRlCisgKglEYXRh IGZvciB0cmFuc2ZlcgorICovCisKKy8qIEZyb20gaHcgc3BlY3MsIE90aGVyIHBoYXNlcyBsaWtl IFNUQVJULCBBRERSRVNTLCBJTkRFWAorICogYXJlIGludmlzaWJsZSB0byBHTUJVUyBNTUlPIGlu dGVyZmFjZS4gU28gbm8gZGVmaW5pdGlvbnMKKyAqIGluIGJlbG93IGVudW0gdHlwZXMKKyAqLwor ZW51bSBndnRfZ21idXNfcGhhc2VfdHsKKwlHTUJVU19JRExFX1BIQVNFID0gMCwKKwlHTUJVU19E QVRBX1BIQVNFLAorCUdNQlVTX1dBSVRfUEhBU0UsCisJLy9HTUJVU19TVE9QX1BIQVNFLAorCUdN QlVTX01BWF9QSEFTRQorfTsKKworc3RydWN0IGd2dF9pMmNfZ21idXNfdCB7CisJdW5zaWduZWQg dG90YWxfYnl0ZV9jb3VudDsgLyogZnJvbSBHTUJVUzEgKi8KKwllbnVtIGdtYnVzX2N5Y2xlX3R5 cGVfdCBjeWNsZV90eXBlOworCWVudW0gZ3Z0X2dtYnVzX3BoYXNlX3QgcGhhc2U7Cit9OworCitz dHJ1Y3QgZ3Z0X2kyY19hdXhfY2hfdHsKKwlib29sIGkyY19vdmVyX2F1eF9jaDsKKwlib29sIGF1 eF9jaF9tb3Q7Cit9OworCitlbnVtIGkyY19zdGF0ZV90IHsKKwlJMkNfTk9UX1NQRUNJRklFRCA9 IDAsCisJSTJDX0dNQlVTID0gMSwKKwlJMkNfQVVYX0NIID0gMgorfTsKKworLyogSTJDIHNlcXVl bmNlcyBjYW5ub3QgaW50ZXJsZWF2ZS4KKyAqIEdNQlVTIGFuZCBBVVhfQ0ggc2VxdWVuY2VzIGNh bm5vdCBpbnRlcmxlYXZlLgorICovCitzdHJ1Y3QgZ3Z0X2kyY19lZGlkX3QgeworCWVudW0gaTJj X3N0YXRlX3Qgc3RhdGU7CisKKwl1bnNpZ25lZCBwb3J0OworCWJvb2wgc2xhdmVfc2VsZWN0ZWQ7 CisJYm9vbCBlZGlkX2F2YWlsYWJsZTsKKwl1bnNpZ25lZCBjdXJyZW50X2VkaWRfcmVhZDsKKwor CXN0cnVjdCBndnRfaTJjX2dtYnVzX3QgZ21idXM7CisJc3RydWN0IGd2dF9pMmNfYXV4X2NoX3Qg YXV4X2NoOworfTsKKwordm9pZCBndnRfaW5pdF9pMmNfZWRpZChzdHJ1Y3Qgdmd0X2RldmljZSAq dmd0KTsKKworYm9vbCBndnRfaTJjX2hhbmRsZV9nbWJ1c19yZWFkKHN0cnVjdCB2Z3RfZGV2aWNl ICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQg Ynl0ZXMpOworCitib29sIGd2dF9pMmNfaGFuZGxlX2dtYnVzX3dyaXRlKHN0cnVjdCB2Z3RfZGV2 aWNlICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBp bnQgYnl0ZXMpOworCit2b2lkIGd2dF9pMmNfaGFuZGxlX2F1eF9jaF93cml0ZShzdHJ1Y3Qgdmd0 X2RldmljZSAqdmd0LAorCQkJCWVudW0gcG9ydCBwb3J0X2lkeCwKKwkJCQl1bnNpZ25lZCBpbnQg b2Zmc2V0LAorCQkJCXZvaWQgKnBfZGF0YSk7CisKK2Jvb2wgZ3Z0X2lzX2VkaWRfdmFsaWQodTgg KnJhd19lZGlkKTsKKworI2RlZmluZSBBVVhfUkVHSVNURVJfTlVNIDYKK3R5cGVkZWYgZW51bSB7 CisJQVVYX0NIX0lOViA9IC0xLAorCUFVWF9DSF9DVEwgPSAwLAorCUFVWF9DSF9EQVRBMSwKKwlB VVhfQ0hfREFUQTIsCisJQVVYX0NIX0RBVEEzLAorCUFVWF9DSF9EQVRBNCwKKwlBVVhfQ0hfREFU QTUKK31BVVhfQ0hfUkVHSVNURVJTOworCitzdGF0aWMgaW5saW5lIGVudW0gcG9ydCBndnRfZ2V0 X2RwX3BvcnRfaWR4KHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJZW51bSBwb3J0IHBvcnRfaWR4 OworCisJaWYgKG9mZnNldCA+PSBfUENIX0RQQV9BVVhfQ0hfQ1RMCisJCSYmIG9mZnNldCA8PSBf UENIX0RQQV9BVVhfQ0hfQ1RMICsKKwkJCQlBVVhfUkVHSVNURVJfTlVNICogc2l6ZW9mKHUzMikp IHsKKwkJcmV0dXJuIFBPUlRfQTsKKwl9CisKKwlzd2l0Y2ggKCgob2Zmc2V0ICYgMHhmZjAwKSA+ PiA4KSAtIDB4NDEpIHsKKwljYXNlIDA6CisJCXBvcnRfaWR4ID0gUE9SVF9COworCQlicmVhazsK KwljYXNlIDE6CisJCXBvcnRfaWR4ID0gUE9SVF9DOworCQlicmVhazsKKwljYXNlIDI6CisJCXBv cnRfaWR4ID0gUE9SVF9EOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwb3J0X2lkeCA9IEk5MTVf TUFYX1BPUlRTOworCQlicmVhazsKKwl9CisJcmV0dXJuIHBvcnRfaWR4OworfQorCisjZW5kaWYg LypfR1ZUX0VESURfSF8qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2 dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jCmluZGV4IDg0NTQ5YTAuLmVhODcx Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKQEAgLTI0Miw2ICsyNDIsMTIgQEAgc3RhdGljIGlu dCBndnRfc2VydmljZV90aHJlYWQodm9pZCAqZGF0YSkKIAkJCWd2dF9kcHlfcmVhZHlfdWV2ZW50 X2hhbmRsZXIocGRldik7CiAJCX0KIAorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEdWVF9SRVFV RVNUX0VNVUxfRFBZX0VWRU5UUywKKwkJCQkJKHZvaWQgKikmcGRldi0+c2VydmljZV9yZXF1ZXN0 KSkgeworCQkJbXV0ZXhfbG9jaygmcGRldi0+bG9jayk7CisJCQlndnRfZW11bGF0ZV9kaXNwbGF5 X2V2ZW50cyhwZGV2KTsKKwkJCW11dGV4X3VubG9jaygmcGRldi0+bG9jayk7CisJCX0KIAogCQlp ZiAocikgewogCQkJZ3Z0X3dhcm4oInNlcnZpY2UgdGhyZWFkIGlzIHdha2VuIHVwIGJ5IHVuZXhw ZWN0ZWQgc2lnbmFsLiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2 dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCmluZGV4IDYyY2JiNjIuLmI0NGI1 YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJj Zmdfc3BhY2UuaCIKICNpbmNsdWRlICJvcHJlZ2lvbi5oIgogI2luY2x1ZGUgImZiX2RlY29kZXIu aCIKKyNpbmNsdWRlICJlZGlkLmgiCisjaW5jbHVkZSAiZGlzcGxheS5oIgogCiAjZGVmaW5lIEdW VF9NQVhfVkdQVSA4CiAKQEAgLTEyMywxMSArMTI1LDE4IEBAIHN0cnVjdCBndnRfdmlydHVhbF9n bV9zdGF0ZSB7CiAJc3RydWN0IGd2dF9nbV9ub2RlIG5vZGU7CiB9OwogCitzdHJ1Y3QgZ3Z0X3Zp cnR1YWxfZGlzcGxheV9zdGF0ZSB7CisJc3RydWN0IGd2dF9pMmNfZWRpZF90ICAgZ3Z0X2kyY19l ZGlkOworCXN0cnVjdCBndF9wb3J0ICAgICAgICAgIHBvcnRzW0k5MTVfTUFYX1BPUlRTXTsKKwlz dHJ1Y3Qgc2JpX3JlZ2lzdGVycyBzYmlfcmVnczsKK307CisKIHN0cnVjdCBndnRfdmlydHVhbF9k ZXZpY2Vfc3RhdGUgewogCXN0cnVjdCBndnRfdmlydHVhbF9nbV9zdGF0ZSBnbTsKIAlzdHJ1Y3Qg Z3Z0X3ZpcnR1YWxfbW1pb19zdGF0ZSBtbWlvOwogCXN0cnVjdCBndnRfdmlydHVhbF9jZmdfc3Rh dGUgY2ZnOwogCXN0cnVjdCBndnRfdmlydHVhbF9vcHJlZ2lvbl9zdGF0ZSBvcHJlZ2lvbjsKKwlz dHJ1Y3QgZ3Z0X3ZpcnR1YWxfZGlzcGxheV9zdGF0ZSBkaXNwbGF5OwogfTsKIAogc3RydWN0IGd2 dF91ZXZlbnQgewpAQCAtNjc2LDYgKzY4NSw5IEBAIGJvb2wgZ3Z0X2RlZmF1bHRfbW1pb193cml0 ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB2b2lkICpwCiBi b29sIHJlZ2lzdGVyX21taW9faGFuZGxlcihzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiwgdW5zaWdu ZWQgaW50IHN0YXJ0LCBpbnQgYnl0ZXMsCiAJZ3Z0X21taW9faGFuZGxlcl90IHJlYWQsIGd2dF9t bWlvX2hhbmRsZXJfdCB3cml0ZSk7CiAKK2Jvb2wgZ3Z0X3VwZGF0ZV9kaXNwbGF5X2V2ZW50c19l bXVsYXRpb24oc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpOwordm9pZCBndnRfZW11bGF0ZV9kaXNw bGF5X2V2ZW50cyhzdHJ1Y3QgcGd0X2RldmljZSAqcGRldik7CisKICNpbmNsdWRlICJtcHQuaCIK IAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaGFuZGxlcnMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oYW5kbGVycy5jCmluZGV4IGJhMjljOWMuLjYz OGEyOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oYW5kbGVycy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oYW5kbGVycy5jCkBAIC0zOSw2ICszOSwxOCBA QCBzdGF0aWMgYm9vbCBtbWlvX25vdF9hbGxvd193cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 LAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbCBnbWJ1c19tbWlvX3JlYWQoc3RydWN0 IHZndF9kZXZpY2UgKnZndCwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJdm9pZCAqcF9kYXRhLCB1 bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJcmV0dXJuIGd2dF9pMmNfaGFuZGxlX2dtYnVzX3JlYWQo dmd0LCBvZmZzZXQsIHBfZGF0YSwgYnl0ZXMpOworfQorCitzdGF0aWMgYm9vbCBnbWJ1c19tbWlv X3dyaXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXZv aWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVzKQoreworCXJldHVybiBndnRfaTJjX2hhbmRs ZV9nbWJ1c193cml0ZSh2Z3QsIG9mZnNldCwgcF9kYXRhLCBieXRlcyk7Cit9CisKIC8qIEZlbmNl IE1NSU8gaGFuZGxlcnMuICovCiBzdGF0aWMgYm9vbCBjaGVja19mZW5jZV9tbWlvX2FjY2Vzcyhz dHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAogCQl1bnNpZ25lZCBpbnQgb2ZmLCB2b2lkICpwX2RhdGEs IHVuc2lnbmVkIGludCBieXRlcykKQEAgLTEzOCwxMiArMTUwLDc3NyBAQCBzdGF0aWMgYm9vbCBn ZHJzdF9tbWlvX3dyaXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBvZmZz ZXQsCiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIHBjaF9wcF9jb250cm9sX21taW9f d3JpdGUoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJdm9p ZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJdTMyIGRhdGE7CisJdTMyIHJlZzsK Kwl1bmlvbiBfUENIX1BQX0NUTCBwcF9jb250cm9sOworCXVuaW9uIF9QQ0hfUFBfU1RBVVRTIHBw X3N0YXR1czsKKworCXJlZyA9IG9mZnNldCAmIH4oYnl0ZXMgLSAxKTsKKworCWRhdGEgPSAqKHUz MiopcF9kYXRhOworCisJX192cmVnKHZndCwgX1BDSF9QUF9DT05UUk9MKSA9IGRhdGE7CisKKwlw cF9jb250cm9sLmRhdGEgPSBkYXRhOworCXBwX3N0YXR1cy5kYXRhID0gX192cmVnKHZndCwgX1BD SF9QUF9TVEFUVVMpOworCWlmIChwcF9jb250cm9sLnBvd2VyX3N0YXRlX3RhcmdldCA9PSAxKXsK KwkJLyogcG93ZXIgb24gcGFuZWwgKi8KKwkJcHBfc3RhdHVzLnBhbmVsX3Bvd2VyZV9vbl9zdGF0 dWUgPSAxOworCQlwcF9zdGF0dXMucG93ZXJfc2VxdWVuY2VfcHJvZ3Jlc3MgPSAwOworCQlwcF9z dGF0dXMucG93ZXJfY3ljbGVfZGVsYXlfYWN0aXZlID0gMDsKKwl9IGVsc2UgeworCQkvKiBwb3dl ciBkb3duIHBhbmVsICovCisJCXBwX3N0YXR1cy5wYW5lbF9wb3dlcmVfb25fc3RhdHVlID0gMDsK KwkJcHBfc3RhdHVzLnBvd2VyX3NlcXVlbmNlX3Byb2dyZXNzID0gMDsKKwkJcHBfc3RhdHVzLnBv d2VyX2N5Y2xlX2RlbGF5X2FjdGl2ZSA9IDA7CisJfQorCV9fdnJlZyh2Z3QsIF9QQ0hfUFBfU1RB VFVTKSA9IHBwX3N0YXR1cy5kYXRhOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s IHRyYW5zYWNvbmZfbW1pb193cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBp bnQgb2Zmc2V0LAorCQl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcykKK3sKKwl1bmlv biBfVFJBTlNfQ09ORklHIGNvbmZpZzsKKworCWNvbmZpZy5kYXRhID0gKih1MzIqKXBfZGF0YTsK Kwljb25maWcudHJhbnNjb2Rlcl9zdGF0ZSA9IGNvbmZpZy50cmFuc2NvZGVyX2VuYWJsZTsKKwor CV9fdnJlZyh2Z3QsIG9mZnNldCkgPSBjb25maWcuZGF0YTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIFRPRE86IENoZWNrIHRoZSBob3RwbHVnIGJpdCBkZWZpbml0aW9ucyBvbiBCRFcrCisg Ki8KK3N0YXRpYyBib29sIHNob3RwbHVnX2N0bF9tbWlvX3dyaXRlKHN0cnVjdCB2Z3RfZGV2aWNl ICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50 IGJ5dGVzKQoreworCXUzMiB2YWwgPSAqKHUzMiAqKXBfZGF0YTsKKwl1MzIgc3RpY2t5X21hc2sg PSBfUkVHQklUX0RQX0JfU1RBVFVTIHwKKwkJX1JFR0JJVF9EUF9DX1NUQVRVUyB8CisJCV9SRUdC SVRfRFBfRF9TVEFUVVM7CisKKwlfX3ZyZWcodmd0LCBvZmZzZXQpID0gKHZhbCAmIH5zdGlja3lf bWFzaykgfAorCQkoX192cmVnKHZndCwgb2Zmc2V0KSAmIHN0aWNreV9tYXNrKTsKKwlfX3ZyZWco dmd0LCBvZmZzZXQpICY9IH4odmFsICYgc3RpY2t5X21hc2spOworCisJX19zcmVnKHZndCwgb2Zm c2V0KSA9IHZhbDsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBsY3BsbF9jdGxf bW1pb193cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAor CQl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcykKK3sKKwl1MzIgZGF0YSA9ICoodTMy ICopcF9kYXRhOworCisJaWYgKGRhdGEgJiBMQ1BMTF9QTExfRElTQUJMRSkKKwkJZGF0YSAmPSB+ TENQTExfUExMX0xPQ0s7CisJZWxzZQorCQlkYXRhIHw9IExDUExMX1BMTF9MT0NLOworCisJaWYg KGRhdGEgJiBMQ1BMTF9DRF9TT1VSQ0VfRkNMSykKKwkJZGF0YSB8PSBMQ1BMTF9DRF9TT1VSQ0Vf RkNMS19ET05FOworCWVsc2UKKwkJZGF0YSAmPSB+TENQTExfQ0RfU09VUkNFX0ZDTEtfRE9ORTsK KworCXJldHVybiBndnRfZGVmYXVsdF9tbWlvX3dyaXRlKHZndCwgb2Zmc2V0LCAmZGF0YSwgYnl0 ZXMpOworfQorCitzdGF0aWMgYm9vbCBkcHlfcmVnX21taW9fcmVhZChzdHJ1Y3Qgdmd0X2Rldmlj ZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGlu dCBieXRlcykKK3sKKwkqKHUzMiopcF9kYXRhID0gKDE8PDE3KTsKKworCXJldHVybiB0cnVlOwor fQorCitzdGF0aWMgYm9vbCBkcHlfcmVnX21taW9fcmVhZF8yKHN0cnVjdCB2Z3RfZGV2aWNlICp2 Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5 dGVzKQoreworCSoodTMyKilwX2RhdGEgPSAzOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyBib29sIGRweV9yZWdfbW1pb19yZWFkXzMoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdW5zaWdu ZWQgaW50IG9mZnNldCwKKwkJdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJ Kih1MzIqKXBfZGF0YSA9ICgweDJGIDw8IDE2KTsKKworCXJldHVybiB0cnVlOworfQorCiBzdGF0 aWMgYm9vbCByaW5nX21vZGVfd3JpdGUoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdW5zaWduZWQg aW50IG9mZiwKIAkJdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCiB7CiAJcmV0dXJu IHRydWU7CiB9CiAKK3N0YXRpYyBib29sIHBpcGVfY29uZl9tbWlvX3dyaXRlKHN0cnVjdCB2Z3Rf ZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXZvaWQgKnBfZGF0YSwgdW5zaWdu ZWQgaW50IGJ5dGVzKQoreworCXUzMiB3cl9kYXRhID0gKigodTMyICopcF9kYXRhKTsKKworCS8q IHZyZWcgc3RhdHVzIHdpbGwgYmUgdXBkYXRlZCB3aGVuIHdoZW4gcmVhZCBoYXJkd2FyZSBzdGF0 dXMgKi8KKwlpZiAod3JfZGF0YSAmIFBJUEVDT05GX0VOQUJMRSkKKwkJd3JfZGF0YSB8PSBJOTY1 X1BJUEVDT05GX0FDVElWRTsKKwllbHNlIGlmICghKHdyX2RhdGEgJiBQSVBFQ09ORl9FTkFCTEUp KQorCQl3cl9kYXRhICY9IEk5NjVfUElQRUNPTkZfQUNUSVZFOworCisJaWYgKCFndnRfZGVmYXVs dF9tbWlvX3dyaXRlKHZndCwgb2Zmc2V0LCAmd3JfZGF0YSwgYnl0ZXMpKQorCQlyZXR1cm4gZmFs c2U7CisKKwlyZXR1cm4gZ3Z0X3VwZGF0ZV9kaXNwbGF5X2V2ZW50c19lbXVsYXRpb24odmd0LT5w ZGV2KTsKK30KKworc3RhdGljIGJvb2wgZGRpX2J1Zl9jdGxfbW1pb193cml0ZShzdHJ1Y3Qgdmd0 X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQl2b2lkICpwX2RhdGEsIHVuc2ln bmVkIGludCBieXRlcykKK3sKKwlib29sIHJjOworCXUzMiByZWdfdmFsOworCXJlZ192YWwgPSAq KHUzMiAqKXBfZGF0YTsKKworCS8vIHNldCB0aGUgZnVsbHkgdmlydHVhbGl6ZWQgUk8gYml0IHdp dGggaXRzIG9yaWdpbmFsIHZhbHVlCisJcmVnX3ZhbCA9IChyZWdfdmFsICYgfl9ERElfQlVGQ1RM X0RFVEVDVF9NQVNLKQorCQl8IChfX3ZyZWcodmd0LCBvZmZzZXQpICYgX0RESV9CVUZDVExfREVU RUNUX01BU0spOworCisJcmMgPSBndnRfZGVmYXVsdF9tbWlvX3dyaXRlKHZndCwgb2Zmc2V0LCAm cmVnX3ZhbCwgYnl0ZXMpOworCisJLy91cGRhdGUgaWRsZSBzdGF0dXMgd2hlbiBlbmFibGUvZGlz YWJsZSBEREkgYnVmCisJcmVnX3ZhbCA9IF9fdnJlZyh2Z3QsIG9mZnNldCk7CisKKwlpZiAocmVn X3ZhbCAmIF9SRUdCSVRfRERJX0JVRl9FTkFCTEUpCisJCXJlZ192YWwgJj0gfl9SRUdCSVRfRERJ X0JVRl9JU19JRExFOworCWVsc2UKKwkJcmVnX3ZhbCB8PSBfUkVHQklUX0RESV9CVUZfSVNfSURM RTsKKworCV9fdnJlZyh2Z3QsIG9mZnNldCkgPSByZWdfdmFsOworCisJLy8gY2xlYXIgdGhlIGF1 dG9fdHJhaW5pbmcgZG9uZSBiaXQKKwlpZiAoKG9mZnNldCA9PSBfUkVHX0RESV9CVUZfQ1RMX0Up ICYmCisJCQkoIShyZWdfdmFsICYgX1JFR0JJVF9ERElfQlVGX0VOQUJMRSkpKSB7CisJCV9fdnJl Zyh2Z3QsIF9SRUdfRFBfVFBfU1RBVFVTX0UpICY9CisJCQl+RFBfVFBfU1RBVFVTX0FVVE9UUkFJ Tl9ET05FOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGJvb2wgZmRpX3J4X2lpcl9t bWlvX3dyaXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJ CXZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVzKQoreworCXVuc2lnbmVkIGludCByZWc7 CisJdTMyIHdyX2RhdGEsIG9sZF9paXI7CisJYm9vbCByYzsKKwlyZWcgPSBvZmZzZXQgJiB+KGJ5 dGVzIC0xKTsKKworCXdyX2RhdGEgPSAqKHUzMiAqKXBfZGF0YTsKKwlvbGRfaWlyID0gX192cmVn KHZndCwgcmVnKTsKKworCXJjID0gZ3Z0X2RlZmF1bHRfbW1pb193cml0ZSh2Z3QsIG9mZnNldCwg cF9kYXRhLCBieXRlcyk7CisKKwkvKiBGSVhNRTogc3JlZyB3aWxsIGJlIHVwZGF0ZWQgb25seSB3 aGVuIHJlYWRpbmcgaGFyZHdhcmUgc3RhdHVzIGhhcHBlbmVkLAorCSAqIHNvIHdoZW4gZHVtcGlu ZyBzcmVnIHNwYWNlLCB0aGUgImhhcmR3YXJlIHN0YXR1cyIgcmVsYXRlZCBiaXRzIG1heSBub3QK KwkgKiBiZSB0cnVzdGVkICovCisJX192cmVnKHZndCwgcmVnKSA9IG9sZF9paXIgXiB3cl9kYXRh OworCXJldHVybiByYzsKK30KKworI2RlZmluZSBGRElfTElOS19UUkFJTl9QQVRURVJOMQkJMAor I2RlZmluZSBGRElfTElOS19UUkFJTl9QQVRURVJOMgkJMQorCitzdGF0aWMgYm9vbCBmZGlfYXV0 b190cmFpbmluZ19zdGFydGVkKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCit7CisJYm9vbCByYyA9 IGZhbHNlOworCisJdTMyIGRkaV9idWZfY3RsID0gX192cmVnKHZndCwgX1JFR19ERElfQlVGX0NU TF9FKTsKKwl1MzIgcnhfY3RsID0gX192cmVnKHZndCwgX0ZESV9SWEFfQ1RMKTsKKwl1MzIgdHhf Y3RsID0gX192cmVnKHZndCwgX1JFR19EUF9UUF9DVExfRSk7CisKKwlpZiAoKGRkaV9idWZfY3Rs ICYgX1JFR0JJVF9ERElfQlVGX0VOQUJMRSkgJiYKKwkJCShyeF9jdGwgJiBGRElfUlhfRU5BQkxF KSAmJgorCQkJKHJ4X2N0bCAmIF9SRUdCSVRfRkRJX1JYX0ZESV9BVVRPX1RSQUlOX0VOQUJMRSkg JiYKKwkJCSh0eF9jdGwgJiBEUF9UUF9DVExfRU5BQkxFKSAmJgorCQkJKHR4X2N0bCAmIF9SRUdC SVRfRFBfVFBfRkRJX0FVVE9fVFJBSU5fRU5BQkxFKSkgeworCQlyYyA9IHRydWU7CisJfQorCisJ cmV0dXJuIHJjOworfQorCisvKiBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBoaWdobHkgcGxhdGZv cm0tZGVwZW5kZW50IChTTkIgKyBDUFQpICovCitzdGF0aWMgYm9vbCBjaGVja19mZGlfcnhfdHJh aW5fc3RhdHVzKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCisJCWVudW0gcGlwZSBwaXBlLCB1bnNp Z25lZCBpbnQgdHJhaW5fcGF0dGVybikKK3sKKwl1bnNpZ25lZCBpbnQgZmRpX3J4X2ltciwgZmRp X3R4X2N0bCwgZmRpX3J4X2N0bDsKKwl1bnNpZ25lZCBpbnQgZmRpX3J4X2NoZWNrX2JpdHMsIGZk aV90eF9jaGVja19iaXRzOworCXVuc2lnbmVkIGludCBmZGlfcnhfdHJhaW5fYml0cywgZmRpX3R4 X3RyYWluX2JpdHM7CisJdW5zaWduZWQgaW50IGZkaV9paXJfY2hlY2tfYml0czsKKwlmZGlfcnhf aW1yID0gR1ZUX0ZESV9SWF9JTVIocGlwZSk7CisJZmRpX3R4X2N0bCA9IEdWVF9GRElfVFhfQ1RM KHBpcGUpOworCWZkaV9yeF9jdGwgPSBHVlRfRkRJX1JYX0NUTChwaXBlKTsKKworCWlmICh0cmFp bl9wYXR0ZXJuID09IEZESV9MSU5LX1RSQUlOX1BBVFRFUk4xKSB7CisJCWZkaV9yeF90cmFpbl9i aXRzID1GRElfTElOS19UUkFJTl9QQVRURVJOXzFfQ1BUOworCQlmZGlfdHhfdHJhaW5fYml0cyA9 IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwkJZmRpX2lpcl9jaGVja19iaXRzID0gX1JFR0JJ VF9GRElfUlhfQklUX0xPQ0s7CisJfSBlbHNlIGlmICh0cmFpbl9wYXR0ZXJuID09IEZESV9MSU5L X1RSQUlOX1BBVFRFUk4yKSB7CisJCWZkaV9yeF90cmFpbl9iaXRzID0gRkRJX0xJTktfVFJBSU5f UEFUVEVSTl8yX0NQVDsKKwkJZmRpX3R4X3RyYWluX2JpdHMgPSBGRElfTElOS19UUkFJTl9QQVRU RVJOXzI7CisJCWZkaV9paXJfY2hlY2tfYml0cyA9IF9SRUdCSVRfRkRJX1JYX1NZTUJPTF9MT0NL OworCX0gZWxzZSB7CisJCUJVRygpOworCX0KKworCWZkaV9yeF9jaGVja19iaXRzID0gRkRJX1JY X0VOQUJMRSB8IGZkaV9yeF90cmFpbl9iaXRzOworCWZkaV90eF9jaGVja19iaXRzID0gX1JFR0JJ VF9GRElfVFhfRU5BQkxFIHwgZmRpX3R4X3RyYWluX2JpdHM7CisKKwkvKiBJZiBpbXIgYml0IG5v dCBiZWVuIG1hc2tlZCAqLworCWlmICgoKF9fdnJlZyh2Z3QsIGZkaV9yeF9pbXIpICYgZmRpX2lp cl9jaGVja19iaXRzKSA9PSAwKQorCQkJJiYgKChfX3ZyZWcodmd0LCBmZGlfdHhfY3RsKQorCQkJ CQkmIGZkaV90eF9jaGVja19iaXRzKSA9PSBmZGlfdHhfY2hlY2tfYml0cykKKwkJCSYmICgoX192 cmVnKHZndCwgZmRpX3J4X2N0bCkKKwkJCQkJJiBmZGlfcnhfY2hlY2tfYml0cykgPT0gZmRpX3J4 X2NoZWNrX2JpdHMpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30K Kworc3RhdGljIGJvb2wgdXBkYXRlX2ZkaV9yeF9paXJfc3RhdHVzKHN0cnVjdCB2Z3RfZGV2aWNl ICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50 IGJ5dGVzKQoreworCWVudW0gcGlwZSBwaXBlOworCXVuc2lnbmVkIGludCByZWcsIGZkaV9yeF9p aXI7CisJYm9vbCByYzsKKwlyZWcgPSBvZmZzZXQgJiB+KGJ5dGVzIC0gMSk7CisKKwlzd2l0Y2gg KG9mZnNldCkgeworCQljYXNlIF9GRElfUlhBX0NUTDoKKwkJY2FzZSBfRkRJX1RYQV9DVEw6CisJ CWNhc2UgX0ZESV9SWEFfSU1SOgorCQkJcGlwZSA9IFBJUEVfQTsKKwkJCWJyZWFrOworCisJCWNh c2UgX0ZESV9SWEJfQ1RMOgorCQljYXNlIF9GRElfVFhCX0NUTDoKKwkJY2FzZSBfRkRJX1JYQl9J TVI6CisJCQlwaXBlID0gUElQRV9COworCQkJYnJlYWs7CisKKwkJY2FzZSBfUkVHX0ZESV9SWENf Q1RMOgorCQljYXNlIF9SRUdfRkRJX1RYQ19DVEw6CisJCWNhc2UgX1JFR19GRElfUlhDX0lNUjoK KwkJCXBpcGUgPSBQSVBFX0M7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJ fQorCisJZmRpX3J4X2lpciA9IEdWVF9GRElfUlhfSUlSKHBpcGUpOworCisJcmMgPSBndnRfZGVm YXVsdF9tbWlvX3dyaXRlKHZndCwgb2Zmc2V0LCBwX2RhdGEsIGJ5dGVzKTsKKwlpZiAoY2hlY2tf ZmRpX3J4X3RyYWluX3N0YXR1cyh2Z3QsIHBpcGUsIEZESV9MSU5LX1RSQUlOX1BBVFRFUk4xKSkK KwkJX192cmVnKHZndCwgZmRpX3J4X2lpcikgfD0gX1JFR0JJVF9GRElfUlhfQklUX0xPQ0s7CisJ aWYgKGNoZWNrX2ZkaV9yeF90cmFpbl9zdGF0dXModmd0LCBwaXBlLCBGRElfTElOS19UUkFJTl9Q QVRURVJOMikpCisJCV9fdnJlZyh2Z3QsIGZkaV9yeF9paXIpIHw9IF9SRUdCSVRfRkRJX1JYX1NZ TUJPTF9MT0NLOworCWlmIChvZmZzZXQgPT0gX0ZESV9SWEFfQ1RMKSB7CisJCWlmIChmZGlfYXV0 b190cmFpbmluZ19zdGFydGVkKHZndCkpCisJCQlfX3ZyZWcodmd0LCBfUkVHX0RQX1RQX1NUQVRV U19FKSB8PQorCQkJCURQX1RQX1NUQVRVU19BVVRPVFJBSU5fRE9ORTsKKwl9CisJcmV0dXJuIHJj OworfQorCisjZGVmaW5lIERQX1RQX0NUTF8xMF84X01BU0sJMHgwMDAwMDcwMAorI2RlZmluZSBE UF9UUF9DVExfOF9TSElGVAkweDgKKyNkZWZpbmUgRFBfVFBfU1RBVFVTXzI1X1NISUZUCTI1CisK K3N0YXRpYyBib29sIGRwX3RwX2N0bF9tbWlvX3dyaXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Qs IHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVz KQoreworCWVudW0gcG9ydCBwb3J0OworCXVuc2lnbmVkIGludCBkcF90cF9zdGF0dXNfcmVnLCB2 YWw7CisJdTMyIGN0bF92YWw7CisJYm9vbCByYzsKKwlyYyA9IGd2dF9kZWZhdWx0X21taW9fd3Jp dGUodmd0LCBvZmZzZXQsIHBfZGF0YSwgYnl0ZXMpOworCisJcG9ydCA9IERQX1RQX1BPUlQob2Zm c2V0KTsKKwljdGxfdmFsID0gX192cmVnKHZndCwgb2Zmc2V0KTsKKwl2YWwgPSAoY3RsX3ZhbCAm IERQX1RQX0NUTF8xMF84X01BU0spID4+IERQX1RQX0NUTF84X1NISUZUOworCisJaWYgKHZhbCA9 PSAweDIpIHsKKwkJZHBfdHBfc3RhdHVzX3JlZyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KERQX1RQ X1NUQVRVUyhwb3J0KSk7CisJCV9fdnJlZyh2Z3QsIGRwX3RwX3N0YXR1c19yZWcpIHw9ICgxIDw8 IERQX1RQX1NUQVRVU18yNV9TSElGVCk7CisJCV9fc3JlZyh2Z3QsIGRwX3RwX3N0YXR1c19yZWcp ID0gX192cmVnKHZndCwgZHBfdHBfc3RhdHVzX3JlZyk7CisJfQorCXJldHVybiByYzsKK30KKwor I2RlZmluZSBCSVRfMjcJCTI3CisjZGVmaW5lIEJJVF8yNgkJMjYKKyNkZWZpbmUgQklUXzI0CQky NAorCitzdGF0aWMgYm9vbCBkcF90cF9zdGF0dXNfbW1pb193cml0ZShzdHJ1Y3Qgdmd0X2Rldmlj ZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGlu dCBieXRlcykKK3sKKwlib29sIHJjID0gdHJ1ZTsKKwl1MzIgcmVnX3ZhbDsKKwl1MzIgc3RpY2t5 X21hc2s7CisJcmVnX3ZhbCA9ICooKHUzMiAqKXBfZGF0YSk7CisJc3RpY2t5X21hc2sgPSAoMSA8 PCBCSVRfMjcpIHwgKDEgPDwgQklUXzI2KSB8ICgxIDw8IEJJVF8yNCk7CisKKwlfX3ZyZWcodmd0 LCBvZmZzZXQpID0gKHJlZ192YWwgJiB+c3RpY2t5X21hc2spIHwKKwkJKF9fdnJlZyh2Z3QsIG9m ZnNldCkgJiBzdGlja3lfbWFzayk7CisJX192cmVnKHZndCwgb2Zmc2V0KSAmPSB+KHJlZ192YWwg JiBzdGlja3lfbWFzayk7CisKKwlfX3NyZWcodmd0LCBvZmZzZXQpID0gcmVnX3ZhbDsKKworCXJl dHVybiByYzsKK30KKworc3RhdGljIGJvb2wgcGNoX2FkcGFfbW1pb193cml0ZShzdHJ1Y3Qgdmd0 X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQl2b2lkICpwX2RhdGEsIHVuc2ln bmVkIGludCBieXRlcykKK3sKKwl1MzIgb2xkID0gX192cmVnKHZndCwgb2Zmc2V0KTsKKwl1MzIg bmV3ID0gKih1MzIgKilwX2RhdGE7CisKKwlpZiAobmV3ICYgQURQQV9DUlRfSE9UUExVR19GT1JD RV9UUklHR0VSKSB7CisJCW5ldyAmPSB+KEFEUEFfQ1JUX0hPVFBMVUdfRk9SQ0VfVFJJR0dFUiB8 CisJCQkJQURQQV9DUlRfSE9UUExVR19NT05JVE9SX01BU0spOworCX0gZWxzZSB7CisJCS8qIGln bm9yZSB0aGUgc3RhdHVzIGJpdHMgaW4gbmV3IHZhbHVlCisJCSAqIHNpbmNlIHRoZXkgYXJlIHJl YWQgb25seSBhY3R1YWxseQorCQkgKi8KKwkJbmV3ID0gKG5ldyAmIH5BRFBBX0NSVF9IT1RQTFVH X01PTklUT1JfTUFTSykgfAorCQkJKG9sZCAmIEFEUEFfQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNL KTsKKwl9CisKKwlyZXR1cm4gZ3Z0X2RlZmF1bHRfbW1pb193cml0ZSh2Z3QsIG9mZnNldCwgJm5l dywgYnl0ZXMpOworfQorCitzdGF0aWMgYm9vbCBwcmlfc3VyZl9tbWlvX3dyaXRlKHN0cnVjdCB2 Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXZvaWQgKnBfZGF0YSwgdW5z aWduZWQgaW50IGJ5dGVzKQoreworCXN0cnVjdCBndnRfZmJfbm90aWZ5X21zZyBtc2c7CisJZW51 bSBwaXBlIHBpcGUgPSBHVlRfRFNQU1VSRlBJUEUob2Zmc2V0KTsKKwl1MzIgc3VyZmxpdmVfcmVn ID0gR1ZUX0RTUFNVUkZMSVZFKHBpcGUpOworCisJaWYgKCFndnRfZGVmYXVsdF9tbWlvX3dyaXRl KHZndCwgb2Zmc2V0LCBwX2RhdGEsIGJ5dGVzKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogVXBk YXRlIHZpcnR1YWwgc3VyZmxpdmUgcmVnaXN0ZXIgKi8KKwlpZiAoIWd2dF9kZWZhdWx0X21taW9f d3JpdGUodmd0LCBzdXJmbGl2ZV9yZWcsIHBfZGF0YSwgYnl0ZXMpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlfX3ZyZWcodmd0LCBHVlRfUElQRV9GTElQQ09VTlQocGlwZSkpKys7CisJZ3Z0X2luamVj dF9mbGlwX2RvbmUodmd0LCBHVlRfRFNQU1VSRlBJUEUob2Zmc2V0KSk7CisKKwltc2cudm1faWQg PSB2Z3QtPnZtX2lkOworCW1zZy5wbGFuZV9pZCA9IFBSSU1BUllfUExBTkU7CisJbXNnLnBpcGVf aWQgPSBHVlRfRFNQU1VSRlBJUEUob2Zmc2V0KTsKKwlndnRfZmJfbm90aWZpZXJfY2FsbF9jaGFp bihGQl9ESVNQTEFZX0ZMSVAsICZtc2cpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi b29sIHNwcl9zdXJmX21taW9fd3JpdGUoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdW5zaWduZWQg aW50IG9mZnNldCwKKwkJdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJc3Ry dWN0IGd2dF9mYl9ub3RpZnlfbXNnIG1zZzsKKwllbnVtIHBpcGUgcGlwZSA9IEdWVF9TUFJTVVJG UElQRShvZmZzZXQpOworCXUzMiBzdXJmbGl2ZV9yZWcgPSBHVlRfU1BSU1VSRkxJVkUocGlwZSk7 CisKKwlpZiAoIWd2dF9kZWZhdWx0X21taW9fd3JpdGUodmd0LCBvZmZzZXQsIHBfZGF0YSwgYnl0 ZXMpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBVcGRhdGUgdmlydHVhbCBzdXJmbGl2ZSByZWdp c3RlciAqLworCWlmICghZ3Z0X2RlZmF1bHRfbW1pb193cml0ZSh2Z3QsIHN1cmZsaXZlX3JlZywg cF9kYXRhLCBieXRlcykpCisJCXJldHVybiBmYWxzZTsKKworCW1zZy52bV9pZCA9IHZndC0+dm1f aWQ7CisJbXNnLnBsYW5lX2lkID0gU1BSSVRFX1BMQU5FOworCW1zZy5waXBlX2lkID0gR1ZUX1NQ UlNVUkZQSVBFKG9mZnNldCk7CisJZ3Z0X2ZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRElTUExB WV9GTElQLCAmbXNnKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBzb3V0aF9j aGlja2VuMl93cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0 LAorCQl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcykKK3sKKwl1MzIgZGF0YSA9ICoo dTMyICopcF9kYXRhOworCisJaWYgKGRhdGEgJiBGRElfTVBIWV9JT1NGU0JfUkVTRVRfQ1RMKQor CQlkYXRhIHw9IEZESV9NUEhZX0lPU0ZTQl9SRVNFVF9TVEFUVVM7CisJZWxzZQorCQlkYXRhICY9 IH5GRElfTVBIWV9JT1NGU0JfUkVTRVRfU1RBVFVTOworCisJcmV0dXJuIGd2dF9kZWZhdWx0X21t aW9fd3JpdGUodmd0LCBvZmZzZXQsICZkYXRhLCBieXRlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGRw X2F1eF9jaF90cmlnZ2VyX2ludGVycnVwdF9vbl9kb25lKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Qs IHUzMiB2YWx1ZSwKKwkJdW5zaWduZWQgaW50IHJlZykKK3sKKwllbnVtIGd2dF9ldmVudF90eXBl IGV2ZW50ID0gR1ZUX0VWRU5UX01BWDsKKwlpZiAocmVnID09IF9QQ0hfRFBBX0FVWF9DSF9DVEwp IHsKKwkJZXZlbnQgPSBBVVhfQ0hBTk5FTF9BOworCX0gZWxzZSBpZiAocmVnID09IF9QQ0hfRFBC X0FVWF9DSF9DVEwpIHsKKwkJZXZlbnQgPSBBVVhfQ0hFTk5FTF9COworCX0gZWxzZSBpZiAocmVn ID09IF9QQ0hfRFBDX0FVWF9DSF9DVEwpIHsKKwkJZXZlbnQgPSBBVVhfQ0hFTk5FTF9DOworCX0g ZWxzZSBpZiAocmVnID09IF9QQ0hfRFBEX0FVWF9DSF9DVEwpIHsKKwkJZXZlbnQgPSBBVVhfQ0hF Tk5FTF9EOworCX0KKworCWlmIChldmVudCAhPSBHVlRfRVZFTlRfTUFYICYmIChEUF9BVVhfQ0hf Q1RMX0lOVEVSUlVQVCAmIHZhbHVlKSkgeworCQlndnRfdHJpZ2dlcl92aXJ0dWFsX2V2ZW50KHZn dCwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQgZHBfYXV4X2NoX2N0bF90cmFuc19kb25l KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHUzMiB2YWx1ZSwKKwkJdW5zaWduZWQgaW50IHJlZywg aW50IGxlbiwgYm9vbCBkYXRhX3ZhbGlkKQoreworCS8qIG1hcmsgdHJhbnNhY3Rpb24gZG9uZSAq LworCXZhbHVlIHw9IF9SRUdCSVRfRFBfQVVYX0NIX0NUTF9ET05FOworCXZhbHVlICY9IH5fUkVH QklUX0RQX0FVWF9DSF9DVExfU0VORF9CVVNZOworCXZhbHVlICY9IH5EUF9BVVhfQ0hfQ1RMX1JF Q0VJVkVfRVJST1I7CisKKwlpZiAoZGF0YV92YWxpZCkgeworCQl2YWx1ZSAmPSB+RFBfQVVYX0NI X0NUTF9USU1FX09VVF9FUlJPUjsKKwl9IGVsc2UgeworCQl2YWx1ZSB8PSBEUF9BVVhfQ0hfQ1RM X1RJTUVfT1VUX0VSUk9SOworCX0KKworCS8qIG1lc3NhZ2Ugc2l6ZSAqLworCXZhbHVlICY9IH4o MHhmIDw8IDIwKTsKKwl2YWx1ZSB8PSAobGVuIDw8IDIwKTsKKwlfX3ZyZWcodmd0LCByZWcpID0g dmFsdWU7CisKKwlkcF9hdXhfY2hfdHJpZ2dlcl9pbnRlcnJ1cHRfb25fZG9uZSh2Z3QsIHZhbHVl LCByZWcpOworfQorCitzdGF0aWMgdm9pZCBkcF9hdXhfY2hfY3RsX2xpbmtfdHJhaW5pbmcoc3Ry dWN0IGd2dF9kcGNkX2RhdGEgKmRwY2QsIHVpbnQ4X3QgdCkKK3sKKwlpZiAoKHQgJiBEUENEX1RS QUlOSU5HX1BBVFRFUk5fU0VUX01BU0spID09IERQQ0RfVFJBSU5JTkdfUEFUVEVSTl8xKSB7CisK KwkJLyogdHJhaW5pbmcgcGF0dGVybiAxIGZvciBDUiAqLworCQkvKiBzZXQgTEFORTBfQ1JfRE9O RSwgTEFORTFfQ1JfRE9ORSAqLworCQlkcGNkLT5kYXRhW0RQQ0RfTEFORTBfMV9TVEFUVVNdIHw9 IERQQ0RfTEFORVNfQ1JfRE9ORTsKKwkJLyogc2V0IExBTkUyX0NSX0RPTkUsIExBTkUzX0NSX0RP TkUgKi8KKwkJZHBjZC0+ZGF0YVtEUENEX0xBTkUyXzNfU1RBVFVTXSB8PSBEUENEX0xBTkVTX0NS X0RPTkU7CisKKwl9IGVsc2UgaWYgKCh0ICYgRFBDRF9UUkFJTklOR19QQVRURVJOX1NFVF9NQVNL KSA9PQorCQkJRFBDRF9UUkFJTklOR19QQVRURVJOXzIpIHsKKworCQkvKiB0cmFpbmluZyBwYXR0 ZXJuIDIgZm9yIEVRICovCisKKwkJLyogU2V0IENIQU5ORUxfRVFfRE9ORSBhbmQgIFNZTUJPTF9M T0NLRUQgZm9yIExhbmUwXzEgKi8KKwkJZHBjZC0+ZGF0YVtEUENEX0xBTkUwXzFfU1RBVFVTXSB8 PSBEUENEX0xBTkVTX0VRX0RPTkU7CisJCWRwY2QtPmRhdGFbRFBDRF9MQU5FMF8xX1NUQVRVU10g fD0gRFBDRF9TWU1CT0xfTE9DS0VEOworCisJCS8qIFNldCBDSEFOTkVMX0VRX0RPTkUgYW5kICBT WU1CT0xfTE9DS0VEIGZvciBMYW5lMl8zICovCisJCWRwY2QtPmRhdGFbRFBDRF9MQU5FMl8zX1NU QVRVU10gfD0gRFBDRF9MQU5FU19FUV9ET05FOworCQlkcGNkLT5kYXRhW0RQQ0RfTEFORTJfM19T VEFUVVNdIHw9IERQQ0RfU1lNQk9MX0xPQ0tFRDsKKwkJLyogc2V0IElOVEVSTEFORV9BTElHTl9E T05FICovCisJCWRwY2QtPmRhdGFbRFBDRF9MQU5FX0FMSUdOX1NUQVRVU19VUERBVEVEXSB8PQor CQkJRFBDRF9JTlRFUkxBTkVfQUxJR05fRE9ORTsKKworCX0gZWxzZSBpZiAoKHQgJiBEUENEX1RS QUlOSU5HX1BBVFRFUk5fU0VUX01BU0spID09CisJCQlEUENEX0xJTktfVFJBSU5JTkdfRElTQUJM RUQpIHsKKworCQkvKiBmaW5pc2ggbGluayB0cmFpbmluZyAqLworCQkvKiBzZXQgc2luayBzdGF0 dXMgYXMgc3luY2hyb25pemVkICovCisJCWRwY2QtPmRhdGFbRFBDRF9TSU5LX1NUQVRVU10gPSBE UENEX1NJTktfSU5fU1lOQzsKKwl9Cit9CisKK3N0YXRpYyBib29sIGRwX2F1eF9jaF9jdGxfbW1p b193cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQl2 b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcykKK3sKKwl1bnNpZ25lZCBpbnQgcmVnID0g MDsKKwl1MzIgdmFsdWUgPSAqKHUzMiAqKXBfZGF0YTsKKwlpbnQgbXNnLCBhZGRyLCBjdHJsLCBv cCwgbGVuOworCXN0cnVjdCBndnRfZHBjZF9kYXRhICpkcGNkID0gTlVMTDsKKwllbnVtIHBvcnQg cG9ydF9pZHggPSBndnRfZ2V0X2RwX3BvcnRfaWR4KG9mZnNldCk7CisJc3RydWN0IGd0X3BvcnQg KnBvcnQgPSBOVUxMOworCUFTU0VSVChieXRlcyA9PSA0KTsKKwlBU1NFUlQoKG9mZnNldCAmIChi eXRlcyAtIDEpKSA9PSAwKTsKKworCXJlZyA9IG9mZnNldCAmIH4oYnl0ZXMgLSAxKTsKKworCWd2 dF9kZWZhdWx0X21taW9fd3JpdGUodmd0LCBvZmZzZXQsIHBfZGF0YSwgYnl0ZXMpOworCisJaWYg KHJlZyAhPSBfUENIX0RQQV9BVVhfQ0hfQ1RMICYmCisJCQlyZWcgIT0gX1BDSF9EUEJfQVVYX0NI X0NUTCAmJgorCQkJcmVnICE9IF9QQ0hfRFBDX0FVWF9DSF9DVEwgJiYKKwkJCXJlZyAhPSBfUENI X0RQRF9BVVhfQ0hfQ1RMKSB7CisJCS8qIHdyaXRlIHRvIHRoZSBkYXRhIHJlZ2lzdGVycyAqLwor CQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoISh2YWx1ZSAmIF9SRUdCSVRfRFBfQVVYX0NIX0NU TF9TRU5EX0JVU1kpKSB7CisJCS8qIGp1c3Qgd2FudCB0byBjbGVhciB0aGUgc3RpY2t5IGJpdHMg Ki8KKwkJX192cmVnKHZndCwgcmVnKSA9IDA7CisJCXJldHVybiB0cnVlOworCX0KKworCWlmICgh ZHB5X2lzX3ZhbGlkX3BvcnQocG9ydF9pZHgpKSB7CisJCWd2dF93YXJuKCJ2R1QoJWQpOiBVbnN1 cHBvcnRlZCBEUCBwb3J0IGFjY2VzcyFcbiIsCisJCQkJdmd0LT5pZCk7CisJCXJldHVybiB0cnVl OworCX0KKworCXBvcnQgPSBndnRfdnBvcnQodmd0LCBwb3J0X2lkeCk7CisKKwlpZiAocG9ydCkg eworCQlkcGNkID0gcG9ydC0+ZHBjZDsKKwl9CisKKwkvKiByZWFkIG91dCBtZXNzYWdlIGZyb20g REFUQTEgcmVnaXN0ZXIgKi8KKwltc2cgPSBfX3ZyZWcodmd0LCByZWcgKyA0KTsKKwlhZGRyID0g KG1zZyA+PiA4KSAmIDB4ZmZmZjsKKwljdHJsID0gKG1zZyA+PiAyNCkgJiAweGZmOworCWxlbiA9 IG1zZyAmIDB4ZmY7CisJb3AgPSBjdHJsID4+IDQ7CisKKwlpZiAob3AgPT0gR1ZUX0FVWF9OQVRJ VkVfV1JJVEUpIHsKKwkJaW50IHQ7CisJCXVpbnQ4X3QgYnVmWzE2XTsKKworCQlpZiAoKGFkZHIg KyBsZW4gKyAxKSA+PSBEUENEX1NJWkUpIHsKKwkJCS8qCisJCQkgKiBXcml0ZSByZXF1ZXN0IGV4 Y2VlZHMgd2hhdCB3ZSBzdXBwb3J0ZWQsCisJCQkgKiBEQ1BEIHNwZWM6IFdoZW4gYSBTb3VyY2Ug RGV2aWNlIGlzIHdyaXRpbmcgYSBEUENECisJCQkgKiBhZGRyZXNzIG5vdCBzdXBwb3J0ZWQgYnkg dGhlIFNpbmsgRGV2aWNlLCB0aGUgU2luaworCQkJICogRGV2aWNlIHNoYWxsIHJlcGx5IHdpdGgg QVVYIE5BQ0sgYW5kIOKAnE3igJ0gZXF1YWwgdG8gemVyby4KKwkJCSAqLworCisJCQkvKiBOQUsg dGhlIHdyaXRlICovCisJCQlfX3ZyZWcodmd0LCByZWcgKyA0KSA9IEFVWF9OQVRJVkVfUkVQTFlf TkFLOworCisJCQlkcF9hdXhfY2hfY3RsX3RyYW5zX2RvbmUodmd0LCB2YWx1ZSwgcmVnLCAyLCB0 cnVlKTsKKworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQkvKgorCQkgKiBXcml0ZSByZXF1ZXN0 IGZvcm1hdDogKGNvbW1hbmQgKyBhZGRyZXNzKSBvY2N1cGllcworCQkgKiAzIGJ5dGVzLCBmb2xs b3dlZCBieSAobGVuICsgMSkgYnl0ZXMgb2YgZGF0YS4KKwkJICovCisJCUFTU0VSVCgobGVuICsg NCkgPD0gQVVYX0JVUlNUX1NJWkUpOworCisJCS8qIHVucGFjayBkYXRhIGZyb20gdnJlZyB0byBi dWYgKi8KKwkJZm9yICh0ID0gMDsgdCA8IDQ7IHQgKyspIHsKKwkJCXUzMiByID0gX192cmVnKHZn dCwgcmVnICsgOCArIHQqNCk7CisKKwkJCWJ1Zlt0KjRdID0gKHIgPj4gMjQpICYgMHhmZjsKKwkJ CWJ1Zlt0KjQgKyAxXSA9IChyID4+IDE2KSAmIDB4ZmY7CisJCQlidWZbdCo0ICsgMl0gPSAociA+ PiA4KSAmIDB4ZmY7CisJCQlidWZbdCo0ICsgM10gPSByICYgMHhmZjsKKwkJfQorCisJCS8qIHdy aXRlIHRvIHZpcnR1YWwgRFBDRCAqLworCQlpZiAoZHBjZCAmJiBkcGNkLT5kYXRhX3ZhbGlkKSB7 CisJCQlmb3IgKHQgPSAwOyB0IDw9IGxlbjsgdCArKykgeworCQkJCWludCBwID0gYWRkciArIHQ7 CisKKwkJCQlkcGNkLT5kYXRhW3BdID0gYnVmW3RdOworCisJCQkJLyogY2hlY2sgZm9yIGxpbmsg dHJhaW5pbmcgKi8KKwkJCQlpZiAocCA9PSBEUENEX1RSQUlOSU5HX1BBVFRFUk5fU0VUKQorCQkJ CQlkcF9hdXhfY2hfY3RsX2xpbmtfdHJhaW5pbmcoZHBjZCwgYnVmW3RdKTsKKwkJCX0KKwkJfQor CisJCS8qIEFDSyB0aGUgd3JpdGUgKi8KKwkJX192cmVnKHZndCwgcmVnICsgNCkgPSAwOworCisJ CWRwX2F1eF9jaF9jdGxfdHJhbnNfZG9uZSh2Z3QsIHZhbHVlLCByZWcsIDEsIGRwY2QgJiYgZHBj ZC0+ZGF0YV92YWxpZCk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKG9wID09IEdWVF9B VVhfTkFUSVZFX1JFQUQpIHsKKwkJaW50IGlkeCwgaSwgcmV0ID0gMDsKKworCQlpZiAoKGFkZHIg KyBsZW4gKyAxKSA+PSBEUENEX1NJWkUpIHsKKwkJCS8qCisJCQkgKiByZWFkIHJlcXVlc3QgZXhj ZWVkcyB3aGF0IHdlIHN1cHBvcnRlZAorCQkJICogRFBDRCBzcGVjOiBBIFNpbmsgRGV2aWNlIHJl Y2VpdmluZyBhIE5hdGl2ZSBBVVggQ0gKKwkJCSAqIHJlYWQgcmVxdWVzdCBmb3IgYW4gdW5zdXBw b3J0ZWQgRFBDRCBhZGRyZXNzIG11c3QKKwkJCSAqIHJlcGx5IHdpdGggYW4gQVVYIEFDSyBhbmQg cmVhZCBkYXRhIHNldCBlcXVhbCB0bworCQkJICogemVybyBpbnN0ZWFkIG9mIHJlcGx5aW5nIHdp dGggQVVYIE5BQ0suCisJCQkgKi8KKworCQkJLyogQUNLIHRoZSBSRUFEKi8KKwkJCV9fdnJlZyh2 Z3QsIHJlZyArIDQpID0gMDsKKwkJCV9fdnJlZyh2Z3QsIHJlZyArIDgpID0gMDsKKwkJCV9fdnJl Zyh2Z3QsIHJlZyArIDEyKSA9IDA7CisJCQlfX3ZyZWcodmd0LCByZWcgKyAxNikgPSAwOworCQkJ X192cmVnKHZndCwgcmVnICsgMjApID0gMDsKKworCQkJZHBfYXV4X2NoX2N0bF90cmFuc19kb25l KHZndCAsdmFsdWUsIHJlZywgbGVuICsgMiwgdHJ1ZSk7CisKKwkJCXJldHVybiB0cnVlOworCQl9 CisKKwkJZm9yIChpZHggPSAxOyBpZHggPD0gNTsgaWR4ICsrKSB7CisJCQkvKiBjbGVhciB0aGUg ZGF0YSByZWdpc3RlcnMgKi8KKwkJCV9fdnJlZyh2Z3QsIHJlZyArIDQgKiBpZHgpID0gMDsKKwkJ fQorCisJCS8qCisJCSAqIFJlYWQgcmVwbHkgZm9ybWF0OiBBQ0sgKDEgYnl0ZSkgcGx1cyAobGVu ICsgMSkgYnl0ZXMgb2YgZGF0YS4KKwkJICovCisJCUFTU0VSVCgobGVuICsgMikgPD0gQVVYX0JV UlNUX1NJWkUpOworCisJCS8qIHJlYWQgZnJvbSB2aXJ0dWFsIERQQ0QgdG8gdnJlZyAqLworCQkv KiBmaXJzdCA0IGJ5dGVzOiBbQUNLXVthZGRyXVthZGRyKzFdW2FkZHIrMl0gKi8KKwkJaWYgKGRw Y2QgJiYgZHBjZC0+ZGF0YV92YWxpZCkgeworCQkJZm9yIChpID0gMTsgaSA8PSAobGVuICsgMSk7 IGkgKyspIHsKKwkJCQlpbnQgdDsKKworCQkJCXQgPSBkcGNkLT5kYXRhW2FkZHIgKyBpIC0gMV07 CisJCQkJdCA8PD0gKDI0IC0gOCooaSU0KSk7CisJCQkJcmV0IHw9IHQ7CisKKwkJCQlpZiAoKGkl NCA9PSAzKSB8fCAoaSA9PSAobGVuICsgMSkpKSB7CisJCQkJCV9fdnJlZyh2Z3QsIHJlZyArIChp LzQgKyAxKSo0KSA9IHJldDsKKwkJCQkJcmV0ID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKworCQlk cF9hdXhfY2hfY3RsX3RyYW5zX2RvbmUodmd0LCB2YWx1ZSwgcmVnLCBsZW4gKyAyLCBkcGNkICYm IGRwY2QtPmRhdGFfdmFsaWQpOworCisJCXJldHVybiB0cnVlOworCX0KKworCS8qIGkyYyB0cmFu c2FjdGlvbiBzdGFydHMgKi8KKwlndnRfaTJjX2hhbmRsZV9hdXhfY2hfd3JpdGUodmd0LCBwb3J0 X2lkeCwgb2Zmc2V0LCBwX2RhdGEpOworCisJZHBfYXV4X2NoX3RyaWdnZXJfaW50ZXJydXB0X29u X2RvbmUodmd0LCB2YWx1ZSwgcmVnKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg Z3Z0X2RweV9zdGF0X25vdGlmeShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCXN0cnVjdCBw Z3RfZGV2aWNlICpwZGV2ID0gdmd0LT5wZGV2OworCisJZ3Z0X3NldF9kcHlfdWV2ZW50KHZndCk7 CisJZ3Z0X3JhaXNlX3JlcXVlc3QocGRldiwgR1ZUX1JFUVVFU1RfVUVWRU5UKTsKK30KKworc3Rh dGljIGJvb2wgdmdhX2NvbnRyb2xfdyhzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBp bnQgb2Zmc2V0LAorCQl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcykKK3sKKwlib29s IHZnYV9kaXNhYmxlOworCWd2dF9kZWZhdWx0X21taW9fd3JpdGUodmd0LCBvZmZzZXQsIHBfZGF0 YSwgYnl0ZXMpOworCisJdmdhX2Rpc2FibGUgPSBfX3ZyZWcodmd0LCBvZmZzZXQpICYgX1JFR0JJ VF9WR0FfRElTUExBWV9ESVNBQkxFOworCisJZ3Z0X2luZm8oIlZNKCVkKTogJXMgVkdBIG1vZGUg JXhcbiIsIHZndC0+dm1faWQsCisJCQl2Z2FfZGlzYWJsZSA/ICJEaXNhYmxlIiA6ICJFbmFibGUi LAorCQkJKHVuc2lnbmVkIGludClfX3ZyZWcodmd0LCBvZmZzZXQpKTsKKwlyZXR1cm4gdHJ1ZTsK K30KKworc3RhdGljIHUzMiBnZXRfc2JpX3JlZ19jYWNoZWRfdmFsdWUoc3RydWN0IHZndF9kZXZp Y2UgKnZndCwKKwkJdW5zaWduZWQgaW50IHNiaV9vZmZzZXQpCit7CisJaW50IGk7CisJaW50IG51 bSA9IHZndC0+c3RhdGUuZGlzcGxheS5zYmlfcmVncy5udW1iZXI7CisJdTMyIHZhbHVlID0gMDsK Kwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArKyBpKSB7CisJCWlmICh2Z3QtPnN0YXRlLmRpc3BsYXku c2JpX3JlZ3MucmVnaXN0ZXJzW2ldLm9mZnNldCA9PSBzYmlfb2Zmc2V0KQorCQkJYnJlYWs7CisJ fQorCisJaWYgKGkgPCBudW0pIHsKKwkJdmFsdWUgPSB2Z3QtPnN0YXRlLmRpc3BsYXkuc2JpX3Jl Z3MucmVnaXN0ZXJzW2ldLnZhbHVlOworCX0gZWxzZSB7CisJCWd2dF93YXJuKCJ2R1QoJWQpOiBT QkkgcmVhZGluZyBkaWQgbm90IGZpbmQgdGhlIGNhY2hlZCB2YWx1ZSIKKwkJCQkiIGZvciBvZmZz ZXQgMHgleC4gMCB3aWxsIGJlIHJldHVybmVkIVxuIiwKKwkJCQl2Z3QtPmlkLCBzYmlfb2Zmc2V0 KTsKKwl9CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZCBjYWNoZV9zYmlfcmVnX3Zh bHVlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBzYmlfb2Zmc2V0LAorCQl1 MzIgdmFsdWUpCit7CisJaW50IGk7CisJaW50IG51bSA9IHZndC0+c3RhdGUuZGlzcGxheS5zYmlf cmVncy5udW1iZXI7CisJZm9yIChpID0gMDsgaSA8IG51bTsgKysgaSkgeworCQlpZiAodmd0LT5z dGF0ZS5kaXNwbGF5LnNiaV9yZWdzLnJlZ2lzdGVyc1tpXS5vZmZzZXQgPT0gc2JpX29mZnNldCkK KwkJCWJyZWFrOworCX0KKworCWlmIChpID09IG51bSkgeworCQlpZiAobnVtIDwgU0JJX1JFR19N QVgpIHsKKwkJCXZndC0+c3RhdGUuZGlzcGxheS5zYmlfcmVncy5udW1iZXIgKys7CisJCX0gZWxz ZSB7CisJCQlndnRfd2FybigidkdUKCVkKTogU0JJIGNhY2hpbmcgbWVldHMgbWF4aW11bSBsaW1p dHMhXG4iLAorCQkJCQl2Z3QtPmlkKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXZndC0+c3Rh dGUuZGlzcGxheS5zYmlfcmVncy5yZWdpc3RlcnNbaV0ub2Zmc2V0ID0gc2JpX29mZnNldDsKKwl2 Z3QtPnN0YXRlLmRpc3BsYXkuc2JpX3JlZ3MucmVnaXN0ZXJzW2ldLnZhbHVlID0gdmFsdWU7Cit9 CisKK3N0YXRpYyBib29sIHNiaV9tbWlvX2RhdGFfcmVhZChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRl cykKK3sKKwlib29sIHJjID0gMDsKKwlyYyA9IGd2dF9kZWZhdWx0X21taW9fcmVhZCh2Z3QsIG9m ZnNldCwgcF9kYXRhLCBieXRlcyk7CisKKwlpZiAoKChfX3ZyZWcodmd0LCBfU0JJX0NUTF9TVEFU KSAmIFNCSV9PUENPREVfTUFTSykgPj4KKwkJCQlTQklfT1BDT0RFX1NISUZUKSA9PSBTQklfQ01E X0NSUkQpIHsKKwkJdW5zaWduZWQgaW50IHNiaV9vZmZzZXQgPSAoX192cmVnKHZndCwgX1NCSV9B RERSKSAmCisJCQkJU0JJX0FERFJfT0ZGU0VUX01BU0spID4+IFNCSV9BRERSX09GRlNFVF9TSElG VDsKKwkJdTMyIHZhbCA9IGdldF9zYmlfcmVnX2NhY2hlZF92YWx1ZSh2Z3QsIHNiaV9vZmZzZXQp OworCQkqKHUzMiAqKXBfZGF0YSA9IHZhbDsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMg Ym9vbCBzYmlfbW1pb19jdGxfd3JpdGUoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdW5zaWduZWQg aW50IG9mZnNldCwKKwkJdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJYm9v bCByYyA9IDA7CisJdTMyIGRhdGE7CisJcmMgPSBndnRfZGVmYXVsdF9tbWlvX3dyaXRlKHZndCwg b2Zmc2V0LCBwX2RhdGEsIGJ5dGVzKTsKKworCWRhdGEgPSBfX3ZyZWcodmd0LCBvZmZzZXQpOwor CisJZGF0YSAmPSB+KFNCSV9TVEFUX01BU0sgPDwgU0JJX1NUQVRfU0hJRlQpOworCWRhdGEgfD0g U0JJX1JFQURZOworCisJZGF0YSAmPSB+KFNCSV9SRVNQT05TRV9NQVNLIDw8IFNCSV9SRVNQT05T RV9TSElGVCk7CisJZGF0YSB8PSBTQklfUkVTUE9OU0VfU1VDQ0VTUzsKKworCV9fdnJlZyh2Z3Qs IG9mZnNldCkgPSBkYXRhOworCisJaWYgKCgoX192cmVnKHZndCwgX1NCSV9DVExfU1RBVCkgJiBT QklfT1BDT0RFX01BU0spID4+CisJCQkJU0JJX09QQ09ERV9TSElGVCkgPT0gU0JJX0NNRF9DUldS KSB7CisJCXVuc2lnbmVkIGludCBzYmlfb2Zmc2V0ID0gKF9fdnJlZyh2Z3QsIF9TQklfQUREUikg JgorCQkJCVNCSV9BRERSX09GRlNFVF9NQVNLKSA+PiBTQklfQUREUl9PRkZTRVRfU0hJRlQ7CisJ CXUzMiB2YWwgPSBfX3ZyZWcodmd0LCBfU0JJX0RBVEEpOworCQljYWNoZV9zYmlfcmVnX3ZhbHVl KHZndCwgc2JpX29mZnNldCwgdmFsKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBi b29sIHB2aW5mb19yZWFkKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBvZmZz ZXQsCiAJCXZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVzKQogewpAQCAtMTkzLDYgKzk3 MCw3IEBAIHN0YXRpYyBib29sIHB2aW5mb193cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1 bnNpZ25lZCBpbnQgb2Zmc2V0LAogCXUzMiB2YWwgPSAqKHUzMiAqKXBfZGF0YTsKIAl1MzIgbWlu OwogCWJvb2wgcmMgPSB0cnVlOworCWJvb2wgaW52YWxpZF9ldmVudCA9IGZhbHNlOwogCiAJc3dp dGNoIChvZmZzZXQpIHsKIAkJY2FzZSBfdmd0aWZfcmVnKG1pbl9sb3dfZ21hZHIpOgpAQCAtMjIz LDggKzEwMDEsMzAgQEAgc3RhdGljIGJvb2wgcHZpbmZvX3dyaXRlKHN0cnVjdCB2Z3RfZGV2aWNl ICp2Z3QsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkJcmMgPSBmYWxzZTsKIAkJCX0KIAkJCWJy ZWFrOworCQljYXNlIF92Z3RpZl9yZWcoZGlzcGxheV9yZWFkeSk6CisJCQlzd2l0Y2ggKHZhbCkg eworCQkJCWNhc2UgMDoKKwkJCQljYXNlIDE6CisJCQkJY2FzZSAyOgorCQkJCQlicmVhazsKKwkJ CQlkZWZhdWx0OgorCQkJCQlpbnZhbGlkX2V2ZW50ID0gdHJ1ZTsKKwkJCQkJZ3Z0X3dhcm4oImlu dmFsaWQgZGlzcGxheSBldmVudDogJWRcbiIsIHZhbCk7CisJCQkJCWJyZWFrOworCQkJfQorCisJ CQlpZiAoIWludmFsaWRfZXZlbnQpCisJCQkJZ3Z0X2RweV9zdGF0X25vdGlmeSh2Z3QpOworCisJ CQkJYnJlYWs7CiAJCWNhc2UgX3ZndGlmX3JlZyhnMnZfbm90aWZ5KToKLQkJCQlpZiAodmFsID09 IFZHVF9HMlZfUFBHVFRfTDNfUEFHRV9UQUJMRV9DUkVBVEUpIHsKKwkJCQlpZiAodmFsID09IFZH VF9HMlZfU0VUX1BPSU5URVJfU0hBUEUpIHsKKwkJCQkJc3RydWN0IGd2dF9mYl9ub3RpZnlfbXNn IG1zZzsKKwkJCQkJbXNnLnZtX2lkID0gdmd0LT52bV9pZDsKKwkJCQkJbXNnLnBsYW5lX2lkID0g Q1VSU09SX1BMQU5FOworCQkJCQltc2cucGlwZV9pZCA9IDA7CisJCQkJCWd2dF9mYl9ub3RpZmll cl9jYWxsX2NoYWluKEZCX0RJU1BMQVlfRkxJUCwgJm1zZyk7CisJCQkJfSBlbHNlIGlmICh2YWwg PT0gVkdUX0cyVl9QUEdUVF9MM19QQUdFX1RBQkxFX0NSRUFURSkgewogCQkJCQlyYyA9IGd2dF9n MnZfY3JlYXRlX3BwZ3R0X21tKHZndCwgMyk7CiAJCQkJfSBlbHNlIGlmICh2YWwgPT0gVkdUX0cy Vl9QUEdUVF9MM19QQUdFX1RBQkxFX0RFU1RST1kpIHsKIAkJCQkJcmMgPSBndnRfZzJ2X2Rlc3Ry b3lfcHBndHRfbW0odmd0LCAzKTsKQEAgLTIzNiw2ICsxMDM2LDE3IEBAIHN0YXRpYyBib29sIHB2 aW5mb193cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAog CQkJCQlndnRfd2FybigiSW52YWxpZCBQViBub3RpZmljYXRpb24uICV4XG4iLCB2YWwpOwogCQkJ CX0KIAkJCWJyZWFrOworCQljYXNlIF92Z3RpZl9yZWcoeGhvdCk6CisJCWNhc2UgX3ZndGlmX3Jl Zyh5aG90KToKKwkJCXsKKwkJCQlzdHJ1Y3QgZ3Z0X2ZiX25vdGlmeV9tc2cgbXNnOworCQkJCW1z Zy52bV9pZCA9IHZndC0+dm1faWQ7CisJCQkJbXNnLnBsYW5lX2lkID0gQ1VSU09SX1BMQU5FOwor CQkJCW1zZy5waXBlX2lkID0gMDsKKwkJCQlndnRfZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9E SVNQTEFZX0ZMSVAsICZtc2cpOworCQkJfQorCQkJYnJlYWs7CisKIAkJY2FzZSBfdmd0aWZfcmVn KHBkcFswXS5sbyk6CiAJCWNhc2UgX3ZndGlmX3JlZyhwZHBbMF0uaGkpOgogCQljYXNlIF92Z3Rp Zl9yZWcocGRwWzFdLmxvKToKQEAgLTI2Miw2ICsxMDczLDIyIEBAIHN0YXRpYyBib29sIHB2aW5m b193cml0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogCXJl dHVybiByYzsKIH0KIAorc3RhdGljIGJvb2wgcG93ZXJfd2VsbF9jdGxfd3JpdGUoc3RydWN0IHZn dF9kZXZpY2UgKnZndCwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJdm9pZCAqcF9kYXRhLCB1bnNp Z25lZCBpbnQgYnl0ZXMpCit7CisJYm9vbCByYyA9IHRydWU7CisJdTMyIHZhbHVlID0gKih1MzIg KilwX2RhdGE7CisJbWVtY3B5ICgoY2hhciAqKXZndC0+c3RhdGUubW1pby52cmVnICsgb2Zmc2V0 LCBwX2RhdGEsIGJ5dGVzKTsKKworCWlmICh2YWx1ZSAmIEhTV19QV1JfV0VMTF9FTkFCTEVfUkVR VUVTVCkgeworCQlfX3ZyZWcodmd0LCBvZmZzZXQpIHw9IEhTV19QV1JfV0VMTF9TVEFURV9FTkFC TEVEOworCX0gZWxzZSB7CisJCV9fdnJlZyh2Z3QsIG9mZnNldCkgJj0gfkhTV19QV1JfV0VMTF9T VEFURV9FTkFCTEVEOworCX0KKworCXJldHVybiByYzsKK30KKwogYm9vbCBmcGdhX2RiZ193cml0 ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgcmVnLAogICAgICAgICB2b2lk ICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcykKIHsKQEAgLTQwOCw2ICsxMjM1LDI2IEBAIHN0 cnVjdCBndnRfcmVnX2luZm8gZ3Z0X2dlbmVyYWxfcmVnX2luZm9bXSA9IHsKIAogCXtfREVSUk1S LCA0LCBGX1ZJUlQsIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKIAorCXtHVlRfUElQRURTTChQSVBF X0EpLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAorCXtHVlRfUElQRUNPTkYoUElQ RV9BKSwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBwaXBlX2NvbmZfbW1pb193cml0ZX0sCisJ e0dWVF9QSVBFU1RBVChQSVBFX0EpLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAor CXtHVlRfUElQRV9GUk1DT1VOVChQSVBFX0EpLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5V TEx9LAorCXtHVlRfUElQRV9GTElQQ09VTlQoUElQRV9BKSwgNCwgRl9WSVJULCAwLCBEX0FMTCwg TlVMTCwgTlVMTH0sCisKKwl7R1ZUX1BJUEVEU0woUElQRV9CKSwgNCwgRl9EUFksIDAsIERfQUxM LCBOVUxMLCBOVUxMfSwKKwl7R1ZUX1BJUEVDT05GKFBJUEVfQiksIDQsIEZfRFBZLCAwLCBEX0FM TCwgTlVMTCwgcGlwZV9jb25mX21taW9fd3JpdGV9LAorCXtHVlRfUElQRVNUQVQoUElQRV9CKSwg NCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKKwl7R1ZUX1BJUEVfRlJNQ09VTlQoUElQ RV9CKSwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKKwl7R1ZUX1BJUEVfRkxJUENP VU5UKFBJUEVfQiksIDQsIEZfVklSVCwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAorCisJe0dWVF9Q SVBFRFNMKFBJUEVfQyksIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCisJe0dWVF9Q SVBFQ09ORihQSVBFX0MpLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIHBpcGVfY29uZl9tbWlv X3dyaXRlfSwKKwl7R1ZUX1BJUEVTVEFUKFBJUEVfQyksIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVM TCwgTlVMTH0sCisJe0dWVF9QSVBFX0ZSTUNPVU5UKFBJUEVfQyksIDQsIEZfRFBZLCAwLCBEX0FM TCwgTlVMTCwgTlVMTH0sCisJe0dWVF9QSVBFX0ZMSVBDT1VOVChQSVBFX0MpLCA0LCBGX1ZJUlQs IDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKKworCXtfUkVHX1BJUEVfRURQX0NPTkYsIDQsIEZfRFBZ LCAwLCBEX0FMTCwgTlVMTCwgcGlwZV9jb25mX21taW9fd3JpdGV9LAorCiAJe0dWVF9DVVJTVVJG KFBJUEVfQSksIDQsIEZfRFBZX0FEUkZJWCwgMHhGRkZGRjAwMCwgRF9BTEwsIE5VTEwsIE5VTEx9 LAogCXtHVlRfQ1VSQ05UUihQSVBFX0EpLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9 LAogCXtHVlRfQ1VSUE9TKFBJUEVfQSksIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0s CkBAIC00MzEsNiArMTI3OCw1NyBAQCBzdHJ1Y3QgZ3Z0X3JlZ19pbmZvIGd2dF9nZW5lcmFsX3Jl Z19pbmZvW10gPSB7CiAJe19SRUdfQ1VSQVBBTEVUXzIsIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVM TCwgTlVMTH0sCiAJe19SRUdfQ1VSQVBBTEVUXzMsIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwg TlVMTH0sCiAKKwl7R1ZUX0RTUENOVFIoUElQRV9BKSwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxM LCBOVUxMfSwKKwl7R1ZUX0RTUFNVUkYoUElQRV9BKSwgNCwgRl9EUFlfQURSRklYLCAweEZGRkZG MDAwLCBEX0FMTCwgTlVMTCwKKwkJcHJpX3N1cmZfbW1pb193cml0ZX0sCisJe0dWVF9EU1BTVVJG TElWRShQSVBFX0EpLCA0LCBGX0RQWV9IV1NUU19BRFJGSVgsIDB4RkZGRkYwMDAsIERfQUxMLCBO VUxMLAorCQltbWlvX25vdF9hbGxvd193cml0ZX0sCisJe0dWVF9EU1BQT1MoUElQRV9BKSwgNCwg Rl9EUFksIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKKwl7R1ZUX0RTUExJTk9GRihQSVBFX0EpLCA0 LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAorCXtHVlRfRFNQU1RSSURFKFBJUEVfQSks IDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCisJe0dWVF9EU1BTSVpFKFBJUEVfQSks IDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCisJe0dWVF9EU1BUSUxFT0ZGKFBJUEVf QSksIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCisKKwl7R1ZUX0RTUENOVFIoUElQ RV9CKSwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKKwl7R1ZUX0RTUFNVUkYoUElQ RV9CKSwgNCwgRl9EUFlfQURSRklYLCAweEZGRkZGMDAwLCBEX0FMTCwgTlVMTCwKKwkgICAgcHJp X3N1cmZfbW1pb193cml0ZX0sCisJe0dWVF9EU1BTVVJGTElWRShQSVBFX0IpLCA0LCBGX0RQWV9I V1NUU19BRFJGSVgsIDB4RkZGRkYwMDAsIERfQUxMLCBOVUxMLAorCSAgICBtbWlvX25vdF9hbGxv d193cml0ZX0sCisJe0dWVF9EU1BQT1MoUElQRV9CKSwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxM LCBOVUxMfSwKKwl7R1ZUX0RTUExJTk9GRihQSVBFX0IpLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5V TEwsIE5VTEx9LAorCXtHVlRfRFNQU1RSSURFKFBJUEVfQiksIDQsIEZfRFBZLCAwLCBEX0FMTCwg TlVMTCwgTlVMTH0sCisJe0dWVF9EU1BTSVpFKFBJUEVfQiksIDQsIEZfRFBZLCAwLCBEX0FMTCwg TlVMTCwgTlVMTH0sCisJe0dWVF9EU1BUSUxFT0ZGKFBJUEVfQiksIDQsIEZfRFBZLCAwLCBEX0FM TCwgTlVMTCwgTlVMTH0sCisKKwl7R1ZUX0RTUENOVFIoUElQRV9DKSwgNCwgRl9EUFksIDAsIERf QUxMLCBOVUxMLCBOVUxMfSwKKwl7R1ZUX0RTUFNVUkYoUElQRV9DKSwgNCwgRl9EUFlfQURSRklY LCAweEZGRkZGMDAwLCBEX0FMTCwgTlVMTCwKKwkgICAgcHJpX3N1cmZfbW1pb193cml0ZX0sCisJ e0dWVF9EU1BTVVJGTElWRShQSVBFX0MpLCA0LCBGX0RQWV9IV1NUU19BRFJGSVgsIDB4RkZGRkYw MDAsIERfQUxMLCBOVUxMLAorCSAgICBtbWlvX25vdF9hbGxvd193cml0ZX0sCisJe0dWVF9EU1BQ T1MoUElQRV9DKSwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKKwl7R1ZUX0RTUExJ Tk9GRihQSVBFX0MpLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAorCXtHVlRfRFNQ U1RSSURFKFBJUEVfQyksIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCisJe0dWVF9E U1BTSVpFKFBJUEVfQyksIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCisJe0dWVF9E U1BUSUxFT0ZGKFBJUEVfQyksIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCisKKwl7 R1ZUX1NQUlNVUkYoUElQRV9BKSwgNCwgRl9EUFlfQURSRklYLCAweEZGRkZGMDAwLCBEX0FMTCwK KwkJTlVMTCwgc3ByX3N1cmZfbW1pb193cml0ZX0sCisJe0dWVF9TUFJTVVJGTElWRShQSVBFX0Ep LCA0LCBGX0RQWV9IV1NUU19BRFJGSVgsIDB4RkZGRkYwMDAsIERfQUxMLAorCQlOVUxMLCBtbWlv X25vdF9hbGxvd193cml0ZX0sCisJe0dWVF9TUFJDTlRSKFBJUEVfQSksIDQsIEZfRFBZLCAwLCBE X0FMTCwgTlVMTCwgTlVMTH0sCisKKwl7R1ZUX1NQUlNVUkYoUElQRV9CKSwgNCwgRl9EUFlfQURS RklYLCAweEZGRkZGMDAwLCBEX0FMTCwKKwkJTlVMTCwgc3ByX3N1cmZfbW1pb193cml0ZX0sCisJ e0dWVF9TUFJTVVJGTElWRShQSVBFX0IpLCA0LCBGX0RQWV9IV1NUU19BRFJGSVgsIDB4RkZGRkYw MDAsIERfQUxMLAorCQlOVUxMLCBtbWlvX25vdF9hbGxvd193cml0ZX0sCisJe0dWVF9TUFJDTlRS KFBJUEVfQiksIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCisKKwl7R1ZUX1NQUlNV UkYoUElQRV9DKSwgNCwgRl9EUFlfQURSRklYLCAweEZGRkZGMDAwLCBEX0FMTCwKKwkJTlVMTCwg c3ByX3N1cmZfbW1pb193cml0ZX0sCisJe0dWVF9TUFJTVVJGTElWRShQSVBFX0MpLCA0LCBGX0RQ WV9IV1NUU19BRFJGSVgsIDB4RkZGRkYwMDAsIERfQUxMLAorCQlOVUxMLCBtbWlvX25vdF9hbGxv d193cml0ZX0sCisJe0dWVF9TUFJDTlRSKFBJUEVfQyksIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVM TCwgTlVMTH0sCisKIAl7X0xHQ19QQUxFVFRFX0EsIDQgKiAyNTYsIEZfRFBZLCAwLCBEX0FMTCwg TlVMTCwgTlVMTH0sCiAJe19MR0NfUEFMRVRURV9CLCA0ICogMjU2LCBGX0RQWSwgMCwgRF9BTEws IE5VTEwsIE5VTEx9LAogCXtfUkVHX0xHQ19QQUxFVFRFX0MsIDQgKiAyNTYsIEZfRFBZLCAwLCBE X0FMTCwgTlVMTCwgTlVMTH0sCkBAIC01MjEsNiArMTQxOSwzMSBAQCBzdHJ1Y3QgZ3Z0X3JlZ19p bmZvIGd2dF9nZW5lcmFsX3JlZ19pbmZvW10gPSB7CiAJe19CTENfUFdNX1BDSF9DVEwxLCA0LCBG X0RPTTAsIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKIAl7X0JMQ19QV01fUENIX0NUTDIsIDQsIEZf RE9NMCwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCisJe19QQ0hfR01CVVMwLCA0KjQsIEZfRFBZ LCAwLCBEX0FMTCwgZ21idXNfbW1pb19yZWFkLCBnbWJ1c19tbWlvX3dyaXRlfSwKKwl7X1BDSF9H UElPQSwgNio0LCBGX1ZJUlQsIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKKworCXtfUkVHX0RQX0JV RlRSQU5TLCAweDI4LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAorCisJe19QQ0hfRFBC X0FVWF9DSF9DVEwsIDYqNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBkcF9hdXhfY2hfY3RsX21t aW9fd3JpdGV9LAorCXtfUENIX0RQQ19BVVhfQ0hfQ1RMLCA2KjQsIEZfRFBZLCAwLCBEX0FMTCwg TlVMTCwgZHBfYXV4X2NoX2N0bF9tbWlvX3dyaXRlfSwKKwl7X1BDSF9EUERfQVVYX0NIX0NUTCwg Nio0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIGRwX2F1eF9jaF9jdGxfbW1pb193cml0ZX0sCisK Kwl7X1BDSF9BRFBBLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIHBjaF9hZHBhX21taW9fd3Jp dGV9LAorCXtfUENIX1RSQU5TQUNPTkYsIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgdHJhbnNh Y29uZl9tbWlvX3dyaXRlfSwKKwl7X1BDSF9UUkFOU0JDT05GLCA0LCBGX0RQWSwgMCwgRF9BTEws IE5VTEwsIHRyYW5zYWNvbmZfbW1pb193cml0ZX0sCisJe19GRElfUlhBX0lJUiwgNCwgRl9EUFks IDAsIERfQUxMLCBOVUxMLCBmZGlfcnhfaWlyX21taW9fd3JpdGV9LAorCXtfRkRJX1JYQl9JSVIs IDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgZmRpX3J4X2lpcl9tbWlvX3dyaXRlfSwKKwl7X1JF R19GRElfUlhDX0lJUiwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBmZGlfcnhfaWlyX21taW9f d3JpdGV9LAorCXtfRkRJX1JYQV9DVEwsIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgdXBkYXRl X2ZkaV9yeF9paXJfc3RhdHVzfSwKKwl7X0ZESV9SWEJfQ1RMLCA0LCBGX0RQWSwgMCwgRF9BTEws IE5VTEwsIHVwZGF0ZV9mZGlfcnhfaWlyX3N0YXR1c30sCisJe19SRUdfRkRJX1JYQ19DVEwsIDQs IEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgdXBkYXRlX2ZkaV9yeF9paXJfc3RhdHVzfSwKKwl7X0ZE SV9UWEFfQ1RMLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIHVwZGF0ZV9mZGlfcnhfaWlyX3N0 YXR1c30sCisJe19GRElfVFhCX0NUTCwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCB1cGRhdGVf ZmRpX3J4X2lpcl9zdGF0dXN9LAorCXtfUkVHX0ZESV9UWENfQ1RMLCA0LCBGX0RQWSwgMCwgRF9B TEwsIE5VTEwsIHVwZGF0ZV9mZGlfcnhfaWlyX3N0YXR1c30sCisJe19GRElfUlhBX0lNUiwgNCwg Rl9EUFksIDAsIERfQUxMLCBOVUxMLCB1cGRhdGVfZmRpX3J4X2lpcl9zdGF0dXN9LAorCXtfRkRJ X1JYQl9JTVIsIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgdXBkYXRlX2ZkaV9yeF9paXJfc3Rh dHVzfSwKKwl7X1JFR19GRElfUlhDX0lNUiwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCB1cGRh dGVfZmRpX3J4X2lpcl9zdGF0dXN9LAorCiAJe19QQ0hfVFJBTlNfSFRPVEFMX0EsIDQsIEZfRFBZ LCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCiAJe19QQ0hfVFJBTlNfSEJMQU5LX0EsIDQsIEZfRFBZ LCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCiAJe19QQ0hfVFJBTlNfSFNZTkNfQSwgNCwgRl9EUFks IDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKQEAgLTU2Niw2ICsxNDg5LDkgQEAgc3RydWN0IGd2dF9y ZWdfaW5mbyBndnRfZ2VuZXJhbF9yZWdfaW5mb1tdID0gewogCXtfRkRJX1JYQl9UVVNJWkUxLCA0 LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCXtfRkRJX1JYQl9UVVNJWkUyLCA0LCBG X0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCisJe19QQ0hfUFBfQ09OVFJPTCwgNCwgRl9E UFksIDAsIERfQUxMLCBOVUxMLCBwY2hfcHBfY29udHJvbF9tbWlvX3dyaXRlfSwKKwl7X1BDSF9Q UF9ESVZJU09SLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAorCXtfUENIX1BQX1NU QVRVUywgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKIAl7X1BDSF9MVkRTLCA0LCBG X0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCXtfUENIX0RQTExfQSwgNCwgRl9EUFksIDAs IERfQUxMLCBOVUxMLCBOVUxMfSwKIAl7X1BDSF9EUExMX0IsIDQsIEZfRFBZLCAwLCBEX0FMTCwg TlVMTCwgTlVMTH0sCkBAIC01ODIsNiArMTUwOCwxNiBAQCBzdHJ1Y3QgZ3Z0X3JlZ19pbmZvIGd2 dF9nZW5lcmFsX3JlZ19pbmZvW10gPSB7CiAJe19QQ0hfUFBfT05fREVMQVlTLCA0LCBGX0RQWSwg MCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCXtfUENIX1BQX09GRl9ERUxBWVMsIDQsIEZfRFBZLCAw LCBEX0FMTCwgTlVMTCwgTlVMTH0sCiAKKwl7MHhFNjUxQywgNCwgRl9EUFksIDAsIERfQUxMLCBk cHlfcmVnX21taW9fcmVhZCwgTlVMTH0sCisJezB4RTY2MUMsIDQsIEZfRFBZLCAwLCBEX0FMTCwg ZHB5X3JlZ19tbWlvX3JlYWQsIE5VTEx9LAorCXsweEU2NzFDLCA0LCBGX0RQWSwgMCwgRF9BTEws IGRweV9yZWdfbW1pb19yZWFkLCBOVUxMfSwKKwl7MHhFNjgxQywgNCwgRl9EUFksIDAsIERfQUxM LCBkcHlfcmVnX21taW9fcmVhZCwgTlVMTH0sCisJezB4RTZDMDQsIDQsIEZfRFBZLCAwLCBEX0FM TCwKKwkJZHB5X3JlZ19tbWlvX3JlYWRfMiwgTlVMTH0sCisJezB4RTZFMUMsIDQsIEZfRFBZLCAw LCBEX0FMTCwKKwkJZHB5X3JlZ19tbWlvX3JlYWRfMywgTlVMTH0sCisJe19QQ0hfUE9SVF9IT1RQ TFVHLCA0LCBGX1ZJUlQsIDAsIERfQUxMLCBOVUxMLCBzaG90cGx1Z19jdGxfbW1pb193cml0ZX0s CisJe19MQ1BMTF9DVEwsIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgbGNwbGxfY3RsX21taW9f d3JpdGV9LAogCXtfRlVTRV9TVFJBUCwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwK IAl7X0RJR0lUQUxfUE9SVF9IT1RQTFVHX0NOVFJMLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEws IE5VTEx9LAogCkBAIC01OTIsNiArMTUyOCw4IEBAIHN0cnVjdCBndnRfcmVnX2luZm8gZ3Z0X2dl bmVyYWxfcmVnX2luZm9bXSA9IHsKIAl7X0lMS19ESVNQTEFZX0NISUNLRU4yLCA0LCBGX0RQWSwg MCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCXtfSUxLX0RTUENMS19HQVRFX0QsIDQsIEZfRFBZLCAw LCBEX0FMTCwgTlVMTCwgTlVMTH0sCiAKKwl7X1NPVVRIX0NISUNLRU4xLCA0LCBGX0RQWSwgMCwg RF9BTEwsIE5VTEwsIE5VTEx9LAorCXtfU09VVEhfQ0hJQ0tFTjIsIDQsIEZfRFBZLCAwLCBEX0FM TCwgTlVMTCwgc291dGhfY2hpY2tlbjJfd3JpdGV9LAogCXtfVFJBTlNBX0NISUNLRU4xLCA0LCBG X0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCXtfVFJBTlNCX0NISUNLRU4xLCA0LCBGX0RQ WSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCXtfU09VVEhfRFNQQ0xLX0dBVEVfRCwgNCwgRl9E UFksIDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKQEAgLTY4NSw4ICsxNjIzLDMwIEBAIHN0cnVjdCBn dnRfcmVnX2luZm8gZ3Z0X2dlbmVyYWxfcmVnX2luZm9bXSA9IHsKIAogCXtfU0ZVU0VfU1RSQVAs IDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCiAJe19TQklfQUREUiwgNCwgRl9EUFks IDAsIERfQUxMLCBOVUxMLCBOVUxMfSwKKwl7X1NCSV9EQVRBLCA0LCBGX0RQWSwgMCwgRF9BTEws IHNiaV9tbWlvX2RhdGFfcmVhZCwgTlVMTH0sCisJe19TQklfQ1RMX1NUQVQsIDQsIEZfRFBZLCAw LCBEX0FMTCwgTlVMTCwgc2JpX21taW9fY3RsX3dyaXRlfSwKIAl7X1BJWENMS19HQVRFLCA0LCBG X0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCisJe19QQ0hfRFBBX0FVWF9DSF9DVEwsIDYq NCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBkcF9hdXhfY2hfY3RsX21taW9fd3JpdGV9LAorCisJ e19ERElfQlVGX0NUTF9BLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIGRkaV9idWZfY3RsX21t aW9fd3JpdGV9LAorCXtfRERJX0JVRl9DVExfQiwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBk ZGlfYnVmX2N0bF9tbWlvX3dyaXRlfSwKKwl7X1JFR19ERElfQlVGX0NUTF9DLCA0LCBGX0RQWSwg MCwgRF9BTEwsIE5VTEwsIGRkaV9idWZfY3RsX21taW9fd3JpdGV9LAorCXtfUkVHX0RESV9CVUZf Q1RMX0QsIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgZGRpX2J1Zl9jdGxfbW1pb193cml0ZX0s CisJe19SRUdfRERJX0JVRl9DVExfRSwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBkZGlfYnVm X2N0bF9tbWlvX3dyaXRlfSwKKworCXtfRFBfVFBfQ1RMX0EsIDQsIEZfRFBZLCAwLCBEX0FMTCwg TlVMTCwgZHBfdHBfY3RsX21taW9fd3JpdGV9LAorCXtfRFBfVFBfQ1RMX0IsIDQsIEZfRFBZLCAw LCBEX0FMTCwgTlVMTCwgZHBfdHBfY3RsX21taW9fd3JpdGV9LAorCXtfUkVHX0RQX1RQX0NUTF9D LCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIGRwX3RwX2N0bF9tbWlvX3dyaXRlfSwKKwl7X1JF R19EUF9UUF9DVExfRCwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBkcF90cF9jdGxfbW1pb193 cml0ZX0sCisJe19SRUdfRFBfVFBfQ1RMX0UsIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgTlVM TH0sCisKKwl7X0RQX1RQX1NUQVRVU19BLCA0LCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIGRwX3Rw X3N0YXR1c19tbWlvX3dyaXRlfSwKKwl7X0RQX1RQX1NUQVRVU19CLCA0LCBGX0RQWSwgMCwgRF9B TEwsIE5VTEwsIGRwX3RwX3N0YXR1c19tbWlvX3dyaXRlfSwKKwl7X1JFR19EUF9UUF9TVEFUVVNf QywgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxMLCBkcF90cF9zdGF0dXNfbW1pb193cml0ZX0sCisJ e19SRUdfRFBfVFBfU1RBVFVTX0QsIDQsIEZfRFBZLCAwLCBEX0FMTCwgTlVMTCwgZHBfdHBfc3Rh dHVzX21taW9fd3JpdGV9LAorCXtfUkVHX0RQX1RQX1NUQVRVU19FLCA0LCBGX0RQWSwgMCwgRF9B TEwsIE5VTEwsIE5VTEx9LAorCXtfRERJX0JVRl9UUkFOU19BLCAweDUwLCBGX0RQWSwgMCwgRF9B TEwsIE5VTEwsIE5VTEx9LAogCXsweDY0RTYwLCAweDUwLCBGX0RQWSwgMCwgRF9BTEwsIE5VTEws IE5VTEx9LAogCXsweDY0RWMwLCAweDUwLCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAog CXsweDY0RjIwLCAweDUwLCBGX0RQWSwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LApAQCAtNzM4LDEw ICsxNjk4LDE3IEBAIHN0cnVjdCBndnRfcmVnX2luZm8gZ3Z0X2dlbmVyYWxfcmVnX2luZm9bXSA9 IHsKIAl7X0dFTjZfUkM2cF9USFJFU0hPTEQsIDQsIEZfRE9NMCwgMCwgRF9BTEwsIE5VTEwsIE5V TEx9LAogCXtfR0VONl9SQzZwcF9USFJFU0hPTEQsIDQsIEZfRE9NMCwgMCwgRF9BTEwsIE5VTEws IE5VTEx9LAogCXtfR0VONl9QTUlOVFJNU0ssIDQsIEZfRE9NMCwgMCwgRF9BTEwsIE5VTEwsIE5V TEx9LAotCXtfR0VONl9HRFJTVCwgNCwgRl9ET00wLCAwLCBEX0FMTCwgTlVMTCwgZ2Ryc3RfbW1p b193cml0ZX0sCisJe19IU1dfUFdSX1dFTExfQklPUywgNCwgRl9ET00wLCAwLCBEX0FMTCwgTlVM TCwgcG93ZXJfd2VsbF9jdGxfd3JpdGV9LAorCXtfSFNXX1BXUl9XRUxMX0RSSVZFUiwgNCwgRl9E T00wLCAwLCBEX0FMTCwgTlVMTCwgcG93ZXJfd2VsbF9jdGxfd3JpdGV9LAorCXtfSFNXX1BXUl9X RUxMX0tWTVIsIDQsIEZfRE9NMCwgMCwgRF9BTEwsIE5VTEwsIHBvd2VyX3dlbGxfY3RsX3dyaXRl fSwKKwl7X0hTV19QV1JfV0VMTF9ERUJVRywgNCwgRl9ET00wLCAwLCBEX0FMTCwgTlVMTCwgcG93 ZXJfd2VsbF9jdGxfd3JpdGV9LAorCXtfSFNXX1BXUl9XRUxMX0NUTDUsIDQsIEZfRE9NMCwgMCwg RF9BTEwsIE5VTEwsIHBvd2VyX3dlbGxfY3RsX3dyaXRlfSwKKwl7X0hTV19QV1JfV0VMTF9DVEw2 LCA0LCBGX0RPTTAsIDAsIERfQUxMLCBOVUxMLCBwb3dlcl93ZWxsX2N0bF93cml0ZX0sCiAKKwl7 X0dFTjZfR0RSU1QsIDQsIEZfRE9NMCwgMCwgRF9BTEwsIE5VTEwsIGdkcnN0X21taW9fd3JpdGV9 LAogCXsweDEwMDAwMCwgMHg4MCwgRl9WSVJULCAwLCBEX0FMTCwgZmVuY2VfbW1pb19yZWFkLCBm ZW5jZV9tbWlvX3dyaXRlfSwKIAl7VkdUX1BWSU5GT19QQUdFLCBWR1RfUFZJTkZPX1NJWkUsIEZf VklSVCwgMCwgRF9BTEwsIHB2aW5mb19yZWFkLCBwdmluZm9fd3JpdGV9LAorCXtfQ1BVX1ZHQUNO VFJMLCA0LCBGX0RPTTAsIDAsIERfQUxMLCBOVUxMLCB2Z2FfY29udHJvbF93fSwKIAogCS8qIFRP RE86IE1DSEJBUiwgc3VwcG9zZSByZWFkLW9ubHkgKi8KIAl7TUNIQkFSX01JUlJPUl9CQVNFX1NO QiwgMHg0MDAwMCwgRl9WSVJULCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCkBAIC03OTIsNiArMTc1 OSw5IEBAIHN0cnVjdCBndnRfcmVnX2luZm8gZ3Z0X2dlbmVyYWxfcmVnX2luZm9bXSA9IHsKIAl7 MHhlNjcwNCwgNCwgRl9WSVJULCAwLCBEX0FMTCwgTlVMTCwgTlVMTH0sCiAJezB4ZTY4MDAsIDQs IEZfVklSVCwgMCwgRF9BTEwsIE5VTEwsIE5VTEx9LAogCXsweGU2ODA0LCA0LCBGX1ZJUlQsIDAs IERfQUxMLCBOVUxMLCBOVUxMfSwKKwkvKiBGSVhNRTogbm93IGxvb2tzIGdtYnVzIGhhbmRsZXIg Y2FuJ3QgY292ZXIgNC81IHBvcnRzICovCisJe19QQ0hfR01CVVM0LCA0LCBGX0RQWSwgMCwgRF9B TEwsIE5VTEwsIE5VTEx9LAorCXtfUENIX0dNQlVTNSwgNCwgRl9EUFksIDAsIERfQUxMLCBOVUxM LCBOVUxMfSwKIAogCXtfUkVHX1NVUEVSX1FVRVVFX0NPTkZJRywgNCwgRl9WSVJULCAwLCBEX0FM TCwgTlVMTCwgTlVMTH0sCiAJezB4ZWMwMDgsIDQsIEZfVklSVCwgMCwgRF9BTEwsIE5VTEwsIE5V TEx9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2luc3RhbmNlLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaW5zdGFuY2UuYwppbmRleCAwYmY2MmU0Li4zMDE1ZmRm IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaW5zdGFuY2UuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaW5zdGFuY2UuYwpAQCAtMTYyLDYgKzE2Miw3IEBAIHN0 YXRpYyBib29sIGNyZWF0ZV92aXJ0dWFsX2dtX3N0YXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Qs CiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdmlydHVhbF9kZXZpY2Vfc3RhdGUoc3RydWN0IHZndF9k ZXZpY2UgKnZndCkKIHsKKwlndnRfY2xlYW5fdmlydHVhbF9kaXNwbGF5X3N0YXRlKHZndCk7CiAJ Z3Z0X2NsZWFuX3ZndHQodmd0KTsKIAlkZXN0cm95X3ZpcnR1YWxfbW1pb19zdGF0ZSh2Z3QpOwog CWRlc3Ryb3lfdmlydHVhbF9nbV9zdGF0ZSh2Z3QpOwpAQCAtMTc5LDYgKzE4MCw5IEBAIHN0YXRp YyBib29sIGNyZWF0ZV92aXJ0dWFsX2RldmljZV9zdGF0ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 LAogCiAJaW5pdF92aXJ0dWFsX2NmZ19zcGFjZV9zdGF0ZSh2Z3QsIGluZm8pOwogCisJaWYgKCFn dnRfaW5pdF92aXJ0dWFsX2Rpc3BsYXlfc3RhdGUodmd0KSkKKwkJcmV0dXJuIGZhbHNlOworCiAJ cmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9p bnRlcnJ1cHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9pbnRlcnJ1cHQuYwppbmRleCAy M2Q0MGNlLi5kMGNjMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaW50 ZXJydXB0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ludGVycnVwdC5jCkBAIC01 OTgsMTIgKzU5OCwyOSBAQCBzdGF0aWMgdm9pZCBndnRfaW5pdF9ldmVudHMoCiAJfQogfQogCitz dGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgZ3Z0X2RweV90aW1lcl9mbihzdHJ1Y3QgaHJ0aW1l ciAqZGF0YSkKK3sKKwlzdHJ1Y3QgZ3Z0X2VtdWxfdGltZXIgKmRweV90aW1lcjsKKwlzdHJ1Y3Qg Z3Z0X2lycV9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHBndF9kZXZpY2UgKnBkZXY7CisKKwlkcHlf dGltZXIgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGd2dF9lbXVsX3RpbWVyLCB0aW1lcik7 CisJc3RhdGUgPSBjb250YWluZXJfb2YoZHB5X3RpbWVyLCBzdHJ1Y3QgZ3Z0X2lycV9zdGF0ZSwg ZHB5X3RpbWVyKTsKKwlwZGV2ID0gZ3Z0X2lycV9zdGF0ZV90b19wZGV2KHN0YXRlKTsKKworCWd2 dF9yYWlzZV9yZXF1ZXN0KHBkZXYsIEdWVF9SRVFVRVNUX0VNVUxfRFBZX0VWRU5UUyk7CisKKwlo cnRpbWVyX2FkZF9leHBpcmVzX25zKCZkcHlfdGltZXItPnRpbWVyLCBkcHlfdGltZXItPnBlcmlv ZCk7CisJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKK30KKwogLyoKICAqIERvIGludGVycnVwdCBp bml0aWFsaXphdGlvbiBmb3IgdkdUIGRyaXZlcgogICovCiBib29sIGd2dF9pcnFfaW5pdChzdHJ1 Y3QgcGd0X2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZ3Z0X2lycV9zdGF0ZSAqc3RhdGUgPSAm cGRldi0+aXJxX3N0YXRlOworCXN0cnVjdCBndnRfZW11bF90aW1lciAqZHB5X3RpbWVyOwogCiAJ Z3Z0X2RiZ19jb3JlKCJpbml0IGlycSBmcmFtZXdvcmsiKTsKIApAQCAtNjIzLDEyICs2NDAsMTkg QEAgYm9vbCBndnRfaXJxX2luaXQoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCiAKIAlndnRfaXJx X21hcF9pbml0KHN0YXRlKTsKIAorCWRweV90aW1lciA9ICZzdGF0ZS0+ZHB5X3RpbWVyOworCWhy dGltZXJfaW5pdCgmZHB5X3RpbWVyLT50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01P REVfQUJTKTsKKwlkcHlfdGltZXItPnRpbWVyLmZ1bmN0aW9uID0gZ3Z0X2RweV90aW1lcl9mbjsK KwlkcHlfdGltZXItPnBlcmlvZCA9IEdWVF9EUFlfRU1VTF9QRVJJT0Q7CisKIAlyZXR1cm4gdHJ1 ZTsKIH0KIAogdm9pZCBndnRfaXJxX2V4aXQoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCiB7Ci0J cmV0dXJuOworCXN0cnVjdCBndnRfaXJxX3N0YXRlICpzdGF0ZSA9ICZwZGV2LT5pcnFfc3RhdGU7 CisKKwlocnRpbWVyX2NhbmNlbCgmc3RhdGUtPmRweV90aW1lci50aW1lcik7CiB9CiAKIHZvaWQg Z3Z0X2luamVjdF9mbGlwX2RvbmUoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgaW50IHBpcGUpCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaW50ZXJydXB0LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvaW50ZXJydXB0LmgKaW5kZXggMzE0MmVkNi4uZmYxMjVmYyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ludGVycnVwdC5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9pbnRlcnJ1cHQuaApAQCAtMTY1LDYgKzE2NSw3IEBAIGVudW0g Z3Z0X2lycV90eXBlIHsKIH07CiAKICNkZWZpbmUgR1ZUX0lSUV9CSVRXSURUSAkzMgorI2RlZmlu ZSBHVlRfRFBZX0VNVUxfUEVSSU9ECTE2MDAwMDAwCS8vIDE2IG1zIGZvciBub3cKIAogLyogZGV2 aWNlIHNwZWNpZmljIGludGVycnVwdCBiaXQgZGVmaW5pdGlvbnMgKi8KIHN0cnVjdCBndnRfaXJx X2luZm8gewpAQCAtMTk5LDYgKzIwMCwxMSBAQCBzdHJ1Y3QgZ3Z0X2lycV9tYXAgewogCXUzMiBk b3duX2lycV9iaXRtYXNrOwogfTsKIAorc3RydWN0IGd2dF9lbXVsX3RpbWVyIHsKKwlzdHJ1Y3Qg aHJ0aW1lciB0aW1lcjsKKwl1NjQgcGVyaW9kOworfTsKKwogLyogc3RydWN0dXJlIGNvbnRhaW5p bmcgZGV2aWNlIHNwZWNpZmljIElSUSBzdGF0ZSAqLwogc3RydWN0IGd2dF9pcnFfc3RhdGUgewog CXN0cnVjdCBndnRfaXJxX29wcyAqb3BzOwpAQCAtMjA2LDYgKzIxMiw3IEBAIHN0cnVjdCBndnRf aXJxX3N0YXRlIHsKIAlERUNMQVJFX0JJVE1BUChpcnFfaW5mb19iaXRtYXAsIEdWVF9JUlFfSU5G T19NQVgpOwogCXN0cnVjdCBndnRfZXZlbnRfaW5mbwlldmVudHNbR1ZUX0VWRU5UX01BWF07CiAJ REVDTEFSRV9CSVRNQVAocGVuZGluZ19ldmVudHMsIEdWVF9FVkVOVF9NQVgpOworCXN0cnVjdCBn dnRfZW11bF90aW1lciBkcHlfdGltZXI7CiAJc3RydWN0IGd2dF9pcnFfbWFwICppcnFfbWFwOwog fTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5oCmluZGV4IDE3NTgwOTIuLjExODZkYTUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvcmVnLmgKQEAgLTU3MSw2ICs1NzEsOSBAQCB1bmlvbiBfVFJBTlNfQ09ORklHCiAj ZGVmaW5lIF9QQ0hfR01CVVMwCQkJMHhjNTEwMAogI2RlZmluZSBfUENIX0dNQlVTMQkJCTB4YzUx MDQKICNkZWZpbmUgX1BDSF9HTUJVUzIJCQkweGM1MTA4CisjZGVmaW5lIF9QQ0hfR01CVVMzCQkJ MHhjNTEwYworI2RlZmluZSBfUENIX0dNQlVTNAkJCTB4YzUxMTAKKyNkZWZpbmUgX1BDSF9HTUJV UzUJCQkweGM1MTIwCiAKICNkZWZpbmUgX0dFTjZfR0RSU1QJCQkweDk0MWMKICNkZWZpbmUgX0dF TjZfR1RfVEhSRUFEX1NUQVRVU19SRUcJMHgxMzgwNWMKLS0gCjEuOS4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=