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 EE55FC433EF for ; Mon, 10 Jan 2022 01:51:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236941AbiAJBvC (ORCPT ); Sun, 9 Jan 2022 20:51:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59616 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238007AbiAJBux (ORCPT ); Sun, 9 Jan 2022 20:50:53 -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 480CDC06173F for ; Sun, 9 Jan 2022 17:50:53 -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 F0C4CB81118 for ; Mon, 10 Jan 2022 01:50:51 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 176DAC36AF5; Mon, 10 Jan 2022 01:50:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641779450; bh=9gC4Iic1F3vOT3DuRmFDXnltv+kJeBLWyewFbQl61KY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ay/JytZhZkAcXQLoKGNRQ+Twz7B/YXPqM+S4KLN5157monmyGMGVDn2cetFv8jtkS f0xjpsWgHtRDcoRMmBW9gygjGyJQhUngd3d4X7MZ7yoxhenieyLWZpvPmt+rbuGNbI AbDe2w63rAR9IhzpAURGLC5lEpuUS6lmnKR5+CEmxRHZKNcdU/gcTby3nJAT32pWij dGa04DxmD3bTkcn5nj0veEp2yOAyYY1e2bnh/cihIYymQaOh7MUxyY7qGecF/ZD3Oc 1rn0FebM1uaHLBx5U7IO/TZsn1KhEpgFjw0A3O713bv55RSZny6tfq6fd7nphIafs4 OAdru4epW04CQ== 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 13/23] PCI: aardvark: Add support for ERR interrupt on emulated bridge Date: Mon, 10 Jan 2022 02:50:08 +0100 Message-Id: <20220110015018.26359-14-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 ERR interrupt is triggered when corresponding bit is unmasked in both ISR0 and PCI_EXP_DEVCTL registers. Unmasking ERR bits in PCI_EXP_DEVCTL register is not enough. This means that currently the ERR interrupt is never triggered. Unmask ERR bits in ISR0 register at driver probe time. ERR interrupt is not triggered until ERR bits are unmasked also in PCI_EXP_DEVCTL register, which is done by AER driver. So it is safe to unconditionally unmask all ERR bits in aardvark probe. Aardvark HW sets PCI_ERR_ROOT_AER_IRQ to zero and when corresponding bits in ISR0 and PCI_EXP_DEVCTL are enabled, the HW triggers a generic interrupt on GIC. Chain this interrupt to PCIe interrupt 0 with generic_handle_domain_irq() to allow processing of ERR interrupts. Signed-off-by: Pali Rohár Signed-off-by: Marek Behún --- drivers/pci/controller/pci-aardvark.c | 35 ++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index a892f22510da..6fc6c3199954 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -99,6 +99,10 @@ #define PCIE_MSG_PM_PME_MASK BIT(7) #define PCIE_ISR0_MASK_REG (CONTROL_BASE_ADDR + 0x44) #define PCIE_ISR0_MSI_INT_PENDING BIT(24) +#define PCIE_ISR0_CORR_ERR BIT(11) +#define PCIE_ISR0_NFAT_ERR BIT(12) +#define PCIE_ISR0_FAT_ERR BIT(13) +#define PCIE_ISR0_ERR_MASK GENMASK(13, 11) #define PCIE_ISR0_INTX_ASSERT(val) BIT(16 + (val)) #define PCIE_ISR0_INTX_DEASSERT(val) BIT(20 + (val)) #define PCIE_ISR0_ALL_MASK GENMASK(31, 0) @@ -783,11 +787,15 @@ advk_pci_bridge_emul_base_conf_read(struct pci_bridge_emul *bridge, case PCI_INTERRUPT_LINE: { /* * From the whole 32bit register we support reading from HW only - * one bit: PCI_BRIDGE_CTL_BUS_RESET. + * two bits: PCI_BRIDGE_CTL_BUS_RESET and PCI_BRIDGE_CTL_SERR. * Other bits are retrieved only from emulated config buffer. */ __le32 *cfgspace = (__le32 *)&bridge->conf; u32 val = le32_to_cpu(cfgspace[PCI_INTERRUPT_LINE / 4]); + if (advk_readl(pcie, PCIE_ISR0_MASK_REG) & PCIE_ISR0_ERR_MASK) + val &= ~(PCI_BRIDGE_CTL_SERR << 16); + else + val |= PCI_BRIDGE_CTL_SERR << 16; if (advk_readl(pcie, PCIE_CORE_CTRL1_REG) & HOT_RESET_GEN) val |= PCI_BRIDGE_CTL_BUS_RESET << 16; else @@ -817,6 +825,19 @@ advk_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge, break; case PCI_INTERRUPT_LINE: + /* + * According to Figure 6-3: Pseudo Logic Diagram for Error + * Message Controls in PCIe base specification, SERR# Enable bit + * in Bridge Control register enable receiving of ERR_* messages + */ + if (mask & (PCI_BRIDGE_CTL_SERR << 16)) { + u32 val = advk_readl(pcie, PCIE_ISR0_MASK_REG); + if (new & (PCI_BRIDGE_CTL_SERR << 16)) + val &= ~PCIE_ISR0_ERR_MASK; + else + val |= PCIE_ISR0_ERR_MASK; + advk_writel(pcie, val, PCIE_ISR0_MASK_REG); + } if (mask & (PCI_BRIDGE_CTL_BUS_RESET << 16)) { u32 val = advk_readl(pcie, PCIE_CORE_CTRL1_REG); if (new & (PCI_BRIDGE_CTL_BUS_RESET << 16)) @@ -1462,6 +1483,18 @@ static void advk_pcie_handle_int(struct advk_pcie *pcie) isr1_mask = advk_readl(pcie, PCIE_ISR1_MASK_REG); isr1_status = isr1_val & ((~isr1_mask) & PCIE_ISR1_ALL_MASK); + /* Process ERR interrupt */ + if (isr0_status & PCIE_ISR0_ERR_MASK) { + advk_writel(pcie, PCIE_ISR0_ERR_MASK, PCIE_ISR0_REG); + + /* + * Aardvark HW returns zero for PCI_ERR_ROOT_AER_IRQ, so use + * PCIe interrupt 0 + */ + if (generic_handle_domain_irq(pcie->irq_domain, 0) == -EINVAL) + dev_err_ratelimited(&pcie->pdev->dev, "unhandled ERR IRQ\n"); + } + /* Process MSI interrupts */ if (isr0_status & PCIE_ISR0_MSI_INT_PENDING) advk_pcie_handle_msi(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 7DDD0C4332F for ; Mon, 10 Jan 2022 01:56:47 +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=MRWLFvdkmuq6rGWyMV5BzI2xFnLvDNUNxPB+Nj99ak4=; b=VUd+j2eTv3vDiD jgeNZKUdFxBzcQyX2wKrG2ou1t9PSi7G1mqwYa/+GwDbgmgxXkbszu2xj0rto6s41iC+T0oFqyq7c 1AZzV92CXCkthrT2DJMve0e0Nj99sWqASr+XvBZ3onKG868KHQ2W1teDMJEfHdpQfZd6WH8YsCqeU 4e3NklCwkI7WXPOztu3tnTAeNx+HT45oKyqFq77ULxE4I/dJFIDoD/A9yDnU+4+Obtj88Ekzf9p5t TOtWP9IssFjAfdNiDZTgnHm6bzox8D0CqIF1ifIH91lgZ4dbplxejQxrlSWPWVFuXWCHvc8SjV2W+ 6z1oaM6HSZ6koZFgxFvg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n6ju1-008oP6-CX; Mon, 10 Jan 2022 01:55:17 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n6jpl-008lk4-2k for linux-arm-kernel@lists.infradead.org; Mon, 10 Jan 2022 01:50:54 +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 ams.source.kernel.org (Postfix) with ESMTPS id CC903B81050; Mon, 10 Jan 2022 01:50:51 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 176DAC36AF5; Mon, 10 Jan 2022 01:50:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641779450; bh=9gC4Iic1F3vOT3DuRmFDXnltv+kJeBLWyewFbQl61KY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ay/JytZhZkAcXQLoKGNRQ+Twz7B/YXPqM+S4KLN5157monmyGMGVDn2cetFv8jtkS f0xjpsWgHtRDcoRMmBW9gygjGyJQhUngd3d4X7MZ7yoxhenieyLWZpvPmt+rbuGNbI AbDe2w63rAR9IhzpAURGLC5lEpuUS6lmnKR5+CEmxRHZKNcdU/gcTby3nJAT32pWij dGa04DxmD3bTkcn5nj0veEp2yOAyYY1e2bnh/cihIYymQaOh7MUxyY7qGecF/ZD3Oc 1rn0FebM1uaHLBx5U7IO/TZsn1KhEpgFjw0A3O713bv55RSZny6tfq6fd7nphIafs4 OAdru4epW04CQ== 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 13/23] PCI: aardvark: Add support for ERR interrupt on emulated bridge Date: Mon, 10 Jan 2022 02:50:08 +0100 Message-Id: <20220110015018.26359-14-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_175053_435916_FA26FDDA X-CRM114-Status: GOOD ( 17.57 ) 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 RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KCkVSUiBpbnRlcnJ1cHQgaXMgdHJp Z2dlcmVkIHdoZW4gY29ycmVzcG9uZGluZyBiaXQgaXMgdW5tYXNrZWQgaW4gYm90aCBJU1IwCmFu ZCBQQ0lfRVhQX0RFVkNUTCByZWdpc3RlcnMuIFVubWFza2luZyBFUlIgYml0cyBpbiBQQ0lfRVhQ X0RFVkNUTCByZWdpc3RlcgppcyBub3QgZW5vdWdoLiBUaGlzIG1lYW5zIHRoYXQgY3VycmVudGx5 IHRoZSBFUlIgaW50ZXJydXB0IGlzIG5ldmVyCnRyaWdnZXJlZC4KClVubWFzayBFUlIgYml0cyBp biBJU1IwIHJlZ2lzdGVyIGF0IGRyaXZlciBwcm9iZSB0aW1lLiBFUlIgaW50ZXJydXB0IGlzIG5v dAp0cmlnZ2VyZWQgdW50aWwgRVJSIGJpdHMgYXJlIHVubWFza2VkIGFsc28gaW4gUENJX0VYUF9E RVZDVEwgcmVnaXN0ZXIsCndoaWNoIGlzIGRvbmUgYnkgQUVSIGRyaXZlci4gU28gaXQgaXMgc2Fm ZSB0byB1bmNvbmRpdGlvbmFsbHkgdW5tYXNrIGFsbApFUlIgYml0cyBpbiBhYXJkdmFyayBwcm9i ZS4KCkFhcmR2YXJrIEhXIHNldHMgUENJX0VSUl9ST09UX0FFUl9JUlEgdG8gemVybyBhbmQgd2hl biBjb3JyZXNwb25kaW5nIGJpdHMKaW4gSVNSMCBhbmQgUENJX0VYUF9ERVZDVEwgYXJlIGVuYWJs ZWQsIHRoZSBIVyB0cmlnZ2VycyBhIGdlbmVyaWMgaW50ZXJydXB0Cm9uIEdJQy4gQ2hhaW4gdGhp cyBpbnRlcnJ1cHQgdG8gUENJZSBpbnRlcnJ1cHQgMCB3aXRoCmdlbmVyaWNfaGFuZGxlX2RvbWFp bl9pcnEoKSB0byBhbGxvdyBwcm9jZXNzaW5nIG9mIEVSUiBpbnRlcnJ1cHRzLgoKU2lnbmVkLW9m Zi1ieTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KU2lnbmVkLW9mZi1ieTogTWFyZWsg QmVow7puIDxrYWJlbEBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNp LWFhcmR2YXJrLmMgfCAzNSArKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFu Z2VkLCAzNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv cGNpLWFhcmR2YXJrLmMKaW5kZXggYTg5MmYyMjUxMGRhLi42ZmM2YzMxOTk5NTQgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKKysrIGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYwpAQCAtOTksNiArOTksMTAgQEAKICNkZWZpbmUg UENJRV9NU0dfUE1fUE1FX01BU0sJCQlCSVQoNykKICNkZWZpbmUgUENJRV9JU1IwX01BU0tfUkVH CQkJKENPTlRST0xfQkFTRV9BRERSICsgMHg0NCkKICNkZWZpbmUgICAgIFBDSUVfSVNSMF9NU0lf SU5UX1BFTkRJTkcJCUJJVCgyNCkKKyNkZWZpbmUgICAgIFBDSUVfSVNSMF9DT1JSX0VSUgkJCUJJ VCgxMSkKKyNkZWZpbmUgICAgIFBDSUVfSVNSMF9ORkFUX0VSUgkJCUJJVCgxMikKKyNkZWZpbmUg ICAgIFBDSUVfSVNSMF9GQVRfRVJSCQkJQklUKDEzKQorI2RlZmluZSAgICAgUENJRV9JU1IwX0VS Ul9NQVNLCQkJR0VOTUFTSygxMywgMTEpCiAjZGVmaW5lICAgICBQQ0lFX0lTUjBfSU5UWF9BU1NF UlQodmFsKQkJQklUKDE2ICsgKHZhbCkpCiAjZGVmaW5lICAgICBQQ0lFX0lTUjBfSU5UWF9ERUFT U0VSVCh2YWwpCUJJVCgyMCArICh2YWwpKQogI2RlZmluZSAgICAgUENJRV9JU1IwX0FMTF9NQVNL CQkJR0VOTUFTSygzMSwgMCkKQEAgLTc4MywxMSArNzg3LDE1IEBAIGFkdmtfcGNpX2JyaWRnZV9l bXVsX2Jhc2VfY29uZl9yZWFkKHN0cnVjdCBwY2lfYnJpZGdlX2VtdWwgKmJyaWRnZSwKIAljYXNl IFBDSV9JTlRFUlJVUFRfTElORTogewogCQkvKgogCQkgKiBGcm9tIHRoZSB3aG9sZSAzMmJpdCBy ZWdpc3RlciB3ZSBzdXBwb3J0IHJlYWRpbmcgZnJvbSBIVyBvbmx5Ci0JCSAqIG9uZSBiaXQ6IFBD SV9CUklER0VfQ1RMX0JVU19SRVNFVC4KKwkJICogdHdvIGJpdHM6IFBDSV9CUklER0VfQ1RMX0JV U19SRVNFVCBhbmQgUENJX0JSSURHRV9DVExfU0VSUi4KIAkJICogT3RoZXIgYml0cyBhcmUgcmV0 cmlldmVkIG9ubHkgZnJvbSBlbXVsYXRlZCBjb25maWcgYnVmZmVyLgogCQkgKi8KIAkJX19sZTMy ICpjZmdzcGFjZSA9IChfX2xlMzIgKikmYnJpZGdlLT5jb25mOwogCQl1MzIgdmFsID0gbGUzMl90 b19jcHUoY2Znc3BhY2VbUENJX0lOVEVSUlVQVF9MSU5FIC8gNF0pOworCQlpZiAoYWR2a19yZWFk bChwY2llLCBQQ0lFX0lTUjBfTUFTS19SRUcpICYgUENJRV9JU1IwX0VSUl9NQVNLKQorCQkJdmFs ICY9IH4oUENJX0JSSURHRV9DVExfU0VSUiA8PCAxNik7CisJCWVsc2UKKwkJCXZhbCB8PSBQQ0lf QlJJREdFX0NUTF9TRVJSIDw8IDE2OwogCQlpZiAoYWR2a19yZWFkbChwY2llLCBQQ0lFX0NPUkVf Q1RSTDFfUkVHKSAmIEhPVF9SRVNFVF9HRU4pCiAJCQl2YWwgfD0gUENJX0JSSURHRV9DVExfQlVT X1JFU0VUIDw8IDE2OwogCQllbHNlCkBAIC04MTcsNiArODI1LDE5IEBAIGFkdmtfcGNpX2JyaWRn ZV9lbXVsX2Jhc2VfY29uZl93cml0ZShzdHJ1Y3QgcGNpX2JyaWRnZV9lbXVsICpicmlkZ2UsCiAJ CWJyZWFrOwogCiAJY2FzZSBQQ0lfSU5URVJSVVBUX0xJTkU6CisJCS8qCisJCSAqIEFjY29yZGlu ZyB0byBGaWd1cmUgNi0zOiBQc2V1ZG8gTG9naWMgRGlhZ3JhbSBmb3IgRXJyb3IKKwkJICogTWVz c2FnZSBDb250cm9scyBpbiBQQ0llIGJhc2Ugc3BlY2lmaWNhdGlvbiwgU0VSUiMgRW5hYmxlIGJp dAorCQkgKiBpbiBCcmlkZ2UgQ29udHJvbCByZWdpc3RlciBlbmFibGUgcmVjZWl2aW5nIG9mIEVS Ul8qIG1lc3NhZ2VzCisJCSAqLworCQlpZiAobWFzayAmIChQQ0lfQlJJREdFX0NUTF9TRVJSIDw8 IDE2KSkgeworCQkJdTMyIHZhbCA9IGFkdmtfcmVhZGwocGNpZSwgUENJRV9JU1IwX01BU0tfUkVH KTsKKwkJCWlmIChuZXcgJiAoUENJX0JSSURHRV9DVExfU0VSUiA8PCAxNikpCisJCQkJdmFsICY9 IH5QQ0lFX0lTUjBfRVJSX01BU0s7CisJCQllbHNlCisJCQkJdmFsIHw9IFBDSUVfSVNSMF9FUlJf TUFTSzsKKwkJCWFkdmtfd3JpdGVsKHBjaWUsIHZhbCwgUENJRV9JU1IwX01BU0tfUkVHKTsKKwkJ fQogCQlpZiAobWFzayAmIChQQ0lfQlJJREdFX0NUTF9CVVNfUkVTRVQgPDwgMTYpKSB7CiAJCQl1 MzIgdmFsID0gYWR2a19yZWFkbChwY2llLCBQQ0lFX0NPUkVfQ1RSTDFfUkVHKTsKIAkJCWlmIChu ZXcgJiAoUENJX0JSSURHRV9DVExfQlVTX1JFU0VUIDw8IDE2KSkKQEAgLTE0NjIsNiArMTQ4Mywx OCBAQCBzdGF0aWMgdm9pZCBhZHZrX3BjaWVfaGFuZGxlX2ludChzdHJ1Y3QgYWR2a19wY2llICpw Y2llKQogCWlzcjFfbWFzayA9IGFkdmtfcmVhZGwocGNpZSwgUENJRV9JU1IxX01BU0tfUkVHKTsK IAlpc3IxX3N0YXR1cyA9IGlzcjFfdmFsICYgKCh+aXNyMV9tYXNrKSAmIFBDSUVfSVNSMV9BTExf TUFTSyk7CiAKKwkvKiBQcm9jZXNzIEVSUiBpbnRlcnJ1cHQgKi8KKwlpZiAoaXNyMF9zdGF0dXMg JiBQQ0lFX0lTUjBfRVJSX01BU0spIHsKKwkJYWR2a193cml0ZWwocGNpZSwgUENJRV9JU1IwX0VS Ul9NQVNLLCBQQ0lFX0lTUjBfUkVHKTsKKworCQkvKgorCQkgKiBBYXJkdmFyayBIVyByZXR1cm5z IHplcm8gZm9yIFBDSV9FUlJfUk9PVF9BRVJfSVJRLCBzbyB1c2UKKwkJICogUENJZSBpbnRlcnJ1 cHQgMAorCQkgKi8KKwkJaWYgKGdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEocGNpZS0+aXJxX2Rv bWFpbiwgMCkgPT0gLUVJTlZBTCkKKwkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJnBjaWUtPnBkZXYt PmRldiwgInVuaGFuZGxlZCBFUlIgSVJRXG4iKTsKKwl9CisKIAkvKiBQcm9jZXNzIE1TSSBpbnRl cnJ1cHRzICovCiAJaWYgKGlzcjBfc3RhdHVzICYgUENJRV9JU1IwX01TSV9JTlRfUEVORElORykK IAkJYWR2a19wY2llX2hhbmRsZV9tc2kocGNpZSk7Ci0tIAoyLjM0LjEKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==