Received: by 2002:a05:6512:3d0e:0:0:0:0 with SMTP id d14csp54819lfv; Tue, 12 Apr 2022 17:04:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxeSCObaRGjd+l+CdqpioWi4zT5aG+apLLYAmXp0hH14QGah1EemBCngO8aYO7S5NdN4SY9 X-Received: by 2002:a17:902:e74d:b0:156:9d3c:4271 with SMTP id p13-20020a170902e74d00b001569d3c4271mr39562224plf.79.1649808248356; Tue, 12 Apr 2022 17:04:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649808248; cv=none; d=google.com; s=arc-20160816; b=wpPn6Z129vBEORFSBj3MhW34keVawzM7Ozfpjol1SdnKkxpMilVJpEUgdHKBxCVSIN O2ZhUhHW53nkSG+PMHVMJ/CdQqDGwnDOvAQSrEu6XQsV3STY5VNDuiPC7PXBCa/uT/WO Y5bTNDG22qH8XVTSVa3dziby9DtsbnJJzqW6MpcDvJAzlEklcg2okD+CsboKOszmu5FG 5qukAuRPwe5n2wOksW7pkAkPu/F8ZDCZjhMjSl49rimvrmiyNzl3AUsVHf1A+1kF8XNs PWA+DZIcpZkgNFbg8EYaHC/4H44epj61VwJlYwOBjVBaeU/06U4kvdX9SpuNH8v2RUjn iW3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ANpiLEIpQB28fO+QHg8+iklRaw8DdM5cr17szsFuL5I=; b=cKIeuk2PdkkUU5Eb39KqYkjQgfEczBcUkrfvxHAKc2RMwdpVNqvVN4jdwdjZlU3b/A YNb3ZauZx771EVqvaH+vl7od24SvxQak3zisg+WAcAffqBEVPEZbGuYv3tfAvXgfG7no 9c5wljrm/xGkBFZKg4ges9ikMzuZKPdUcNim24qkYGRGJ4R5UpgOjI0Qzl5z2EUUKeZj aZHU/wWaNDYB3Lf/DcSN+Xrea5hjnywMTGtxE07VOn8yZynK2ytnCi76/pM7sHc9F1CS ck5x6zwZfHx+gquUa6I3jG6vaoXlkcgnWBTjr/LOmHX6wEbUbRWYKCbeDuUAhYM5MLkN GhQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=H0Xb75I+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id o19-20020a17090ac71300b001cb95c53172si7041485pjt.78.2022.04.12.17.04.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 17:04:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=H0Xb75I+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id A39B98CD8A; Tue, 12 Apr 2022 15:00:25 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349995AbiDLGjk (ORCPT + 99 others); Tue, 12 Apr 2022 02:39:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350184AbiDLGhs (ORCPT ); Tue, 12 Apr 2022 02:37:48 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 08B2C13EA3; Mon, 11 Apr 2022 23:34:24 -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 702F5B81B4A; Tue, 12 Apr 2022 06:34:23 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D9984C385A1; Tue, 12 Apr 2022 06:34:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649745262; bh=81z2h1KVHNB5zfs48nVJ9EZ4tsJ+/5iEXZGNdjODKYQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=H0Xb75I+Tj5eKWWrRyWTSwJSP69sR8Ijtzm1kANwxxkn0LmKPzc/oPiZZXRxxbIMn Seyiwn8dPmwzFdqM8ibHovLCPC9ut2Di4Ooh0Lcj8CPezy2Z9x+GN9OopnctUc/Q4a yJjE6H1ryKUumaT47Huc6LQDpYj9PWcHxNUeF1Uo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Lorenzo Pieralisi , Sasha Levin Subject: [PATCH 5.10 028/171] PCI: aardvark: Fix support for MSI interrupts Date: Tue, 12 Apr 2022 08:28:39 +0200 Message-Id: <20220412062928.700590024@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412062927.870347203@linuxfoundation.org> References: <20220412062927.870347203@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pali Rohár [ Upstream commit b0b0b8b897f8e12b2368e868bd7cdc5742d5c5a9 ] Aardvark hardware supports Multi-MSI and MSI_FLAG_MULTI_PCI_MSI is already set for the MSI chip. But when allocating MSI interrupt numbers for Multi-MSI, the numbers 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). Instead we need to use the aligned hwirq numbers. 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 NVMe disks freeze booting as linux nvme-core.c is waiting 60s for an interrupt. Link: https://lore.kernel.org/r/20220110015018.26359-4-kabel@kernel.org Signed-off-by: Pali Rohár Signed-off-by: Marek Behún Signed-off-by: Lorenzo Pieralisi Signed-off-by: Sasha Levin --- drivers/pci/controller/pci-aardvark.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index 49ff8bf10c74..af051fb88699 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -1186,7 +1186,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, @@ -1203,15 +1203,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, @@ -1229,7 +1225,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); } -- 2.35.1