All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Michael Chan <michael.chan@broadcom.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 5.0 27/36] bnxt_en: Fix possible BUG() condition when calling pci_disable_msix().
Date: Mon,  3 Jun 2019 11:09:15 +0200	[thread overview]
Message-ID: <20190603090522.776280971@linuxfoundation.org> (raw)
In-Reply-To: <20190603090520.998342694@linuxfoundation.org>

From: Michael Chan <michael.chan@broadcom.com>

[ Upstream commit 1b3f0b75c39f534278a895c117282014e9d0ae1f ]

When making configuration changes, the driver calls bnxt_close_nic()
and then bnxt_open_nic() for the changes to take effect.  A parameter
irq_re_init is passed to the call sequence to indicate if IRQ
should be re-initialized.  This irq_re_init parameter needs to
be included in the bnxt_reserve_rings() call.  bnxt_reserve_rings()
can only call pci_disable_msix() if the irq_re_init parameter is
true, otherwise it may hit BUG() because some IRQs may not have been
freed yet.

Fixes: 41e8d7983752 ("bnxt_en: Modify the ring reservation functions for 57500 series chips.")
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c         |   13 +++++++------
 drivers/net/ethernet/broadcom/bnxt/bnxt.h         |    2 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c |    2 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c     |    2 +-
 4 files changed, 10 insertions(+), 9 deletions(-)

--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -7506,22 +7506,23 @@ static void bnxt_clear_int_mode(struct b
 	bp->flags &= ~BNXT_FLAG_USING_MSIX;
 }
 
-int bnxt_reserve_rings(struct bnxt *bp)
+int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init)
 {
 	int tcs = netdev_get_num_tc(bp->dev);
-	bool reinit_irq = false;
+	bool irq_cleared = false;
 	int rc;
 
 	if (!bnxt_need_reserve_rings(bp))
 		return 0;
 
-	if (BNXT_NEW_RM(bp) && (bnxt_get_num_msix(bp) != bp->total_irqs)) {
+	if (irq_re_init && BNXT_NEW_RM(bp) &&
+	    bnxt_get_num_msix(bp) != bp->total_irqs) {
 		bnxt_ulp_irq_stop(bp);
 		bnxt_clear_int_mode(bp);
-		reinit_irq = true;
+		irq_cleared = true;
 	}
 	rc = __bnxt_reserve_rings(bp);
-	if (reinit_irq) {
+	if (irq_cleared) {
 		if (!rc)
 			rc = bnxt_init_int_mode(bp);
 		bnxt_ulp_irq_restart(bp, rc);
@@ -8420,7 +8421,7 @@ static int __bnxt_open_nic(struct bnxt *
 			return rc;
 		}
 	}
-	rc = bnxt_reserve_rings(bp);
+	rc = bnxt_reserve_rings(bp, irq_re_init);
 	if (rc)
 		return rc;
 	if ((bp->flags & BNXT_FLAG_RFS) &&
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -1776,7 +1776,7 @@ unsigned int bnxt_get_avail_stat_ctxs_fo
 unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp);
 unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp);
 int bnxt_get_avail_msix(struct bnxt *bp, int num);
-int bnxt_reserve_rings(struct bnxt *bp);
+int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init);
 void bnxt_tx_disable(struct bnxt *bp);
 void bnxt_tx_enable(struct bnxt *bp);
 int bnxt_hwrm_set_pause(struct bnxt *);
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -788,7 +788,7 @@ static int bnxt_set_channels(struct net_
 			 */
 		}
 	} else {
-		rc = bnxt_reserve_rings(bp);
+		rc = bnxt_reserve_rings(bp, true);
 	}
 
 	return rc;
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -150,7 +150,7 @@ static int bnxt_req_msix_vecs(struct bnx
 			bnxt_close_nic(bp, true, false);
 			rc = bnxt_open_nic(bp, true, false);
 		} else {
-			rc = bnxt_reserve_rings(bp);
+			rc = bnxt_reserve_rings(bp, true);
 		}
 	}
 	if (rc) {



  parent reply	other threads:[~2019-06-03  9:12 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-03  9:08 [PATCH 5.0 00/36] 5.0.21-stable review Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 01/36] bonding/802.3ad: fix slave link initialization transition states Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 02/36] cxgb4: offload VLAN flows regardless of VLAN ethtype Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 03/36] inet: switch IP ID generator to siphash Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 04/36] ipv4/igmp: fix another memory leak in igmpv3_del_delrec() Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 05/36] ipv4/igmp: fix build error if !CONFIG_IP_MULTICAST Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 06/36] ipv6: Consider sk_bound_dev_if when binding a raw socket to an address Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 07/36] ipv6: Fix redirect with VRF Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 08/36] llc: fix skb leak in llc_build_and_send_ui_pkt() Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 09/36] mlxsw: spectrum_acl: Avoid warning after identical rules insertion Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 10/36] net: dsa: mv88e6xxx: fix handling of upper half of STATS_TYPE_PORT Greg Kroah-Hartman
2019-06-03  9:08 ` [PATCH 5.0 11/36] net: fec: fix the clk mismatch in failed_reset path Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 12/36] net-gro: fix use-after-free read in napi_gro_frags() Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 13/36] net: mvneta: Fix err code path of probe Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 14/36] net: mvpp2: fix bad MVPP2_TXQ_SCHED_TOKEN_CNTR_REG queue value Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 15/36] net: phy: marvell10g: report if the PHY fails to boot firmware Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 16/36] net: sched: dont use tc_action->order during action dump Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 17/36] net: stmmac: fix reset gpio free missing Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 18/36] r8169: fix MAC address being lost in PCI D3 Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 19/36] usbnet: fix kernel crash after disconnect Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 20/36] net/mlx5: Avoid double free in fs init error unwinding path Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 21/36] tipc: Avoid copying bytes beyond the supplied data Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 22/36] net/mlx5: Allocate root ns memory using kzalloc to match kfree Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 23/36] net/mlx5e: Disable rxhash when CQE compress is enabled Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 25/36] net: stmmac: dma channel control register need to be init first Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 26/36] bnxt_en: Fix aggregation buffer leak under OOM condition Greg Kroah-Hartman
2019-06-03  9:09 ` Greg Kroah-Hartman [this message]
2019-06-03  9:09 ` [PATCH 5.0 28/36] bnxt_en: Reduce memory usage when running in kdump kernel Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 29/36] net/tls: fix state removal with feature flags off Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 30/36] net/tls: dont ignore netdev notifications if no TLS features Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 31/36] cxgb4: Revert "cxgb4: Remove SGE_HOST_PAGE_SIZE dependency on page size" Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 32/36] net: correct zerocopy refcnt with udp MSG_MORE Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 33/36] crypto: vmx - ghash: do nosimd fallback manually Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 34/36] xen/pciback: Dont disable PCI_COMMAND on PCI device reset Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 35/36] Revert "tipc: fix modprobe tipc failed after switch order of device registration" Greg Kroah-Hartman
2019-06-03  9:09 ` [PATCH 5.0 36/36] tipc: fix modprobe tipc failed after switch order of device registration Greg Kroah-Hartman
2019-06-03 15:09 ` [PATCH 5.0 00/36] 5.0.21-stable review kernelci.org bot
2019-06-03 17:17 ` Guenter Roeck
2019-06-03 17:59 ` Naresh Kamboju
2019-06-03 18:33 ` Jon Hunter
2019-06-03 18:33   ` Jon Hunter
2019-06-03 23:32 ` shuah

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190603090522.776280971@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michael.chan@broadcom.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.