From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benjamin Gaignard Subject: [PATCH v6 1/3] create SMAF module Date: Thu, 18 Feb 2016 16:05:15 +0100 Message-ID: <1455807917-19901-2-git-send-email-benjamin.gaignard@linaro.org> References: <1455807917-19901-1-git-send-email-benjamin.gaignard@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x22f.google.com (mail-wm0-x22f.google.com [IPv6:2a00:1450:400c:c09::22f]) by gabe.freedesktop.org (Postfix) with ESMTPS id E8E536EC27 for ; Thu, 18 Feb 2016 15:06:29 +0000 (UTC) Received: by mail-wm0-x22f.google.com with SMTP id g62so29790568wme.0 for ; Thu, 18 Feb 2016 07:06:29 -0800 (PST) In-Reply-To: <1455807917-19901-1-git-send-email-benjamin.gaignard@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-security-module@vger.kernel.org, laurent.pinchart@ideasonboard.com, zoltan.kuscsik@linaro.org, sumit.semwal@linaro.org, cc.ma@mediatek.com Cc: Benjamin Gaignard List-Id: dri-devel@lists.freedesktop.org U2VjdXJlIE1lbW9yeSBBbGxvY2F0aW9uIEZyYW1ld29yayBnb2FsIGlzIHRvIGJlIGFibGUKdG8g YWxsb2NhdGUgbWVtb3J5IHRoYXQgY2FuIGJlIHNlY3VyaW5nLgpUaGVyZSBpcyBzbyBtdWNoIHdh eXMgdG8gYWxsb2NhdGUgYW5kIHNlY3VyaW5nIG1lbW9yeSB0aGF0IFNNQUYKZG9lc24ndCBkbyBp dCBieSBpdHNlbGYgYnV0IG5lZWQgaGVscCBvZiBhZGRpdGlvbmFsIG1vZHVsZXMuClRvIGJlIHN1 cmUgdG8gdXNlIHRoZSBjb3JyZWN0IGFsbG9jYXRpb24gbWV0aG9kIFNNQUYgaW1wbGVtZW50CmRl ZmVycmVkIGFsbG9jYXRpb24gKGkuZS4gYWxsb2NhdGUgbWVtb3J5IHdoZW4gb25seSByZWFsbHkg bmVlZGVkKQoKQWxsb2NhdGlvbiBtb2R1bGVzIChzbWFmLWFsbG9jdG9yLmgpOgpTTUFGIGNvdWxk IG1hbmFnZSB3aXRoIG11bHRpcGxlIGFsbG9jYXRpb24gbW9kdWxlcyBhdCBzYW1lIHRpbWUuClRv IHNlbGVjdCB0aGUgZ29vZCBvbmUgU01BRiBjYWxsIG1hdGNoKCkgdG8gYmUgc3VyZSB0aGF0IGEg bW9kdWxlCmNhbiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgZ2l2ZW4gbGlzdCBvZiBkZXZpY2VzLiBJ dCBpcyB0byB0aGUgbW9kdWxlCnRvIGNoZWNrIGlmIHRoZSBkZXZpY2VzIGFyZSBjb21wYXRpYmxl IG9yIG5vdCB3aXRoIGl0IGFsbG9jYXRpb24KbWV0aG9kLgoKU2VjdXJpbmcgbW9kdWxlIChzbWFm LXNlY3VyZS5oKToKVGhlIHdheSBvZiBob3cgc2VjdXJpbmcgbWVtb3J5IGl0IGlzIGRvbmUgaXMg cGxhdGZvcm0gc3BlY2lmaWMuClNlY3VyZSBtb2R1bGUgaXMgcmVzcG9uc2libGUgb2YgZ3JhbnQv cmV2b2tlIG1lbW9yeSBhY2Nlc3MuCgpTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBHYWlnbmFyZCA8 YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4KLS0tCiBkcml2ZXJzL0tjb25maWcgICAgICAg ICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxICsK IGRyaXZlcnMvc21hZi9LY29uZmlnICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJzL3NtYWYvTWFr ZWZpbGUgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9zbWFmL3NtYWYtY29yZS5jICAgICAgIHwg NzUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2xp bnV4L3NtYWYtYWxsb2NhdG9yLmggfCAgNTQgKysrCiBpbmNsdWRlL2xpbnV4L3NtYWYtc2VjdXJl LmggICAgfCAgNzUgKysrKwogaW5jbHVkZS91YXBpL2xpbnV4L3NtYWYuaCAgICAgIHwgIDUyICsr KwogOCBmaWxlcyBjaGFuZ2VkLCA5NDEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc21hZi9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zbWFmL01h a2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zbWFmL3NtYWYtY29yZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9zbWFmLWFsbG9jYXRvci5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgaW5jbHVkZS9saW51eC9zbWFmLXNlY3VyZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS91YXBpL2xpbnV4L3NtYWYuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvS2NvbmZpZyBi L2RyaXZlcnMvS2NvbmZpZwppbmRleCBkMmFjMzM5Li5mNTI2MmZkIDEwMDY0NAotLS0gYS9kcml2 ZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9LY29uZmlnCkBAIC0xOTgsNCArMTk4LDYgQEAgc291 cmNlICJkcml2ZXJzL2h3dHJhY2luZy9pbnRlbF90aC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZl cnMvZnBnYS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc21hZi9LY29uZmlnIgorCiBlbmRt ZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRl eCA4ZjVkMDc2Li5iMmZiMDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvTWFrZWZpbGUKQEAgLTE3MiwzICsxNzIsNCBAQCBvYmotJChDT05GSUdfU1RNKQkJKz0g aHd0cmFjaW5nL3N0bS8KIG9iai0kKENPTkZJR19BTkRST0lEKQkJKz0gYW5kcm9pZC8KIG9iai0k KENPTkZJR19OVk1FTSkJCSs9IG52bWVtLwogb2JqLSQoQ09ORklHX0ZQR0EpCQkrPSBmcGdhLwor b2JqLSQoQ09ORklHX1NNQUYpIAkJKz0gc21hZi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc21hZi9L Y29uZmlnIGIvZHJpdmVycy9zbWFmL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZDM2NjUxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc21hZi9LY29uZmln CkBAIC0wLDAgKzEsNSBAQAorY29uZmlnIFNNQUYKKwl0cmlzdGF0ZSAiU2VjdXJlIE1lbW9yeSBB bGxvY2F0aW9uIEZyYW1ld29yayIKKwlkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSCisJaGVs cAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBTZWN1cmUgTWVtb3J5IEFsbG9jYXRp b24gRnJhbWV3b3JrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NtYWYvTWFrZWZpbGUgYi9kcml2ZXJz L3NtYWYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjZDg4 MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc21hZi9NYWtlZmlsZQpAQCAtMCwwICsxIEBA CitvYmotJChDT05GSUdfU01BRikgKz0gc21hZi1jb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv c21hZi9zbWFmLWNvcmUuYyBiL2RyaXZlcnMvc21hZi9zbWFmLWNvcmUuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2M4NjU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9zbWFmL3NtYWYtY29yZS5jCkBAIC0wLDAgKzEsNzUxIEBACisvKgorICogc21hZi5jCisgKgor ICogQ29weXJpZ2h0IChDKSBMaW5hcm8gU0EgMjAxNQorICogQXV0aG9yOiBCZW5qYW1pbiBHYWln bmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4gZm9yIExpbmFyby4KKyAqIExpY2Vu c2UgdGVybXM6ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cisj aW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0X3NvcnQuaD4KKyNp bmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYWYuaD4KKyNpbmNsdWRl IDxsaW51eC9zbWFmLWFsbG9jYXRvci5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYWYtc2VjdXJlLmg+ CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCitzdHJ1Y3Qgc21hZl9oYW5kbGUgeworCXN0 cnVjdCBkbWFfYnVmICpkbWFidWY7CisJc3RydWN0IHNtYWZfYWxsb2NhdG9yICphbGxvY2F0b3I7 CisJc3RydWN0IGRtYV9idWYgKmRiX2FsbG9jOworCXNpemVfdCBsZW5ndGg7CisJdW5zaWduZWQg aW50IGZsYWdzOworCWludCBmZDsKKwlhdG9taWNfdCBpc19zZWN1cmU7CisJdm9pZCAqc2VjdXJl X2N0eDsKK307CisKKy8qKgorICogc3RydWN0IHNtYWZfZGV2aWNlIC0gc21hZiBkZXZpY2Ugbm9k ZSBwcml2YXRlIGRhdGEKKyAqIEBtaXNjX2RldjoJdGhlIG1pc2MgZGV2aWNlCisgKiBAaGVhZDoJ bGlzdCBvZiBhbGxvY2F0b3IKKyAqIEBsb2NrOglsaXN0IGFuZCBzZWN1cmUgcG9pbnRlciBtdXRl eAorICogQHNlY3VyZToJcG9pbnRlciB0byBzZWN1cmUgZnVuY3Rpb25zIGhlbHBlcnMKKyAqLwor c3RydWN0IHNtYWZfZGV2aWNlIHsKKwlzdHJ1Y3QgbWlzY2RldmljZSBtaXNjX2RldjsKKwlzdHJ1 Y3QgbGlzdF9oZWFkIGhlYWQ7CisJLyogbGlzdCBhbmQgc2VjdXJlIHBvaW50ZXIgbG9jayovCisJ c3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IHNtYWZfc2VjdXJlICpzZWN1cmU7Cit9OworCitz dGF0aWMgc3RydWN0IHNtYWZfZGV2aWNlIHNtYWZfZGV2OworCitzdGF0aWMgYm9vbCBoYXZlX3Nl Y3VyZV9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gISFzbWFmX2Rldi5zZWN1cmU7Cit9CisKKy8q KgorICogc21hZl9hbGxvd19jcHVfYWNjZXNzIHJldHVybiB0cnVlIGlmIENQVSBjYW4gYWNjZXNz IHRvIG1lbW9yeQorICogaWYgdGhlaXIgaXMgbm8gc2VjdXJlIG1vZHVsZSBhc3NvY2lhdGVkIHRv IFNNQUYgYXNzdW1lIHRoYXQgQ1BVIGNhbiBnZXQKKyAqIGFjY2VzcyB0byB0aGUgbWVtb3J5Lgor ICovCitzdGF0aWMgYm9vbCBzbWFmX2FsbG93X2NwdV9hY2Nlc3Moc3RydWN0IHNtYWZfaGFuZGxl ICpoYW5kbGUsCisJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWJvb2wgcmV0ID0gdHJ1 ZTsKKworCWlmICghYXRvbWljX3JlYWQoJmhhbmRsZS0+aXNfc2VjdXJlKSkKKwkJcmV0dXJuIHRy dWU7CisKKwltdXRleF9sb2NrKCZzbWFmX2Rldi5sb2NrKTsKKworCWlmICghaGF2ZV9zZWN1cmVf bW9kdWxlKCkpCisJCWdvdG8gdW5sb2NrOworCisJcmV0ID0gc21hZl9kZXYuc2VjdXJlLT5hbGxv d19jcHVfYWNjZXNzKGhhbmRsZS0+c2VjdXJlX2N0eCwgZmxhZ3MpOworCit1bmxvY2s6CisJbXV0 ZXhfdW5sb2NrKCZzbWFmX2Rldi5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHNt YWZfZ3JhbnRfYWNjZXNzIC0gcmV0dXJuIHRydWUgaWYgdGhlIHNwZWNpZmllZCBkZXZpY2UgY2Fu IGdldCBhY2Nlc3MKKyAqIHRvIHRoZSBtZW1vcnkgYXJlYQorICoKKyAqIFRoaXMgZnVuY3Rpb24g bXVzdCBiZSBjYWxsZWQgd2l0aCBzbWFmX2Rldi5sb2NrIHNldAorICovCitzdGF0aWMgYm9vbCBz bWFmX2dyYW50X2FjY2VzcyhzdHJ1Y3Qgc21hZl9oYW5kbGUgKmhhbmRsZSwgc3RydWN0IGRldmlj ZSAqZGV2LAorCQkJICAgICAgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAg IGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlpZiAoIWF0b21pY19yZWFkKCZoYW5k bGUtPmlzX3NlY3VyZSkpCisJCXJldHVybiB0cnVlOworCisJaWYgKCFoYXZlX3NlY3VyZV9tb2R1 bGUoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHNtYWZfZGV2LnNlY3VyZS0+Z3JhbnRf YWNjZXNzKGhhbmRsZS0+c2VjdXJlX2N0eCwKKwkJCQkJICAgICBkZXYsIGFkZHIsIHNpemUsIGRp cik7Cit9CisKKy8qKgorICogc21hZl9yZXZva2VfYWNjZXNzCisgKiBUaGlzIGZ1bmN0aW9uIG11 c3QgYmUgY2FsbGVkIHdpdGggc21hZl9kZXYubG9jayBzZXQKKyAqLworc3RhdGljIHZvaWQgc21h Zl9yZXZva2VfYWNjZXNzKHN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlLCBzdHJ1Y3QgZGV2aWNl ICpkZXYsCisJCQkgICAgICAgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAg ICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJaWYgKCFhdG9taWNfcmVhZCgmaGFu ZGxlLT5pc19zZWN1cmUpKQorCQlyZXR1cm47CisKKwlpZiAoIWhhdmVfc2VjdXJlX21vZHVsZSgp KQorCQlyZXR1cm47CisKKwlzbWFmX2Rldi5zZWN1cmUtPnJldm9rZV9hY2Nlc3MoaGFuZGxlLT5z ZWN1cmVfY3R4LAorCQkJCSAgICAgICBkZXYsIGFkZHIsIHNpemUsIGRpcik7Cit9CisKK3N0YXRp YyBpbnQgc21hZl9zZWN1cmVfaGFuZGxlKHN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlKQorewor CWlmIChhdG9taWNfcmVhZCgmaGFuZGxlLT5pc19zZWN1cmUpKQorCQlyZXR1cm4gMDsKKworCWlm ICghaGF2ZV9zZWN1cmVfbW9kdWxlKCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaGFuZGxlLT5z ZWN1cmVfY3R4ID0gc21hZl9kZXYuc2VjdXJlLT5jcmVhdGVfY3R4KCk7CisKKwlpZiAoIWhhbmRs ZS0+c2VjdXJlX2N0eCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhdG9taWNfc2V0KCZoYW5kbGUt PmlzX3NlY3VyZSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc21hZl91bnNlY3Vy ZV9oYW5kbGUoc3RydWN0IHNtYWZfaGFuZGxlICpoYW5kbGUpCit7CisJaWYgKCFhdG9taWNfcmVh ZCgmaGFuZGxlLT5pc19zZWN1cmUpKQorCQlyZXR1cm4gMDsKKworCWlmICghaGF2ZV9zZWN1cmVf bW9kdWxlKCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNtYWZfZGV2LnNlY3VyZS0+ZGVz dHJveV9jdHgoaGFuZGxlLT5zZWN1cmVfY3R4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloYW5k bGUtPnNlY3VyZV9jdHggPSBOVUxMOworCWF0b21pY19zZXQoJmhhbmRsZS0+aXNfc2VjdXJlLCAw KTsKKwlyZXR1cm4gMDsKK30KKworaW50IHNtYWZfcmVnaXN0ZXJfc2VjdXJlKHN0cnVjdCBzbWFm X3NlY3VyZSAqcykKK3sKKwkvKiBtYWtlIHN1cmUgdGhhdCBzZWN1cmUgbW9kdWxlIGhhdmUgYWxs IHJlcXVpcmVkIGZ1bmN0aW9ucworCSAqIHRvIGF2b2lkIHRlc3QgdGhlbSBlYWNoIHRpbWUgbGF0 ZXIKKwkgKi8KKwlXQVJOX09OKCFzIHx8ICFzLT5jcmVhdGVfY3R4IHx8ICFzLT5kZXN0cm95X2N0 eCB8fAorCQkhcy0+Z3JhbnRfYWNjZXNzIHx8ICFzLT5yZXZva2VfYWNjZXNzIHx8ICFzLT5hbGxv d19jcHVfYWNjZXNzKTsKKworCW11dGV4X2xvY2soJnNtYWZfZGV2LmxvY2spOworCXNtYWZfZGV2 LnNlY3VyZSA9IHM7CisJbXV0ZXhfdW5sb2NrKCZzbWFmX2Rldi5sb2NrKTsKKworCXJldHVybiAw OworfQorRVhQT1JUX1NZTUJPTChzbWFmX3JlZ2lzdGVyX3NlY3VyZSk7CisKK3ZvaWQgc21hZl91 bnJlZ2lzdGVyX3NlY3VyZShzdHJ1Y3Qgc21hZl9zZWN1cmUgKnMpCit7CisJbXV0ZXhfbG9jaygm c21hZl9kZXYubG9jayk7CisJaWYgKHNtYWZfZGV2LnNlY3VyZSA9PSBzKQorCQlzbWFmX2Rldi5z ZWN1cmUgPSBOVUxMOworCW11dGV4X3VubG9jaygmc21hZl9kZXYubG9jayk7Cit9CitFWFBPUlRf U1lNQk9MKHNtYWZfdW5yZWdpc3Rlcl9zZWN1cmUpOworCitzdGF0aWMgc3RydWN0IHNtYWZfYWxs b2NhdG9yICpzbWFmX2ZpbmRfYWxsb2NhdG9yKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7CisJ c3RydWN0IHNtYWZfYWxsb2NhdG9yICphbGxvYzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxs b2MsICZzbWFmX2Rldi5oZWFkLCBsaXN0X25vZGUpIHsKKwkJaWYgKGFsbG9jLT5tYXRjaChkbWFi dWYpKQorCQkJcmV0dXJuIGFsbG9jOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMg c3RydWN0IHNtYWZfYWxsb2NhdG9yICpzbWFmX2dldF9maXJzdF9hbGxvY2F0b3Ioc3RydWN0IGRt YV9idWYgKmRtYWJ1ZikKK3sKKwkvKiB0aGUgZmlyc3QgYWxsb2NhdG9yIG9mIHRoZSBsaXN0IGlz IHRoZSBwcmVmZXJyZWQgYWxsb2NhdG9yICovCisJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJnNt YWZfZGV2LmhlYWQsIHN0cnVjdCBzbWFmX2FsbG9jYXRvciwKKwkJCWxpc3Rfbm9kZSk7Cit9CisK K3N0YXRpYyBpbnQgc21hZl9hbGxvY2F0b3JfY29tcGFyZSh2b2lkICpwcml2LAorCQkJCSAgc3Ry dWN0IGxpc3RfaGVhZCAqbGhfYSwKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmxoX2IpCit7CisJ c3RydWN0IHNtYWZfYWxsb2NhdG9yICphID0gbGlzdF9lbnRyeShsaF9hLAorCQkJCQkgICAgICBz dHJ1Y3Qgc21hZl9hbGxvY2F0b3IsIGxpc3Rfbm9kZSk7CisJc3RydWN0IHNtYWZfYWxsb2NhdG9y ICpiID0gbGlzdF9lbnRyeShsaF9iLAorCQkJCQkgICAgICBzdHJ1Y3Qgc21hZl9hbGxvY2F0b3Is IGxpc3Rfbm9kZSk7CisJaW50IGRpZmY7CisKKwlkaWZmID0gYi0+cmFua2luZyAtIGEtPnJhbmtp bmc7CisJaWYgKGRpZmYpCisJCXJldHVybiBkaWZmOworCisJcmV0dXJuIHN0cmNtcChhLT5uYW1l LCBiLT5uYW1lKTsKK30KKworaW50IHNtYWZfcmVnaXN0ZXJfYWxsb2NhdG9yKHN0cnVjdCBzbWFm X2FsbG9jYXRvciAqYWxsb2MpCit7CisJV0FSTl9PTighYWxsb2MgfHwgIWFsbG9jLT5tYXRjaCB8 fCAhYWxsb2MtPmFsbG9jYXRlIHx8ICFhbGxvYy0+bmFtZSk7CisKKwltdXRleF9sb2NrKCZzbWFm X2Rldi5sb2NrKTsKKwlsaXN0X2FkZCgmYWxsb2MtPmxpc3Rfbm9kZSwgJnNtYWZfZGV2LmhlYWQp OworCWxpc3Rfc29ydChOVUxMLCAmc21hZl9kZXYuaGVhZCwgc21hZl9hbGxvY2F0b3JfY29tcGFy ZSk7CisJbXV0ZXhfdW5sb2NrKCZzbWFmX2Rldi5sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQ T1JUX1NZTUJPTChzbWFmX3JlZ2lzdGVyX2FsbG9jYXRvcik7CisKK3ZvaWQgc21hZl91bnJlZ2lz dGVyX2FsbG9jYXRvcihzdHJ1Y3Qgc21hZl9hbGxvY2F0b3IgKmFsbG9jKQoreworCW11dGV4X2xv Y2soJnNtYWZfZGV2LmxvY2spOworCWxpc3RfZGVsKCZhbGxvYy0+bGlzdF9ub2RlKTsKKwltdXRl eF91bmxvY2soJnNtYWZfZGV2LmxvY2spOworfQorRVhQT1JUX1NZTUJPTChzbWFmX3VucmVnaXN0 ZXJfYWxsb2NhdG9yKTsKKworc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKnNtYWZf ZmluZF9hdHRhY2htZW50KHN0cnVjdCBkbWFfYnVmICpkYl9hbGxvYywKKwkJCQkJCSAgICAgICBz dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNo X29iajsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXR0YWNoX29iaiwgJmRiX2FsbG9jLT5hdHRh Y2htZW50cywgbm9kZSkgeworCQlpZiAoYXR0YWNoX29iai0+ZGV2ID09IGRldikKKwkJCXJldHVy biBhdHRhY2hfb2JqOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHNn X3RhYmxlICpzbWFmX21hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aG1lbnQsCisJCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqZGJfYXR0YWNobWVudDsKKwlzdHJ1Y3QgZG1hX2J1ZiAq ZG1hYnVmID0gYXR0YWNobWVudC0+ZG1hYnVmOworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxl ID0gZG1hYnVmLT5wcml2OworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCXVuc2lnbmVkIGNvdW50 X2RvbmUsIGNvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwkvKiB0cnkgdG8gZmlu ZCBhbiBhbGxvY2F0b3IgKi8KKwlpZiAoIWhhbmRsZS0+YWxsb2NhdG9yKSB7CisJCXN0cnVjdCBz bWFmX2FsbG9jYXRvciAqYWxsb2M7CisKKwkJbXV0ZXhfbG9jaygmc21hZl9kZXYubG9jayk7CisJ CWFsbG9jID0gc21hZl9maW5kX2FsbG9jYXRvcihkbWFidWYpOworCQltdXRleF91bmxvY2soJnNt YWZfZGV2LmxvY2spOworCisJCS8qIHN0aWxsIG5vIGFsbG9jYXRvciA/ICovCisJCWlmICghYWxs b2MpCisJCQlyZXR1cm4gTlVMTDsKKworCQloYW5kbGUtPmFsbG9jYXRvciA9IGFsbG9jOworCX0K KworCWlmICghaGFuZGxlLT5kYl9hbGxvYykgeworCQlzdHJ1Y3QgZG1hX2J1ZiAqZGJfYWxsb2M7 CisKKwkJZGJfYWxsb2MgPSBoYW5kbGUtPmFsbG9jYXRvci0+YWxsb2NhdGUoZG1hYnVmLAorCQkJ CQkJICAgICAgIGhhbmRsZS0+bGVuZ3RoLAorCQkJCQkJICAgICAgIGhhbmRsZS0+ZmxhZ3MpOwor CQlpZiAoIWRiX2FsbG9jKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaGFuZGxlLT5kYl9hbGxvYyA9 IGRiX2FsbG9jOworCX0KKworCWRiX2F0dGFjaG1lbnQgPSBzbWFmX2ZpbmRfYXR0YWNobWVudCho YW5kbGUtPmRiX2FsbG9jLCBhdHRhY2htZW50LT5kZXYpOworCXNndCA9IGRtYV9idWZfbWFwX2F0 dGFjaG1lbnQoZGJfYXR0YWNobWVudCwgZGlyZWN0aW9uKTsKKworCWlmICghc2d0KQorCQlyZXR1 cm4gTlVMTDsKKworCWlmICghYXRvbWljX3JlYWQoJmhhbmRsZS0+aXNfc2VjdXJlKSkKKwkJcmV0 dXJuIHNndDsKKworCW11dGV4X2xvY2soJnNtYWZfZGV2LmxvY2spOworCisJLyogbm93IHNlY3Vy ZSB0aGUgZGF0YSAqLworCWZvcl9lYWNoX3NnKHNndC0+c2dsLCBzZywgc2d0LT5uZW50cywgY291 bnRfZG9uZSkgeworCQlpZiAoIXNtYWZfZ3JhbnRfYWNjZXNzKGhhbmRsZSwgZGJfYXR0YWNobWVu dC0+ZGV2LAorCQkJCSAgICAgICBzZ19waHlzKHNnKSwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKSkK KwkJCWdvdG8gZmFpbGVkOworCX0KKworCW11dGV4X3VubG9jaygmc21hZl9kZXYubG9jayk7CisJ cmV0dXJuIHNndDsKKworZmFpbGVkOgorCWZvcl9lYWNoX3NnKHNndC0+c2dsLCBzZywgY291bnRf ZG9uZSwgY291bnQpIHsKKwkJc21hZl9yZXZva2VfYWNjZXNzKGhhbmRsZSwgZGJfYXR0YWNobWVu dC0+ZGV2LAorCQkJCSAgIHNnX3BoeXMoc2cpLCBzZy0+bGVuZ3RoLCBkaXJlY3Rpb24pOworCX0K KworCW11dGV4X3VubG9jaygmc21hZl9kZXYubG9jayk7CisKKwlzZ19mcmVlX3RhYmxlKHNndCk7 CisJa2ZyZWUoc2d0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc21hZl91bm1h cF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCisJCQkgICAg ICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsCisJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rp b24gZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRiX2F0dGFjaG1l bnQ7CisJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGF0dGFjaG1lbnQtPmRtYWJ1ZjsKKwlzdHJ1 Y3Qgc21hZl9oYW5kbGUgKmhhbmRsZSA9IGRtYWJ1Zi0+cHJpdjsKKwlzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnOworCXVuc2lnbmVkIGNvdW50OworCisJaWYgKCFoYW5kbGUtPmRiX2FsbG9jKQorCQly ZXR1cm47CisKKwlkYl9hdHRhY2htZW50ID0gc21hZl9maW5kX2F0dGFjaG1lbnQoaGFuZGxlLT5k Yl9hbGxvYywgYXR0YWNobWVudC0+ZGV2KTsKKwlpZiAoIWRiX2F0dGFjaG1lbnQpCisJCXJldHVy bjsKKworCWlmIChhdG9taWNfcmVhZCgmaGFuZGxlLT5pc19zZWN1cmUpKSB7CisJCW11dGV4X2xv Y2soJnNtYWZfZGV2LmxvY2spOworCQlmb3JfZWFjaF9zZyhzZ3QtPnNnbCwgc2csIHNndC0+bmVu dHMsIGNvdW50KSB7CisJCQlzbWFmX3Jldm9rZV9hY2Nlc3MoaGFuZGxlLCBkYl9hdHRhY2htZW50 LT5kZXYsCisJCQkJCSAgIHNnX3BoeXMoc2cpLCBzZy0+bGVuZ3RoLCBkaXJlY3Rpb24pOworCQl9 CisJCW11dGV4X3VubG9jaygmc21hZl9kZXYubG9jayk7CisJfQorCisJZG1hX2J1Zl91bm1hcF9h dHRhY2htZW50KGRiX2F0dGFjaG1lbnQsIHNndCwgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlu dCBzbWFmX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0 ICp2bWEpCit7CisJc3RydWN0IHNtYWZfaGFuZGxlICpoYW5kbGUgPSBkbWFidWYtPnByaXY7CisK KwlpZiAoIXNtYWZfYWxsb3dfY3B1X2FjY2VzcyhoYW5kbGUsIHZtYS0+dm1fZmxhZ3MpKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCS8qIGlmIG5vIGFsbG9jYXRvciBhdHRhY2hlZCwgZ2V0IHRoZSBm aXJzdCBhbGxvY2F0b3IgKi8KKwlpZiAoIWhhbmRsZS0+YWxsb2NhdG9yKSB7CisJCXN0cnVjdCBz bWFmX2FsbG9jYXRvciAqYWxsb2M7CisKKwkJbXV0ZXhfbG9jaygmc21hZl9kZXYubG9jayk7CisJ CWFsbG9jID0gc21hZl9nZXRfZmlyc3RfYWxsb2NhdG9yKGRtYWJ1Zik7CisJCW11dGV4X3VubG9j aygmc21hZl9kZXYubG9jayk7CisKKwkJLyogc3RpbGwgbm8gYWxsb2NhdG9yID8gKi8KKwkJaWYg KCFhbGxvYykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWhhbmRsZS0+YWxsb2NhdG9yID0gYWxs b2M7CisJfQorCisJaWYgKCFoYW5kbGUtPmRiX2FsbG9jKSB7CisJCXN0cnVjdCBkbWFfYnVmICpk Yl9hbGxvYzsKKworCQlkYl9hbGxvYyA9IGhhbmRsZS0+YWxsb2NhdG9yLT5hbGxvY2F0ZShkbWFi dWYsCisJCQkJCQkgICAgICAgaGFuZGxlLT5sZW5ndGgsCisJCQkJCQkgICAgICAgaGFuZGxlLT5m bGFncyk7CisJCWlmICghZGJfYWxsb2MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQloYW5kbGUt PmRiX2FsbG9jID0gZGJfYWxsb2M7CisJfQorCisJcmV0dXJuIGRtYV9idWZfbW1hcChoYW5kbGUt PmRiX2FsbG9jLCB2bWEsIDApOworfQorCitzdGF0aWMgdm9pZCBzbWFmX2RtYV9idWZfcmVsZWFz ZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQoreworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxl ID0gZG1hYnVmLT5wcml2OworCisJaWYgKGhhbmRsZS0+ZGJfYWxsb2MpCisJCWRtYV9idWZfcHV0 KGhhbmRsZS0+ZGJfYWxsb2MpOworCisJbXV0ZXhfbG9jaygmc21hZl9kZXYubG9jayk7CisJc21h Zl91bnNlY3VyZV9oYW5kbGUoaGFuZGxlKTsKKwltdXRleF91bmxvY2soJnNtYWZfZGV2LmxvY2sp OworCisJa2ZyZWUoaGFuZGxlKTsKK30KKworc3RhdGljIGludCBzbWFmX2RtYV9idWZfYmVnaW5f Y3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzaXplX3Qgc3RhcnQsCisJCQkJCSBz aXplX3QgbGVuLAorCQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorewor CXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlID0gZG1hYnVmLT5wcml2OworCisJaWYgKCFzbWFm X2FsbG93X2NwdV9hY2Nlc3MoaGFuZGxlLCBkaXJlY3Rpb24pKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWlmICghaGFuZGxlLT5kYl9hbGxvYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4g ZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzKGhhbmRsZS0+ZGJfYWxsb2MsCisJCQkJCXN0YXJ0LCBs ZW4sIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHNtYWZfZG1hX2J1Zl9lbmRfY3B1X2Fj Y2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzaXplX3Qgc3RhcnQsCisJCQkJCXNpemVfdCBs ZW4sCisJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3Qg c21hZl9oYW5kbGUgKmhhbmRsZSA9IGRtYWJ1Zi0+cHJpdjsKKworCWlmIChoYW5kbGUtPmRiX2Fs bG9jKQorCQlkbWFfYnVmX2VuZF9jcHVfYWNjZXNzKGhhbmRsZS0+ZGJfYWxsb2MsIHN0YXJ0LCBs ZW4sIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkICpzbWFmX2RtYV9idWZfa21hcF9hdG9t aWMoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNl dCkKK3sKKwlzdHJ1Y3Qgc21hZl9oYW5kbGUgKmhhbmRsZSA9IGRtYWJ1Zi0+cHJpdjsKKworCWlm ICghaGFuZGxlLT5kYl9hbGxvYykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXNtYWZfYWxsb3df Y3B1X2FjY2VzcyhoYW5kbGUsIERNQV9CSURJUkVDVElPTkFMKSkKKwkJcmV0dXJuIE5VTEw7CisK KwlyZXR1cm4gZG1hX2J1Zl9rbWFwX2F0b21pYyhoYW5kbGUtPmRiX2FsbG9jLCBvZmZzZXQpOwor fQorCitzdGF0aWMgdm9pZCBzbWFmX2RtYV9idWZfa3VubWFwX2F0b21pYyhzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdm9pZCAqcHRyKQor eworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlID0gZG1hYnVmLT5wcml2OworCisJaWYgKCFo YW5kbGUtPmRiX2FsbG9jKQorCQlyZXR1cm47CisKKwlkbWFfYnVmX2t1bm1hcF9hdG9taWMoaGFu ZGxlLT5kYl9hbGxvYywgb2Zmc2V0LCBwdHIpOworfQorCitzdGF0aWMgdm9pZCAqc21hZl9kbWFf YnVmX2ttYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7 CisJc3RydWN0IHNtYWZfaGFuZGxlICpoYW5kbGUgPSBkbWFidWYtPnByaXY7CisKKwlpZiAoIWhh bmRsZS0+ZGJfYWxsb2MpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFzbWFmX2FsbG93X2NwdV9h Y2Nlc3MoaGFuZGxlLCBETUFfQklESVJFQ1RJT05BTCkpCisJCXJldHVybiBOVUxMOworCisJcmV0 dXJuIGRtYV9idWZfa21hcChoYW5kbGUtPmRiX2FsbG9jLCBvZmZzZXQpOworfQorCitzdGF0aWMg dm9pZCBzbWFmX2RtYV9idWZfa3VubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHVuc2lnbmVk IGxvbmcgb2Zmc2V0LAorCQkJCXZvaWQgKnB0cikKK3sKKwlzdHJ1Y3Qgc21hZl9oYW5kbGUgKmhh bmRsZSA9IGRtYWJ1Zi0+cHJpdjsKKworCWlmICghaGFuZGxlLT5kYl9hbGxvYykKKwkJcmV0dXJu OworCisJZG1hX2J1Zl9rdW5tYXAoaGFuZGxlLT5kYl9hbGxvYywgb2Zmc2V0LCBwdHIpOworfQor CitzdGF0aWMgdm9pZCAqc21hZl9kbWFfYnVmX3ZtYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZikK K3sKKwlzdHJ1Y3Qgc21hZl9oYW5kbGUgKmhhbmRsZSA9IGRtYWJ1Zi0+cHJpdjsKKworCWlmICgh aGFuZGxlLT5kYl9hbGxvYykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXNtYWZfYWxsb3dfY3B1 X2FjY2VzcyhoYW5kbGUsIERNQV9CSURJUkVDVElPTkFMKSkKKwkJcmV0dXJuIE5VTEw7CisKKwly ZXR1cm4gZG1hX2J1Zl92bWFwKGhhbmRsZS0+ZGJfYWxsb2MpOworfQorCitzdGF0aWMgdm9pZCBz bWFmX2RtYV9idWZfdnVubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHZvaWQgKnZhZGRyKQor eworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlID0gZG1hYnVmLT5wcml2OworCisJaWYgKCFo YW5kbGUtPmRiX2FsbG9jKQorCQlyZXR1cm47CisKKwlkbWFfYnVmX3Z1bm1hcChoYW5kbGUtPmRi X2FsbG9jLCB2YWRkcik7Cit9CisKK3N0YXRpYyBpbnQgc21hZl9hdHRhY2goc3RydWN0IGRtYV9i dWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlID0gZG1h YnVmLT5wcml2OworCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRiX2F0dGFjaDsKKworCWlm ICghaGFuZGxlLT5kYl9hbGxvYykKKwkJcmV0dXJuIDA7CisKKwlkYl9hdHRhY2ggPSBkbWFfYnVm X2F0dGFjaChoYW5kbGUtPmRiX2FsbG9jLCBkZXYpOworCisJcmV0dXJuIElTX0VSUihkYl9hdHRh Y2gpOworfQorCitzdGF0aWMgdm9pZCBzbWFmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVm LAorCQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBzbWFm X2hhbmRsZSAqaGFuZGxlID0gZG1hYnVmLT5wcml2OworCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmRiX2F0dGFjaG1lbnQ7CisKKwlpZiAoIWhhbmRsZS0+ZGJfYWxsb2MpCisJCXJldHVybjsK KworCWRiX2F0dGFjaG1lbnQgPSBzbWFmX2ZpbmRfYXR0YWNobWVudChoYW5kbGUtPmRiX2FsbG9j LCBhdHRhY2gtPmRldik7CisJZG1hX2J1Zl9kZXRhY2goaGFuZGxlLT5kYl9hbGxvYywgZGJfYXR0 YWNobWVudCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2J1Zl9vcHMgc21hZl9kbWFfYnVmX29w cyA9IHsKKwkuYXR0YWNoID0gc21hZl9hdHRhY2gsCisJLmRldGFjaCA9IHNtYWZfZGV0YWNoLAor CS5tYXBfZG1hX2J1ZiA9IHNtYWZfbWFwX2RtYV9idWYsCisJLnVubWFwX2RtYV9idWYgPSBzbWFm X3VubWFwX2RtYV9idWYsCisJLm1tYXAgPSBzbWFmX21tYXAsCisJLnJlbGVhc2UgPSBzbWFmX2Rt YV9idWZfcmVsZWFzZSwKKwkuYmVnaW5fY3B1X2FjY2VzcyA9IHNtYWZfZG1hX2J1Zl9iZWdpbl9j cHVfYWNjZXNzLAorCS5lbmRfY3B1X2FjY2VzcyA9IHNtYWZfZG1hX2J1Zl9lbmRfY3B1X2FjY2Vz cywKKwkua21hcF9hdG9taWMgPSBzbWFmX2RtYV9idWZfa21hcF9hdG9taWMsCisJLmt1bm1hcF9h dG9taWMgPSBzbWFmX2RtYV9idWZfa3VubWFwX2F0b21pYywKKwkua21hcCA9IHNtYWZfZG1hX2J1 Zl9rbWFwLAorCS5rdW5tYXAgPSBzbWFmX2RtYV9idWZfa3VubWFwLAorCS52bWFwID0gc21hZl9k bWFfYnVmX3ZtYXAsCisJLnZ1bm1hcCA9IHNtYWZfZG1hX2J1Zl92dW5tYXAsCit9OworCitzdGF0 aWMgYm9vbCBpc19zbWFmX2RtYWJ1ZihzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQoreworCXJldHVy biBkbWFidWYtPm9wcyA9PSAmc21hZl9kbWFfYnVmX29wczsKK30KKworYm9vbCBzbWFmX2lzX3Nl Y3VyZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQoreworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFu ZGxlID0gZG1hYnVmLT5wcml2OworCisJaWYgKCFpc19zbWFmX2RtYWJ1ZihkbWFidWYpKQorCQly ZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmhhbmRsZS0+aXNfc2VjdXJlKTsK K30KK0VYUE9SVF9TWU1CT0woc21hZl9pc19zZWN1cmUpOworCitpbnQgc21hZl9zZXRfc2VjdXJl KHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgc2VjdXJlKQoreworCXN0cnVjdCBzbWFmX2hh bmRsZSAqaGFuZGxlID0gZG1hYnVmLT5wcml2OworCWludCByZXQ7CisKKwlpZiAoIWlzX3NtYWZf ZG1hYnVmKGRtYWJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc21hZl9k ZXYubG9jayk7CisJaWYgKHNlY3VyZSkKKwkJcmV0ID0gc21hZl9zZWN1cmVfaGFuZGxlKGhhbmRs ZSk7CisJZWxzZQorCQlyZXQgPSBzbWFmX3Vuc2VjdXJlX2hhbmRsZShoYW5kbGUpOworCW11dGV4 X3VubG9jaygmc21hZl9kZXYubG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJP TChzbWFmX3NldF9zZWN1cmUpOworCitpbnQgc21hZl9zZWxlY3RfYWxsb2NhdG9yX2J5X25hbWUo c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc21hZl9oYW5k bGUgKmhhbmRsZSA9IGRtYWJ1Zi0+cHJpdjsKKwlzdHJ1Y3Qgc21hZl9hbGxvY2F0b3IgKmFsbG9j OworCisJaWYgKCFpc19zbWFmX2RtYWJ1ZihkbWFidWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlmIChoYW5kbGUtPmFsbG9jYXRvcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2Nr KCZzbWFmX2Rldi5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxsb2MsICZzbWFmX2Rl di5oZWFkLCBsaXN0X25vZGUpIHsKKwkJaWYgKCFzdHJuY21wKGFsbG9jLT5uYW1lLCBuYW1lLCBB TExPQ0FUT1JfTkFNRV9MRU5HVEgpKSB7CisJCQloYW5kbGUtPmFsbG9jYXRvciA9IGFsbG9jOwor CQkJaGFuZGxlLT5kYl9hbGxvYyA9IE5VTEw7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnNt YWZfZGV2LmxvY2spOworCisJaWYgKCFoYW5kbGUtPmFsbG9jYXRvcikKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc21hZl9zZWxlY3RfYWxsb2NhdG9y X2J5X25hbWUpOworCitzdHJ1Y3Qgc21hZl9oYW5kbGUgKnNtYWZfY3JlYXRlX2hhbmRsZShzaXpl X3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNtYWZfaGFuZGxlICpo YW5kbGU7CisKKwlERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhpbmZvKTsKKworCWhhbmRsZSA9 IGt6YWxsb2Moc2l6ZW9mKCpoYW5kbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhhbmRsZSkKKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpbmZvLm9wcyA9ICZzbWFmX2RtYV9idWZfb3Bz OworCWluZm8uc2l6ZSA9IHJvdW5kX3VwKGxlbmd0aCwgUEFHRV9TSVpFKTsKKwlpbmZvLmZsYWdz ID0gZmxhZ3M7CisJaW5mby5wcml2ID0gaGFuZGxlOworCisJaGFuZGxlLT5kbWFidWYgPSBkbWFf YnVmX2V4cG9ydCgmaW5mbyk7CisJaWYgKElTX0VSUihoYW5kbGUtPmRtYWJ1ZikpIHsKKwkJa2Zy ZWUoaGFuZGxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaGFuZGxlLT5sZW5ndGggPSBpbmZv LnNpemU7CisJaGFuZGxlLT5mbGFncyA9IGZsYWdzOworCisJcmV0dXJuIGhhbmRsZTsKK30KK0VY UE9SVF9TWU1CT0woc21hZl9jcmVhdGVfaGFuZGxlKTsKKworc3RhdGljIGxvbmcgc21hZl9pb2N0 bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcp Cit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNNQUZfSU9DX0NSRUFURToKKwl7CisJCXN0cnVj dCBzbWFmX2NyZWF0ZV9kYXRhIGRhdGE7CisJCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlOwor CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQgX191c2VyICopYXJnLCBfSU9DX1NJ WkUoY21kKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQloYW5kbGUgPSBzbWFmX2NyZWF0ZV9o YW5kbGUoZGF0YS5sZW5ndGgsIGRhdGEuZmxhZ3MpOworCQlpZiAoIWhhbmRsZSkKKwkJCXJldHVy biAtRUlOVkFMOworCisJCWlmIChkYXRhLm5hbWVbMF0pIHsKKwkJCS8qIHVzZXIgZm9yY2UgYWxs b2NhdG9yIHNlbGVjdGlvbiAqLworCQkJaWYgKHNtYWZfc2VsZWN0X2FsbG9jYXRvcl9ieV9uYW1l KGhhbmRsZS0+ZG1hYnVmLAorCQkJCQkJCSAgZGF0YS5uYW1lKSkgeworCQkJCWRtYV9idWZfcHV0 KGhhbmRsZS0+ZG1hYnVmKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCisJCWhh bmRsZS0+ZmQgPSBkbWFfYnVmX2ZkKGhhbmRsZS0+ZG1hYnVmLCBkYXRhLmZsYWdzKTsKKwkJaWYg KGhhbmRsZS0+ZmQgPCAwKSB7CisJCQlkbWFfYnVmX3B1dChoYW5kbGUtPmRtYWJ1Zik7CisJCQly ZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWRhdGEuZmQgPSBoYW5kbGUtPmZkOworCQlpZiAoY29w eV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmRhdGEsIF9JT0NfU0laRShjbWQpKSkgewor CQkJZG1hX2J1Zl9wdXQoaGFuZGxlLT5kbWFidWYpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0K KwkJYnJlYWs7CisJfQorCWNhc2UgU01BRl9JT0NfR0VUX1NFQ1VSRV9GTEFHOgorCXsKKwkJc3Ry dWN0IHNtYWZfc2VjdXJlX2ZsYWcgZGF0YTsKKwkJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKKwor CQlpZiAoY29weV9mcm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgX0lPQ19TSVpF KGNtZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGF0 YS5mZCk7CisJCWlmICghZG1hYnVmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZGF0YS5zZWN1 cmUgPSBzbWFmX2lzX3NlY3VyZShkbWFidWYpOworCQlkbWFfYnVmX3B1dChkbWFidWYpOworCisJ CWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZGF0YSwgX0lPQ19TSVpFKGNt ZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCX0KKwljYXNlIFNNQUZfSU9DX1NF VF9TRUNVUkVfRkxBRzoKKwl7CisJCXN0cnVjdCBzbWFmX3NlY3VyZV9mbGFnIGRhdGE7CisJCXN0 cnVjdCBkbWFfYnVmICpkbWFidWY7CisJCWludCByZXQ7CisKKwkJaWYgKCFzbWFmX2Rldi5zZWN1 cmUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmRhdGEsICh2 b2lkIF9fdXNlciAqKWFyZywgX0lPQ19TSVpFKGNtZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisK KwkJZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGF0YS5mZCk7CisJCWlmICghZG1hYnVmKQorCQkJcmV0 dXJuIC1FSU5WQUw7CisKKwkJcmV0ID0gc21hZl9zZXRfc2VjdXJlKGRtYWJ1ZiwgZGF0YS5zZWN1 cmUpOworCisJCWRtYV9idWZfcHV0KGRtYWJ1Zik7CisKKwkJaWYgKHJldCkKKwkJCXJldHVybiAt RUlOVkFMOworCisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg c21hZl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS51bmxvY2tlZF9pb2N0bCA9 IHNtYWZfaW9jdGwsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbWFmX2luaXQodm9pZCkKK3sK KwlpbnQgcmV0ID0gMDsKKworCXNtYWZfZGV2Lm1pc2NfZGV2Lm1pbm9yID0gTUlTQ19EWU5BTUlD X01JTk9SOworCXNtYWZfZGV2Lm1pc2NfZGV2Lm5hbWUgID0gInNtYWYiOworCXNtYWZfZGV2Lm1p c2NfZGV2LmZvcHMgID0gJnNtYWZfZm9wczsKKworCS8qIHJlZ2lzdGVyIG1pc2MgZGV2aWNlICov CisJcmV0ID0gbWlzY19yZWdpc3Rlcigmc21hZl9kZXYubWlzY19kZXYpOworCWlmIChyZXQgPCAw KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfaW5pdCgmc21hZl9kZXYubG9jayk7CisJSU5JVF9M SVNUX0hFQUQoJnNtYWZfZGV2LmhlYWQpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0 KHNtYWZfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbWFmX2RlaW5pdCh2b2lkKQorewor CW1pc2NfZGVyZWdpc3Rlcigmc21hZl9kZXYubWlzY19kZXYpOworfQorbW9kdWxlX2V4aXQoc21h Zl9kZWluaXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNlY3VyZSBNZW1vcnkgQWxsb2NhdGlv biBGcmFtZXdvcmsiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1Io IkJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPiIpOwpkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbWFmLWFsbG9jYXRvci5oIGIvaW5jbHVkZS9saW51eC9z bWFmLWFsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjRl ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NtYWYtYWxsb2NhdG9yLmgKQEAg LTAsMCArMSw1NCBAQAorLyoKKyAqIHNtYWYtYWxsb2NhdG9yLmgKKyAqCisgKiBDb3B5cmlnaHQg KEMpIExpbmFybyBTQSAyMDE1CisgKiBBdXRob3I6IEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1p bi5nYWlnbmFyZEBsaW5hcm8ub3JnPiBmb3IgTGluYXJvLgorICogTGljZW5zZSB0ZXJtczogIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIKKyAqLworCisjaWZuZGVm IF9TTUFGX0FMTE9DQVRPUl9IXworI2RlZmluZSBfU01BRl9BTExPQ0FUT1JfSF8KKworI2luY2x1 ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKy8qKgorICog c3RydWN0IHNtYWZfYWxsb2NhdG9yIC0gaW1wbGVtZW50IGRtYV9idWZfb3BzIGxpa2UgZnVuY3Rp b25zCisgKgorICogQG1hdGNoOiBtYXRjaCBmdW5jdGlvbiB0byBjaGVjayBpZiBhbGxvY2F0b3Ig Y2FuIGFjY2VwdCB0aGUgZGV2aWNlcworICoJICAgYXR0YWNoZWQgdG8gZG1hYnVmCisgKiBAYWxs b2NhdGU6IGFsbG9jYXRlIG1lbW9yeSB3aXRoIHRoZSBnaXZlbiBsZW5ndGggYW5kIGZsYWdzCisg KgkgICAgICByZXR1cm4gYSBkbWFfYnVmIGhhbmRsZQorICogQG5hbWU6IGFsbG9jYXRvciBuYW1l CisgKiBAcmFua2luZzogYWxsb2NhdG9yIHJhbmtpbmcgKGJpZ2dlciBpcyBiZXR0ZXIpCisgKi8K K3N0cnVjdCBzbWFmX2FsbG9jYXRvciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CisJ Ym9vbCAoKm1hdGNoKShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKTsKKwlzdHJ1Y3QgZG1hX2J1ZiAq KCphbGxvY2F0ZSkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkgICAgc2l6ZV90IGxlbmd0 aCwgdW5zaWduZWQgaW50IGZsYWdzKTsKKwljb25zdCBjaGFyICpuYW1lOworCWludCByYW5raW5n OworfTsKKworLyoqCisgKiBzbWFmX3JlZ2lzdGVyX2FsbG9jYXRvciAtIHJlZ2lzdGVyIGFuIGFs bG9jYXRvciB0byBiZSB1c2VkIGJ5IFNNQUYKKyAqIEBhbGxvYzogc21hZl9hbGxvY2F0b3Igc3Ry dWN0dXJlCisgKi8KK2ludCBzbWFmX3JlZ2lzdGVyX2FsbG9jYXRvcihzdHJ1Y3Qgc21hZl9hbGxv Y2F0b3IgKmFsbG9jKTsKKworLyoqCisgKiBzbWFmX3VucmVnaXN0ZXJfYWxsb2NhdG9yIC0gdW5y ZWdpc3RlciBhbGxvY3RvcgorICogQGFsbG9jOiBzbWFmX2FsbG9jYXRvciBzdHJ1Y3R1cmUKKyAq Lwordm9pZCBzbWFmX3VucmVnaXN0ZXJfYWxsb2NhdG9yKHN0cnVjdCBzbWFmX2FsbG9jYXRvciAq YWxsb2MpOworCisvKioKKyAqIHNtYWZfc2VsZWN0X2FsbG9jYXRvcl9ieV9uYW1lIC0gc2VsZWN0 IGFuIGFsbG9jYXRvciBieSBpdCBuYW1lCisgKiByZXR1cm4gMCBpZiB0aGUgYWxsb2NhdG9yIGhh cyBiZWVuIGZvdW5kIGFuZCBzZWxlY3RlZC4KKyAqIEBkbWFidWY6IGRtYV9idWYgYnVmZmVyIGhh bmRsZXIKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBhbGxvY2F0b3IgdG8gYmUgc2VsZWN0ZWQKKyAq LworaW50IHNtYWZfc2VsZWN0X2FsbG9jYXRvcl9ieV9uYW1lKHN0cnVjdCBkbWFfYnVmICpkbWFi dWYsIGNoYXIgKm5hbWUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21h Zi1zZWN1cmUuaCBiL2luY2x1ZGUvbGludXgvc21hZi1zZWN1cmUuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi40MjE1MzM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9s aW51eC9zbWFmLXNlY3VyZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBzbWFmLXNlY3VyZS5o CisgKgorICogQ29weXJpZ2h0IChDKSBMaW5hcm8gU0EgMjAxNQorICogQXV0aG9yOiBCZW5qYW1p biBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4gZm9yIExpbmFyby4KKyAq IExpY2Vuc2UgdGVybXM6ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lv biAyCisgKi8KKworI2lmbmRlZiBfU01BRl9TRUNVUkVfSF8KKyNkZWZpbmUgX1NNQUZfU0VDVVJF X0hfCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1h cHBpbmcuaD4KKworLyoqCisgKiBzdHJ1Y3Qgc21hZl9zZWN1cmUKKyAqIEBjcmVhdGVfY3R4OgkJ Y3JlYXRlIGEgY29udGV4dCBmb3Igb25lIGRtYWJ1Zi4KKyAqIEBkZXN0cm95X2N0eDoJZGVzdHJv eSBjb250ZXh0LgorICogQGdyYW50X2FjY2VzczoJY2hlY2sgYW5kIHByb3ZpZGUgYWNjZXNzIHRv IG1lbW9yeSBhcmVhIGZvciBhIHNwZWNpZmljCisgKgkJCWRldmljZS4gUmV0dXJuIHRydWUgaWYg dGhlIHJlcXVlc3QgaXMgdmFsaWQuCisgKiBAcmV2b2tlX2FjY2VzczoJcmVtb3ZlIGRldmljZSBh Y2Nlc3MgcmlnaHRzLgorICogQGFsbG93X2NwdV9hY2Nlc3M6CXJldHVybiB0cnVlIGlmIENQVSBj YW4gYWNjZXNzIHRvIG1lbW9yeQorICovCitzdHJ1Y3Qgc21hZl9zZWN1cmUgeworCXZvaWQgKigq Y3JlYXRlX2N0eCkodm9pZCk7CisJaW50ICgqZGVzdHJveV9jdHgpKHZvaWQgKmN0eCk7CisJYm9v bCAoKmdyYW50X2FjY2Vzcykodm9pZCAqY3R4LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYs CisJCQkgICAgIHNpemVfdCBhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgZW51bSBkbWFfZGF0 YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwl2b2lkICgqcmV2b2tlX2FjY2Vzcykodm9pZCAqY3R4 LAorCQkJICAgICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc2l6ZV90IGFkZHIsIHNp emVfdCBzaXplLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsK Kwlib29sICgqYWxsb3dfY3B1X2FjY2Vzcykodm9pZCAqY3R4LCBlbnVtIGRtYV9kYXRhX2RpcmVj dGlvbiBkaXJlY3Rpb24pOworfTsKKworLyoqCisgKiBzbWFmX3JlZ2lzdGVyX3NlY3VyZSAtIHJl Z2lzdGVyIHNlY3VyZSBtb2R1bGUgaGVscGVyCisgKiBTZWN1cmUgbW9kdWxlIGhlbHBlciBzaG91 bGQgYmUgcGxhdGZvcm0gc3BlY2lmaWMgc28gb25seSBvbmUgY2FuIGJlCisgKiByZWdpc3RlcmVk LgorICoKKyAqIEBzZWM6IHNlY3VyZSBtb2R1bGUgdG8gYmUgcmVnaXN0ZXJlZAorICovCitpbnQg c21hZl9yZWdpc3Rlcl9zZWN1cmUoc3RydWN0IHNtYWZfc2VjdXJlICpzZWMpOworCisvKioKKyAq IHNtYWZfdW5yZWdpc3Rlcl9zZWN1cmUgLSB1bnJlZ2lzdGVyIHNlY3VyZSBtb2R1bGUgaGVscGVy CisgKi8KK3ZvaWQgc21hZl91bnJlZ2lzdGVyX3NlY3VyZShzdHJ1Y3Qgc21hZl9zZWN1cmUgKnNl Yyk7CisKKy8qKgorICogc21hZl9pc19zZWN1cmUgLSB0ZXN0IGlzIGEgZG1hX2J1ZiBoYW5kbGUg aGFzIGJlZW4gc2VjdXJlZCBieSBTTUFGCisgKiBAZG1hYnVmOiBkbWFfYnVmIGhhbmRsZSB0byBi ZSB0ZXN0ZWQKKyAqLworYm9vbCBzbWFmX2lzX3NlY3VyZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVm KTsKKworLyoqCisgKiBzbWFmX3NldF9zZWN1cmUgLSBjaGFuZ2UgZG1hX2J1ZiBoYW5kbGUgc2Vj dXJlIHN0YXR1cworICogQGRtYWJ1ZjogZG1hX2J1ZiBoYW5kbGUgdG8gYmUgY2hhbmdlCisgKiBA c2VjdXJlOiBpZiB0cnVlIHNlY3VyZSBkbWFfYnVmIGhhbmRsZQorICovCitpbnQgc21hZl9zZXRf c2VjdXJlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgc2VjdXJlKTsKKworLyoqCisgKiBz bWFmX2NyZWF0ZV9oYW5kbGUgLSBjcmVhdGUgYSBzbWFmX2hhbmRsZSB3aXRoIHRoZSBnaXZlIGxl bmd0aCBhbmQgZmxhZ3MKKyAqIGRvIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYnV0IHByb3ZpZGUgc21h Zl9oYW5kbGUtPmRtYWJ1ZiB0aGF0IGNhbiBiZQorICogc2hhcmVkIGJldHdlZW4gZGV2aWNlcy4K KyAqCisgKiBAbGVuZ3RoOiBidWZmZXIgc2l6ZQorICogQGZsYWdzOiBoYW5kbGUgZmxhZ3MKKyAq Lworc3RydWN0IHNtYWZfaGFuZGxlICpzbWFmX2NyZWF0ZV9oYW5kbGUoc2l6ZV90IGxlbmd0aCwg dW5zaWduZWQgaW50IGZsYWdzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkv bGludXgvc21hZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3NtYWYuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi40MjgxNjhlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3NtYWYuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogc21hZi5oCisgKgorICog Q29weXJpZ2h0IChDKSBMaW5hcm8gU0EgMjAxNQorICogQXV0aG9yOiBCZW5qYW1pbiBHYWlnbmFy ZCA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4gZm9yIExpbmFyby4KKyAqIExpY2Vuc2Ug dGVybXM6ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyCisgKi8K KworI2lmbmRlZiBfVUFQSV9TTUFGX0hfCisjZGVmaW5lIF9VQVBJX1NNQUZfSF8KKworI2luY2x1 ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBB TExPQ0FUT1JfTkFNRV9MRU5HVEggNjQKKworLyoqCisgKiBzdHJ1Y3Qgc21hZl9jcmVhdGVfZGF0 YSAtIGFsbG9jYXRpb24gcGFyYW1ldGVycworICogQGxlbmd0aDoJc2l6ZSBvZiB0aGUgYWxsb2Nh dGlvbgorICogQGZsYWdzOglmbGFncyBwYXNzZWQgdG8gYWxsb2NhdG9yCisgKiBAbmFtZToJbmFt ZSBvZiB0aGUgYWxsb2NhdG9yIHRvIGJlIHNlbGVjdGVkLCBjb3VsZCBiZSBOVUxMCisgKiBAZmQ6 CQlyZXR1cm5lZCBmaWxlIGRlc2NyaXB0b3IKKyAqLworc3RydWN0IHNtYWZfY3JlYXRlX2RhdGEg eworCXNpemVfdCBsZW5ndGg7CisJdW5zaWduZWQgaW50IGZsYWdzOworCWNoYXIgbmFtZVtBTExP Q0FUT1JfTkFNRV9MRU5HVEhdOworCWludCBmZDsKK307CisKKy8qKgorICogc3RydWN0IHNtYWZf c2VjdXJlX2ZsYWcgLSBzZXQvZ2V0IHNlY3VyZSBmbGFnCisgKiBAZmQ6CQlmaWxlIGRlc2NyaXB0 b3IKKyAqIEBzZWN1cmU6CXNlY3VyZSBmbGFnIHZhbHVlIChzZXQgb3IgZ2V0KQorICovCitzdHJ1 Y3Qgc21hZl9zZWN1cmVfZmxhZyB7CisJaW50IGZkOworCWludCBzZWN1cmU7Cit9OworCisjZGVm aW5lIFNNQUZfSU9DX01BR0lDCSdTJworCisjZGVmaW5lIFNNQUZfSU9DX0NSRUFURQkJIF9JT1dS KFNNQUZfSU9DX01BR0lDLCAwLCBcCisJCQkJICAgICAgIHN0cnVjdCBzbWFmX2NyZWF0ZV9kYXRh KQorCisjZGVmaW5lIFNNQUZfSU9DX0dFVF9TRUNVUkVfRkxBRyBfSU9XUihTTUFGX0lPQ19NQUdJ QywgMSwgXAorCQkJCSAgICAgICBzdHJ1Y3Qgc21hZl9zZWN1cmVfZmxhZykKKworI2RlZmluZSBT TUFGX0lPQ19TRVRfU0VDVVJFX0ZMQUcgX0lPV1IoU01BRl9JT0NfTUFHSUMsIDIsIFwKKwkJCQkg ICAgICAgc3RydWN0IHNtYWZfc2VjdXJlX2ZsYWcpCisKKyNlbmRpZgotLSAKMS45LjEKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=