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=-19.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,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 132EEC433ED for ; Thu, 6 May 2021 15:33:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E71646109E for ; Thu, 6 May 2021 15:33:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235754AbhEFPeB (ORCPT ); Thu, 6 May 2021 11:34:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:45974 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235477AbhEFPds (ORCPT ); Thu, 6 May 2021 11:33:48 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5AEF5613F6; Thu, 6 May 2021 15:32:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315169; bh=yN1GVDsVClOczJBW/hcMrhTyF36UkgV7hMJV2qJoxrY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pxrXFrmgOLLG5cl31a3HZDuTj2XGD0N78K9/16eUsDSmLqb6edR911/rRpLPEtCKA NUdpDhPM0L4hVdUuTHkelRXUtS0myrC7wECtiYkKeKmZZwLJLGKQYMK/5qOIisBNKh 49hoh9odMpOUA6GnACS1dKV4kx50V4eDtoBo8wpSb1rxpT/fvESvS/zXQYlgdZpo9j AdVS62Rug9qBYXPZ2YzDcKcyuE7+7UHSmF2wJLBrjRE6KHOCU+Ul7VNl+SBby66YQP ellsp8wawVYmHN1+oySrX4HBSZox+iQ8y0NbOYFUaZ3AUEkg+T1efLtbRehf/zbSC9 m8tpKEYfSeKrg== Received: by pali.im (Postfix) id 120E5BF9; Thu, 6 May 2021 17:32:49 +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 17/42] PCI: aardvark: Fix support for MSI interrupts Date: Thu, 6 May 2021 17:31:28 +0200 Message-Id: <20210506153153.30454-18-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 MSI domain callback .alloc (implemented by advk_msi_irq_domain_alloc() function) should return zero on success. Returning non-zero value indicates failure. Fix return value of this function as in many cases it now returns failure while allocating IRQs. Aardvark hardware supports Multi-MSI and MSI_FLAG_MULTI_PCI_MSI is already set. But when allocating MSI interrupt numbers for Multi-MSI, they need to be properly aligned, otherwise endpoint devices send MSI interrupt with incorrect numbers. Fix this issue by using function bitmap_find_free_region() instead of bitmap_find_next_zero_area(). To ensure that aligned MSI interrupt numbers are used by endpoint devices, we cannot use Linux virtual irq numbers (as they are random and not properly aligned). So use hwirq numbers allocated by the function bitmap_find_free_region(), which are aligned. This needs an update in advk_msi_irq_compose_msi_msg() and advk_pcie_handle_msi() functions to do proper mapping between Linux virtual irq numbers and hwirq MSI inner domain numbers. Also the whole 16-bit MSI number is stored in the PCIE_MSI_PAYLOAD_REG register, not only lower 8 bits. Fix reading content of this register. This change fixes receiving MSI interrupts on Armada 3720 boards and allows using NVMe disks which use Multi-MSI feature with 3 interrupts. Without this change, NVMe disks just freeze booting Linux on Armada 3720 boards as linux nvme-core.c driver is waiting 60s for an interrupt. Signed-off-by: Pali Rohár Reviewed-by: Marek Behún Cc: stable@vger.kernel.org # f21a8b1b6837 ("PCI: aardvark: Move to MSI handling using generic MSI support") --- drivers/pci/controller/pci-aardvark.c | 32 ++++++++++++++++----------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index 366d7480bc1b..498810c00b6d 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -118,6 +118,7 @@ #define PCIE_MSI_STATUS_REG (CONTROL_BASE_ADDR + 0x58) #define PCIE_MSI_MASK_REG (CONTROL_BASE_ADDR + 0x5C) #define PCIE_MSI_PAYLOAD_REG (CONTROL_BASE_ADDR + 0x9C) +#define PCIE_MSI_DATA_MASK GENMASK(15, 0) /* LMI registers base address and register offsets */ #define LMI_BASE_ADDR 0x6000 @@ -861,7 +862,7 @@ static void advk_msi_irq_compose_msi_msg(struct irq_data *data, msg->address_lo = lower_32_bits(msi_msg); msg->address_hi = upper_32_bits(msi_msg); - msg->data = data->irq; + msg->data = data->hwirq; } static int advk_msi_set_affinity(struct irq_data *irq_data, @@ -878,15 +879,11 @@ static int advk_msi_irq_domain_alloc(struct irq_domain *domain, int hwirq, i; mutex_lock(&pcie->msi_used_lock); - hwirq = bitmap_find_next_zero_area(pcie->msi_used, MSI_IRQ_NUM, - 0, nr_irqs, 0); - if (hwirq >= MSI_IRQ_NUM) { - mutex_unlock(&pcie->msi_used_lock); - return -ENOSPC; - } - - bitmap_set(pcie->msi_used, hwirq, nr_irqs); + hwirq = bitmap_find_free_region(pcie->msi_used, MSI_IRQ_NUM, + order_base_2(nr_irqs)); mutex_unlock(&pcie->msi_used_lock); + if (hwirq < 0) + return -ENOSPC; for (i = 0; i < nr_irqs; i++) irq_domain_set_info(domain, virq + i, hwirq + i, @@ -894,7 +891,7 @@ static int advk_msi_irq_domain_alloc(struct irq_domain *domain, domain->host_data, handle_simple_irq, NULL, NULL); - return hwirq; + return 0; } static void advk_msi_irq_domain_free(struct irq_domain *domain, @@ -904,7 +901,7 @@ static void advk_msi_irq_domain_free(struct irq_domain *domain, struct advk_pcie *pcie = domain->host_data; mutex_lock(&pcie->msi_used_lock); - bitmap_clear(pcie->msi_used, d->hwirq, nr_irqs); + bitmap_release_region(pcie->msi_used, d->hwirq, order_base_2(nr_irqs)); mutex_unlock(&pcie->msi_used_lock); } @@ -1048,6 +1045,7 @@ static void advk_pcie_handle_msi(struct advk_pcie *pcie) { u32 msi_val, msi_mask, msi_status, msi_idx; u16 msi_data; + int virq; msi_mask = advk_readl(pcie, PCIE_MSI_MASK_REG); msi_val = advk_readl(pcie, PCIE_MSI_STATUS_REG); @@ -1057,9 +1055,17 @@ static void advk_pcie_handle_msi(struct advk_pcie *pcie) if (!(BIT(msi_idx) & msi_status)) continue; + /* + * msi_idx contains bits [4:0] of the msi_data and msi_data + * contains 16bit MSI interrupt number from MSI inner domain + */ advk_writel(pcie, BIT(msi_idx), PCIE_MSI_STATUS_REG); - msi_data = advk_readl(pcie, PCIE_MSI_PAYLOAD_REG) & 0xFF; - generic_handle_irq(msi_data); + msi_data = advk_readl(pcie, PCIE_MSI_PAYLOAD_REG) & PCIE_MSI_DATA_MASK; + virq = irq_find_mapping(pcie->msi_inner_domain, msi_data); + if (virq) + generic_handle_irq(virq); + else + dev_err(&pcie->pdev->dev, "unexpected MSI 0x%04hx\n", msi_data); } advk_writel(pcie, PCIE_ISR0_MSI_INT_PENDING, -- 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=-17.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, 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 23580C433ED for ; Thu, 6 May 2021 15:42:23 +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 7FEAE6101A for ; Thu, 6 May 2021 15:42:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7FEAE6101A 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=h61LW2N4Ohb5BqMspQTMFToWKI98Cm33tQqwh4wxMZ8=; b=SMNWfpfV7bdDHIS/H984+S0ZD 5HR4bDIXo5Kipc/yYtBxqGZ4eNK1pzyFRaU/CXgabw3dWagUW4GX28dD4VuYX2hpcsmgVbCAsgKe4 S2IMCn1967qzYgqGRd02Kp21tK6yxNPONXpFDcZWMcbjGiAbe3/SrQ6W11E1J5QhRlWsOLCm4XbCA Fhmd145Is4cRvHB6kDCo12HMI2qGI58S64olxgPbu7PmzQi/p25Ca7twcFOyX1Mdl9LxkHOd8G//l rjyidr7CH4JKraR2H25nyjKGJFlHEAuN7zoNKMeNl2xnYIGtsMlTRaPT5hIbvz4Anx+OxTbgoJveU 9aMS+lZSA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1leg77-004cid-46; Thu, 06 May 2021 15:40:34 +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 1lefzn-004a5x-8M for linux-arm-kernel@desiato.infradead.org; Thu, 06 May 2021 15:32:59 +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=WCXCSMlLju+RVMt1dqMxOrA+GhhtjeZ2xOqd4EhD97U=; b=mZ5OExcgnrfzJVBI2es8H/TVOO MFEKwO1nXv8hg6v1PO8DCbnyhjh3plAbsuZQemVls5slmcfuOrQtDcjg5YWSxoZEHbQDp8vBOj0ug 1mdmeU0PRYp0Hwljqa+hXIYE9i7UZfgHljrjM0u2O46bbZVuOmm2zjJZMxqbVHUj+wKDX0Pn/ETtN P/sQwGiRP36EsEkOhzc3f+bYtxaxrFmofJl0U1O00poApI+/miDcKAjv1UCcfM4KnpA1PMk6lOqLz e7fs1ScQWtEM0fTXyQyOp7cbiqUU1CRl7B9xLW0nctfnmWcweoiaixSr6vxfGoPm8FNLLAj0fSXTw UoUl+B6Q==; Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lefzh-0069jp-1F for linux-arm-kernel@lists.infradead.org; Thu, 06 May 2021 15:32:57 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5AEF5613F6; Thu, 6 May 2021 15:32:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315169; bh=yN1GVDsVClOczJBW/hcMrhTyF36UkgV7hMJV2qJoxrY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pxrXFrmgOLLG5cl31a3HZDuTj2XGD0N78K9/16eUsDSmLqb6edR911/rRpLPEtCKA NUdpDhPM0L4hVdUuTHkelRXUtS0myrC7wECtiYkKeKmZZwLJLGKQYMK/5qOIisBNKh 49hoh9odMpOUA6GnACS1dKV4kx50V4eDtoBo8wpSb1rxpT/fvESvS/zXQYlgdZpo9j AdVS62Rug9qBYXPZ2YzDcKcyuE7+7UHSmF2wJLBrjRE6KHOCU+Ul7VNl+SBby66YQP ellsp8wawVYmHN1+oySrX4HBSZox+iQ8y0NbOYFUaZ3AUEkg+T1efLtbRehf/zbSC9 m8tpKEYfSeKrg== Received: by pali.im (Postfix) id 120E5BF9; Thu, 6 May 2021 17:32:49 +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 17/42] PCI: aardvark: Fix support for MSI interrupts Date: Thu, 6 May 2021 17:31:28 +0200 Message-Id: <20210506153153.30454-18-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_083253_220800_C5D7229F X-CRM114-Status: GOOD ( 19.11 ) 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 TVNJIGRvbWFpbiBjYWxsYmFjayAuYWxsb2MgKGltcGxlbWVudGVkIGJ5IGFkdmtfbXNpX2lycV9k b21haW5fYWxsb2MoKQpmdW5jdGlvbikgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MuIFJl dHVybmluZyBub24temVybyB2YWx1ZSBpbmRpY2F0ZXMKZmFpbHVyZS4gRml4IHJldHVybiB2YWx1 ZSBvZiB0aGlzIGZ1bmN0aW9uIGFzIGluIG1hbnkgY2FzZXMgaXQgbm93IHJldHVybnMKZmFpbHVy ZSB3aGlsZSBhbGxvY2F0aW5nIElSUXMuCgpBYXJkdmFyayBoYXJkd2FyZSBzdXBwb3J0cyBNdWx0 aS1NU0kgYW5kIE1TSV9GTEFHX01VTFRJX1BDSV9NU0kgaXMgYWxyZWFkeQpzZXQuIEJ1dCB3aGVu IGFsbG9jYXRpbmcgTVNJIGludGVycnVwdCBudW1iZXJzIGZvciBNdWx0aS1NU0ksIHRoZXkgbmVl ZCB0bwpiZSBwcm9wZXJseSBhbGlnbmVkLCBvdGhlcndpc2UgZW5kcG9pbnQgZGV2aWNlcyBzZW5k IE1TSSBpbnRlcnJ1cHQgd2l0aAppbmNvcnJlY3QgbnVtYmVycy4gRml4IHRoaXMgaXNzdWUgYnkg dXNpbmcgZnVuY3Rpb24gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24oKQppbnN0ZWFkIG9mIGJpdG1h cF9maW5kX25leHRfemVyb19hcmVhKCkuCgpUbyBlbnN1cmUgdGhhdCBhbGlnbmVkIE1TSSBpbnRl cnJ1cHQgbnVtYmVycyBhcmUgdXNlZCBieSBlbmRwb2ludCBkZXZpY2VzLAp3ZSBjYW5ub3QgdXNl IExpbnV4IHZpcnR1YWwgaXJxIG51bWJlcnMgKGFzIHRoZXkgYXJlIHJhbmRvbSBhbmQgbm90CnBy b3Blcmx5IGFsaWduZWQpLiBTbyB1c2UgaHdpcnEgbnVtYmVycyBhbGxvY2F0ZWQgYnkgdGhlIGZ1 bmN0aW9uCmJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKCksIHdoaWNoIGFyZSBhbGlnbmVkLiBUaGlz IG5lZWRzIGFuIHVwZGF0ZSBpbgphZHZrX21zaV9pcnFfY29tcG9zZV9tc2lfbXNnKCkgYW5kIGFk dmtfcGNpZV9oYW5kbGVfbXNpKCkgZnVuY3Rpb25zIHRvIGRvCnByb3BlciBtYXBwaW5nIGJldHdl ZW4gTGludXggdmlydHVhbCBpcnEgbnVtYmVycyBhbmQgaHdpcnEgTVNJIGlubmVyIGRvbWFpbgpu dW1iZXJzLgoKQWxzbyB0aGUgd2hvbGUgMTYtYml0IE1TSSBudW1iZXIgaXMgc3RvcmVkIGluIHRo ZSBQQ0lFX01TSV9QQVlMT0FEX1JFRwpyZWdpc3Rlciwgbm90IG9ubHkgbG93ZXIgOCBiaXRzLiBG aXggcmVhZGluZyBjb250ZW50IG9mIHRoaXMgcmVnaXN0ZXIuCgpUaGlzIGNoYW5nZSBmaXhlcyBy ZWNlaXZpbmcgTVNJIGludGVycnVwdHMgb24gQXJtYWRhIDM3MjAgYm9hcmRzIGFuZCBhbGxvd3MK dXNpbmcgTlZNZSBkaXNrcyB3aGljaCB1c2UgTXVsdGktTVNJIGZlYXR1cmUgd2l0aCAzIGludGVy cnVwdHMuCgpXaXRob3V0IHRoaXMgY2hhbmdlLCBOVk1lIGRpc2tzIGp1c3QgZnJlZXplIGJvb3Rp bmcgTGludXggb24gQXJtYWRhIDM3MjAKYm9hcmRzIGFzIGxpbnV4IG52bWUtY29yZS5jIGRyaXZl ciBpcyB3YWl0aW5nIDYwcyBmb3IgYW4gaW50ZXJydXB0LgoKU2lnbmVkLW9mZi1ieTogUGFsaSBS b2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KUmV2aWV3ZWQtYnk6IE1hcmVrIEJlaMO6biA8a2FiZWxA a2VybmVsLm9yZz4KQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcgIyBmMjFhOGIxYjY4MzcgKCJQ Q0k6IGFhcmR2YXJrOiBNb3ZlIHRvIE1TSSBoYW5kbGluZyB1c2luZyBnZW5lcmljIE1TSSBzdXBw b3J0IikKLS0tCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFyay5jIHwgMzIgKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygr KSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9w Y2ktYWFyZHZhcmsuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKaW5k ZXggMzY2ZDc0ODBiYzFiLi40OTg4MTBjMDBiNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2Nv bnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2kt YWFyZHZhcmsuYwpAQCAtMTE4LDYgKzExOCw3IEBACiAjZGVmaW5lIFBDSUVfTVNJX1NUQVRVU19S RUcJCQkoQ09OVFJPTF9CQVNFX0FERFIgKyAweDU4KQogI2RlZmluZSBQQ0lFX01TSV9NQVNLX1JF RwkJCShDT05UUk9MX0JBU0VfQUREUiArIDB4NUMpCiAjZGVmaW5lIFBDSUVfTVNJX1BBWUxPQURf UkVHCQkJKENPTlRST0xfQkFTRV9BRERSICsgMHg5QykKKyNkZWZpbmUgICAgIFBDSUVfTVNJX0RB VEFfTUFTSwkJCUdFTk1BU0soMTUsIDApCiAKIC8qIExNSSByZWdpc3RlcnMgYmFzZSBhZGRyZXNz IGFuZCByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIExNSV9CQVNFX0FERFIJCQkJMHg2MDAw CkBAIC04NjEsNyArODYyLDcgQEAgc3RhdGljIHZvaWQgYWR2a19tc2lfaXJxX2NvbXBvc2VfbXNp X21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsCiAKIAltc2ctPmFkZHJlc3NfbG8gPSBsb3dlcl8z Ml9iaXRzKG1zaV9tc2cpOwogCW1zZy0+YWRkcmVzc19oaSA9IHVwcGVyXzMyX2JpdHMobXNpX21z Zyk7Ci0JbXNnLT5kYXRhID0gZGF0YS0+aXJxOworCW1zZy0+ZGF0YSA9IGRhdGEtPmh3aXJxOwog fQogCiBzdGF0aWMgaW50IGFkdmtfbXNpX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmly cV9kYXRhLApAQCAtODc4LDE1ICs4NzksMTEgQEAgc3RhdGljIGludCBhZHZrX21zaV9pcnFfZG9t YWluX2FsbG9jKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCiAJaW50IGh3aXJxLCBpOwogCiAJ bXV0ZXhfbG9jaygmcGNpZS0+bXNpX3VzZWRfbG9jayk7Ci0JaHdpcnEgPSBiaXRtYXBfZmluZF9u ZXh0X3plcm9fYXJlYShwY2llLT5tc2lfdXNlZCwgTVNJX0lSUV9OVU0sCi0JCQkJCSAgIDAsIG5y X2lycXMsIDApOwotCWlmIChod2lycSA+PSBNU0lfSVJRX05VTSkgewotCQltdXRleF91bmxvY2so JnBjaWUtPm1zaV91c2VkX2xvY2spOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQliaXRtYXBf c2V0KHBjaWUtPm1zaV91c2VkLCBod2lycSwgbnJfaXJxcyk7CisJaHdpcnEgPSBiaXRtYXBfZmlu ZF9mcmVlX3JlZ2lvbihwY2llLT5tc2lfdXNlZCwgTVNJX0lSUV9OVU0sCisJCQkJCW9yZGVyX2Jh c2VfMihucl9pcnFzKSk7CiAJbXV0ZXhfdW5sb2NrKCZwY2llLT5tc2lfdXNlZF9sb2NrKTsKKwlp ZiAoaHdpcnEgPCAwKQorCQlyZXR1cm4gLUVOT1NQQzsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9p cnFzOyBpKyspCiAJCWlycV9kb21haW5fc2V0X2luZm8oZG9tYWluLCB2aXJxICsgaSwgaHdpcnEg KyBpLApAQCAtODk0LDcgKzg5MSw3IEBAIHN0YXRpYyBpbnQgYWR2a19tc2lfaXJxX2RvbWFpbl9h bGxvYyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAogCQkJCSAgICBkb21haW4tPmhvc3RfZGF0 YSwgaGFuZGxlX3NpbXBsZV9pcnEsCiAJCQkJICAgIE5VTEwsIE5VTEwpOwogCi0JcmV0dXJuIGh3 aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBhZHZrX21zaV9pcnFfZG9tYWluX2Zy ZWUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKQEAgLTkwNCw3ICs5MDEsNyBAQCBzdGF0aWMg dm9pZCBhZHZrX21zaV9pcnFfZG9tYWluX2ZyZWUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwK IAlzdHJ1Y3QgYWR2a19wY2llICpwY2llID0gZG9tYWluLT5ob3N0X2RhdGE7CiAKIAltdXRleF9s b2NrKCZwY2llLT5tc2lfdXNlZF9sb2NrKTsKLQliaXRtYXBfY2xlYXIocGNpZS0+bXNpX3VzZWQs IGQtPmh3aXJxLCBucl9pcnFzKTsKKwliaXRtYXBfcmVsZWFzZV9yZWdpb24ocGNpZS0+bXNpX3Vz ZWQsIGQtPmh3aXJxLCBvcmRlcl9iYXNlXzIobnJfaXJxcykpOwogCW11dGV4X3VubG9jaygmcGNp ZS0+bXNpX3VzZWRfbG9jayk7CiB9CiAKQEAgLTEwNDgsNiArMTA0NSw3IEBAIHN0YXRpYyB2b2lk IGFkdmtfcGNpZV9oYW5kbGVfbXNpKHN0cnVjdCBhZHZrX3BjaWUgKnBjaWUpCiB7CiAJdTMyIG1z aV92YWwsIG1zaV9tYXNrLCBtc2lfc3RhdHVzLCBtc2lfaWR4OwogCXUxNiBtc2lfZGF0YTsKKwlp bnQgdmlycTsKIAogCW1zaV9tYXNrID0gYWR2a19yZWFkbChwY2llLCBQQ0lFX01TSV9NQVNLX1JF Ryk7CiAJbXNpX3ZhbCA9IGFkdmtfcmVhZGwocGNpZSwgUENJRV9NU0lfU1RBVFVTX1JFRyk7CkBA IC0xMDU3LDkgKzEwNTUsMTcgQEAgc3RhdGljIHZvaWQgYWR2a19wY2llX2hhbmRsZV9tc2koc3Ry dWN0IGFkdmtfcGNpZSAqcGNpZSkKIAkJaWYgKCEoQklUKG1zaV9pZHgpICYgbXNpX3N0YXR1cykp CiAJCQljb250aW51ZTsKIAorCQkvKgorCQkgKiBtc2lfaWR4IGNvbnRhaW5zIGJpdHMgWzQ6MF0g b2YgdGhlIG1zaV9kYXRhIGFuZCBtc2lfZGF0YQorCQkgKiBjb250YWlucyAxNmJpdCBNU0kgaW50 ZXJydXB0IG51bWJlciBmcm9tIE1TSSBpbm5lciBkb21haW4KKwkJICovCiAJCWFkdmtfd3JpdGVs KHBjaWUsIEJJVChtc2lfaWR4KSwgUENJRV9NU0lfU1RBVFVTX1JFRyk7Ci0JCW1zaV9kYXRhID0g YWR2a19yZWFkbChwY2llLCBQQ0lFX01TSV9QQVlMT0FEX1JFRykgJiAweEZGOwotCQlnZW5lcmlj X2hhbmRsZV9pcnEobXNpX2RhdGEpOworCQltc2lfZGF0YSA9IGFkdmtfcmVhZGwocGNpZSwgUENJ RV9NU0lfUEFZTE9BRF9SRUcpICYgUENJRV9NU0lfREFUQV9NQVNLOworCQl2aXJxID0gaXJxX2Zp bmRfbWFwcGluZyhwY2llLT5tc2lfaW5uZXJfZG9tYWluLCBtc2lfZGF0YSk7CisJCWlmICh2aXJx KQorCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOworCQllbHNlCisJCQlkZXZfZXJyKCZwY2ll LT5wZGV2LT5kZXYsICJ1bmV4cGVjdGVkIE1TSSAweCUwNGh4XG4iLCBtc2lfZGF0YSk7CiAJfQog CiAJYWR2a193cml0ZWwocGNpZSwgUENJRV9JU1IwX01TSV9JTlRfUEVORElORywKLS0gCjIuMjAu MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFy bS1rZXJuZWwK