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 X-Spam-Level: X-Spam-Status: No, score=-24.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31B6FC43462 for ; Thu, 6 May 2021 15:32:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F0DD061494 for ; Thu, 6 May 2021 15:32:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235415AbhEFPdq (ORCPT ); Thu, 6 May 2021 11:33:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:45862 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235207AbhEFPdp (ORCPT ); Thu, 6 May 2021 11:33:45 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 22EC66101A; Thu, 6 May 2021 15:32:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315167; bh=s/YJwMrqvoOsPJSEvD5WAEweomBui7Dy2w8ikfwL2rE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jMcfh4hFHod7LXZBOUUtvmvy4wKrI7+Jptr9J5rR2eVvG5FFNHPHSOEEb6liiPu8s ne7QsyByM7KFV6dkVidzC6nn0oLthCWzodUR0UaW0zmSs+bGLH6IUkw4g9Qvr9maQ9 gLYST0fQlC+n9u2zAgGDodvZY4OjNlkaeMpRrsgLHZrlGacTTn2odt2/k4WEAigRow g447gIpekZ5d9Mf5ju7AbcR3h4pLGUkjpAMjRy3j6jDlY10CUqm7EtYRgfx1FKvmcv lL402eKQINe/Rdi2kYIKPgrEi2CdHF5NqIegO7TwoWYoEfNMmAQj8aa4uGrHUo+Y4z bz5q802AXJzWA== Received: by pali.im (Postfix) id 32F3D89A; Thu, 6 May 2021 17:32:44 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Thomas Petazzoni , Rob Herring , Bjorn Helgaas Cc: Russell King , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Remi Pommarel , Xogium , Tomasz Maciej Nowak , Marc Zyngier , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 01/42] PCI: aardvark: Fix kernel panic during PIO transfer Date: Thu, 6 May 2021 17:31:12 +0200 Message-Id: <20210506153153.30454-2-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210506153153.30454-1-pali@kernel.org> References: <20210506153153.30454-1-pali@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Trying to start a new PIO transfer by writing value 0 in PIO_START register when previous transfer has not yet completed (which is indicated by value 1 in PIO_START) causes an External Abort on CPU, which results in kernel panic: SError Interrupt on CPU0, code 0xbf000002 -- SError Kernel panic - not syncing: Asynchronous SError Interrupt To prevent kernel panic, it is required to reject a new PIO transfer when previous one has not finished yet. If previous PIO transfer is not finished yet, the kernel may issue a new PIO request only if the previous PIO transfer timed out. In the past the root cause of this issue was incorrectly identified (as it often happens during link retraining or after link down event) and special hack was implemented in Trusted Firmware to catch all SError events in EL3, to ignore errors with code 0xbf000002 and not forwarding any other errors to kernel and instead throw panic from EL3 Trusted Firmware handler. Links to discussion and patches about this issue: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/commit/?id=3c7dcdac5c50 https://lore.kernel.org/linux-pci/20190316161243.29517-1-repk@triplefau.lt/ https://lore.kernel.org/linux-pci/971be151d24312cc533989a64bd454b4@www.loen.fr/ https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/1541 But the real cause was the fact that during link retraning or after link down event the PIO transfer may take longer time, up to the 1.44s until it times out. This increased probability that a new PIO transfer would be issued by kernel while previous one has not finished yet. After applying this change into the kernel, it is possible to revert the mentioned TF-A hack and SError events do not have to be caught in TF-A EL3. Signed-off-by: Pali Rohár Reviewed-by: Marek Behún Cc: stable@vger.kernel.org # 7fbcb5da811b ("PCI: aardvark: Don't rely on jiffies while holding spinlock") --- drivers/pci/controller/pci-aardvark.c | 49 ++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index 051b48bd7985..e3f5e7ab7606 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -514,7 +514,7 @@ static int advk_pcie_wait_pio(struct advk_pcie *pcie) udelay(PIO_RETRY_DELAY); } - dev_err(dev, "config read/write timed out\n"); + dev_err(dev, "PIO read/write transfer time out\n"); return -ETIMEDOUT; } @@ -657,6 +657,35 @@ static bool advk_pcie_valid_device(struct advk_pcie *pcie, struct pci_bus *bus, return true; } +static bool advk_pcie_pio_is_running(struct advk_pcie *pcie) +{ + struct device *dev = &pcie->pdev->dev; + + /* + * Trying to start a new PIO transfer when previous has not completed + * cause External Abort on CPU which results in kernel panic: + * + * SError Interrupt on CPU0, code 0xbf000002 -- SError + * Kernel panic - not syncing: Asynchronous SError Interrupt + * + * Functions advk_pcie_rd_conf() and advk_pcie_wr_conf() are protected + * by raw_spin_lock_irqsave() at pci_lock_config() level to prevent + * concurrent calls at the same time. But because PIO transfer may take + * about 1.5s when link is down or card is disconnected, it means that + * advk_pcie_wait_pio() does not always have to wait for completion. + * + * Some versions of ARM Trusted Firmware handles this External Abort at + * EL3 level and mask it to prevent kernel panic. Relevant TF-A commit: + * https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/commit/?id=3c7dcdac5c50 + */ + if (advk_readl(pcie, PIO_START)) { + dev_err(dev, "Previous PIO read/write transfer is still running\n"); + return true; + } + + return false; +} + static int advk_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where, int size, u32 *val) { @@ -673,9 +702,10 @@ static int advk_pcie_rd_conf(struct pci_bus *bus, u32 devfn, return pci_bridge_emul_conf_read(&pcie->bridge, where, size, val); - /* Start PIO */ - advk_writel(pcie, 0, PIO_START); - advk_writel(pcie, 1, PIO_ISR); + if (advk_pcie_pio_is_running(pcie)) { + *val = 0xffffffff; + return PCIBIOS_SET_FAILED; + } /* Program the control register */ reg = advk_readl(pcie, PIO_CTRL); @@ -694,7 +724,8 @@ static int advk_pcie_rd_conf(struct pci_bus *bus, u32 devfn, /* Program the data strobe */ advk_writel(pcie, 0xf, PIO_WR_DATA_STRB); - /* Start the transfer */ + /* Clear PIO DONE ISR and start the transfer */ + advk_writel(pcie, 1, PIO_ISR); advk_writel(pcie, 1, PIO_START); ret = advk_pcie_wait_pio(pcie); @@ -734,9 +765,8 @@ static int advk_pcie_wr_conf(struct pci_bus *bus, u32 devfn, if (where % size) return PCIBIOS_SET_FAILED; - /* Start PIO */ - advk_writel(pcie, 0, PIO_START); - advk_writel(pcie, 1, PIO_ISR); + if (advk_pcie_pio_is_running(pcie)) + return PCIBIOS_SET_FAILED; /* Program the control register */ reg = advk_readl(pcie, PIO_CTRL); @@ -763,7 +793,8 @@ static int advk_pcie_wr_conf(struct pci_bus *bus, u32 devfn, /* Program the data strobe */ advk_writel(pcie, data_strobe, PIO_WR_DATA_STRB); - /* Start the transfer */ + /* Clear PIO DONE ISR and start the transfer */ + advk_writel(pcie, 1, PIO_ISR); advk_writel(pcie, 1, PIO_START); ret = advk_pcie_wait_pio(pcie); -- 2.20.1 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 X-Spam-Level: X-Spam-Status: No, score=-22.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4E90EC433ED for ; Thu, 6 May 2021 15:35:38 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A42EA610C8 for ; Thu, 6 May 2021 15:35:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A42EA610C8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; 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=0+77uKVk/4ULIxWlDboy7IZsVvECtA1brHj6JU0y/zw=; b=DEMv1Wy3sa4okfWt0WdGSPWZi p57fenocMTPOc2Wj7t0Wpr+OihfW+43aYW+3r3tHZeLfi5TAKitOO6bQfWqvU0OGYw9w0RCkFaKbP iBsWrrKP0E31/H88qYdifPm6DhDhEMojCHUVsJ4ppx9ifcb1krWKgrSVB2IOZaWlU3ysOJS3nJmhY MD2H2ZePf/38WO1gEzqAiTYdX5mhBAcKYaeazZ2QROV4c+PNwd1DOM9UYeBep8xMBKRXobX9gCK+o aJgf10Z9FduRTEI0WjvK/UQUFPSTB8RhCEWDjMCIOcD0Uoy9lhhiPQAuySUYl1ZDPF0+DLFxff0no RwoW332Zg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1leg0n-004aPI-Cp; Thu, 06 May 2021 15:34:01 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lefzg-004a2r-L9 for linux-arm-kernel@desiato.infradead.org; Thu, 06 May 2021 15:32:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Sender:Reply-To:Content-ID:Content-Description; bh=+u31kIFm5zZJgYRpI5nPFxm4N80JqTvM466qjbl87Dc=; b=MHxGWv1DaYy094iLR/MJZuYsqc KfPi1i08wmgzdsVBQfeAfQYDsS6B3eoiR9bY0pcVwM8jLCK927+7UItDdlMr18udWI7PclnNpDRT1 7kEqQ7VG+2Il3OHUnEKEcEQP9hNBsfti61C00N5m2dwjs7fxDYlYo8+pR8nGAt6ZfRMaLoaSlfjVt WrbpFl5W5Licep1YfV3zBzF80WCEhkMl/3B/Ag5z45Nlcvh77r4kmn1ReO4lmEGOC+yJ8fP8ye2CR BbJYH+2hc2MkZ/+qNklWOtQiV6FPoS8d4Y70UBW3cgS5PdXz0TBkAWOmtfry3wGbvMAxxYYeB8HfO HZq9j2qA==; Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lefzb-0069f3-W3 for linux-arm-kernel@lists.infradead.org; Thu, 06 May 2021 15:32:51 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 22EC66101A; Thu, 6 May 2021 15:32:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315167; bh=s/YJwMrqvoOsPJSEvD5WAEweomBui7Dy2w8ikfwL2rE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jMcfh4hFHod7LXZBOUUtvmvy4wKrI7+Jptr9J5rR2eVvG5FFNHPHSOEEb6liiPu8s ne7QsyByM7KFV6dkVidzC6nn0oLthCWzodUR0UaW0zmSs+bGLH6IUkw4g9Qvr9maQ9 gLYST0fQlC+n9u2zAgGDodvZY4OjNlkaeMpRrsgLHZrlGacTTn2odt2/k4WEAigRow g447gIpekZ5d9Mf5ju7AbcR3h4pLGUkjpAMjRy3j6jDlY10CUqm7EtYRgfx1FKvmcv lL402eKQINe/Rdi2kYIKPgrEi2CdHF5NqIegO7TwoWYoEfNMmAQj8aa4uGrHUo+Y4z bz5q802AXJzWA== Received: by pali.im (Postfix) id 32F3D89A; Thu, 6 May 2021 17:32:44 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Thomas Petazzoni , Rob Herring , Bjorn Helgaas Cc: Russell King , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Remi Pommarel , Xogium , Tomasz Maciej Nowak , Marc Zyngier , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 01/42] PCI: aardvark: Fix kernel panic during PIO transfer Date: Thu, 6 May 2021 17:31:12 +0200 Message-Id: <20210506153153.30454-2-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210506153153.30454-1-pali@kernel.org> References: <20210506153153.30454-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210506_083248_152764_95AF65AF X-CRM114-Status: GOOD ( 21.97 ) 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 VHJ5aW5nIHRvIHN0YXJ0IGEgbmV3IFBJTyB0cmFuc2ZlciBieSB3cml0aW5nIHZhbHVlIDAgaW4g UElPX1NUQVJUIHJlZ2lzdGVyCndoZW4gcHJldmlvdXMgdHJhbnNmZXIgaGFzIG5vdCB5ZXQgY29t cGxldGVkICh3aGljaCBpcyBpbmRpY2F0ZWQgYnkgdmFsdWUgMQppbiBQSU9fU1RBUlQpIGNhdXNl cyBhbiBFeHRlcm5hbCBBYm9ydCBvbiBDUFUsIHdoaWNoIHJlc3VsdHMgaW4ga2VybmVsCnBhbmlj OgoKICAgIFNFcnJvciBJbnRlcnJ1cHQgb24gQ1BVMCwgY29kZSAweGJmMDAwMDAyIC0tIFNFcnJv cgogICAgS2VybmVsIHBhbmljIC0gbm90IHN5bmNpbmc6IEFzeW5jaHJvbm91cyBTRXJyb3IgSW50 ZXJydXB0CgpUbyBwcmV2ZW50IGtlcm5lbCBwYW5pYywgaXQgaXMgcmVxdWlyZWQgdG8gcmVqZWN0 IGEgbmV3IFBJTyB0cmFuc2ZlciB3aGVuCnByZXZpb3VzIG9uZSBoYXMgbm90IGZpbmlzaGVkIHll dC4KCklmIHByZXZpb3VzIFBJTyB0cmFuc2ZlciBpcyBub3QgZmluaXNoZWQgeWV0LCB0aGUga2Vy bmVsIG1heSBpc3N1ZSBhIG5ldwpQSU8gcmVxdWVzdCBvbmx5IGlmIHRoZSBwcmV2aW91cyBQSU8g dHJhbnNmZXIgdGltZWQgb3V0LgoKSW4gdGhlIHBhc3QgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBp c3N1ZSB3YXMgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCAoYXMgaXQKb2Z0ZW4gaGFwcGVucyBkdXJp bmcgbGluayByZXRyYWluaW5nIG9yIGFmdGVyIGxpbmsgZG93biBldmVudCkgYW5kIHNwZWNpYWwK aGFjayB3YXMgaW1wbGVtZW50ZWQgaW4gVHJ1c3RlZCBGaXJtd2FyZSB0byBjYXRjaCBhbGwgU0Vy cm9yIGV2ZW50cyBpbiBFTDMsCnRvIGlnbm9yZSBlcnJvcnMgd2l0aCBjb2RlIDB4YmYwMDAwMDIg YW5kIG5vdCBmb3J3YXJkaW5nIGFueSBvdGhlciBlcnJvcnMKdG8ga2VybmVsIGFuZCBpbnN0ZWFk IHRocm93IHBhbmljIGZyb20gRUwzIFRydXN0ZWQgRmlybXdhcmUgaGFuZGxlci4KCkxpbmtzIHRv IGRpc2N1c3Npb24gYW5kIHBhdGNoZXMgYWJvdXQgdGhpcyBpc3N1ZToKaHR0cHM6Ly9naXQudHJ1 c3RlZGZpcm13YXJlLm9yZy9URi1BL3RydXN0ZWQtZmlybXdhcmUtYS5naXQvY29tbWl0Lz9pZD0z YzdkY2RhYzVjNTAKaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtcGNpLzIwMTkwMzE2MTYx MjQzLjI5NTE3LTEtcmVwa0B0cmlwbGVmYXUubHQvCmh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xp bnV4LXBjaS85NzFiZTE1MWQyNDMxMmNjNTMzOTg5YTY0YmQ0NTRiNEB3d3cubG9lbi5mci8KaHR0 cHM6Ly9yZXZpZXcudHJ1c3RlZGZpcm13YXJlLm9yZy9jL1RGLUEvdHJ1c3RlZC1maXJtd2FyZS1h LysvMTU0MQoKQnV0IHRoZSByZWFsIGNhdXNlIHdhcyB0aGUgZmFjdCB0aGF0IGR1cmluZyBsaW5r IHJldHJhbmluZyBvciBhZnRlciBsaW5rCmRvd24gZXZlbnQgdGhlIFBJTyB0cmFuc2ZlciBtYXkg dGFrZSBsb25nZXIgdGltZSwgdXAgdG8gdGhlIDEuNDRzIHVudGlsIGl0CnRpbWVzIG91dC4gVGhp cyBpbmNyZWFzZWQgcHJvYmFiaWxpdHkgdGhhdCBhIG5ldyBQSU8gdHJhbnNmZXIgd291bGQgYmUK aXNzdWVkIGJ5IGtlcm5lbCB3aGlsZSBwcmV2aW91cyBvbmUgaGFzIG5vdCBmaW5pc2hlZCB5ZXQu CgpBZnRlciBhcHBseWluZyB0aGlzIGNoYW5nZSBpbnRvIHRoZSBrZXJuZWwsIGl0IGlzIHBvc3Np YmxlIHRvIHJldmVydCB0aGUKbWVudGlvbmVkIFRGLUEgaGFjayBhbmQgU0Vycm9yIGV2ZW50cyBk byBub3QgaGF2ZSB0byBiZSBjYXVnaHQgaW4gVEYtQSBFTDMuCgpTaWduZWQtb2ZmLWJ5OiBQYWxp IFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgpSZXZpZXdlZC1ieTogTWFyZWsgQmVow7puIDxrYWJl bEBrZXJuZWwub3JnPgpDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZyAjIDdmYmNiNWRhODExYiAo IlBDSTogYWFyZHZhcms6IERvbid0IHJlbHkgb24gamlmZmllcyB3aGlsZSBob2xkaW5nIHNwaW5s b2NrIikKLS0tCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFyay5jIHwgNDkgKysr KysrKysrKysrKysrKysrKysrKy0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygr KSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3Bj aS1hYXJkdmFyay5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYwppbmRl eCAwNTFiNDhiZDc5ODUuLmUzZjVlN2FiNzYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvY29u dHJvbGxlci9wY2ktYWFyZHZhcmsuYworKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1h YXJkdmFyay5jCkBAIC01MTQsNyArNTE0LDcgQEAgc3RhdGljIGludCBhZHZrX3BjaWVfd2FpdF9w aW8oc3RydWN0IGFkdmtfcGNpZSAqcGNpZSkKIAkJdWRlbGF5KFBJT19SRVRSWV9ERUxBWSk7CiAJ fQogCi0JZGV2X2VycihkZXYsICJjb25maWcgcmVhZC93cml0ZSB0aW1lZCBvdXRcbiIpOworCWRl dl9lcnIoZGV2LCAiUElPIHJlYWQvd3JpdGUgdHJhbnNmZXIgdGltZSBvdXRcbiIpOwogCXJldHVy biAtRVRJTUVET1VUOwogfQogCkBAIC02NTcsNiArNjU3LDM1IEBAIHN0YXRpYyBib29sIGFkdmtf cGNpZV92YWxpZF9kZXZpY2Uoc3RydWN0IGFkdmtfcGNpZSAqcGNpZSwgc3RydWN0IHBjaV9idXMg KmJ1cywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgYWR2a19wY2llX3Bpb19pc19y dW5uaW5nKHN0cnVjdCBhZHZrX3BjaWUgKnBjaWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JnBjaWUtPnBkZXYtPmRldjsKKworCS8qCisJICogVHJ5aW5nIHRvIHN0YXJ0IGEgbmV3IFBJTyB0 cmFuc2ZlciB3aGVuIHByZXZpb3VzIGhhcyBub3QgY29tcGxldGVkCisJICogY2F1c2UgRXh0ZXJu YWwgQWJvcnQgb24gQ1BVIHdoaWNoIHJlc3VsdHMgaW4ga2VybmVsIHBhbmljOgorCSAqCisJICog ICAgIFNFcnJvciBJbnRlcnJ1cHQgb24gQ1BVMCwgY29kZSAweGJmMDAwMDAyIC0tIFNFcnJvcgor CSAqICAgICBLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogQXN5bmNocm9ub3VzIFNFcnJvciBJ bnRlcnJ1cHQKKwkgKgorCSAqIEZ1bmN0aW9ucyBhZHZrX3BjaWVfcmRfY29uZigpIGFuZCBhZHZr X3BjaWVfd3JfY29uZigpIGFyZSBwcm90ZWN0ZWQKKwkgKiBieSByYXdfc3Bpbl9sb2NrX2lycXNh dmUoKSBhdCBwY2lfbG9ja19jb25maWcoKSBsZXZlbCB0byBwcmV2ZW50CisJICogY29uY3VycmVu dCBjYWxscyBhdCB0aGUgc2FtZSB0aW1lLiBCdXQgYmVjYXVzZSBQSU8gdHJhbnNmZXIgbWF5IHRh a2UKKwkgKiBhYm91dCAxLjVzIHdoZW4gbGluayBpcyBkb3duIG9yIGNhcmQgaXMgZGlzY29ubmVj dGVkLCBpdCBtZWFucyB0aGF0CisJICogYWR2a19wY2llX3dhaXRfcGlvKCkgZG9lcyBub3QgYWx3 YXlzIGhhdmUgdG8gd2FpdCBmb3IgY29tcGxldGlvbi4KKwkgKgorCSAqIFNvbWUgdmVyc2lvbnMg b2YgQVJNIFRydXN0ZWQgRmlybXdhcmUgaGFuZGxlcyB0aGlzIEV4dGVybmFsIEFib3J0IGF0CisJ ICogRUwzIGxldmVsIGFuZCBtYXNrIGl0IHRvIHByZXZlbnQga2VybmVsIHBhbmljLiBSZWxldmFu dCBURi1BIGNvbW1pdDoKKwkgKiBodHRwczovL2dpdC50cnVzdGVkZmlybXdhcmUub3JnL1RGLUEv dHJ1c3RlZC1maXJtd2FyZS1hLmdpdC9jb21taXQvP2lkPTNjN2RjZGFjNWM1MAorCSAqLworCWlm IChhZHZrX3JlYWRsKHBjaWUsIFBJT19TVEFSVCkpIHsKKwkJZGV2X2VycihkZXYsICJQcmV2aW91 cyBQSU8gcmVhZC93cml0ZSB0cmFuc2ZlciBpcyBzdGlsbCBydW5uaW5nXG4iKTsKKwkJcmV0dXJu IHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgaW50IGFkdmtfcGNpZV9y ZF9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwKIAkJCSAgICAgaW50IHdoZXJl LCBpbnQgc2l6ZSwgdTMyICp2YWwpCiB7CkBAIC02NzMsOSArNzAyLDEwIEBAIHN0YXRpYyBpbnQg YWR2a19wY2llX3JkX2NvbmYoc3RydWN0IHBjaV9idXMgKmJ1cywgdTMyIGRldmZuLAogCQlyZXR1 cm4gcGNpX2JyaWRnZV9lbXVsX2NvbmZfcmVhZCgmcGNpZS0+YnJpZGdlLCB3aGVyZSwKIAkJCQkJ CSBzaXplLCB2YWwpOwogCi0JLyogU3RhcnQgUElPICovCi0JYWR2a193cml0ZWwocGNpZSwgMCwg UElPX1NUQVJUKTsKLQlhZHZrX3dyaXRlbChwY2llLCAxLCBQSU9fSVNSKTsKKwlpZiAoYWR2a19w Y2llX3Bpb19pc19ydW5uaW5nKHBjaWUpKSB7CisJCSp2YWwgPSAweGZmZmZmZmZmOworCQlyZXR1 cm4gUENJQklPU19TRVRfRkFJTEVEOworCX0KIAogCS8qIFByb2dyYW0gdGhlIGNvbnRyb2wgcmVn aXN0ZXIgKi8KIAlyZWcgPSBhZHZrX3JlYWRsKHBjaWUsIFBJT19DVFJMKTsKQEAgLTY5NCw3ICs3 MjQsOCBAQCBzdGF0aWMgaW50IGFkdmtfcGNpZV9yZF9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMs IHUzMiBkZXZmbiwKIAkvKiBQcm9ncmFtIHRoZSBkYXRhIHN0cm9iZSAqLwogCWFkdmtfd3JpdGVs KHBjaWUsIDB4ZiwgUElPX1dSX0RBVEFfU1RSQik7CiAKLQkvKiBTdGFydCB0aGUgdHJhbnNmZXIg Ki8KKwkvKiBDbGVhciBQSU8gRE9ORSBJU1IgYW5kIHN0YXJ0IHRoZSB0cmFuc2ZlciAqLworCWFk dmtfd3JpdGVsKHBjaWUsIDEsIFBJT19JU1IpOwogCWFkdmtfd3JpdGVsKHBjaWUsIDEsIFBJT19T VEFSVCk7CiAKIAlyZXQgPSBhZHZrX3BjaWVfd2FpdF9waW8ocGNpZSk7CkBAIC03MzQsOSArNzY1 LDggQEAgc3RhdGljIGludCBhZHZrX3BjaWVfd3JfY29uZihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1 MzIgZGV2Zm4sCiAJaWYgKHdoZXJlICUgc2l6ZSkKIAkJcmV0dXJuIFBDSUJJT1NfU0VUX0ZBSUxF RDsKIAotCS8qIFN0YXJ0IFBJTyAqLwotCWFkdmtfd3JpdGVsKHBjaWUsIDAsIFBJT19TVEFSVCk7 Ci0JYWR2a193cml0ZWwocGNpZSwgMSwgUElPX0lTUik7CisJaWYgKGFkdmtfcGNpZV9waW9faXNf cnVubmluZyhwY2llKSkKKwkJcmV0dXJuIFBDSUJJT1NfU0VUX0ZBSUxFRDsKIAogCS8qIFByb2dy YW0gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAlyZWcgPSBhZHZrX3JlYWRsKHBjaWUsIFBJT19D VFJMKTsKQEAgLTc2Myw3ICs3OTMsOCBAQCBzdGF0aWMgaW50IGFkdmtfcGNpZV93cl9jb25mKHN0 cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwKIAkvKiBQcm9ncmFtIHRoZSBkYXRhIHN0cm9i ZSAqLwogCWFkdmtfd3JpdGVsKHBjaWUsIGRhdGFfc3Ryb2JlLCBQSU9fV1JfREFUQV9TVFJCKTsK IAotCS8qIFN0YXJ0IHRoZSB0cmFuc2ZlciAqLworCS8qIENsZWFyIFBJTyBET05FIElTUiBhbmQg c3RhcnQgdGhlIHRyYW5zZmVyICovCisJYWR2a193cml0ZWwocGNpZSwgMSwgUElPX0lTUik7CiAJ YWR2a193cml0ZWwocGNpZSwgMSwgUElPX1NUQVJUKTsKIAogCXJldCA9IGFkdmtfcGNpZV93YWl0 X3BpbyhwY2llKTsKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK