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 462B9E77173 for ; Fri, 6 Dec 2024 16:43: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=3k10RtJUA2hLfIB9gHaor4KhPI8/TFOrT/18laukU0I=; b=eaVytMzn8MLSPr YXQ+hlf4tl66q+pGGgy7DiQtdgW/tO8B9FRgsGMtTVSKIW7taKqUOk0BWNJ76sJGxfD2evoV+N76g dmnk3OCl43b7w9+9AbS7bMahK2j8ZDMzUFzGnvCS5IqPo/TQNrbSr6zQyoqrGoduJgPBe9wKl3uML RVHP8cSiK7hHOwjh+JNGL/rtcMgpYC06YD2w2A97fCegqIqglOVZhygz3ZCTNgtxfy7ZrCTxTJIad AY6NOJCU9Mj8U7f9rQF5AlryqtUCRvVnhfRmnbgBMJz2DG97hl110cIPSXH9CNnmTLkKOSgawf961 ihFwx/k2UDQbCRwL24+Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tJbQS-00000002DNl-3u5L; Fri, 06 Dec 2024 16:43:32 +0000 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tJbEY-00000002AKi-0ARv for linux-riscv@lists.infradead.org; Fri, 06 Dec 2024 16:31:15 +0000 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-434ab938e37so15298635e9.0 for ; Fri, 06 Dec 2024 08:31:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1733502672; x=1734107472; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BfT5Kkdmbft1Gxq8r2rJeiri4i23l4sd3A0EAGdLLmI=; b=hqHTK32MOLbWiPexacSp26n90lFX4fYD3ZluyzfCJo6d9oySye8u5b0msqdkrpFKe7 bHO5xp3aHFMN3cTJuEBbyzOfEyXfCevyngCNSoDJuTbIG+MUmHfx5A24IpzqdRjcnemM aULHKdSZYN+6eET0KoCwWPm3Dml+ECrYezWYBzLUYddPCYtXIkm8bMJCWmLuCt0SdcxF g0kCrVobDSmvWViL0CVKsFlOvOiXqKlAFYveEbgADDkCz73ZGZdTXiQl32VmgdbpE1bp 8wuijrBGuDMLUSkCdC4RSvHzo1QJiufzODdFEJFZb6HaFAAWPpB1P8+tT9dBW/B9sIjq k2rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733502672; x=1734107472; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BfT5Kkdmbft1Gxq8r2rJeiri4i23l4sd3A0EAGdLLmI=; b=PBDbBgUltqARcDrSVOwYxTG7l9Dc575YL0n/APR6PHZ/Vo+PZzxjEyfgs5ilreQNqy SwrgLWr2Efhna8SuVPIPhxL3/PAyUaNsQMJKvG/DwNI3lzGorhp2sVdZFE3iPA+Hd0l4 6ta6x+9FtJ/rEbXJE3vAuGmPLNhWKLAnlDiUTTiK/jzoTAeEBLnax3GqwjQjXPu/Jbck dsQW0T8J83uRXY3rCNzJ8TItwX/woUJ6VYjWeImjOX2XefxGuVJc4tBGiaZYUnbA5+oG yb1tiM82/+/aK+3EOADav7CJoNqBUiR9f21eYRBrbKhdvZKaH2U1FZyewgEA4nmhM7is UBrA== X-Forwarded-Encrypted: i=1; AJvYcCU4ywABXcp+beRGFvfNKiduUwvg0C4MmVclOGtkTcCRCKCvCbe+TqUgr+pOrHEAgKJnbnjdGqrUFNnNWA==@lists.infradead.org X-Gm-Message-State: AOJu0YwnGFohYDk8qBdLT1JMe9Nrlvcreqg5/gH+smCfM883MyXEe3WI 5LihpEWVIrNB7GNJnisXbczpVWW+7/M93Nlm7I2xppvW3Q3GQ9ZCwrPWG6RzMuY= X-Gm-Gg: ASbGncvyBe43YXKWiKyOhHGXx12kvA0wxO5aLLE6wYMWWA/oxHrbFPocrdy+XZjt7dY 7QUzbhHw9OxknrBLn02nLGE4UPr7HZStBtuiASamXjJ52ve4wvh30ZOxzkSZsShGTFY3moTz4sU 23/lJQxB8jbbW3b2ZjAvJcIyt4eITh9yywERlHp2TbsT/8COAkNQBc0fvc/BfiWjudx77UjZOkT EjiNxWTlx+rVgHn3xcOIH/qzhtpqrUU3n3HSl/mcJmgSkQClpo= X-Google-Smtp-Source: AGHT+IHy+99vjEXsDzeRxTuszjeNWkcia8EHvdNhsO5qiI0y2ktocNDtRBy0o1xn0ld1+Yk9pm/TMA== X-Received: by 2002:a05:6000:789:b0:385:fb66:faee with SMTP id ffacd0b85a97d-3862b36a455mr2853683f8f.18.1733502672402; Fri, 06 Dec 2024 08:31:12 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3862f02f5c3sm1151942f8f.65.2024.12.06.08.31.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2024 08:31:11 -0800 (PST) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Himanshu Chauhan , Anup Patel , Xu Lu , Atish Patra Subject: [PATCH v3 3/4] drivers: firmware: add riscv SSE support Date: Fri, 6 Dec 2024 17:30:59 +0100 Message-ID: <20241206163102.843505-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20241206163102.843505-1-cleger@rivosinc.com> References: <20241206163102.843505-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241206_083114_159015_93574074 X-CRM114-Status: GOOD ( 23.01 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org QWRkIGRyaXZlciBsZXZlbCBpbnRlcmZhY2UgdG8gdXNlIFJJU0MtViBTU0UgYXJjaCBzdXBwb3J0 LiBUaGlzIGludGVyZmFjZQphbGxvd3MgcmVnaXN0ZXJpbmcgU1NFIGhhbmRsZXJzLCBhbmQgcmVj ZWl2ZSB0aGVtLiBUaGlzIHdpbGwgYmUgdXNlZCBieQpQTVUgYW5kIEdIRVMgZHJpdmVyLgoKU2ln bmVkLW9mZi1ieTogSGltYW5zaHUgQ2hhdWhhbiA8aGNoYXVoYW5AdmVudGFuYW1pY3JvLmNvbT4K Q28tZGV2ZWxvcGVkLWJ5OiBIaW1hbnNodSBDaGF1aGFuIDxoY2hhdWhhbkB2ZW50YW5hbWljcm8u Y29tPgpTaWduZWQtb2ZmLWJ5OiBDbMOpbWVudCBMw6lnZXIgPGNsZWdlckByaXZvc2luYy5jb20+ Ci0tLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNCArCiBkcml2ZXJz L2Zpcm13YXJlL0tjb25maWcgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZmlybXdhcmUvTWFr ZWZpbGUgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9maXJtd2FyZS9yaXNjdi9LY29uZmlnICAg ICB8ICAxNSArCiBkcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L01ha2VmaWxlICAgIHwgICAzICsKIGRy aXZlcnMvZmlybXdhcmUvcmlzY3YvcmlzY3Zfc3NlLmMgfCA2OTEgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGluY2x1ZGUvbGludXgvcmlzY3Zfc3NlLmggICAgICAgICAgfCAgNTYgKysr CiA3IGZpbGVzIGNoYW5nZWQsIDc4MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9maXJtd2FyZS9yaXNjdi9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9maXJtd2FyZS9yaXNjdi9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZmly bXdhcmUvcmlzY3YvcmlzY3Zfc3NlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4 L3Jpc2N2X3NzZS5oCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRl eCA2ODYxMDkwMDhkOGUuLmEzZGRkZTdmZTlmYiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysr IGIvTUFJTlRBSU5FUlMKQEAgLTIwMTI1LDYgKzIwMTI1LDEzIEBAIFQ6CWdpdCBnaXQ6Ly9naXQu a2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaW9tbXUvbGludXguZ2l0CiBGOglE b2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW9tbXUvcmlzY3YsaW9tbXUueWFtbAog RjoJZHJpdmVycy9pb21tdS9yaXNjdi8KIAorUklTQy1WIEZJUk1XQVJFIERSSVZFUlMKK006CUNv bm9yIERvb2xleSA8Y29ub3JAa2VybmVsLm9yZz4KK0w6CWxpbnV4LXJpc2N2QGxpc3RzLmluZnJh ZGVhZC5vcmcKK1M6CU1haW50YWluZWQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIv c2NtL2xpbnV4L2tlcm5lbC9naXQvY29ub3IvbGludXguZ2l0CitGOglkcml2ZXJzL2Zpcm13YXJl L3Jpc2N2LyoKKwogUklTQy1WIE1JQ1JPQ0hJUCBGUEdBIFNVUFBPUlQKIE06CUNvbm9yIERvb2xl eSA8Y29ub3IuZG9vbGV5QG1pY3JvY2hpcC5jb20+CiBNOglEYWlyZSBNY05hbWFyYSA8ZGFpcmUu bWNuYW1hcmFAbWljcm9jaGlwLmNvbT4KQEAgLTIwMTc3LDYgKzIwMTg0LDEzIEBAIEY6CWRyaXZl cnMvcGVyZi9yaXNjdl9wbXUuYwogRjoJZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9sZWdhY3kuYwog RjoJZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYwogCitSSVNDLVYgU1NFIERSSVZFUgorTToJ Q2zDqW1lbnQgTMOpZ2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgorTDoJbGludXgtcmlzY3ZAbGlz dHMuaW5mcmFkZWFkLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9maXJtd2FyZS9yaXNj di9yaXNjdl9zc2UuYworRjoJaW5jbHVkZS9saW51eC9yaXNjdl9zc2UuaAorCiBSSVNDLVYgVEhF QUQgU29DIFNVUFBPUlQKIE06CURyZXcgRnVzdGluaSA8ZHJld0BwZHA3LmNvbT4KIE06CUd1byBS ZW4gPGd1b3JlbkBrZXJuZWwub3JnPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9LY29u ZmlnIGIvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnCmluZGV4IDcxZDhiMjZjNDEwMy4uOWU5OTZh MWZkNTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL0tjb25maWcKKysrIGIvZHJpdmVy cy9maXJtd2FyZS9LY29uZmlnCkBAIC0yNjcsNiArMjY3LDcgQEAgc291cmNlICJkcml2ZXJzL2Zp cm13YXJlL21lc29uL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvZmlybXdhcmUvbWljcm9jaGlw L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvZmlybXdhcmUvcHNjaS9LY29uZmlnIgogc291cmNl ICJkcml2ZXJzL2Zpcm13YXJlL3Fjb20vS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9maXJtd2Fy ZS9yaXNjdi9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL2Zpcm13YXJlL3NtY2NjL0tjb25maWci CiBzb3VyY2UgImRyaXZlcnMvZmlybXdhcmUvdGVncmEvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVy cy9maXJtd2FyZS94aWxpbngvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUv TWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDdhOGQ0ODZlNzE4Zi4u YzBmNTAwOTk0OWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTMzLDYgKzMzLDcgQEAgb2JqLXkJCQkJKz0g ZWZpLwogb2JqLXkJCQkJKz0gaW14Lwogb2JqLXkJCQkJKz0gcHNjaS8KIG9iai15CQkJCSs9IHFj b20vCitvYmoteQkJCQkrPSByaXNjdi8KIG9iai15CQkJCSs9IHNtY2NjLwogb2JqLXkJCQkJKz0g dGVncmEvCiBvYmoteQkJCQkrPSB4aWxpbngvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJl L3Jpc2N2L0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L0tjb25maWcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44MDU2ZWQzMjYyZDkKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L0tjb25maWcKQEAgLTAsMCArMSwxNSBAQAor IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CittZW51ICJSaXNjLVYgU3Bl Y2lmaWMgZmlybXdhcmUgZHJpdmVycyIKK2RlcGVuZHMgb24gUklTQ1YKKworY29uZmlnIFJJU0NW X1NTRQorCWJvb2wgIkVuYWJsZSBTQkkgU3VwZXJ2aXNvciBTb2Z0d2FyZSBFdmVudHMgc3VwcG9y dCIKKwlkZXBlbmRzIG9uIFJJU0NWX1NCSQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoZSBTdXBl cnZpc29yIFNvZnR3YXJlIEV2ZW50cyBzdXBwb3J0IGFsbG93IHRoZSBTQkkgdG8gZGVsaXZlcgor CSAgTk1JLWxpa2Ugbm90aWZpY2F0aW9ucyB0byB0aGUgc3VwZXJ2aXNvciBtb2RlIHNvZnR3YXJl LiBXaGVuIGVuYWJsZSwKKwkgIHRoaXMgb3B0aW9uIHByb3ZpZGVzIHN1cHBvcnQgdG8gcmVnaXN0 ZXIgY2FsbGJhY2tzIG9uIHNwZWNpZmljIFNTRQorCSAgZXZlbnRzLgorCitlbmRtZW51CmRpZmYg LS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2Fy ZS9yaXNjdi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjRjY2ZjYmJjMjhlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvcmlzY3Yv TWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wCisKK29iai0kKENPTkZJR19SSVNDVl9TU0UpCQkrPSByaXNjdl9zc2UubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9maXJtd2FyZS9yaXNjdi9yaXNjdl9zc2UuYyBiL2RyaXZlcnMvZmlybXdhcmUv cmlzY3YvcmlzY3Zfc3NlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5jMTY1ZTMyY2M5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2 L3Jpc2N2X3NzZS5jCkBAIC0wLDAgKzEsNjkxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5CisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFJpdm9zIEluYy4KKyAq LworCisjZGVmaW5lIHByX2ZtdChmbXQpICJzc2U6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9j cHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVob3RwbHVnLmg+CisjaW5jbHVkZSA8bGludXgvY3B1 X3BtLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3Qu aD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUtZGVmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9v dC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jpc2N2X3NzZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KKworI2luY2x1ZGUgPGFzbS9zYmkuaD4KKyNpbmNsdWRlIDxhc20vc3NlLmg+CisKK3N0cnVj dCBzc2VfZXZlbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1MzIgZXZ0OworCXUzMiBw cmlvcml0eTsKKwlzc2VfZXZlbnRfaGFuZGxlciAqaGFuZGxlcjsKKwl2b2lkICpoYW5kbGVyX2Fy ZzsKKwlib29sIGlzX2VuYWJsZWQ7CisJLyogT25seSB2YWxpZCBmb3IgZ2xvYmFsIGV2ZW50cyAq LworCXVuc2lnbmVkIGludCBjcHU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCBzc2VfcmVnaXN0ZXJl ZF9ldmVudCAqZ2xvYmFsOworCQlzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgX19wZXJjcHUg KmxvY2FsOworCX07Cit9OworCitzdGF0aWMgaW50IHNzZV9ocF9zdGF0ZTsKK3N0YXRpYyBib29s IHNzZV9hdmFpbGFibGU7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGV2ZW50c19saXN0X2xvY2sp Oworc3RhdGljIExJU1RfSEVBRChldmVudHMpOworc3RhdGljIERFRklORV9NVVRFWChzc2VfbXV0 ZXgpOworCitzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgeworCXN0cnVjdCBzc2VfZXZlbnRf YXJjaF9kYXRhIGFyY2g7CisJc3RydWN0IHNzZV9ldmVudCAqZXZ0OworCXVuc2lnbmVkIGxvbmcg YXR0cl9idWY7Cit9OworCit2b2lkIHNzZV9oYW5kbGVfZXZlbnQoc3RydWN0IHNzZV9ldmVudF9h cmNoX2RhdGEgKmFyY2hfZXZlbnQsCisJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorewor CWludCByZXQ7CisJc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50ICpyZWdfZXZ0ID0KKwkJY29u dGFpbmVyX29mKGFyY2hfZXZlbnQsIHN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVudCwgYXJjaCk7 CisJc3RydWN0IHNzZV9ldmVudCAqZXZ0ID0gcmVnX2V2dC0+ZXZ0OworCisJcmV0ID0gZXZ0LT5o YW5kbGVyKGV2dC0+ZXZ0LCBldnQtPmhhbmRsZXJfYXJnLCByZWdzKTsKKwlpZiAocmV0KQorCQlw cl93YXJuKCJldmVudCAleCBoYW5kbGVyIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCBldnQtPmV2 dCwKKwkJCXJldCk7Cit9CisKK3N0YXRpYyBib29sIHNzZV9ldmVudF9pc19nbG9iYWwodTMyIGV2 dCkKK3sKKwlyZXR1cm4gISEoZXZ0ICYgU0JJX1NTRV9FVkVOVF9HTE9CQUwpOworfQorCitzdGF0 aWMKK3N0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldmVudF9nZXQodTMyIGV2dCkKK3sKKwlzdHJ1Y3Qg c3NlX2V2ZW50ICpzc2VfZXZ0ID0gTlVMTCwgKnRtcDsKKworCXNjb3BlZF9ndWFyZChzcGlubG9j aywgJmV2ZW50c19saXN0X2xvY2spIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZldmVu dHMsIGxpc3QpIHsKKwkJCWlmICh0bXAtPmV2dCA9PSBldnQpIHsKKwkJCQlyZXR1cm4gc3NlX2V2 dDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgcGh5c19hZGRy X3Qgc3NlX2V2ZW50X2dldF9waHlzKHN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVudCAqcmVnX2V2 dCwKKwkJCQkgICAgICB2b2lkICphZGRyKQoreworCXBoeXNfYWRkcl90IHBoeXM7CisKKwlpZiAo c3NlX2V2ZW50X2lzX2dsb2JhbChyZWdfZXZ0LT5ldnQtPmV2dCkpCisJCXBoeXMgPSB2aXJ0X3Rv X3BoeXMoYWRkcik7CisJZWxzZQorCQlwaHlzID0gcGVyX2NwdV9wdHJfdG9fcGh5cyhhZGRyKTsK KworCXJldHVybiBwaHlzOworfQorCitzdGF0aWMgaW50IHNzZV9zYmlfZXZlbnRfZnVuYyhzdHJ1 Y3Qgc3NlX2V2ZW50ICpldmVudCwgdW5zaWduZWQgbG9uZyBmdW5jKQoreworCXN0cnVjdCBzYmly ZXQgcmV0OworCXUzMiBldnQgPSBldmVudC0+ZXZ0OworCisJcmV0ID0gc2JpX2VjYWxsKFNCSV9F WFRfU1NFLCBmdW5jLCBldnQsIDAsIDAsIDAsIDAsIDApOworCWlmIChyZXQuZXJyb3IpCisJCXBy X2RlYnVnKCJGYWlsZWQgdG8gZXhlY3V0ZSBmdW5jICVseCwgZXZlbnQgJXgsIGVycm9yICVsZFxu IiwKKwkJCSBmdW5jLCBldnQsIHJldC5lcnJvcik7CisKKwlyZXR1cm4gc2JpX2Vycl9tYXBfbGlu dXhfZXJybm8ocmV0LmVycm9yKTsKK30KKworc3RhdGljIGludCBzc2Vfc2JpX2Rpc2FibGVfZXZl bnQoc3RydWN0IHNzZV9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIHNzZV9zYmlfZXZlbnRfZnVu YyhldmVudCwgU0JJX1NTRV9FVkVOVF9ESVNBQkxFKTsKK30KKworc3RhdGljIGludCBzc2Vfc2Jp X2VuYWJsZV9ldmVudChzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gc3NlX3Ni aV9ldmVudF9mdW5jKGV2ZW50LCBTQklfU1NFX0VWRU5UX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBp bnQgc3NlX2V2ZW50X2F0dHJfZ2V0X25vX2xvY2soc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50 ICpyZWdfZXZ0LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cl9pZCwgdW5zaWduZWQgbG9u ZyAqdmFsKQoreworCXN0cnVjdCBzYmlyZXQgc3JldDsKKwl1MzIgZXZ0ID0gcmVnX2V2dC0+ZXZ0 LT5ldnQ7CisJdW5zaWduZWQgbG9uZyBwaHlzOworCisJcGh5cyA9IHNzZV9ldmVudF9nZXRfcGh5 cyhyZWdfZXZ0LCAmcmVnX2V2dC0+YXR0cl9idWYpOworCisJc3JldCA9IHNiaV9lY2FsbChTQklf RVhUX1NTRSwgU0JJX1NTRV9FVkVOVF9BVFRSX1JFQUQsIGV2dCwKKwkJCQkgICAgIGF0dHJfaWQs IDEsIHBoeXMsIDAsIDApOworCWlmIChzcmV0LmVycm9yKSB7CisJCXByX2RlYnVnKCJGYWlsZWQg dG8gZ2V0IGV2ZW50ICV4IGF0dHIgJWx4LCBlcnJvciAlbGRcbiIsIGV2dCwKKwkJCSBhdHRyX2lk LCBzcmV0LmVycm9yKTsKKwkJcmV0dXJuIHNiaV9lcnJfbWFwX2xpbnV4X2Vycm5vKHNyZXQuZXJy b3IpOworCX0KKworCSp2YWwgPSByZWdfZXZ0LT5hdHRyX2J1ZjsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHNzZV9ldmVudF9hdHRyX3NldF9ub2xvY2soc3RydWN0IHNzZV9yZWdpc3Rl cmVkX2V2ZW50ICpyZWdfZXZ0LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhdHRyX2lkLCB1bnNp Z25lZCBsb25nIHZhbCkKK3sKKwlzdHJ1Y3Qgc2JpcmV0IHNyZXQ7CisJdTMyIGV2dCA9IHJlZ19l dnQtPmV2dC0+ZXZ0OworCXVuc2lnbmVkIGxvbmcgcGh5czsKKworCXJlZ19ldnQtPmF0dHJfYnVm ID0gdmFsOworCXBoeXMgPSBzc2VfZXZlbnRfZ2V0X3BoeXMocmVnX2V2dCwgJnJlZ19ldnQtPmF0 dHJfYnVmKTsKKworCXNyZXQgPSBzYmlfZWNhbGwoU0JJX0VYVF9TU0UsIFNCSV9TU0VfRVZFTlRf QVRUUl9XUklURSwgZXZ0LAorCQkJCSAgICAgYXR0cl9pZCwgMSwgcGh5cywgMCwgMCk7CisJaWYg KHNyZXQuZXJyb3IgJiYgc3JldC5lcnJvciAhPSBTQklfRVJSX0lOVkFMSURfU1RBVEUpIHsKKwkJ cHJfZGVidWcoIkZhaWxlZCB0byBzZXQgZXZlbnQgJXggYXR0ciAlbHgsIGVycm9yICVsZFxuIiwg ZXZ0LAorCQkJIGF0dHJfaWQsIHNyZXQuZXJyb3IpOworCQlyZXR1cm4gc2JpX2Vycl9tYXBfbGlu dXhfZXJybm8oc3JldC5lcnJvcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c3NlX2V2ZW50X3NldF90YXJnZXRfY3B1X25vbG9jayhzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCwK KwkJCQkJICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgaGFydF9pZCA9IGNw dWlkX3RvX2hhcnRpZF9tYXAoY3B1KTsKKwlzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgKnJl Z19ldnQgPSBldmVudC0+Z2xvYmFsOworCXUzMiBldnQgPSBldmVudC0+ZXZ0OworCWJvb2wgd2Fz X2VuYWJsZWQ7CisJaW50IHJldDsKKworCWlmICghc3NlX2V2ZW50X2lzX2dsb2JhbChldnQpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCXdhc19lbmFibGVkID0gZXZlbnQtPmlzX2VuYWJsZWQ7CisJ aWYgKHdhc19lbmFibGVkKQorCQlzc2Vfc2JpX2Rpc2FibGVfZXZlbnQoZXZlbnQpOworCWRvIHsK KwkJcmV0ID0gc3NlX2V2ZW50X2F0dHJfc2V0X25vbG9jayhyZWdfZXZ0LAorCQkJCQkJU0JJX1NT RV9BVFRSX1BSRUZFUlJFRF9IQVJULAorCQkJCQkJaGFydF9pZCk7CisJfSB3aGlsZSAocmV0ID09 IC1FSU5WQUwpOworCisJaWYgKHJldCA9PSAwKQorCQlldmVudC0+Y3B1ID0gY3B1OworCisJaWYg KHdhc19lbmFibGVkKQorCQlzc2Vfc2JpX2VuYWJsZV9ldmVudChldmVudCk7CisKKwlyZXR1cm4g MDsKK30KKworaW50IHNzZV9ldmVudF9zZXRfdGFyZ2V0X2NwdShzdHJ1Y3Qgc3NlX2V2ZW50ICpl dmVudCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgcmV0OworCisJc2NvcGVkX2d1YXJkKG11 dGV4LCAmc3NlX211dGV4KSB7CisJCWNwdXNfcmVhZF9sb2NrKCk7CisKKwkJaWYgKCFjcHVfb25s aW5lKGNwdSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQgPSBzc2VfZXZlbnRfc2V0X3Rh cmdldF9jcHVfbm9sb2NrKGV2ZW50LCBjcHUpOworCisJCWNwdXNfcmVhZF91bmxvY2soKTsKKwl9 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNzZV9ldmVudF9pbml0X3JlZ2lzdGVy ZWQodW5zaWduZWQgaW50IGNwdSwKKwkJCQkgICAgIHN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVu dCAqcmVnX2V2dCwKKwkJCQkgICAgIHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50KQoreworCXJlZ19l dnQtPmV2dCA9IGV2ZW50OworCWFyY2hfc3NlX2luaXRfZXZlbnQoJnJlZ19ldnQtPmFyY2gsIGV2 ZW50LT5ldnQsIGNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3NlX2V2ZW50 X2ZyZWVfcmVnaXN0ZXJlZChzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgKnJlZ19ldnQpCit7 CisJYXJjaF9zc2VfZnJlZV9ldmVudCgmcmVnX2V2dC0+YXJjaCk7Cit9CisKK3N0YXRpYyBpbnQg c3NlX2V2ZW50X2FsbG9jX2dsb2JhbChzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCkKK3sKKwlpbnQg ZXJyOworCXN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVudCAqcmVnX2V2dDsKKworCXJlZ19ldnQg PSBremFsbG9jKHNpemVvZigqcmVnX2V2dCksIEdGUF9LRVJORUwpOworCWlmICghcmVnX2V2dCkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlldmVudC0+Z2xvYmFsID0gcmVnX2V2dDsKKwllcnIgPSBz c2VfZXZlbnRfaW5pdF9yZWdpc3RlcmVkKHNtcF9wcm9jZXNzb3JfaWQoKSwgcmVnX2V2dCwKKwkJ CQkJZXZlbnQpOworCWlmIChlcnIpCisJCWtmcmVlKHJlZ19ldnQpOworCisJcmV0dXJuIGVycjsK K30KKworc3RhdGljIGludCBzc2VfZXZlbnRfYWxsb2NfbG9jYWwoc3RydWN0IHNzZV9ldmVudCAq ZXZlbnQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgY3B1LCBlcnJfY3B1OworCXN0cnVj dCBzc2VfcmVnaXN0ZXJlZF9ldmVudCAqcmVnX2V2dDsKKwlzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRf ZXZlbnQgX19wZXJjcHUgKnJlZ19ldnRzOworCisJcmVnX2V2dHMgPSBhbGxvY19wZXJjcHUoc3Ry dWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50KTsKKwlpZiAoIXJlZ19ldnRzKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWV2ZW50LT5sb2NhbCA9IHJlZ19ldnRzOworCisJZm9yX2VhY2hfcG9zc2libGVf Y3B1KGNwdSkgeworCQlyZWdfZXZ0ID0gcGVyX2NwdV9wdHIocmVnX2V2dHMsIGNwdSk7CisJCWVy ciA9IHNzZV9ldmVudF9pbml0X3JlZ2lzdGVyZWQoY3B1LCByZWdfZXZ0LCBldmVudCk7CisJCWlm IChlcnIpIHsKKwkJCWVycl9jcHUgPSBjcHU7CisJCQlnb3RvIGVycl9mcmVlX3Blcl9jcHU7CisJ CX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfcGVyX2NwdToKKwlmb3JfZWFjaF9wb3Nz aWJsZV9jcHUoY3B1KSB7CisJCWlmIChjcHUgPT0gZXJyX2NwdSkKKwkJCWJyZWFrOworCQlyZWdf ZXZ0ID0gcGVyX2NwdV9wdHIocmVnX2V2dHMsIGNwdSk7CisJCXNzZV9ldmVudF9mcmVlX3JlZ2lz dGVyZWQocmVnX2V2dCk7CisJfQorCisJZnJlZV9wZXJjcHUocmVnX2V2dHMpOworCisJcmV0dXJu IGVycjsKK30KKworc3RhdGljIHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldmVudF9hbGxvYyh1MzIg ZXZ0LAorCQkJCQkgdTMyIHByaW9yaXR5LAorCQkJCQkgc3NlX2V2ZW50X2hhbmRsZXIgKmhhbmRs ZXIsIHZvaWQgKmFyZykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50Owor CisJZXZlbnQgPSBremFsbG9jKHNpemVvZigqZXZlbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV2 ZW50KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWV2ZW50LT5ldnQgPSBldnQ7CisJ ZXZlbnQtPnByaW9yaXR5ID0gcHJpb3JpdHk7CisJZXZlbnQtPmhhbmRsZXJfYXJnID0gYXJnOwor CWV2ZW50LT5oYW5kbGVyID0gaGFuZGxlcjsKKworCWlmIChzc2VfZXZlbnRfaXNfZ2xvYmFsKGV2 dCkpIHsKKwkJZXJyID0gc3NlX2V2ZW50X2FsbG9jX2dsb2JhbChldmVudCk7CisJCWlmIChlcnIp CisJCQlnb3RvIGVycl9hbGxvY19yZWdfZXZ0OworCX0gZWxzZSB7CisJCWVyciA9IHNzZV9ldmVu dF9hbGxvY19sb2NhbChldmVudCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9hbGxvY19yZWdf ZXZ0OworCX0KKworCXJldHVybiBldmVudDsKKworZXJyX2FsbG9jX3JlZ19ldnQ6CisJa2ZyZWUo ZXZlbnQpOworCisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIGludCBzc2Vfc2Jp X3JlZ2lzdGVyX2V2ZW50KHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50LAorCQkJCSAgc3RydWN0IHNz ZV9yZWdpc3RlcmVkX2V2ZW50ICpyZWdfZXZ0KQoreworCWludCByZXQ7CisKKwlyZXQgPSBzc2Vf ZXZlbnRfYXR0cl9zZXRfbm9sb2NrKHJlZ19ldnQsIFNCSV9TU0VfQVRUUl9QUklPLAorCQkJCQll dmVudC0+cHJpb3JpdHkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gYXJj aF9zc2VfcmVnaXN0ZXJfZXZlbnQoJnJlZ19ldnQtPmFyY2gpOworfQorCitzdGF0aWMgaW50IHNz ZV9ldmVudF9yZWdpc3Rlcl9sb2NhbChzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCkKK3sKKwlpbnQg cmV0OworCXN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVudCAqcmVnX2V2dCA9IHBlcl9jcHVfcHRy KGV2ZW50LT5sb2NhbCwKKwkJCQkJCQkgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJcmV0ID0g c3NlX3NiaV9yZWdpc3Rlcl9ldmVudChldmVudCwgcmVnX2V2dCk7CisJaWYgKHJldCkKKwkJcHJf ZGVidWcoIkZhaWxlZCB0byByZWdpc3RlciBldmVudCAleDogZXJyICVkXG4iLCBldmVudC0+ZXZ0 LAorCQkJIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgc3NlX3NiaV91 bnJlZ2lzdGVyX2V2ZW50KHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBzc2Vf c2JpX2V2ZW50X2Z1bmMoZXZlbnQsIFNCSV9TU0VfRVZFTlRfVU5SRUdJU1RFUik7Cit9CisKK3N0 cnVjdCBzc2VfcGVyX2NwdV9ldnQgeworCXN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50OworCXVuc2ln bmVkIGxvbmcgZnVuYzsKKwlhdG9taWNfdCBlcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHNzZV9l dmVudF9wZXJfY3B1X2Z1bmModm9pZCAqaW5mbykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzc2Vf cGVyX2NwdV9ldnQgKmNwdV9ldnQgPSBpbmZvOworCisJaWYgKGNwdV9ldnQtPmZ1bmMgPT0gU0JJ X1NTRV9FVkVOVF9SRUdJU1RFUikKKwkJcmV0ID0gc3NlX2V2ZW50X3JlZ2lzdGVyX2xvY2FsKGNw dV9ldnQtPmV2ZW50KTsKKwllbHNlCisJCXJldCA9IHNzZV9zYmlfZXZlbnRfZnVuYyhjcHVfZXZ0 LT5ldmVudCwgY3B1X2V2dC0+ZnVuYyk7CisKKwlpZiAocmV0KQorCQlhdG9taWNfc2V0KCZjcHVf ZXZ0LT5lcnJvciwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgc3NlX2V2ZW50X2ZyZWUoc3RydWN0 IHNzZV9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwlzdHJ1Y3Qgc3NlX3Jl Z2lzdGVyZWRfZXZlbnQgKnJlZ19ldnQ7CisKKwlpZiAoc3NlX2V2ZW50X2lzX2dsb2JhbChldmVu dC0+ZXZ0KSkgeworCQlzc2VfZXZlbnRfZnJlZV9yZWdpc3RlcmVkKGV2ZW50LT5nbG9iYWwpOwor CQlrZnJlZShldmVudC0+Z2xvYmFsKTsKKwl9IGVsc2UgeworCQlmb3JfZWFjaF9wb3NzaWJsZV9j cHUoY3B1KSB7CisJCQlyZWdfZXZ0ID0gcGVyX2NwdV9wdHIoZXZlbnQtPmxvY2FsLCBjcHUpOwor CQkJc3NlX2V2ZW50X2ZyZWVfcmVnaXN0ZXJlZChyZWdfZXZ0KTsKKwkJfQorCQlmcmVlX3BlcmNw dShldmVudC0+bG9jYWwpOworCX0KKworCWtmcmVlKGV2ZW50KTsKK30KKworaW50IHNzZV9ldmVu dF9lbmFibGUoc3RydWN0IHNzZV9ldmVudCAqZXZlbnQpCit7CisJaW50IHJldCA9IDA7CisJc3Ry dWN0IHNzZV9wZXJfY3B1X2V2dCBjcHVfZXZ0OworCisJc2NvcGVkX2d1YXJkKG11dGV4LCAmc3Nl X211dGV4KSB7CisJCWNwdXNfcmVhZF9sb2NrKCk7CisJCWlmIChzc2VfZXZlbnRfaXNfZ2xvYmFs KGV2ZW50LT5ldnQpKSB7CisJCQlyZXQgPSBzc2Vfc2JpX2VuYWJsZV9ldmVudChldmVudCk7CisJ CX0gZWxzZSB7CisJCQljcHVfZXZ0LmV2ZW50ID0gZXZlbnQ7CisJCQlhdG9taWNfc2V0KCZjcHVf ZXZ0LmVycm9yLCAwKTsKKwkJCWNwdV9ldnQuZnVuYyA9IFNCSV9TU0VfRVZFTlRfRU5BQkxFOwor CQkJb25fZWFjaF9jcHUoc3NlX2V2ZW50X3Blcl9jcHVfZnVuYywgJmNwdV9ldnQsIDEpOworCQkJ cmV0ID0gYXRvbWljX3JlYWQoJmNwdV9ldnQuZXJyb3IpOworCQkJaWYgKHJldCkgeworCQkJCWNw dV9ldnQuZnVuYyA9IFNCSV9TU0VfRVZFTlRfRElTQUJMRTsKKwkJCQlvbl9lYWNoX2NwdShzc2Vf ZXZlbnRfcGVyX2NwdV9mdW5jLCAmY3B1X2V2dCwKKwkJCQkJICAgIDEpOworCQkJfQorCQl9CisJ CWNwdXNfcmVhZF91bmxvY2soKTsKKworCQlpZiAocmV0ID09IDApCisJCQlldmVudC0+aXNfZW5h YmxlZCA9IHRydWU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3NlX2V2 ZW50c19tYXNrKHZvaWQpCit7CisJc2JpX2VjYWxsKFNCSV9FWFRfU1NFLCBTQklfU1NFX0VWRU5U X0hBUlRfTUFTSywgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNzZV9ldmVu dHNfdW5tYXNrKHZvaWQpCit7CisJc2JpX2VjYWxsKFNCSV9FWFRfU1NFLCBTQklfU1NFX0VWRU5U X0hBUlRfVU5NQVNLLCAwLCAwLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgc3NlX2V2 ZW50X2Rpc2FibGVfbm9sb2NrKHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBz c2VfcGVyX2NwdV9ldnQgY3B1X2V2dDsKKworCWlmIChzc2VfZXZlbnRfaXNfZ2xvYmFsKGV2ZW50 LT5ldnQpKSB7CisJCXNzZV9zYmlfZGlzYWJsZV9ldmVudChldmVudCk7CisJfSBlbHNlIHsKKwkJ Y3B1X2V2dC5ldmVudCA9IGV2ZW50OworCQljcHVfZXZ0LmZ1bmMgPSBTQklfU1NFX0VWRU5UX0RJ U0FCTEU7CisJCW9uX2VhY2hfY3B1KHNzZV9ldmVudF9wZXJfY3B1X2Z1bmMsICZjcHVfZXZ0LCAx KTsKKwl9Cit9CisKK3ZvaWQgc3NlX2V2ZW50X2Rpc2FibGUoc3RydWN0IHNzZV9ldmVudCAqZXZl bnQpCit7CisJc2NvcGVkX2d1YXJkKG11dGV4LCAmc3NlX211dGV4KSB7CisJCWNwdXNfcmVhZF9s b2NrKCk7CisJCXNzZV9ldmVudF9kaXNhYmxlX25vbG9jayhldmVudCk7CisJCWV2ZW50LT5pc19l bmFibGVkID0gZmFsc2U7CisJCWNwdXNfcmVhZF91bmxvY2soKTsKKwl9Cit9CisKK3N0cnVjdCBz c2VfZXZlbnQgKnNzZV9ldmVudF9yZWdpc3Rlcih1MzIgZXZ0LCB1MzIgcHJpb3JpdHksCisJCQkJ ICAgICBzc2VfZXZlbnRfaGFuZGxlciAqaGFuZGxlciwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBz c2VfcGVyX2NwdV9ldnQgY3B1X2V2dDsKKwlzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudDsKKwlpbnQg cmV0ID0gMDsKKworCWlmICghc3NlX2F2YWlsYWJsZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVPUE5P VFNVUFApOworCisJbXV0ZXhfbG9jaygmc3NlX211dGV4KTsKKwlpZiAoc3NlX2V2ZW50X2dldChl dnQpKSB7CisJCXByX2RlYnVnKCJFdmVudCAleCBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsIGV2dCk7 CisJCXJldCA9IC1FRVhJU1Q7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlldmVudCA9IHNz ZV9ldmVudF9hbGxvYyhldnQsIHByaW9yaXR5LCBoYW5kbGVyLCBhcmcpOworCWlmIChJU19FUlIo ZXZlbnQpKSB7CisJCXJldCA9IFBUUl9FUlIoZXZlbnQpOworCQlnb3RvIG91dF91bmxvY2s7CisJ fQorCisJY3B1c19yZWFkX2xvY2soKTsKKwlpZiAoc3NlX2V2ZW50X2lzX2dsb2JhbChldnQpKSB7 CisJCXVuc2lnbmVkIGxvbmcgcHJlZmVycmVkX2hhcnQ7CisKKwkJcmV0ID0gc3NlX2V2ZW50X2F0 dHJfZ2V0X25vX2xvY2soZXZlbnQtPmdsb2JhbCwKKwkJCQkJCSBTQklfU1NFX0FUVFJfUFJFRkVS UkVEX0hBUlQsCisJCQkJCQkgJnByZWZlcnJlZF9oYXJ0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8g ZXJyX2V2ZW50X2ZyZWU7CisJCWV2ZW50LT5jcHUgPSByaXNjdl9oYXJ0aWRfdG9fY3B1aWQocHJl ZmVycmVkX2hhcnQpOworCisJCXJldCA9IHNzZV9zYmlfcmVnaXN0ZXJfZXZlbnQoZXZlbnQsIGV2 ZW50LT5nbG9iYWwpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZXZlbnRfZnJlZTsKKworCX0g ZWxzZSB7CisJCWNwdV9ldnQuZXZlbnQgPSBldmVudDsKKwkJYXRvbWljX3NldCgmY3B1X2V2dC5l cnJvciwgMCk7CisJCWNwdV9ldnQuZnVuYyA9IFNCSV9TU0VfRVZFTlRfUkVHSVNURVI7CisJCW9u X2VhY2hfY3B1KHNzZV9ldmVudF9wZXJfY3B1X2Z1bmMsICZjcHVfZXZ0LCAxKTsKKwkJcmV0ID0g YXRvbWljX3JlYWQoJmNwdV9ldnQuZXJyb3IpOworCQlpZiAocmV0KSB7CisJCQljcHVfZXZ0LmZ1 bmMgPSBTQklfU1NFX0VWRU5UX1VOUkVHSVNURVI7CisJCQlvbl9lYWNoX2NwdShzc2VfZXZlbnRf cGVyX2NwdV9mdW5jLCAmY3B1X2V2dCwgMSk7CisJCQlnb3RvIGVycl9ldmVudF9mcmVlOworCQl9 CisJfQorCWNwdXNfcmVhZF91bmxvY2soKTsKKworCXNjb3BlZF9ndWFyZChzcGlubG9jaywgJmV2 ZW50c19saXN0X2xvY2spCisJCWxpc3RfYWRkKCZldmVudC0+bGlzdCwgJmV2ZW50cyk7CisKKwlt dXRleF91bmxvY2soJnNzZV9tdXRleCk7CisKKwlyZXR1cm4gZXZlbnQ7CisKK2Vycl9ldmVudF9m cmVlOgorCWNwdXNfcmVhZF91bmxvY2soKTsKKwlzc2VfZXZlbnRfZnJlZShldmVudCk7CitvdXRf dW5sb2NrOgorCW11dGV4X3VubG9jaygmc3NlX211dGV4KTsKKworCXJldHVybiBFUlJfUFRSKHJl dCk7Cit9CisKK3N0YXRpYyB2b2lkIHNzZV9ldmVudF91bnJlZ2lzdGVyX25vbG9jayhzdHJ1Y3Qg c3NlX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3Qgc3NlX3Blcl9jcHVfZXZ0IGNwdV9ldnQ7CisK KwlpZiAoc3NlX2V2ZW50X2lzX2dsb2JhbChldmVudC0+ZXZ0KSkgeworCQlzc2Vfc2JpX3VucmVn aXN0ZXJfZXZlbnQoZXZlbnQpOworCX0gZWxzZSB7CisJCWNwdV9ldnQuZXZlbnQgPSBldmVudDsK KwkJY3B1X2V2dC5mdW5jID0gU0JJX1NTRV9FVkVOVF9VTlJFR0lTVEVSOworCQlvbl9lYWNoX2Nw dShzc2VfZXZlbnRfcGVyX2NwdV9mdW5jLCAmY3B1X2V2dCwgMSk7CisJfQorfQorCit2b2lkIHNz ZV9ldmVudF91bnJlZ2lzdGVyKHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50KQoreworCXNjb3BlZF9n dWFyZChtdXRleCwgJnNzZV9tdXRleCkgeworCQljcHVzX3JlYWRfbG9jaygpOworCQlzc2VfZXZl bnRfdW5yZWdpc3Rlcl9ub2xvY2soZXZlbnQpOworCQljcHVzX3JlYWRfdW5sb2NrKCk7CisKKwkJ c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCAmZXZlbnRzX2xpc3RfbG9jaykKKwkJCWxpc3RfZGVsKCZl dmVudC0+bGlzdCk7CisKKwkJc3NlX2V2ZW50X2ZyZWUoZXZlbnQpOworCX0KK30KKworc3RhdGlj IGludCBzc2VfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBzc2VfZXZl bnQgKnNzZV9ldnQ7CisKKwlzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZldmVudHNfbGlzdF9sb2Nr KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3NlX2V2dCwgJmV2ZW50cywgbGlzdCkgeworCQkJ aWYgKHNzZV9ldmVudF9pc19nbG9iYWwoc3NlX2V2dC0+ZXZ0KSkKKwkJCQljb250aW51ZTsKKwor CQkJc3NlX2V2ZW50X3JlZ2lzdGVyX2xvY2FsKHNzZV9ldnQpOworCQkJaWYgKHNzZV9ldnQtPmlz X2VuYWJsZWQpCisJCQkJc3NlX3NiaV9lbmFibGVfZXZlbnQoc3NlX2V2dCk7CisJCX0KKwl9CisK KwkvKiBSZWFkeSB0byBoYW5kbGUgZXZlbnRzLiBVbm1hc2sgU1NFLiAqLworCXNzZV9ldmVudHNf dW5tYXNrKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc2VfY3B1X3RlYXJkb3du KHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgaW50IG5leHRfY3B1OworCXN0cnVjdCBz c2VfZXZlbnQgKnNzZV9ldnQ7CisKKwkvKiBNYXNrIHRoZSBzc2UgZXZlbnRzICovCisJc3NlX2V2 ZW50c19tYXNrKCk7CisKKwlzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZldmVudHNfbGlzdF9sb2Nr KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3NlX2V2dCwgJmV2ZW50cywgbGlzdCkgeworCQkJ aWYgKCFzc2VfZXZlbnRfaXNfZ2xvYmFsKHNzZV9ldnQtPmV2dCkpIHsKKworCQkJCWlmIChzc2Vf ZXZ0LT5pc19lbmFibGVkKQorCQkJCQlzc2Vfc2JpX2Rpc2FibGVfZXZlbnQoc3NlX2V2dCk7CisK KwkJCQlzc2Vfc2JpX3VucmVnaXN0ZXJfZXZlbnQoc3NlX2V2dCk7CisJCQkJY29udGludWU7CisJ CQl9CisKKwkJCWlmIChzc2VfZXZ0LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCWNv bnRpbnVlOworCisJCQkvKiBVcGRhdGUgZGVzdGluYXRpb24gaGFydCBmb3IgZ2xvYmFsIGV2ZW50 ICovCisJCQluZXh0X2NwdSA9IGNwdW1hc2tfYW55X2J1dChjcHVfb25saW5lX21hc2ssIGNwdSk7 CisJCQlzc2VfZXZlbnRfc2V0X3RhcmdldF9jcHVfbm9sb2NrKHNzZV9ldnQsIG5leHRfY3B1KTsK KwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzc2VfcmVzZXQodm9pZCkK K3sKKwlzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGV2ZW50LCAmZXZlbnRzLCBsaXN0KSB7CisJCXNzZV9ldmVudF9kaXNhYmxlX25vbG9jayhl dmVudCk7CisJCXNzZV9ldmVudF91bnJlZ2lzdGVyX25vbG9jayhldmVudCk7CisJfQorfQorCitz dGF0aWMgaW50IHNzZV9wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNp Z25lZCBsb25nIGFjdGlvbiwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJV0FSTl9PTl9PTkNFKHBy ZWVtcHRpYmxlKCkpOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9QTV9FTlRFUjoK KwkJc3NlX2V2ZW50c19tYXNrKCk7CisJCWJyZWFrOworCWNhc2UgQ1BVX1BNX0VYSVQ6CisJY2Fz ZSBDUFVfUE1fRU5URVJfRkFJTEVEOgorCQlzc2VfZXZlbnRzX3VubWFzaygpOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorCisJcmV0dXJuIE5PVElGWV9P SzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzc2VfcG1fbmIgPSB7CisJLm5v dGlmaWVyX2NhbGwgPSBzc2VfcG1fbm90aWZpZXIsCit9OworCisvKgorICogTWFzayBhbGwgQ1BV cyBhbmQgdW5yZWdpc3RlciBhbGwgZXZlbnRzIG9uIHBhbmljLCByZWJvb3Qgb3Iga2V4ZWMuCisg Ki8KK3N0YXRpYyBpbnQgc3NlX3JlYm9vdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sg Km5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCQl2b2lkICpkYXRhKQoreworCWNwdWhwX3Jl bW92ZV9zdGF0ZShzc2VfaHBfc3RhdGUpOworCisJc3NlX3Jlc2V0KCk7CisKKwlyZXR1cm4gTk9U SUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNzZV9yZWJvb3RfbmIg PSB7CisJLm5vdGlmaWVyX2NhbGwgPSBzc2VfcmVib290X25vdGlmaWVyLAorfTsKKworc3RhdGlj IGludCBfX2luaXQgc3NlX2luaXQodm9pZCkKK3sKKwlpbnQgY3B1LCByZXQ7CisKKwlpZiAoc2Jp X3Byb2JlX2V4dGVuc2lvbihTQklfRVhUX1NTRSkgPD0gMCkgeworCQlwcl9lcnIoIk1pc3Npbmcg U0JJIFNTRSBleHRlbnNpb25cbiIpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXByX2lu Zm8oIlNCSSBTU0UgZXh0ZW5zaW9uIGRldGVjdGVkXG4iKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxl X2NwdShjcHUpCisJCUlOSVRfTElTVF9IRUFEKCZldmVudHMpOworCisJcmV0ID0gY3B1X3BtX3Jl Z2lzdGVyX25vdGlmaWVyKCZzc2VfcG1fbmIpOworCWlmIChyZXQpIHsKKwkJcHJfd2FybigiRmFp bGVkIHRvIHJlZ2lzdGVyIENQVSBQTSBub3RpZmllci4uLlxuIik7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZzc2VfcmVib290X25iKTsKKwlp ZiAocmV0KSB7CisJCXByX3dhcm4oIkZhaWxlZCB0byByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIu Li5cbiIpOworCQlnb3RvIHJlbW92ZV9jcHVwbTsKKwl9CisKKwlyZXQgPSBjcHVocF9zZXR1cF9z dGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCAicmlzY3Yvc3NlOm9ubGluZSIsCisJCQkJc3NlX2Nw dV9vbmxpbmUsIHNzZV9jcHVfdGVhcmRvd24pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHJlbW92 ZV9yZWJvb3Q7CisKKwlzc2VfaHBfc3RhdGUgPSByZXQ7CisJc3NlX2F2YWlsYWJsZSA9IHRydWU7 CisKKwlyZXR1cm4gMDsKKworcmVtb3ZlX3JlYm9vdDoKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3Rp Zmllcigmc3NlX3JlYm9vdF9uYik7CisKK3JlbW92ZV9jcHVwbToKKwljcHVfcG1fdW5yZWdpc3Rl cl9ub3RpZmllcigmc3NlX3BtX25iKTsKKworCXJldHVybiByZXQ7Cit9CithcmNoX2luaXRjYWxs KHNzZV9pbml0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmlzY3Zfc3NlLmggYi9pbmNs dWRlL2xpbnV4L3Jpc2N2X3NzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uYzczMTg0MDc0YjhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yaXNj dl9zc2UuaApAQCAtMCwwICsxLDU2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBSaXZvcyBJbmMuCisgKi8KKworI2lm bmRlZiBfX0xJTlVYX1JJU0NWX1NTRV9ICisjZGVmaW5lIF9fTElOVVhfUklTQ1ZfU1NFX0gKKwor I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCitz dHJ1Y3Qgc3NlX2V2ZW50Oworc3RydWN0IHB0X3JlZ3M7CisKK3R5cGVkZWYgaW50IChzc2VfZXZl bnRfaGFuZGxlcikodTMyIGV2ZW50X251bSwgdm9pZCAqYXJnLCBzdHJ1Y3QgcHRfcmVncyAqcmVn cyk7CisKKyNpZmRlZiBDT05GSUdfUklTQ1ZfU1NFCisKK3N0cnVjdCBzc2VfZXZlbnQgKnNzZV9l dmVudF9yZWdpc3Rlcih1MzIgZXZlbnRfbnVtLCB1MzIgcHJpb3JpdHksCisJCQkJICAgICBzc2Vf ZXZlbnRfaGFuZGxlciAqaGFuZGxlciwgdm9pZCAqYXJnKTsKKwordm9pZCBzc2VfZXZlbnRfdW5y ZWdpc3RlcihzdHJ1Y3Qgc3NlX2V2ZW50ICpldnQpOworCitpbnQgc3NlX2V2ZW50X3NldF90YXJn ZXRfY3B1KHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldnQsIHVuc2lnbmVkIGludCBjcHUpOworCitp bnQgc3NlX2V2ZW50X2VuYWJsZShzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZ0KTsKKwordm9pZCBz c2VfZXZlbnRfZGlzYWJsZShzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZ0KTsKKworI2Vsc2UKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IHNzZV9ldmVudCAqc3NlX2V2ZW50X3JlZ2lzdGVyKHUzMiBldmVu dF9udW0sIHUzMiBwcmlvcml0eSwKKwkJCQkJCSAgIHNzZV9ldmVudF9oYW5kbGVyICpoYW5kbGVy LAorCQkJCQkJICAgdm9pZCAqYXJnKQoreworCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIHNzZV9ldmVudF91bnJlZ2lzdGVyKHN0cnVjdCBzc2Vf ZXZlbnQgKmV2dCkge30KKworc3RhdGljIGlubGluZSBpbnQgc3NlX2V2ZW50X3NldF90YXJnZXRf Y3B1KHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldnQsCisJCQkJCSAgIHVuc2lnbmVkIGludCBjcHUp Cit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW5saW5lIGludCBzc2VfZXZl bnRfZW5hYmxlKHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldnQpCit7CisJcmV0dXJuIC1FT1BOT1RT VVBQOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3NlX2V2ZW50X2Rpc2FibGUoc3RydWN0IHNz ZV9ldmVudCAqc3NlX2V2dCkge30KKworCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTElOVVhfUklT Q1ZfU1NFX0ggKi8KLS0gCjIuNDUuMgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtcmlzY3YK