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 0D9CEC00140 for ; Thu, 18 Aug 2022 13:51:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244570AbiHRNvv (ORCPT ); Thu, 18 Aug 2022 09:51:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47038 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244720AbiHRNvv (ORCPT ); Thu, 18 Aug 2022 09:51:51 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AC7006110B for ; Thu, 18 Aug 2022 06:51:49 -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 ams.source.kernel.org (Postfix) with ESMTPS id 5AE4CB82195 for ; Thu, 18 Aug 2022 13:51:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A39BC4347C; Thu, 18 Aug 2022 13:51:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1660830707; bh=G+gw4VfrgeslPZXeo4NP+QRBVZNGHXSb8Gk3ybhCeNI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PCe6mgF8NVsLo4WYzxxNSY0CYnqJa4nUXwrnntOyCfVtluPUbEjhmpGnjX2IBuYa5 lDRXerOBflsgFVaPAFLZ0XFIPTB/W5AKNOAKaanT5131FSp4YDOOQG0K7sWzq2SYnr 04a8tWUDUvTRHldJNk0UgtVTs0+s6hiejZUL+nYGJNFKV5+BS4S8eX+Vlnm8LzpqQX c73prcmgPcPMozScCGRpMiRVjynpsZRCfuj1QsMuGBDSC25M3v/aLNy7dV3fzDoHQq xZu4T4oMV+KPcm09/qxup5cPFnI72SnrRLzX9IZoOBH4d2iwGYM9C3E2lplSCzYoI2 39+dJnulE7a3w== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Lorenzo Pieralisi , Bjorn Helgaas , Lukas Wunner Cc: =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH 01/11] PCI: pciehp: Enable DLLSC interrupt only if supported Date: Thu, 18 Aug 2022 15:51:30 +0200 Message-Id: <20220818135140.5996-2-kabel@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220818135140.5996-1-kabel@kernel.org> References: <20220818135140.5996-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 Don't enable Data Link Layer State Changed interrupt if it isn't supported. Data Link Layer Link Active Reporting Capable bit in Link Capabilities register indicates if Data Link Layer State Changed Enable is supported. Although Lukas Wunner says [1] According to PCIe r6.0, sec. 7.5.3.6, "For a hot-plug capable Downstream Port [...], this bit must be hardwired to 1b." the reason we want this is because of the pci-bridge-emul driver, which emulates a bridge, but does not support asynchronous operations (since implementing them is unneeded and would require massive changes to the whole driver). Therefore enabling DLLSC unconditionally makes the corresponding bit set only in the emulated configuration space of the pci-bridge-emul driver, which - results in confusing information when dumping the config space (it says that the interrupt is not supported but enabled), which may confuse developers when debugging PCIe issues, - may cause bugs in the future if someone adds code that checks whether DLLSC is enabled and then waits for the interrupt. [1] https://www.spinics.net/lists/linux-pci/msg124727.html Signed-off-by: Pali Rohár Signed-off-by: Marek Behún --- Changes since batch 5: - changed commit message, previously we wrote that the change is needed to fix a bug where kernel was waiting for an event which did not come. This turns out to be false. See https://lore.kernel.org/linux-pci/20220818142243.4c046c59@dellmb/T/#u --- drivers/pci/hotplug/pciehp_hpc.c | 30 +++++++++++++++++++++++------- drivers/pci/hotplug/pnv_php.c | 13 +++++++++---- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 040ae076ec0e..373bb396fe22 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c @@ -788,6 +788,7 @@ static int pciehp_poll(void *data) static void pcie_enable_notification(struct controller *ctrl) { u16 cmd, mask; + u32 link_cap; /* * TBD: Power fault detected software notification support. @@ -800,12 +801,17 @@ static void pcie_enable_notification(struct controller *ctrl) * next power fault detected interrupt was notified again. */ + pcie_capability_read_dword(ctrl_dev(ctrl), PCI_EXP_LNKCAP, &link_cap); + /* - * Always enable link events: thus link-up and link-down shall - * always be treated as hotplug and unplug respectively. Enable - * presence detect only if Attention Button is not present. + * Enable link events if their support is indicated in Link Capability + * register: thus link-up and link-down shall always be treated as + * hotplug and unplug respectively. Enable presence detect only if + * Attention Button is not present. */ - cmd = PCI_EXP_SLTCTL_DLLSCE; + cmd = 0; + if (link_cap & PCI_EXP_LNKCAP_DLLLARC) + cmd |= PCI_EXP_SLTCTL_DLLSCE; if (ATTN_BUTTN(ctrl)) cmd |= PCI_EXP_SLTCTL_ABPE; else @@ -844,9 +850,14 @@ void pcie_clear_hotplug_events(struct controller *ctrl) void pcie_enable_interrupt(struct controller *ctrl) { + u32 link_cap; u16 mask; - mask = PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_DLLSCE; + pcie_capability_read_dword(ctrl_dev(ctrl), PCI_EXP_LNKCAP, &link_cap); + + mask = PCI_EXP_SLTCTL_HPIE; + if (link_cap & PCI_EXP_LNKCAP_DLLLARC) + mask |= PCI_EXP_SLTCTL_DLLSCE; pcie_write_cmd(ctrl, mask, mask); } @@ -904,19 +915,24 @@ int pciehp_reset_slot(struct hotplug_slot *hotplug_slot, bool probe) struct controller *ctrl = to_ctrl(hotplug_slot); struct pci_dev *pdev = ctrl_dev(ctrl); u16 stat_mask = 0, ctrl_mask = 0; + u32 link_cap; int rc; if (probe) return 0; + pcie_capability_read_dword(pdev, PCI_EXP_LNKCAP, &link_cap); + down_write_nested(&ctrl->reset_lock, ctrl->depth); if (!ATTN_BUTTN(ctrl)) { ctrl_mask |= PCI_EXP_SLTCTL_PDCE; stat_mask |= PCI_EXP_SLTSTA_PDC; } - ctrl_mask |= PCI_EXP_SLTCTL_DLLSCE; - stat_mask |= PCI_EXP_SLTSTA_DLLSC; + if (link_cap & PCI_EXP_LNKCAP_DLLLARC) { + ctrl_mask |= PCI_EXP_SLTCTL_DLLSCE; + stat_mask |= PCI_EXP_SLTSTA_DLLSC; + } pcie_write_cmd(ctrl, 0, ctrl_mask); ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, diff --git a/drivers/pci/hotplug/pnv_php.c b/drivers/pci/hotplug/pnv_php.c index 881d420637bf..118b514f66b9 100644 --- a/drivers/pci/hotplug/pnv_php.c +++ b/drivers/pci/hotplug/pnv_php.c @@ -841,6 +841,7 @@ static void pnv_php_init_irq(struct pnv_php_slot *php_slot, int irq) struct pci_dev *pdev = php_slot->pdev; u32 broken_pdc = 0; u16 sts, ctrl; + u32 link_cap; int ret; /* Allocate workqueue */ @@ -874,17 +875,21 @@ static void pnv_php_init_irq(struct pnv_php_slot *php_slot, int irq) return; } + pcie_capability_read_dword(pdev, PCI_EXP_LNKCAP, &link_cap); + /* Enable the interrupts */ pcie_capability_read_word(pdev, PCI_EXP_SLTCTL, &ctrl); if (php_slot->flags & PNV_PHP_FLAG_BROKEN_PDC) { ctrl &= ~PCI_EXP_SLTCTL_PDCE; - ctrl |= (PCI_EXP_SLTCTL_HPIE | - PCI_EXP_SLTCTL_DLLSCE); + ctrl |= PCI_EXP_SLTCTL_HPIE; } else { ctrl |= (PCI_EXP_SLTCTL_HPIE | - PCI_EXP_SLTCTL_PDCE | - PCI_EXP_SLTCTL_DLLSCE); + PCI_EXP_SLTCTL_PDCE); } + if (link_cap & PCI_EXP_LNKCAP_DLLLARC) + ctrl |= PCI_EXP_SLTCTL_DLLSCE; + else + ctrl &= ~PCI_EXP_SLTCTL_DLLSCE; pcie_capability_write_word(pdev, PCI_EXP_SLTCTL, ctrl); /* The interrupt is initialized successfully when @irq is valid */ -- 2.35.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 36414C00140 for ; Thu, 18 Aug 2022 13:59:36 +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=15X5uk7riJNXWSlJB9+BJ4faE/pczzykHzI0wx4me3w=; b=Ieef7K+KAYHJaa NnpNno7VvNw46xYJJ9O2VuhYedDbO+QQaB1BUO873DGlcVgoeFagOhboREinaQjpF9Vnf7TKohlZR hJMykOqw60sgrgCBopJYoEqiEc10xky1SafsXf/NC8IPzfRf4UbG+cRYYdCS0x4OlDqPlPsQkmatA ZkSVOS1VHYBlYFiPD7CwZAou7+bYffqM/NJ8H+MkjF3MCeyOWEC06xru6SjpMmOkyaCuXsODUga2C AQGy9JPY6ueMDfABqNeik93hpW4Hf3t4B0duSK8poPhHzoE58aRxPQSlS1/MIJnj4n4DHfw7fTGLZ hrp17E7rfu7ezRkKnTSw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oOg2L-005mcw-Cw; Thu, 18 Aug 2022 13:58:18 +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 1oOfw4-005iM6-Lp for linux-arm-kernel@lists.infradead.org; Thu, 18 Aug 2022 13:51:52 +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 B9572616ED; Thu, 18 Aug 2022 13:51:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A39BC4347C; Thu, 18 Aug 2022 13:51:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1660830707; bh=G+gw4VfrgeslPZXeo4NP+QRBVZNGHXSb8Gk3ybhCeNI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PCe6mgF8NVsLo4WYzxxNSY0CYnqJa4nUXwrnntOyCfVtluPUbEjhmpGnjX2IBuYa5 lDRXerOBflsgFVaPAFLZ0XFIPTB/W5AKNOAKaanT5131FSp4YDOOQG0K7sWzq2SYnr 04a8tWUDUvTRHldJNk0UgtVTs0+s6hiejZUL+nYGJNFKV5+BS4S8eX+Vlnm8LzpqQX c73prcmgPcPMozScCGRpMiRVjynpsZRCfuj1QsMuGBDSC25M3v/aLNy7dV3fzDoHQq xZu4T4oMV+KPcm09/qxup5cPFnI72SnrRLzX9IZoOBH4d2iwGYM9C3E2lplSCzYoI2 39+dJnulE7a3w== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Lorenzo Pieralisi , Bjorn Helgaas , Lukas Wunner Cc: =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH 01/11] PCI: pciehp: Enable DLLSC interrupt only if supported Date: Thu, 18 Aug 2022 15:51:30 +0200 Message-Id: <20220818135140.5996-2-kabel@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220818135140.5996-1-kabel@kernel.org> References: <20220818135140.5996-1-kabel@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220818_065148_869770_8ED2E831 X-CRM114-Status: GOOD ( 20.08 ) 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 RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KCkRvbid0IGVuYWJsZSBEYXRhIExp bmsgTGF5ZXIgU3RhdGUgQ2hhbmdlZCBpbnRlcnJ1cHQgaWYgaXQgaXNuJ3QKc3VwcG9ydGVkLgoK RGF0YSBMaW5rIExheWVyIExpbmsgQWN0aXZlIFJlcG9ydGluZyBDYXBhYmxlIGJpdCBpbiBMaW5r IENhcGFiaWxpdGllcwpyZWdpc3RlciBpbmRpY2F0ZXMgaWYgRGF0YSBMaW5rIExheWVyIFN0YXRl IENoYW5nZWQgRW5hYmxlIGlzIHN1cHBvcnRlZC4KCkFsdGhvdWdoIEx1a2FzIFd1bm5lciBzYXlz IFsxXQogIEFjY29yZGluZyB0byBQQ0llIHI2LjAsIHNlYy4gNy41LjMuNiwgIkZvciBhIGhvdC1w bHVnIGNhcGFibGUKICBEb3duc3RyZWFtIFBvcnQgWy4uLl0sIHRoaXMgYml0IG11c3QgYmUgaGFy ZHdpcmVkIHRvIDFiLiIKdGhlIHJlYXNvbiB3ZSB3YW50IHRoaXMgaXMgYmVjYXVzZSBvZiB0aGUg cGNpLWJyaWRnZS1lbXVsIGRyaXZlciwgd2hpY2gKZW11bGF0ZXMgYSBicmlkZ2UsIGJ1dCBkb2Vz IG5vdCBzdXBwb3J0IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIChzaW5jZQppbXBsZW1lbnRpbmcg dGhlbSBpcyB1bm5lZWRlZCBhbmQgd291bGQgcmVxdWlyZSBtYXNzaXZlIGNoYW5nZXMgdG8gdGhl Cndob2xlIGRyaXZlcikuIFRoZXJlZm9yZSBlbmFibGluZyBETExTQyB1bmNvbmRpdGlvbmFsbHkg bWFrZXMgdGhlCmNvcnJlc3BvbmRpbmcgYml0IHNldCBvbmx5IGluIHRoZSBlbXVsYXRlZCBjb25m aWd1cmF0aW9uIHNwYWNlIG9mIHRoZQpwY2ktYnJpZGdlLWVtdWwgZHJpdmVyLCB3aGljaAotIHJl c3VsdHMgaW4gY29uZnVzaW5nIGluZm9ybWF0aW9uIHdoZW4gZHVtcGluZyB0aGUgY29uZmlnIHNw YWNlIChpdAogIHNheXMgdGhhdCB0aGUgaW50ZXJydXB0IGlzIG5vdCBzdXBwb3J0ZWQgYnV0IGVu YWJsZWQpLCB3aGljaCBtYXkKICBjb25mdXNlIGRldmVsb3BlcnMgd2hlbiBkZWJ1Z2dpbmcgUENJ ZSBpc3N1ZXMsCi0gbWF5IGNhdXNlIGJ1Z3MgaW4gdGhlIGZ1dHVyZSBpZiBzb21lb25lIGFkZHMg Y29kZSB0aGF0IGNoZWNrcyB3aGV0aGVyCiAgRExMU0MgaXMgZW5hYmxlZCBhbmQgdGhlbiB3YWl0 cyBmb3IgdGhlIGludGVycnVwdC4KClsxXSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9s aW51eC1wY2kvbXNnMTI0NzI3Lmh0bWwKClNpZ25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxwYWxp QGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IE1hcmVrIEJlaMO6biA8a2FiZWxAa2VybmVsLm9y Zz4KLS0tCkNoYW5nZXMgc2luY2UgYmF0Y2ggNToKLSBjaGFuZ2VkIGNvbW1pdCBtZXNzYWdlLCBw cmV2aW91c2x5IHdlIHdyb3RlIHRoYXQgdGhlIGNoYW5nZSBpcyBuZWVkZWQKICB0byBmaXggYSBi dWcgd2hlcmUga2VybmVsIHdhcyB3YWl0aW5nIGZvciBhbiBldmVudCB3aGljaCBkaWQgbm90CiAg Y29tZS4gVGhpcyB0dXJucyBvdXQgdG8gYmUgZmFsc2UuIFNlZQogIGh0dHBzOi8vbG9yZS5rZXJu ZWwub3JnL2xpbnV4LXBjaS8yMDIyMDgxODE0MjI0My40YzA0NmM1OUBkZWxsbWIvVC8jdQotLS0K IGRyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jIHwgMzAgKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0tCiBkcml2ZXJzL3BjaS9ob3RwbHVnL3Budl9waHAuYyAgICB8IDEzICsrKysr KysrKy0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMgYi9kcml2 ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwppbmRleCAwNDBhZTA3NmVjMGUuLjM3M2JiMzk2 ZmUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKKysrIGIv ZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKQEAgLTc4OCw2ICs3ODgsNyBAQCBzdGF0 aWMgaW50IHBjaWVocF9wb2xsKHZvaWQgKmRhdGEpCiBzdGF0aWMgdm9pZCBwY2llX2VuYWJsZV9u b3RpZmljYXRpb24oc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7CiAJdTE2IGNtZCwgbWFzazsK Kwl1MzIgbGlua19jYXA7CiAKIAkvKgogCSAqIFRCRDogUG93ZXIgZmF1bHQgZGV0ZWN0ZWQgc29m dHdhcmUgbm90aWZpY2F0aW9uIHN1cHBvcnQuCkBAIC04MDAsMTIgKzgwMSwxNyBAQCBzdGF0aWMg dm9pZCBwY2llX2VuYWJsZV9ub3RpZmljYXRpb24oc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiAJ ICogbmV4dCBwb3dlciBmYXVsdCBkZXRlY3RlZCBpbnRlcnJ1cHQgd2FzIG5vdGlmaWVkIGFnYWlu LgogCSAqLwogCisJcGNpZV9jYXBhYmlsaXR5X3JlYWRfZHdvcmQoY3RybF9kZXYoY3RybCksIFBD SV9FWFBfTE5LQ0FQLCAmbGlua19jYXApOworCiAJLyoKLQkgKiBBbHdheXMgZW5hYmxlIGxpbmsg ZXZlbnRzOiB0aHVzIGxpbmstdXAgYW5kIGxpbmstZG93biBzaGFsbAotCSAqIGFsd2F5cyBiZSB0 cmVhdGVkIGFzIGhvdHBsdWcgYW5kIHVucGx1ZyByZXNwZWN0aXZlbHkuIEVuYWJsZQotCSAqIHBy ZXNlbmNlIGRldGVjdCBvbmx5IGlmIEF0dGVudGlvbiBCdXR0b24gaXMgbm90IHByZXNlbnQuCisJ ICogRW5hYmxlIGxpbmsgZXZlbnRzIGlmIHRoZWlyIHN1cHBvcnQgaXMgaW5kaWNhdGVkIGluIExp bmsgQ2FwYWJpbGl0eQorCSAqIHJlZ2lzdGVyOiB0aHVzIGxpbmstdXAgYW5kIGxpbmstZG93biBz aGFsbCBhbHdheXMgYmUgdHJlYXRlZCBhcworCSAqIGhvdHBsdWcgYW5kIHVucGx1ZyByZXNwZWN0 aXZlbHkuIEVuYWJsZSBwcmVzZW5jZSBkZXRlY3Qgb25seSBpZgorCSAqIEF0dGVudGlvbiBCdXR0 b24gaXMgbm90IHByZXNlbnQuCiAJICovCi0JY21kID0gUENJX0VYUF9TTFRDVExfRExMU0NFOwor CWNtZCA9IDA7CisJaWYgKGxpbmtfY2FwICYgUENJX0VYUF9MTktDQVBfRExMTEFSQykKKwkJY21k IHw9IFBDSV9FWFBfU0xUQ1RMX0RMTFNDRTsKIAlpZiAoQVRUTl9CVVRUTihjdHJsKSkKIAkJY21k IHw9IFBDSV9FWFBfU0xUQ1RMX0FCUEU7CiAJZWxzZQpAQCAtODQ0LDkgKzg1MCwxNCBAQCB2b2lk IHBjaWVfY2xlYXJfaG90cGx1Z19ldmVudHMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiAKIHZv aWQgcGNpZV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogeworCXUz MiBsaW5rX2NhcDsKIAl1MTYgbWFzazsKIAotCW1hc2sgPSBQQ0lfRVhQX1NMVENUTF9IUElFIHwg UENJX0VYUF9TTFRDVExfRExMU0NFOworCXBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKGN0cmxf ZGV2KGN0cmwpLCBQQ0lfRVhQX0xOS0NBUCwgJmxpbmtfY2FwKTsKKworCW1hc2sgPSBQQ0lfRVhQ X1NMVENUTF9IUElFOworCWlmIChsaW5rX2NhcCAmIFBDSV9FWFBfTE5LQ0FQX0RMTExBUkMpCisJ CW1hc2sgfD0gUENJX0VYUF9TTFRDVExfRExMU0NFOwogCXBjaWVfd3JpdGVfY21kKGN0cmwsIG1h c2ssIG1hc2spOwogfQogCkBAIC05MDQsMTkgKzkxNSwyNCBAQCBpbnQgcGNpZWhwX3Jlc2V0X3Ns b3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBib29sIHByb2JlKQogCXN0cnVj dCBjb250cm9sbGVyICpjdHJsID0gdG9fY3RybChob3RwbHVnX3Nsb3QpOwogCXN0cnVjdCBwY2lf ZGV2ICpwZGV2ID0gY3RybF9kZXYoY3RybCk7CiAJdTE2IHN0YXRfbWFzayA9IDAsIGN0cmxfbWFz ayA9IDA7CisJdTMyIGxpbmtfY2FwOwogCWludCByYzsKIAogCWlmIChwcm9iZSkKIAkJcmV0dXJu IDA7CiAKKwlwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0xOS0NBUCwg JmxpbmtfY2FwKTsKKwogCWRvd25fd3JpdGVfbmVzdGVkKCZjdHJsLT5yZXNldF9sb2NrLCBjdHJs LT5kZXB0aCk7CiAKIAlpZiAoIUFUVE5fQlVUVE4oY3RybCkpIHsKIAkJY3RybF9tYXNrIHw9IFBD SV9FWFBfU0xUQ1RMX1BEQ0U7CiAJCXN0YXRfbWFzayB8PSBQQ0lfRVhQX1NMVFNUQV9QREM7CiAJ fQotCWN0cmxfbWFzayB8PSBQQ0lfRVhQX1NMVENUTF9ETExTQ0U7Ci0Jc3RhdF9tYXNrIHw9IFBD SV9FWFBfU0xUU1RBX0RMTFNDOworCWlmIChsaW5rX2NhcCAmIFBDSV9FWFBfTE5LQ0FQX0RMTExB UkMpIHsKKwkJY3RybF9tYXNrIHw9IFBDSV9FWFBfU0xUQ1RMX0RMTFNDRTsKKwkJc3RhdF9tYXNr IHw9IFBDSV9FWFBfU0xUU1RBX0RMTFNDOworCX0KIAogCXBjaWVfd3JpdGVfY21kKGN0cmwsIDAs IGN0cmxfbWFzayk7CiAJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQg JXhcbiIsIF9fZnVuY19fLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wbnZfcGhw LmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3Budl9waHAuYwppbmRleCA4ODFkNDIwNjM3YmYuLjEx OGI1MTRmNjZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wbnZfcGhwLmMKKysr IGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wbnZfcGhwLmMKQEAgLTg0MSw2ICs4NDEsNyBAQCBzdGF0 aWMgdm9pZCBwbnZfcGhwX2luaXRfaXJxKHN0cnVjdCBwbnZfcGhwX3Nsb3QgKnBocF9zbG90LCBp bnQgaXJxKQogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcGhwX3Nsb3QtPnBkZXY7CiAJdTMyIGJy b2tlbl9wZGMgPSAwOwogCXUxNiBzdHMsIGN0cmw7CisJdTMyIGxpbmtfY2FwOwogCWludCByZXQ7 CiAKIAkvKiBBbGxvY2F0ZSB3b3JrcXVldWUgKi8KQEAgLTg3NCwxNyArODc1LDIxIEBAIHN0YXRp YyB2b2lkIHBudl9waHBfaW5pdF9pcnEoc3RydWN0IHBudl9waHBfc2xvdCAqcGhwX3Nsb3QsIGlu dCBpcnEpCiAJCXJldHVybjsKIAl9CiAKKwlwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2 LCBQQ0lfRVhQX0xOS0NBUCwgJmxpbmtfY2FwKTsKKwogCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0 cyAqLwogCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocGRldiwgUENJX0VYUF9TTFRDVEwsICZj dHJsKTsKIAlpZiAocGhwX3Nsb3QtPmZsYWdzICYgUE5WX1BIUF9GTEFHX0JST0tFTl9QREMpIHsK IAkJY3RybCAmPSB+UENJX0VYUF9TTFRDVExfUERDRTsKLQkJY3RybCB8PSAoUENJX0VYUF9TTFRD VExfSFBJRSB8Ci0JCQkgUENJX0VYUF9TTFRDVExfRExMU0NFKTsKKwkJY3RybCB8PSBQQ0lfRVhQ X1NMVENUTF9IUElFOwogCX0gZWxzZSB7CiAJCWN0cmwgfD0gKFBDSV9FWFBfU0xUQ1RMX0hQSUUg fAotCQkJIFBDSV9FWFBfU0xUQ1RMX1BEQ0UgfAotCQkJIFBDSV9FWFBfU0xUQ1RMX0RMTFNDRSk7 CisJCQkgUENJX0VYUF9TTFRDVExfUERDRSk7CiAJfQorCWlmIChsaW5rX2NhcCAmIFBDSV9FWFBf TE5LQ0FQX0RMTExBUkMpCisJCWN0cmwgfD0gUENJX0VYUF9TTFRDVExfRExMU0NFOworCWVsc2UK KwkJY3RybCAmPSB+UENJX0VYUF9TTFRDVExfRExMU0NFOwogCXBjaWVfY2FwYWJpbGl0eV93cml0 ZV93b3JkKHBkZXYsIFBDSV9FWFBfU0xUQ1RMLCBjdHJsKTsKIAogCS8qIFRoZSBpbnRlcnJ1cHQg aXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5IHdoZW4gQGlycSBpcyB2YWxpZCAqLwotLSAKMi4z NS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo=