From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 30A4DC25B78 for ; Tue, 28 May 2024 14:07:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=3vqnZKWJf8u8++m6Zubf+ZxbK9WXLrkeC/W6fkzR2Us=; b=dqXWyKDHmAk0pN B+Pa6sJ9hB0lKj77YAB5JZLHBpMwoOvF4/PAPTB6s0GEnFnUNx9w8PFnJ1tF4QDj/rMGIL3hgWazs zG1mqbyK0GPeku108HIW5h0sVh0qYJc+/vqMDrIzGOQSsVgfIAzWee7FrVLcEf+mnAzt4tlufoYzF NkHy4Uhl61muHvokh0b4BIWVTkASlfBFdzVz8N5LY30Qg65xVq7SC9YfUESKNe3X0sBsjpP/ctf0S IHQnlQBE20Qp5xG4pZKFN5fsuBeVS7oL37FQ8CG/cISXGIkNxnOUt2o1cnQZa6j5uO4zioOgnzV9x sLNHzHwV2yOUeYNmWVEA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBxU3-00000000wCG-1DMe; Tue, 28 May 2024 14:07:23 +0000 Received: from mx08-00178001.pphosted.com ([91.207.212.93]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBxTx-00000000w8q-1ISJ for linux-arm-kernel@lists.infradead.org; Tue, 28 May 2024 14:07:20 +0000 Received: from pps.filterd (m0369457.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 44SDCVIJ027565; Tue, 28 May 2024 16:06:54 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= l+8uLp7bjHd7fJPiNDNpVIalx5KqhzBgp+3ogealN+o=; b=mVykC2Y/Zi7YgMht Ga/4sJVsIG3NzDflirMKOIOMndEYuq3yQyBo7YO9La1dgqbBLhHJ2uitsPVdkPbm uOCWxI6bayTNgfns5Mdq2CMqRZGb1I+JCbep+flU7QBI3xx1qbY/3d2lA9ELAbaq XgYb6MYUGUE2oRlUimV6XqCwpd86VMpgcTlc8qg34wZtI403tqSmquYzpDD1Ur5q IyPCeuqpBNlSFdGV84xjFEHMIFDSYYZj5RwfOjt0rYisXcdzyKuTWLS1sePu4oeZ YOIMh5UlttFIqJ/1GVqQAli3eaIIgeJw6AcYIeVrRvfTjaZrxBrVx+N+w9878ODl 85ZAhQ== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 3ybtxh9v99-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 28 May 2024 16:06:53 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 581AB4002D; Tue, 28 May 2024 16:06:49 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node3.st.com [10.75.129.71]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 88B8821B53E; Tue, 28 May 2024 16:06:11 +0200 (CEST) Received: from localhost (10.48.86.103) by SHFDAG1NODE3.st.com (10.75.129.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 28 May 2024 16:06:11 +0200 From: Maxime MERE To: Herbert Xu , "David S . Miller" , Maxime Coquelin , Alexandre Torgue CC: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , Rob Herring , , , , , =?UTF-8?q?Maxime=20M=C3=A9r=C3=A9?= , Nicolas Toromanoff Subject: [PATCH v3 1/4] crypto: stm32/cryp - use dma when possible. Date: Tue, 28 May 2024 16:05:45 +0200 Message-ID: <20240528140548.1632562-2-maxime.mere@foss.st.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240528140548.1632562-1-maxime.mere@foss.st.com> References: <20240528140548.1632562-1-maxime.mere@foss.st.com> MIME-Version: 1.0 X-Originating-IP: [10.48.86.103] X-ClientProxiedBy: EQNCAS1NODE4.st.com (10.75.129.82) To SHFDAG1NODE3.st.com (10.75.129.71) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.650,FMLib:17.12.28.16 definitions=2024-05-28_10,2024-05-28_01,2024-05-17_01 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240528_070717_712274_DE514947 X-CRM114-Status: GOOD ( 19.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogTWF4aW1lIE3DqXLDqSA8bWF4aW1lLm1lcmVAZm9zcy5zdC5jb20+CgpVc2UgRE1BIHdo ZW4gYnVmZmVyIGFyZSBhbGlnbmVkIGFuZCB3aXRoIGV4cGVjdGVkIHNpemUuCgpJZiBidWZmZXIg YXJlIGNvcnJlY3RseSBhbGlnbmVkIGFuZCBiaWdnZXIgdGhhbiAxS0Igd2UgaGF2ZSBzb21lCnBl cmZvcm1hbmNlIGdhaW46CgpXaXRoIERNQSBlbmFibGU6CiQgb3BlbnNzbCBzcGVlZCAtZXZwIGFl cy0yNTYtY2JjIC1lbmdpbmUgYWZhbGcgLWVsYXBzZWQKVGhlICdudW1iZXJzJyBhcmUgaW4gMTAw MHMgb2YgYnl0ZXMgcGVyIHNlY29uZCBwcm9jZXNzZWQuCnR5cGUgICAgICAgICAgICAgMTYgYnl0 ZXMgICAgIDY0IGJ5dGVzICAgIDI1NiBieXRlcyAgIDEwMjQgYnl0ZXMgICA4MTkyIGJ5dGVzICAx NjM4NCBieXRlcwphZXMtMjU2LWNiYyAgICAgICAgMTIwLjAyayAgICAgIDQwNi43OGsgICAgIDE1 ODguODJrICAgICA1ODczLjMyayAgICAyNjAyMC41MmsgICAgMzQyNTguOTRrCgpXaXRob3V0IERN QToKJCBvcGVuc3NsIHNwZWVkIC1ldnAgYWVzLTI1Ni1jYmMgLWVuZ2luZSBhZmFsZyAtZWxhcHNl ZApUaGUgJ251bWJlcnMnIGFyZSBpbiAxMDAwcyBvZiBieXRlcyBwZXIgc2Vjb25kIHByb2Nlc3Nl ZC4KdHlwZSAgICAgICAgICAgICAxNiBieXRlcyAgICAgNjQgYnl0ZXMgICAgMjU2IGJ5dGVzICAg MTAyNCBieXRlcyAgIDgxOTIgYnl0ZXMgIDE2Mzg0IGJ5dGVzCmFlcy0yNTYtY2JjICAgICAgICAx MjEuMDZrICAgICAgNDE5Ljk1ayAgICAgMTExMi4yM2sgICAgIDE4OTcuNDdrICAgICAyMzYyLjAz ayAgICAgMjM4Ni42MGsKCldpdGggRE1BOgpleHRyYWN0IG9mCiQgbW9kcHJvYmUgdGNyeXB0IG1v ZGU9NTAwCnRlc3Rpbmcgc3BlZWQgb2YgYXN5bmMgY2JjKGFlcykgKHN0bTMyLWNiYy1hZXMpIGVu Y3J5cHRpb24KdGNyeXB0OiB0ZXN0IDE0ICgyNTYgYml0IGtleSwgICAxNiBieXRlIGJsb2Nrcyk6 IDEgb3BlcmF0aW9uIGluICAxNjc5IGN5Y2xlcyAoMTYgYnl0ZXMpCnRjcnlwdDogdGVzdCAxNSAo MjU2IGJpdCBrZXksICAgNjQgYnl0ZSBibG9ja3MpOiAxIG9wZXJhdGlvbiBpbiAgMTg5MyBjeWNs ZXMgKDY0IGJ5dGVzKQp0Y3J5cHQ6IHRlc3QgMTYgKDI1NiBiaXQga2V5LCAgMTI4IGJ5dGUgYmxv Y2tzKTogMSBvcGVyYXRpb24gaW4gIDE3NjAgY3ljbGVzICgxMjggYnl0ZXMpCnRjcnlwdDogdGVz dCAxNyAoMjU2IGJpdCBrZXksICAyNTYgYnl0ZSBibG9ja3MpOiAxIG9wZXJhdGlvbiBpbiAgMjE1 NCBjeWNsZXMgKDI1NiBieXRlcykKdGNyeXB0OiB0ZXN0IDE4ICgyNTYgYml0IGtleSwgMTAyNCBi eXRlIGJsb2Nrcyk6IDEgb3BlcmF0aW9uIGluICAyMTMyIGN5Y2xlcyAoMTAyNCBieXRlcykKdGNy eXB0OiB0ZXN0IDE5ICgyNTYgYml0IGtleSwgMTQyNCBieXRlIGJsb2Nrcyk6IDEgb3BlcmF0aW9u IGluICAyNDY2IGN5Y2xlcyAoMTQyNCBieXRlcykKdGNyeXB0OiB0ZXN0IDIwICgyNTYgYml0IGtl eSwgNDA5NiBieXRlIGJsb2Nrcyk6IDEgb3BlcmF0aW9uIGluICA0MDQwIGN5Y2xlcyAoNDA5NiBi eXRlcykKCldpdGhvdXQgRE1BOgokIG1vZHByb2JlIHRjcnlwdCBtb2RlPTUwMAp0Y3J5cHQ6IHRl c3QgMTQgKDI1NiBiaXQga2V5LCAgIDE2IGJ5dGUgYmxvY2tzKTogMSBvcGVyYXRpb24gaW4gIDE2 NzEgY3ljbGVzICgxNiBieXRlcykKdGNyeXB0OiB0ZXN0IDE1ICgyNTYgYml0IGtleSwgICA2NCBi eXRlIGJsb2Nrcyk6IDEgb3BlcmF0aW9uIGluICAyMjYzIGN5Y2xlcyAoNjQgYnl0ZXMpCnRjcnlw dDogdGVzdCAxNiAoMjU2IGJpdCBrZXksICAxMjggYnl0ZSBibG9ja3MpOiAxIG9wZXJhdGlvbiBp biAgMjg4MSBjeWNsZXMgKDEyOCBieXRlcykKdGNyeXB0OiB0ZXN0IDE3ICgyNTYgYml0IGtleSwg IDI1NiBieXRlIGJsb2Nrcyk6IDEgb3BlcmF0aW9uIGluICA0MjcwIGN5Y2xlcyAoMjU2IGJ5dGVz KQp0Y3J5cHQ6IHRlc3QgMTggKDI1NiBiaXQga2V5LCAxMDI0IGJ5dGUgYmxvY2tzKTogMSBvcGVy YXRpb24gaW4gMTE1MzcgY3ljbGVzICgxMDI0IGJ5dGVzKQp0Y3J5cHQ6IHRlc3QgMTkgKDI1NiBi aXQga2V5LCAxNDI0IGJ5dGUgYmxvY2tzKTogMSBvcGVyYXRpb24gaW4gMTUwMjUgY3ljbGVzICgx NDI0IGJ5dGVzKQp0Y3J5cHQ6IHRlc3QgMjAgKDI1NiBiaXQga2V5LCA0MDk2IGJ5dGUgYmxvY2tz KTogMSBvcGVyYXRpb24gaW4gNDA3NDcgY3ljbGVzICg0MDk2IGJ5dGVzKQoKU2lnbmVkLW9mZi1i eTogQWxleGFuZHJlIFRvcmd1ZSA8YWxleGFuZHJlLnRvcmd1ZUBmb3NzLnN0LmNvbT4KU2lnbmVk LW9mZi1ieTogTWF4aW1lIE3DqXLDqSA8bWF4aW1lLm1lcmVAZm9zcy5zdC5jb20+ClNpZ25lZC1v ZmYtYnk6IE5pY29sYXMgVG9yb21hbm9mZiA8bmljb2xhcy50b3JvbWFub2ZmQGZvc3Muc3QuY29t PgotLS0KIGRyaXZlcnMvY3J5cHRvL3N0bTMyL3N0bTMyLWNyeXAuYyB8IDY3NyArKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCA2NTEgaW5zZXJ0aW9ucygrKSwg MjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vc3RtMzIvc3RtMzIt Y3J5cC5jIGIvZHJpdmVycy9jcnlwdG8vc3RtMzIvc3RtMzItY3J5cC5jCmluZGV4IDExYWQ0ZmZk Y2UwZC4uOGI3NGM0NWE0ZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9zdG0zMi9zdG0z Mi1jcnlwLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vc3RtMzIvc3RtMzItY3J5cC5jCkBAIC0xMyw2 ICsxMyw4IEBACiAjaW5jbHVkZSA8Y3J5cHRvL3NjYXR0ZXJ3YWxrLmg+CiAjaW5jbHVkZSA8bGlu dXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEt bWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4 L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVy cnVwdC5oPgpAQCAtNDAsNiArNDIsOCBAQAogLyogTW9kZSBtYXNrID0gYml0cyBbMTUuLjBdICov CiAjZGVmaW5lIEZMR19NT0RFX01BU0sgICAgICAgICAgIEdFTk1BU0soMTUsIDApCiAvKiBCaXQg WzMxLi4xNl0gc3RhdHVzICAqLworI2RlZmluZSBGTEdfSU5fT1VUX0RNQSAgICAgICAgICBCSVQo MTYpCisjZGVmaW5lIEZMR19IRUFERVJfRE1BICAgICAgICAgIEJJVCgxNykKIAogLyogUmVnaXN0 ZXJzICovCiAjZGVmaW5lIENSWVBfQ1IgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKQEAgLTEy MSw4ICsxMjUsMTIgQEAKICNkZWZpbmUgQ1JfUEhfTUFTSyAgICAgICAgICAgICAgMHgwMDAzMDAw MAogI2RlZmluZSBDUl9OQlBCTF9TSElGVCAgICAgICAgICAyMAogCi0jZGVmaW5lIFNSX0JVU1kg ICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgU1JfT0ZORSAgICAgICAgICAgICAg ICAgMHgwMDAwMDAwNAorI2RlZmluZSBTUl9JRk5GICAgICAgICAgICAgICAgICBCSVQoMSkKKyNk ZWZpbmUgU1JfT0ZORSAgICAgICAgICAgICAgICAgQklUKDIpCisjZGVmaW5lIFNSX0JVU1kgICAg ICAgICAgICAgICAgIEJJVCg4KQorCisjZGVmaW5lIERNQUNSX0RJRU4gICAgICAgICAgICAgIEJJ VCgwKQorI2RlZmluZSBETUFDUl9ET0VOICAgICAgICAgICAgICBCSVQoMSkKIAogI2RlZmluZSBJ TVNDUl9JTiAgICAgICAgICAgICAgICBCSVQoMCkKICNkZWZpbmUgSU1TQ1JfT1VUICAgICAgICAg ICAgICAgQklUKDEpCkBAIC0xMzMsNyArMTQxLDE1IEBACiAvKiBNaXNjICovCiAjZGVmaW5lIEFF U19CTE9DS18zMiAgICAgICAgICAgIChBRVNfQkxPQ0tfU0laRSAvIHNpemVvZih1MzIpKQogI2Rl ZmluZSBHQ01fQ1RSX0lOSVQgICAgICAgICAgICAyCi0jZGVmaW5lIENSWVBfQVVUT1NVU1BFTkRf REVMQVkJNTAKKyNkZWZpbmUgQ1JZUF9BVVRPU1VTUEVORF9ERUxBWSAgNTAKKworI2RlZmluZSBD UllQX0RNQV9CVVJTVF9SRUcgICAgICA0CisKK2VudW0gc3RtMzJfZG1hX21vZGUgeworCU5PX0RN QSwKKwlETUFfUExBSU5fU0csCisJRE1BX05FRURfU0dfVFJVTkMKK307CiAKIHN0cnVjdCBzdG0z Ml9jcnlwX2NhcHMgewogCWJvb2wJCQlhZWFkc19zdXBwb3J0OwpAQCAtMTQ2LDYgKzE2Miw3IEBA IHN0cnVjdCBzdG0zMl9jcnlwX2NhcHMgewogCXUzMgkJCXNyOwogCXUzMgkJCWRpbjsKIAl1MzIJ CQlkb3V0OworCXUzMgkJCWRtYWNyOwogCXUzMgkJCWltc2M7CiAJdTMyCQkJbWlzOwogCXUzMgkJ CWsxbDsKQEAgLTE3Miw2ICsxODksNyBAQCBzdHJ1Y3Qgc3RtMzJfY3J5cCB7CiAJc3RydWN0IGxp c3RfaGVhZCAgICAgICAgbGlzdDsKIAlzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAqZGV2OwogCXZv aWQgX19pb21lbSAgICAgICAgICAgICpyZWdzOworCXBoeXNfYWRkcl90ICAgICAgICAgICAgIHBo eXNfYmFzZTsKIAlzdHJ1Y3QgY2xrICAgICAgICAgICAgICAqY2xrOwogCXVuc2lnbmVkIGxvbmcg ICAgICAgICAgIGZsYWdzOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIGlycV9zdGF0dXM7CkBA IC0xOTAsOCArMjA4LDIwIEBAIHN0cnVjdCBzdG0zMl9jcnlwIHsKIAlzaXplX3QgICAgICAgICAg ICAgICAgICBoZWFkZXJfaW47CiAJc2l6ZV90ICAgICAgICAgICAgICAgICAgcGF5bG9hZF9vdXQ7 CiAKKwkvKiBETUEgcHJvY2VzcyBmaWVsZHMgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgICAgICAq aW5fc2c7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgKmhlYWRlcl9zZzsKIAlzdHJ1Y3Qgc2Nh dHRlcmxpc3QgICAgICAqb3V0X3NnOworCXNpemVfdCAgICAgICAgICAgICAgICAgIGluX3NnX2xl bjsKKwlzaXplX3QgICAgICAgICAgICAgICAgICBoZWFkZXJfc2dfbGVuOworCXNpemVfdCAgICAg ICAgICAgICAgICAgIG91dF9zZ19sZW47CisJc3RydWN0IGNvbXBsZXRpb24JZG1hX2NvbXBsZXRp b247CisKKwlzdHJ1Y3QgZG1hX2NoYW4gICAgICAgICAqZG1hX2xjaF9pbjsKKwlzdHJ1Y3QgZG1h X2NoYW4gICAgICAgICAqZG1hX2xjaF9vdXQ7CisJZW51bSBzdG0zMl9kbWFfbW9kZSAgICAgZG1h X21vZGU7CiAKKwkvKiBJVCBwcm9jZXNzIGZpZWxkcyAqLwogCXN0cnVjdCBzY2F0dGVyX3dhbGsg ICAgIGluX3dhbGs7CiAJc3RydWN0IHNjYXR0ZXJfd2FsayAgICAgb3V0X3dhbGs7CiAKQEAgLTI5 MSwxMiArMzIxLDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHN0bTMyX2NyeXBfd2FpdF9lbmFibGUo c3RydWN0IHN0bTMyX2NyeXAgKmNyeXApCiAJCQkhKHN0YXR1cyAmIENSX0NSWVBFTiksIDEwLCAx MDAwMDApOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzdG0zMl9jcnlwX3dhaXRfaW5wdXQoc3Ry dWN0IHN0bTMyX2NyeXAgKmNyeXApCit7CisJdTMyIHN0YXR1czsKKworCXJldHVybiByZWFkbF9y ZWxheGVkX3BvbGxfdGltZW91dF9hdG9taWMoY3J5cC0+cmVncyArIGNyeXAtPmNhcHMtPnNyLCBz dGF0dXMsCisJCQlzdGF0dXMgJiBTUl9JRk5GLCAxLCAxMCk7Cit9CisKIHN0YXRpYyBpbmxpbmUg aW50IHN0bTMyX2NyeXBfd2FpdF9vdXRwdXQoc3RydWN0IHN0bTMyX2NyeXAgKmNyeXApCiB7CiAJ dTMyIHN0YXR1czsKIAotCXJldHVybiByZWFkbF9yZWxheGVkX3BvbGxfdGltZW91dChjcnlwLT5y ZWdzICsgY3J5cC0+Y2Fwcy0+c3IsIHN0YXR1cywKLQkJCXN0YXR1cyAmIFNSX09GTkUsIDEwLCAx MDAwMDApOworCXJldHVybiByZWFkbF9yZWxheGVkX3BvbGxfdGltZW91dF9hdG9taWMoY3J5cC0+ cmVncyArIGNyeXAtPmNhcHMtPnNyLCBzdGF0dXMsCisJCQlzdGF0dXMgJiBTUl9PRk5FLCAxLCAx MCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdG0zMl9jcnlwX2tleV9yZWFkX2VuYWJsZShz dHJ1Y3Qgc3RtMzJfY3J5cCAqY3J5cCkKQEAgLTMxMSw4ICszNDksMTMgQEAgc3RhdGljIGlubGlu ZSB2b2lkIHN0bTMyX2NyeXBfa2V5X3JlYWRfZGlzYWJsZShzdHJ1Y3Qgc3RtMzJfY3J5cCAqY3J5 cCkKIAkJICAgICAgIGNyeXAtPnJlZ3MgKyBjcnlwLT5jYXBzLT5jcik7CiB9CiAKK3N0YXRpYyB2 b2lkIHN0bTMyX2NyeXBfaXJxX3JlYWRfZGF0YShzdHJ1Y3Qgc3RtMzJfY3J5cCAqY3J5cCk7Citz dGF0aWMgdm9pZCBzdG0zMl9jcnlwX2lycV93cml0ZV9kYXRhKHN0cnVjdCBzdG0zMl9jcnlwICpj cnlwKTsKK3N0YXRpYyB2b2lkIHN0bTMyX2NyeXBfaXJxX3dyaXRlX2djbWNjbV9oZWFkZXIoc3Ry dWN0IHN0bTMyX2NyeXAgKmNyeXApOwogc3RhdGljIGludCBzdG0zMl9jcnlwX3JlYWRfYXV0aF90 YWcoc3RydWN0IHN0bTMyX2NyeXAgKmNyeXApOwogc3RhdGljIHZvaWQgc3RtMzJfY3J5cF9maW5p c2hfcmVxKHN0cnVjdCBzdG0zMl9jcnlwICpjcnlwLCBpbnQgZXJyKTsKK3N0YXRpYyBpbnQgc3Rt MzJfY3J5cF9kbWFfc3RhcnQoc3RydWN0IHN0bTMyX2NyeXAgKmNyeXApOworc3RhdGljIGludCBz dG0zMl9jcnlwX2l0X3N0YXJ0KHN0cnVjdCBzdG0zMl9jcnlwICpjcnlwKTsKIAogc3RhdGljIHN0 cnVjdCBzdG0zMl9jcnlwICpzdG0zMl9jcnlwX2ZpbmRfZGV2KHN0cnVjdCBzdG0zMl9jcnlwX2N0 eCAqY3R4KQogewpAQCAtODEzLDExICs4NTYsMjM4IEBAIHN0YXRpYyB2b2lkIHN0bTMyX2NyeXBf ZmluaXNoX3JlcShzdHJ1Y3Qgc3RtMzJfY3J5cCAqY3J5cCwgaW50IGVycikKIAlpZiAoaXNfZ2Nt KGNyeXApIHx8IGlzX2NjbShjcnlwKSkKIAkJY3J5cHRvX2ZpbmFsaXplX2FlYWRfcmVxdWVzdChj cnlwLT5lbmdpbmUsIGNyeXAtPmFyZXEsIGVycik7CiAJZWxzZQotCQljcnlwdG9fZmluYWxpemVf c2tjaXBoZXJfcmVxdWVzdChjcnlwLT5lbmdpbmUsIGNyeXAtPnJlcSwKLQkJCQkJCSAgIGVycik7 CisJCWNyeXB0b19maW5hbGl6ZV9za2NpcGhlcl9yZXF1ZXN0KGNyeXAtPmVuZ2luZSwgY3J5cC0+ cmVxLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBzdG0zMl9jcnlwX2hlYWRlcl9kbWFfY2FsbGJh Y2sodm9pZCAqcGFyYW0pCit7CisJc3RydWN0IHN0bTMyX2NyeXAgKmNyeXAgPSAoc3RydWN0IHN0 bTMyX2NyeXAgKilwYXJhbTsKKwlpbnQgcmV0OworCXUzMiByZWc7CisKKwlkbWFfdW5tYXBfc2co Y3J5cC0+ZGV2LCBjcnlwLT5oZWFkZXJfc2csIGNyeXAtPmhlYWRlcl9zZ19sZW4sIERNQV9UT19E RVZJQ0UpOworCisJcmVnID0gc3RtMzJfY3J5cF9yZWFkKGNyeXAsIGNyeXAtPmNhcHMtPmRtYWNy KTsKKwlzdG0zMl9jcnlwX3dyaXRlKGNyeXAsIGNyeXAtPmNhcHMtPmRtYWNyLCByZWcgJiB+KERN QUNSX0RPRU4gfCBETUFDUl9ESUVOKSk7CisKKwlrZnJlZShjcnlwLT5oZWFkZXJfc2cpOworCisJ cmVnID0gc3RtMzJfY3J5cF9yZWFkKGNyeXAsIGNyeXAtPmNhcHMtPmNyKTsKKworCWlmIChjcnlw LT5oZWFkZXJfaW4pIHsKKwkJc3RtMzJfY3J5cF93cml0ZShjcnlwLCBjcnlwLT5jYXBzLT5jciwg cmVnIHwgQ1JfQ1JZUEVOKTsKKworCQlyZXQgPSBzdG0zMl9jcnlwX3dhaXRfaW5wdXQoY3J5cCk7 CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoY3J5cC0+ZGV2LCAiaW5wdXQgaGVhZGVyIHJlYWR5 IHRpbWVvdXQgYWZ0ZXIgZG1hXG4iKTsKKwkJCXN0bTMyX2NyeXBfZmluaXNoX3JlcShjcnlwLCBy ZXQpOworCQkJcmV0dXJuOworCQl9CisJCXN0bTMyX2NyeXBfaXJxX3dyaXRlX2djbWNjbV9oZWFk ZXIoY3J5cCk7CisJCVdBUk5fT04oY3J5cC0+aGVhZGVyX2luKTsKKwl9CisKKwlpZiAoc3RtMzJf Y3J5cF9nZXRfaW5wdXRfdGV4dF9sZW4oY3J5cCkpIHsKKwkJLyogUGhhc2UgMyA6IHBheWxvYWQg Ki8KKwkJcmVnID0gc3RtMzJfY3J5cF9yZWFkKGNyeXAsIGNyeXAtPmNhcHMtPmNyKTsKKwkJc3Rt MzJfY3J5cF93cml0ZShjcnlwLCBjcnlwLT5jYXBzLT5jciwgcmVnICYgfkNSX0NSWVBFTik7CisK KwkJcmVnICY9IH5DUl9QSF9NQVNLOworCQlyZWcgfD0gQ1JfUEhfUEFZTE9BRCB8IENSX0NSWVBF TjsKKwkJc3RtMzJfY3J5cF93cml0ZShjcnlwLCBjcnlwLT5jYXBzLT5jciwgcmVnKTsKKworCQlp ZiAoY3J5cC0+ZmxhZ3MgJiBGTEdfSU5fT1VUX0RNQSkgeworCQkJcmV0ID0gc3RtMzJfY3J5cF9k bWFfc3RhcnQoY3J5cCk7CisJCQlpZiAocmV0KQorCQkJCXN0bTMyX2NyeXBfZmluaXNoX3JlcShj cnlwLCByZXQpOworCQl9IGVsc2UgeworCQkJc3RtMzJfY3J5cF9pdF9zdGFydChjcnlwKTsKKwkJ fQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFBoYXNlIDQgOiB0YWcuCisJCSAqIE5vdGhpbmcgdG8g cmVhZCwgbm90aGluZyB0byB3cml0ZSA9PiBlbmQgcmVxdWVzdAorCQkgKi8KKwkJc3RtMzJfY3J5 cF9maW5pc2hfcmVxKGNyeXAsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgc3RtMzJfY3J5cF9k bWFfY2FsbGJhY2sodm9pZCAqcGFyYW0pCit7CisJc3RydWN0IHN0bTMyX2NyeXAgKmNyeXAgPSAo c3RydWN0IHN0bTMyX2NyeXAgKilwYXJhbTsKKwlpbnQgcmV0OworCXUzMiByZWc7CisKKwljb21w bGV0ZSgmY3J5cC0+ZG1hX2NvbXBsZXRpb24pOyAvKiBjb21wbGV0aW9uIHRvIGluZGljYXRlIG5v IHRpbWVvdXQgKi8KKworCWRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UoY3J5cC0+ZGV2LCBjcnlwLT5v dXRfc2csIGNyeXAtPm91dF9zZ19sZW4sIERNQV9GUk9NX0RFVklDRSk7CisKKwlpZiAoY3J5cC0+ aW5fc2cgIT0gY3J5cC0+b3V0X3NnKQorCQlkbWFfdW5tYXBfc2coY3J5cC0+ZGV2LCBjcnlwLT5p bl9zZywgY3J5cC0+aW5fc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKKworCWRtYV91bm1hcF9zZyhj cnlwLT5kZXYsIGNyeXAtPm91dF9zZywgY3J5cC0+b3V0X3NnX2xlbiwgRE1BX0ZST01fREVWSUNF KTsKKworCXJlZyA9IHN0bTMyX2NyeXBfcmVhZChjcnlwLCBjcnlwLT5jYXBzLT5kbWFjcik7CisJ c3RtMzJfY3J5cF93cml0ZShjcnlwLCBjcnlwLT5jYXBzLT5kbWFjciwgcmVnICYgfihETUFDUl9E T0VOIHwgRE1BQ1JfRElFTikpOworCisJcmVnID0gc3RtMzJfY3J5cF9yZWFkKGNyeXAsIGNyeXAt PmNhcHMtPmNyKTsKKworCWlmIChpc19nY20oY3J5cCkgfHwgaXNfY2NtKGNyeXApKSB7CisJCWtm cmVlKGNyeXAtPmluX3NnKTsKKwkJa2ZyZWUoY3J5cC0+b3V0X3NnKTsKKwl9IGVsc2UgeworCQlp ZiAoY3J5cC0+aW5fc2cgIT0gY3J5cC0+cmVxLT5zcmMpCisJCQlrZnJlZShjcnlwLT5pbl9zZyk7 CisJCWlmIChjcnlwLT5vdXRfc2cgIT0gY3J5cC0+cmVxLT5kc3QpCisJCQlrZnJlZShjcnlwLT5v dXRfc2cpOworCX0KKworCWlmIChjcnlwLT5wYXlsb2FkX2luKSB7CisJCXN0bTMyX2NyeXBfd3Jp dGUoY3J5cCwgY3J5cC0+Y2Fwcy0+Y3IsIHJlZyB8IENSX0NSWVBFTik7CisKKwkJcmV0ID0gc3Rt MzJfY3J5cF93YWl0X2lucHV0KGNyeXApOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGNyeXAt PmRldiwgImlucHV0IHJlYWR5IHRpbWVvdXQgYWZ0ZXIgZG1hXG4iKTsKKwkJCXN0bTMyX2NyeXBf ZmluaXNoX3JlcShjcnlwLCByZXQpOworCQkJcmV0dXJuOworCQl9CisJCXN0bTMyX2NyeXBfaXJx X3dyaXRlX2RhdGEoY3J5cCk7CisKKwkJcmV0ID0gc3RtMzJfY3J5cF93YWl0X291dHB1dChjcnlw KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihjcnlwLT5kZXYsICJvdXRwdXQgcmVhZHkgdGlt ZW91dCBhZnRlciBkbWFcbiIpOworCQkJc3RtMzJfY3J5cF9maW5pc2hfcmVxKGNyeXAsIHJldCk7 CisJCQlyZXR1cm47CisJCX0KKwkJc3RtMzJfY3J5cF9pcnFfcmVhZF9kYXRhKGNyeXApOworCX0K KworCXN0bTMyX2NyeXBfZmluaXNoX3JlcShjcnlwLCAwKTsKIH0KIAotc3RhdGljIGludCBzdG0z Ml9jcnlwX2NwdV9zdGFydChzdHJ1Y3Qgc3RtMzJfY3J5cCAqY3J5cCkKK3N0YXRpYyBpbnQgc3Rt MzJfY3J5cF9oZWFkZXJfZG1hX3N0YXJ0KHN0cnVjdCBzdG0zMl9jcnlwICpjcnlwKQoreworCWlu dCByZXQ7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eF9pbjsKKwl1MzIgcmVn OworCXNpemVfdCBhbGlnbl9zaXplOworCisJcmV0ID0gZG1hX21hcF9zZyhjcnlwLT5kZXYsIGNy eXAtPmhlYWRlcl9zZywgY3J5cC0+aGVhZGVyX3NnX2xlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYg KCFyZXQpIHsKKwkJZGV2X2VycihjcnlwLT5kZXYsICJkbWFfbWFwX3NnKCkgZXJyb3JcbiIpOwor CQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkbWFfc3luY19zZ19mb3JfZGV2aWNlKGNyeXAtPmRl diwgY3J5cC0+aGVhZGVyX3NnLCBjcnlwLT5oZWFkZXJfc2dfbGVuLCBETUFfVE9fREVWSUNFKTsK KworCXR4X2luID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2coY3J5cC0+ZG1hX2xjaF9pbiwgY3J5 cC0+aGVhZGVyX3NnLCBjcnlwLT5oZWFkZXJfc2dfbGVuLAorCQkJCQlETUFfTUVNX1RPX0RFViwg RE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKKwlpZiAoIXR4X2luKSB7CisJCWRl dl9lcnIoY3J5cC0+ZGV2LCAiSU4gcHJlcF9zbGF2ZV9zZygpIGZhaWxlZFxuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCXR4X2luLT5jYWxsYmFja19wYXJhbSA9IGNyeXA7CisJdHhfaW4t PmNhbGxiYWNrID0gc3RtMzJfY3J5cF9oZWFkZXJfZG1hX2NhbGxiYWNrOworCisJLyogQWR2YW5j ZSBzY2F0dGVyd2FsayB0byBub3QgRE1BJ2VkIGRhdGEgKi8KKwlhbGlnbl9zaXplID0gQUxJR05f RE9XTihjcnlwLT5oZWFkZXJfaW4sIGNyeXAtPmh3X2Jsb2Nrc2l6ZSk7CisJc2NhdHRlcndhbGtf Y29weWNodW5rcyhOVUxMLCAmY3J5cC0+aW5fd2FsaywgYWxpZ25fc2l6ZSwgMik7CisJY3J5cC0+ aGVhZGVyX2luIC09IGFsaWduX3NpemU7CisKKwlyZXQgPSBkbWFfc3VibWl0X2Vycm9yKGRtYWVu Z2luZV9zdWJtaXQodHhfaW4pKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNyeXAtPmRl diwgIkRNQSBpbiBzdWJtaXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZG1hX2Fz eW5jX2lzc3VlX3BlbmRpbmcoY3J5cC0+ZG1hX2xjaF9pbik7CisKKwlyZWcgPSBzdG0zMl9jcnlw X3JlYWQoY3J5cCwgY3J5cC0+Y2Fwcy0+ZG1hY3IpOworCXN0bTMyX2NyeXBfd3JpdGUoY3J5cCwg Y3J5cC0+Y2Fwcy0+ZG1hY3IsIHJlZyB8IERNQUNSX0RJRU4pOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgc3RtMzJfY3J5cF9kbWFfc3RhcnQoc3RydWN0IHN0bTMyX2NyeXAgKmNyeXAp Cit7CisJaW50IHJldDsKKwlzaXplX3QgYWxpZ25fc2l6ZTsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4 X2Rlc2NyaXB0b3IgKnR4X2luLCAqdHhfb3V0OworCXUzMiByZWc7CisKKwlpZiAoY3J5cC0+aW5f c2cgIT0gY3J5cC0+b3V0X3NnKSB7CisJCXJldCA9IGRtYV9tYXBfc2coY3J5cC0+ZGV2LCBjcnlw LT5pbl9zZywgY3J5cC0+aW5fc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKKwkJaWYgKCFyZXQpIHsK KwkJCWRldl9lcnIoY3J5cC0+ZGV2LCAiZG1hX21hcF9zZygpIGVycm9yXG4iKTsKKwkJCXJldHVy biAtRU5PTUVNOworCQl9CisJfQorCisJcmV0ID0gZG1hX21hcF9zZyhjcnlwLT5kZXYsIGNyeXAt Pm91dF9zZywgY3J5cC0+b3V0X3NnX2xlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoIXJldCkg eworCQlkZXZfZXJyKGNyeXAtPmRldiwgImRtYV9tYXBfc2coKSBlcnJvclxuIik7CisJCXJldHVy biAtRU5PTUVNOworCX0KKworCWRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UoY3J5cC0+ZGV2LCBjcnlw LT5pbl9zZywgY3J5cC0+aW5fc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKKworCXR4X2luID0gZG1h ZW5naW5lX3ByZXBfc2xhdmVfc2coY3J5cC0+ZG1hX2xjaF9pbiwgY3J5cC0+aW5fc2csIGNyeXAt PmluX3NnX2xlbiwKKwkJCQkJRE1BX01FTV9UT19ERVYsIERNQV9QUkVQX0lOVEVSUlVQVCB8IERN QV9DVFJMX0FDSyk7CisJaWYgKCF0eF9pbikgeworCQlkZXZfZXJyKGNyeXAtPmRldiwgIklOIHBy ZXBfc2xhdmVfc2coKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBO byBjYWxsYmFjayBuZWNlc3NhcnkgKi8KKwl0eF9pbi0+Y2FsbGJhY2tfcGFyYW0gPSBjcnlwOwor CXR4X2luLT5jYWxsYmFjayA9IE5VTEw7CisKKwl0eF9vdXQgPSBkbWFlbmdpbmVfcHJlcF9zbGF2 ZV9zZyhjcnlwLT5kbWFfbGNoX291dCwgY3J5cC0+b3V0X3NnLCBjcnlwLT5vdXRfc2dfbGVuLAor CQkJCQkgRE1BX0RFVl9UT19NRU0sIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7 CisJaWYgKCF0eF9vdXQpIHsKKwkJZGV2X2VycihjcnlwLT5kZXYsICJPVVQgcHJlcF9zbGF2ZV9z ZygpIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlaW5pdF9jb21wbGV0 aW9uKCZjcnlwLT5kbWFfY29tcGxldGlvbik7CisJdHhfb3V0LT5jYWxsYmFjayA9IHN0bTMyX2Ny eXBfZG1hX2NhbGxiYWNrOworCXR4X291dC0+Y2FsbGJhY2tfcGFyYW0gPSBjcnlwOworCisJLyog QWR2YW5jZSBzY2F0dGVyd2FsayB0byBub3QgRE1BJ2VkIGRhdGEgKi8KKwlhbGlnbl9zaXplID0g QUxJR05fRE9XTihjcnlwLT5wYXlsb2FkX2luLCBjcnlwLT5od19ibG9ja3NpemUpOworCXNjYXR0 ZXJ3YWxrX2NvcHljaHVua3MoTlVMTCwgJmNyeXAtPmluX3dhbGssIGFsaWduX3NpemUsIDIpOwor CWNyeXAtPnBheWxvYWRfaW4gLT0gYWxpZ25fc2l6ZTsKKworCXJldCA9IGRtYV9zdWJtaXRfZXJy b3IoZG1hZW5naW5lX3N1Ym1pdCh0eF9pbikpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIo Y3J5cC0+ZGV2LCAiRE1BIGluIHN1Ym1pdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0K KwlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhjcnlwLT5kbWFfbGNoX2luKTsKKworCS8qIEFkdmFu Y2Ugc2NhdHRlcndhbGsgdG8gbm90IERNQSdlZCBkYXRhICovCisJc2NhdHRlcndhbGtfY29weWNo dW5rcyhOVUxMLCAmY3J5cC0+b3V0X3dhbGssIGFsaWduX3NpemUsIDIpOworCWNyeXAtPnBheWxv YWRfb3V0IC09IGFsaWduX3NpemU7CisJcmV0ID0gZG1hX3N1Ym1pdF9lcnJvcihkbWFlbmdpbmVf c3VibWl0KHR4X291dCkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY3J5cC0+ZGV2LCAi RE1BIG91dCBzdWJtaXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZG1hX2FzeW5j X2lzc3VlX3BlbmRpbmcoY3J5cC0+ZG1hX2xjaF9vdXQpOworCisJcmVnID0gc3RtMzJfY3J5cF9y ZWFkKGNyeXAsIGNyeXAtPmNhcHMtPmRtYWNyKTsKKwlzdG0zMl9jcnlwX3dyaXRlKGNyeXAsIGNy eXAtPmNhcHMtPmRtYWNyLCByZWcgfCBETUFDUl9ET0VOIHwgRE1BQ1JfRElFTik7CisKKwlpZiAo IXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY3J5cC0+ZG1hX2NvbXBsZXRpb24sIG1zZWNz X3RvX2ppZmZpZXMoMTAwMCkpKSB7CisJCWRldl9lcnIoY3J5cC0+ZGV2LCAiRE1BIG91dCB0aW1l ZCBvdXRcbiIpOworCQlkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoY3J5cC0+ZG1hX2xjaF9vdXQp OworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBzdG0zMl9jcnlwX2l0X3N0YXJ0KHN0cnVjdCBzdG0zMl9jcnlwICpjcnlwKQogewogCS8qIEVu YWJsZSBpbnRlcnJ1cHQgYW5kIGxldCB0aGUgSVJRIGhhbmRsZXIgZG8gZXZlcnl0aGluZyAqLwog CXN0bTMyX2NyeXBfd3JpdGUoY3J5cCwgY3J5cC0+Y2Fwcy0+aW1zYywgSU1TQ1JfSU4gfCBJTVND Ul9PVVQpOwpAQCAtMTE0OSwxMyArMTQxOSwyNTYgQEAgc3RhdGljIGludCBzdG0zMl9jcnlwX3Rk ZXNfY2JjX2RlY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSkKIAlyZXR1cm4gc3Rt MzJfY3J5cF9jcnlwdChyZXEsIEZMR19UREVTIHwgRkxHX0NCQyk7CiB9CiAKK3N0YXRpYyBlbnVt IHN0bTMyX2RtYV9tb2RlIHN0bTMyX2NyeXBfZG1hX2NoZWNrX3NnKHN0cnVjdCBzY2F0dGVybGlz dCAqdGVzdF9zZywgc2l6ZV90IGxlbiwKKwkJCQkJCSAgIHNpemVfdCBibG9ja19zaXplKQorewor CXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGk7CisKKwlpZiAobGVuIDw9IDE2KQorCQly ZXR1cm4gTk9fRE1BOyAvKiBGYXN0ZXIgKi8KKworCWZvcl9lYWNoX3NnKHRlc3Rfc2csIHNnLCBz Z19uZW50cyh0ZXN0X3NnKSwgaSkgeworCQlpZiAoIUlTX0FMSUdORUQoc2ctPmxlbmd0aCwgYmxv Y2tfc2l6ZSkgJiYgIXNnX2lzX2xhc3Qoc2cpKQorCQkJcmV0dXJuIE5PX0RNQTsKKworCQlpZiAo c2ctPm9mZnNldCAlIHNpemVvZih1MzIpKQorCQkJcmV0dXJuIE5PX0RNQTsKKworCQlpZiAoc2df aXNfbGFzdChzZykgJiYgIUlTX0FMSUdORUQoc2ctPmxlbmd0aCwgQUVTX0JMT0NLX1NJWkUpKQor CQkJcmV0dXJuIERNQV9ORUVEX1NHX1RSVU5DOworCX0KKworCXJldHVybiBETUFfUExBSU5fU0c7 Cit9CisKK3N0YXRpYyBlbnVtIHN0bTMyX2RtYV9tb2RlIHN0bTMyX2NyeXBfZG1hX2NoZWNrKHN0 cnVjdCBzdG0zMl9jcnlwICpjcnlwLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmluX3NnLAorCQkJCQkJ c3RydWN0IHNjYXR0ZXJsaXN0ICpvdXRfc2cpCit7CisJZW51bSBzdG0zMl9kbWFfbW9kZSByZXQg PSBETUFfUExBSU5fU0c7CisKKwlpZiAoIWlzX2FlcyhjcnlwKSkKKwkJcmV0dXJuIE5PX0RNQTsK KworCWlmICghY3J5cC0+ZG1hX2xjaF9pbiB8fCAhY3J5cC0+ZG1hX2xjaF9vdXQpCisJCXJldHVy biBOT19ETUE7CisKKwlyZXQgPSBzdG0zMl9jcnlwX2RtYV9jaGVja19zZyhpbl9zZywgY3J5cC0+ cGF5bG9hZF9pbiwgQUVTX0JMT0NLX1NJWkUpOworCWlmIChyZXQgPT0gTk9fRE1BKQorCQlyZXR1 cm4gcmV0OworCisJcmV0ID0gc3RtMzJfY3J5cF9kbWFfY2hlY2tfc2cob3V0X3NnLCBjcnlwLT5w YXlsb2FkX291dCwgQUVTX0JMT0NLX1NJWkUpOworCWlmIChyZXQgPT0gTk9fRE1BKQorCQlyZXR1 cm4gcmV0OworCisJLyogQ2hlY2sgQ1RSIGNvdW50ZXIgb3ZlcmZsb3cgKi8KKwlpZiAoaXNfYWVz KGNyeXApICYmIGlzX2N0cihjcnlwKSkgeworCQl1MzIgYzsKKwkJX19iZTMyIGl2MzsKKworCQlt ZW1jcHkoJml2MywgJmNyeXAtPnJlcS0+aXZbMyAqIHNpemVvZih1MzIpXSwgc2l6ZW9mKGl2Mykp OworCQljID0gYmUzMl90b19jcHUoaXYzKTsKKwkJaWYgKChjICsgY3J5cC0+cGF5bG9hZF9pbikg PCBjcnlwLT5wYXlsb2FkX2luKQorCQkJcmV0dXJuIE5PX0RNQTsKKwl9CisKKwkvKiBXb3JrYXJv dW5kICovCisJaWYgKGlzX2FlcyhjcnlwKSAmJiBpc19jdHIoY3J5cCkgJiYgcmV0ID09IERNQV9O RUVEX1NHX1RSVU5DKQorCQlyZXR1cm4gTk9fRE1BOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBzdG0zMl9jcnlwX3RydW5jYXRlX3NnKHN0cnVjdCBzY2F0dGVybGlzdCAqKm5ld19z Zywgc2l6ZV90ICpuZXdfc2dfbGVuLAorCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgb2Zm X3Qgc2tpcCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXI7CisJaW50 IGFsbG9jX3NnX2xlbjsKKworCSpuZXdfc2dfbGVuID0gMDsKKworCWlmICghc2cgfHwgIXNpemUp IHsKKwkJKm5ld19zZyA9IE5VTEw7CisJCXJldHVybiAwOworCX0KKworCWFsbG9jX3NnX2xlbiA9 IHNnX25lbnRzX2Zvcl9sZW4oc2csIHNraXAgKyBzaXplKTsKKwlpZiAoYWxsb2Nfc2dfbGVuIDwg MCkKKwkJcmV0dXJuIGFsbG9jX3NnX2xlbjsKKworCS8qIFdlIGFsbG9jYXRlIHRvIG11Y2ggc2cg ZW50cnksIGJ1dCBpdCBpcyBlYXNpZXIgKi8KKwkqbmV3X3NnID0ga21hbGxvY19hcnJheSgoc2l6 ZV90KWFsbG9jX3NnX2xlbiwgc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksIEdGUF9LRVJORUwp OworCWlmICghKm5ld19zZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZ19pbml0X3RhYmxlKCpu ZXdfc2csICh1bnNpZ25lZCBpbnQpYWxsb2Nfc2dfbGVuKTsKKworCWN1ciA9ICpuZXdfc2c7CisJ d2hpbGUgKHNnICYmIHNpemUpIHsKKwkJdW5zaWduZWQgaW50IGxlbiA9IHNnLT5sZW5ndGg7CisJ CXVuc2lnbmVkIGludCBvZmZzZXQgPSBzZy0+b2Zmc2V0OworCisJCWlmIChza2lwID4gbGVuKSB7 CisJCQlza2lwIC09IGxlbjsKKwkJCXNnID0gc2dfbmV4dChzZyk7CisJCQljb250aW51ZTsKKwkJ fQorCisJCWlmIChza2lwKSB7CisJCQlsZW4gLT0gc2tpcDsKKwkJCW9mZnNldCArPSBza2lwOwor CQkJc2tpcCA9IDA7CisJCX0KKworCQlpZiAoc2l6ZSA8IGxlbikKKwkJCWxlbiA9IHNpemU7CisK KwkJaWYgKGxlbiA+IDApIHsKKwkJCSgqbmV3X3NnX2xlbikrKzsKKwkJCXNpemUgLT0gbGVuOwor CQkJc2dfc2V0X3BhZ2UoY3VyLCBzZ19wYWdlKHNnKSwgbGVuLCBvZmZzZXQpOworCQkJaWYgKHNp emUgPT0gMCkKKwkJCQlzZ19tYXJrX2VuZChjdXIpOworCQkJY3VyID0gc2dfbmV4dChjdXIpOwor CQl9CisKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBzdG0zMl9jcnlwX2NpcGhlcl9wcmVwYXJlKHN0cnVjdCBzdG0zMl9jcnlwICpjcnlwLCBz dHJ1Y3Qgc2NhdHRlcmxpc3QgKmluX3NnLAorCQkJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpv dXRfc2cpCit7CisJc2l6ZV90IGFsaWduX3NpemU7CisJaW50IHJldDsKKworCWNyeXAtPmRtYV9t b2RlID0gc3RtMzJfY3J5cF9kbWFfY2hlY2soY3J5cCwgaW5fc2csIG91dF9zZyk7CisKKwlzY2F0 dGVyd2Fsa19zdGFydCgmY3J5cC0+aW5fd2FsaywgaW5fc2cpOworCXNjYXR0ZXJ3YWxrX3N0YXJ0 KCZjcnlwLT5vdXRfd2Fsaywgb3V0X3NnKTsKKworCWlmIChjcnlwLT5kbWFfbW9kZSA9PSBOT19E TUEpIHsKKwkJY3J5cC0+ZmxhZ3MgJj0gfkZMR19JTl9PVVRfRE1BOworCisJCWlmIChpc19jdHIo Y3J5cCkpCisJCQltZW1zZXQoY3J5cC0+bGFzdF9jdHIsIDAsIHNpemVvZihjcnlwLT5sYXN0X2N0 cikpOworCisJfSBlbHNlIGlmIChjcnlwLT5kbWFfbW9kZSA9PSBETUFfTkVFRF9TR19UUlVOQykg eworCisJCWNyeXAtPmZsYWdzIHw9IEZMR19JTl9PVVRfRE1BOworCisJCWFsaWduX3NpemUgPSBB TElHTl9ET1dOKGNyeXAtPnBheWxvYWRfaW4sIGNyeXAtPmh3X2Jsb2Nrc2l6ZSk7CisJCXJldCA9 IHN0bTMyX2NyeXBfdHJ1bmNhdGVfc2coJmNyeXAtPmluX3NnLCAmY3J5cC0+aW5fc2dfbGVuLCBp bl9zZywgMCwgYWxpZ25fc2l6ZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJl dCA9IHN0bTMyX2NyeXBfdHJ1bmNhdGVfc2coJmNyeXAtPm91dF9zZywgJmNyeXAtPm91dF9zZ19s ZW4sIG91dF9zZywgMCwKKwkJCQkJICAgICBhbGlnbl9zaXplKTsKKwkJaWYgKHJldCkgeworCQkJ a2ZyZWUoY3J5cC0+aW5fc2cpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCWNy eXAtPmZsYWdzIHw9IEZMR19JTl9PVVRfRE1BOworCisJCWNyeXAtPmluX3NnID0gaW5fc2c7CisJ CWNyeXAtPm91dF9zZyA9IG91dF9zZzsKKworCQlyZXQgPSBzZ19uZW50c19mb3JfbGVuKGNyeXAt PmluX3NnLCBjcnlwLT5wYXlsb2FkX2luKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0 OworCQljcnlwLT5pbl9zZ19sZW4gPSAoc2l6ZV90KXJldDsKKworCQlyZXQgPSBzZ19uZW50c19m b3JfbGVuKG91dF9zZywgY3J5cC0+cGF5bG9hZF9vdXQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJl dHVybiByZXQ7CisJCWNyeXAtPm91dF9zZ19sZW4gPSAoc2l6ZV90KXJldDsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBzdG0zMl9jcnlwX2FlYWRfcHJlcGFyZShzdHJ1Y3Qgc3Rt MzJfY3J5cCAqY3J5cCwgc3RydWN0IHNjYXR0ZXJsaXN0ICppbl9zZywKKwkJCQkgICBzdHJ1Y3Qg c2NhdHRlcmxpc3QgKm91dF9zZykKK3sKKwlzaXplX3QgYWxpZ25fc2l6ZTsKKwlvZmZfdCBza2lw OworCWludCByZXQsIHJldDI7CisKKwljcnlwLT5oZWFkZXJfc2cgPSBOVUxMOworCWNyeXAtPmlu X3NnID0gTlVMTDsKKwljcnlwLT5vdXRfc2cgPSBOVUxMOworCisJaWYgKCFjcnlwLT5kbWFfbGNo X2luIHx8ICFjcnlwLT5kbWFfbGNoX291dCkgeworCQljcnlwLT5kbWFfbW9kZSA9IE5PX0RNQTsK KwkJY3J5cC0+ZmxhZ3MgJj0gfihGTEdfSU5fT1VUX0RNQSB8IEZMR19IRUFERVJfRE1BKTsKKwor CQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDQ00gaHdfaW5pdCBtYXkgaGF2ZSBhZHZhbmNlZCBpbiBo ZWFkZXIgKi8KKwlza2lwID0gY3J5cC0+YXJlcS0+YXNzb2NsZW4gLSBjcnlwLT5oZWFkZXJfaW47 CisKKwlhbGlnbl9zaXplID0gQUxJR05fRE9XTihjcnlwLT5oZWFkZXJfaW4sIGNyeXAtPmh3X2Js b2Nrc2l6ZSk7CisJcmV0ID0gc3RtMzJfY3J5cF90cnVuY2F0ZV9zZygmY3J5cC0+aGVhZGVyX3Nn LCAmY3J5cC0+aGVhZGVyX3NnX2xlbiwgaW5fc2csIHNraXAsCisJCQkJICAgICBhbGlnbl9zaXpl KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3RtMzJfY3J5cF9kbWFfY2hl Y2tfc2coY3J5cC0+aGVhZGVyX3NnLCBhbGlnbl9zaXplLCBBRVNfQkxPQ0tfU0laRSk7CisJaWYg KHJldCA9PSBOT19ETUEpIHsKKwkJLyogV2UgY2Fubm90IERNQSB0aGUgaGVhZGVyICovCisJCWtm cmVlKGNyeXAtPmhlYWRlcl9zZyk7CisJCWNyeXAtPmhlYWRlcl9zZyA9IE5VTEw7CisKKwkJY3J5 cC0+ZmxhZ3MgJj0gfkZMR19IRUFERVJfRE1BOworCX0gZWxzZSB7CisJCWNyeXAtPmZsYWdzIHw9 IEZMR19IRUFERVJfRE1BOworCX0KKworCS8qIE5vdyBza2lwIGFsbCBoZWFkZXIgdG8gYmUgYXQg cGF5bG9hZCBzdGFydCAqLworCXNraXAgPSBjcnlwLT5hcmVxLT5hc3NvY2xlbjsKKwlhbGlnbl9z aXplID0gQUxJR05fRE9XTihjcnlwLT5wYXlsb2FkX2luLCBjcnlwLT5od19ibG9ja3NpemUpOwor CXJldCA9IHN0bTMyX2NyeXBfdHJ1bmNhdGVfc2coJmNyeXAtPmluX3NnLCAmY3J5cC0+aW5fc2df bGVuLCBpbl9zZywgc2tpcCwgYWxpZ25fc2l6ZSk7CisJaWYgKHJldCkgeworCQlrZnJlZShjcnlw LT5oZWFkZXJfc2cpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEZvciBvdXQgYnVmZmVyIGFs aWduX3NpemUgaXMgc2FtZSBhcyBpbiBidWZmZXIgKi8KKwlyZXQgPSBzdG0zMl9jcnlwX3RydW5j YXRlX3NnKCZjcnlwLT5vdXRfc2csICZjcnlwLT5vdXRfc2dfbGVuLCBvdXRfc2csIHNraXAsIGFs aWduX3NpemUpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUoY3J5cC0+aGVhZGVyX3NnKTsKKwkJa2Zy ZWUoY3J5cC0+aW5fc2cpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHN0bTMyX2NyeXBf ZG1hX2NoZWNrX3NnKGNyeXAtPmluX3NnLCBhbGlnbl9zaXplLCBBRVNfQkxPQ0tfU0laRSk7CisJ cmV0MiA9IHN0bTMyX2NyeXBfZG1hX2NoZWNrX3NnKGNyeXAtPm91dF9zZywgYWxpZ25fc2l6ZSwg QUVTX0JMT0NLX1NJWkUpOworCWlmIChyZXQgPT0gTk9fRE1BIHx8IHJldDIgPT0gTk9fRE1BKSB7 CisJCWtmcmVlKGNyeXAtPmluX3NnKTsKKwkJY3J5cC0+aW5fc2cgPSBOVUxMOworCisJCWtmcmVl KGNyeXAtPm91dF9zZyk7CisJCWNyeXAtPm91dF9zZyA9IE5VTEw7CisKKwkJY3J5cC0+ZmxhZ3Mg Jj0gfkZMR19JTl9PVVRfRE1BOworCX0gZWxzZSB7CisJCWNyeXAtPmZsYWdzIHw9IEZMR19JTl9P VVRfRE1BOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHN0bTMyX2NyeXBfcHJl cGFyZV9yZXEoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwKIAkJCQkgIHN0cnVjdCBhZWFk X3JlcXVlc3QgKmFyZXEpCiB7CiAJc3RydWN0IHN0bTMyX2NyeXBfY3R4ICpjdHg7CiAJc3RydWN0 IHN0bTMyX2NyeXAgKmNyeXA7CiAJc3RydWN0IHN0bTMyX2NyeXBfcmVxY3R4ICpyY3R4OwotCXN0 cnVjdCBzY2F0dGVybGlzdCAqaW5fc2c7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICppbl9zZywgKm91 dF9zZzsKIAlpbnQgcmV0OwogCiAJaWYgKCFyZXEgJiYgIWFyZXEpCkBAIC0xMTY5LDggKzE2ODIs NiBAQCBzdGF0aWMgaW50IHN0bTMyX2NyeXBfcHJlcGFyZV9yZXEoc3RydWN0IHNrY2lwaGVyX3Jl cXVlc3QgKnJlcSwKIAlyY3R4ID0gcmVxID8gc2tjaXBoZXJfcmVxdWVzdF9jdHgocmVxKSA6IGFl YWRfcmVxdWVzdF9jdHgoYXJlcSk7CiAJcmN0eC0+bW9kZSAmPSBGTEdfTU9ERV9NQVNLOwogCi0J Y3R4LT5jcnlwID0gY3J5cDsKLQogCWNyeXAtPmZsYWdzID0gKGNyeXAtPmZsYWdzICYgfkZMR19N T0RFX01BU0spIHwgcmN0eC0+bW9kZTsKIAljcnlwLT5od19ibG9ja3NpemUgPSBpc19hZXMoY3J5 cCkgPyBBRVNfQkxPQ0tfU0laRSA6IERFU19CTE9DS19TSVpFOwogCWNyeXAtPmN0eCA9IGN0eDsK QEAgLTExODIsNiArMTY5MywxNSBAQCBzdGF0aWMgaW50IHN0bTMyX2NyeXBfcHJlcGFyZV9yZXEo c3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwKIAkJY3J5cC0+cGF5bG9hZF9pbiA9IHJlcS0+ Y3J5cHRsZW47CiAJCWNyeXAtPnBheWxvYWRfb3V0ID0gcmVxLT5jcnlwdGxlbjsKIAkJY3J5cC0+ YXV0aHNpemUgPSAwOworCisJCWluX3NnID0gcmVxLT5zcmM7CisJCW91dF9zZyA9IHJlcS0+ZHN0 OworCisJCXJldCA9IHN0bTMyX2NyeXBfY2lwaGVyX3ByZXBhcmUoY3J5cCwgaW5fc2csIG91dF9z Zyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHN0bTMyX2NyeXBfaHdf aW5pdChjcnlwKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBMZW5ndGggb2YgaW5wdXQgYW5kIG91 dHB1dCBkYXRhOgpAQCAtMTIxMSwyMyArMTczMSwyMiBAQCBzdGF0aWMgaW50IHN0bTMyX2NyeXBf cHJlcGFyZV9yZXEoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwKIAkJCWNyeXAtPmhlYWRl cl9pbiA9IGFyZXEtPmFzc29jbGVuOwogCQkJY3J5cC0+cGF5bG9hZF9vdXQgPSBjcnlwLT5wYXls b2FkX2luOwogCQl9Ci0JfQotCi0JaW5fc2cgPSByZXEgPyByZXEtPnNyYyA6IGFyZXEtPnNyYzsK LQlzY2F0dGVyd2Fsa19zdGFydCgmY3J5cC0+aW5fd2FsaywgaW5fc2cpOwogCi0JY3J5cC0+b3V0 X3NnID0gcmVxID8gcmVxLT5kc3QgOiBhcmVxLT5kc3Q7Ci0Jc2NhdHRlcndhbGtfc3RhcnQoJmNy eXAtPm91dF93YWxrLCBjcnlwLT5vdXRfc2cpOworCQlpbl9zZyA9IGFyZXEtPnNyYzsKKwkJb3V0 X3NnID0gYXJlcS0+ZHN0OwogCi0JaWYgKGlzX2djbShjcnlwKSB8fCBpc19jY20oY3J5cCkpIHsK KwkJc2NhdHRlcndhbGtfc3RhcnQoJmNyeXAtPmluX3dhbGssIGluX3NnKTsKKwkJc2NhdHRlcndh bGtfc3RhcnQoJmNyeXAtPm91dF93YWxrLCBvdXRfc2cpOwogCQkvKiBJbiBvdXRwdXQsIGp1bXAg YWZ0ZXIgYXNzb2MgZGF0YSAqLwogCQlzY2F0dGVyd2Fsa19jb3B5Y2h1bmtzKE5VTEwsICZjcnlw LT5vdXRfd2FsaywgY3J5cC0+YXJlcS0+YXNzb2NsZW4sIDIpOwotCX0KIAotCWlmIChpc19jdHIo Y3J5cCkpCi0JCW1lbXNldChjcnlwLT5sYXN0X2N0ciwgMCwgc2l6ZW9mKGNyeXAtPmxhc3RfY3Ry KSk7CisJCXJldCA9IHN0bTMyX2NyeXBfaHdfaW5pdChjcnlwKTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisKKwkJcmV0ID0gc3RtMzJfY3J5cF9hZWFkX3ByZXBhcmUoY3J5cCwgaW5fc2cs IG91dF9zZyk7CisJfQogCi0JcmV0ID0gc3RtMzJfY3J5cF9od19pbml0KGNyeXApOwogCXJldHVy biByZXQ7CiB9CiAKQEAgLTEyMzksMTIgKzE3NTgsMjQgQEAgc3RhdGljIGludCBzdG0zMl9jcnlw X2NpcGhlcl9vbmVfcmVxKHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUsIHZvaWQgKmFyZXEp CiAJc3RydWN0IHN0bTMyX2NyeXBfY3R4ICpjdHggPSBjcnlwdG9fc2tjaXBoZXJfY3R4KAogCQkJ Y3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpKTsKIAlzdHJ1Y3Qgc3RtMzJfY3J5cCAqY3J5cCA9 IGN0eC0+Y3J5cDsKKwlpbnQgcmV0OwogCiAJaWYgKCFjcnlwKQogCQlyZXR1cm4gLUVOT0RFVjsK IAotCXJldHVybiBzdG0zMl9jcnlwX3ByZXBhcmVfcmVxKHJlcSwgTlVMTCkgPzoKLQkgICAgICAg c3RtMzJfY3J5cF9jcHVfc3RhcnQoY3J5cCk7CisJcmV0ID0gc3RtMzJfY3J5cF9wcmVwYXJlX3Jl cShyZXEsIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY3J5cC0+Zmxh Z3MgJiBGTEdfSU5fT1VUX0RNQSkKKwkJcmV0ID0gc3RtMzJfY3J5cF9kbWFfc3RhcnQoY3J5cCk7 CisJZWxzZQorCQlyZXQgPSBzdG0zMl9jcnlwX2l0X3N0YXJ0KGNyeXApOworCisJaWYgKHJldCA9 PSAtRVRJTUVET1VUKQorCQlzdG0zMl9jcnlwX2ZpbmlzaF9yZXEoY3J5cCwgcmV0KTsKKworCXJl dHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc3RtMzJfY3J5cF9hZWFkX29uZV9yZXEoc3RydWN0 IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwgdm9pZCAqYXJlcSkKQEAgLTEyNjIsMTMgKzE3OTMsMjAg QEAgc3RhdGljIGludCBzdG0zMl9jcnlwX2FlYWRfb25lX3JlcShzdHJ1Y3QgY3J5cHRvX2VuZ2lu ZSAqZW5naW5lLCB2b2lkICphcmVxKQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAo dW5saWtlbHkoIWNyeXAtPnBheWxvYWRfaW4gJiYgIWNyeXAtPmhlYWRlcl9pbikpIHsKKwlpZiAo IXN0bTMyX2NyeXBfZ2V0X2lucHV0X3RleHRfbGVuKGNyeXApICYmICFjcnlwLT5oZWFkZXJfaW4g JiYKKwkgICAgIShjcnlwLT5mbGFncyAmIEZMR19IRUFERVJfRE1BKSkgewogCQkvKiBObyBpbnB1 dCBkYXRhIHRvIHByb2Nlc3M6IGdldCB0YWcgYW5kIGZpbmlzaCAqLwogCQlzdG0zMl9jcnlwX2Zp bmlzaF9yZXEoY3J5cCwgMCk7CiAJCXJldHVybiAwOwogCX0KIAotCXJldHVybiBzdG0zMl9jcnlw X2NwdV9zdGFydChjcnlwKTsKKwlpZiAoY3J5cC0+ZmxhZ3MgJiBGTEdfSEVBREVSX0RNQSkKKwkJ cmV0dXJuIHN0bTMyX2NyeXBfaGVhZGVyX2RtYV9zdGFydChjcnlwKTsKKworCWlmICghY3J5cC0+ aGVhZGVyX2luICYmIGNyeXAtPmZsYWdzICYgRkxHX0lOX09VVF9ETUEpCisJCXJldHVybiBzdG0z Ml9jcnlwX2RtYV9zdGFydChjcnlwKTsKKworCXJldHVybiBzdG0zMl9jcnlwX2l0X3N0YXJ0KGNy eXApOwogfQogCiBzdGF0aWMgaW50IHN0bTMyX2NyeXBfcmVhZF9hdXRoX3RhZyhzdHJ1Y3Qgc3Rt MzJfY3J5cCAqY3J5cCkKQEAgLTE2ODAsNiArMjIxOCw2NSBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qg c3RtMzJfY3J5cF9pcnEoaW50IGlycSwgdm9pZCAqYXJnKQogCXJldHVybiBJUlFfV0FLRV9USFJF QUQ7CiB9CiAKK3N0YXRpYyBpbnQgc3RtMzJfY3J5cF9kbWFfaW5pdChzdHJ1Y3Qgc3RtMzJfY3J5 cCAqY3J5cCkKK3sKKwlzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBkbWFfY29uZjsKKwlzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW47CisJaW50IHJldDsKKworCW1lbXNldCgmZG1hX2NvbmYsIDAsIHNpemVv ZihkbWFfY29uZikpOworCisJZG1hX2NvbmYuZGlyZWN0aW9uID0gRE1BX01FTV9UT19ERVY7CisJ ZG1hX2NvbmYuZHN0X2FkZHIgPSBjcnlwLT5waHlzX2Jhc2UgKyBjcnlwLT5jYXBzLT5kaW47CisJ ZG1hX2NvbmYuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKKwlk bWFfY29uZi5kc3RfbWF4YnVyc3QgPSBDUllQX0RNQV9CVVJTVF9SRUc7CisJZG1hX2NvbmYuZGV2 aWNlX2ZjID0gZmFsc2U7CisKKwljaGFuID0gZG1hX3JlcXVlc3RfY2hhbihjcnlwLT5kZXYsICJp biIpOworCWlmIChJU19FUlIoY2hhbikpCisJCXJldHVybiBQVFJfRVJSKGNoYW4pOworCisJY3J5 cC0+ZG1hX2xjaF9pbiA9IGNoYW47CisJcmV0ID0gZG1hZW5naW5lX3NsYXZlX2NvbmZpZyhjcnlw LT5kbWFfbGNoX2luLCAmZG1hX2NvbmYpOworCWlmIChyZXQpIHsKKwkJZG1hX3JlbGVhc2VfY2hh bm5lbChjcnlwLT5kbWFfbGNoX2luKTsKKwkJY3J5cC0+ZG1hX2xjaF9pbiA9IE5VTEw7CisJCWRl dl9lcnIoY3J5cC0+ZGV2LCAiQ291bGRuJ3QgY29uZmlndXJlIERNQSBpbiBzbGF2ZS5cbiIpOwor CQlyZXR1cm4gcmV0OworCX0KKworCW1lbXNldCgmZG1hX2NvbmYsIDAsIHNpemVvZihkbWFfY29u ZikpOworCisJZG1hX2NvbmYuZGlyZWN0aW9uID0gRE1BX0RFVl9UT19NRU07CisJZG1hX2NvbmYu c3JjX2FkZHIgPSBjcnlwLT5waHlzX2Jhc2UgKyBjcnlwLT5jYXBzLT5kb3V0OworCWRtYV9jb25m LnNyY19hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7CisJZG1hX2NvbmYu c3JjX21heGJ1cnN0ID0gQ1JZUF9ETUFfQlVSU1RfUkVHOworCWRtYV9jb25mLmRldmljZV9mYyA9 IGZhbHNlOworCisJY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW4oY3J5cC0+ZGV2LCAib3V0Iik7CisJ aWYgKElTX0VSUihjaGFuKSkgeworCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNyeXAtPmRtYV9sY2hf aW4pOworCQljcnlwLT5kbWFfbGNoX2luID0gTlVMTDsKKwkJcmV0dXJuIFBUUl9FUlIoY2hhbik7 CisJfQorCisJY3J5cC0+ZG1hX2xjaF9vdXQgPSBjaGFuOworCisJcmV0ID0gZG1hZW5naW5lX3Ns YXZlX2NvbmZpZyhjcnlwLT5kbWFfbGNoX291dCwgJmRtYV9jb25mKTsKKwlpZiAocmV0KSB7CisJ CWRtYV9yZWxlYXNlX2NoYW5uZWwoY3J5cC0+ZG1hX2xjaF9vdXQpOworCQljcnlwLT5kbWFfbGNo X291dCA9IE5VTEw7CisJCWRldl9lcnIoY3J5cC0+ZGV2LCAiQ291bGRuJ3QgY29uZmlndXJlIERN QSBvdXQgc2xhdmUuXG4iKTsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjcnlwLT5kbWFfbGNoX2lu KTsKKwkJY3J5cC0+ZG1hX2xjaF9pbiA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJaW5p dF9jb21wbGV0aW9uKCZjcnlwLT5kbWFfY29tcGxldGlvbik7CisKKwlyZXR1cm4gMDsKK30KKwog c3RhdGljIHN0cnVjdCBza2NpcGhlcl9lbmdpbmVfYWxnIGNyeXB0b19hbGdzW10gPSB7CiB7CiAJ LmJhc2UgPSB7CkBAIC0xOTAxLDYgKzI0OTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN0bTMy X2NyeXBfY2FwcyB1eDUwMF9kYXRhID0gewogCS5zciA9IFVYNTAwX0NSWVBfU1IsCiAJLmRpbiA9 IFVYNTAwX0NSWVBfRElOLAogCS5kb3V0ID0gVVg1MDBfQ1JZUF9ET1VULAorCS5kbWFjciA9IFVY NTAwX0NSWVBfRE1BQ1IsCiAJLmltc2MgPSBVWDUwMF9DUllQX0lNU0MsCiAJLm1pcyA9IFVYNTAw X0NSWVBfTUlTLAogCS5rMWwgPSBVWDUwMF9DUllQX0sxTCwKQEAgLTE5MjMsNiArMjUyMSw3IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtMzJfY3J5cF9jYXBzIGY3X2RhdGEgPSB7CiAJLnNyID0g Q1JZUF9TUiwKIAkuZGluID0gQ1JZUF9ESU4sCiAJLmRvdXQgPSBDUllQX0RPVVQsCisJLmRtYWNy ID0gQ1JZUF9ETUFDUiwKIAkuaW1zYyA9IENSWVBfSU1TQ1IsCiAJLm1pcyA9IENSWVBfTUlTUiwK IAkuazFsID0gQ1JZUF9LMUxSLApAQCAtMTk0NSw2ICsyNTQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBzdG0zMl9jcnlwX2NhcHMgbXAxX2RhdGEgPSB7CiAJLnNyID0gQ1JZUF9TUiwKIAkuZGlu ID0gQ1JZUF9ESU4sCiAJLmRvdXQgPSBDUllQX0RPVVQsCisJLmRtYWNyID0gQ1JZUF9ETUFDUiwK IAkuaW1zYyA9IENSWVBfSU1TQ1IsCiAJLm1pcyA9IENSWVBfTUlTUiwKIAkuazFsID0gQ1JZUF9L MUxSLApAQCAtMTk4NSw2ICsyNTg1LDggQEAgc3RhdGljIGludCBzdG0zMl9jcnlwX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYgKElTX0VSUihjcnlwLT5yZWdzKSkKIAkJ cmV0dXJuIFBUUl9FUlIoY3J5cC0+cmVncyk7CiAKKwljcnlwLT5waHlzX2Jhc2UgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApLT5zdGFydDsKKwogCWlycSA9 IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApCiAJCXJldHVybiBpcnE7 CkBAIC0yMDMwLDYgKzI2MzIsMTcgQEAgc3RhdGljIGludCBzdG0zMl9jcnlwX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBj cnlwKTsKIAorCXJldCA9IHN0bTMyX2NyeXBfZG1hX2luaXQoY3J5cCk7CisJc3dpdGNoIChyZXQp IHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVOT0RFVjoKKwkJZGV2X2RiZyhkZXYsICJE TUEgbW9kZSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBl cnJfZG1hOworCX0KKwogCXNwaW5fbG9jaygmY3J5cF9saXN0LmxvY2spOwogCWxpc3RfYWRkKCZj cnlwLT5saXN0LCAmY3J5cF9saXN0LmRldl9saXN0KTsKIAlzcGluX3VubG9jaygmY3J5cF9saXN0 LmxvY2spOwpAQCAtMjA3NSw2ICsyNjg4LDEyIEBAIHN0YXRpYyBpbnQgc3RtMzJfY3J5cF9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXNwaW5fbG9jaygmY3J5cF9saXN0Lmxv Y2spOwogCWxpc3RfZGVsKCZjcnlwLT5saXN0KTsKIAlzcGluX3VubG9jaygmY3J5cF9saXN0Lmxv Y2spOworCisJaWYgKGNyeXAtPmRtYV9sY2hfaW4pCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY3J5 cC0+ZG1hX2xjaF9pbik7CisJaWYgKGNyeXAtPmRtYV9sY2hfb3V0KQorCQlkbWFfcmVsZWFzZV9j aGFubmVsKGNyeXAtPmRtYV9sY2hfb3V0KTsKK2Vycl9kbWE6CiBlcnJfcnN0OgogCXBtX3J1bnRp bWVfZGlzYWJsZShkZXYpOwogCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOwpAQCAtMjEwMSw2 ICsyNzIwLDEyIEBAIHN0YXRpYyB2b2lkIHN0bTMyX2NyeXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCiAJbGlzdF9kZWwoJmNyeXAtPmxpc3QpOwogCXNwaW5fdW5sb2NrKCZj cnlwX2xpc3QubG9jayk7CiAKKwlpZiAoY3J5cC0+ZG1hX2xjaF9pbikKKwkJZG1hX3JlbGVhc2Vf Y2hhbm5lbChjcnlwLT5kbWFfbGNoX2luKTsKKworCWlmIChjcnlwLT5kbWFfbGNoX291dCkKKwkJ ZG1hX3JlbGVhc2VfY2hhbm5lbChjcnlwLT5kbWFfbGNoX291dCk7CisKIAlwbV9ydW50aW1lX2Rp c2FibGUoY3J5cC0+ZGV2KTsKIAlwbV9ydW50aW1lX3B1dF9ub2lkbGUoY3J5cC0+ZGV2KTsKIAot LSAKMi4yNS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=