From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: [RFC 15/29] drm/i915: gvt: vGPU graphics memory emulation framework Date: Thu, 28 Jan 2016 18:21:37 +0800 Message-ID: <1453976511-27322-16-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 A1E526E7F9 for ; Thu, 28 Jan 2016 02:24:48 -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 VGhlIHZHUFUgZ3JhcGhpY3MgbWVtb3J5IGVtdWxhdGlvbiBmcmFtZXdvcmsgaXMgcmVzcG9uc2li bGUgZm9yIGdyYXBoaWNzCm1lbW9yeSB0YWJsZSB2aXJ0dWFsaXphdGlvbi9zaGFkb3cuIFVuZGVy IHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LAp0aGUgZ3Vlc3Qgd2lsbCBwb3B1bGF0ZSB0aGUg cGFnZSB0YWJsZSB3aXRoIGd1ZXN0IHBhZ2UgZnJhbWUgbnVtYmVyKEdGTikuClRoZSByZWxhdGlv bnNoaXAgYmV0d2VlbiBHRk4gYW5kIE1GTihNYWNoaW5lIGZyYW1lIG51bWJlcikgaXMgbWFuYWdl ZCBieQpoeXBlcnZpc29yLCB3aGlsZSBHRU4gSFcgZG9lc24ndCBoYXZlIHN1Y2gga25vd2xlZGdl IHRvIHRyYW5zbGF0ZSBhIEdGTi4KClRvIHNvbHZlIHRoaXMga2luZHMgb2YgZ2FwLCBzaGFkb3cg R0dUVC9QUEdUVCBwYWdlIHRhYmxlIGlzIGludHJvZGN1ZWQuCgpGb3IgR0dUVCwgdGhlIEdGTiBp bnNpZGUgdGhlIGd1ZXN0IEdHVFQgcGFnZSB0YWJsZSBlbnRyeSB3aWxsIGJlIHRyYW5zbGF0ZWQK aW50byBNRk4gYW5kIHdyaXR0ZW4gaW50byBwaHlzaWNhbCBHVFQgTU1JTyByZWdpc3RlcnMgd2hl biBndWVzdCB3cml0ZQp2aXJ0dWFsIEdUVCBNTUlPIHJlZ2lzdGVycy4KCkZvciBQUEdUVCwgYSBz aGFkb3cgUFBHVFQgcGFnZSB0YWJsZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIHdyaXRlLXByb3RlY3Rl ZAp0cmFuc2xhdGVkIGZyb20gZ3Vlc3QgUFBHVFQgcGFnZSB0YWJsZS4gIEFuZCB0aGUgc2hhZG93 IHBhZ2UgdGFibGUgcm9vdApwb2ludGVycyB3aWxsIGJlIHdyaXR0ZW4gaW50byB0aGUgc2hhZG93 IGNvbnRleHQgYWZ0ZXIgYSBndWVzdCB3b3JrbG9hZAppcyBzaGFkb3dlZC4KCnZHUFUgZ3JhcGhp Y3MgbWVtb3J5IGVtdWxhdGlvbiBmcmFtZXdvcmsgY29uc2lzdHM6CgotIFBlci1HRU4gSFcgcGxh dGZvcm0gcGFnZSB0YWJsZSBlbnRyeSBiaXRzIGV4dHJhY3QvZGUtZXh0cmFjdCByb3V0aW5lcy4K LSBHVFQgTU1JTyByZWdpc3RlciBlbXVsYXRpb24gaGFuZGxlcnMsIHdoaWNoIHdpbGwgY2FsbCBo eXBlcmNhbGwgdG8gZG8KR0ZOLT5NRk4gdHJhbnNsYXRpb24gd2hlbiBndWVzdCB3cml0ZSBHVFQg TU1JTyByZWdpc3RlcgotIFBQR1RUIHNoYWRvdyBwYWdlIHRhYmxlIHJvdXRpbmVzLCBlLmcuIHNo YWRvdyBjcmVhdGUvZGVzdHJveS9vdXQtb2Ytc3luYwoKU2lnbmVkLW9mZi1ieTogWmhpIFdhbmcg PHpoaS5hLndhbmdAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtl ZmlsZSAgIHwgICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d0dC5jICAgICAgfCAx OTEyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvZ3R0LmggICAgICB8ICAzMDUgKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvZ3Z0LmMgICAgICB8ICAgIDggKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oICAg ICAgfCAgMTQ4ICsrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2luc3RhbmNlLmMgfCAgICA3 ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tcHQuaCAgICAgIHwgICAxMSArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMgICB8ICAgMTIgKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L3BhcmFtcy5oICAgfCAgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wZXJm LmggICAgIHwgICAyMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvdHJhY2UuaCAgICB8ICAx NzIgKysrKwogMTEgZmlsZXMgY2hhbmdlZCwgMjYwMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d0dC5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d0dC5oCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L01ha2VmaWxlCmluZGV4IDc4ZGVlZmMuLjM2MDUzOWMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiBHVlRfU09VUkNFIDo9IGd2dC5vIHBhcmFt cy5vIGFwZXJ0dXJlX2dtLm8gbW1pby5vIGhhbmRsZXJzLm8gaW5zdGFuY2UubyBcCi0JCXRyYWNl X3BvaW50cy5vIGludGVycnVwdC5vIGZiX2RlY29kZXIubworCQl0cmFjZV9wb2ludHMubyBpbnRl cnJ1cHQubyBndHQubyBmYl9kZWNvZGVyLm8KIAogY2NmbGFncy15CQkJKz0gLUkkKHNyYykgLUkk KHNyYykvLi4gLVdhbGwgLVdlcnJvciAtV25vLXVudXNlZC1mdW5jdGlvbgogaTkxNV9ndnQteQkJ CTo9ICQoR1ZUX1NPVVJDRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9n dHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5kN2U0MzE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L2d0dC5jCkBAIC0wLDAgKzEsMTkxMiBAQAorLyoKKyAqIEdUVCB2aXJ0dWFs aXphdGlvbgorICoKKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAq IFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJndnQuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgor CisvKgorICogTWFwcGluZ3MgYmV0d2VlbiBHVFRfVFlQRSogZW51bWVyYXRpb25zLgorICogRm9s bG93aW5nIGluZm9ybWF0aW9ucyBjYW4gYmUgZm91bmQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiB0 eXBlOgorICogLSB0eXBlIG9mIG5leHQgbGV2ZWwgcGFnZSB0YWJsZQorICogLSB0eXBlIG9mIGVu dHJ5IGluc2lkZSB0aGlzIGxldmVsIHBhZ2UgdGFibGUKKyAqIC0gdHlwZSBvZiBlbnRyeSB3aXRo IFBTRSBzZXQKKyAqCisgKiBJZiB0aGUgZ2l2ZW4gdHlwZSBkb2Vzbid0IGhhdmUgc3VjaCBhIGtp bmQgb2YgaW5mb3JtYXRpb24sCisgKiBlLmcuIGdpdmUgYSBsNCByb290IGVudHJ5IHR5cGUsIHRo ZW4gcmVxdWVzdCB0byBnZXQgaXRzIFBTRSB0eXBlLAorICogZ2l2ZSBhIFBURSBwYWdlIHRhYmxl IHR5cGUsIHRoZW4gcmVxdWVzdCB0byBnZXQgaXRzIG5leHQgbGV2ZWwgcGFnZQorICogdGFibGUg dHlwZSwgYXMgd2Uga25vdyBsNCByb290IGVudHJ5IGRvZXNuJ3QgaGF2ZSBhIFBTRSBiaXQsCisg KiBhbmQgYSBQVEUgcGFnZSB0YWJsZSBkb2Vzbid0IGhhdmUgYSBuZXh0IGxldmVsIHBhZ2UgdGFi bGUgdHlwZSwKKyAqIEdUVF9UWVBFX0lOVkFMSUQgd2lsbCBiZSByZXR1cm5lZC4gVGhpcyBpcyB1 c2VmdWwgd2hlbiB0cmF2ZXJzaW5nIGEKKyAqIHBhZ2UgdGFibGUuCisgKi8KKworc3RydWN0IGd0 dF90eXBlX3RhYmxlX2VudHJ5IHsKKwlndHRfdHlwZV90IGVudHJ5X3R5cGU7CisJZ3R0X3R5cGVf dCBuZXh0X3B0X3R5cGU7CisJZ3R0X3R5cGVfdCBwc2VfZW50cnlfdHlwZTsKK307CisKKyNkZWZp bmUgR1RUX1RZUEVfVEFCTEVfRU5UUlkodHlwZSwgZV90eXBlLCBucHRfdHlwZSwgcHNlX3R5cGUp IFwKKwlbdHlwZV0gPSB7IFwKKwkJLmVudHJ5X3R5cGUgPSBlX3R5cGUsIFwKKwkJLm5leHRfcHRf dHlwZSA9IG5wdF90eXBlLCBcCisJCS5wc2VfZW50cnlfdHlwZSA9IHBzZV90eXBlLCBcCisJfQor CitzdGF0aWMgc3RydWN0IGd0dF90eXBlX3RhYmxlX2VudHJ5IGd0dF90eXBlX3RhYmxlW10gPSB7 CisJR1RUX1RZUEVfVEFCTEVfRU5UUlkoR1RUX1RZUEVfUFBHVFRfUk9PVF9MNF9FTlRSWSwKKwkJ CUdUVF9UWVBFX1BQR1RUX1JPT1RfTDRfRU5UUlksCisJCQlHVFRfVFlQRV9QUEdUVF9QTUw0X1BU LAorCQkJR1RUX1RZUEVfSU5WQUxJRCksCisJR1RUX1RZUEVfVEFCTEVfRU5UUlkoR1RUX1RZUEVf UFBHVFRfUE1MNF9QVCwKKwkJCUdUVF9UWVBFX1BQR1RUX1BNTDRfRU5UUlksCisJCQlHVFRfVFlQ RV9QUEdUVF9QRFBfUFQsCisJCQlHVFRfVFlQRV9JTlZBTElEKSwKKwlHVFRfVFlQRV9UQUJMRV9F TlRSWShHVFRfVFlQRV9QUEdUVF9QTUw0X0VOVFJZLAorCQkJR1RUX1RZUEVfUFBHVFRfUE1MNF9F TlRSWSwKKwkJCUdUVF9UWVBFX1BQR1RUX1BEUF9QVCwKKwkJCUdUVF9UWVBFX0lOVkFMSUQpLAor CUdUVF9UWVBFX1RBQkxFX0VOVFJZKEdUVF9UWVBFX1BQR1RUX1BEUF9QVCwKKwkJCUdUVF9UWVBF X1BQR1RUX1BEUF9FTlRSWSwKKwkJCUdUVF9UWVBFX1BQR1RUX1BERV9QVCwKKwkJCUdUVF9UWVBF X1BQR1RUX1BURV8xR19FTlRSWSksCisJR1RUX1RZUEVfVEFCTEVfRU5UUlkoR1RUX1RZUEVfUFBH VFRfUk9PVF9MM19FTlRSWSwKKwkJCUdUVF9UWVBFX1BQR1RUX1JPT1RfTDNfRU5UUlksCisJCQlH VFRfVFlQRV9QUEdUVF9QREVfUFQsCisJCQlHVFRfVFlQRV9QUEdUVF9QVEVfMUdfRU5UUlkpLAor CUdUVF9UWVBFX1RBQkxFX0VOVFJZKEdUVF9UWVBFX1BQR1RUX1BEUF9FTlRSWSwKKwkJCUdUVF9U WVBFX1BQR1RUX1BEUF9FTlRSWSwKKwkJCUdUVF9UWVBFX1BQR1RUX1BERV9QVCwKKwkJCUdUVF9U WVBFX1BQR1RUX1BURV8xR19FTlRSWSksCisJR1RUX1RZUEVfVEFCTEVfRU5UUlkoR1RUX1RZUEVf UFBHVFRfUERFX1BULAorCQkJR1RUX1RZUEVfUFBHVFRfUERFX0VOVFJZLAorCQkJR1RUX1RZUEVf UFBHVFRfUFRFX1BULAorCQkJR1RUX1RZUEVfUFBHVFRfUFRFXzJNX0VOVFJZKSwKKwlHVFRfVFlQ RV9UQUJMRV9FTlRSWShHVFRfVFlQRV9QUEdUVF9QREVfRU5UUlksCisJCQlHVFRfVFlQRV9QUEdU VF9QREVfRU5UUlksCisJCQlHVFRfVFlQRV9QUEdUVF9QVEVfUFQsCisJCQlHVFRfVFlQRV9QUEdU VF9QVEVfMk1fRU5UUlkpLAorCUdUVF9UWVBFX1RBQkxFX0VOVFJZKEdUVF9UWVBFX1BQR1RUX1BU RV9QVCwKKwkJCUdUVF9UWVBFX1BQR1RUX1BURV80S19FTlRSWSwKKwkJCUdUVF9UWVBFX0lOVkFM SUQsCisJCQlHVFRfVFlQRV9JTlZBTElEKSwKKwlHVFRfVFlQRV9UQUJMRV9FTlRSWShHVFRfVFlQ RV9QUEdUVF9QVEVfNEtfRU5UUlksCisJCQlHVFRfVFlQRV9QUEdUVF9QVEVfNEtfRU5UUlksCisJ CQlHVFRfVFlQRV9JTlZBTElELAorCQkJR1RUX1RZUEVfSU5WQUxJRCksCisJR1RUX1RZUEVfVEFC TEVfRU5UUlkoR1RUX1RZUEVfUFBHVFRfUFRFXzJNX0VOVFJZLAorCQkJR1RUX1RZUEVfUFBHVFRf UERFX0VOVFJZLAorCQkJR1RUX1RZUEVfSU5WQUxJRCwKKwkJCUdUVF9UWVBFX1BQR1RUX1BURV8y TV9FTlRSWSksCisJR1RUX1RZUEVfVEFCTEVfRU5UUlkoR1RUX1RZUEVfUFBHVFRfUFRFXzFHX0VO VFJZLAorCQkJR1RUX1RZUEVfUFBHVFRfUERQX0VOVFJZLAorCQkJR1RUX1RZUEVfSU5WQUxJRCwK KwkJCUdUVF9UWVBFX1BQR1RUX1BURV8xR19FTlRSWSksCisJR1RUX1RZUEVfVEFCTEVfRU5UUlko R1RUX1RZUEVfR0dUVF9QVEUsCisJCQlHVFRfVFlQRV9HR1RUX1BURSwKKwkJCUdUVF9UWVBFX0lO VkFMSUQsCisJCQlHVFRfVFlQRV9JTlZBTElEKSwKK307CisKK3N0YXRpYyBpbmxpbmUgZ3R0X3R5 cGVfdCBnZXRfbmV4dF9wdF90eXBlKGd0dF90eXBlX3QgdHlwZSkgeworCXJldHVybiBndHRfdHlw ZV90YWJsZVt0eXBlXS5uZXh0X3B0X3R5cGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ3R0X3R5cGVf dCBnZXRfZW50cnlfdHlwZShndHRfdHlwZV90IHR5cGUpIHsKKwlyZXR1cm4gZ3R0X3R5cGVfdGFi bGVbdHlwZV0uZW50cnlfdHlwZTsKK30KKworc3RhdGljIGlubGluZSBndHRfdHlwZV90IGdldF9w c2VfdHlwZShndHRfdHlwZV90IHR5cGUpIHsKKwlyZXR1cm4gZ3R0X3R5cGVfdGFibGVbdHlwZV0u cHNlX2VudHJ5X3R5cGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ3R0X2VudHJ5X3QgKmd0dF9nZXRf ZW50cnk2NCh2b2lkICpwdCwgZ3R0X2VudHJ5X3QgKmUsCisJCXVuc2lnbmVkIGxvbmcgaW5kZXgs IGJvb2wgaHlwZXJ2aXNvcl9hY2Nlc3MsCisJCXN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCit7CisJ c3RydWN0IGd2dF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZlLT5wZGV2LT5kZXZpY2VfaW5mbzsKKwor CUFTU0VSVChpbmZvLT5ndHRfZW50cnlfc2l6ZSA9PSA4KTsKKworCWlmICghcHQpCisJCWUtPnZh bDY0ID0gZ3Z0X3JlYWRfZ3R0NjQoZS0+cGRldiwgaW5kZXgpOworCWVsc2UgeworCQlpZiAoIWh5 cGVydmlzb3JfYWNjZXNzKQorCQkJZS0+dmFsNjQgPSAqKCh1NjQgKilwdCArIGluZGV4KTsKKwkJ ZWxzZQorCQkJaHlwZXJ2aXNvcl9yZWFkX3ZhKHZndCwgKHU2NCAqKXB0ICsgaW5kZXgsICZlLT52 YWw2NCwgOCwgMSk7CisJfQorCXJldHVybiBlOworfQorCitzdGF0aWMgaW5saW5lIGd0dF9lbnRy eV90ICpndHRfc2V0X2VudHJ5NjQodm9pZCAqcHQsIGd0dF9lbnRyeV90ICplLAorCQl1bnNpZ25l ZCBsb25nIGluZGV4LCBib29sIGh5cGVydmlzb3JfYWNjZXNzLAorCQlzdHJ1Y3Qgdmd0X2Rldmlj ZSAqdmd0KQoreworCXN0cnVjdCBndnRfZGV2aWNlX2luZm8gKmluZm8gPSAmZS0+cGRldi0+ZGV2 aWNlX2luZm87CisKKwlBU1NFUlQoaW5mby0+Z3R0X2VudHJ5X3NpemUgPT0gOCk7CisKKwlpZiAo IXB0KQorCQlndnRfd3JpdGVfZ3R0NjQoZS0+cGRldiwgaW5kZXgsIGUtPnZhbDY0KTsKKwllbHNl IHsKKwkJaWYgKCFoeXBlcnZpc29yX2FjY2VzcykKKwkJCSooKHU2NCAqKXB0ICsgaW5kZXgpID0g ZS0+dmFsNjQ7CisJCWVsc2UKKwkJCWh5cGVydmlzb3Jfd3JpdGVfdmEodmd0LCAodTY0ICopcHQg KyBpbmRleCwgJmUtPnZhbDY0LCA4LCAxKTsKKwl9CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyB1 bnNpZ25lZCBsb25nIGdlbjhfZ3R0X2dldF9wZm4oZ3R0X2VudHJ5X3QgKmUpCit7CisJaWYgKGUt PnR5cGUgPT0gR1RUX1RZUEVfUFBHVFRfUFRFXzFHX0VOVFJZKQorCQlyZXR1cm4gKGUtPnZhbDY0 ICYgKDB4MWZmIDw8IDMwKSkgPj4gMTI7CisJZWxzZSBpZiAoZS0+dHlwZSA9PSBHVFRfVFlQRV9Q UEdUVF9QVEVfMk1fRU5UUlkpCisJCXJldHVybiAoZS0+dmFsNjQgJiAoMHgzZmZmZiA8PCAyMSkp ID4+IDEyOworCWVsc2UKKwkJcmV0dXJuIChlLT52YWw2NCA+PiAxMikgJiAweDdmZmZmZmY7Cit9 CisKK3N0YXRpYyB2b2lkIGdlbjhfZ3R0X3NldF9wZm4oZ3R0X2VudHJ5X3QgKmUsIHVuc2lnbmVk IGxvbmcgcGZuKQoreworCWlmIChlLT50eXBlID09IEdUVF9UWVBFX1BQR1RUX1BURV8xR19FTlRS WSkgeworCQllLT52YWw2NCAmPSB+KDB4MWZmIDw8IDMwKTsKKwkJcGZuICY9ICgoMHgxZmYgPDwg MzApID4+IDEyKTsKKwl9IGVsc2UgaWYgKGUtPnR5cGUgPT0gR1RUX1RZUEVfUFBHVFRfUFRFXzJN X0VOVFJZKSB7CisJCWUtPnZhbDY0ICY9IH4oMHgzZmZmZiA8PCAyMSk7CisJCXBmbiAmPSAoKDB4 M2ZmZmYgPDwgMjEpID4+IDEyKTsKKwl9IGVsc2UgeworCQllLT52YWw2NCAmPSB+KDB4N2ZmZmZm ZiA8PCAxMik7CisJCXBmbiAmPSAweDdmZmZmZmY7CisJfQorCisJZS0+dmFsNjQgfD0gKHBmbiA8 PCAxMik7Cit9CisKK3N0YXRpYyBib29sIGdlbjhfZ3R0X3Rlc3RfcHNlKGd0dF9lbnRyeV90ICpl KQoreworCS8qIEVudHJ5IGRvZXNuJ3QgaGF2ZSBQU0UgYml0LiAqLworCWlmIChnZXRfcHNlX3R5 cGUoZS0+dHlwZSkgPT0gR1RUX1RZUEVfSU5WQUxJRCkKKwkJcmV0dXJuIGZhbHNlOworCisJZS0+ dHlwZSA9IGdldF9lbnRyeV90eXBlKGUtPnR5cGUpOworCWlmICghKGUtPnZhbDY0ICYgKDEgPDwg NykpKQorCQlyZXR1cm4gZmFsc2U7CisKKwllLT50eXBlID0gZ2V0X3BzZV90eXBlKGUtPnR5cGUp OworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBnZW44X2d0dF90ZXN0X3ByZXNlbnQo Z3R0X2VudHJ5X3QgKmUpCit7CisJLyoKKwkgKiBpOTE1IHdyaXRlcyBQRFAgcm9vdCBwb2ludGVy IHJlZ2lzdGVycyB3aXRob3V0IHByZXNlbnQgYml0LAorCSAqIGl0IGFsc28gd29ya3MsIHNvIHdl IG5lZWQgdG8gdHJlYXQgcm9vdCBwb2ludGVyIGVudHJ5CisJICogc3BlY2lmaWNhbGx5LgorCSAq LworCWlmIChlLT50eXBlID09IEdUVF9UWVBFX1BQR1RUX1JPT1RfTDNfRU5UUlkKKwkJCXx8IGUt PnR5cGUgPT0gR1RUX1RZUEVfUFBHVFRfUk9PVF9MNF9FTlRSWSkKKwkJcmV0dXJuIChlLT52YWw2 NCAhPSAwKTsKKwllbHNlCisJCXJldHVybiAoZS0+dmFsMzJbMF0gJiAoMSA8PCAwKSk7Cit9CisK K3N0YXRpYyB2b2lkIGd0dF9lbnRyeV9jbGVhcl9wcmVzZW50KGd0dF9lbnRyeV90ICplKQorewor CWUtPnZhbDMyWzBdICY9IH4oMSA8PCAwKTsKK30KKworLyoKKyAqIFBlci1wbGF0Zm9ybSBHTUEg cm91dGluZXMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdtYV90b19nZ3R0X3B0ZV9pbmRl eCh1bnNpZ25lZCBsb25nIGdtYSkKK3sKKwl1bnNpZ25lZCBsb25nIHggPSAoZ21hID4+IEdUVF9Q QUdFX1NISUZUKTsKKwl0cmFjZV9nbWFfaW5kZXgoX19mdW5jX18sIGdtYSwgeCk7CisJcmV0dXJu IHg7Cit9CisKKyNkZWZpbmUgREVGSU5FX1BQR1RUX0dNQV9UT19JTkRFWChwcmVmaXgsIGVuYW1l LCBleHApIFwKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmVmaXgjI19nbWFfdG9fIyNlbmFtZSMj X2luZGV4KHVuc2lnbmVkIGxvbmcgZ21hKSB7IFwKKwkJdW5zaWduZWQgbG9uZyB4ID0gKGV4cCk7 IFwKKwkJdHJhY2VfZ21hX2luZGV4KF9fZnVuY19fLCBnbWEsIHgpOyBcCisJCXJldHVybiB4OyBc CisJfQorCitERUZJTkVfUFBHVFRfR01BX1RPX0lOREVYKGdlbjgsIHB0ZSwgKGdtYSA+PiAxMiAm IDB4MWZmKSk7CitERUZJTkVfUFBHVFRfR01BX1RPX0lOREVYKGdlbjgsIHBkZSwgKGdtYSA+PiAy MSAmIDB4MWZmKSk7CitERUZJTkVfUFBHVFRfR01BX1RPX0lOREVYKGdlbjgsIGwzX3BkcCwgKGdt YSA+PiAzMCAmIDB4MykpOworREVGSU5FX1BQR1RUX0dNQV9UT19JTkRFWChnZW44LCBsNF9wZHAs IChnbWEgPj4gMzAgJiAweDFmZikpOworREVGSU5FX1BQR1RUX0dNQV9UT19JTkRFWChnZW44LCBw bWw0LCAoZ21hID4+IDM5ICYgMHgxZmYpKTsKKworc3RydWN0IGd2dF9ndHRfcHRlX29wcyBnZW44 X2d0dF9wdGVfb3BzID0geworCS5nZXRfZW50cnkgPSBndHRfZ2V0X2VudHJ5NjQsCisJLnNldF9l bnRyeSA9IGd0dF9zZXRfZW50cnk2NCwKKwkuY2xlYXJfcHJlc2VudCA9IGd0dF9lbnRyeV9jbGVh cl9wcmVzZW50LAorCS50ZXN0X3ByZXNlbnQgPSBnZW44X2d0dF90ZXN0X3ByZXNlbnQsCisJLnRl c3RfcHNlID0gZ2VuOF9ndHRfdGVzdF9wc2UsCisJLmdldF9wZm4gPSBnZW44X2d0dF9nZXRfcGZu LAorCS5zZXRfcGZuID0gZ2VuOF9ndHRfc2V0X3BmbiwKK307CisKK3N0cnVjdCBndnRfZ3R0X2dt YV9vcHMgZ2VuOF9ndHRfZ21hX29wcyA9IHsKKwkuZ21hX3RvX2dndHRfcHRlX2luZGV4ID0gZ21h X3RvX2dndHRfcHRlX2luZGV4LAorCS5nbWFfdG9fcHRlX2luZGV4ID0gZ2VuOF9nbWFfdG9fcHRl X2luZGV4LAorCS5nbWFfdG9fcGRlX2luZGV4ID0gZ2VuOF9nbWFfdG9fcGRlX2luZGV4LAorCS5n bWFfdG9fbDNfcGRwX2luZGV4ID0gZ2VuOF9nbWFfdG9fbDNfcGRwX2luZGV4LAorCS5nbWFfdG9f bDRfcGRwX2luZGV4ID0gZ2VuOF9nbWFfdG9fbDRfcGRwX2luZGV4LAorCS5nbWFfdG9fcG1sNF9p bmRleCA9IGdlbjhfZ21hX3RvX3BtbDRfaW5kZXgsCit9OworCitzdGF0aWMgYm9vbCBndHRfZW50 cnlfcDJtKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIGd0dF9lbnRyeV90ICpwLCBndHRfZW50cnlf dCAqbSkKK3sKKyAgICAgICAgc3RydWN0IGd2dF9ndHRfcHRlX29wcyAqb3BzID0gdmd0LT5wZGV2 LT5ndHQucHRlX29wczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBnZm4sIG1mbjsKKworICAgICAg ICAqbSA9ICpwOworCisgICAgICAgIGlmICghb3BzLT50ZXN0X3ByZXNlbnQocCkpCisgICAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZ2ZuID0gb3BzLT5nZXRfcGZuKHApOwor CisgICAgICAgIG1mbiA9IGh5cGVydmlzb3JfZzJtX3Bmbih2Z3QsIGdmbik7CisgICAgICAgIGlm IChtZm4gPT0gSU5WQUxJRF9NRk4pIHsKKyAgICAgICAgICAgICAgICBndnRfZXJyKCJmYWlsIHRv IHRyYW5zbGF0ZSBnZm46IDB4JWx4IiwgZ2ZuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7CisgICAgICAgIH0KKworICAgICAgICBvcHMtPnNldF9wZm4obSwgbWZuKTsKKworICAgICAg ICByZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIE1NIGhlbHBlcnMuCisgKi8KK2d0dF9lbnRyeV90 ICpndnRfbW1fZ2V0X2VudHJ5KHN0cnVjdCBndnRfbW0gKm1tLAorCQl2b2lkICpwYWdlX3RhYmxl LCBndHRfZW50cnlfdCAqZSwKKwkJdW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKwlzdHJ1Y3QgcGd0 X2RldmljZSAqcGRldiA9IG1tLT52Z3QtPnBkZXY7CisJc3RydWN0IGd2dF9ndHRfcHRlX29wcyAq b3BzID0gcGRldi0+Z3R0LnB0ZV9vcHM7CisKKwllLT5wZGV2ID0gcGRldjsKKwllLT50eXBlID0g bW0tPnBhZ2VfdGFibGVfZW50cnlfdHlwZTsKKworCW9wcy0+Z2V0X2VudHJ5KHBhZ2VfdGFibGUs IGUsIGluZGV4LCBmYWxzZSwgTlVMTCk7CisJb3BzLT50ZXN0X3BzZShlKTsKKworCXJldHVybiBl OworfQorCitndHRfZW50cnlfdCAqZ3Z0X21tX3NldF9lbnRyeShzdHJ1Y3QgZ3Z0X21tICptbSwK KwkJdm9pZCAqcGFnZV90YWJsZSwgZ3R0X2VudHJ5X3QgKmUsCisJCXVuc2lnbmVkIGxvbmcgaW5k ZXgpCit7CisJc3RydWN0IHBndF9kZXZpY2UgKnBkZXYgPSBtbS0+dmd0LT5wZGV2OworCXN0cnVj dCBndnRfZ3R0X3B0ZV9vcHMgKm9wcyA9IHBkZXYtPmd0dC5wdGVfb3BzOworCisJZS0+cGRldiA9 IHBkZXY7CisKKwlyZXR1cm4gb3BzLT5zZXRfZW50cnkocGFnZV90YWJsZSwgZSwgaW5kZXgsIGZh bHNlLCBOVUxMKTsKK30KKworLyoKKyAqIFBQR1RUIHNoYWRvdyBwYWdlIHRhYmxlIGhlbHBlcnMu CisgKi8KK3N0YXRpYyBpbmxpbmUgZ3R0X2VudHJ5X3QgKnBwZ3R0X3NwdF9nZXRfZW50cnkocHBn dHRfc3B0X3QgKnNwdCwKKwkJdm9pZCAqcGFnZV90YWJsZSwgZ3R0X3R5cGVfdCB0eXBlLAorCQln dHRfZW50cnlfdCAqZSwgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJYm9vbCBndWVzdCkKK3sKKwlz dHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHNwdC0+dmd0LT5wZGV2OworCXN0cnVjdCBndnRfZ3R0 X3B0ZV9vcHMgKm9wcyA9IHBkZXYtPmd0dC5wdGVfb3BzOworCisJZS0+cGRldiA9IHBkZXY7CisJ ZS0+dHlwZSA9IGdldF9lbnRyeV90eXBlKHR5cGUpOworCisJQVNTRVJUKGd0dF90eXBlX2lzX2Vu dHJ5KGUtPnR5cGUpKTsKKworCW9wcy0+Z2V0X2VudHJ5KHBhZ2VfdGFibGUsIGUsIGluZGV4LCBn dWVzdCwgc3B0LT52Z3QpOworCW9wcy0+dGVzdF9wc2UoZSk7CisKKwlyZXR1cm4gZTsKK30KKwor c3RhdGljIGlubGluZSBndHRfZW50cnlfdCAqcHBndHRfc3B0X3NldF9lbnRyeShwcGd0dF9zcHRf dCAqc3B0LAorCQl2b2lkICpwYWdlX3RhYmxlLCBndHRfdHlwZV90IHR5cGUsCisJCWd0dF9lbnRy eV90ICplLCB1bnNpZ25lZCBsb25nIGluZGV4LAorCQlib29sIGd1ZXN0KQoreworCXN0cnVjdCBw Z3RfZGV2aWNlICpwZGV2ID0gc3B0LT52Z3QtPnBkZXY7CisJc3RydWN0IGd2dF9ndHRfcHRlX29w cyAqb3BzID0gcGRldi0+Z3R0LnB0ZV9vcHM7CisKKwllLT5wZGV2ID0gcGRldjsKKworCUFTU0VS VChndHRfdHlwZV9pc19lbnRyeShlLT50eXBlKSk7CisKKwlyZXR1cm4gb3BzLT5zZXRfZW50cnko cGFnZV90YWJsZSwgZSwgaW5kZXgsIGd1ZXN0LCBzcHQtPnZndCk7Cit9CisKKyNkZWZpbmUgcHBn dHRfZ2V0X2d1ZXN0X2VudHJ5KHNwdCwgZSwgaW5kZXgpIFwKKwlwcGd0dF9zcHRfZ2V0X2VudHJ5 KHNwdCwgc3B0LT5ndWVzdF9wYWdlLnZhZGRyLCBcCisJCXNwdC0+Z3Vlc3RfcGFnZV90eXBlLCBl LCBpbmRleCwgdHJ1ZSkKKworI2RlZmluZSBwcGd0dF9zZXRfZ3Vlc3RfZW50cnkoc3B0LCBlLCBp bmRleCkgXAorCXBwZ3R0X3NwdF9zZXRfZW50cnkoc3B0LCBzcHQtPmd1ZXN0X3BhZ2UudmFkZHIs IFwKKwkJc3B0LT5ndWVzdF9wYWdlX3R5cGUsIGUsIGluZGV4LCB0cnVlKQorCisjZGVmaW5lIHBw Z3R0X2dldF9zaGFkb3dfZW50cnkoc3B0LCBlLCBpbmRleCkgXAorCXBwZ3R0X3NwdF9nZXRfZW50 cnkoc3B0LCBzcHQtPnNoYWRvd19wYWdlLnZhZGRyLCBcCisJCXNwdC0+c2hhZG93X3BhZ2UudHlw ZSwgZSwgaW5kZXgsIGZhbHNlKQorCisjZGVmaW5lIHBwZ3R0X3NldF9zaGFkb3dfZW50cnkoc3B0 LCBlLCBpbmRleCkgXAorCXBwZ3R0X3NwdF9zZXRfZW50cnkoc3B0LCBzcHQtPnNoYWRvd19wYWdl LnZhZGRyLCBcCisJCXNwdC0+c2hhZG93X3BhZ2UudHlwZSwgZSwgaW5kZXgsIGZhbHNlKQorCisK K2Jvb2wgZ3Z0X2luaXRfZ3Vlc3RfcGFnZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCBndWVzdF9w YWdlX3QgKmd1ZXN0X3BhZ2UsCisJCXVuc2lnbmVkIGxvbmcgZ2ZuLCBndWVzdF9wYWdlX2hhbmRs ZXJfdCBoYW5kbGVyLCB2b2lkICpkYXRhKQoreworCUlOSVRfSExJU1RfTk9ERSgmZ3Vlc3RfcGFn ZS0+bm9kZSk7CisKKwlndWVzdF9wYWdlLT52YWRkciA9IGh5cGVydmlzb3JfZ3BhX3RvX3ZhKHZn dCwgZ2ZuIDw8IEdUVF9QQUdFX1NISUZUKTsKKwlpZiAoIWd1ZXN0X3BhZ2UtPnZhZGRyKQorCQly ZXR1cm4gZmFsc2U7CisKKwlndWVzdF9wYWdlLT53cml0ZXByb3RlY3Rpb24gPSBmYWxzZTsKKwln dWVzdF9wYWdlLT5nZm4gPSBnZm47CisJZ3Vlc3RfcGFnZS0+aGFuZGxlciA9IGhhbmRsZXI7CisJ Z3Vlc3RfcGFnZS0+ZGF0YSA9IGRhdGE7CisJZ3Vlc3RfcGFnZS0+b29zX3BhZ2UgPSBOVUxMOwor CWd1ZXN0X3BhZ2UtPndyaXRlX2NudCA9IDA7CisKKwloYXNoX2FkZCh2Z3QtPmd0dC5ndWVzdF9w YWdlX2hhc2hfdGFibGUsICZndWVzdF9wYWdlLT5ub2RlLCBndWVzdF9wYWdlLT5nZm4pOworCisJ cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGd2dF9kZXRhY2hfb29zX3BhZ2Uoc3RydWN0 IHZndF9kZXZpY2UgKnZndCwgb29zX3BhZ2VfdCAqb29zX3BhZ2UpOworCit2b2lkIGd2dF9jbGVh bl9ndWVzdF9wYWdlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIGd1ZXN0X3BhZ2VfdCAqZ3Vlc3Rf cGFnZSkKK3sKKwlpZighaGxpc3RfdW5oYXNoZWQoJmd1ZXN0X3BhZ2UtPm5vZGUpKQorCQloYXNo X2RlbCgmZ3Vlc3RfcGFnZS0+bm9kZSk7CisKKwlpZiAoZ3Vlc3RfcGFnZS0+b29zX3BhZ2UpCisJ CWd2dF9kZXRhY2hfb29zX3BhZ2Uodmd0LCBndWVzdF9wYWdlLT5vb3NfcGFnZSk7CisKKwlpZiAo Z3Vlc3RfcGFnZS0+d3JpdGVwcm90ZWN0aW9uKQorCQloeXBlcnZpc29yX3Vuc2V0X3dwX3BhZ2Vz KHZndCwgZ3Vlc3RfcGFnZSk7CisKKwlpZiAoZ3Vlc3RfcGFnZSA9PSB2Z3QtPmd0dC5sYXN0X3Bh cnRpYWxfcHBndHRfYWNjZXNzX2dwdCkKKwkJdmd0LT5ndHQubGFzdF9wYXJ0aWFsX3BwZ3R0X2Fj Y2Vzc19pbmRleCA9IC0xOworfQorCitndWVzdF9wYWdlX3QgKmd2dF9maW5kX2d1ZXN0X3BhZ2Uo c3RydWN0IHZndF9kZXZpY2UgKnZndCwgdW5zaWduZWQgbG9uZyBnZm4pCit7CisJZ3Vlc3RfcGFn ZV90ICpndWVzdF9wYWdlOworCXN0cnVjdCBndnRfc3RhdGlzdGljcyAqc3RhdCA9ICZ2Z3QtPnN0 YXQ7CisJY3ljbGVzX3QgdDAsIHQxOworCisJdDAgPSBnZXRfY3ljbGVzKCk7CisKKwloYXNoX2Zv cl9lYWNoX3Bvc3NpYmxlKHZndC0+Z3R0Lmd1ZXN0X3BhZ2VfaGFzaF90YWJsZSwgZ3Vlc3RfcGFn ZSwgbm9kZSwgZ2ZuKSB7CisJCWlmIChndWVzdF9wYWdlLT5nZm4gPT0gZ2ZuKSB7CisJCQl0MSA9 IGdldF9jeWNsZXMoKTsKKwkJCXN0YXQtPmdwdF9maW5kX2hpdF9jbnQrKzsKKwkJCXN0YXQtPmdw dF9maW5kX2hpdF9jeWNsZXMgKz0gdDEgLSB0MDsKKwkJCXJldHVybiBndWVzdF9wYWdlOworCQl9 CisJfQorCisJdDEgPSBnZXRfY3ljbGVzKCk7CisJc3RhdC0+Z3B0X2ZpbmRfbWlzc19jbnQrKzsK KwlzdGF0LT5ncHRfZmluZF9taXNzX2N5Y2xlcyArPSB0MSAtIHQwOworCisJcmV0dXJuIE5VTEw7 Cit9CisKKy8qCisgKiBTaGFkb3cgcGFnZSBtYW5pcHVsYXRpb24gcm91dGluZXMuCisgKi8KK3N0 YXRpYyBpbmxpbmUgYm9vbCBndnRfaW5pdF9zaGFkb3dfcGFnZShzdHJ1Y3Qgdmd0X2RldmljZSAq dmd0LAorCQlzaGFkb3dfcGFnZV90ICpzcCwgZ3R0X3R5cGVfdCB0eXBlKQoreworCXNwLT52YWRk ciA9IHBhZ2VfYWRkcmVzcyhzcC0+cGFnZSk7CisJc3AtPnR5cGUgPSB0eXBlOworCW1lbXNldChz cC0+dmFkZHIsIDAsIFBBR0VfU0laRSk7CisKKwlJTklUX0hMSVNUX05PREUoJnNwLT5ub2RlKTsK KwlzcC0+bWZuID0gaHlwZXJ2aXNvcl92aXJ0X3RvX21mbihzcC0+dmFkZHIpOworCWhhc2hfYWRk KHZndC0+Z3R0LnNoYWRvd19wYWdlX2hhc2hfdGFibGUsICZzcC0+bm9kZSwgc3AtPm1mbik7CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGd2dF9jbGVhbl9zaGFkb3df cGFnZShzaGFkb3dfcGFnZV90ICpzcCkKK3sKKwlpZighaGxpc3RfdW5oYXNoZWQoJnNwLT5ub2Rl KSkKKwkJaGFzaF9kZWwoJnNwLT5ub2RlKTsKK30KKworc3RhdGljIGlubGluZSBzaGFkb3dfcGFn ZV90ICpndnRfZmluZF9zaGFkb3dfcGFnZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAorCQl1bnNp Z25lZCBsb25nIG1mbikKK3sKKwlzaGFkb3dfcGFnZV90ICpzaGFkb3dfcGFnZTsKKwlzdHJ1Y3Qg Z3Z0X3N0YXRpc3RpY3MgKnN0YXQgPSAmdmd0LT5zdGF0OworCWN5Y2xlc190IHQwLCB0MTsKKwor CXQwID0gZ2V0X2N5Y2xlcygpOworCisJaGFzaF9mb3JfZWFjaF9wb3NzaWJsZSh2Z3QtPmd0dC5z aGFkb3dfcGFnZV9oYXNoX3RhYmxlLCBzaGFkb3dfcGFnZSwgbm9kZSwgbWZuKSB7CisJCWlmIChz aGFkb3dfcGFnZS0+bWZuID09IG1mbikgeworCQkJdDEgPSBnZXRfY3ljbGVzKCk7CisJCQlzdGF0 LT5zcHRfZmluZF9oaXRfY250Kys7CisJCQlzdGF0LT5zcHRfZmluZF9oaXRfY3ljbGVzICs9IHQx IC0gdDA7CisJCQlyZXR1cm4gc2hhZG93X3BhZ2U7CisJCX0KKwl9CisKKwl0MSA9IGdldF9jeWNs ZXMoKTsKKwlzdGF0LT5zcHRfZmluZF9taXNzX2NudCsrOworCXN0YXQtPnNwdF9maW5kX21pc3Nf Y3ljbGVzICs9IHQxIC0gdDA7CisKKwlyZXR1cm4gTlVMTDsKK30KKworI2RlZmluZSBndWVzdF9w YWdlX3RvX3BwZ3R0X3NwdChwdHIpIFwKKwljb250YWluZXJfb2YocHRyLCBwcGd0dF9zcHRfdCwg Z3Vlc3RfcGFnZSkKKworI2RlZmluZSBzaGFkb3dfcGFnZV90b19wcGd0dF9zcHQocHRyKSBcCisJ Y29udGFpbmVyX29mKHB0ciwgcHBndHRfc3B0X3QsIHNoYWRvd19wYWdlKQorCitzdGF0aWMgdm9p ZCBwcGd0dF9mcmVlX3NoYWRvd19wYWdlKHBwZ3R0X3NwdF90ICpzcHQpCit7CisJdHJhY2Vfc3B0 X2ZyZWUoc3B0LT52Z3QtPnZtX2lkLCBzcHQsIHNwdC0+c2hhZG93X3BhZ2UudHlwZSk7CisKKwln dnRfY2xlYW5fc2hhZG93X3BhZ2UoJnNwdC0+c2hhZG93X3BhZ2UpOworCWd2dF9jbGVhbl9ndWVz dF9wYWdlKHNwdC0+dmd0LCAmc3B0LT5ndWVzdF9wYWdlKTsKKworCW1lbXBvb2xfZnJlZShzcHQs IHNwdC0+dmd0LT5wZGV2LT5ndHQubWVtcG9vbCk7Cit9CisKK3N0YXRpYyB2b2lkIHBwZ3R0X2Zy ZWVfYWxsX3NoYWRvd19wYWdlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCit7CisJc3RydWN0IGhs aXN0X25vZGUgKm47CisJc2hhZG93X3BhZ2VfdCAqc3A7CisJaW50IGk7CisKKwloYXNoX2Zvcl9l YWNoX3NhZmUodmd0LT5ndHQuc2hhZG93X3BhZ2VfaGFzaF90YWJsZSwgaSwgbiwgc3AsIG5vZGUp CisJCXBwZ3R0X2ZyZWVfc2hhZG93X3BhZ2Uoc2hhZG93X3BhZ2VfdG9fcHBndHRfc3B0KHNwKSk7 CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBib29sIHBwZ3R0X2hhbmRsZV9ndWVzdF93cml0ZV9w YWdlX3RhYmxlX2J5dGVzKHZvaWQgKmdwLAorCQl1aW50NjRfdCBwYSwgdm9pZCAqcF9kYXRhLCBp bnQgYnl0ZXMpOworCitzdGF0aWMgYm9vbCBwcGd0dF93cml0ZV9wcm90ZWN0aW9uX2hhbmRsZXIo dm9pZCAqZ3AsIHVpbnQ2NF90IHBhLCB2b2lkICpwX2RhdGEsIGludCBieXRlcykKK3sKKwlndWVz dF9wYWdlX3QgKmdwdCA9IChndWVzdF9wYWdlX3QgKilncDsKKwlwcGd0dF9zcHRfdCAqc3B0ID0g Z3Vlc3RfcGFnZV90b19wcGd0dF9zcHQoZ3B0KTsKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0ID0g c3B0LT52Z3Q7CisJc3RydWN0IGd2dF9zdGF0aXN0aWNzICpzdGF0ID0gJnZndC0+c3RhdDsKKwlj eWNsZXNfdCB0MCwgdDE7CisKKwlpZiAoYnl0ZXMgIT0gNCAmJiBieXRlcyAhPSA4KQorCQlyZXR1 cm4gZmFsc2U7CisKKwlpZiAoIWdwdC0+d3JpdGVwcm90ZWN0aW9uKQorCQlyZXR1cm4gZmFsc2U7 CisKKwl0MCA9IGdldF9jeWNsZXMoKTsKKworCWlmICghcHBndHRfaGFuZGxlX2d1ZXN0X3dyaXRl X3BhZ2VfdGFibGVfYnl0ZXMoZ3AsCisJCXBhLCBwX2RhdGEsIGJ5dGVzKSkKKwkJcmV0dXJuIGZh bHNlOworCisJdDEgPSBnZXRfY3ljbGVzKCk7CisJc3RhdC0+cHBndHRfd3BfY250Kys7CisJc3Rh dC0+cHBndHRfd3BfY3ljbGVzICs9IHQxIC0gdDA7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3Rh dGljIHBwZ3R0X3NwdF90ICpwcGd0dF9hbGxvY19zaGFkb3dfcGFnZShzdHJ1Y3Qgdmd0X2Rldmlj ZSAqdmd0LAorCQlndHRfdHlwZV90IHR5cGUsIHVuc2lnbmVkIGxvbmcgZ3B0X2dmbikKK3sKKwlw cGd0dF9zcHRfdCAqc3B0ID0gTlVMTDsKKworCXNwdCA9IG1lbXBvb2xfYWxsb2Modmd0LT5wZGV2 LT5ndHQubWVtcG9vbCwgR0ZQX0FUT01JQyk7CisJaWYgKCFzcHQpIHsKKwkJZ3Z0X2VycigiZmFp bCB0byBhbGxvY2F0ZSBwcGd0dCBzaGFkb3cgcGFnZS4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJc3B0LT52Z3QgPSB2Z3Q7CisJc3B0LT5ndWVzdF9wYWdlX3R5cGUgPSB0eXBlOworCWF0b21p Y19zZXQoJnNwdC0+cmVmY291bnQsIDEpOworCisJLyoKKwkgKiBUT0RPOiBHdWVzdCBwYWdlIG1h eSBiZSBkaWZmZXJlbnQgd2l0aCBzaGFkb3cgcGFnZSB0eXBlLAorCSAqCSBpZiB3ZSBzdXBwb3J0 IFBTRSBwYWdlIGluIGZ1dHVyZS4KKwkgKi8KKwlpZiAoIWd2dF9pbml0X3NoYWRvd19wYWdlKHZn dCwgJnNwdC0+c2hhZG93X3BhZ2UsIHR5cGUpKSB7CisJCWd2dF9lcnIoImZhaWwgdG8gaW5pdGlh bGl6ZSBzaGFkb3dfcGFnZV90IGZvciBzcHQuIik7CisJCWdvdG8gZXJyOworCX0KKworCWlmICgh Z3Z0X2luaXRfZ3Vlc3RfcGFnZSh2Z3QsICZzcHQtPmd1ZXN0X3BhZ2UsCisJCQkJZ3B0X2dmbiwg cHBndHRfd3JpdGVfcHJvdGVjdGlvbl9oYW5kbGVyLCBOVUxMKSkgeworCQlndnRfZXJyKCJmYWls IHRvIGluaXRpYWxpemUgc2hhZG93X3BhZ2VfdCBmb3Igc3B0LiIpOworCQlnb3RvIGVycjsKKwl9 CisKKwl0cmFjZV9zcHRfYWxsb2Modmd0LT52bV9pZCwgc3B0LCB0eXBlLCBzcHQtPnNoYWRvd19w YWdlLm1mbiwgZ3B0X2dmbik7CisKKwlyZXR1cm4gc3B0OworZXJyOgorCXBwZ3R0X2ZyZWVfc2hh ZG93X3BhZ2Uoc3B0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHBwZ3R0X3NwdF90ICpw cGd0dF9maW5kX3NoYWRvd19wYWdlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGxv bmcgbWZuKQoreworCXNoYWRvd19wYWdlX3QgKnNwID0gZ3Z0X2ZpbmRfc2hhZG93X3BhZ2Uodmd0 LCBtZm4pOworCisJaWYgKHNwKQorCQlyZXR1cm4gc2hhZG93X3BhZ2VfdG9fcHBndHRfc3B0KHNw KTsKKworCWd2dF9lcnIoIlZNICVkIGZhaWwgdG8gZmluZCBwcGd0dCBzaGFkb3cgcGFnZTogMHgl bHguIiwKKwkJCXZndC0+dm1faWQsIG1mbik7CisKKwlyZXR1cm4gTlVMTDsKK30KKworI2RlZmlu ZSBwdF9lbnRyeV9zaXplX3NoaWZ0KHNwdCkgXAorCSgoc3B0KS0+dmd0LT5wZGV2LT5kZXZpY2Vf aW5mby5ndHRfZW50cnlfc2l6ZV9zaGlmdCkKKworI2RlZmluZSBwdF9lbnRyaWVzKHNwdCkgXAor CShQQUdFX1NJWkUgPj4gcHRfZW50cnlfc2l6ZV9zaGlmdChzcHQpKQorCisjZGVmaW5lIGZvcl9l YWNoX3ByZXNlbnRfZ3Vlc3RfZW50cnkoc3B0LCBlLCBpKSBcCisJZm9yIChpID0gMDsgaSA8IHB0 X2VudHJpZXMoc3B0KTsgaSsrKSBcCisJaWYgKHNwdC0+dmd0LT5wZGV2LT5ndHQucHRlX29wcy0+ dGVzdF9wcmVzZW50KHBwZ3R0X2dldF9ndWVzdF9lbnRyeShzcHQsIGUsIGkpKSkKKworI2RlZmlu ZSBmb3JfZWFjaF9wcmVzZW50X3NoYWRvd19lbnRyeShzcHQsIGUsIGkpIFwKKwlmb3IgKGkgPSAw OyBpIDwgcHRfZW50cmllcyhzcHQpOyBpKyspIFwKKwlpZiAoc3B0LT52Z3QtPnBkZXYtPmd0dC5w dGVfb3BzLT50ZXN0X3ByZXNlbnQocHBndHRfZ2V0X3NoYWRvd19lbnRyeShzcHQsIGUsIGkpKSkK Kworc3RhdGljIHZvaWQgcHBndHRfZ2V0X3NoYWRvd19wYWdlKHBwZ3R0X3NwdF90ICpzcHQpCit7 CisJaW50IHYgPSBhdG9taWNfcmVhZCgmc3B0LT5yZWZjb3VudCk7CisKKwl0cmFjZV9zcHRfcmVm Y291bnQoc3B0LT52Z3QtPnZtX2lkLCAiaW5jIiwgc3B0LCB2LCAodiArIDEpKTsKKworCWF0b21p Y19pbmMoJnNwdC0+cmVmY291bnQpOworfQorCitzdGF0aWMgYm9vbCBwcGd0dF9pbnZhbGlkYXRl X3NoYWRvd19wYWdlKHBwZ3R0X3NwdF90ICpzcHQpOworCitzdGF0aWMgYm9vbCBwcGd0dF9pbnZh bGlkYXRlX3NoYWRvd19wYWdlX2J5X3NoYWRvd19lbnRyeShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 LAorCQlndHRfZW50cnlfdCAqZSkKK3sKKwlzdHJ1Y3QgZ3Z0X2d0dF9wdGVfb3BzICpvcHMgPSB2 Z3QtPnBkZXYtPmd0dC5wdGVfb3BzOworCXBwZ3R0X3NwdF90ICpzOworCisJaWYgKCFndHRfdHlw ZV9pc19wdChnZXRfbmV4dF9wdF90eXBlKGUtPnR5cGUpKSkKKwkJcmV0dXJuIGZhbHNlOworCisJ cyA9IHBwZ3R0X2ZpbmRfc2hhZG93X3BhZ2Uodmd0LCBvcHMtPmdldF9wZm4oZSkpOworCWlmICgh cykgeworCQlndnRfZXJyKCJWTSAlZCBmYWlsIHRvIGZpbmQgc2hhZG93IHBhZ2U6IG1mbjogMHgl bHguIiwKKwkJCQl2Z3QtPnZtX2lkLCBvcHMtPmdldF9wZm4oZSkpOworCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJcmV0dXJuIHBwZ3R0X2ludmFsaWRhdGVfc2hhZG93X3BhZ2Uocyk7Cit9CisKK3N0 YXRpYyBib29sIHBwZ3R0X2ludmFsaWRhdGVfc2hhZG93X3BhZ2UocHBndHRfc3B0X3QgKnNwdCkK K3sKKwlndHRfZW50cnlfdCBlOworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisJaW50IHYgPSBhdG9t aWNfcmVhZCgmc3B0LT5yZWZjb3VudCk7CisKKwl0cmFjZV9zcHRfY2hhbmdlKHNwdC0+dmd0LT52 bV9pZCwgImRpZSIsIHNwdCwKKwkJCXNwdC0+Z3Vlc3RfcGFnZS5nZm4sIHNwdC0+c2hhZG93X3Bh Z2UudHlwZSk7CisKKwl0cmFjZV9zcHRfcmVmY291bnQoc3B0LT52Z3QtPnZtX2lkLCAiZGVjIiwg c3B0LCB2LCAodiAtIDEpKTsKKworCWlmIChhdG9taWNfZGVjX3JldHVybigmc3B0LT5yZWZjb3Vu dCkgPiAwKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChndHRfdHlwZV9pc19wdGVfcHQoc3B0LT5z aGFkb3dfcGFnZS50eXBlKSkKKwkJZ290byByZWxlYXNlOworCisJZm9yX2VhY2hfcHJlc2VudF9z aGFkb3dfZW50cnkoc3B0LCAmZSwgaW5kZXgpIHsKKwkJaWYgKCFndHRfdHlwZV9pc19wdChnZXRf bmV4dF9wdF90eXBlKGUudHlwZSkpKSB7CisJCQlndnRfZXJyKCJHVlQgZG9lc24ndCBzdXBwb3J0 IHBzZSBiaXQgbm93LiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWlmICghcHBndHRfaW52 YWxpZGF0ZV9zaGFkb3dfcGFnZV9ieV9zaGFkb3dfZW50cnkoc3B0LT52Z3QsICZlKSkKKwkJCWdv dG8gZmFpbDsKKwl9CisKK3JlbGVhc2U6CisJdHJhY2Vfc3B0X2NoYW5nZShzcHQtPnZndC0+dm1f aWQsICJyZWxlYXNlIiwgc3B0LAorCQkJc3B0LT5ndWVzdF9wYWdlLmdmbiwgc3B0LT5zaGFkb3df cGFnZS50eXBlKTsKKwlwcGd0dF9mcmVlX3NoYWRvd19wYWdlKHNwdCk7CisJcmV0dXJuIHRydWU7 CitmYWlsOgorCWd2dF9lcnIoImZhaWw6IHNoYWRvdyBwYWdlICVwIHNoYWRvdyBlbnRyeSAweCVs bHggdHlwZSAlZC4iLAorCQkJc3B0LCBlLnZhbDY0LCBlLnR5cGUpOworCXJldHVybiBmYWxzZTsK K30KKworc3RhdGljIGJvb2wgcHBndHRfcG9wdWxhdGVfc2hhZG93X3BhZ2UocHBndHRfc3B0X3Qg KnNwdCk7CisKK3N0YXRpYyBwcGd0dF9zcHRfdCAqcHBndHRfcG9wdWxhdGVfc2hhZG93X3BhZ2Vf YnlfZ3Vlc3RfZW50cnkoc3RydWN0IHZndF9kZXZpY2UgKnZndCwKKwkJZ3R0X2VudHJ5X3QgKndl KQoreworCXN0cnVjdCBndnRfZ3R0X3B0ZV9vcHMgKm9wcyA9IHZndC0+cGRldi0+Z3R0LnB0ZV9v cHM7CisJcHBndHRfc3B0X3QgKnMgPSBOVUxMOworCWd1ZXN0X3BhZ2VfdCAqZzsKKworCWlmICgh Z3R0X3R5cGVfaXNfcHQoZ2V0X25leHRfcHRfdHlwZSh3ZS0+dHlwZSkpKQorCQlnb3RvIGZhaWw7 CisKKwlnID0gZ3Z0X2ZpbmRfZ3Vlc3RfcGFnZSh2Z3QsIG9wcy0+Z2V0X3Bmbih3ZSkpOworCWlm IChnKSB7CisJCXMgPSBndWVzdF9wYWdlX3RvX3BwZ3R0X3NwdChnKTsKKwkJcHBndHRfZ2V0X3No YWRvd19wYWdlKHMpOworCX0gZWxzZSB7CisJCWd0dF90eXBlX3QgdHlwZSA9IGdldF9uZXh0X3B0 X3R5cGUod2UtPnR5cGUpOworCQlzID0gcHBndHRfYWxsb2Nfc2hhZG93X3BhZ2Uodmd0LCB0eXBl LCBvcHMtPmdldF9wZm4od2UpKTsKKwkJaWYgKCFzKQorCQkJZ290byBmYWlsOworCisJCWlmICgh aHlwZXJ2aXNvcl9zZXRfd3BfcGFnZXModmd0LCAmcy0+Z3Vlc3RfcGFnZSkpCisJCQlnb3RvIGZh aWw7CisKKwkJaWYgKCFwcGd0dF9wb3B1bGF0ZV9zaGFkb3dfcGFnZShzKSkKKwkJCWdvdG8gZmFp bDsKKworCQl0cmFjZV9zcHRfY2hhbmdlKHZndC0+dm1faWQsICJuZXciLCBzLCBzLT5ndWVzdF9w YWdlLmdmbiwgcy0+c2hhZG93X3BhZ2UudHlwZSk7CisJfQorCXJldHVybiBzOworZmFpbDoKKwln dnRfZXJyKCJmYWlsOiBzaGFkb3cgcGFnZSAlcCBndWVzdCBlbnRyeSAweCVsbHggdHlwZSAlZC4i LAorCQkJcywgd2UtPnZhbDY0LCB3ZS0+dHlwZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBwcGd0dF9nZW5lcmF0ZV9zaGFkb3dfZW50cnkoZ3R0X2VudHJ5X3QgKnNl LAorCQlwcGd0dF9zcHRfdCAqcywgZ3R0X2VudHJ5X3QgKmdlKQoreworCXN0cnVjdCBndnRfZ3R0 X3B0ZV9vcHMgKm9wcyA9IHMtPnZndC0+cGRldi0+Z3R0LnB0ZV9vcHM7CisKKwlzZS0+dHlwZSA9 IGdlLT50eXBlOworCXNlLT52YWw2NCA9IGdlLT52YWw2NDsKKwlzZS0+cGRldiA9IGdlLT5wZGV2 OworCisJb3BzLT5zZXRfcGZuKHNlLCBzLT5zaGFkb3dfcGFnZS5tZm4pOworfQorCitzdGF0aWMg Ym9vbCBwcGd0dF9wb3B1bGF0ZV9zaGFkb3dfcGFnZShwcGd0dF9zcHRfdCAqc3B0KQoreworCXN0 cnVjdCB2Z3RfZGV2aWNlICp2Z3QgPSBzcHQtPnZndDsKKwlwcGd0dF9zcHRfdCAqczsKKwlndHRf ZW50cnlfdCBzZSwgZ2U7CisJdW5zaWduZWQgbG9uZyBpOworCisJdHJhY2Vfc3B0X2NoYW5nZShz cHQtPnZndC0+dm1faWQsICJib3JuIiwgc3B0LAorCQkJc3B0LT5ndWVzdF9wYWdlLmdmbiwgc3B0 LT5zaGFkb3dfcGFnZS50eXBlKTsKKworCWlmIChndHRfdHlwZV9pc19wdGVfcHQoc3B0LT5zaGFk b3dfcGFnZS50eXBlKSkgeworCQlmb3JfZWFjaF9wcmVzZW50X2d1ZXN0X2VudHJ5KHNwdCwgJmdl LCBpKSB7CisJCQlpZiAoIWd0dF9lbnRyeV9wMm0odmd0LCAmZ2UsICZzZSkpCisJCQkJZ290byBm YWlsOworCQkJcHBndHRfc2V0X3NoYWRvd19lbnRyeShzcHQsICZzZSwgaSk7CisJCX0KKwkJcmV0 dXJuIHRydWU7CisJfQorCisJZm9yX2VhY2hfcHJlc2VudF9ndWVzdF9lbnRyeShzcHQsICZnZSwg aSkgeworCQlpZiAoIWd0dF90eXBlX2lzX3B0KGdldF9uZXh0X3B0X3R5cGUoZ2UudHlwZSkpKSB7 CisJCQlndnRfZXJyKCJHVlQgZG9lc24ndCBzdXBwb3J0IHBzZSBiaXQgbm93LiIpOworCQkJZ290 byBmYWlsOworCQl9CisKKwkJcyA9IHBwZ3R0X3BvcHVsYXRlX3NoYWRvd19wYWdlX2J5X2d1ZXN0 X2VudHJ5KHZndCwgJmdlKTsKKwkJaWYgKCFzKQorCQkJZ290byBmYWlsOworCQlwcGd0dF9nZXRf c2hhZG93X2VudHJ5KHNwdCwgJnNlLCBpKTsKKwkJcHBndHRfZ2VuZXJhdGVfc2hhZG93X2VudHJ5 KCZzZSwgcywgJmdlKTsKKwkJcHBndHRfc2V0X3NoYWRvd19lbnRyeShzcHQsICZzZSwgaSk7CisJ fQorCXJldHVybiB0cnVlOworZmFpbDoKKwlndnRfZXJyKCJmYWlsOiBzaGFkb3cgcGFnZSAlcCBn dWVzdCBlbnRyeSAweCVsbHggdHlwZSAlZC4iLAorCQkJc3B0LCBnZS52YWw2NCwgZ2UudHlwZSk7 CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBwcGd0dF9oYW5kbGVfZ3Vlc3RfZW50 cnlfcmVtb3ZhbChndWVzdF9wYWdlX3QgKmdwdCwKKwkJZ3R0X2VudHJ5X3QgKndlLCB1bnNpZ25l ZCBsb25nIGluZGV4KQoreworCXBwZ3R0X3NwdF90ICpzcHQgPSBndWVzdF9wYWdlX3RvX3BwZ3R0 X3NwdChncHQpOworCXNoYWRvd19wYWdlX3QgKnNwID0gJnNwdC0+c2hhZG93X3BhZ2U7CisJc3Ry dWN0IHZndF9kZXZpY2UgKnZndCA9IHNwdC0+dmd0OworCXN0cnVjdCBndnRfZ3R0X3B0ZV9vcHMg Km9wcyA9IHZndC0+cGRldi0+Z3R0LnB0ZV9vcHM7CisJZ3R0X2VudHJ5X3QgZTsKKworCXRyYWNl X2dwdF9jaGFuZ2Uoc3B0LT52Z3QtPnZtX2lkLCAicmVtb3ZlIiwgc3B0LCBzcC0+dHlwZSwgd2Ut PnZhbDY0LCBpbmRleCk7CisKKwlwcGd0dF9nZXRfc2hhZG93X2VudHJ5KHNwdCwgJmUsIGluZGV4 KTsKKwlpZiAoIW9wcy0+dGVzdF9wcmVzZW50KCZlKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAo Z3R0X3R5cGVfaXNfcHQoZ2V0X25leHRfcHRfdHlwZSh3ZS0+dHlwZSkpKSB7CisJCWd1ZXN0X3Bh Z2VfdCAqZyA9IGd2dF9maW5kX2d1ZXN0X3BhZ2Uodmd0LCBvcHMtPmdldF9wZm4od2UpKTsKKwkJ aWYgKCFnKSB7CisJCQlndnRfZXJyKCJmYWlsIHRvIGZpbmQgZ3Vlc3QgcGFnZS4iKTsKKwkJCWdv dG8gZmFpbDsKKwkJfQorCQlpZiAoIXBwZ3R0X2ludmFsaWRhdGVfc2hhZG93X3BhZ2UoZ3Vlc3Rf cGFnZV90b19wcGd0dF9zcHQoZykpKQorCQkJZ290byBmYWlsOworCX0KKwllLnZhbDY0ID0gMDsK KwlwcGd0dF9zZXRfc2hhZG93X2VudHJ5KHNwdCwgJmUsIGluZGV4KTsKKwlyZXR1cm4gdHJ1ZTsK K2ZhaWw6CisJZ3Z0X2VycigiZmFpbDogc2hhZG93IHBhZ2UgJXAgZ3Vlc3QgZW50cnkgMHglbGx4 IHR5cGUgJWQuIiwKKwkJCXNwdCwgd2UtPnZhbDY0LCB3ZS0+dHlwZSk7CisJcmV0dXJuIGZhbHNl OworfQorCitzdGF0aWMgYm9vbCBwcGd0dF9oYW5kbGVfZ3Vlc3RfZW50cnlfYWRkKGd1ZXN0X3Bh Z2VfdCAqZ3B0LAorCQlndHRfZW50cnlfdCAqd2UsIHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisJ cHBndHRfc3B0X3QgKnNwdCA9IGd1ZXN0X3BhZ2VfdG9fcHBndHRfc3B0KGdwdCk7CisJc2hhZG93 X3BhZ2VfdCAqc3AgPSAmc3B0LT5zaGFkb3dfcGFnZTsKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 ID0gc3B0LT52Z3Q7CisJZ3R0X2VudHJ5X3QgbTsKKwlwcGd0dF9zcHRfdCAqczsKKworCXRyYWNl X2dwdF9jaGFuZ2Uoc3B0LT52Z3QtPnZtX2lkLCAiYWRkIiwgc3B0LCBzcC0+dHlwZSwgd2UtPnZh bDY0LCBpbmRleCk7CisKKwlpZiAoZ3R0X3R5cGVfaXNfcHQoZ2V0X25leHRfcHRfdHlwZSh3ZS0+ dHlwZSkpKSB7CisJCXMgPSBwcGd0dF9wb3B1bGF0ZV9zaGFkb3dfcGFnZV9ieV9ndWVzdF9lbnRy eSh2Z3QsIHdlKTsKKwkJaWYgKCFzKQorCQkJZ290byBmYWlsOworCQlwcGd0dF9nZXRfc2hhZG93 X2VudHJ5KHNwdCwgJm0sIGluZGV4KTsKKwkJcHBndHRfZ2VuZXJhdGVfc2hhZG93X2VudHJ5KCZt LCBzLCB3ZSk7CisJCXBwZ3R0X3NldF9zaGFkb3dfZW50cnkoc3B0LCAmbSwgaW5kZXgpOworCX0g ZWxzZSB7CisJCWlmICghZ3R0X2VudHJ5X3AybSh2Z3QsIHdlLCAmbSkpCisJCQlnb3RvIGZhaWw7 CisJCXBwZ3R0X3NldF9zaGFkb3dfZW50cnkoc3B0LCAmbSwgaW5kZXgpOworCX0KKworCXJldHVy biB0cnVlOworCitmYWlsOgorCWd2dF9lcnIoImZhaWw6IHNwdCAlcCBndWVzdCBlbnRyeSAweCVs bHggdHlwZSAlZC4iLCBzcHQsIHdlLT52YWw2NCwgd2UtPnR5cGUpOworCXJldHVybiBmYWxzZTsK K30KKworc3RhdGljIGJvb2wgdmd0X3N5bmNfb29zX3BhZ2Uoc3RydWN0IHZndF9kZXZpY2UgKnZn dCwgb29zX3BhZ2VfdCAqb29zX3BhZ2UpCit7CisJc3RydWN0IGd2dF9kZXZpY2VfaW5mbyAqaW5m byA9ICZ2Z3QtPnBkZXYtPmRldmljZV9pbmZvOworCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0g dmd0LT5wZGV2OworCXN0cnVjdCBndnRfZ3R0X3B0ZV9vcHMgKm9wcyA9IHBkZXYtPmd0dC5wdGVf b3BzOworCXBwZ3R0X3NwdF90ICpzcHQgPSBndWVzdF9wYWdlX3RvX3BwZ3R0X3NwdChvb3NfcGFn ZS0+Z3Vlc3RfcGFnZSk7CisJZ3R0X2VudHJ5X3Qgb2xkLCBuZXcsIG07CisJaW50IGluZGV4Owor CisJdHJhY2Vfb29zX2NoYW5nZSh2Z3QtPnZtX2lkLCAic3luYyIsIG9vc19wYWdlLT5pZCwKKwkJ CW9vc19wYWdlLT5ndWVzdF9wYWdlLCBzcHQtPmd1ZXN0X3BhZ2VfdHlwZSk7CisKKwlvbGQudHlw ZSA9IG5ldy50eXBlID0gZ2V0X2VudHJ5X3R5cGUoc3B0LT5ndWVzdF9wYWdlX3R5cGUpOworCW9s ZC5wZGV2ID0gbmV3LnBkZXYgPSBwZGV2OworCW9sZC52YWw2NCA9IG5ldy52YWw2NCA9IDA7CisK Kwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAoR1RUX1BBR0VfU0laRSA+PiBpbmZvLT5ndHRfZW50 cnlfc2l6ZV9zaGlmdCk7IGluZGV4KyspIHsKKwkJb3BzLT5nZXRfZW50cnkob29zX3BhZ2UtPm1l bSwgJm9sZCwgaW5kZXgsIGZhbHNlLCBOVUxMKTsKKwkJb3BzLT5nZXRfZW50cnkob29zX3BhZ2Ut Pmd1ZXN0X3BhZ2UtPnZhZGRyLCAmbmV3LCBpbmRleCwgdHJ1ZSwgdmd0KTsKKworCQlpZiAob2xk LnZhbDY0ID09IG5ldy52YWw2NCkKKwkJCWNvbnRpbnVlOworCisJCXRyYWNlX29vc19zeW5jKHZn dC0+dm1faWQsIG9vc19wYWdlLT5pZCwKKwkJCQlvb3NfcGFnZS0+Z3Vlc3RfcGFnZSwgc3B0LT5n dWVzdF9wYWdlX3R5cGUsCisJCQkJbmV3LnZhbDY0LCBpbmRleCk7CisKKwkJaWYgKCFndHRfZW50 cnlfcDJtKHZndCwgJm5ldywgJm0pKQorCQkJcmV0dXJuIGZhbHNlOworCisJCW9wcy0+c2V0X2Vu dHJ5KG9vc19wYWdlLT5tZW0sICZuZXcsIGluZGV4LCBmYWxzZSwgTlVMTCk7CisJCXBwZ3R0X3Nl dF9zaGFkb3dfZW50cnkoc3B0LCAmbSwgaW5kZXgpOworCX0KKworCW9vc19wYWdlLT5ndWVzdF9w YWdlLT53cml0ZV9jbnQgPSAwOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGd2 dF9kZXRhY2hfb29zX3BhZ2Uoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgb29zX3BhZ2VfdCAqb29z X3BhZ2UpCit7CisJc3RydWN0IHBndF9kZXZpY2UgKnBkZXYgPSB2Z3QtPnBkZXY7CisJcHBndHRf c3B0X3QgKnNwdCA9IGd1ZXN0X3BhZ2VfdG9fcHBndHRfc3B0KG9vc19wYWdlLT5ndWVzdF9wYWdl KTsKKworCXRyYWNlX29vc19jaGFuZ2Uodmd0LT52bV9pZCwgImRldGFjaCIsIG9vc19wYWdlLT5p ZCwKKwkJCW9vc19wYWdlLT5ndWVzdF9wYWdlLCBzcHQtPmd1ZXN0X3BhZ2VfdHlwZSk7CisKKwlv b3NfcGFnZS0+Z3Vlc3RfcGFnZS0+d3JpdGVfY250ID0gMDsKKwlvb3NfcGFnZS0+Z3Vlc3RfcGFn ZS0+b29zX3BhZ2UgPSBOVUxMOworCW9vc19wYWdlLT5ndWVzdF9wYWdlID0gTlVMTDsKKworCWxp c3RfZGVsX2luaXQoJm9vc19wYWdlLT52bV9saXN0KTsKKwlsaXN0X21vdmVfdGFpbCgmb29zX3Bh Z2UtPmxpc3QsICZwZGV2LT5ndHQub29zX3BhZ2VfZnJlZV9saXN0X2hlYWQpOworCisJcGRldi0+ c3RhdC5vb3NfcGFnZV9jdXJfYXZhaWxfY250Kys7CisJcGRldi0+c3RhdC5vb3NfcGFnZV9kZXRh Y2hfY250Kys7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIG9vc19wYWdlX3QgKmd2dF9h dHRhY2hfb29zX3BhZ2Uoc3RydWN0IHZndF9kZXZpY2UgKnZndCwKKwkJb29zX3BhZ2VfdCAqb29z X3BhZ2UsIGd1ZXN0X3BhZ2VfdCAqZ3B0KQoreworCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0g dmd0LT5wZGV2OworCisJaWYgKCFoeXBlcnZpc29yX3JlYWRfdmEodmd0LCBncHQtPnZhZGRyLCBv b3NfcGFnZS0+bWVtLCBHVFRfUEFHRV9TSVpFLCAxKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlvb3Nf cGFnZS0+Z3Vlc3RfcGFnZSA9IGdwdDsKKwlncHQtPm9vc19wYWdlID0gb29zX3BhZ2U7CisKKwls aXN0X21vdmVfdGFpbCgmb29zX3BhZ2UtPmxpc3QsICZwZGV2LT5ndHQub29zX3BhZ2VfdXNlX2xp c3RfaGVhZCk7CisKKwlpZiAoLS1wZGV2LT5zdGF0Lm9vc19wYWdlX2N1cl9hdmFpbF9jbnQgPCBw ZGV2LT5zdGF0Lm9vc19wYWdlX21pbl9hdmFpbF9jbnQpCisJCXBkZXYtPnN0YXQub29zX3BhZ2Vf bWluX2F2YWlsX2NudCA9IHBkZXYtPnN0YXQub29zX3BhZ2VfY3VyX2F2YWlsX2NudDsKKworCXRy YWNlX29vc19jaGFuZ2Uodmd0LT52bV9pZCwgImF0dGFjaCIsIGdwdC0+b29zX3BhZ2UtPmlkLAor CQkJZ3B0LCBndWVzdF9wYWdlX3RvX3BwZ3R0X3NwdChncHQpLT5ndWVzdF9wYWdlX3R5cGUpOwor CisJcGRldi0+c3RhdC5vb3NfcGFnZV9hdHRhY2hfY250Kys7CisKKwlyZXR1cm4gb29zX3BhZ2U7 Cit9CisKK3N0YXRpYyBib29sIHBwZ3R0X3NldF9ndWVzdF9wYWdlX3N5bmMoc3RydWN0IHZndF9k ZXZpY2UgKnZndCwgZ3Vlc3RfcGFnZV90ICpncHQpCit7CisJaWYgKCFoeXBlcnZpc29yX3NldF93 cF9wYWdlcyh2Z3QsIGdwdCkpCisJCXJldHVybiBmYWxzZTsKKworCXRyYWNlX29vc19jaGFuZ2Uo dmd0LT52bV9pZCwgInNldCBwYWdlIHN5bmMiLCBncHQtPm9vc19wYWdlLT5pZCwKKwkJCWdwdCwg Z3Vlc3RfcGFnZV90b19wcGd0dF9zcHQoZ3B0KS0+Z3Vlc3RfcGFnZV90eXBlKTsKKworCWxpc3Rf ZGVsX2luaXQoJmdwdC0+b29zX3BhZ2UtPnZtX2xpc3QpOworCXJldHVybiB2Z3Rfc3luY19vb3Nf cGFnZSh2Z3QsIGdwdC0+b29zX3BhZ2UpOworfQorCitzdGF0aWMgYm9vbCBwcGd0dF9hbGxvY2F0 ZV9vb3NfcGFnZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCBndWVzdF9wYWdlX3QgKmdwdCkKK3sK KwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHZndC0+cGRldjsKKwlzdHJ1Y3QgZ3Z0X2d0dF9p bmZvICpndHQgPSAmcGRldi0+Z3R0OworCW9vc19wYWdlX3QgKm9vc19wYWdlID0gZ3B0LT5vb3Nf cGFnZTsKKworCS8qIG9vc19wYWdlIHNob3VsZCBiZSBOVUxMIGF0IHRoaXMgcG9pbnQgKi8KKwlB U1NFUlQoIW9vc19wYWdlKTsKKworCWlmIChsaXN0X2VtcHR5KCZndHQtPm9vc19wYWdlX2ZyZWVf bGlzdF9oZWFkKSkgeworCQlvb3NfcGFnZSA9IGNvbnRhaW5lcl9vZihndHQtPm9vc19wYWdlX3Vz ZV9saXN0X2hlYWQubmV4dCwgb29zX3BhZ2VfdCwgbGlzdCk7CisJCWlmICghcHBndHRfc2V0X2d1 ZXN0X3BhZ2Vfc3luYyh2Z3QsIG9vc19wYWdlLT5ndWVzdF9wYWdlKQorCQkJfHwgIWd2dF9kZXRh Y2hfb29zX3BhZ2Uodmd0LCBvb3NfcGFnZSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCUFTU0VSVCgh bGlzdF9lbXB0eSgmZ3R0LT5vb3NfcGFnZV9mcmVlX2xpc3RfaGVhZCkpOworCQlwZGV2LT5zdGF0 Lm9vc19wYWdlX3N0ZWFsX2NudCsrOworCX0gZWxzZQorCQlvb3NfcGFnZSA9IGNvbnRhaW5lcl9v ZihndHQtPm9vc19wYWdlX2ZyZWVfbGlzdF9oZWFkLm5leHQsIG9vc19wYWdlX3QsIGxpc3QpOwor CisJcmV0dXJuIGd2dF9hdHRhY2hfb29zX3BhZ2Uodmd0LCBvb3NfcGFnZSwgZ3B0KTsKK30KKwor c3RhdGljIGJvb2wgcHBndHRfc2V0X2d1ZXN0X3BhZ2Vfb29zKHN0cnVjdCB2Z3RfZGV2aWNlICp2 Z3QsIGd1ZXN0X3BhZ2VfdCAqZ3B0KQoreworCW9vc19wYWdlX3QgKm9vc19wYWdlID0gZ3B0LT5v b3NfcGFnZTsKKworCUFTU0VSVChvb3NfcGFnZSk7CisKKwl0cmFjZV9vb3NfY2hhbmdlKHZndC0+ dm1faWQsICJzZXQgcGFnZSBvdXQgb2Ygc3luYyIsIGdwdC0+b29zX3BhZ2UtPmlkLAorCQkJZ3B0 LCBndWVzdF9wYWdlX3RvX3BwZ3R0X3NwdChncHQpLT5ndWVzdF9wYWdlX3R5cGUpOworCisJbGlz dF9hZGRfdGFpbCgmb29zX3BhZ2UtPnZtX2xpc3QsICZ2Z3QtPmd0dC5vb3NfcGFnZV9saXN0X2hl YWQpOworCXJldHVybiBoeXBlcnZpc29yX3Vuc2V0X3dwX3BhZ2VzKHZndCwgZ3B0KTsKK30KKwor Ym9vbCBwcGd0dF9zeW5jX29vc19wYWdlcyhzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCXN0 cnVjdCBsaXN0X2hlYWQgKnBvcywgKm47CisJb29zX3BhZ2VfdCAqb29zX3BhZ2U7CisKKwlpZiAo IWd2dC5zcHRfb3V0X29mX3N5bmMpCisJCXJldHVybiB0cnVlOworCisJbGlzdF9mb3JfZWFjaF9z YWZlKHBvcywgbiwgJnZndC0+Z3R0Lm9vc19wYWdlX2xpc3RfaGVhZCkgeworCQlvb3NfcGFnZSA9 IGNvbnRhaW5lcl9vZihwb3MsIG9vc19wYWdlX3QsIHZtX2xpc3QpOworCQlpZiAoIXBwZ3R0X3Nl dF9ndWVzdF9wYWdlX3N5bmModmd0LCBvb3NfcGFnZS0+Z3Vlc3RfcGFnZSkpCisJCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBUaGUgaGVhcnQgb2YgUFBH VFQgc2hhZG93IHBhZ2UgdGFibGUuCisgKi8KK3N0YXRpYyBib29sIHBwZ3R0X2hhbmRsZV9ndWVz dF93cml0ZV9wYWdlX3RhYmxlKGd1ZXN0X3BhZ2VfdCAqZ3B0LCBndHRfZW50cnlfdCAqd2UsCisJ CXVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisJcHBndHRfc3B0X3QgKnNwdCA9IGd1ZXN0X3BhZ2Vf dG9fcHBndHRfc3B0KGdwdCk7CisJc3RydWN0IHZndF9kZXZpY2UgKnZndCA9IHNwdC0+dmd0Owor CXN0cnVjdCBndnRfZ3R0X3B0ZV9vcHMgKm9wcyA9IHZndC0+cGRldi0+Z3R0LnB0ZV9vcHM7CisJ Z3R0X2VudHJ5X3QgZ2U7CisKKwlpbnQgb2xkX3ByZXNlbnQsIG5ld19wcmVzZW50OworCisJcHBn dHRfZ2V0X2d1ZXN0X2VudHJ5KHNwdCwgJmdlLCBpbmRleCk7CisKKwlvbGRfcHJlc2VudCA9IG9w cy0+dGVzdF9wcmVzZW50KCZnZSk7CisJbmV3X3ByZXNlbnQgPSBvcHMtPnRlc3RfcHJlc2VudCh3 ZSk7CisKKwlwcGd0dF9zZXRfZ3Vlc3RfZW50cnkoc3B0LCB3ZSwgaW5kZXgpOworCisJaWYgKG9s ZF9wcmVzZW50ICYmIG5ld19wcmVzZW50KSB7CisJCWlmICghcHBndHRfaGFuZGxlX2d1ZXN0X2Vu dHJ5X3JlbW92YWwoZ3B0LCAmZ2UsIGluZGV4KQorCQl8fCAhcHBndHRfaGFuZGxlX2d1ZXN0X2Vu dHJ5X2FkZChncHQsIHdlLCBpbmRleCkpCisJCQlnb3RvIGZhaWw7CisJfSBlbHNlIGlmICghb2xk X3ByZXNlbnQgJiYgbmV3X3ByZXNlbnQpIHsKKwkJaWYgKCFwcGd0dF9oYW5kbGVfZ3Vlc3RfZW50 cnlfYWRkKGdwdCwgd2UsIGluZGV4KSkKKwkJCWdvdG8gZmFpbDsKKwl9IGVsc2UgaWYgKG9sZF9w cmVzZW50ICYmICFuZXdfcHJlc2VudCkgeworCQlpZiAoIXBwZ3R0X2hhbmRsZV9ndWVzdF9lbnRy eV9yZW1vdmFsKGdwdCwgJmdlLCBpbmRleCkpCisJCQlnb3RvIGZhaWw7CisJfQorCXJldHVybiB0 cnVlOworZmFpbDoKKwlndnRfZXJyKCJmYWlsOiBzaGFkb3cgcGFnZSAlcCBndWVzdCBlbnRyeSAw eCVsbHggdHlwZSAlZC4iLAorCQkJc3B0LCB3ZS0+dmFsNjQsIHdlLT50eXBlKTsKKwlyZXR1cm4g ZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5fZG9fb3V0X29mX3N5bmMoZ3Vlc3Rf cGFnZV90ICpncHQpCit7CisJcmV0dXJuIGd2dC5zcHRfb3V0X29mX3N5bmMKKwkJJiYgZ3R0X3R5 cGVfaXNfcHRlX3B0KGd1ZXN0X3BhZ2VfdG9fcHBndHRfc3B0KGdwdCktPmd1ZXN0X3BhZ2VfdHlw ZSkKKwkJJiYgZ3B0LT53cml0ZV9jbnQgPj0gMjsKK30KKworYm9vbCBwcGd0dF9jaGVja19wYXJ0 aWFsX2FjY2VzcyhzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCXN0cnVjdCBndnRfdmd0dF9p bmZvICpndHQgPSAmdmd0LT5ndHQ7CisKKwlpZiAoZ3R0LT5sYXN0X3BhcnRpYWxfcHBndHRfYWNj ZXNzX2luZGV4ID09IC0xKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICghZ3R0LT53YXJuX3BhcnRp YWxfcHBndHRfYWNjZXNzX29uY2UpIHsKKwkJZ3Z0X3dhcm4oIkluY29tcGxldGUgUFBHVFQgcGFn ZSB0YWJsZSBhY2Nlc3Mgc2VxdWVuY2UuIik7CisJCWd0dC0+d2Fybl9wYXJ0aWFsX3BwZ3R0X2Fj Y2Vzc19vbmNlID0gdHJ1ZTsKKwl9CisKKwlpZiAoIXBwZ3R0X2hhbmRsZV9ndWVzdF93cml0ZV9w YWdlX3RhYmxlKAorCQkJZ3R0LT5sYXN0X3BhcnRpYWxfcHBndHRfYWNjZXNzX2dwdCwKKwkJCSZn dHQtPmxhc3RfcGFydGlhbF9wcGd0dF9hY2Nlc3NfZW50cnksCisJCQlndHQtPmxhc3RfcGFydGlh bF9wcGd0dF9hY2Nlc3NfaW5kZXgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlndHQtPmxhc3RfcGFy dGlhbF9wcGd0dF9hY2Nlc3NfaW5kZXggPSAtMTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IGJvb2wgcHBndHRfaGFuZGxlX2d1ZXN0X3dyaXRlX3BhZ2VfdGFibGVfYnl0ZXModm9pZCAqZ3As CisJCXVpbnQ2NF90IHBhLCB2b2lkICpwX2RhdGEsIGludCBieXRlcykKK3sKKwlndWVzdF9wYWdl X3QgKmdwdCA9IChndWVzdF9wYWdlX3QgKilncDsKKwlwcGd0dF9zcHRfdCAqc3B0ID0gZ3Vlc3Rf cGFnZV90b19wcGd0dF9zcHQoZ3B0KTsKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0ID0gc3B0LT52 Z3Q7CisJc3RydWN0IGd2dF9ndHRfcHRlX29wcyAqb3BzID0gdmd0LT5wZGV2LT5ndHQucHRlX29w czsKKwlzdHJ1Y3QgZ3Z0X2RldmljZV9pbmZvICppbmZvID0gJnZndC0+cGRldi0+ZGV2aWNlX2lu Zm87CisJc3RydWN0IGd2dF92Z3R0X2luZm8gKmd0dCA9ICZ2Z3QtPmd0dDsKKwlndHRfZW50cnlf dCB3ZSwgc2U7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKworCWJvb2wgcGFydGlhbF9hY2Nlc3Mg PSAoYnl0ZXMgIT0gaW5mby0+Z3R0X2VudHJ5X3NpemUpOworCWJvb2wgaGkgPSAocGFydGlhbF9h Y2Nlc3MgJiYgKHBhICYgKGluZm8tPmd0dF9lbnRyeV9zaXplIC0gMSkpKTsKKworCWluZGV4ID0g KHBhICYgKFBBR0VfU0laRSAtIDEpKSA+PiBpbmZvLT5ndHRfZW50cnlfc2l6ZV9zaGlmdDsKKwor CXBwZ3R0X2dldF9ndWVzdF9lbnRyeShzcHQsICZ3ZSwgaW5kZXgpOworCW1lbWNweSgmd2UudmFs NjQgKyAocGEgJiAoaW5mby0+Z3R0X2VudHJ5X3NpemUgLSAxKSksIHBfZGF0YSwgYnl0ZXMpOwor CisJaWYgKHBhcnRpYWxfYWNjZXNzICYmICFoaSkgeworCQl0cmFjZV9ncHRfY2hhbmdlKHZndC0+ dm1faWQsICJwYXJ0aWFsIGFjY2VzcyAtIExPVyIsCisJCQkJTlVMTCwgd2UudHlwZSwgKih1MzIg KikocF9kYXRhKSwgaW5kZXgpOworCisJCXBwZ3R0X2NoZWNrX3BhcnRpYWxfYWNjZXNzKHZndCk7 CisKKwkJcHBndHRfc2V0X2d1ZXN0X2VudHJ5KHNwdCwgJndlLCBpbmRleCk7CisJCXBwZ3R0X2dl dF9zaGFkb3dfZW50cnkoc3B0LCAmc2UsIGluZGV4KTsKKworCQlpZiAoIW9wcy0+dGVzdF9wcmVz ZW50KCZzZSkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlpZiAoZ3R0X3R5cGVfaXNfcHQoZ2V0X25l eHRfcHRfdHlwZShzZS50eXBlKSkpCisJCQlpZiAoIXBwZ3R0X2ludmFsaWRhdGVfc2hhZG93X3Bh Z2VfYnlfc2hhZG93X2VudHJ5KHZndCwgJnNlKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJc2Uu dmFsNjQgPSAwOworCQlwcGd0dF9zZXRfc2hhZG93X2VudHJ5KHNwdCwgJnNlLCBpbmRleCk7CisK KwkJZ3R0LT5sYXN0X3BhcnRpYWxfcHBndHRfYWNjZXNzX2luZGV4ID0gaW5kZXg7CisJCWd0dC0+ bGFzdF9wYXJ0aWFsX3BwZ3R0X2FjY2Vzc19ncHQgPSBncHQ7CisJCWd0dC0+bGFzdF9wYXJ0aWFs X3BwZ3R0X2FjY2Vzc19lbnRyeSA9IHdlOworCisJCXJldHVybiB0cnVlOworCX0gZWxzZQorCQln dHQtPmxhc3RfcGFydGlhbF9wcGd0dF9hY2Nlc3NfaW5kZXggPSAtMTsKKworCWlmIChoaSkKKwkJ dHJhY2VfZ3B0X2NoYW5nZSh2Z3QtPnZtX2lkLCAicGFydGlhbCBhY2Nlc3MgLSBISUdIIiwKKwkJ CQlOVUxMLCB3ZS50eXBlLCAqKHUzMiAqKShwX2RhdGEpLCBpbmRleCk7CisKKwlvcHMtPnRlc3Rf cHNlKCZ3ZSk7CisKKwlncHQtPndyaXRlX2NudCsrOworCisJaWYgKCFwcGd0dF9oYW5kbGVfZ3Vl c3Rfd3JpdGVfcGFnZV90YWJsZShncHQsICZ3ZSwgaW5kZXgpKQorCQlyZXR1cm4gZmFsc2U7CisK KwlpZiAoZ3Z0LnNwdF9vdXRfb2Zfc3luYykgeworCQlpZiAoZ3B0LT5vb3NfcGFnZSkgeworCQkJ LyogMS4gb25seSBHVFRfUFRFIHR5cGUgaGFzIG9vc19wYWdlIGFzc29jYWl0ZWQKKwkJCSAqIDIu IHVwZGF0ZSBvb3NfcGFnZSBhY2NvcmRpbmcgdG8gd3AgZ3Vlc3QgcGFnZSBjaGFuZ2UKKwkJCSAq LworCQkJb3BzLT5zZXRfZW50cnkoZ3B0LT5vb3NfcGFnZS0+bWVtLCAmd2UsIGluZGV4LCBmYWxz ZSwgTlVMTCk7CisJCX0KKworCQlpZiAoY2FuX2RvX291dF9vZl9zeW5jKGdwdCkpIHsKKwkJCWlm ICghZ3B0LT5vb3NfcGFnZSkKKwkJCQlwcGd0dF9hbGxvY2F0ZV9vb3NfcGFnZSh2Z3QsIGdwdCk7 CisKKwkJCWlmICghcHBndHRfc2V0X2d1ZXN0X3BhZ2Vfb29zKHZndCwgZ3B0KSkgeworCQkJCS8q IHNob3VsZCBub3QgcmV0dXJuIGZhbHNlIHNpbmNlIHdlIGNhbiBoYW5kbGUgaXQqLworCQkJCXBw Z3R0X3NldF9ndWVzdF9wYWdlX3N5bmModmd0LCBncHQpOworCQkJfQorCQl9CisKKwl9CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBwcGd0dF9oYW5kbGVfZ3Vlc3Rfd3JpdGVfcm9vdF9wb2lu dGVyKHN0cnVjdCBndnRfbW0gKm1tLAorCQlndHRfZW50cnlfdCAqd2UsIHVuc2lnbmVkIGxvbmcg aW5kZXgpCit7CisJc3RydWN0IHZndF9kZXZpY2UgKnZndCA9IG1tLT52Z3Q7CisJc3RydWN0IGd2 dF9ndHRfcHRlX29wcyAqb3BzID0gdmd0LT5wZGV2LT5ndHQucHRlX29wczsKKwlwcGd0dF9zcHRf dCAqc3B0ID0gTlVMTDsKKwlndHRfZW50cnlfdCBlOworCisJaWYgKG1tLT50eXBlICE9IEdWVF9N TV9QUEdUVCB8fCAhbW0tPnNoYWRvd2VkKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0cmFjZV9ncHRf Y2hhbmdlKHZndC0+dm1faWQsIF9fZnVuY19fLCBOVUxMLAorCQkJd2UtPnR5cGUsIHdlLT52YWw2 NCwgaW5kZXgpOworCisJcHBndHRfZ2V0X2d1ZXN0X3Jvb3RfZW50cnkobW0sICZlLCBpbmRleCk7 CisKKwlpZiAob3BzLT50ZXN0X3ByZXNlbnQoJmUpKSB7CisJCXBwZ3R0X2dldF9zaGFkb3dfcm9v dF9lbnRyeShtbSwgJmUsIGluZGV4KTsKKworCQl0cmFjZV9ncHRfY2hhbmdlKHZndC0+dm1faWQs ICJkZXN0cm95IG9sZCByb290IHBvaW50ZXIiLAorCQkJCXNwdCwgZS50eXBlLCBlLnZhbDY0LCBp bmRleCk7CisKKwkJaWYgKGd0dF90eXBlX2lzX3B0KGdldF9uZXh0X3B0X3R5cGUoZS50eXBlKSkp IHsKKwkJCWlmICghcHBndHRfaW52YWxpZGF0ZV9zaGFkb3dfcGFnZV9ieV9zaGFkb3dfZW50cnko dmd0LCAmZSkpCisJCQkJZ290byBmYWlsOworCQl9IGVsc2UgeworCQkJZ3Z0X2VycigiR1ZUIGRv ZXNuJ3Qgc3VwcG9ydCBwc2UgYml0IG5vdy4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQllLnZh bDY0ID0gMDsKKwkJcHBndHRfc2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCAmZSwgaW5kZXgpOwor CX0KKworCWlmIChvcHMtPnRlc3RfcHJlc2VudCh3ZSkpIHsKKwkJaWYgKGd0dF90eXBlX2lzX3B0 KGdldF9uZXh0X3B0X3R5cGUod2UtPnR5cGUpKSkgeworCQkJc3B0ID0gcHBndHRfcG9wdWxhdGVf c2hhZG93X3BhZ2VfYnlfZ3Vlc3RfZW50cnkodmd0LCB3ZSk7CisJCQlpZiAoIXNwdCkgeworCQkJ CWd2dF9lcnIoImZhaWwgdG8gcG9wdWxhdGUgcm9vdCBwb2ludGVyLiIpOworCQkJCWdvdG8gZmFp bDsKKwkJCX0KKwkJCXBwZ3R0X2dlbmVyYXRlX3NoYWRvd19lbnRyeSgmZSwgc3B0LCB3ZSk7CisJ CQlwcGd0dF9zZXRfc2hhZG93X3Jvb3RfZW50cnkobW0sICZlLCBpbmRleCk7CisJCX0gZWxzZSB7 CisJCQlndnRfZXJyKCJHVlQgZG9lc24ndCBzdXBwb3J0IHBzZSBiaXQgbm93LiIpOworCQkJZ290 byBmYWlsOworCQl9CisJCXRyYWNlX2dwdF9jaGFuZ2Uodmd0LT52bV9pZCwgInBvcHVsYXRlIHJv b3QgcG9pbnRlciIsCisJCQkJc3B0LCBlLnR5cGUsIGUudmFsNjQsIGluZGV4KTsKKwl9CisJcmV0 dXJuIHRydWU7CitmYWlsOgorCWd2dF9lcnIoImZhaWw6IHNoYWRvdyBwYWdlICVwIGd1ZXN0IGVu dHJ5IDB4JWxseCB0eXBlICVkLiIsCisJCQlzcHQsIHdlLT52YWw2NCwgd2UtPnR5cGUpOworCXJl dHVybiBmYWxzZTsKK30KKworLyoKKyAqIG1tIHBhZ2UgdGFibGUgYWxsb2NhdGlvbiBwb2xpY3kg Zm9yIHByZS1iZHc6CisgKiAgLSBmb3IgZ2d0dCwgYSB2aXJ0dWFsIHBhZ2UgdGFibGUgd2lsbCBi ZSBhbGxvY2F0ZWQuCisgKiAgLSBmb3IgcHBndHQsIHRoZSB2aXJ0dWFsIHBhZ2UgdGFibGUocm9v dCBlbnRyeSkgd2lsbCB1c2UgYSBwYXJ0IG9mCisgKgl2aXJ0dWFsIHBhZ2UgdGFibGUgZnJvbSBn Z3R0LgorICovCitib29sIGdlbjdfbW1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3QgZ3Z0X21tICpt bSkKK3sKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0ID0gbW0tPnZndDsKKwlzdHJ1Y3QgcGd0X2Rl dmljZSAqcGRldiA9IHZndC0+cGRldjsKKwlzdHJ1Y3QgZ3Z0X3ZndHRfaW5mbyAqZ3R0ID0gJnZn dC0+Z3R0OworCXN0cnVjdCBndnRfZGV2aWNlX2luZm8gKmluZm8gPSAmcGRldi0+ZGV2aWNlX2lu Zm87CisJdm9pZCAqbWVtOworCisJaWYgKG1tLT50eXBlID09IEdWVF9NTV9QUEdUVCkgeworCQlz dHJ1Y3QgZ3Z0X21tICpnZ3R0X21tID0gZ3R0LT5nZ3R0X21tOworCQlpZiAoIWdndHRfbW0pIHsK KwkJCWd2dF9lcnIoImdndHQgbW0gaGFzbid0IGJlZW4gY3JlYXRlZC4iKTsKKwkJCXJldHVybiBm YWxzZTsKKwkJfQorCQltbS0+cGFnZV90YWJsZV9lbnRyeV9jbnQgPSA1MTI7CisJCW1tLT5wYWdl X3RhYmxlX2VudHJ5X3NpemUgPSBtbS0+cGFnZV90YWJsZV9lbnRyeV9jbnQgKgorCQkJaW5mby0+ Z3R0X2VudHJ5X3NpemU7CisJCW1tLT52aXJ0dWFsX3BhZ2VfdGFibGUgPSBnZ3R0X21tLT52aXJ0 dWFsX3BhZ2VfdGFibGUgKworCQkJKG1tLT5wZGVfYmFzZV9pbmRleCA8PCBpbmZvLT5ndHRfZW50 cnlfc2l6ZV9zaGlmdCk7CisJCS8qIHNoYWRvdyBwYWdlIHRhYmxlIHJlc2lkZXMgaW4gdGhlIGh3 IG1taW8gZW50cmllcy4gKi8KKwl9IGVsc2UgaWYgKG1tLT50eXBlID09IEdWVF9NTV9HR1RUKSB7 CisJCW1tLT5wYWdlX3RhYmxlX2VudHJ5X2NudCA9IChnbV9zeihwZGV2KSA+PiBHVFRfUEFHRV9T SElGVCk7CisJCW1tLT5wYWdlX3RhYmxlX2VudHJ5X3NpemUgPSBtbS0+cGFnZV90YWJsZV9lbnRy eV9jbnQgKgorCQkJaW5mby0+Z3R0X2VudHJ5X3NpemU7CisJCW1lbSA9IHZ6YWxsb2MobW0tPnBh Z2VfdGFibGVfZW50cnlfc2l6ZSk7CisJCWlmICghbWVtKSB7CisJCQlndnRfZXJyKCJmYWlsIHRv IGFsbG9jYXRlIG1lbW9yeS4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQltbS0+dmlydHVh bF9wYWdlX3RhYmxlID0gbWVtOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBnZW43X21t X2ZyZWVfcGFnZV90YWJsZShzdHJ1Y3QgZ3Z0X21tICptbSkKK3sKKwlpZiAobW0tPnR5cGUgPT0g R1ZUX01NX0dHVFQpIHsKKwkJaWYgKG1tLT52aXJ0dWFsX3BhZ2VfdGFibGUpCisJCQl2ZnJlZSht bS0+dmlydHVhbF9wYWdlX3RhYmxlKTsKKwl9CisJbW0tPnZpcnR1YWxfcGFnZV90YWJsZSA9IG1t LT5zaGFkb3dfcGFnZV90YWJsZSA9IE5VTEw7Cit9CisKKy8qCisgKiBtbSBwYWdlIHRhYmxlIGFs bG9jYXRpb24gcG9saWN5IGZvciBiZHcrCisgKiAgLSBmb3IgZ2d0dCwgb25seSB2aXJ0dWFsIHBh Z2UgdGFibGUgd2lsbCBiZSBhbGxvY2F0ZWQuCisgKiAgLSBmb3IgcHBndHQsIGRlZGljYXRlZCB2 aXJ0dWFsL3NoYWRvdyBwYWdlIHRhYmxlIHdpbGwgYmUgYWxsb2NhdGVkLgorICovCitib29sIGdl bjhfbW1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3QgZ3Z0X21tICptbSkKK3sKKwlzdHJ1Y3Qgdmd0 X2RldmljZSAqdmd0ID0gbW0tPnZndDsKKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHZndC0+ cGRldjsKKwlzdHJ1Y3QgZ3Z0X2RldmljZV9pbmZvICppbmZvID0gJnBkZXYtPmRldmljZV9pbmZv OworCXZvaWQgKm1lbTsKKworCWlmIChtbS0+dHlwZSA9PSBHVlRfTU1fUFBHVFQpIHsKKwkJbW0t PnBhZ2VfdGFibGVfZW50cnlfY250ID0gNDsKKwkJbW0tPnBhZ2VfdGFibGVfZW50cnlfc2l6ZSA9 IG1tLT5wYWdlX3RhYmxlX2VudHJ5X2NudCAqCisJCQlpbmZvLT5ndHRfZW50cnlfc2l6ZTsKKwkJ bWVtID0ga3phbGxvYyhtbS0+aGFzX3NoYWRvd19wYWdlX3RhYmxlID8KKwkJCW1tLT5wYWdlX3Rh YmxlX2VudHJ5X3NpemUgKiAyIDogbW0tPnBhZ2VfdGFibGVfZW50cnlfc2l6ZSwKKwkJCUdGUF9B VE9NSUMpOworCQlpZiAoIW1lbSkgeworCQkJZ3Z0X2VycigiZmFpbCB0byBhbGxvY2F0ZSBtZW1v cnkuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJbW0tPnZpcnR1YWxfcGFnZV90YWJsZSA9 IG1lbTsKKwkJaWYgKCFtbS0+aGFzX3NoYWRvd19wYWdlX3RhYmxlKQorCQkJcmV0dXJuIHRydWU7 CisJCW1tLT5zaGFkb3dfcGFnZV90YWJsZSA9IG1lbSArIG1tLT5wYWdlX3RhYmxlX2VudHJ5X3Np emU7CisJfSBlbHNlIGlmIChtbS0+dHlwZSA9PSBHVlRfTU1fR0dUVCkgeworCQltbS0+cGFnZV90 YWJsZV9lbnRyeV9jbnQgPSAoZ21fc3oocGRldikgPj4gR1RUX1BBR0VfU0hJRlQpOworCQltbS0+ cGFnZV90YWJsZV9lbnRyeV9zaXplID0gbW0tPnBhZ2VfdGFibGVfZW50cnlfY250ICoKKwkJCWlu Zm8tPmd0dF9lbnRyeV9zaXplOworCQltZW0gPSB2emFsbG9jKG1tLT5wYWdlX3RhYmxlX2VudHJ5 X3NpemUpOworCQlpZiAoIW1lbSkgeworCQkJZ3Z0X2VycigiZmFpbCB0byBhbGxvY2F0ZSBtZW1v cnkuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJbW0tPnZpcnR1YWxfcGFnZV90YWJsZSA9 IG1lbTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZ2VuOF9tbV9mcmVlX3BhZ2VfdGFi bGUoc3RydWN0IGd2dF9tbSAqbW0pCit7CisJaWYgKG1tLT50eXBlID09IEdWVF9NTV9QUEdUVCkg eworCQlpZiAobW0tPnZpcnR1YWxfcGFnZV90YWJsZSkKKwkJCWtmcmVlKG1tLT52aXJ0dWFsX3Bh Z2VfdGFibGUpOworCX0gZWxzZSBpZiAobW0tPnR5cGUgPT0gR1ZUX01NX0dHVFQpIHsKKwkJaWYg KG1tLT52aXJ0dWFsX3BhZ2VfdGFibGUpCisJCQl2ZnJlZShtbS0+dmlydHVhbF9wYWdlX3RhYmxl KTsKKwl9CisJbW0tPnZpcnR1YWxfcGFnZV90YWJsZSA9IG1tLT5zaGFkb3dfcGFnZV90YWJsZSA9 IE5VTEw7Cit9CisKK3ZvaWQgZ3Z0X2Rlc3Ryb3lfbW0oc3RydWN0IGd2dF9tbSAqbW0pCit7CisJ c3RydWN0IHZndF9kZXZpY2UgKnZndCA9IG1tLT52Z3Q7CisJc3RydWN0IHBndF9kZXZpY2UgKnBk ZXYgPSB2Z3QtPnBkZXY7CisJc3RydWN0IGd2dF9ndHRfaW5mbyAqZ3R0ID0gJnBkZXYtPmd0dDsK KwlzdHJ1Y3QgZ3Z0X2d0dF9wdGVfb3BzICpvcHMgPSBndHQtPnB0ZV9vcHM7CisJZ3R0X2VudHJ5 X3Qgc2U7CisJaW50IGk7CisKKwlpZiAoIW1tLT5pbml0aWFsaXplZCkKKwkJZ290byBvdXQ7CisK KwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJm1tLT5yZWZjb3VudCkgPiAwKQorCQlyZXR1cm47CisK KwlsaXN0X2RlbCgmbW0tPmxpc3QpOworCisJaWYgKG1tLT5oYXNfc2hhZG93X3BhZ2VfdGFibGUg JiYgbW0tPnNoYWRvd2VkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBtbS0+cGFnZV90YWJsZV9lbnRy eV9jbnQ7IGkrKykgeworCQkJcHBndHRfZ2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCAmc2UsIGkp OworCQkJaWYgKCFvcHMtPnRlc3RfcHJlc2VudCgmc2UpKQorCQkJCWNvbnRpbnVlOworCQkJcHBn dHRfaW52YWxpZGF0ZV9zaGFkb3dfcGFnZV9ieV9zaGFkb3dfZW50cnkodmd0LCAmc2UpOworCQkJ c2UudmFsNjQgPSAwOworCQkJcHBndHRfc2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCAmc2UsIGkp OworCisJCQl0cmFjZV9ncHRfY2hhbmdlKHZndC0+dm1faWQsICJkZXN0cm95IHJvb3QgcG9pbnRl ciIsCisJCQkJCU5VTEwsIHNlLnR5cGUsIHNlLnZhbDY0LCBpKTsKKwkJfQorCX0KKwlndHQtPm1t X2ZyZWVfcGFnZV90YWJsZShtbSk7CitvdXQ6CisJa2ZyZWUobW0pOworfQorCitzdHJ1Y3QgZ3Z0 X21tICpndnRfY3JlYXRlX21tKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCisJCWd2dF9tbV90eXBl X3QgbW1fdHlwZSwgZ3R0X3R5cGVfdCBwYWdlX3RhYmxlX2VudHJ5X3R5cGUsCisJCXZvaWQgKnZp cnR1YWxfcGFnZV90YWJsZSwgaW50IHBhZ2VfdGFibGVfbGV2ZWwsCisJCXUzMiBwZGVfYmFzZV9p bmRleCkKK3sKKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHZndC0+cGRldjsKKwlzdHJ1Y3Qg Z3Z0X2d0dF9pbmZvICpndHQgPSAmcGRldi0+Z3R0OworCXN0cnVjdCBndnRfZ3R0X3B0ZV9vcHMg Km9wcyA9IGd0dC0+cHRlX29wczsKKwlzdHJ1Y3QgZ3Z0X21tICptbTsKKwlwcGd0dF9zcHRfdCAq c3B0OworCWd0dF9lbnRyeV90IGdlLCBzZTsKKwlpbnQgaTsKKworCW1tID0ga3phbGxvYyhzaXpl b2YoKm1tKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFtbSkgeworCQlndnRfZXJyKCJmYWlsIHRvIGFs bG9jYXRlIG1lbW9yeSBmb3IgbW0uIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwltbS0+dHlwZSA9 IG1tX3R5cGU7CisJbW0tPnBhZ2VfdGFibGVfZW50cnlfdHlwZSA9IHBhZ2VfdGFibGVfZW50cnlf dHlwZTsKKwltbS0+cGFnZV90YWJsZV9sZXZlbCA9IHBhZ2VfdGFibGVfbGV2ZWw7CisJbW0tPnBk ZV9iYXNlX2luZGV4ID0gcGRlX2Jhc2VfaW5kZXg7CisKKwltbS0+dmd0ID0gdmd0OworCW1tLT5o YXNfc2hhZG93X3BhZ2VfdGFibGUgPSAodmd0LT52bV9pZCAhPSAwICYmIG1tX3R5cGUgPT0gR1ZU X01NX1BQR1RUKTsKKworCWF0b21pY19zZXQoJm1tLT5yZWZjb3VudCwgMSk7CisJSU5JVF9MSVNU X0hFQUQoJm1tLT5saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZtbS0+bGlzdCwgJnZndC0+Z3R0Lm1t X2xpc3RfaGVhZCk7CisKKwlpZiAoIWd0dC0+bW1fYWxsb2NfcGFnZV90YWJsZShtbSkpIHsKKwkJ Z3Z0X2VycigiZmFpbCB0byBhbGxvY2F0ZSBwYWdlIHRhYmxlIGZvciBtbS4iKTsKKwkJZ290byBm YWlsOworCX0KKworCW1tLT5pbml0aWFsaXplZCA9IHRydWU7CisKKwlpZiAodmlydHVhbF9wYWdl X3RhYmxlKQorCQltZW1jcHkobW0tPnZpcnR1YWxfcGFnZV90YWJsZSwgdmlydHVhbF9wYWdlX3Rh YmxlLAorCQkJCW1tLT5wYWdlX3RhYmxlX2VudHJ5X3NpemUpOworCisJaWYgKG1tLT5oYXNfc2hh ZG93X3BhZ2VfdGFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1tLT5wYWdlX3RhYmxlX2VudHJ5 X2NudDsgaSsrKSB7CisJCQlwcGd0dF9nZXRfZ3Vlc3Rfcm9vdF9lbnRyeShtbSwgJmdlLCBpKTsK KwkJCWlmICghb3BzLT50ZXN0X3ByZXNlbnQoJmdlKSkKKwkJCQljb250aW51ZTsKKworCQkJdHJh Y2VfZ3B0X2NoYW5nZSh2Z3QtPnZtX2lkLCBfX2Z1bmNfXywgTlVMTCwKKwkJCQkJZ2UudHlwZSwg Z2UudmFsNjQsIGkpOworCisJCQlzcHQgPSBwcGd0dF9wb3B1bGF0ZV9zaGFkb3dfcGFnZV9ieV9n dWVzdF9lbnRyeSh2Z3QsICZnZSk7CisJCQlpZiAoIXNwdCkgeworCQkJCWd2dF9lcnIoImZhaWwg dG8gcG9wdWxhdGUgZ3Vlc3Qgcm9vdCBwb2ludGVyLiIpOworCQkJCWdvdG8gZmFpbDsKKwkJCX0K KwkJCXBwZ3R0X2dlbmVyYXRlX3NoYWRvd19lbnRyeSgmc2UsIHNwdCwgJmdlKTsKKwkJCXBwZ3R0 X3NldF9zaGFkb3dfcm9vdF9lbnRyeShtbSwgJnNlLCBpKTsKKworCQkJdHJhY2VfZ3B0X2NoYW5n ZSh2Z3QtPnZtX2lkLCAicG9wdWxhdGUgcm9vdCBwb2ludGVyIiwKKwkJCQkJTlVMTCwgc2UudHlw ZSwgc2UudmFsNjQsIGkpOworCQl9CisJCW1tLT5zaGFkb3dlZCA9IHRydWU7CisJfQorCXJldHVy biBtbTsKK2ZhaWw6CisJZ3Z0X2VycigiZmFpbCB0byBjcmVhdGUgbW0uIik7CisJaWYgKG1tKQor CQlndnRfZGVzdHJveV9tbShtbSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHTUEgdHJh bnNsYXRpb24gQVBJcy4KKyAqLworc3RhdGljIGlubGluZSBib29sIHBwZ3R0X2dldF9uZXh0X2xl dmVsX2VudHJ5KHN0cnVjdCBndnRfbW0gKm1tLAorCQlndHRfZW50cnlfdCAqZSwgdW5zaWduZWQg bG9uZyBpbmRleCwgYm9vbCBndWVzdCkKK3sKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0ID0gbW0t PnZndDsKKwlzdHJ1Y3QgZ3Z0X2d0dF9wdGVfb3BzICpvcHMgPSB2Z3QtPnBkZXYtPmd0dC5wdGVf b3BzOworCXBwZ3R0X3NwdF90ICpzOworCXZvaWQgKnB0OworCisJaWYgKG1tLT5oYXNfc2hhZG93 X3BhZ2VfdGFibGUpIHsKKwkJaWYgKCEocyA9IHBwZ3R0X2ZpbmRfc2hhZG93X3BhZ2Uodmd0LCBv cHMtPmdldF9wZm4oZSkpKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFndWVzdCkKKwkJCXBw Z3R0X2dldF9zaGFkb3dfZW50cnkocywgZSwgaW5kZXgpOworCQllbHNlCisJCQlwcGd0dF9nZXRf Z3Vlc3RfZW50cnkocywgZSwgaW5kZXgpOworCX0gZWxzZSB7CisJCXB0ID0gaHlwZXJ2aXNvcl9t Zm5fdG9fdmlydChvcHMtPmdldF9wZm4oZSkpOworCQlvcHMtPmdldF9lbnRyeShwdCwgZSwgaW5k ZXgsIGZhbHNlLCBOVUxMKTsKKwkJZS0+dHlwZSA9IGdldF9lbnRyeV90eXBlKGdldF9uZXh0X3B0 X3R5cGUoZS0+dHlwZSkpOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB1 bnNpZ25lZCBsb25nIGd2dF9nbWFfdG9fZ3BhKHN0cnVjdCBndnRfbW0gKm1tLCB1bnNpZ25lZCBs b25nIGdtYSkKK3sKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0ID0gbW0tPnZndDsKKwlzdHJ1Y3Qg cGd0X2RldmljZSAqcGRldiA9IHZndC0+cGRldjsKKwlzdHJ1Y3QgZ3Z0X2d0dF9wdGVfb3BzICpw dGVfb3BzID0gcGRldi0+Z3R0LnB0ZV9vcHM7CisJc3RydWN0IGd2dF9ndHRfZ21hX29wcyAqZ21h X29wcyA9IHBkZXYtPmd0dC5nbWFfb3BzOworCisJdW5zaWduZWQgbG9uZyBncGEgPSBJTlZBTElE X0FERFI7CisJdW5zaWduZWQgbG9uZyBnbWFfaW5kZXhbNF07CisJZ3R0X2VudHJ5X3QgZTsKKwlp bnQgaSwgaW5kZXg7CisKKwlpZiAobW0tPnR5cGUgIT0gR1ZUX01NX0dHVFQgJiYgbW0tPnR5cGUg IT0gR1ZUX01NX1BQR1RUKQorCQlyZXR1cm4gSU5WQUxJRF9BRERSOworCisJaWYgKG1tLT50eXBl ID09IEdWVF9NTV9HR1RUKSB7CisJCWlmICghZ19nbV9pc192YWxpZCh2Z3QsIGdtYSkpCisJCQln b3RvIGVycjsKKworCQlnZ3R0X2dldF9ndWVzdF9lbnRyeShtbSwgJmUsIGdtYV9vcHMtPmdtYV90 b19nZ3R0X3B0ZV9pbmRleChnbWEpKTsKKwkJZ3BhID0gKHB0ZV9vcHMtPmdldF9wZm4oJmUpIDw8 IEdUVF9QQUdFX1NISUZUKSArIChnbWEgJiB+R1RUX1BBR0VfTUFTSyk7CisKKwkJdHJhY2VfZ21h X3RyYW5zbGF0ZSh2Z3QtPnZtX2lkLCAiZ2d0dCIsIDAsIDAsIGdtYSwgZ3BhKTsKKworCQlyZXR1 cm4gZ3BhOworCX0KKworCXN3aXRjaCAobW0tPnBhZ2VfdGFibGVfbGV2ZWwpIHsKKwkJY2FzZSA0 OgorCQkJcHBndHRfZ2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCAmZSwgMCk7CisJCQlnbWFfaW5k ZXhbMF0gPSBnbWFfb3BzLT5nbWFfdG9fcG1sNF9pbmRleChnbWEpOworCQkJZ21hX2luZGV4WzFd ID0gZ21hX29wcy0+Z21hX3RvX2w0X3BkcF9pbmRleChnbWEpOworCQkJZ21hX2luZGV4WzJdID0g Z21hX29wcy0+Z21hX3RvX3BkZV9pbmRleChnbWEpOworCQkJZ21hX2luZGV4WzNdID0gZ21hX29w cy0+Z21hX3RvX3B0ZV9pbmRleChnbWEpOworCQkJaW5kZXggPSA0OworCQkJYnJlYWs7CisJCWNh c2UgMzoKKwkJCXBwZ3R0X2dldF9zaGFkb3dfcm9vdF9lbnRyeShtbSwgJmUsIGdtYV9vcHMtPmdt YV90b19sM19wZHBfaW5kZXgoZ21hKSk7CisJCQlnbWFfaW5kZXhbMF0gPSBnbWFfb3BzLT5nbWFf dG9fcGRlX2luZGV4KGdtYSk7CisJCQlnbWFfaW5kZXhbMV0gPSBnbWFfb3BzLT5nbWFfdG9fcHRl X2luZGV4KGdtYSk7CisJCQlpbmRleCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcHBn dHRfZ2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCAmZSwgZ21hX29wcy0+Z21hX3RvX3BkZV9pbmRl eChnbWEpKTsKKwkJCWdtYV9pbmRleFswXSA9IGdtYV9vcHMtPmdtYV90b19wdGVfaW5kZXgoZ21h KTsKKwkJCWluZGV4ID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJfQor CS8qIHdhbGsgaW50byB0aGUgbGFzdCBsZXZlbCBzaGFkb3cgcGFnZSB0YWJsZSBhbmQgZ2V0IGdw YSBmcm9tIGd1ZXN0IGVudHJ5ICovCisJZm9yIChpID0gMDsgaSA8IGluZGV4OyBpKyspCisJCWlm ICghcHBndHRfZ2V0X25leHRfbGV2ZWxfZW50cnkobW0sICZlLCBnbWFfaW5kZXhbaV0sCisJCQko aSA9PSBpbmRleCAtIDEpKSkKKwkJCWdvdG8gZXJyOworCisJZ3BhID0gKHB0ZV9vcHMtPmdldF9w Zm4oJmUpIDw8IEdUVF9QQUdFX1NISUZUKSArIChnbWEgJiB+R1RUX1BBR0VfTUFTSyk7CisKKwl0 cmFjZV9nbWFfdHJhbnNsYXRlKHZndC0+dm1faWQsICJwcGd0dCIsIDAsIG1tLT5wYWdlX3RhYmxl X2xldmVsLCBnbWEsIGdwYSk7CisKKwlyZXR1cm4gZ3BhOworZXJyOgorCWd2dF9lcnIoImludmFs aWQgbW0gdHlwZTogJWQsIGdtYSAlbHgiLCBtbS0+dHlwZSwgZ21hKTsKKwlyZXR1cm4gSU5WQUxJ RF9BRERSOworfQorCit2b2lkICpndnRfZ21hX3RvX3ZhKHN0cnVjdCBndnRfbW0gKm1tLCB1bnNp Z25lZCBsb25nIGdtYSkKK3sKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0ID0gbW0tPnZndDsKKwl1 bnNpZ25lZCBsb25nIGdwYTsKKworCWdwYSA9IGd2dF9nbWFfdG9fZ3BhKG1tLCBnbWEpOworCWlm IChncGEgPT0gSU5WQUxJRF9BRERSKSB7CisJCWd2dF93YXJuKCJpbnZhbGlkIGdwYSEgZ21hIDB4 JWx4LCBtbSB0eXBlICVkIiwgZ21hLCBtbS0+dHlwZSk7CisJCXJldHVybiBOVUxMOworCX0KKwor CXJldHVybiBoeXBlcnZpc29yX2dwYV90b192YSh2Z3QsIGdwYSk7Cit9CisKKy8qCisgKiBHVFQg TU1JTyBlbXVsYXRpb24uCisgKi8KK2Jvb2wgZ3R0X21taW9fcmVhZChzdHJ1Y3Qgdmd0X2Rldmlj ZSAqdmd0LAorCXVuc2lnbmVkIGludCBvZmYsIHZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5 dGVzKQoreworCXN0cnVjdCBndnRfbW0gKmdndHRfbW0gPSB2Z3QtPmd0dC5nZ3R0X21tOworCXN0 cnVjdCBndnRfZGV2aWNlX2luZm8gKmluZm8gPSAmdmd0LT5wZGV2LT5kZXZpY2VfaW5mbzsKKwl1 bnNpZ25lZCBsb25nIGluZGV4ID0gb2ZmID4+IGluZm8tPmd0dF9lbnRyeV9zaXplX3NoaWZ0Owor CWd0dF9lbnRyeV90IGU7CisKKwlpZiAoYnl0ZXMgIT0gNCAmJiBieXRlcyAhPSA4KQorCQlyZXR1 cm4gZmFsc2U7CisKKwlnZ3R0X2dldF9ndWVzdF9lbnRyeShnZ3R0X21tLCAmZSwgaW5kZXgpOwor CW1lbWNweShwX2RhdGEsICZlLnZhbDY0ICsgKG9mZiAmIChpbmZvLT5ndHRfZW50cnlfc2l6ZSAt IDEpKSwgYnl0ZXMpOworCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZ3R0X2VtdWxhdGVfcmVh ZChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1bnNpZ25lZCBpbnQgb2ZmLAorCXZvaWQgKnBfZGF0 YSwgdW5zaWduZWQgaW50IGJ5dGVzKQoreworCXN0cnVjdCBndnRfZGV2aWNlX2luZm8gKmluZm8g PSAmdmd0LT5wZGV2LT5kZXZpY2VfaW5mbzsKKwlpbnQgcmV0OworCWN5Y2xlc190IHQwLCB0MTsK KwlzdHJ1Y3QgZ3Z0X3N0YXRpc3RpY3MgKnN0YXQgPSAmdmd0LT5zdGF0OworCisJaWYgKGJ5dGVz ICE9IDQgJiYgYnl0ZXMgIT0gOCkKKwkJcmV0dXJuIGZhbHNlOworCisJdDAgPSBnZXRfY3ljbGVz KCk7CisJc3RhdC0+Z3R0X21taW9fcmNudCsrOworCisJb2ZmIC09IGluZm8tPmd0dF9zdGFydF9v ZmZzZXQ7CisKKwlyZXQgPSBndHRfbW1pb19yZWFkKHZndCwgb2ZmLCBwX2RhdGEsIGJ5dGVzKTsK KworCXQxID0gZ2V0X2N5Y2xlcygpOworCXN0YXQtPmd0dF9tbWlvX3JjeWNsZXMgKz0gKHU2NCkg KHQxIC0gdDApOworCXJldHVybiByZXQ7Cit9CisKK2Jvb2wgZ3R0X21taW9fd3JpdGUoc3RydWN0 IHZndF9kZXZpY2UgKnZndCwgdW5zaWduZWQgaW50IG9mZiwKKwl2b2lkICpwX2RhdGEsIHVuc2ln bmVkIGludCBieXRlcykKK3sKKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHZndC0+cGRldjsK KwlzdHJ1Y3QgZ3Z0X2RldmljZV9pbmZvICppbmZvID0gJnBkZXYtPmRldmljZV9pbmZvOworCXN0 cnVjdCBndnRfbW0gKmdndHRfbW0gPSB2Z3QtPmd0dC5nZ3R0X21tOworCXVuc2lnbmVkIGxvbmcg Z19ndHRfaW5kZXggPSBvZmYgPj4gaW5mby0+Z3R0X2VudHJ5X3NpemVfc2hpZnQ7CisJYm9vbCBw YXJ0aWFsX2FjY2VzcyA9IChieXRlcyAhPSBpbmZvLT5ndHRfZW50cnlfc2l6ZSk7CisJYm9vbCBo aSA9IChwYXJ0aWFsX2FjY2VzcyAmJiAob2ZmICYgKGluZm8tPmd0dF9lbnRyeV9zaXplIC0gMSkp KTsKKwl1bnNpZ25lZCBsb25nIGdtYTsKKwlndHRfZW50cnlfdCBlLCBtOworCWludCByYzsKKwor CWlmIChieXRlcyAhPSA0ICYmIGJ5dGVzICE9IDgpCisJCXJldHVybiBmYWxzZTsKKworCWdtYSA9 IGdfZ3R0X2luZGV4IDw8IEdUVF9QQUdFX1NISUZUOworCS8qIHRoZSBWTSBtYXkgY29uZmlndXJl IHRoZSB3aG9sZSBHTSBzcGFjZSB3aGVuIGJhbGxvb25pbmcgaXMgdXNlZCAqLworCWlmICghZ19n bV9pc192YWxpZCh2Z3QsIGdtYSkpIHsKKwkJc3RhdGljIGludCBjb3VudCA9IDA7CisKKwkJLyog cHJpbnQgaW5mbyBldmVyeSAzMk1CICovCisJCWlmICghKGNvdW50ICUgODE5MikpCisJCQlndnRf ZGJnX21tKCJbdmd0ICVkXWNhcHR1cmUgYmFsbG9vbmVkIHdyaXRlIGZvciAlZCB0aW1lcyAoJXgp IiwKKwkJCQl2Z3QtPnZtX2lkLCBjb3VudCwgb2ZmKTsKKworCQljb3VudCsrOworCQkvKiBpbiB0 aGlzIGNhc2Ugc3RpbGwgcmV0dXJuIHRydWUgc2luY2UgdGhlIGltcGFjdCBpcyBvbiB2Z3R0IG9u bHkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJZ2d0dF9nZXRfZ3Vlc3RfZW50cnkoZ2d0dF9t bSwgJmUsIGdfZ3R0X2luZGV4KTsKKworCW1lbWNweSgmZS52YWw2NCArIChvZmYgJiAoaW5mby0+ Z3R0X2VudHJ5X3NpemUgLSAxKSksIHBfZGF0YSwgYnl0ZXMpOworCisJaWYgKHBhcnRpYWxfYWNj ZXNzICYmICFoaSkKKwkJZ290byBvdXQ7CisKKwlyYyA9IGd0dF9lbnRyeV9wMm0odmd0LCAmZSwg Jm0pOworCWlmICghcmMpIHsKKwkJZ3Z0X2VycigiVk0gJWQ6IGZhaWxlZCB0byB0cmFuc2xhdGUg Z3Vlc3QgZ3R0IGVudHJ5Iiwgdmd0LT52bV9pZCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwln Z3R0X3NldF9zaGFkb3dfZW50cnkoZ2d0dF9tbSwgJm0sIGdfZ3R0X2luZGV4KTsKK291dDoKKwln Z3R0X3NldF9ndWVzdF9lbnRyeShnZ3R0X21tLCAmZSwgZ19ndHRfaW5kZXgpOworCXJldHVybiB0 cnVlOworfQorCitib29sIGd0dF9lbXVsYXRlX3dyaXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Qs IHVuc2lnbmVkIGludCBvZmYsCisJdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCit7 CisJc3RydWN0IGd2dF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZ2Z3QtPnBkZXYtPmRldmljZV9pbmZv OworCWludCByZXQ7CisJY3ljbGVzX3QgdDAsIHQxOworCXN0cnVjdCBndnRfc3RhdGlzdGljcyAq c3RhdCA9ICZ2Z3QtPnN0YXQ7CisKKwlpZiAoYnl0ZXMgIT0gNCAmJiBieXRlcyAhPSA4KQorCQly ZXR1cm4gZmFsc2U7CisKKwl0MCA9IGdldF9jeWNsZXMoKTsKKwlzdGF0LT5ndHRfbW1pb193Y250 Kys7CisKKwlvZmYgLT0gaW5mby0+Z3R0X3N0YXJ0X29mZnNldDsKKworCXJldCA9IGd0dF9tbWlv X3dyaXRlKHZndCwgb2ZmLCBwX2RhdGEsIGJ5dGVzKTsKKworCXQxID0gZ2V0X2N5Y2xlcygpOwor CXN0YXQtPmd0dF9tbWlvX3djeWNsZXMgKz0gKHU2NCkgKHQxIC0gdDApOworCXJldHVybiByZXQ7 Cit9CisKK2Jvb2wgdmd0X2V4cGFuZF9zaGFkb3dfcGFnZV9tZW1wb29sKHN0cnVjdCBwZ3RfZGV2 aWNlICpwZGV2KQoreworCW1lbXBvb2xfdCAqbWVtcG9vbCA9IHBkZXYtPmd0dC5tZW1wb29sOwor CWJvb2wgcmMgPSB0cnVlOworCWludCBuZXdfbWluX25yOworCisJbXV0ZXhfbG9jaygmcGRldi0+ Z3R0Lm1lbXBvb2xfbG9jayk7CisKKwlpZiAobWVtcG9vbC0+Y3Vycl9uciA+PSBndnQucHJlYWxs b2NhdGVkX3NoYWRvd19wYWdlcyAvIDMpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBIYXZlIHRv IGRvIHRoaXMgdG8gbGV0IHRoZSBwb29sIGV4cGFuZCBkaXJlY3RseS4KKwkgKi8KKwluZXdfbWlu X25yID0gZ3Z0LnByZWFsbG9jYXRlZF9zaGFkb3dfcGFnZXMgLSAxOworCWlmIChtZW1wb29sX3Jl c2l6ZShtZW1wb29sLCBuZXdfbWluX25yKSkgeworCQlndnRfZXJyKCJmYWlsIHRvIHJlc2l6ZSB0 aGUgbWVtcG9vbC4iKTsKKwkJcmMgPSBmYWxzZTsKKwkJZ290byBvdXQ7CisJfQorCisJbmV3X21p bl9uciA9IGd2dC5wcmVhbGxvY2F0ZWRfc2hhZG93X3BhZ2VzOworCWlmIChtZW1wb29sX3Jlc2l6 ZShtZW1wb29sLCBuZXdfbWluX25yKSkgeworCQlndnRfZXJyKCJmYWlsIHRvIHJlc2l6ZSB0aGUg bWVtcG9vbC4iKTsKKwkJcmMgPSBmYWxzZTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJbXV0 ZXhfdW5sb2NrKCZwZGV2LT5ndHQubWVtcG9vbF9sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0 YXRpYyB2b2lkICptZW1wb29sX2FsbG9jX3NwdChnZnBfdCBnZnBfbWFzaywgdm9pZCAqcG9vbF9k YXRhKQoreworCXBwZ3R0X3NwdF90ICpzcHQ7CisKKwlzcHQgPSBremFsbG9jKHNpemVvZigqc3B0 KSwgZ2ZwX21hc2spOworCWlmICghc3B0KQorCQlyZXR1cm4gTlVMTDsKKworCXNwdC0+c2hhZG93 X3BhZ2UucGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwX21hc2spOworCWlmICghc3B0LT5zaGFkb3dfcGFn ZS5wYWdlKSB7CisJCWtmcmVlKHNwdCk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gc3B0 OworfQorCitzdGF0aWMgdm9pZCBtZW1wb29sX2ZyZWVfc3B0KHZvaWQgKmVsZW1lbnQsIHZvaWQg KnBvb2xfZGF0YSkKK3sKKwlwcGd0dF9zcHRfdCAqc3B0ID0gZWxlbWVudDsKKworCV9fZnJlZV9w YWdlKHNwdC0+c2hhZG93X3BhZ2UucGFnZSk7CisJa2ZyZWUoc3B0KTsKK30KKworYm9vbCBndnRf aW5pdF92Z3R0KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCit7CisJc3RydWN0IGd2dF92Z3R0X2lu Zm8gKmd0dCA9ICZ2Z3QtPmd0dDsKKwlzdHJ1Y3QgZ3Z0X21tICpnZ3R0X21tOworCisJaGFzaF9p bml0KGd0dC0+Z3Vlc3RfcGFnZV9oYXNoX3RhYmxlKTsKKwloYXNoX2luaXQoZ3R0LT5zaGFkb3df cGFnZV9oYXNoX3RhYmxlKTsKKworCUlOSVRfTElTVF9IRUFEKCZndHQtPm1tX2xpc3RfaGVhZCk7 CisJSU5JVF9MSVNUX0hFQUQoJmd0dC0+b29zX3BhZ2VfbGlzdF9oZWFkKTsKKworCWd0dC0+bGFz dF9wYXJ0aWFsX3BwZ3R0X2FjY2Vzc19pbmRleCA9IC0xOworCisJaWYgKCF2Z3RfZXhwYW5kX3No YWRvd19wYWdlX21lbXBvb2wodmd0LT5wZGV2KSkgeworCQlndnRfZXJyKCJmYWlsIHRvIGV4cGFu ZCB0aGUgc2hhZG93IHBhZ2UgbWVtcG9vbC4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWdn dHRfbW0gPSBndnRfY3JlYXRlX21tKHZndCwgR1ZUX01NX0dHVFQsCisJCQlHVFRfVFlQRV9HR1RU X1BURSwgTlVMTCwgMSwgMCk7CisJaWYgKCFnZ3R0X21tKSB7CisJCWd2dF9lcnIoImZhaWwgdG8g Y3JlYXRlIG1tIGZvciBnZ3R0LiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZ3R0LT5nZ3R0 X21tID0gZ2d0dF9tbTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBndnRfY2xlYW5fdmd0dChz dHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm47CisJ c3RydWN0IGd2dF9tbSAqbW07CisKKwlwcGd0dF9mcmVlX2FsbF9zaGFkb3dfcGFnZSh2Z3QpOwor CisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbiwgJnZndC0+Z3R0Lm1tX2xpc3RfaGVhZCkgewor CQltbSA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBndnRfbW0sIGxpc3QpOworCQl2Z3QtPnBk ZXYtPmd0dC5tbV9mcmVlX3BhZ2VfdGFibGUobW0pOworCQlrZnJlZShtbSk7CisJfQorCisJcmV0 dXJuOworfQorCitzdGF0aWMgdm9pZCBndnRfY2xlYW5fc3B0X29vcyhzdHJ1Y3QgcGd0X2Rldmlj ZSAqcGRldikKK3sKKwlzdHJ1Y3QgZ3Z0X2d0dF9pbmZvICpndHQgPSAmcGRldi0+Z3R0OworCXN0 cnVjdCBsaXN0X2hlYWQgKnBvcywgKm47CisJb29zX3BhZ2VfdCAqb29zX3BhZ2U7CisKKwlBU1NF UlQobGlzdF9lbXB0eSgmZ3R0LT5vb3NfcGFnZV91c2VfbGlzdF9oZWFkKSk7CisKKwlsaXN0X2Zv cl9lYWNoX3NhZmUocG9zLCBuLCAmZ3R0LT5vb3NfcGFnZV9mcmVlX2xpc3RfaGVhZCkgeworCQlv b3NfcGFnZSA9IGNvbnRhaW5lcl9vZihwb3MsIG9vc19wYWdlX3QsIGxpc3QpOworCQlsaXN0X2Rl bCgmb29zX3BhZ2UtPmxpc3QpOworCQlrZnJlZShvb3NfcGFnZSk7CisJfQorfQorCitzdGF0aWMg Ym9vbCBndnRfc2V0dXBfc3B0X29vcyhzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKK3sKKwlzdHJ1 Y3QgZ3Z0X2d0dF9pbmZvICpndHQgPSAmcGRldi0+Z3R0OworCW9vc19wYWdlX3QgKm9vc19wYWdl OworCWludCBpOworCisJSU5JVF9MSVNUX0hFQUQoJmd0dC0+b29zX3BhZ2VfZnJlZV9saXN0X2hl YWQpOworCUlOSVRfTElTVF9IRUFEKCZndHQtPm9vc19wYWdlX3VzZV9saXN0X2hlYWQpOworCisJ Zm9yIChpID0gMDsgaSA8IGd2dC5wcmVhbGxvY2F0ZWRfb29zX3BhZ2VzOyBpKyspIHsKKwkJb29z X3BhZ2UgPSBremFsbG9jKHNpemVvZigqb29zX3BhZ2UpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFv b3NfcGFnZSkgeworCQkJZ3Z0X2VycigiZmFpbCB0byBwcmUtYWxsb2NhdGUgb29zIHBhZ2UuIik7 CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlJTklUX0xJU1RfSEVBRCgmb29zX3BhZ2UtPmxpc3Qp OworCQlJTklUX0xJU1RfSEVBRCgmb29zX3BhZ2UtPnZtX2xpc3QpOworCQlvb3NfcGFnZS0+aWQg PSBpOworCQlsaXN0X2FkZF90YWlsKCZvb3NfcGFnZS0+bGlzdCwgJmd0dC0+b29zX3BhZ2VfZnJl ZV9saXN0X2hlYWQpOworCX0KKworCXBkZXYtPnN0YXQub29zX3BhZ2VfY3VyX2F2YWlsX2NudCA9 IGd2dC5wcmVhbGxvY2F0ZWRfb29zX3BhZ2VzOworCXBkZXYtPnN0YXQub29zX3BhZ2VfbWluX2F2 YWlsX2NudCA9IGd2dC5wcmVhbGxvY2F0ZWRfb29zX3BhZ2VzOworCXBkZXYtPnN0YXQub29zX3Bh Z2Vfc3RlYWxfY250ID0gMDsKKwlwZGV2LT5zdGF0Lm9vc19wYWdlX2F0dGFjaF9jbnQgPSAwOwor CXBkZXYtPnN0YXQub29zX3BhZ2VfZGV0YWNoX2NudCA9IDA7CisKKwlndnRfaW5mbygiJWQgb29z IHBhZ2VzIHByZWFsbG9jYXRlZCIsIGd2dC5wcmVhbGxvY2F0ZWRfb29zX3BhZ2VzKTsKKworCXJl dHVybiB0cnVlOworZmFpbDoKKwlndnRfY2xlYW5fc3B0X29vcyhwZGV2KTsKKwlyZXR1cm4gZmFs c2U7Cit9CisKK2Jvb2wgZ3Z0X2luaXRfYXZhaWxfZ3R0X3NpemUoc3RydWN0IHBndF9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IGd2dF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZwZGV2LT5kZXZpY2Vf aW5mbzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBwZGV2LT5kZXZfcHJp djsKKwl1MTYgZ21jaF9jdHJsOworCXU2NCBndHRfc2l6ZTsKKworCXBjaV9yZWFkX2NvbmZpZ193 b3JkKGRldl9wcml2LT5kZXYtPnBkZXYsIFNOQl9HTUNIX0NUUkwsICZnbWNoX2N0cmwpOworCisJ Z21jaF9jdHJsID0gKGdtY2hfY3RybCA+PiA2KSAmIDM7CisJaWYgKGdtY2hfY3RybCkKKwkJZ21j aF9jdHJsID0gMSA8PCBnbWNoX2N0cmw7CisKKwlzd2l0Y2ggKGdtY2hfY3RybCkgeworCQljYXNl IDI6CisJCWNhc2UgNDoKKwkJY2FzZSA4OgorCQkJZ3R0X3NpemUgPSBnbWNoX2N0cmwgPDwgMjA7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWd2dF9lcnIoImludmFsaWQgR1RUIG1lbW9yeSBz aXplOiAleCIsIGdtY2hfY3RybCk7CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaW5mby0+Z3R0 X2VuZF9vZmZzZXQgPSBpbmZvLT5ndHRfc3RhcnRfb2Zmc2V0ICsgZ3R0X3NpemU7CisJcGRldi0+ dG90YWxfZ21fc3ogPSBndHRfc2l6ZSA+PiBpbmZvLT5ndHRfZW50cnlfc2l6ZV9zaGlmdCA8PCBH VFRfUEFHRV9TSElGVDsKKworCWd2dF9pbmZvKCJBdmFpbGFibGUgR1RUIHNpemU6IDB4JWxseCBh dmFpbGlibGUgR00gc2l6ZTogMHglbGx4IiwKKwkJZ3R0X3NpemUsIHBkZXYtPnRvdGFsX2dtX3N6 KTsKKworCXJldHVybiB0cnVlOworfQorCitib29sIGd2dF9pbml0X2d0dChzdHJ1Y3QgcGd0X2Rl dmljZSAqcGRldikKK3sKKwlndnRfZGJnX2NvcmUoImluaXQgZ3R0Iik7CisKKwlpZiAoSVNfQlJP QURXRUxMKHBkZXYtPmRldl9wcml2KSkgeworCQlwZGV2LT5ndHQucHRlX29wcyA9ICZnZW44X2d0 dF9wdGVfb3BzOworCQlwZGV2LT5ndHQuZ21hX29wcyA9ICZnZW44X2d0dF9nbWFfb3BzOworCQlw ZGV2LT5ndHQubW1fYWxsb2NfcGFnZV90YWJsZSA9IGdlbjhfbW1fYWxsb2NfcGFnZV90YWJsZTsK KwkJcGRldi0+Z3R0Lm1tX2ZyZWVfcGFnZV90YWJsZSA9IGdlbjhfbW1fZnJlZV9wYWdlX3RhYmxl OworCisJCWlmIChndnQucHJlYWxsb2NhdGVkX3NoYWRvd19wYWdlcyA9PSAtMSkKKwkJCWd2dC5w cmVhbGxvY2F0ZWRfc2hhZG93X3BhZ2VzID0gODE5MjsKKwkJaWYgKGd2dC5wcmVhbGxvY2F0ZWRf b29zX3BhZ2VzID09IC0xKQorCQkJZ3Z0LnByZWFsbG9jYXRlZF9vb3NfcGFnZXMgPSA0MDk2Owor CX0gZWxzZSB7CisJCWd2dF9lcnIoIlVuc3VwcG9ydGVkIHBsYXRmb3JtLiIpOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJaWYgKGd2dC5zcHRfb3V0X29mX3N5bmMpIHsKKwkJaWYgKCFndnRfc2V0 dXBfc3B0X29vcyhwZGV2KSkgeworCQkJZ3Z0X2VycigiZmFpbCB0byBpbml0aWFsaXplIFNQVCBv b3MuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwltdXRleF9pbml0KCZwZGV2LT5n dHQubWVtcG9vbF9sb2NrKTsKKworCXBkZXYtPmd0dC5tZW1wb29sID0gbWVtcG9vbF9jcmVhdGUo Z3Z0LnByZWFsbG9jYXRlZF9zaGFkb3dfcGFnZXMsCisJCW1lbXBvb2xfYWxsb2Nfc3B0LCBtZW1w b29sX2ZyZWVfc3B0LCBwZGV2KTsKKwlpZiAoIXBkZXYtPmd0dC5tZW1wb29sKSB7CisJCWd2dF9l cnIoImZhaWwgdG8gY3JlYXRlIG1lbXBvb2wuIik7CisJCWd2dF9jbGVhbl9zcHRfb29zKHBkZXYp OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZ3Z0X2Ns ZWFuX2d0dChzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKK3sKKwlpZiAoZ3Z0LnNwdF9vdXRfb2Zf c3luYykKKwkJZ3Z0X2NsZWFuX3NwdF9vb3MocGRldik7CisKKwltZW1wb29sX2Rlc3Ryb3kocGRl di0+Z3R0Lm1lbXBvb2wpOworfQorCitzdHJ1Y3QgZ3Z0X21tICpnZW44X2ZpbmRfcHBndHRfbW0o c3RydWN0IHZndF9kZXZpY2UgKnZndCwKKwkJaW50IHBhZ2VfdGFibGVfbGV2ZWwsIHZvaWQgKnJv b3RfZW50cnkpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCBndnRfbW0gKm1t OworCXU2NCAqc3JjLCAqZHN0OworCisJbGlzdF9mb3JfZWFjaChwb3MsICZ2Z3QtPmd0dC5tbV9s aXN0X2hlYWQpIHsKKwkJbW0gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3QgZ3Z0X21tLCBsaXN0 KTsKKwkJaWYgKG1tLT50eXBlICE9IEdWVF9NTV9QUEdUVCkKKwkJCWNvbnRpbnVlOworCisJCWlm IChtbS0+cGFnZV90YWJsZV9sZXZlbCAhPSBwYWdlX3RhYmxlX2xldmVsKQorCQkJY29udGludWU7 CisKKwkJc3JjID0gcm9vdF9lbnRyeTsKKwkJZHN0ID0gbW0tPnZpcnR1YWxfcGFnZV90YWJsZTsK KworCQlpZiAocGFnZV90YWJsZV9sZXZlbCA9PSAzKSB7CisJCQlpZiAoc3JjWzBdID09IGRzdFsw XQorCQkJCQkmJiBzcmNbMV0gPT0gZHN0WzFdCisJCQkJCSYmIHNyY1syXSA9PSBkc3RbMl0KKwkJ CQkJJiYgc3JjWzNdID09IGRzdFszXSkKKwkJCQlyZXR1cm4gbW07CisJCX0gZWxzZSB7CisJCQlp ZiAoc3JjWzBdID09IGRzdFswXSkKKwkJCQlyZXR1cm4gbW07CisJCX0KKwl9CisKKwlyZXR1cm4g TlVMTDsKK30KKworYm9vbCBndnRfZzJ2X2NyZWF0ZV9wcGd0dF9tbShzdHJ1Y3Qgdmd0X2Rldmlj ZSAqdmd0LCBpbnQgcGFnZV90YWJsZV9sZXZlbCkKK3sKKwl1NjQgKnBkcCA9ICh1NjQgKikmX192 cmVnNjQodmd0LCBfdmd0aWZfcmVnKHBkcFswXS5sbykpOworCWd0dF90eXBlX3Qgcm9vdF9lbnRy eV90eXBlID0gcGFnZV90YWJsZV9sZXZlbCA9PSA0ID8KKwkJR1RUX1RZUEVfUFBHVFRfUk9PVF9M NF9FTlRSWSA6IEdUVF9UWVBFX1BQR1RUX1JPT1RfTDNfRU5UUlk7CisKKwlzdHJ1Y3QgZ3Z0X21t ICptbTsKKworCUFTU0VSVChwYWdlX3RhYmxlX2xldmVsID09IDQgfHwgcGFnZV90YWJsZV9sZXZl bCA9PSAzKTsKKworCW1tID0gZ2VuOF9maW5kX3BwZ3R0X21tKHZndCwgcGFnZV90YWJsZV9sZXZl bCwgcGRwKTsKKwlpZiAobW0pIHsKKwkJYXRvbWljX2luYygmbW0tPnJlZmNvdW50KTsKKwl9IGVs c2UgeworCQltbSA9IGd2dF9jcmVhdGVfbW0odmd0LCBHVlRfTU1fUFBHVFQsIHJvb3RfZW50cnlf dHlwZSwKKwkJCQlwZHAsIHBhZ2VfdGFibGVfbGV2ZWwsIDApOworCQlpZiAoIW1tKQorCQkJcmV0 dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitib29sIGd2dF9nMnZfZGVzdHJv eV9wcGd0dF9tbShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCBpbnQgcGFnZV90YWJsZV9sZXZlbCkK K3sKKwl1NjQgKnBkcCA9ICh1NjQgKikmX192cmVnNjQodmd0LCBfdmd0aWZfcmVnKHBkcFswXS5s bykpOworCXN0cnVjdCBndnRfbW0gKm1tOworCisJQVNTRVJUKHBhZ2VfdGFibGVfbGV2ZWwgPT0g NCB8fCBwYWdlX3RhYmxlX2xldmVsID09IDMpOworCisJbW0gPSBnZW44X2ZpbmRfcHBndHRfbW0o dmd0LCBwYWdlX3RhYmxlX2xldmVsLCBwZHApOworCWlmICghbW0pIHsKKwkJZ3Z0X2VycigiZmFp bCB0byBmaW5kIHBwZ3R0IGluc3RhbmNlLiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZ3Z0 X2Rlc3Ryb3lfbW0obW0pOworCisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMTIzYWEKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmgKQEAgLTAsMCArMSwzMDUgQEAK Ky8qCisgKiB2R1QgZ3R0IGhlYWRlcgorICoKKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0dWVF9HVFRfSF8KKyNk ZWZpbmUgX0dWVF9HVFRfSF8KKworI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKworc3RydWN0 IGd2dF9tbTsKKworI2RlZmluZSBHVlRfR1RUX0hBU0hfQklUUyA4CisKKyNkZWZpbmUgR1RUX1BB R0VfU0hJRlQJCTEyCisjZGVmaW5lIEdUVF9QQUdFX1NJWkUJCSgxVUwgPDwgR1RUX1BBR0VfU0hJ RlQpCisjZGVmaW5lIEdUVF9QQUdFX01BU0sJCSh+KEdUVF9QQUdFX1NJWkUtMSkpCisjZGVmaW5l IEdUVF9QQUVfTUFTSwkJKCgxVUwgPDwxMikgLSAoMVVMIDw8IDQpKSAvKiBiaXQgMTE6NCAqLwor CisjZGVmaW5lIElOVkFMSURfQUREUiAofjBVTCkKKworI2RlZmluZSBJTlZBTElEX01GTgkofjBV TCkKKworI2RlZmluZSBndHRfdHlwZV9pc19lbnRyeSh0eXBlKSBcCisJKHR5cGUgPiBHVFRfVFlQ RV9JTlZBTElEICYmIHR5cGUgPCBHVFRfVFlQRV9QUEdUVF9FTlRSWSBcCisJICYmIHR5cGUgIT0g R1RUX1RZUEVfUFBHVFRfUFRFX0VOVFJZIFwKKwkgJiYgdHlwZSAhPSBHVFRfVFlQRV9QUEdUVF9S T09UX0VOVFJZKQorCisjZGVmaW5lIGd0dF90eXBlX2lzX3B0KHR5cGUpIFwKKwkodHlwZSA+PSBH VFRfVFlQRV9QUEdUVF9QVEVfUFQgJiYgdHlwZSA8IEdUVF9UWVBFX01BWCkKKworI2RlZmluZSBn dHRfdHlwZV9pc19wdGVfcHQodHlwZSkgXAorCSh0eXBlID09IEdUVF9UWVBFX1BQR1RUX1BURV9Q VCkKKworI2RlZmluZSBndHRfdHlwZV9pc19yb290X3BvaW50ZXIodHlwZSkgXAorCShndHRfdHlw ZV9pc19lbnRyeSh0eXBlKSAmJiB0eXBlID4gR1RUX1RZUEVfUFBHVFRfUk9PVF9FTlRSWSkKKwor I2RlZmluZSBndHRfaW5pdF9lbnRyeShlLCB0LCBwLCB2KSBkbyB7IFwKKwkoZSktPnR5cGUgPSB0 OyBcCisJKGUpLT5wZGV2ID0gcDsgXAorCW1lbWNweSgmKGUpLT52YWw2NCwgJnYsIHNpemVvZih2 KSk7IFwKK313aGlsZSgwKQorCit0eXBlZGVmIGVudW0geworCUdUVF9UWVBFX0lOVkFMSUQgPSAt MSwKKworCUdUVF9UWVBFX0dHVFRfUFRFLAorCisJR1RUX1RZUEVfUFBHVFRfUFRFXzRLX0VOVFJZ LAorCUdUVF9UWVBFX1BQR1RUX1BURV8yTV9FTlRSWSwKKwlHVFRfVFlQRV9QUEdUVF9QVEVfMUdf RU5UUlksCisKKwlHVFRfVFlQRV9QUEdUVF9QVEVfRU5UUlksCisKKwlHVFRfVFlQRV9QUEdUVF9Q REVfRU5UUlksCisJR1RUX1RZUEVfUFBHVFRfUERQX0VOVFJZLAorCUdUVF9UWVBFX1BQR1RUX1BN TDRfRU5UUlksCisKKwlHVFRfVFlQRV9QUEdUVF9ST09UX0VOVFJZLAorCisJR1RUX1RZUEVfUFBH VFRfUk9PVF9MM19FTlRSWSwKKwlHVFRfVFlQRV9QUEdUVF9ST09UX0w0X0VOVFJZLAorCisJR1RU X1RZUEVfUFBHVFRfRU5UUlksCisKKwlHVFRfVFlQRV9QUEdUVF9QVEVfUFQsCisJR1RUX1RZUEVf UFBHVFRfUERFX1BULAorCUdUVF9UWVBFX1BQR1RUX1BEUF9QVCwKKwlHVFRfVFlQRV9QUEdUVF9Q TUw0X1BULAorCisJR1RUX1RZUEVfTUFYLAorfWd0dF90eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0 IHsKKwl1bmlvbiB7CisJCXUzMiB2YWwzMlsyXTsKKwkJdTY0IHZhbDY0OworCX07CisJZ3R0X3R5 cGVfdCB0eXBlOworCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2OworfWd0dF9lbnRyeV90OworCitz dHJ1Y3QgZ3Z0X2d0dF9wdGVfb3BzIHsKKwlndHRfZW50cnlfdCAqKCpnZXRfZW50cnkpKHZvaWQg KnB0LCBndHRfZW50cnlfdCAqZSwgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJCWJvb2wgaHlwZXJ2 aXNvcl9hY2Nlc3MsIHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpOworCWd0dF9lbnRyeV90ICooKnNl dF9lbnRyeSkodm9pZCAqcHQsIGd0dF9lbnRyeV90ICplLCB1bnNpZ25lZCBsb25nIGluZGV4LAor CQkJYm9vbCBoeXBlcnZpc29yX2FjY2Vzcywgc3RydWN0IHZndF9kZXZpY2UgKnZndCk7CisJYm9v bCAoKnRlc3RfcHJlc2VudCkoZ3R0X2VudHJ5X3QgKmUpOworCXZvaWQgKCpjbGVhcl9wcmVzZW50 KShndHRfZW50cnlfdCAqZSk7CisJYm9vbCAoKnRlc3RfcHNlKShndHRfZW50cnlfdCAqZSk7CisJ dm9pZCAoKnNldF9wZm4pKGd0dF9lbnRyeV90ICplLCB1bnNpZ25lZCBsb25nIHBmbik7CisJdW5z aWduZWQgbG9uZyAoKmdldF9wZm4pKGd0dF9lbnRyeV90ICplKTsKK307CisKK3N0cnVjdCBndnRf Z3R0X2dtYV9vcHMgeworCXVuc2lnbmVkIGxvbmcgKCpnbWFfdG9fZ2d0dF9wdGVfaW5kZXgpKHVu c2lnbmVkIGxvbmcgZ21hKTsKKwl1bnNpZ25lZCBsb25nICgqZ21hX3RvX3B0ZV9pbmRleCkodW5z aWduZWQgbG9uZyBnbWEpOworCXVuc2lnbmVkIGxvbmcgKCpnbWFfdG9fcGRlX2luZGV4KSh1bnNp Z25lZCBsb25nIGdtYSk7CisJdW5zaWduZWQgbG9uZyAoKmdtYV90b19sM19wZHBfaW5kZXgpKHVu c2lnbmVkIGxvbmcgZ21hKTsKKwl1bnNpZ25lZCBsb25nICgqZ21hX3RvX2w0X3BkcF9pbmRleCko dW5zaWduZWQgbG9uZyBnbWEpOworCXVuc2lnbmVkIGxvbmcgKCpnbWFfdG9fcG1sNF9pbmRleCko dW5zaWduZWQgbG9uZyBnbWEpOworfTsKKworc3RydWN0IGd2dF9ndHRfaW5mbyB7CisJc3RydWN0 IGd2dF9ndHRfcHRlX29wcyAqcHRlX29wczsKKwlzdHJ1Y3QgZ3Z0X2d0dF9nbWFfb3BzICpnbWFf b3BzOworCWJvb2wgKCptbV9hbGxvY19wYWdlX3RhYmxlKShzdHJ1Y3QgZ3Z0X21tICptbSk7CisJ dm9pZCAoKm1tX2ZyZWVfcGFnZV90YWJsZSkoc3RydWN0IGd2dF9tbSAqbW0pOworCW1lbXBvb2xf dCAqbWVtcG9vbDsKKwlzdHJ1Y3QgbXV0ZXggbWVtcG9vbF9sb2NrOworCXN0cnVjdCBsaXN0X2hl YWQgb29zX3BhZ2VfdXNlX2xpc3RfaGVhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG9vc19wYWdlX2Zy ZWVfbGlzdF9oZWFkOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvaWQgKnZhZGRyOworCXN0 cnVjdCBwYWdlICpwYWdlOworCWd0dF90eXBlX3QgdHlwZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBu b2RlOworCXVuc2lnbmVkIGxvbmcgbWZuOworfXNoYWRvd19wYWdlX3Q7CisKK3R5cGVkZWYgZW51 bSB7CisJR1ZUX01NX0dHVFQgPSAwLAorCUdWVF9NTV9QUEdUVCwKK30gZ3Z0X21tX3R5cGVfdDsK Kworc3RydWN0IGd2dF9tbSB7CisJZ3Z0X21tX3R5cGVfdCB0eXBlOworCWJvb2wgaW5pdGlhbGl6 ZWQ7CisJYm9vbCBzaGFkb3dlZDsKKworCWd0dF90eXBlX3QgcGFnZV90YWJsZV9lbnRyeV90eXBl OworCXUzMiBwYWdlX3RhYmxlX2VudHJ5X3NpemU7CisJdTMyIHBhZ2VfdGFibGVfZW50cnlfY250 OworCXZvaWQgKnZpcnR1YWxfcGFnZV90YWJsZTsKKwl2b2lkICpzaGFkb3dfcGFnZV90YWJsZTsK KworCWludCBwYWdlX3RhYmxlX2xldmVsOworCWJvb2wgaGFzX3NoYWRvd19wYWdlX3RhYmxlOwor CXUzMiBwZGVfYmFzZV9pbmRleDsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlhdG9taWNf dCByZWZjb3VudDsKKwlzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0OworfTsKKworZXh0ZXJuIHN0cnVj dCBndnRfZ3R0X3B0ZV9vcHMgZ2VuOF9ndHRfcHRlX29wczsKK2V4dGVybiBzdHJ1Y3QgZ3Z0X2d0 dF9nbWFfb3BzIGdlbjhfZ3R0X2dtYV9vcHM7CisKK2V4dGVybiBndHRfZW50cnlfdCAqZ3Z0X21t X2dldF9lbnRyeShzdHJ1Y3QgZ3Z0X21tICptbSwKKyAgICAgICAgICAgICAgICB2b2lkICpwYWdl X3RhYmxlLCBndHRfZW50cnlfdCAqZSwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlu ZGV4KTsKKworZXh0ZXJuIGd0dF9lbnRyeV90ICpndnRfbW1fc2V0X2VudHJ5KHN0cnVjdCBndnRf bW0gKm1tLAorICAgICAgICAgICAgICAgIHZvaWQgKnBhZ2VfdGFibGUsIGd0dF9lbnRyeV90ICpl LAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpOworCisjZGVmaW5lIGdndHRf Z2V0X2d1ZXN0X2VudHJ5KG1tLCBlLCBpbmRleCkgXAorCShtbS0+dmd0LT52bV9pZCA9PSAwKSA/ IFwKKwlndnRfbW1fZ2V0X2VudHJ5KG1tLCBOVUxMLCBlLCBpbmRleCkgOiBcCisJZ3Z0X21tX2dl dF9lbnRyeShtbSwgbW0tPnZpcnR1YWxfcGFnZV90YWJsZSwgZSwgaW5kZXgpCisKKyNkZWZpbmUg Z2d0dF9zZXRfZ3Vlc3RfZW50cnkobW0sIGUsIGluZGV4KSBcCisJZ3Z0X21tX3NldF9lbnRyeSht bSwgbW0tPnZpcnR1YWxfcGFnZV90YWJsZSwgZSwgaW5kZXgpCisKKyNkZWZpbmUgZ2d0dF9nZXRf c2hhZG93X2VudHJ5KG1tLCBlLCBpbmRleCkgXAorCWd2dF9tbV9nZXRfZW50cnkobW0sIG1tLT5z aGFkb3dfcGFnZV90YWJsZSwgZSwgaW5kZXgpCisKKyNkZWZpbmUgZ2d0dF9zZXRfc2hhZG93X2Vu dHJ5KG1tLCBlLCBpbmRleCkgXAorCWd2dF9tbV9zZXRfZW50cnkobW0sIG1tLT5zaGFkb3dfcGFn ZV90YWJsZSwgZSwgaW5kZXgpCisKKyNkZWZpbmUgcHBndHRfZ2V0X2d1ZXN0X3Jvb3RfZW50cnko bW0sIGUsIGluZGV4KSBcCisJZ3Z0X21tX2dldF9lbnRyeShtbSwgbW0tPnZpcnR1YWxfcGFnZV90 YWJsZSwgZSwgaW5kZXgpCisKKyNkZWZpbmUgcHBndHRfc2V0X2d1ZXN0X3Jvb3RfZW50cnkobW0s IGUsIGluZGV4KSBcCisJZ3Z0X21tX3NldF9lbnRyeShtbSwgbW0tPnZpcnR1YWxfcGFnZV90YWJs ZSwgZSwgaW5kZXgpCisKKyNkZWZpbmUgcHBndHRfZ2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCBl LCBpbmRleCkgXAorCWd2dF9tbV9nZXRfZW50cnkobW0sIG1tLT5zaGFkb3dfcGFnZV90YWJsZSwg ZSwgaW5kZXgpCisKKyNkZWZpbmUgcHBndHRfc2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCBlLCBp bmRleCkgXAorCWd2dF9tbV9zZXRfZW50cnkobW0sIG1tLT5zaGFkb3dfcGFnZV90YWJsZSwgZSwg aW5kZXgpCisKK2V4dGVybiBzdHJ1Y3QgZ3Z0X21tICpndnRfY3JlYXRlX21tKHN0cnVjdCB2Z3Rf ZGV2aWNlICp2Z3QsCisJCWd2dF9tbV90eXBlX3QgbW1fdHlwZSwgZ3R0X3R5cGVfdCBwYWdlX3Rh YmxlX2VudHJ5X3R5cGUsCisJCXZvaWQgKnZpcnR1YWxfcGFnZV90YWJsZSwgaW50IHBhZ2VfdGFi bGVfbGV2ZWwsCisJCXUzMiBwZGVfYmFzZV9pbmRleCk7CitleHRlcm4gdm9pZCBndnRfZGVzdHJv eV9tbShzdHJ1Y3QgZ3Z0X21tICptbSk7CisKK2V4dGVybiBib29sIGdlbjhfbW1fYWxsb2NfcGFn ZV90YWJsZShzdHJ1Y3QgZ3Z0X21tICptbSk7CitleHRlcm4gdm9pZCBnZW44X21tX2ZyZWVfcGFn ZV90YWJsZShzdHJ1Y3QgZ3Z0X21tICptbSk7CisKK3N0cnVjdCBndWVzdF9wYWdlOworCitzdHJ1 Y3QgZ3Z0X3ZndHRfaW5mbyB7CisJc3RydWN0IGd2dF9tbSAqZ2d0dF9tbTsKKwl1bnNpZ25lZCBs b25nIGFjdGl2ZV9wcGd0dF9tbV9iaXRtYXA7CisJc3RydWN0IGxpc3RfaGVhZCBtbV9saXN0X2hl YWQ7CisJREVDTEFSRV9IQVNIVEFCTEUoc2hhZG93X3BhZ2VfaGFzaF90YWJsZSwgR1ZUX0dUVF9I QVNIX0JJVFMpOworCURFQ0xBUkVfSEFTSFRBQkxFKGd1ZXN0X3BhZ2VfaGFzaF90YWJsZSwgR1ZU X0dUVF9IQVNIX0JJVFMpOworCWF0b21pY190IG5fd3JpdGVfcHJvdGVjdGVkX2d1ZXN0X3BhZ2U7 CisJc3RydWN0IGxpc3RfaGVhZCBvb3NfcGFnZV9saXN0X2hlYWQ7CisJaW50IGxhc3RfcGFydGlh bF9wcGd0dF9hY2Nlc3NfaW5kZXg7CisJZ3R0X2VudHJ5X3QgbGFzdF9wYXJ0aWFsX3BwZ3R0X2Fj Y2Vzc19lbnRyeTsKKwlzdHJ1Y3QgZ3Vlc3RfcGFnZSAqbGFzdF9wYXJ0aWFsX3BwZ3R0X2FjY2Vz c19ncHQ7CisJYm9vbCB3YXJuX3BhcnRpYWxfcHBndHRfYWNjZXNzX29uY2U7Cit9OworCitleHRl cm4gYm9vbCBndnRfaW5pdF92Z3R0KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpOworZXh0ZXJuIHZv aWQgZ3Z0X2NsZWFuX3ZndHQoc3RydWN0IHZndF9kZXZpY2UgKnZndCk7CisKK2V4dGVybiBib29s IGd2dF9pbml0X2d0dChzdHJ1Y3QgcGd0X2RldmljZSAqcGRldik7CitleHRlcm4gdm9pZCBndnRf Y2xlYW5fZ3R0KHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KTsKKworZXh0ZXJuIGJvb2wgZ3Z0X2lu aXRfYXZhaWxfZ3R0X3NpemUoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpOworCitleHRlcm4gYm9v bCBndnRfZXhwYW5kX3NoYWRvd19wYWdlX21lbXBvb2woc3RydWN0IHBndF9kZXZpY2UgKnBkZXYp OworCitleHRlcm4gYm9vbCBndnRfZzJ2X2NyZWF0ZV9wcGd0dF9tbShzdHJ1Y3Qgdmd0X2Rldmlj ZSAqdmd0LCBpbnQgcGFnZV90YWJsZV9sZXZlbCk7CitleHRlcm4gYm9vbCBndnRfZzJ2X2Rlc3Ry b3lfcHBndHRfbW0oc3RydWN0IHZndF9kZXZpY2UgKnZndCwgaW50IHBhZ2VfdGFibGVfbGV2ZWwp OworCitleHRlcm4gc3RydWN0IGd2dF9tbSAqZ2VuOF9maW5kX3BwZ3R0X21tKHN0cnVjdCB2Z3Rf ZGV2aWNlICp2Z3QsCisgICAgICAgICAgICAgICAgaW50IHBhZ2VfdGFibGVfbGV2ZWwsIHZvaWQg KnJvb3RfZW50cnkpOworCitleHRlcm4gYm9vbCBwcGd0dF9jaGVja19wYXJ0aWFsX2FjY2Vzcyhz dHJ1Y3Qgdmd0X2RldmljZSAqdmd0KTsKKwordHlwZWRlZiBib29sIGd1ZXN0X3BhZ2VfaGFuZGxl cl90KHZvaWQgKmdwLCB1aW50NjRfdCBwYSwgdm9pZCAqcF9kYXRhLCBpbnQgYnl0ZXMpOworCitz dHJ1Y3Qgb29zX3BhZ2U7CisKK3N0cnVjdCBndWVzdF9wYWdlIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9k ZSBub2RlOworCWludCB3cml0ZXByb3RlY3Rpb247CisJdW5zaWduZWQgbG9uZyBnZm47CisJdm9p ZCAqdmFkZHI7CisJZ3Vlc3RfcGFnZV9oYW5kbGVyX3QgKmhhbmRsZXI7CisJdm9pZCAqZGF0YTsK Kwl1bnNpZ25lZCBsb25nIHdyaXRlX2NudDsKKwlzdHJ1Y3Qgb29zX3BhZ2UgKm9vc19wYWdlOwor fTsKKwordHlwZWRlZiBzdHJ1Y3QgZ3Vlc3RfcGFnZSBndWVzdF9wYWdlX3Q7CisKK3N0cnVjdCBv b3NfcGFnZSB7CisJZ3Vlc3RfcGFnZV90ICpndWVzdF9wYWdlOworCXN0cnVjdCBsaXN0X2hlYWQg bGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZtX2xpc3Q7CisJaW50IGlkOworCXVuc2lnbmVkIGNo YXIgbWVtW0dUVF9QQUdFX1NJWkVdOworfTsKK3R5cGVkZWYgc3RydWN0IG9vc19wYWdlIG9vc19w YWdlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlzaGFkb3dfcGFnZV90IHNoYWRvd19wYWdlOwor CWd1ZXN0X3BhZ2VfdCBndWVzdF9wYWdlOworCWd0dF90eXBlX3QgZ3Vlc3RfcGFnZV90eXBlOwor CWF0b21pY190IHJlZmNvdW50OworCXN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Q7Cit9IHBwZ3R0X3Nw dF90OworCitleHRlcm4gYm9vbCBndnRfaW5pdF9ndWVzdF9wYWdlKHN0cnVjdCB2Z3RfZGV2aWNl ICp2Z3QsIGd1ZXN0X3BhZ2VfdCAqZ3Vlc3RfcGFnZSwKKwkJdW5zaWduZWQgbG9uZyBnZm4sIGd1 ZXN0X3BhZ2VfaGFuZGxlcl90IGhhbmRsZXIsIHZvaWQgKmRhdGEpOworCitleHRlcm4gdm9pZCBn dnRfY2xlYW5fZ3Vlc3RfcGFnZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCBndWVzdF9wYWdlX3Qg Kmd1ZXN0X3BhZ2UpOworCitleHRlcm4gYm9vbCBndnRfc2V0X2d1ZXN0X3BhZ2Vfd3JpdGVwcm90 ZWN0aW9uKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCisJCWd1ZXN0X3BhZ2VfdCAqZ3Vlc3RfcGFn ZSk7CisKK2V4dGVybiBib29sIGd2dF9jbGVhcl9ndWVzdF9wYWdlX3dyaXRlcHJvdGVjdGlvbihz dHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAorCQlndWVzdF9wYWdlX3QgKmd1ZXN0X3BhZ2UpOworCitl eHRlcm4gZ3Vlc3RfcGFnZV90ICpndnRfZmluZF9ndWVzdF9wYWdlKHN0cnVjdCB2Z3RfZGV2aWNl ICp2Z3QsIHVuc2lnbmVkIGxvbmcgZ2ZuKTsKKworZXh0ZXJuIGJvb2wgcHBndHRfc3luY19vb3Nf cGFnZXMoc3RydWN0IHZndF9kZXZpY2UgKnZndCk7CisKK2V4dGVybiB2b2lkKiBndnRfZ21hX3Rv X3ZhKHN0cnVjdCBndnRfbW0gKm1tLCB1bnNpZ25lZCBsb25nIGdtYSk7CisKK2V4dGVybiBib29s IGd0dF9lbXVsYXRlX3JlYWQoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdW5zaWduZWQgaW50IG9m ZiwKKwl2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcyk7CisKK2V4dGVybiBib29sIGd0 dF9lbXVsYXRlX3dyaXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGludCBvZmYs CisJdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQgYnl0ZXMpOworCisjZW5kaWYgLyogX0dWVF9H VFRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwppbmRleCBhMGE5NjY3Li4xM2ZlY2RmIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L2d2dC5jCkBAIC0xMTQsNiArMTE0LDEwIEBAIHN0YXRpYyBib29sIGluaXRf ZGV2aWNlX2luZm8oc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCiAJcHJpbnRrKCIgICAgICAgIGd0 dF9zdGFydF9vZmZzZXQ6ICV4XG4iLCBpbmZvLT5ndHRfc3RhcnRfb2Zmc2V0KTsKIAlwcmludGso IiAgICAgICAgZ3R0X2VuZF9vZmZzZXQ6ICV4XG4iLCBpbmZvLT5ndHRfZW5kX29mZnNldCk7CiAK KwlpZiAoIWd2dF9pbml0X2F2YWlsX2d0dF9zaXplKHBkZXYpKSB7CisJCWd2dF9lcnIoImZhaWwg dG8gZ2V0IGF2YWlsIGd0dCBzaXplIik7CisJCXJldHVybiBmYWxzZTsKKwl9CiAJcmV0dXJuIHRy dWU7CiB9CiAKQEAgLTIzOCw2ICsyNDIsNyBAQCBzdGF0aWMgYm9vbCBpbml0X3NlcnZpY2VfdGhy ZWFkKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQogc3RhdGljIHZvaWQgY2xlYW5fcGd0X2Rldmlj ZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKIHsKIAljbGVhbl9zZXJ2aWNlX3RocmVhZChwZGV2 KTsKKwlndnRfY2xlYW5fZ3R0KHBkZXYpOwogCWd2dF9pcnFfZXhpdChwZGV2KTsKIAlndnRfY2xl YW5fbW1pb19lbXVsYXRpb25fc3RhdGUocGRldik7CiAJY2xlYW5faW5pdGlhbF9tbWlvX3N0YXRl KHBkZXYpOwpAQCAtMjYyLDYgKzI2Nyw5IEBAIHN0YXRpYyBib29sIGluaXRfcGd0X2RldmljZShz dHJ1Y3QgcGd0X2RldmljZSAqcGRldiwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRlCiAJaWYg KCFndnRfaXJxX2luaXQocGRldikpCiAJCWdvdG8gZXJyOwogCisJaWYgKCFndnRfaW5pdF9ndHQo cGRldikpCisJCWdvdG8gZXJyOworCiAJaWYgKCFpbml0X3NlcnZpY2VfdGhyZWFkKHBkZXYpKQog CQlnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCmluZGV4IGZhZDU2YjEuLjU0MmYzZTYg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJtbWlv LmgiCiAjaW5jbHVkZSAiaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUg Imd0dC5oIgogCiAjZGVmaW5lIEdWVF9NQVhfVkdQVSA4CiAKQEAgLTExNCw2ICsxMTUsNyBAQCBz dHJ1Y3Qgdmd0X2RldmljZSB7CiAJYXRvbWljX3QgYWN0aXZlOwogCXN0cnVjdCBndnRfdmlydHVh bF9kZXZpY2Vfc3RhdGUgc3RhdGU7CiAJc3RydWN0IGd2dF9zdGF0aXN0aWNzIHN0YXQ7CisJc3Ry dWN0IGd2dF92Z3R0X2luZm8gZ3R0OwogfTsKIAogc3RydWN0IGd2dF9nbV9hbGxvY2F0b3IgewpA QCAtMTY2LDYgKzE2OCw4IEBAIHN0cnVjdCBwZ3RfZGV2aWNlIHsKIAogCXN0cnVjdCBndnRfaXJx X3N0YXRlIGlycV9zdGF0ZTsKIAlzdHJ1Y3QgcGd0X3N0YXRpc3RpY3Mgc3RhdDsKKworCXN0cnVj dCBndnRfZ3R0X2luZm8gZ3R0OwogfTsKIAogLyogZGVmaW5pdGlvbnMgZm9yIHBoeXNpY2FsIGFw ZXJ0dXJlL0dNIHNwYWNlICovCkBAIC0zNjYsNiArMzcwLDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9p ZCBndnRfbW1pb193cml0ZTY0KHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2LAogCUk5MTVfV1JJVEU2 NCh0bXAsIHZhbCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTY0IGd2dF9yZWFkX2d0dDY0KHN0cnVj dCBwZ3RfZGV2aWNlICpwZGV2LCB1MzIgaW5kZXgpCit7CisJc3RydWN0IGd2dF9kZXZpY2VfaW5m byAqaW5mbyA9ICZwZGV2LT5kZXZpY2VfaW5mbzsKKwl1bnNpZ25lZCBpbnQgb2ZmID0gaW5kZXgg PDwgaW5mby0+Z3R0X2VudHJ5X3NpemVfc2hpZnQ7CisKKwlyZXR1cm4gcmVhZHEocGRldi0+Z3R0 bW1pb192YSArIGluZm8tPmd0dF9zdGFydF9vZmZzZXQgKyBvZmYpOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgZ3Z0X3dyaXRlX2d0dDY0KHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2LCB1MzIgaW5k ZXgsIHU2NCB2YWwpCit7CisJc3RydWN0IGd2dF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZwZGV2LT5k ZXZpY2VfaW5mbzsKKwl1bnNpZ25lZCBpbnQgb2ZmID0gaW5kZXggPDwgaW5mby0+Z3R0X2VudHJ5 X3NpemVfc2hpZnQ7CisKKwl3cml0ZXEodmFsLCBwZGV2LT5ndHRtbWlvX3ZhICsgaW5mby0+Z3R0 X3N0YXJ0X29mZnNldCArIG9mZik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBndnRfbW1pb19w b3N0aW5nX3JlYWQoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYsIHUzMiByZWcpCiB7CiAJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcGRldi0+ZGV2X3ByaXY7CkBAIC00MzEsNCAr NDUxLDEzMiBAQCBleHRlcm4gc3RydWN0IHZndF9kZXZpY2UgKmd2dF9jcmVhdGVfaW5zdGFuY2Uo c3RydWN0IHBndF9kZXZpY2UgKnBkZXYsCiAJCXN0cnVjdCBndnRfaW5zdGFuY2VfaW5mbyAqaW5m byk7CiBleHRlcm4gdm9pZCBndnRfZGVzdHJveV9pbnN0YW5jZShzdHJ1Y3Qgdmd0X2RldmljZSAq dmd0KTsKIAorLyogY2hlY2sgd2hldGhlciBhIGd1ZXN0IEdNIGFkZHJlc3MgaXMgd2l0aGluIHRo ZSBDUFUgdmlzaWJsZSByYW5nZSAqLworc3RhdGljIGlubGluZSBib29sIGdfZ21faXNfdmlzaWJs ZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1NjQgZ19hZGRyKQoreworCXJldHVybiAoZ19hZGRy ID49IGd2dF9ndWVzdF92aXNpYmxlX2dtX2Jhc2Uodmd0KSkgJiYKKwkJKGdfYWRkciA8PSBndnRf Z3Vlc3RfdmlzaWJsZV9nbV9lbmQodmd0KSk7Cit9CisKKy8qIGNoZWNrIHdoZXRoZXIgYSBndWVz dCBHTSBhZGRyZXNzIGlzIG91dCBvZiB0aGUgQ1BVIHZpc2libGUgcmFuZ2UgKi8KK3N0YXRpYyBp bmxpbmUgYm9vbCBnX2dtX2lzX2hpZGRlbihzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1NjQgZ19h ZGRyKQoreworCXJldHVybiAoZ19hZGRyID49IGd2dF9ndWVzdF9oaWRkZW5fZ21fYmFzZSh2Z3Qp KSAmJgorCQkoZ19hZGRyIDw9IGd2dF9ndWVzdF9oaWRkZW5fZ21fZW5kKHZndCkpOworfQorCitz dGF0aWMgaW5saW5lIGJvb2wgZ19nbV9pc192YWxpZChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1 NjQgZ19hZGRyKQoreworCXJldHVybiBnX2dtX2lzX3Zpc2libGUodmd0LCBnX2FkZHIpIHx8IGdf Z21faXNfaGlkZGVuKHZndCwgZ19hZGRyKTsKK30KKworLyogY2hlY2sgd2hldGhlciBhIGhvc3Qg R00gYWRkcmVzcyBpcyB3aXRoaW4gdGhlIENQVSB2aXNpYmxlIHJhbmdlICovCitzdGF0aWMgaW5s aW5lIGJvb2wgaF9nbV9pc192aXNpYmxlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHU2NCBoX2Fk ZHIpCit7CisJcmV0dXJuIChoX2FkZHIgPj0gZ3Z0X3Zpc2libGVfZ21fYmFzZSh2Z3QpKSAmJgor CQkoaF9hZGRyIDw9IGd2dF92aXNpYmxlX2dtX2VuZCh2Z3QpKTsKK30KKworLyogY2hlY2sgd2hl dGhlciBhIGhvc3QgR00gYWRkcmVzcyBpcyBvdXQgb2YgdGhlIENQVSB2aXNpYmxlIHJhbmdlICov CitzdGF0aWMgaW5saW5lIGJvb2wgaF9nbV9pc19oaWRkZW4oc3RydWN0IHZndF9kZXZpY2UgKnZn dCwgdTY0IGhfYWRkcikKK3sKKwlyZXR1cm4gKGhfYWRkciA+PSBndnRfaGlkZGVuX2dtX2Jhc2Uo dmd0KSkgJiYKKwkJKGhfYWRkciA8PSBndnRfaGlkZGVuX2dtX2VuZCh2Z3QpKTsKK30KKworc3Rh dGljIGlubGluZSBib29sIGhfZ21faXNfdmFsaWQoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdTY0 IGhfYWRkcikKK3sKKwlyZXR1cm4gaF9nbV9pc192aXNpYmxlKHZndCwgaF9hZGRyKSB8fCBoX2dt X2lzX2hpZGRlbih2Z3QsIGhfYWRkcik7Cit9CisKKy8qIGZvciBhIGd1ZXN0IEdNIGFkZHJlc3Ms IHJldHVybiB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgQ1BVIHZpc2libGUgcmFuZ2UgKi8KK3N0YXRp YyBpbmxpbmUgdTY0IGdfZ21fdmlzaWJsZV9vZmZzZXQoc3RydWN0IHZndF9kZXZpY2UgKnZndCwg dWludDY0X3QgZ19hZGRyKQoreworCXJldHVybiBnX2FkZHIgLSBndnRfZ3Vlc3RfdmlzaWJsZV9n bV9iYXNlKHZndCk7Cit9CisKKy8qIGZvciBhIGd1ZXN0IEdNIGFkZHJlc3MsIHJldHVybiB0aGUg b2Zmc2V0IHdpdGhpbiB0aGUgaGlkZGVuIHJhbmdlICovCitzdGF0aWMgaW5saW5lIHU2NCBnX2dt X2hpZGRlbl9vZmZzZXQoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdWludDY0X3QgZ19hZGRyKQor eworCXJldHVybiBnX2FkZHIgLSBndnRfZ3Vlc3RfaGlkZGVuX2dtX2Jhc2Uodmd0KTsKK30KKwor LyogZm9yIGEgaG9zdCBHTSBhZGRyZXNzLCByZXR1cm4gdGhlIG9mZnNldCB3aXRoaW4gdGhlIENQ VSB2aXNpYmxlIHJhbmdlICovCitzdGF0aWMgaW5saW5lIHU2NCBoX2dtX3Zpc2libGVfb2Zmc2V0 KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVpbnQ2NF90IGhfYWRkcikKK3sKKwlyZXR1cm4gaF9h ZGRyIC0gZ3Z0X3Zpc2libGVfZ21fYmFzZSh2Z3QpOworfQorCisvKiBmb3IgYSBob3N0IEdNIGFk ZHJlc3MsIHJldHVybiB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgaGlkZGVuIHJhbmdlICovCitzdGF0 aWMgaW5saW5lIHU2NCBoX2dtX2hpZGRlbl9vZmZzZXQoc3RydWN0IHZndF9kZXZpY2UgKnZndCwg dWludDY0X3QgaF9hZGRyKQoreworCXJldHVybiBoX2FkZHIgLSBndnRfaGlkZGVuX2dtX2Jhc2Uo dmd0KTsKK30KKworLyogdmFsaWRhdGUgYSBnbSBhZGRyZXNzIGFuZCByZWxhdGVkIHJhbmdlIHNp emUsIHRyYW5zbGF0ZSBpdCB0byBob3N0IGdtIGFkZHJlc3MgKi8KK3N0YXRpYyBpbmxpbmUgaW50 IGcyaF9nbV9yYW5nZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1NjQgKmFkZHIsIHUzMiBzaXpl KQoreworCUFTU0VSVChhZGRyKTsKKworCWlmICgoIWdfZ21faXNfdmFsaWQodmd0LCAqYWRkcikp IHx8IChzaXplICYmICFnX2dtX2lzX3ZhbGlkKHZndCwgKmFkZHIgKyBzaXplIC0gMSkpKSB7CisJ CWd2dF9lcnIoIlZNKCVkKTogaW52YWxpZCBhZGRyZXNzIHJhbmdlOiBnX2FkZHIoMHglbGx4KSwg c2l6ZSgweCV4KVxuIiwKKwkJCXZndC0+dm1faWQsICphZGRyLCBzaXplKTsKKwkJcmV0dXJuIC1F QUNDRVM7CisJfQorCisJaWYgKGdfZ21faXNfdmlzaWJsZSh2Z3QsICphZGRyKSkJLyogYXBlcnR1 cmUgKi8KKwkJKmFkZHIgPSBndnRfdmlzaWJsZV9nbV9iYXNlKHZndCkgKworCQkJZ19nbV92aXNp YmxlX29mZnNldCh2Z3QsICphZGRyKTsKKwllbHNlCS8qIGhpZGRlbiBHTSBzcGFjZSAqLworCQkq YWRkciA9IGd2dF9oaWRkZW5fZ21fYmFzZSh2Z3QpICsKKwkJCWdfZ21faGlkZGVuX29mZnNldCh2 Z3QsICphZGRyKTsKKwlyZXR1cm4gMDsKK30KKworLyogdHJhbnNsYXRlIGEgZ3Vlc3QgZ20gYWRk cmVzcyB0byBob3N0IGdtIGFkZHJlc3MgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGcyaF9nbShzdHJ1 Y3Qgdmd0X2RldmljZSAqdmd0LCB1NjQgKmFkZHIpCit7CisJcmV0dXJuIGcyaF9nbV9yYW5nZSh2 Z3QsIGFkZHIsIDQpOworfQorCisvKiB0cmFuc2xhdGUgYSBob3N0IGdtIGFkZHJlc3MgdG8gZ3Vl c3QgZ20gYWRkcmVzcyAqLworc3RhdGljIGlubGluZSB1NjQgaDJnX2dtKHN0cnVjdCB2Z3RfZGV2 aWNlICp2Z3QsIHVpbnQ2NF90IGhfYWRkcikKK3sKKwl1NjQgZ19hZGRyOworCisJQVNTRVJUX05V TShoX2dtX2lzX3ZhbGlkKHZndCwgaF9hZGRyKSwgaF9hZGRyKTsKKworCWlmIChoX2dtX2lzX3Zp c2libGUodmd0LCBoX2FkZHIpKQorCQlnX2FkZHIgPSBndnRfZ3Vlc3RfdmlzaWJsZV9nbV9iYXNl KHZndCkgKworCQkJaF9nbV92aXNpYmxlX29mZnNldCh2Z3QsIGhfYWRkcik7CisJZWxzZQorCQln X2FkZHIgPSBndnRfZ3Vlc3RfaGlkZGVuX2dtX2Jhc2Uodmd0KSArCisJCQloX2dtX2hpZGRlbl9v ZmZzZXQodmd0LCBoX2FkZHIpOworCisJcmV0dXJuIGdfYWRkcjsKK30KKworI2RlZmluZSByZWdf aXNfbW1pbyhwZGV2LCByZWcpCVwKKwkocmVnID49IDAgJiYgcmVnIDwgcGRldi0+bW1pb19zaXpl KQorCisjZGVmaW5lIHJlZ19pc19ndHQocGRldiwgcmVnKQlcCisJKHJlZyA+PSBwZGV2LT5kZXZp Y2VfaW5mby5ndHRfc3RhcnRfb2Zmc2V0IFwKKwkmJiByZWcgPCBwZGV2LT5kZXZpY2VfaW5mby5n dHRfZW5kX29mZnNldCkKKworc3RhdGljIGlubGluZSB1MzIgZzJoX2d0dF9pbmRleChzdHJ1Y3Qg dmd0X2RldmljZSAqdmd0LCB1aW50MzJfdCBnX2luZGV4KQoreworCXU2NCBhZGRyID0gZ19pbmRl eCA8PCBHVFRfUEFHRV9TSElGVDsKKworCWcyaF9nbSh2Z3QsICZhZGRyKTsKKworCXJldHVybiAo dTMyKShhZGRyID4+IEdUVF9QQUdFX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaDJn X2d0dF9pbmRleChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1aW50MzJfdCBoX2luZGV4KQorewor CXU2NCBoX2FkZHIgPSBoX2luZGV4IDw8IEdUVF9QQUdFX1NISUZUOworCisJcmV0dXJuICh1MzIp KGgyZ19nbSh2Z3QsIGhfYWRkcikgPj4gR1RUX1BBR0VfU0hJRlQpOworfQorCiAjZW5kaWYKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9pbnN0YW5jZS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2luc3RhbmNlLmMKaW5kZXggMDdiNzk3YS4uMTU0MDY2MSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2luc3RhbmNlLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2luc3RhbmNlLmMKQEAgLTEwNiw2ICsxMDYsNyBAQCBzdGF0aWMgdm9p ZCBpbml0X3ZpcnR1YWxfY2ZnX3NwYWNlX3N0YXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCiAK IHN0YXRpYyB2b2lkIGRlc3Ryb3lfdmlydHVhbF9nbV9zdGF0ZShzdHJ1Y3Qgdmd0X2RldmljZSAq dmd0KQogeworCWd2dF9jbGVhbl92Z3R0KHZndCk7CiAJZ3Z0X2ZyZWVfZ21fYW5kX2ZlbmNlX3Jl c291cmNlKHZndCk7CiB9CiAKQEAgLTE1MSwxMSArMTUyLDE3IEBAIHN0YXRpYyBib29sIGNyZWF0 ZV92aXJ0dWFsX2dtX3N0YXRlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCiAKIAlwb3B1bGF0ZV9w dmluZm9fcGFnZSh2Z3QpOwogCisJaWYgKCFndnRfaW5pdF92Z3R0KHZndCkpIHsKKwkJZ3Z0X2Vy cigiZmFpbCB0byBpbml0IHZndHQiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCXJldHVybiB0 cnVlOwogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X3ZpcnR1YWxfZGV2aWNlX3N0YXRlKHN0cnVj dCB2Z3RfZGV2aWNlICp2Z3QpCiB7CisJZ3Z0X2NsZWFuX3ZndHQodmd0KTsKIAlkZXN0cm95X3Zp cnR1YWxfbW1pb19zdGF0ZSh2Z3QpOwogCWRlc3Ryb3lfdmlydHVhbF9nbV9zdGF0ZSh2Z3QpOwog fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21wdC5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L21wdC5oCmluZGV4IGJiZTQ0NjUuLjk5YWNmM2QgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tcHQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvbXB0LmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpZm5kZWYgX0dWVF9NUFRfSF8KICNkZWZp bmUgX0dWVF9NUFRfSF8KIAorc3RydWN0IGd1ZXN0X3BhZ2U7CiBzdHJ1Y3Qgdmd0X2RldmljZTsK IAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh5cGVydmlzb3JfZzJtX3BmbihzdHJ1Y3Qg dmd0X2RldmljZSAqdmd0LApAQCAtNjMsNiArNjQsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkICpo eXBlcnZpc29yX21mbl90b192aXJ0KGludCBtZm4pCiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRp YyBpbmxpbmUgaW50IGh5cGVydmlzb3Jfc2V0X3dwX3BhZ2VzKHN0cnVjdCB2Z3RfZGV2aWNlICp2 Z3QsIHN0cnVjdCBndWVzdF9wYWdlICpwKQoreworICAgICAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGlubGluZSBpbnQgaHlwZXJ2aXNvcl91bnNldF93cF9wYWdlcyhzdHJ1Y3Qgdmd0X2Rldmlj ZSAqdmd0LCBzdHJ1Y3QgZ3Vlc3RfcGFnZSAqcCkKK3sKKyAgICAgICAgcmV0dXJuIDA7Cit9CisK IHN0YXRpYyBpbmxpbmUgdm9pZCBoeXBlcnZpc29yX2luamVjdF9tc2koc3RydWN0IHZndF9kZXZp Y2UgKnZndCkKIHsKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvcGFyYW1zLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMKaW5kZXggZmNh NDliMC4uYjZlYWIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BhcmFt cy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuYwpAQCAtMzAsNiArMzAs OSBAQCBzdHJ1Y3QgZ3Z0X2tlcm5lbF9wYXJhbXMgZ3Z0ID0gewogCS5kb20wX2xvd19nbV9zeiA9 IDk2LAogCS5kb20wX2hpZ2hfZ21fc3ogPSAzODQsCiAJLmRvbTBfZmVuY2Vfc3ogPSA0LAorCS5w cmVhbGxvY2F0ZWRfc2hhZG93X3BhZ2VzID0gLTEsCisJLnByZWFsbG9jYXRlZF9vb3NfcGFnZXMg PSAtMSwKKwkuc3B0X291dF9vZl9zeW5jID0gZmFsc2UsCiB9OwogCiBtb2R1bGVfcGFyYW1fbmFt ZWQoZG9tMF9sb3dfZ21fc3osIGd2dC5kb20wX2xvd19nbV9zeiwgaW50LCAwNjAwKTsKQEAgLTQw LDMgKzQzLDEyIEBAIE1PRFVMRV9QQVJNX0RFU0MoZG9tMF9oaWdoX2dtX3N6LCAiQW1vdW50IG9m IGhpZ2ggbWVtb3J5IHNpemUgb2YgRE9NMCIpOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZG9tMF9m ZW5jZV9zeiwgZ3Z0LmRvbTBfZmVuY2Vfc3osIGludCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9ERVND KGRvbTBfZmVuY2Vfc3osICJBbW91bnQgb2YgZmVuY2Ugc2l6ZSBvZiBET00wIik7CisKK21vZHVs ZV9wYXJhbV9uYW1lZChwcmVhbGxvY2F0ZWRfc2hhZG93X3BhZ2VzLCBndnQucHJlYWxsb2NhdGVk X3NoYWRvd19wYWdlcywgaW50LCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MocHJlYWxsb2NhdGVk X3NoYWRvd19wYWdlcywgIkFtb3VudCBvZiBwcmUtYWxsb2NhdGVkIHNoYWRvdyBwYWdlcyIpOwor Cittb2R1bGVfcGFyYW1fbmFtZWQocHJlYWxsb2NhdGVkX29vc19wYWdlcywgZ3Z0LnByZWFsbG9j YXRlZF9vb3NfcGFnZXMsIGludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByZWFsbG9jYXRl ZF9vb3NfcGFnZXMsICJBbW91bnQgb2YgcHJlLWFsbG9jYXRlZCBvb3MgcGFnZXMiKTsKKworbW9k dWxlX3BhcmFtX25hbWVkKHNwdF9vdXRfb2Zfc3luYywgZ3Z0LnNwdF9vdXRfb2Zfc3luYywgYm9v bCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNwdF9vdXRfb2Zfc3luYywgIkVuYWJsZSBTUFQg b3V0IG9mIHN5bmMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJh bXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuaAppbmRleCA4MDI1NWMzLi40 ZTdmNTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5oCkBAIC0zMSw2ICszMSw5IEBAIHN0 cnVjdCBndnRfa2VybmVsX3BhcmFtcyB7CiAJaW50IGRvbTBfbG93X2dtX3N6OwogCWludCBkb20w X2hpZ2hfZ21fc3o7CiAJaW50IGRvbTBfZmVuY2Vfc3o7CisJaW50IHByZWFsbG9jYXRlZF9zaGFk b3dfcGFnZXM7CisJaW50IHByZWFsbG9jYXRlZF9vb3NfcGFnZXM7CisJYm9vbCBzcHRfb3V0X29m X3N5bmM7CiB9OwogCiBleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfcGFyYW1zIGd2dDsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wZXJmLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvcGVyZi5oCmluZGV4IDhmMGNkMTUuLjE0NmExY2IgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9wZXJmLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L3BlcmYuaApAQCAtMjgsMTIgKzI4LDM1IEBAIHN0cnVjdCBndnRfc3RhdGlzdGljcyB7CiAJdTY0 CWlycV9udW07CiAJdTY0CWV2ZW50c1tHVlRfRVZFTlRfTUFYXTsKIAl1NjQJbGFzdF9pbmplY3Rp b247CisJdTY0CWd0dF9tbWlvX3JjbnQ7CisJdTY0CWd0dF9tbWlvX3djbnQ7CisJdTY0CWd0dF9t bWlvX3djeWNsZXM7CisJdTY0CWd0dF9tbWlvX3JjeWNsZXM7CisJdTY0CXdwX2NudDsKKwl1NjQJ d3BfY3ljbGVzOworCXU2NAlwcGd0dF93cF9jbnQ7CisJdTY0CXBwZ3R0X3dwX2N5Y2xlczsKKwl1 NjQJc3B0X2ZpbmRfaGl0X2NudDsKKwl1NjQJc3B0X2ZpbmRfaGl0X2N5Y2xlczsKKwl1NjQJc3B0 X2ZpbmRfbWlzc19jbnQ7CisJdTY0CXNwdF9maW5kX21pc3NfY3ljbGVzOworCXU2NAlncHRfZmlu ZF9oaXRfY250OworCXU2NAlncHRfZmluZF9oaXRfY3ljbGVzOworCXU2NAlncHRfZmluZF9taXNz X2NudDsKKwl1NjQJZ3B0X2ZpbmRfbWlzc19jeWNsZXM7CisKIH07CiAKIHN0cnVjdCBwZ3Rfc3Rh dGlzdGljcyB7CiAJdTY0CWlycV9udW07CiAJdTY0CWlycV9kZWxheV9jeWNsZXM7CiAJdTY0CWV2 ZW50c1tHVlRfRVZFTlRfTUFYXTsKKwl1NjQJb29zX3BhZ2VfY3VyX2F2YWlsX2NudDsKKwl1NjQJ b29zX3BhZ2VfbWluX2F2YWlsX2NudDsKKwl1NjQJb29zX3BhZ2Vfc3RlYWxfY250OworCXU2NAlv b3NfcGFnZV9hdHRhY2hfY250OworCXU2NAlvb3NfcGFnZV9kZXRhY2hfY250OworCiB9OwogCiAj ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC90cmFjZS5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3RyYWNlLmgKaW5kZXggYzk4NjAwYS4uYjZhOWYzZiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3RyYWNlLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L3RyYWNlLmgKQEAgLTI2LDYgKzI2LDE3OCBAQAogI3VuZGVmIFRSQUNF X1NZU1RFTQogI2RlZmluZSBUUkFDRV9TWVNURU0gZ3Z0CiAKK1RSQUNFX0VWRU5UKHNwdF9hbGxv YywKKwkJVFBfUFJPVE8oaW50IGlkLCB2b2lkICpzcHQsIGludCB0eXBlLCB1bnNpZ25lZCBsb25n IG1mbiwgdW5zaWduZWQgbG9uZyBncHRfZ2ZuKSwKKworCQlUUF9BUkdTKGlkLCBzcHQsIHR5cGUs IG1mbiwgZ3B0X2dmbiksCisKKwkJVFBfU1RSVUNUX19lbnRyeSgKKwkJCV9fZmllbGQoaW50LCBp ZCkKKwkJCV9fZmllbGQodm9pZCAqLCBzcHQpCisJCQlfX2ZpZWxkKGludCwgdHlwZSkKKwkJCV9f ZmllbGQodW5zaWduZWQgbG9uZywgbWZuKQorCQkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBncHRf Z2ZuKQorCQkJKSwKKworCQlUUF9mYXN0X2Fzc2lnbigKKwkJCV9fZW50cnktPmlkID0gaWQ7CisJ CQlfX2VudHJ5LT5zcHQgPSBzcHQ7CisJCQlfX2VudHJ5LT50eXBlID0gdHlwZTsKKwkJCV9fZW50 cnktPm1mbiA9IG1mbjsKKwkJCV9fZW50cnktPmdwdF9nZm4gPSBncHRfZ2ZuOworCQkpLAorCisJ CVRQX3ByaW50aygiVk0lZCBbYWxsb2NdIHNwdCAlcCB0eXBlICVkIG1mbiAweCVseCBncHRfZ2Zu IDB4JWx4XG4iLAorCQkJCV9fZW50cnktPmlkLAorCQkJCV9fZW50cnktPnNwdCwKKwkJCQlfX2Vu dHJ5LT50eXBlLAorCQkJCV9fZW50cnktPm1mbiwKKwkJCQlfX2VudHJ5LT5ncHRfZ2ZuKQorKTsK KworVFJBQ0VfRVZFTlQoc3B0X2ZyZWUsCisJCVRQX1BST1RPKGludCBpZCwgdm9pZCAqc3B0LCBp bnQgdHlwZSksCisKKwkJVFBfQVJHUyhpZCwgc3B0LCB0eXBlKSwKKworCQlUUF9TVFJVQ1RfX2Vu dHJ5KAorCQkJX19maWVsZChpbnQsIGlkKQorCQkJX19maWVsZCh2b2lkICosIHNwdCkKKwkJCV9f ZmllbGQoaW50LCB0eXBlKQorCQkJKSwKKworCQlUUF9mYXN0X2Fzc2lnbigKKwkJCV9fZW50cnkt PmlkID0gaWQ7CisJCQlfX2VudHJ5LT5zcHQgPSBzcHQ7CisJCQlfX2VudHJ5LT50eXBlID0gdHlw ZTsKKwkJKSwKKworCQlUUF9wcmludGsoIlZNJXUgW2ZyZWVdIHNwdCAlcCB0eXBlICVkXG4iLAor CQkJCV9fZW50cnktPmlkLAorCQkJCV9fZW50cnktPnNwdCwKKwkJCQlfX2VudHJ5LT50eXBlKQor KTsKKworI2RlZmluZSBNQVhfQlVGX0xFTiAyNTYKKworVFJBQ0VfRVZFTlQoZ21hX2luZGV4LAor CQlUUF9QUk9UTyhjb25zdCBjaGFyICpwcmVmaXgsIHVuc2lnbmVkIGxvbmcgZ21hLCB1bnNpZ25l ZCBsb25nIGluZGV4KSwKKworCQlUUF9BUkdTKHByZWZpeCwgZ21hLCBpbmRleCksCisKKwkJVFBf U1RSVUNUX19lbnRyeSgKKwkJCV9fYXJyYXkoY2hhciwgYnVmLCBNQVhfQlVGX0xFTikKKwkJKSwK KworCQlUUF9mYXN0X2Fzc2lnbigKKwkJCXNucHJpbnRmKF9fZW50cnktPmJ1ZiwgTUFYX0JVRl9M RU4sICIlcyBnbWEgMHglbHggaW5kZXggMHglbHhcbiIsIHByZWZpeCwgZ21hLCBpbmRleCk7CisJ CSksCisKKwkJVFBfcHJpbnRrKCIlcyIsIF9fZW50cnktPmJ1ZikKKyk7CisKK1RSQUNFX0VWRU5U KGdtYV90cmFuc2xhdGUsCisJCVRQX1BST1RPKGludCBpZCwgY2hhciAqdHlwZSwgaW50IHJpbmdf aWQsIGludCBwdF9sZXZlbCwgdW5zaWduZWQgbG9uZyBnbWEsIHVuc2lnbmVkIGxvbmcgZ3BhKSwK KworCQlUUF9BUkdTKGlkLCB0eXBlLCByaW5nX2lkLCBwdF9sZXZlbCwgZ21hLCBncGEpLAorCisJ CVRQX1NUUlVDVF9fZW50cnkoCisJCQlfX2FycmF5KGNoYXIsIGJ1ZiwgTUFYX0JVRl9MRU4pCisJ CSksCisKKwkJVFBfZmFzdF9hc3NpZ24oCisJCQlzbnByaW50ZihfX2VudHJ5LT5idWYsIE1BWF9C VUZfTEVOLCAiVk0lZCAlcyByaW5nICVkIHB0X2xldmVsICVkIGdtYSAweCVseCAtPiBncGEgMHgl bHhcbiIsCisJCQkJCWlkLCB0eXBlLCByaW5nX2lkLCBwdF9sZXZlbCwgZ21hLCBncGEpOworCQkp LAorCisJCVRQX3ByaW50aygiJXMiLCBfX2VudHJ5LT5idWYpCispOworCitUUkFDRV9FVkVOVChz cHRfcmVmY291bnQsCisJCVRQX1BST1RPKGludCBpZCwgY2hhciAqYWN0aW9uLCB2b2lkICpzcHQs IGludCBiZWZvcmUsIGludCBhZnRlciksCisKKwkJVFBfQVJHUyhpZCwgYWN0aW9uLCBzcHQsIGJl Zm9yZSwgYWZ0ZXIpLAorCisJCVRQX1NUUlVDVF9fZW50cnkoCisJCQlfX2FycmF5KGNoYXIsIGJ1 ZiwgTUFYX0JVRl9MRU4pCisJCSksCisKKwkJVFBfZmFzdF9hc3NpZ24oCisJCQlzbnByaW50Zihf X2VudHJ5LT5idWYsIE1BWF9CVUZfTEVOLCAiVk0lZCBbJXNdIHNwdCAlcCBiZWZvcmUgJWQgLT4g YWZ0ZXIgJWRcbiIsCisJCQkJCWlkLCBhY3Rpb24sIHNwdCwgYmVmb3JlLCBhZnRlcik7CisJCSks CisKKwkJVFBfcHJpbnRrKCIlcyIsIF9fZW50cnktPmJ1ZikKKyk7CisKK1RSQUNFX0VWRU5UKHNw dF9jaGFuZ2UsCisJCVRQX1BST1RPKGludCBpZCwgY2hhciAqYWN0aW9uLCB2b2lkICpzcHQsIHVu c2lnbmVkIGxvbmcgZ2ZuLCBpbnQgdHlwZSksCisKKwkJVFBfQVJHUyhpZCwgYWN0aW9uLCBzcHQs IGdmbiwgdHlwZSksCisKKwkJVFBfU1RSVUNUX19lbnRyeSgKKwkJCV9fYXJyYXkoY2hhciwgYnVm LCBNQVhfQlVGX0xFTikKKwkJKSwKKworCQlUUF9mYXN0X2Fzc2lnbigKKwkJCXNucHJpbnRmKF9f ZW50cnktPmJ1ZiwgTUFYX0JVRl9MRU4sICJWTSVkIFslc10gc3B0ICVwIGdmbiAweCVseCB0eXBl ICVkXG4iLAorCQkJCQlpZCwgYWN0aW9uLCBzcHQsIGdmbiwgdHlwZSk7CisJCSksCisKKwkJVFBf cHJpbnRrKCIlcyIsIF9fZW50cnktPmJ1ZikKKyk7CisKK1RSQUNFX0VWRU5UKGdwdF9jaGFuZ2Us CisJCVRQX1BST1RPKGludCBpZCwgY29uc3QgY2hhciAqdGFnLCB2b2lkICpzcHQsIGludCB0eXBl LCB1NjQgdiwgdW5zaWduZWQgbG9uZyBpbmRleCksCisKKwkJVFBfQVJHUyhpZCwgdGFnLCBzcHQs IHR5cGUsIHYsIGluZGV4KSwKKworCQlUUF9TVFJVQ1RfX2VudHJ5KAorCQkJX19hcnJheShjaGFy LCBidWYsIE1BWF9CVUZfTEVOKQorCQkpLAorCisJCVRQX2Zhc3RfYXNzaWduKAorCQkJc25wcmlu dGYoX19lbnRyeS0+YnVmLCBNQVhfQlVGX0xFTiwgIlZNJWQgWyVzXSBzcHQgJXAgdHlwZSAlZCBl bnRyeSAweCVsbHggaW5kZXggMHglbHhcbiIsCisJCQkJCWlkLCB0YWcsIHNwdCwgdHlwZSwgdiwg aW5kZXgpOworCQkpLAorCisJCVRQX3ByaW50aygiJXMiLCBfX2VudHJ5LT5idWYpCispOworCitU UkFDRV9FVkVOVChvb3NfY2hhbmdlLAorCQlUUF9QUk9UTyhpbnQgaWQsIGNvbnN0IGNoYXIgKnRh ZywgaW50IHBhZ2VfaWQsIHZvaWQgKmdwdCwgaW50IHR5cGUpLAorCisJCVRQX0FSR1MoaWQsIHRh ZywgcGFnZV9pZCwgZ3B0LCB0eXBlKSwKKworCQlUUF9TVFJVQ1RfX2VudHJ5KAorCQkJX19hcnJh eShjaGFyLCBidWYsIE1BWF9CVUZfTEVOKQorCQkpLAorCisJCVRQX2Zhc3RfYXNzaWduKAorCQkJ c25wcmludGYoX19lbnRyeS0+YnVmLCBNQVhfQlVGX0xFTiwgIlZNJWQgW29vcyAlc10gcGFnZSBp ZCAlZCBncHQgJXAgdHlwZSAlZFxuIiwKKwkJCQkJaWQsIHRhZywgcGFnZV9pZCwgZ3B0LCB0eXBl KTsKKwkJKSwKKworCQlUUF9wcmludGsoIiVzIiwgX19lbnRyeS0+YnVmKQorKTsKKworVFJBQ0Vf RVZFTlQob29zX3N5bmMsCisJCVRQX1BST1RPKGludCBpZCwgaW50IHBhZ2VfaWQsIHZvaWQgKmdw dCwgaW50IHR5cGUsIHU2NCB2LCB1bnNpZ25lZCBsb25nIGluZGV4KSwKKworCQlUUF9BUkdTKGlk LCBwYWdlX2lkLCBncHQsIHR5cGUsIHYsIGluZGV4KSwKKworCQlUUF9TVFJVQ1RfX2VudHJ5KAor CQkJX19hcnJheShjaGFyLCBidWYsIE1BWF9CVUZfTEVOKQorCQkpLAorCisJCVRQX2Zhc3RfYXNz aWduKAorCQkJc25wcmludGYoX19lbnRyeS0+YnVmLCBNQVhfQlVGX0xFTiwgIlZNJWQgW29vcyBz eW5jXSBwYWdlIGlkICVkIGdwdCAlcCB0eXBlICVkIGVudHJ5IDB4JWxseCBpbmRleCAweCVseFxu IiwKKwkJCQkJaWQsIHBhZ2VfaWQsIGdwdCwgdHlwZSwgdiwgaW5kZXgpOworCQkpLAorCisJCVRQ X3ByaW50aygiJXMiLCBfX2VudHJ5LT5idWYpCispOworCiAjZW5kaWYgLyogX0dWVF9UUkFDRV9I XyAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXQgb2YgcHJvdGVjdGlvbiAqLwotLSAKMS45 LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==