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 68105C433EF for ; Mon, 21 Mar 2022 10:49:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346487AbiCUKuv (ORCPT ); Mon, 21 Mar 2022 06:50:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59862 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346422AbiCUKuo (ORCPT ); Mon, 21 Mar 2022 06:50:44 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 705C51EC5B; Mon, 21 Mar 2022 03:49:18 -0700 (PDT) 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 03C3561380; Mon, 21 Mar 2022 10:49:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5C9B9C340F8; Mon, 21 Mar 2022 10:49:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1647859757; bh=rcPzakiRhLn0L4CaRIfnK5+mNrh3wUEKLdQNYv52Jcg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DPW0dQplLspNs2oGVSbHdBwI3GPXabPkkS8z8bLAG3jFTtNOQfW1PSgtO8YsGvEwG Str8c8dOEpPAMY2d0RZbqht7RH+I1e1/0s4Uuli3xIN+d4Y17FDxHlQIveh9HbOFFd XmcbOsZq7XQQR7js/+4/P3GL6vcTCmgEJh4BcioynzACwOgDPrygpH0CBviNeSyzp+ v49zmt7glOVNzgggHKzlKhJ8LA2P5Tu4x6aX9luLky932KvN5mZF1VApRJyI7h9par 6QSSTY8R+qRBXSgPmEEr49VeCa3W7Hc/0TclLCjBrS57h5nkU/3hWFIM25+o6pN5ro Wy44spP+zmpdg== Received: from sofa.misterjones.org ([185.219.108.64] helo=why.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nWFb9-00FvJp-6f; Mon, 21 Mar 2022 10:49:15 +0000 From: Marc Zyngier To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org Cc: Rob Herring , Toan Le , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Bjorn Helgaas , =?UTF-8?q?St=C3=A9phane=20Graber?= , dann frazier , kernel-team@android.com, stable@vger.kernel.org Subject: [PATCH v2 1/2] PCI: xgene: Revert "PCI: xgene: Use inbound resources for setup" Date: Mon, 21 Mar 2022 10:48:42 +0000 Message-Id: <20220321104843.949645-2-maz@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220321104843.949645-1-maz@kernel.org> References: <20220321104843.949645-1-maz@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, robh@kernel.org, toan@os.amperecomputing.com, lorenzo.pieralisi@arm.com, kw@linux.com, bhelgaas@google.com, stgraber@ubuntu.com, dann.frazier@canonical.com, kernel-team@android.com, stable@vger.kernel.org X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 6dce5aa59e0b ("PCI: xgene: Use inbound resources for setup") killed PCIe on my XGene-1 box (a Mustang board). The machine itself is still alive, but half of its storage (over NVMe) is gone, and the NVMe driver just times out. Note that this machine boots with a device tree provided by the UEFI firmware (2016 vintage), which could well be non conformant with the spec, hence the breakage. With the patch reverted, the box boots 5.17-rc8 with flying colors. Cc: Rob Herring Cc: Toan Le Cc: Lorenzo Pieralisi Cc: Krzysztof Wilczyński Cc: Bjorn Helgaas Cc: Stéphane Graber Cc: dann frazier Cc: stable@vger.kernel.org Signed-off-by: Marc Zyngier Fixes: 6dce5aa59e0b ("PCI: xgene: Use inbound resources for setup") Link: https://lore.kernel.org/all/Yf2wTLjmcRj+AbDv@xps13.dannf --- drivers/pci/controller/pci-xgene.c | 33 ++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/drivers/pci/controller/pci-xgene.c b/drivers/pci/controller/pci-xgene.c index 0d5acbfc7143..aa41ceaf031f 100644 --- a/drivers/pci/controller/pci-xgene.c +++ b/drivers/pci/controller/pci-xgene.c @@ -479,28 +479,27 @@ static int xgene_pcie_select_ib_reg(u8 *ib_reg_mask, u64 size) } static void xgene_pcie_setup_ib_reg(struct xgene_pcie *port, - struct resource_entry *entry, - u8 *ib_reg_mask) + struct of_pci_range *range, u8 *ib_reg_mask) { void __iomem *cfg_base = port->cfg_base; struct device *dev = port->dev; void __iomem *bar_addr; u32 pim_reg; - u64 cpu_addr = entry->res->start; - u64 pci_addr = cpu_addr - entry->offset; - u64 size = resource_size(entry->res); + u64 cpu_addr = range->cpu_addr; + u64 pci_addr = range->pci_addr; + u64 size = range->size; u64 mask = ~(size - 1) | EN_REG; u32 flags = PCI_BASE_ADDRESS_MEM_TYPE_64; u32 bar_low; int region; - region = xgene_pcie_select_ib_reg(ib_reg_mask, size); + region = xgene_pcie_select_ib_reg(ib_reg_mask, range->size); if (region < 0) { dev_warn(dev, "invalid pcie dma-range config\n"); return; } - if (entry->res->flags & IORESOURCE_PREFETCH) + if (range->flags & IORESOURCE_PREFETCH) flags |= PCI_BASE_ADDRESS_MEM_PREFETCH; bar_low = pcie_bar_low_val((u32)cpu_addr, flags); @@ -531,13 +530,25 @@ static void xgene_pcie_setup_ib_reg(struct xgene_pcie *port, static int xgene_pcie_parse_map_dma_ranges(struct xgene_pcie *port) { - struct pci_host_bridge *bridge = pci_host_bridge_from_priv(port); - struct resource_entry *entry; + struct device_node *np = port->node; + struct of_pci_range range; + struct of_pci_range_parser parser; + struct device *dev = port->dev; u8 ib_reg_mask = 0; - resource_list_for_each_entry(entry, &bridge->dma_ranges) - xgene_pcie_setup_ib_reg(port, entry, &ib_reg_mask); + if (of_pci_dma_range_parser_init(&parser, np)) { + dev_err(dev, "missing dma-ranges property\n"); + return -EINVAL; + } + + /* Get the dma-ranges from DT */ + for_each_of_pci_range(&parser, &range) { + u64 end = range.cpu_addr + range.size - 1; + dev_dbg(dev, "0x%08x 0x%016llx..0x%016llx -> 0x%016llx\n", + range.flags, range.cpu_addr, end, range.pci_addr); + xgene_pcie_setup_ib_reg(port, &range, &ib_reg_mask); + } return 0; } -- 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 71A9BC433FE for ; Mon, 21 Mar 2022 10:50:43 +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=l5Ysh0v4W/KavaADI+SkrJmiNefUoqhVdOU701Zotj4=; b=Zy3FAHwIT4sj+B +Cf/IaoSM5IclAaxEsc72KuI2fK0XClvwUDjOqqWLB77VohvYahKJtJnWm8nmrhoxHBRaMunlQLHk HiOVpXhuE/gMxMKWcfi/bZAY8tsGg81rEwgi0hCRuMs8+kkObWrfhoY5JmqD8AH2OL1+f43f8l530 CXbzxZI730QKrsCCsbIlr8W2ILKoN646w5+SKeAOl4ElUqyvS0WpuA58a/BcHAgu4zs332HsMXa28 sJRl36SID1RXTwmxjhttIZ1vJ/RuFhCq3UtQ6HkL9D9fj9Kotp5dJxRrmoK/HuB5PW4KvO0fZ7S8V ivpynvyoRUoQAFJ1/SFA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nWFbU-007MeU-9G; Mon, 21 Mar 2022 10:49:36 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nWFbC-007MXF-Jp for linux-arm-kernel@lists.infradead.org; Mon, 21 Mar 2022 10:49:20 +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 A27136130E; Mon, 21 Mar 2022 10:49:17 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5C9B9C340F8; Mon, 21 Mar 2022 10:49:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1647859757; bh=rcPzakiRhLn0L4CaRIfnK5+mNrh3wUEKLdQNYv52Jcg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DPW0dQplLspNs2oGVSbHdBwI3GPXabPkkS8z8bLAG3jFTtNOQfW1PSgtO8YsGvEwG Str8c8dOEpPAMY2d0RZbqht7RH+I1e1/0s4Uuli3xIN+d4Y17FDxHlQIveh9HbOFFd XmcbOsZq7XQQR7js/+4/P3GL6vcTCmgEJh4BcioynzACwOgDPrygpH0CBviNeSyzp+ v49zmt7glOVNzgggHKzlKhJ8LA2P5Tu4x6aX9luLky932KvN5mZF1VApRJyI7h9par 6QSSTY8R+qRBXSgPmEEr49VeCa3W7Hc/0TclLCjBrS57h5nkU/3hWFIM25+o6pN5ro Wy44spP+zmpdg== Received: from sofa.misterjones.org ([185.219.108.64] helo=why.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nWFb9-00FvJp-6f; Mon, 21 Mar 2022 10:49:15 +0000 From: Marc Zyngier To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org Cc: Rob Herring , Toan Le , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Bjorn Helgaas , =?UTF-8?q?St=C3=A9phane=20Graber?= , dann frazier , kernel-team@android.com, stable@vger.kernel.org Subject: [PATCH v2 1/2] PCI: xgene: Revert "PCI: xgene: Use inbound resources for setup" Date: Mon, 21 Mar 2022 10:48:42 +0000 Message-Id: <20220321104843.949645-2-maz@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220321104843.949645-1-maz@kernel.org> References: <20220321104843.949645-1-maz@kernel.org> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, robh@kernel.org, toan@os.amperecomputing.com, lorenzo.pieralisi@arm.com, kw@linux.com, bhelgaas@google.com, stgraber@ubuntu.com, dann.frazier@canonical.com, kernel-team@android.com, stable@vger.kernel.org X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220321_034918_813348_F59A43F5 X-CRM114-Status: GOOD ( 18.46 ) 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 Q29tbWl0IDZkY2U1YWE1OWUwYiAoIlBDSTogeGdlbmU6IFVzZSBpbmJvdW5kIHJlc291cmNlcyBm b3Igc2V0dXAiKQpraWxsZWQgUENJZSBvbiBteSBYR2VuZS0xIGJveCAoYSBNdXN0YW5nIGJvYXJk KS4gVGhlIG1hY2hpbmUgaXRzZWxmCmlzIHN0aWxsIGFsaXZlLCBidXQgaGFsZiBvZiBpdHMgc3Rv cmFnZSAob3ZlciBOVk1lKSBpcyBnb25lLCBhbmQgdGhlCk5WTWUgZHJpdmVyIGp1c3QgdGltZXMg b3V0LgoKTm90ZSB0aGF0IHRoaXMgbWFjaGluZSBib290cyB3aXRoIGEgZGV2aWNlIHRyZWUgcHJv dmlkZWQgYnkgdGhlClVFRkkgZmlybXdhcmUgKDIwMTYgdmludGFnZSksIHdoaWNoIGNvdWxkIHdl bGwgYmUgbm9uIGNvbmZvcm1hbnQKd2l0aCB0aGUgc3BlYywgaGVuY2UgdGhlIGJyZWFrYWdlLgoK V2l0aCB0aGUgcGF0Y2ggcmV2ZXJ0ZWQsIHRoZSBib3ggYm9vdHMgNS4xNy1yYzggd2l0aCBmbHlp bmcgY29sb3JzLgoKQ2M6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+CkNjOiBUb2FuIExl IDx0b2FuQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+CkNjOiBMb3JlbnpvIFBpZXJhbGlzaSA8bG9y ZW56by5waWVyYWxpc2lAYXJtLmNvbT4KQ2M6IEtyenlzenRvZiBXaWxjennFhHNraSA8a3dAbGlu dXguY29tPgpDYzogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4KQ2M6IFN0w6lw aGFuZSBHcmFiZXIgPHN0Z3JhYmVyQHVidW50dS5jb20+CkNjOiBkYW5uIGZyYXppZXIgPGRhbm4u ZnJhemllckBjYW5vbmljYWwuY29tPgpDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZwpTaWduZWQt b2ZmLWJ5OiBNYXJjIFp5bmdpZXIgPG1hekBrZXJuZWwub3JnPgpGaXhlczogNmRjZTVhYTU5ZTBi ICgiUENJOiB4Z2VuZTogVXNlIGluYm91bmQgcmVzb3VyY2VzIGZvciBzZXR1cCIpCkxpbms6IGh0 dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC9ZZjJ3VExqbWNSaitBYkR2QHhwczEzLmRhbm5mCi0t LQogZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2kteGdlbmUuYyB8IDMzICsrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDExIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLXhnZW5l LmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS14Z2VuZS5jCmluZGV4IDBkNWFjYmZjNzE0 My4uYWE0MWNlYWYwMzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS14 Z2VuZS5jCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLXhnZW5lLmMKQEAgLTQ3OSwy OCArNDc5LDI3IEBAIHN0YXRpYyBpbnQgeGdlbmVfcGNpZV9zZWxlY3RfaWJfcmVnKHU4ICppYl9y ZWdfbWFzaywgdTY0IHNpemUpCiB9CiAKIHN0YXRpYyB2b2lkIHhnZW5lX3BjaWVfc2V0dXBfaWJf cmVnKHN0cnVjdCB4Z2VuZV9wY2llICpwb3J0LAotCQkJCSAgICBzdHJ1Y3QgcmVzb3VyY2VfZW50 cnkgKmVudHJ5LAotCQkJCSAgICB1OCAqaWJfcmVnX21hc2spCisJCQkJICAgIHN0cnVjdCBvZl9w Y2lfcmFuZ2UgKnJhbmdlLCB1OCAqaWJfcmVnX21hc2spCiB7CiAJdm9pZCBfX2lvbWVtICpjZmdf YmFzZSA9IHBvcnQtPmNmZ19iYXNlOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQtPmRldjsK IAl2b2lkIF9faW9tZW0gKmJhcl9hZGRyOwogCXUzMiBwaW1fcmVnOwotCXU2NCBjcHVfYWRkciA9 IGVudHJ5LT5yZXMtPnN0YXJ0OwotCXU2NCBwY2lfYWRkciA9IGNwdV9hZGRyIC0gZW50cnktPm9m ZnNldDsKLQl1NjQgc2l6ZSA9IHJlc291cmNlX3NpemUoZW50cnktPnJlcyk7CisJdTY0IGNwdV9h ZGRyID0gcmFuZ2UtPmNwdV9hZGRyOworCXU2NCBwY2lfYWRkciA9IHJhbmdlLT5wY2lfYWRkcjsK Kwl1NjQgc2l6ZSA9IHJhbmdlLT5zaXplOwogCXU2NCBtYXNrID0gfihzaXplIC0gMSkgfCBFTl9S RUc7CiAJdTMyIGZsYWdzID0gUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDsKIAl1MzIgYmFy X2xvdzsKIAlpbnQgcmVnaW9uOwogCi0JcmVnaW9uID0geGdlbmVfcGNpZV9zZWxlY3RfaWJfcmVn KGliX3JlZ19tYXNrLCBzaXplKTsKKwlyZWdpb24gPSB4Z2VuZV9wY2llX3NlbGVjdF9pYl9yZWco aWJfcmVnX21hc2ssIHJhbmdlLT5zaXplKTsKIAlpZiAocmVnaW9uIDwgMCkgewogCQlkZXZfd2Fy bihkZXYsICJpbnZhbGlkIHBjaWUgZG1hLXJhbmdlIGNvbmZpZ1xuIik7CiAJCXJldHVybjsKIAl9 CiAKLQlpZiAoZW50cnktPnJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKQorCWlmIChy YW5nZS0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKQogCQlmbGFncyB8PSBQQ0lfQkFTRV9B RERSRVNTX01FTV9QUkVGRVRDSDsKIAogCWJhcl9sb3cgPSBwY2llX2Jhcl9sb3dfdmFsKCh1MzIp Y3B1X2FkZHIsIGZsYWdzKTsKQEAgLTUzMSwxMyArNTMwLDI1IEBAIHN0YXRpYyB2b2lkIHhnZW5l X3BjaWVfc2V0dXBfaWJfcmVnKHN0cnVjdCB4Z2VuZV9wY2llICpwb3J0LAogCiBzdGF0aWMgaW50 IHhnZW5lX3BjaWVfcGFyc2VfbWFwX2RtYV9yYW5nZXMoc3RydWN0IHhnZW5lX3BjaWUgKnBvcnQp CiB7Ci0Jc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJpZGdlID0gcGNpX2hvc3RfYnJpZGdlX2Zy b21fcHJpdihwb3J0KTsKLQlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnAgPSBwb3J0LT5ub2RlOworCXN0cnVjdCBvZl9wY2lfcmFuZ2UgcmFuZ2U7 CisJc3RydWN0IG9mX3BjaV9yYW5nZV9wYXJzZXIgcGFyc2VyOworCXN0cnVjdCBkZXZpY2UgKmRl diA9IHBvcnQtPmRldjsKIAl1OCBpYl9yZWdfbWFzayA9IDA7CiAKLQlyZXNvdXJjZV9saXN0X2Zv cl9lYWNoX2VudHJ5KGVudHJ5LCAmYnJpZGdlLT5kbWFfcmFuZ2VzKQotCQl4Z2VuZV9wY2llX3Nl dHVwX2liX3JlZyhwb3J0LCBlbnRyeSwgJmliX3JlZ19tYXNrKTsKKwlpZiAob2ZfcGNpX2RtYV9y YW5nZV9wYXJzZXJfaW5pdCgmcGFyc2VyLCBucCkpIHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5n IGRtYS1yYW5nZXMgcHJvcGVydHlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBH ZXQgdGhlIGRtYS1yYW5nZXMgZnJvbSBEVCAqLworCWZvcl9lYWNoX29mX3BjaV9yYW5nZSgmcGFy c2VyLCAmcmFuZ2UpIHsKKwkJdTY0IGVuZCA9IHJhbmdlLmNwdV9hZGRyICsgcmFuZ2Uuc2l6ZSAt IDE7CiAKKwkJZGV2X2RiZyhkZXYsICIweCUwOHggMHglMDE2bGx4Li4weCUwMTZsbHggLT4gMHgl MDE2bGx4XG4iLAorCQkJcmFuZ2UuZmxhZ3MsIHJhbmdlLmNwdV9hZGRyLCBlbmQsIHJhbmdlLnBj aV9hZGRyKTsKKwkJeGdlbmVfcGNpZV9zZXR1cF9pYl9yZWcocG9ydCwgJnJhbmdlLCAmaWJfcmVn X21hc2spOworCX0KIAlyZXR1cm4gMDsKIH0KIAotLSAKMi4zNC4xCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5n IGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=