From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH 3/3] drm/udl: Switch to SHMEM Date: Mon, 28 Oct 2019 09:45:49 +0100 Message-ID: <20191028084549.30243-4-tzimmermann@suse.de> References: <20191028084549.30243-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4230A89958 for ; Mon, 28 Oct 2019 08:45:54 +0000 (UTC) In-Reply-To: <20191028084549.30243-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@redhat.com, sean@poorly.run, daniel@ffwll.ch, noralf@tronnes.org, sam@ravnborg.org, emil.velikov@collabora.com Cc: Thomas Zimmermann , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VWRsJ3MgR0VNIGNvZGUgYW5kIHRoZSBnZW5lcmljIFNITUVNIGFyZSBhbG1vc3QgaWRlbnRpY2Fs LiBSZXBsYWNlCnRoZSBmb3JtZXIgd2l0aCBTSE1FTS4gVGhlIGRtYWJ1ZiBzdXBwb3J0IGluIHVk bCBpcyBiZWluZyByZW1vdmVkCmluIGZhdm9yIG9mIHRoZSBnZW5lcmljIEdFTSBQUklNRSBmdW5j dGlvbnMuCgpUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIGluIHRoZSBjYWNoaW5nIGZsYWdzIGZvciBt bWFwIHBhZ2VzLiBCeQpkZWZhdWx0LCBTSE1FTSBhbHdheXMgc2V0cyAodW5jYWNoZWQpIHdyaXRl IGNvbWJpbmluZy4gSW4gdWRsJ3MKbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgb25seSBpbXBvcnRl ZCBidWZmZXJzIHVzZSB3cml0ZSBjb21iaW5pbmcuCk1lbW9yeSBwYWdlcyBvZiBsb2NhbGx5IGNy ZWF0ZWQgYnVmZmVyIG9iamVjdHMgYXJlIG1tYXAnZWQgd2l0aApjYWNoaW5nIGVuYWJsZWQuIFRv IGtlZXAgdGhlIG9wdGltaXphdGlvbiwgdWRsIHByb3ZpZGVzIGl0cyBvd24KbW1hcCBmdW5jdGlv biBmb3IgR0VNIG9iamVjdHMgd2hlcmUgaXQgZml4ZXMgdXAgdGhlIG1hcHBpbmcgZmxhZ3MuCgpT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vdWRsL0tjb25maWcgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vdWRsL01ha2VmaWxlICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZG1h YnVmLmMgfCAyNTQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUv ZHJtL3VkbC91ZGxfZHJ2LmMgICAgfCAgMjkgKy0tLQogZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxf ZHJ2LmggICAgfCAgMzAgKy0tLQogZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZmIuYyAgICAgfCAg NjUgKysrKy0tLS0KIGRyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX2dlbS5jICAgIHwgMjM3ICsrKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDcgZmlsZXMgY2hhbmdlZCwgODQgaW5zZXJ0aW9ucygr KSwgNTM0IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS91 ZGwvdWRsX2RtYWJ1Zi5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3VkbC9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL3VkbC9LY29uZmlnCmluZGV4IGI0ZDE3OWI4N2YwMS4uMTQ1YjJh OTVjZTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdWRsL0tjb25maWcKKysrIGIvZHJp dmVycy9ncHUvZHJtL3VkbC9LY29uZmlnCkBAIC01LDYgKzUsNyBAQCBjb25maWcgRFJNX1VETAog CWRlcGVuZHMgb24gVVNCX1NVUFBPUlQKIAlkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0QKIAlz ZWxlY3QgVVNCCisJc2VsZWN0IERSTV9HRU1fU0hNRU1fSEVMUEVSCiAJc2VsZWN0IERSTV9LTVNf SEVMUEVSCiAJaGVscAogCSAgVGhpcyBpcyBhIEtNUyBkcml2ZXIgZm9yIHRoZSBVU0IgZGlzcGxh eWxpbmsgdmlkZW8gYWRhcHRlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRsL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3VkbC9NYWtlZmlsZQppbmRleCBlNWJiNmY3NTdlMTEu LjljNDI4MjBhZTMzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3VkbC9NYWtlZmlsZQor KysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAogIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci11ZGwteSA6PSB1ZGxfZHJ2Lm8gdWRs X21vZGVzZXQubyB1ZGxfY29ubmVjdG9yLm8gdWRsX2VuY29kZXIubyB1ZGxfbWFpbi5vIHVkbF9m Yi5vIHVkbF90cmFuc2Zlci5vIHVkbF9nZW0ubyB1ZGxfZG1hYnVmLm8KK3VkbC15IDo9IHVkbF9k cnYubyB1ZGxfbW9kZXNldC5vIHVkbF9jb25uZWN0b3IubyB1ZGxfZW5jb2Rlci5vIHVkbF9tYWlu Lm8gdWRsX2ZiLm8gdWRsX3RyYW5zZmVyLm8gdWRsX2dlbS5vCiAKIG9iai0kKENPTkZJR19EUk1f VURMKSA6PSB1ZGwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZG1hYnVm LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kbWFidWYuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggYjFjMWVlNjRkZTU5Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3VkbC91ZGxfZG1hYnVmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKLS8qCi0gKiB1ZGxfZG1h YnVmLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIENocm9taXVtIE9TIEF1dGhvcnMK LSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEt YnVmLmg+Ci0KLSNpbmNsdWRlIDxkcm0vZHJtX3ByaW1lLmg+Ci0KLSNpbmNsdWRlICJ1ZGxfZHJ2 LmgiCi0KLXN0cnVjdCB1ZGxfZHJtX2RtYWJ1Zl9hdHRhY2htZW50IHsKLQlzdHJ1Y3Qgc2dfdGFi bGUgc2d0OwotCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsKLQlib29sIGlzX21hcHBlZDsK LX07Ci0KLXN0YXRpYyBpbnQgdWRsX2F0dGFjaF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmICpkbWFi dWYsCi0JCQkgICAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCi17Ci0Jc3Ry dWN0IHVkbF9kcm1fZG1hYnVmX2F0dGFjaG1lbnQgKnVkbF9hdHRhY2g7Ci0KLQlEUk1fREVCVUdf UFJJTUUoIltERVY6JXNdIHNpemU6JXpkXG4iLCBkZXZfbmFtZShhdHRhY2gtPmRldiksCi0JCQlh dHRhY2gtPmRtYWJ1Zi0+c2l6ZSk7Ci0KLQl1ZGxfYXR0YWNoID0ga3phbGxvYyhzaXplb2YoKnVk bF9hdHRhY2gpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVkbF9hdHRhY2gpCi0JCXJldHVybiAtRU5P TUVNOwotCi0JdWRsX2F0dGFjaC0+ZGlyID0gRE1BX05PTkU7Ci0JYXR0YWNoLT5wcml2ID0gdWRs X2F0dGFjaDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1ZGxfZGV0YWNoX2RtYV9i dWYoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKLQkJCSAgICAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICphdHRhY2gpCi17Ci0Jc3RydWN0IHVkbF9kcm1fZG1hYnVmX2F0dGFjaG1lbnQgKnVk bF9hdHRhY2ggPSBhdHRhY2gtPnByaXY7Ci0Jc3RydWN0IHNnX3RhYmxlICpzZ3Q7Ci0KLQlpZiAo IXVkbF9hdHRhY2gpCi0JCXJldHVybjsKLQotCURSTV9ERUJVR19QUklNRSgiW0RFVjolc10gc2l6 ZTolemRcbiIsIGRldl9uYW1lKGF0dGFjaC0+ZGV2KSwKLQkJCWF0dGFjaC0+ZG1hYnVmLT5zaXpl KTsKLQotCXNndCA9ICZ1ZGxfYXR0YWNoLT5zZ3Q7Ci0KLQlpZiAodWRsX2F0dGFjaC0+ZGlyICE9 IERNQV9OT05FKQotCQlkbWFfdW5tYXBfc2coYXR0YWNoLT5kZXYsIHNndC0+c2dsLCBzZ3QtPm5l bnRzLAotCQkJCXVkbF9hdHRhY2gtPmRpcik7Ci0KLQlzZ19mcmVlX3RhYmxlKHNndCk7Ci0Ja2Zy ZWUodWRsX2F0dGFjaCk7Ci0JYXR0YWNoLT5wcml2ID0gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVj dCBzZ190YWJsZSAqdWRsX21hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0 dGFjaCwKLQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCXN0cnVjdCB1ZGxf ZHJtX2RtYWJ1Zl9hdHRhY2htZW50ICp1ZGxfYXR0YWNoID0gYXR0YWNoLT5wcml2OwotCXN0cnVj dCB1ZGxfZ2VtX29iamVjdCAqb2JqID0gdG9fdWRsX2JvKGF0dGFjaC0+ZG1hYnVmLT5wcml2KTsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKLQlzdHJ1Y3QgdWRsX2Rl dmljZSAqdWRsID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnJkLCAq d3I7Ci0Jc3RydWN0IHNnX3RhYmxlICpzZ3QgPSBOVUxMOwotCXVuc2lnbmVkIGludCBpOwotCWlu dCBwYWdlX2NvdW50OwotCWludCBuZW50cywgcmV0OwotCi0JRFJNX0RFQlVHX1BSSU1FKCJbREVW OiVzXSBzaXplOiV6ZCBkaXI9JWRcbiIsIGRldl9uYW1lKGF0dGFjaC0+ZGV2KSwKLQkJCWF0dGFj aC0+ZG1hYnVmLT5zaXplLCBkaXIpOwotCi0JLyoganVzdCByZXR1cm4gY3VycmVudCBzZ3QgaWYg YWxyZWFkeSByZXF1ZXN0ZWQuICovCi0JaWYgKHVkbF9hdHRhY2gtPmRpciA9PSBkaXIgJiYgdWRs X2F0dGFjaC0+aXNfbWFwcGVkKQotCQlyZXR1cm4gJnVkbF9hdHRhY2gtPnNndDsKLQotCWlmICgh b2JqLT5wYWdlcykgewotCQlyZXQgPSB1ZGxfZ2VtX2dldF9wYWdlcyhvYmopOwotCQlpZiAocmV0 KSB7Ci0JCQlEUk1fRVJST1IoImZhaWxlZCB0byBtYXAgcGFnZXMuXG4iKTsKLQkJCXJldHVybiBF UlJfUFRSKHJldCk7Ci0JCX0KLQl9Ci0KLQlwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNpemUgLyBQ QUdFX1NJWkU7Ci0Jb2JqLT5zZyA9IGRybV9wcmltZV9wYWdlc190b19zZyhvYmotPnBhZ2VzLCBw YWdlX2NvdW50KTsKLQlpZiAoSVNfRVJSKG9iai0+c2cpKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVk IHRvIGFsbG9jYXRlIHNndC5cbiIpOwotCQlyZXR1cm4gRVJSX0NBU1Qob2JqLT5zZyk7Ci0JfQot Ci0Jc2d0ID0gJnVkbF9hdHRhY2gtPnNndDsKLQotCXJldCA9IHNnX2FsbG9jX3RhYmxlKHNndCwg b2JqLT5zZy0+b3JpZ19uZW50cywgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJS T1IoImZhaWxlZCB0byBhbGxvYyBzZ3QuXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7 Ci0JfQotCi0JbXV0ZXhfbG9jaygmdWRsLT5nZW1fbG9jayk7Ci0KLQlyZCA9IG9iai0+c2ctPnNn bDsKLQl3ciA9IHNndC0+c2dsOwotCWZvciAoaSA9IDA7IGkgPCBzZ3QtPm9yaWdfbmVudHM7ICsr aSkgewotCQlzZ19zZXRfcGFnZSh3ciwgc2dfcGFnZShyZCksIHJkLT5sZW5ndGgsIHJkLT5vZmZz ZXQpOwotCQlyZCA9IHNnX25leHQocmQpOwotCQl3ciA9IHNnX25leHQod3IpOwotCX0KLQotCWlm IChkaXIgIT0gRE1BX05PTkUpIHsKLQkJbmVudHMgPSBkbWFfbWFwX3NnKGF0dGFjaC0+ZGV2LCBz Z3QtPnNnbCwgc2d0LT5vcmlnX25lbnRzLCBkaXIpOwotCQlpZiAoIW5lbnRzKSB7Ci0JCQlEUk1f RVJST1IoImZhaWxlZCB0byBtYXAgc2dsIHdpdGggaW9tbXUuXG4iKTsKLQkJCXNnX2ZyZWVfdGFi bGUoc2d0KTsKLQkJCXNndCA9IEVSUl9QVFIoLUVJTyk7Ci0JCQlnb3RvIGVycl91bmxvY2s7Ci0J CX0KLQl9Ci0KLQl1ZGxfYXR0YWNoLT5pc19tYXBwZWQgPSB0cnVlOwotCXVkbF9hdHRhY2gtPmRp ciA9IGRpcjsKLQlhdHRhY2gtPnByaXYgPSB1ZGxfYXR0YWNoOwotCi1lcnJfdW5sb2NrOgotCW11 dGV4X3VubG9jaygmdWRsLT5nZW1fbG9jayk7Ci0JcmV0dXJuIHNndDsKLX0KLQotc3RhdGljIHZv aWQgdWRsX3VubWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAot CQkJICAgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsCi0JCQkgICAgICBlbnVtIGRtYV9kYXRhX2Rp cmVjdGlvbiBkaXIpCi17Ci0JLyogTm90aGluZyB0byBkby4gKi8KLQlEUk1fREVCVUdfUFJJTUUo IltERVY6JXNdIHNpemU6JXpkIGRpcjolZFxuIiwgZGV2X25hbWUoYXR0YWNoLT5kZXYpLAotCQkJ YXR0YWNoLT5kbWFidWYtPnNpemUsIGRpcik7Ci19Ci0KLXN0YXRpYyB2b2lkICp1ZGxfZG1hYnVm X2ttYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYsIHVuc2lnbmVkIGxvbmcgcGFnZV9udW0pCi17 Ci0JLyogVE9ETyAqLwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHVkbF9kbWFi dWZfa3VubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAotCQkJICAgICAgdW5zaWduZWQgbG9u ZyBwYWdlX251bSwgdm9pZCAqYWRkcikKLXsKLQkvKiBUT0RPICovCi19Ci0KLXN0YXRpYyBpbnQg dWRsX2RtYWJ1Zl9tbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAotCQkJICAgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JLyogVE9ETyAqLwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdWRsX2RtYWJ1Zl9vcHMgPSB7Ci0J LmF0dGFjaAkJCT0gdWRsX2F0dGFjaF9kbWFfYnVmLAotCS5kZXRhY2gJCQk9IHVkbF9kZXRhY2hf ZG1hX2J1ZiwKLQkubWFwX2RtYV9idWYJCT0gdWRsX21hcF9kbWFfYnVmLAotCS51bm1hcF9kbWFf YnVmCQk9IHVkbF91bm1hcF9kbWFfYnVmLAotCS5tYXAJCQk9IHVkbF9kbWFidWZfa21hcCwKLQku dW5tYXAJCQk9IHVkbF9kbWFidWZfa3VubWFwLAotCS5tbWFwCQkJPSB1ZGxfZG1hYnVmX21tYXAs Ci0JLnJlbGVhc2UJCT0gZHJtX2dlbV9kbWFidWZfcmVsZWFzZSwKLX07Ci0KLXN0cnVjdCBkbWFf YnVmICp1ZGxfZ2VtX3ByaW1lX2V4cG9ydChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50 IGZsYWdzKQotewotCURFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4cF9pbmZvKTsKLQotCWV4 cF9pbmZvLm9wcyA9ICZ1ZGxfZG1hYnVmX29wczsKLQlleHBfaW5mby5zaXplID0gb2JqLT5zaXpl OwotCWV4cF9pbmZvLmZsYWdzID0gZmxhZ3M7Ci0JZXhwX2luZm8ucHJpdiA9IG9iajsKLQotCXJl dHVybiBkcm1fZ2VtX2RtYWJ1Zl9leHBvcnQob2JqLT5kZXYsICZleHBfaW5mbyk7Ci19Ci0KLXN0 YXRpYyBpbnQgdWRsX3ByaW1lX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAg IHNpemVfdCBzaXplLAotCQkJICAgIHN0cnVjdCBzZ190YWJsZSAqc2csCi0JCQkgICAgc3RydWN0 IHVkbF9nZW1fb2JqZWN0ICoqb2JqX3ApCi17Ci0Jc3RydWN0IHVkbF9nZW1fb2JqZWN0ICpvYmo7 Ci0JaW50IG5wYWdlczsKLQotCW5wYWdlcyA9IHNpemUgLyBQQUdFX1NJWkU7Ci0KLQkqb2JqX3Ag PSBOVUxMOwotCW9iaiA9IHVkbF9nZW1fYWxsb2Nfb2JqZWN0KGRldiwgbnBhZ2VzICogUEFHRV9T SVpFKTsKLQlpZiAoIW9iaikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlvYmotPnNnID0gc2c7Ci0J b2JqLT5wYWdlcyA9IGt2bWFsbG9jX2FycmF5KG5wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICop LCBHRlBfS0VSTkVMKTsKLQlpZiAob2JqLT5wYWdlcyA9PSBOVUxMKSB7Ci0JCURSTV9FUlJPUigi b2JqIHBhZ2VzIGlzIE5VTEwgJWRcbiIsIG5wYWdlcyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0K LQotCWRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKHNnLCBvYmotPnBhZ2VzLCBOVUxM LCBucGFnZXMpOwotCi0JKm9ial9wID0gb2JqOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKnVkbF9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Ci0JCQkJc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCi17Ci0Jc3RydWN0IGRtYV9idWZfYXR0YWNo bWVudCAqYXR0YWNoOwotCXN0cnVjdCBzZ190YWJsZSAqc2c7Ci0Jc3RydWN0IHVkbF9nZW1fb2Jq ZWN0ICp1b2JqOwotCWludCByZXQ7Ci0KLQkvKiBuZWVkIHRvIGF0dGFjaCAqLwotCWdldF9kZXZp Y2UoZGV2LT5kZXYpOwotCWF0dGFjaCA9IGRtYV9idWZfYXR0YWNoKGRtYV9idWYsIGRldi0+ZGV2 KTsKLQlpZiAoSVNfRVJSKGF0dGFjaCkpIHsKLQkJcHV0X2RldmljZShkZXYtPmRldik7Ci0JCXJl dHVybiBFUlJfQ0FTVChhdHRhY2gpOwotCX0KLQotCWdldF9kbWFfYnVmKGRtYV9idWYpOwotCi0J c2cgPSBkbWFfYnVmX21hcF9hdHRhY2htZW50KGF0dGFjaCwgRE1BX0JJRElSRUNUSU9OQUwpOwot CWlmIChJU19FUlIoc2cpKSB7Ci0JCXJldCA9IFBUUl9FUlIoc2cpOwotCQlnb3RvIGZhaWxfZGV0 YWNoOwotCX0KLQotCXJldCA9IHVkbF9wcmltZV9jcmVhdGUoZGV2LCBkbWFfYnVmLT5zaXplLCBz ZywgJnVvYmopOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbF91bm1hcDsKLQotCXVvYmotPmJhc2Uu aW1wb3J0X2F0dGFjaCA9IGF0dGFjaDsKLQotCXJldHVybiAmdW9iai0+YmFzZTsKLQotZmFpbF91 bm1hcDoKLQlkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBzZywgRE1BX0JJRElSRUNU SU9OQUwpOwotZmFpbF9kZXRhY2g6Ci0JZG1hX2J1Zl9kZXRhY2goZG1hX2J1ZiwgYXR0YWNoKTsK LQlkbWFfYnVmX3B1dChkbWFfYnVmKTsKLQlwdXRfZGV2aWNlKGRldi0+ZGV2KTsKLQlyZXR1cm4g RVJSX1BUUihyZXQpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZHJ2 LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kcnYuYwppbmRleCA3NzhhMGI2NTJmNjQuLjU2 M2NjNTgwOWU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZHJ2LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZHJ2LmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+CiAjaW5j bHVkZSA8ZHJtL2RybV9maWxlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVy Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9pb2N0bC5oPgogI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVf aGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgpAQCAtMzIsMjMgKzMzLDcgQEAg c3RhdGljIGludCB1ZGxfdXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNl KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3Ry dWN0IHVkbF9nZW1fdm1fb3BzID0gewotCS5mYXVsdCA9IHVkbF9nZW1fZmF1bHQsCi0JLm9wZW4g PSBkcm1fZ2VtX3ZtX29wZW4sCi0JLmNsb3NlID0gZHJtX2dlbV92bV9jbG9zZSwKLX07Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkbF9kcml2ZXJfZm9wcyA9IHsKLQku b3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IGRybV9vcGVuLAotCS5tbWFwID0gdWRsX2Ry bV9nZW1fbW1hcCwKLQkucG9sbCA9IGRybV9wb2xsLAotCS5yZWFkID0gZHJtX3JlYWQsCi0JLnVu bG9ja2VkX2lvY3RsCT0gZHJtX2lvY3RsLAotCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmNv bXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCi0JLmxsc2VlayA9IG5vb3BfbGxzZWVrLAot fTsKK0RFRklORV9EUk1fR0VNX0ZPUFModWRsX2RyaXZlcl9mb3BzKTsKIAogc3RhdGljIHZvaWQg dWRsX2RyaXZlcl9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC02MywxOCAr NDgsMTAgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkucmVsZWFzZSA9 IHVkbF9kcml2ZXJfcmVsZWFzZSwKIAogCS8qIGdlbSBob29rcyAqLwotCS5nZW1fZnJlZV9vYmpl Y3RfdW5sb2NrZWQgPSB1ZGxfZ2VtX2ZyZWVfb2JqZWN0LAogCS5nZW1fY3JlYXRlX29iamVjdCA9 IHVkbF9kcml2ZXJfZ2VtX2NyZWF0ZV9vYmplY3QsCi0JLmdlbV92bV9vcHMgPSAmdWRsX2dlbV92 bV9vcHMsCiAKLQkuZHVtYl9jcmVhdGUgPSB1ZGxfZHVtYl9jcmVhdGUsCi0JLmR1bWJfbWFwX29m ZnNldCA9IHVkbF9nZW1fbW1hcCwKIAkuZm9wcyA9ICZ1ZGxfZHJpdmVyX2ZvcHMsCi0KLQkucHJp bWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCi0JLnByaW1lX2Zk X3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAotCS5nZW1fcHJpbWVfZXhw b3J0ID0gdWRsX2dlbV9wcmltZV9leHBvcnQsCi0JLmdlbV9wcmltZV9pbXBvcnQgPSB1ZGxfZ2Vt X3ByaW1lX2ltcG9ydCwKKwlEUk1fR0VNX1NITUVNX0RSSVZFUl9PUFMsCiAKIAkubmFtZSA9IERS SVZFUl9OQU1FLAogCS5kZXNjID0gRFJJVkVSX0RFU0MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdWRsL3VkbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX2Rydi5oCmluZGV4 IGZjMzEyZTc5MWQxOC4uOTg3ZDk5YWUyZGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v dWRsL3VkbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kcnYuaApAQCAtNzMs MTggKzczLDkgQEAgc3RydWN0IHVkbF9kZXZpY2UgewogCiAjZGVmaW5lIHRvX3VkbCh4KSBjb250 YWluZXJfb2YoeCwgc3RydWN0IHVkbF9kZXZpY2UsIGRybSkKIAotc3RydWN0IHVkbF9nZW1fb2Jq ZWN0IHsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgYmFzZTsKLQlzdHJ1Y3QgcGFnZSAqKnBhZ2Vz OwotCXZvaWQgKnZtYXBwaW5nOwotCXN0cnVjdCBzZ190YWJsZSAqc2c7Ci19OwotCi0jZGVmaW5l IHRvX3VkbF9ibyh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHVkbF9nZW1fb2JqZWN0LCBiYXNl KQotCiBzdHJ1Y3QgdWRsX2ZyYW1lYnVmZmVyIHsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGJh c2U7Ci0Jc3RydWN0IHVkbF9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbTsKIAlib29sIGFjdGl2ZV8xNjsgLyogYWN0aXZlIG9uIHRoZSAxNi1iaXQg Y2hhbm5lbCAqLwogfTsKIApAQCAtMTE5LDI3ICsxMTAsOCBAQCBpbnQgdWRsX3JlbmRlcl9obGlu ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgbG9nX2JwcCwgc3RydWN0IHVyYiAqKnVyYl9w dHIsCiAJCSAgICAgdTMyIGJ5dGVfb2Zmc2V0LCB1MzIgZGV2aWNlX2J5dGVfb2Zmc2V0LCB1MzIg Ynl0ZV93aWR0aCwKIAkJICAgICBpbnQgKmlkZW50X3B0ciwgaW50ICpzZW50X3B0cik7CiAKLWlu dCB1ZGxfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCSAgICBzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAotCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICph cmdzKTsKLWludCB1ZGxfZ2VtX21tYXAoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCi0JCSB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZzZXQp OwotCiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnVkbF9kcml2ZXJfZ2VtX2NyZWF0ZV9vYmplY3Qo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJCSAgICBzaXplX3Qgc2l6ZSk7Ci12b2lkIHVk bF9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKTsKLXN0cnVj dCB1ZGxfZ2VtX29iamVjdCAqdWRsX2dlbV9hbGxvY19vYmplY3Qoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKLQkJCQkJICAgIHNpemVfdCBzaXplKTsKLXN0cnVjdCBkbWFfYnVmICp1ZGxfZ2VtX3By aW1lX2V4cG9ydChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGZsYWdzKTsKLXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqdWRsX2dlbV9wcmltZV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKLQkJCQlzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7Ci0KLWludCB1ZGxfZ2VtX2dldF9w YWdlcyhzdHJ1Y3QgdWRsX2dlbV9vYmplY3QgKm9iaik7Ci12b2lkIHVkbF9nZW1fcHV0X3BhZ2Vz KHN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqb2JqKTsKLWludCB1ZGxfZ2VtX3ZtYXAoc3RydWN0IHVk bF9nZW1fb2JqZWN0ICpvYmopOwotdm9pZCB1ZGxfZ2VtX3Z1bm1hcChzdHJ1Y3QgdWRsX2dlbV9v YmplY3QgKm9iaik7Ci1pbnQgdWRsX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotdm1fZmF1bHRfdCB1ZGxfZ2VtX2ZhdWx0KHN0cnVj dCB2bV9mYXVsdCAqdm1mKTsKIAogaW50IHVkbF9oYW5kbGVfZGFtYWdlKHN0cnVjdCB1ZGxfZnJh bWVidWZmZXIgKmZiLCBpbnQgeCwgaW50IHksCiAJCSAgICAgIGludCB3aWR0aCwgaW50IGhlaWdo dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9mYi5jIGIvZHJpdmVycy9n cHUvZHJtL3VkbC91ZGxfZmIuYwppbmRleCBlZjM1MDRkMDYzNDMuLjJhMTYzODY2ZWNkMSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZmIuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vdWRsL3VkbF9mYi5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9kcnYu aD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZm91 cmNjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmg+CiAjaW5jbHVkZSA8 ZHJtL2RybV9tb2Rlc2V0X2hlbHBlci5oPgogCiAjaW5jbHVkZSAidWRsX2Rydi5oIgpAQCAtOTQs MTYgKzk1LDE0IEBAIGludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgdWRsX2ZyYW1lYnVmZmVy ICpmYiwgaW50IHgsIGludCB5LAogCWlmICghZmItPmFjdGl2ZV8xNikKIAkJcmV0dXJuIDA7CiAK LQlpZiAoIWZiLT5vYmotPnZtYXBwaW5nKSB7Ci0JCXJldCA9IHVkbF9nZW1fdm1hcChmYi0+b2Jq KTsKLQkJaWYgKHJldCA9PSAtRU5PTUVNKSB7CisJaWYgKCFmYi0+c2htZW0tPnZhZGRyKSB7CisJ CXZvaWQgKnZhZGRyOworCisJCXZhZGRyID0gZHJtX2dlbV9zaG1lbV92bWFwKCZmYi0+c2htZW0t PmJhc2UpOworCQlpZiAoSVNfRVJSKHZhZGRyKSkgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g dm1hcCBmYlxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlpZiAoIWZiLT5vYmotPnZtYXBwaW5n KSB7Ci0JCQlEUk1fRVJST1IoImZhaWxlZCB0byB2bWFwcGluZ1xuIik7Ci0JCQlyZXR1cm4gMDsK LQkJfQogCX0KIAogCWFsaWduZWRfeCA9IERMX0FMSUdOX0RPV04oeCwgc2l6ZW9mKHVuc2lnbmVk IGxvbmcpKTsKQEAgLTEyNyw3ICsxMjYsNyBAQCBpbnQgdWRsX2hhbmRsZV9kYW1hZ2Uoc3RydWN0 IHVkbF9mcmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSwKIAkJY29uc3QgaW50IGJ5dGVfb2Zm c2V0ID0gbGluZV9vZmZzZXQgKyAoeCA8PCBsb2dfYnBwKTsKIAkJY29uc3QgaW50IGRldl9ieXRl X29mZnNldCA9IChmYi0+YmFzZS53aWR0aCAqIGkgKyB4KSA8PCBsb2dfYnBwOwogCQlpZiAodWRs X3JlbmRlcl9obGluZShkZXYsIGxvZ19icHAsICZ1cmIsCi0JCQkJICAgICAoY2hhciAqKSBmYi0+ b2JqLT52bWFwcGluZywKKwkJCQkgICAgIChjaGFyICopIGZiLT5zaG1lbS0+dmFkZHIsCiAJCQkJ ICAgICAmY21kLCBieXRlX29mZnNldCwgZGV2X2J5dGVfb2Zmc2V0LAogCQkJCSAgICAgd2lkdGgg PDwgbG9nX2JwcCwKIAkJCQkgICAgICZieXRlc19pZGVudGljYWwsICZieXRlc19zZW50KSkKQEAg LTI4MSw2ICsyODAsNyBAQCBzdGF0aWMgaW50IHVkbF91c2VyX2ZyYW1lYnVmZmVyX2RpcnR5KHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJCSAgICAgIHVuc2lnbmVkIG51bV9jbGlwcykK IHsKIAlzdHJ1Y3QgdWRsX2ZyYW1lYnVmZmVyICp1ZmIgPSB0b191ZGxfZmIoZmIpOworCXN0cnVj dCBkbWFfYnVmX2F0dGFjaG1lbnQgKmltcG9ydF9hdHRhY2g7CiAJaW50IGk7CiAJaW50IHJldCA9 IDA7CiAKQEAgLTI4OSw4ICsyODksMTAgQEAgc3RhdGljIGludCB1ZGxfdXNlcl9mcmFtZWJ1ZmZl cl9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAlpZiAoIXVmYi0+YWN0aXZlXzE2 KQogCQlnb3RvIHVubG9jazsKIAotCWlmICh1ZmItPm9iai0+YmFzZS5pbXBvcnRfYXR0YWNoKSB7 Ci0JCXJldCA9IGRtYV9idWZfYmVnaW5fY3B1X2FjY2Vzcyh1ZmItPm9iai0+YmFzZS5pbXBvcnRf YXR0YWNoLT5kbWFidWYsCisJaW1wb3J0X2F0dGFjaCA9IHVmYi0+c2htZW0tPmJhc2UuaW1wb3J0 X2F0dGFjaDsKKworCWlmIChpbXBvcnRfYXR0YWNoKSB7CisJCXJldCA9IGRtYV9idWZfYmVnaW5f Y3B1X2FjY2VzcyhpbXBvcnRfYXR0YWNoLT5kbWFidWYsCiAJCQkJCSAgICAgICBETUFfRlJPTV9E RVZJQ0UpOwogCQlpZiAocmV0KQogCQkJZ290byB1bmxvY2s7CkBAIC0zMDQsOCArMzA2LDggQEAg c3RhdGljIGludCB1ZGxfdXNlcl9mcmFtZWJ1ZmZlcl9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKIAkJCWJyZWFrOwogCX0KIAotCWlmICh1ZmItPm9iai0+YmFzZS5pbXBvcnRfYXR0 YWNoKSB7Ci0JCXJldCA9IGRtYV9idWZfZW5kX2NwdV9hY2Nlc3ModWZiLT5vYmotPmJhc2UuaW1w b3J0X2F0dGFjaC0+ZG1hYnVmLAorCWlmIChpbXBvcnRfYXR0YWNoKSB7CisJCXJldCA9IGRtYV9i dWZfZW5kX2NwdV9hY2Nlc3MoaW1wb3J0X2F0dGFjaC0+ZG1hYnVmLAogCQkJCQkgICAgIERNQV9G Uk9NX0RFVklDRSk7CiAJfQogCkBAIC0zMTksOCArMzIxLDggQEAgc3RhdGljIHZvaWQgdWRsX3Vz ZXJfZnJhbWVidWZmZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKIHsKIAlz dHJ1Y3QgdWRsX2ZyYW1lYnVmZmVyICp1ZmIgPSB0b191ZGxfZmIoZmIpOwogCi0JaWYgKHVmYi0+ b2JqKQotCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJnVmYi0+b2JqLT5iYXNlKTsKKwlp ZiAodWZiLT5zaG1lbSkKKwkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZ1ZmItPnNobWVt LT5iYXNlKTsKIAogCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKIAlrZnJlZSh1ZmIpOwpA QCAtMzM2LDExICszMzgsMTEgQEAgc3RhdGljIGludAogdWRsX2ZyYW1lYnVmZmVyX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3QgdWRsX2ZyYW1lYnVmZmVyICp1ZmIs CiAJCSAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kLAotCQkgICAg IHN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqb2JqKQorCQkgICAgIHN0cnVjdCBkcm1fZ2VtX3NobWVt X29iamVjdCAqc2htZW0pCiB7CiAJaW50IHJldDsKIAotCXVmYi0+b2JqID0gb2JqOworCXVmYi0+ c2htZW0gPSBzaG1lbTsKIAlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoZGV2LCAmdWZi LT5iYXNlLCBtb2RlX2NtZCk7CiAJcmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCAmdWZi LT5iYXNlLCAmdWRsZmJfZnVuY3MpOwogCXJldHVybiByZXQ7CkBAIC0zNTYsNyArMzU4LDggQEAg c3RhdGljIGludCB1ZGxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKIAlz dHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKIAlzdHJ1 Y3QgZHJtX21vZGVfZmJfY21kMiBtb2RlX2NtZDsKLQlzdHJ1Y3QgdWRsX2dlbV9vYmplY3QgKm9i ajsKKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtOworCXZvaWQgKnZhZGRyOwog CXVpbnQzMl90IHNpemU7CiAJaW50IHJldCA9IDA7CiAKQEAgLTM3MywxMiArMzc2LDE1IEBAIHN0 YXRpYyBpbnQgdWRsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCiAJc2l6 ZSA9IG1vZGVfY21kLnBpdGNoZXNbMF0gKiBtb2RlX2NtZC5oZWlnaHQ7CiAJc2l6ZSA9IEFMSUdO KHNpemUsIFBBR0VfU0laRSk7CiAKLQlvYmogPSB1ZGxfZ2VtX2FsbG9jX29iamVjdChkZXYsIHNp emUpOwotCWlmICghb2JqKQorCXNobWVtID0gZHJtX2dlbV9zaG1lbV9jcmVhdGUoZGV2LCBzaXpl KTsKKwlpZiAoSVNfRVJSKHNobWVtKSkgeworCQlyZXQgPSBQVFJfRVJSKHNobWVtKTsKIAkJZ290 byBvdXQ7CisJfQogCi0JcmV0ID0gdWRsX2dlbV92bWFwKG9iaik7Ci0JaWYgKHJldCkgeworCXZh ZGRyID0gZHJtX2dlbV9zaG1lbV92bWFwKCZzaG1lbS0+YmFzZSk7CisJaWYgKElTX0VSUih2YWRk cikpIHsKKwkJcmV0ID0gUFRSX0VSUih2YWRkcik7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIHZt YXAgZmJcbiIpOwogCQlnb3RvIG91dF9nZnJlZTsKIAl9CkBAIC0zODksNyArMzk1LDcgQEAgc3Rh dGljIGludCB1ZGxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKIAkJZ290 byBvdXRfZ2ZyZWU7CiAJfQogCi0JcmV0ID0gdWRsX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCAmdWZi ZGV2LT51ZmIsICZtb2RlX2NtZCwgb2JqKTsKKwlyZXQgPSB1ZGxfZnJhbWVidWZmZXJfaW5pdChk ZXYsICZ1ZmJkZXYtPnVmYiwgJm1vZGVfY21kLCBzaG1lbSk7CiAJaWYgKHJldCkKIAkJZ290byBv dXRfZ2ZyZWU7CiAKQEAgLTM5NywyMCArNDAzLDIwIEBAIHN0YXRpYyBpbnQgdWRsZmJfY3JlYXRl KHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCiAKIAl1ZmJkZXYtPmhlbHBlci5mYiA9IGZi OwogCi0JaW5mby0+c2NyZWVuX2Jhc2UgPSB1ZmJkZXYtPnVmYi5vYmotPnZtYXBwaW5nOworCWlu Zm8tPnNjcmVlbl9iYXNlID0gdmFkZHI7CiAJaW5mby0+Zml4LnNtZW1fbGVuID0gc2l6ZTsKLQlp bmZvLT5maXguc21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKXVmYmRldi0+dWZiLm9iai0+dm1h cHBpbmc7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKIAog CWluZm8tPmZib3BzID0gJnVkbGZiX29wczsKIAlkcm1fZmJfaGVscGVyX2ZpbGxfaW5mbyhpbmZv LCAmdWZiZGV2LT5oZWxwZXIsIHNpemVzKTsKIAogCURSTV9ERUJVR19LTVMoImFsbG9jYXRlZCAl ZHglZCB2bWFsICVwXG4iLAogCQkgICAgICBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCi0JCSAgICAg IHVmYmRldi0+dWZiLm9iai0+dm1hcHBpbmcpOworCQkgICAgICB1ZmJkZXYtPnVmYi5zaG1lbS0+ dmFkZHIpOwogCiAJcmV0dXJuIHJldDsKIG91dF9nZnJlZToKLQlkcm1fZ2VtX29iamVjdF9wdXRf dW5sb2NrZWQoJnVmYmRldi0+dWZiLm9iai0+YmFzZSk7CisJZHJtX2dlbV9vYmplY3RfcHV0X3Vu bG9ja2VkKCZ1ZmJkZXYtPnVmYi5zaG1lbS0+YmFzZSk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0K QEAgLTQyNCwxMCArNDMwLDEwIEBAIHN0YXRpYyB2b2lkIHVkbF9mYmRldl9kZXN0cm95KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCiB7CiAJZHJtX2ZiX2hlbHBlcl91bnJlZ2lzdGVyX2ZiaSgmdWZi ZGV2LT5oZWxwZXIpOwogCWRybV9mYl9oZWxwZXJfZmluaSgmdWZiZGV2LT5oZWxwZXIpOwotCWlm ICh1ZmJkZXYtPnVmYi5vYmopIHsKKwlpZiAodWZiZGV2LT51ZmIuc2htZW0pIHsKIAkJZHJtX2Zy YW1lYnVmZmVyX3VucmVnaXN0ZXJfcHJpdmF0ZSgmdWZiZGV2LT51ZmIuYmFzZSk7CiAJCWRybV9m cmFtZWJ1ZmZlcl9jbGVhbnVwKCZ1ZmJkZXYtPnVmYi5iYXNlKTsKLQkJZHJtX2dlbV9vYmplY3Rf cHV0X3VubG9ja2VkKCZ1ZmJkZXYtPnVmYi5vYmotPmJhc2UpOworCQlkcm1fZ2VtX29iamVjdF9w dXRfdW5sb2NrZWQoJnVmYmRldi0+dWZiLnNobWVtLT5iYXNlKTsKIAl9CiB9CiAKQEAgLTUxOCw3 ICs1MjQsOCBAQCB1ZGxfZmJfdXNlcl9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK IAlpZiAodWZiID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JcmV0ID0g dWRsX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCB1ZmIsIG1vZGVfY21kLCB0b191ZGxfYm8ob2JqKSk7 CisJcmV0ID0gdWRsX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCB1ZmIsIG1vZGVfY21kLAorCQkJCSAg IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaikpOwogCWlmIChyZXQpIHsKIAkJa2ZyZWUodWZiKTsK IAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dWRsL3VkbF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX2dlbS5jCmluZGV4IDYyODc0 OWNjMTE0My4uYWM4MmUwNjQ2M2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdWRsL3Vk bF9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9nZW0uYwpAQCAtNywyMjkgKzcs NzYgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlIDxkcm0vZHJtX2Ry di5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oPgogI2luY2x1ZGUgPGRy bS9kcm1fbW9kZS5oPgogI2luY2x1ZGUgPGRybS9kcm1fcHJpbWUuaD4KIAogI2luY2x1ZGUgInVk bF9kcnYuaCIKIAogLyoKLSAqIEhlbHBlcnMgZm9yIHN0cnVjdCBkcm1fZHJpdmVyCisgKiBHRU0g b2JqZWN0IGZ1bmNzCiAgKi8KIAotc3RydWN0IGRybV9nZW1fb2JqZWN0ICp1ZGxfZHJpdmVyX2dl bV9jcmVhdGVfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJCQkgICAgc2l6ZV90 IHNpemUpCi17Ci0Jc3RydWN0IHVkbF9nZW1fb2JqZWN0ICpvYmo7Ci0KLQlvYmogPSBremFsbG9j KHNpemVvZigqb2JqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvYmopCi0JCXJldHVybiBOVUxMOwot Ci0JcmV0dXJuICZvYmotPmJhc2U7Ci19Ci0KLXN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqdWRsX2dl bV9hbGxvY19vYmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJICAgIHNpemVfdCBz aXplKQotewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCi0Jb2JqID0gZGV2LT5kcml2 ZXItPmdlbV9jcmVhdGVfb2JqZWN0KGRldiwgc2l6ZSk7Ci0JaWYgKG9iaiA9PSBOVUxMKQotCQly ZXR1cm4gTlVMTDsKLQotCWlmIChkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgb2JqLCBzaXplKSAh PSAwKSB7Ci0JCWtmcmVlKG9iaik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiB0b191 ZGxfYm8ob2JqKTsKLX0KLQotc3RhdGljIGludAotdWRsX2dlbV9jcmVhdGUoc3RydWN0IGRybV9m aWxlICpmaWxlLAotCSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCSAgICAgICB1aW50 NjRfdCBzaXplLAotCSAgICAgICB1aW50MzJfdCAqaGFuZGxlX3ApCi17Ci0Jc3RydWN0IHVkbF9n ZW1fb2JqZWN0ICpvYmo7Ci0JaW50IHJldDsKLQl1MzIgaGFuZGxlOwotCi0Jc2l6ZSA9IHJvdW5k dXAoc2l6ZSwgUEFHRV9TSVpFKTsKLQotCW9iaiA9IHVkbF9nZW1fYWxsb2Nfb2JqZWN0KGRldiwg c2l6ZSk7Ci0JaWYgKG9iaiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldCA9IGRy bV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlLCAmb2JqLT5iYXNlLCAmaGFuZGxlKTsKLQlpZiAocmV0 KSB7Ci0JCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJm9iai0+YmFzZSk7Ci0JCWtmcmVlKG9iaik7 Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZvYmot PmJhc2UpOwotCSpoYW5kbGVfcCA9IGhhbmRsZTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHVkbF9k dW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCi0JCSAgICBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAotCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKQorc3RhdGlj IHZvaWQgdWRsX2dlbV9vYmplY3RfZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmopCiB7Ci0JYXJncy0+cGl0Y2ggPSBhcmdzLT53aWR0aCAqIERJVl9ST1VORF9VUChhcmdzLT5i cHAsIDgpOwotCWFyZ3MtPnNpemUgPSBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKLQlyZXR1 cm4gdWRsX2dlbV9jcmVhdGUoZmlsZSwgZGV2LAotCQkJICAgICAgYXJncy0+c2l6ZSwgJmFyZ3Mt PmhhbmRsZSk7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9n ZW1fc2htZW1fb2JqKG9iaik7CisKKwkvKiBGYmRldiBlbXVsYXRpb24gdm1hcHMgdGhlIGJ1ZmZl ci4gVW5tYXAgaXQgaGVyZSBmb3IgY29uc2lzdGVuY3kKKwkgKiB3aXRoIHRoZSBvcmlnaW5hbCB1 ZGwgR0VNIGNvZGUuCisJICoKKwkgKiBUT0RPOiBTd2l0Y2ggdG8gZ2VuZXJpYyBmYmRldiBlbXVs YXRpb24gYW5kIHJlbGVhc2UgdGhlCisJICogICAgICAgR0VNIG9iamVjdCB3aXRoIGRybV9nZW1f c2htZW1fZnJlZV9vYmplY3QoKS4KKwkgKi8KKwlpZiAoc2htZW0tPnZhZGRyKQorCQlkcm1fZ2Vt X3NobWVtX3Z1bm1hcChvYmosIHNobWVtLT52YWRkcik7CisKKwlkcm1fZ2VtX3NobWVtX2ZyZWVf b2JqZWN0KG9iaik7CiB9CiAKLWludCB1ZGxfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxw LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyBpbnQgdWRsX2dlbV9vYmplY3Rf bW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIAlpbnQgcmV0 OwogCi0JcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJcmV0ID0gZHJtX2dlbV9zaG1l bV9tbWFwKG9iaiwgdm1hKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jb2JqID0gdm1h LT52bV9wcml2YXRlX2RhdGE7Ci0KLQl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7Ci0Jdm1h LT52bV9mbGFncyB8PSBWTV9NSVhFRE1BUDsKLQogCXZtYS0+dm1fcGFnZV9wcm90ID0gdm1fZ2V0 X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKTsKIAlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKQogCQl2 bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLT52bV9wYWdlX3Byb3Qp OworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtPnZtX3BhZ2VfcHJv dCk7CiAKLQlyZXR1cm4gcmV0OwotfQotCi12bV9mYXVsdF90IHVkbF9nZW1fZmF1bHQoc3RydWN0 IHZtX2ZhdWx0ICp2bWYpCi17Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtPnZt YTsKLQlzdHJ1Y3QgdWRsX2dlbV9vYmplY3QgKm9iaiA9IHRvX3VkbF9ibyh2bWEtPnZtX3ByaXZh dGVfZGF0YSk7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0 OwotCi0JcGFnZV9vZmZzZXQgPSAodm1mLT5hZGRyZXNzIC0gdm1hLT52bV9zdGFydCkgPj4gUEFH RV9TSElGVDsKLQotCWlmICghb2JqLT5wYWdlcykKLQkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsK LQotCXBhZ2UgPSBvYmotPnBhZ2VzW3BhZ2Vfb2Zmc2V0XTsKLQlyZXR1cm4gdm1mX2luc2VydF9w YWdlKHZtYSwgdm1mLT5hZGRyZXNzLCBwYWdlKTsKLX0KLQotaW50IHVkbF9nZW1fZ2V0X3BhZ2Vz KHN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqb2JqKQotewotCXN0cnVjdCBwYWdlICoqcGFnZXM7Ci0K LQlpZiAob2JqLT5wYWdlcykKLQkJcmV0dXJuIDA7Ci0KLQlwYWdlcyA9IGRybV9nZW1fZ2V0X3Bh Z2VzKCZvYmotPmJhc2UpOwotCWlmIChJU19FUlIocGFnZXMpKQotCQlyZXR1cm4gUFRSX0VSUihw YWdlcyk7Ci0KLQlvYmotPnBhZ2VzID0gcGFnZXM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB1 ZGxfZ2VtX3B1dF9wYWdlcyhzdHJ1Y3QgdWRsX2dlbV9vYmplY3QgKm9iaikKLXsKLQlpZiAob2Jq LT5iYXNlLmltcG9ydF9hdHRhY2gpIHsKLQkJa3ZmcmVlKG9iai0+cGFnZXMpOwotCQlvYmotPnBh Z2VzID0gTlVMTDsKLQkJcmV0dXJuOwotCX0KLQotCWRybV9nZW1fcHV0X3BhZ2VzKCZvYmotPmJh c2UsIG9iai0+cGFnZXMsIGZhbHNlLCBmYWxzZSk7Ci0Jb2JqLT5wYWdlcyA9IE5VTEw7Ci19Ci0K LWludCB1ZGxfZ2VtX3ZtYXAoc3RydWN0IHVkbF9nZW1fb2JqZWN0ICpvYmopCi17Ci0JaW50IHBh Z2VfY291bnQgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKLQlpbnQgcmV0OwotCi0JaWYg KG9iai0+YmFzZS5pbXBvcnRfYXR0YWNoKSB7Ci0JCW9iai0+dm1hcHBpbmcgPSBkbWFfYnVmX3Zt YXAob2JqLT5iYXNlLmltcG9ydF9hdHRhY2gtPmRtYWJ1Zik7Ci0JCWlmICghb2JqLT52bWFwcGlu ZykKLQkJCXJldHVybiAtRU5PTUVNOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSB1ZGxfZ2Vt X2dldF9wYWdlcyhvYmopOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlvYmotPnZtYXBw aW5nID0gdm1hcChvYmotPnBhZ2VzLCBwYWdlX2NvdW50LCAwLCBQQUdFX0tFUk5FTCk7Ci0JaWYg KCFvYmotPnZtYXBwaW5nKQotCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKIH0KIAotdm9p ZCB1ZGxfZ2VtX3Z1bm1hcChzdHJ1Y3QgdWRsX2dlbV9vYmplY3QgKm9iaikKLXsKLQlpZiAob2Jq LT5iYXNlLmltcG9ydF9hdHRhY2gpIHsKLQkJZG1hX2J1Zl92dW5tYXAob2JqLT5iYXNlLmltcG9y dF9hdHRhY2gtPmRtYWJ1Ziwgb2JqLT52bWFwcGluZyk7Ci0JCXJldHVybjsKLQl9Ci0KLQl2dW5t YXAob2JqLT52bWFwcGluZyk7Ci0KLQl1ZGxfZ2VtX3B1dF9wYWdlcyhvYmopOwotfQotCi12b2lk IHVkbF9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQotewot CXN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqb2JqID0gdG9fdWRsX2JvKGdlbV9vYmopOwotCi0JaWYg KG9iai0+dm1hcHBpbmcpCi0JCXVkbF9nZW1fdnVubWFwKG9iaik7Ci0KLQlpZiAoZ2VtX29iai0+ aW1wb3J0X2F0dGFjaCkgewotCQlkcm1fcHJpbWVfZ2VtX2Rlc3Ryb3koZ2VtX29iaiwgb2JqLT5z Zyk7Ci0JCXB1dF9kZXZpY2UoZ2VtX29iai0+ZGV2LT5kZXYpOwotCX0KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3MgdWRsX2dlbV9vYmplY3RfZnVuY3MgPSB7CisJLmZy ZWUgPSB1ZGxfZ2VtX29iamVjdF9mcmVlX29iamVjdCwKKwkucHJpbnRfaW5mbyA9IGRybV9nZW1f c2htZW1fcHJpbnRfaW5mbywKKwkucGluID0gZHJtX2dlbV9zaG1lbV9waW4sCisJLnVucGluID0g ZHJtX2dlbV9zaG1lbV91bnBpbiwKKwkuZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9zaG1lbV9nZXRf c2dfdGFibGUsCisJLnZtYXAgPSBkcm1fZ2VtX3NobWVtX3ZtYXAsCisJLnZ1bm1hcCA9IGRybV9n ZW1fc2htZW1fdnVubWFwLAorCS5tbWFwID0gdWRsX2dlbV9vYmplY3RfbW1hcCwKK307CiAKLQlp ZiAob2JqLT5wYWdlcykKLQkJdWRsX2dlbV9wdXRfcGFnZXMob2JqKTsKLQotCWRybV9nZW1fZnJl ZV9tbWFwX29mZnNldChnZW1fb2JqKTsKLX0KKy8qCisgKiBIZWxwZXJzIGZvciBzdHJ1Y3QgZHJt X2RyaXZlcgorICovCiAKLS8qIHRoZSBkdW1iIGludGVyZmFjZSBkb2Vzbid0IHdvcmsgd2l0aCB0 aGUgR0VNIHN0cmFpZ2h0IE1NQVAKLSAgIGludGVyZmFjZSwgaXQgZXhwZWN0cyB0byBkbyBNTUFQ IG9uIHRoZSBkcm0gZmQsIGxpa2Ugbm9ybWFsICovCi1pbnQgdWRsX2dlbV9tbWFwKHN0cnVjdCBk cm1fZmlsZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJIHVpbnQzMl90IGhhbmRs ZSwgdWludDY0X3QgKm9mZnNldCkKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqdWRsX2RyaXZlcl9n ZW1fY3JlYXRlX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJICAgIHNpemVf dCBzaXplKQogewotCXN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqZ29iajsKKwlzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCXN0 cnVjdCB1ZGxfZGV2aWNlICp1ZGwgPSB0b191ZGwoZGV2KTsKLQlpbnQgcmV0ID0gMDsKLQotCW11 dGV4X2xvY2soJnVkbC0+Z2VtX2xvY2spOwotCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChm aWxlLCBoYW5kbGUpOwotCWlmIChvYmogPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PRU5UOwotCQln b3RvIHVubG9jazsKLQl9Ci0JZ29iaiA9IHRvX3VkbF9ibyhvYmopOwotCi0JcmV0ID0gdWRsX2dl bV9nZXRfcGFnZXMoZ29iaik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gZHJtX2dl bV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKIAotCSpv ZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJmdvYmotPmJhc2Uudm1hX25vZGUpOwor CXNobWVtID0ga3phbGxvYyhzaXplb2YoKnNobWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaG1l bSkKKwkJcmV0dXJuIE5VTEw7CisKKwlvYmogPSAmc2htZW0tPmJhc2U7CisJb2JqLT5mdW5jcyA9 ICZ1ZGxfZ2VtX29iamVjdF9mdW5jczsKIAotb3V0OgotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxv Y2tlZCgmZ29iai0+YmFzZSk7Ci11bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZ1ZGwtPmdlbV9sb2Nr KTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBvYmo7CiB9Ci0tIAoyLjIzLjAKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==