Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp21517pxb; Tue, 12 Apr 2022 15:39:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxe+02X2sFUbOrzsRfgUFhLBBTWVQc9qGj1t+zwvC5o8BgzDn4SNxON7B15BCp1i0zM6Tr0 X-Received: by 2002:a17:90a:1c08:b0:1cd:474a:a4f8 with SMTP id s8-20020a17090a1c0800b001cd474aa4f8mr1815438pjs.82.1649803183310; Tue, 12 Apr 2022 15:39:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649803183; cv=none; d=google.com; s=arc-20160816; b=K4ScRWNpmLn04iDVTY+nEGzLn6dmt5FVvG+f4MJNIiyHpRA0rbQH4gefaYN5COGZt3 WW9ljcmTXfTEcM4fziIYfxA3anisASj2rCjJqoSK/BOCuGZqPfr3YFLJxpV4vEJtnyPI h1EAMlUIu33fVNf7Pq6V3jTc5f8IXDmY9EazpQAH6Exfz56Owf1ApZZv7MUgoWpZbKIg aN/k+TSTbvkMKZTWp8la9ZI5sQ1NO4MBiJwssmnDGyNiIL8kVbeIihtvvrv8zpowakUo EezilVyCTkeptb3+KumCSn/AruD4xgRgHww5VoUYKnWNetT0E6pSh1+0E6Lp8odfs8vx wq6Q== 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=H3Bwk9lRGPpmuBKhfiuQI6RQabFLKtfPF8c+Fxg1yMk=; b=kAPs/2eAKBHFBaOe6h/8t9hQVEWqbWEN/SdF/1yN8mi5s/E7H6w3pmDkBb/OfAb7Ck Bz/sXIWAV5VPzxv1uURn8OQuk/opeWXlIIxdi6r2D3HQyuJYkA+ZQ1ystDVp7tbgJIhZ pftM09yiHo+NbCphXmo0I5G2jn455Ya3cub/bYj7mbEJ9PFcDUMOfenAjKQAxwmeGlYO ZeBTSP4+UtKiT6quC0dETQ8ILO+jVn243/2hyPQbwWZ/3nHTbduLxObOKpXKa67xYvmv droow7pl954V/0iX3j5hpXPRlIRsDxVjqX/d8HFpHW8fbIye74yyDuJHOZL0isa3jqlQ 6dRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=v+HGPJO8; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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. [23.128.96.19]) by mx.google.com with ESMTPS id bf23-20020a656d17000000b003980aecb0d8si3849711pgb.556.2022.04.12.15.39.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 15:39:43 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=v+HGPJO8; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 18F941A847D; Tue, 12 Apr 2022 14:18:10 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357436AbiDLHkU (ORCPT + 99 others); Tue, 12 Apr 2022 03:40:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353042AbiDLHOq (ORCPT ); Tue, 12 Apr 2022 03:14:46 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A3995326F8; Mon, 11 Apr 2022 23:55:51 -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 4AFABB81B47; Tue, 12 Apr 2022 06:55:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9374CC385A1; Tue, 12 Apr 2022 06:55:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649746549; bh=G5HzDmpTK5B5BsDc7TocjU19nK3HJljZop0AW9Jw7UQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=v+HGPJO8K4AgeZcMBpMP9TFR4udCr84Q3F1rmfcYeLMRdkdgJ+A1GSgmEXxwxOONg MRXzm3N7mRF5suwpHNH/2PEEcuGaC9lBUzN5ECm0trvfPxereLLrOlpOUcBowLsV0B unljpOO9gXzoWR5fLSGycVON0KPtJf2g5ydAzXvI= 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.16 046/285] PCI: aardvark: Fix support for MSI interrupts Date: Tue, 12 Apr 2022 08:28:23 +0200 Message-Id: <20220412062945.004536344@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412062943.670770901@linuxfoundation.org> References: <20220412062943.670770901@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 a924564fdbbc..6277b3f3031a 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -1179,7 +1179,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, @@ -1196,15 +1196,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, @@ -1222,7 +1218,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