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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 030A7C433FE for ; Mon, 10 Jan 2022 01:50:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237984AbiAJBuf (ORCPT ); Sun, 9 Jan 2022 20:50:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59532 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237991AbiAJBuf (ORCPT ); Sun, 9 Jan 2022 20:50:35 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A663CC06173F for ; Sun, 9 Jan 2022 17:50:34 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 6805EB81118 for ; Mon, 10 Jan 2022 01:50:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A8E53C36AEF; Mon, 10 Jan 2022 01:50:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641779432; bh=PYUoajvMFfvEnqE0r+a8fDw7RtXce9LHMlxeX26VGPk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dFTGKK3inThb2/bhj0UvK47MlHsLxMchmS8oR8padAsO+phJABtdaTWPUtKihbiRp wlVY7SZR0pu5GfBILOYzCEX6g4hsbe9aT/4WfwWbQ5otXyb1oirYan/2UFYp5fzDTN DFJAi9udUGOD8enpZQVP8cYBbVE0LTRShB0jVHXG044v7ARFSknQF0g5yMIvu9PkcW T0d2tXlQngWAcQ3wQSEz6ClF5X4jxjaAPT7at97uKLmlehlX+T9XFCuicafu7HsTVt 7IvdBnPdsi+bm4Xnq20upi5BiM12qfr8QnrrGCLNWJV/KP5vSGd0urle39yJSX/OGk NlEnDbbwNW9Gg== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Marc Zyngier , Lorenzo Pieralisi , Bjorn Helgaas Cc: pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH v2 04/23] PCI: aardvark: Rewrite IRQ code to chained IRQ handler Date: Mon, 10 Jan 2022 02:49:59 +0100 Message-Id: <20220110015018.26359-5-kabel@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220110015018.26359-1-kabel@kernel.org> References: <20220110015018.26359-1-kabel@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 From: Pali Rohár Rewrite the code to use irq_set_chained_handler_and_data() handler with chained_irq_enter() and chained_irq_exit() processing instead of using devm_request_irq(). advk_pcie_irq_handler() reads IRQ status bits and calls other functions based on which bits are set. These functions then read its own IRQ status bits and calls other aardvark functions based on these bits. Finally generic_handle_domain_irq() with translated linux IRQ numbers are called. Signed-off-by: Pali Rohár Signed-off-by: Marek Behún --- drivers/pci/controller/pci-aardvark.c | 48 +++++++++++++++------------ 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index 346d38835539..315147f2812f 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -269,6 +269,7 @@ struct advk_pcie { u32 actions; } wins[OB_WIN_COUNT]; u8 wins_count; + int irq; struct irq_domain *irq_domain; struct irq_chip irq_chip; raw_spinlock_t irq_lock; @@ -1437,21 +1438,26 @@ static void advk_pcie_handle_int(struct advk_pcie *pcie) } } -static irqreturn_t advk_pcie_irq_handler(int irq, void *arg) +static void advk_pcie_irq_handler(struct irq_desc *desc) { - struct advk_pcie *pcie = arg; - u32 status; + struct advk_pcie *pcie = irq_desc_get_handler_data(desc); + struct irq_chip *chip = irq_desc_get_chip(desc); + u32 val, mask, status; - status = advk_readl(pcie, HOST_CTRL_INT_STATUS_REG); - if (!(status & PCIE_IRQ_CORE_INT)) - return IRQ_NONE; + chained_irq_enter(chip, desc); - advk_pcie_handle_int(pcie); + val = advk_readl(pcie, HOST_CTRL_INT_STATUS_REG); + mask = advk_readl(pcie, HOST_CTRL_INT_MASK_REG); + status = val & ((~mask) & PCIE_IRQ_ALL_MASK); - /* Clear interrupt */ - advk_writel(pcie, PCIE_IRQ_CORE_INT, HOST_CTRL_INT_STATUS_REG); + if (status & PCIE_IRQ_CORE_INT) { + advk_pcie_handle_int(pcie); - return IRQ_HANDLED; + /* Clear interrupt */ + advk_writel(pcie, PCIE_IRQ_CORE_INT, HOST_CTRL_INT_STATUS_REG); + } + + chained_irq_exit(chip, desc); } static void __maybe_unused advk_pcie_disable_phy(struct advk_pcie *pcie) @@ -1518,7 +1524,7 @@ static int advk_pcie_probe(struct platform_device *pdev) struct advk_pcie *pcie; struct pci_host_bridge *bridge; struct resource_entry *entry; - int ret, irq; + int ret; bridge = devm_pci_alloc_host_bridge(dev, sizeof(struct advk_pcie)); if (!bridge) @@ -1604,17 +1610,9 @@ static int advk_pcie_probe(struct platform_device *pdev) if (IS_ERR(pcie->base)) return PTR_ERR(pcie->base); - irq = platform_get_irq(pdev, 0); - if (irq < 0) - return irq; - - ret = devm_request_irq(dev, irq, advk_pcie_irq_handler, - IRQF_SHARED | IRQF_NO_THREAD, "advk-pcie", - pcie); - if (ret) { - dev_err(dev, "Failed to register interrupt\n"); - return ret; - } + pcie->irq = platform_get_irq(pdev, 0); + if (pcie->irq < 0) + return pcie->irq; pcie->reset_gpio = devm_gpiod_get_from_of_node(dev, dev->of_node, "reset-gpios", 0, @@ -1663,11 +1661,14 @@ static int advk_pcie_probe(struct platform_device *pdev) return ret; } + irq_set_chained_handler_and_data(pcie->irq, advk_pcie_irq_handler, pcie); + bridge->sysdata = pcie; bridge->ops = &advk_pcie_ops; ret = pci_host_probe(bridge); if (ret < 0) { + irq_set_chained_handler_and_data(pcie->irq, NULL, NULL); advk_pcie_remove_msi_irq_domain(pcie); advk_pcie_remove_irq_domain(pcie); return ret; @@ -1715,6 +1716,9 @@ static int advk_pcie_remove(struct platform_device *pdev) advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_REG); advk_writel(pcie, PCIE_IRQ_ALL_MASK, HOST_CTRL_INT_STATUS_REG); + /* Remove IRQ handler */ + irq_set_chained_handler_and_data(pcie->irq, NULL, NULL); + /* Remove IRQ domains */ advk_pcie_remove_msi_irq_domain(pcie); advk_pcie_remove_irq_domain(pcie); -- 2.34.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 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 97C37C433EF for ; Mon, 10 Jan 2022 01:52:27 +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=PZnTy1TSXef2lDIPp33a9I2IoI0ITtzHCHynYv5ckbw=; b=JNCGMGD2HT1kXv mIZRE2zqi0ZfUxV2/7wM5GSwQPKW2cd5XfrhXJWE0iswJ+6/dSWIIEXQB+5R9LauufAHdB4ctYaKw 06X7KExAe/Vo/UZ5nBC0SyZb8g0zQdIpksqNFh0oP/y5gReKm/FgJDnqpxbcJk3nj8ntKdhLcWpp0 7Wh8zVoc8zqzLBJW6J490odbH3LCe8sSpCyrbli4/PeibWj8/ip7WxkKBT1Ju/d/S09WOwZUOiclh oeTJIzUJ0jRL1tarvt6xRz96ifHe1OhA0wPkanhPfSCpyFQfKl/XGLZzildT1ofoUBALHYdMP1g09 3QeCwYPZkBB//d2Oj9+g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n6jq5-008lt8-1d; Mon, 10 Jan 2022 01:51:13 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n6jpR-008lbG-FT for linux-arm-kernel@lists.infradead.org; Mon, 10 Jan 2022 01:50:35 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 0082160F4A; Mon, 10 Jan 2022 01:50:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A8E53C36AEF; Mon, 10 Jan 2022 01:50:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641779432; bh=PYUoajvMFfvEnqE0r+a8fDw7RtXce9LHMlxeX26VGPk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dFTGKK3inThb2/bhj0UvK47MlHsLxMchmS8oR8padAsO+phJABtdaTWPUtKihbiRp wlVY7SZR0pu5GfBILOYzCEX6g4hsbe9aT/4WfwWbQ5otXyb1oirYan/2UFYp5fzDTN DFJAi9udUGOD8enpZQVP8cYBbVE0LTRShB0jVHXG044v7ARFSknQF0g5yMIvu9PkcW T0d2tXlQngWAcQ3wQSEz6ClF5X4jxjaAPT7at97uKLmlehlX+T9XFCuicafu7HsTVt 7IvdBnPdsi+bm4Xnq20upi5BiM12qfr8QnrrGCLNWJV/KP5vSGd0urle39yJSX/OGk NlEnDbbwNW9Gg== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Marc Zyngier , Lorenzo Pieralisi , Bjorn Helgaas Cc: pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH v2 04/23] PCI: aardvark: Rewrite IRQ code to chained IRQ handler Date: Mon, 10 Jan 2022 02:49:59 +0100 Message-Id: <20220110015018.26359-5-kabel@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220110015018.26359-1-kabel@kernel.org> References: <20220110015018.26359-1-kabel@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220109_175033_623838_A9CA41C2 X-CRM114-Status: GOOD ( 18.15 ) 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 RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KClJld3JpdGUgdGhlIGNvZGUgdG8g dXNlIGlycV9zZXRfY2hhaW5lZF9oYW5kbGVyX2FuZF9kYXRhKCkgaGFuZGxlciB3aXRoCmNoYWlu ZWRfaXJxX2VudGVyKCkgYW5kIGNoYWluZWRfaXJxX2V4aXQoKSBwcm9jZXNzaW5nIGluc3RlYWQg b2YgdXNpbmcKZGV2bV9yZXF1ZXN0X2lycSgpLgoKYWR2a19wY2llX2lycV9oYW5kbGVyKCkgcmVh ZHMgSVJRIHN0YXR1cyBiaXRzIGFuZCBjYWxscyBvdGhlciBmdW5jdGlvbnMKYmFzZWQgb24gd2hp Y2ggYml0cyBhcmUgc2V0LiBUaGVzZSBmdW5jdGlvbnMgdGhlbiByZWFkIGl0cyBvd24gSVJRIHN0 YXR1cwpiaXRzIGFuZCBjYWxscyBvdGhlciBhYXJkdmFyayBmdW5jdGlvbnMgYmFzZWQgb24gdGhl c2UgYml0cy4gRmluYWxseQpnZW5lcmljX2hhbmRsZV9kb21haW5faXJxKCkgd2l0aCB0cmFuc2xh dGVkIGxpbnV4IElSUSBudW1iZXJzIGFyZSBjYWxsZWQuCgpTaWduZWQtb2ZmLWJ5OiBQYWxpIFJv aMOhciA8cGFsaUBrZXJuZWwub3JnPgpTaWduZWQtb2ZmLWJ5OiBNYXJlayBCZWjDum4gPGthYmVs QGtlcm5lbC5vcmc+Ci0tLQogZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYyB8 IDQ4ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI2IGluc2Vy dGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRy b2xsZXIvcGNpLWFhcmR2YXJrLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFy ay5jCmluZGV4IDM0NmQzODgzNTUzOS4uMzE1MTQ3ZjI4MTJmIDEwMDY0NAotLS0gYS9kcml2ZXJz L3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFyay5jCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvcGNpLWFhcmR2YXJrLmMKQEAgLTI2OSw2ICsyNjksNyBAQCBzdHJ1Y3QgYWR2a19wY2llIHsK IAkJdTMyIGFjdGlvbnM7CiAJfSB3aW5zW09CX1dJTl9DT1VOVF07CiAJdTggd2luc19jb3VudDsK KwlpbnQgaXJxOwogCXN0cnVjdCBpcnFfZG9tYWluICppcnFfZG9tYWluOwogCXN0cnVjdCBpcnFf Y2hpcCBpcnFfY2hpcDsKIAlyYXdfc3BpbmxvY2tfdCBpcnFfbG9jazsKQEAgLTE0MzcsMjEgKzE0 MzgsMjYgQEAgc3RhdGljIHZvaWQgYWR2a19wY2llX2hhbmRsZV9pbnQoc3RydWN0IGFkdmtfcGNp ZSAqcGNpZSkKIAl9CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBhZHZrX3BjaWVfaXJxX2hhbmRs ZXIoaW50IGlycSwgdm9pZCAqYXJnKQorc3RhdGljIHZvaWQgYWR2a19wY2llX2lycV9oYW5kbGVy KHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgYWR2a19wY2llICpwY2llID0gYXJn OwotCXUzMiBzdGF0dXM7CisJc3RydWN0IGFkdmtfcGNpZSAqcGNpZSA9IGlycV9kZXNjX2dldF9o YW5kbGVyX2RhdGEoZGVzYyk7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2Rlc2NfZ2V0 X2NoaXAoZGVzYyk7CisJdTMyIHZhbCwgbWFzaywgc3RhdHVzOwogCi0Jc3RhdHVzID0gYWR2a19y ZWFkbChwY2llLCBIT1NUX0NUUkxfSU5UX1NUQVRVU19SRUcpOwotCWlmICghKHN0YXR1cyAmIFBD SUVfSVJRX0NPUkVfSU5UKSkKLQkJcmV0dXJuIElSUV9OT05FOworCWNoYWluZWRfaXJxX2VudGVy KGNoaXAsIGRlc2MpOwogCi0JYWR2a19wY2llX2hhbmRsZV9pbnQocGNpZSk7CisJdmFsID0gYWR2 a19yZWFkbChwY2llLCBIT1NUX0NUUkxfSU5UX1NUQVRVU19SRUcpOworCW1hc2sgPSBhZHZrX3Jl YWRsKHBjaWUsIEhPU1RfQ1RSTF9JTlRfTUFTS19SRUcpOworCXN0YXR1cyA9IHZhbCAmICgofm1h c2spICYgUENJRV9JUlFfQUxMX01BU0spOwogCi0JLyogQ2xlYXIgaW50ZXJydXB0ICovCi0JYWR2 a193cml0ZWwocGNpZSwgUENJRV9JUlFfQ09SRV9JTlQsIEhPU1RfQ1RSTF9JTlRfU1RBVFVTX1JF Ryk7CisJaWYgKHN0YXR1cyAmIFBDSUVfSVJRX0NPUkVfSU5UKSB7CisJCWFkdmtfcGNpZV9oYW5k bGVfaW50KHBjaWUpOwogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCQkvKiBDbGVhciBpbnRlcnJ1 cHQgKi8KKwkJYWR2a193cml0ZWwocGNpZSwgUENJRV9JUlFfQ09SRV9JTlQsIEhPU1RfQ1RSTF9J TlRfU1RBVFVTX1JFRyk7CisJfQorCisJY2hhaW5lZF9pcnFfZXhpdChjaGlwLCBkZXNjKTsKIH0K IAogc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgYWR2a19wY2llX2Rpc2FibGVfcGh5KHN0cnVj dCBhZHZrX3BjaWUgKnBjaWUpCkBAIC0xNTE4LDcgKzE1MjQsNyBAQCBzdGF0aWMgaW50IGFkdmtf cGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXN0cnVjdCBhZHZrX3Bj aWUgKnBjaWU7CiAJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJpZGdlOwogCXN0cnVjdCByZXNv dXJjZV9lbnRyeSAqZW50cnk7Ci0JaW50IHJldCwgaXJxOworCWludCByZXQ7CiAKIAlicmlkZ2Ug PSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShkZXYsIHNpemVvZihzdHJ1Y3QgYWR2a19wY2ll KSk7CiAJaWYgKCFicmlkZ2UpCkBAIC0xNjA0LDE3ICsxNjEwLDkgQEAgc3RhdGljIGludCBhZHZr X3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoSVNfRVJSKHBj aWUtPmJhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihwY2llLT5iYXNlKTsKIAotCWlycSA9IHBsYXRm b3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKGlycSA8IDApCi0JCXJldHVybiBpcnE7Ci0KLQly ZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhZHZrX3BjaWVfaXJxX2hhbmRsZXIsCi0J CQkgICAgICAgSVJRRl9TSEFSRUQgfCBJUlFGX05PX1RIUkVBRCwgImFkdmstcGNpZSIsCi0JCQkg ICAgICAgcGNpZSk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdp c3RlciBpbnRlcnJ1cHRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlwY2llLT5pcnEgPSBwbGF0 Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChwY2llLT5pcnEgPCAwKQorCQlyZXR1cm4gcGNp ZS0+aXJxOwogCiAJcGNpZS0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X2Zyb21fb2Zfbm9k ZShkZXYsIGRldi0+b2Zfbm9kZSwKIAkJCQkJCSAgICAgICAicmVzZXQtZ3Bpb3MiLCAwLApAQCAt MTY2MywxMSArMTY2MSwxNCBAQCBzdGF0aWMgaW50IGFkdmtfcGNpZV9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQogCQlyZXR1cm4gcmV0OwogCX0KIAorCWlycV9zZXRfY2hhaW5l ZF9oYW5kbGVyX2FuZF9kYXRhKHBjaWUtPmlycSwgYWR2a19wY2llX2lycV9oYW5kbGVyLCBwY2ll KTsKKwogCWJyaWRnZS0+c3lzZGF0YSA9IHBjaWU7CiAJYnJpZGdlLT5vcHMgPSAmYWR2a19wY2ll X29wczsKIAogCXJldCA9IHBjaV9ob3N0X3Byb2JlKGJyaWRnZSk7CiAJaWYgKHJldCA8IDApIHsK KwkJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2RhdGEocGNpZS0+aXJxLCBOVUxMLCBOVUxM KTsKIAkJYWR2a19wY2llX3JlbW92ZV9tc2lfaXJxX2RvbWFpbihwY2llKTsKIAkJYWR2a19wY2ll X3JlbW92ZV9pcnFfZG9tYWluKHBjaWUpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTcxNSw2ICsxNzE2 LDkgQEAgc3RhdGljIGludCBhZHZrX3BjaWVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCiAJYWR2a193cml0ZWwocGNpZSwgUENJRV9JU1IxX0FMTF9NQVNLLCBQQ0lFX0lTUjFf UkVHKTsKIAlhZHZrX3dyaXRlbChwY2llLCBQQ0lFX0lSUV9BTExfTUFTSywgSE9TVF9DVFJMX0lO VF9TVEFUVVNfUkVHKTsKIAorCS8qIFJlbW92ZSBJUlEgaGFuZGxlciAqLworCWlycV9zZXRfY2hh aW5lZF9oYW5kbGVyX2FuZF9kYXRhKHBjaWUtPmlycSwgTlVMTCwgTlVMTCk7CisKIAkvKiBSZW1v dmUgSVJRIGRvbWFpbnMgKi8KIAlhZHZrX3BjaWVfcmVtb3ZlX21zaV9pcnFfZG9tYWluKHBjaWUp OwogCWFkdmtfcGNpZV9yZW1vdmVfaXJxX2RvbWFpbihwY2llKTsKLS0gCjIuMzQuMQoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK