All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/4] bnx2x: Bug fixes patch series
@ 2013-11-17  6:59 Yuval Mintz
  2013-11-17  6:59 ` [PATCH net 1/4] bnx2x: Clean the sp rtnl task upon unload Yuval Mintz
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Yuval Mintz @ 2013-11-17  6:59 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, dmitry

Hi Dave,

This series contains several fixes, relating either to SR-IOV flows
or to critical sections protected by the rtnl lock.

Please consider applying these patches to `net'.

Thanks,
Yuval Mintz

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net 1/4] bnx2x: Clean the sp rtnl task upon unload
  2013-11-17  6:59 [PATCH net 0/4] bnx2x: Bug fixes patch series Yuval Mintz
@ 2013-11-17  6:59 ` Yuval Mintz
  2013-11-17  6:59 ` [PATCH net 2/4] bnx2x: Prevent panic during DMAE timeout Yuval Mintz
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Yuval Mintz @ 2013-11-17  6:59 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, dmitry, Yuval Mintz

From: Dmitry Kravkov <dmitry@broadcom.com>

While unloading, bnx2x needs to clean the sp_rtnl_state to prevent
configuration made before the unload to be applied afterwards with
stale values.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 74d6486..f8cc9c2 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -2959,6 +2959,10 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link)
 
 	bp->port.pmf = 0;
 
+	/* clear pending work in rtnl task */
+	bp->sp_rtnl_state = 0;
+	smp_mb();
+
 	/* Free SKBs, SGEs, TPA pool and driver internals */
 	bnx2x_free_skbs(bp);
 	if (CNIC_LOADED(bp))
-- 
1.8.1.227.g44fe835

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net 2/4] bnx2x: Prevent panic during DMAE timeout
  2013-11-17  6:59 [PATCH net 0/4] bnx2x: Bug fixes patch series Yuval Mintz
  2013-11-17  6:59 ` [PATCH net 1/4] bnx2x: Clean the sp rtnl task upon unload Yuval Mintz
@ 2013-11-17  6:59 ` Yuval Mintz
  2013-11-17  6:59 ` [PATCH net 3/4] bnx2x: prevent CFC attention Yuval Mintz
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Yuval Mintz @ 2013-11-17  6:59 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, dmitry, Yuval Mintz

From: Dmitry Kravkov <dmitry@broadcom.com>

If chip enters a recovery flow just after the driver issues a DMAE request
the DMAE will timeout. Current code will cause a bnx2x_panic() as a result,
which means interface will no longer be usable (regardless of the recovery
results), as bnx2x_panic() is irreversible for the driver.

As this is a possible flow, the panic should be reached only when driver
is compiled with STOP_ON_ERROR.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c |  8 ++++++++
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h  | 11 +++++++++++
 2 files changed, 19 insertions(+)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index b42f89c..1d799ee 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -577,7 +577,9 @@ void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, u32 dst_addr,
 	rc = bnx2x_issue_dmae_with_comp(bp, &dmae, bnx2x_sp(bp, wb_comp));
 	if (rc) {
 		BNX2X_ERR("DMAE returned failure %d\n", rc);
+#ifdef BNX2X_STOP_ON_ERROR
 		bnx2x_panic();
+#endif
 	}
 }
 
@@ -614,7 +616,9 @@ void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32)
 	rc = bnx2x_issue_dmae_with_comp(bp, &dmae, bnx2x_sp(bp, wb_comp));
 	if (rc) {
 		BNX2X_ERR("DMAE returned failure %d\n", rc);
+#ifdef BNX2X_STOP_ON_ERROR
 		bnx2x_panic();
+#endif
 	}
 }
 
@@ -9352,6 +9356,10 @@ static int bnx2x_process_kill(struct bnx2x *bp, bool global)
 	bnx2x_process_kill_chip_reset(bp, global);
 	barrier();
 
+	/* clear errors in PGB */
+	if (!CHIP_IS_E1x(bp))
+		REG_WR(bp, PGLUE_B_REG_LATCHED_ERRORS_CLR, 0x7f);
+
 	/* Recover after reset: */
 	/* MCP */
 	if (global && bnx2x_reset_mcp_comp(bp, val))
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
index 5ecf267..3efbb35 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
@@ -2864,6 +2864,17 @@
 #define PGLUE_B_REG_INTERNAL_PFID_ENABLE_TARGET_READ		 0x9430
 #define PGLUE_B_REG_INTERNAL_PFID_ENABLE_TARGET_WRITE		 0x9434
 #define PGLUE_B_REG_INTERNAL_VFID_ENABLE			 0x9438
+/* [W 7] Writing 1 to each bit in this register clears a corresponding error
+ * details register and enables logging new error details. Bit 0 - clears
+ * INCORRECT_RCV_DETAILS; Bit 1 - clears RX_ERR_DETAILS; Bit 2 - clears
+ * TX_ERR_WR_ADD_31_0 TX_ERR_WR_ADD_63_32 TX_ERR_WR_DETAILS
+ * TX_ERR_WR_DETAILS2 TX_ERR_RD_ADD_31_0 TX_ERR_RD_ADD_63_32
+ * TX_ERR_RD_DETAILS TX_ERR_RD_DETAILS2 TX_ERR_WR_DETAILS_ICPL; Bit 3 -
+ * clears VF_LENGTH_VIOLATION_DETAILS. Bit 4 - clears
+ * VF_GRC_SPACE_VIOLATION_DETAILS. Bit 5 - clears RX_TCPL_ERR_DETAILS. Bit 6
+ * - clears TCPL_IN_TWO_RCBS_DETAILS. */
+#define PGLUE_B_REG_LATCHED_ERRORS_CLR				 0x943c
+
 /* [R 9] Interrupt register #0 read */
 #define PGLUE_B_REG_PGLUE_B_INT_STS				 0x9298
 /* [RC 9] Interrupt register #0 read clear */
-- 
1.8.1.227.g44fe835

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net 3/4] bnx2x: prevent CFC attention
  2013-11-17  6:59 [PATCH net 0/4] bnx2x: Bug fixes patch series Yuval Mintz
  2013-11-17  6:59 ` [PATCH net 1/4] bnx2x: Clean the sp rtnl task upon unload Yuval Mintz
  2013-11-17  6:59 ` [PATCH net 2/4] bnx2x: Prevent panic during DMAE timeout Yuval Mintz
@ 2013-11-17  6:59 ` Yuval Mintz
  2013-11-17  6:59 ` [PATCH net 4/4] bnx2x: Prevent "timeout waiting for state X" Yuval Mintz
  2013-11-18 20:46 ` [PATCH net 0/4] bnx2x: Bug fixes patch series David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: Yuval Mintz @ 2013-11-17  6:59 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, dmitry, Yuval Mintz

From: Dmitry Kravkov <dmitry@broadcom.com>

During VF load, prior to sending messages on HW channel to PF the VF
checks its bulletin board to see whether the PF indicated it has closed;
If a closed PF is encountered, the VF skips sending the message.

Due to incorrect return values, there's a possible scenario in which the VF
finishes loading "successfully", while the PF hasn't actually fully configured
FW/HW for the VFs supposed configuration.
Once VF tries to send Tx packets, HW will raise an attention (and FW possibly
will start treat the VF as malicious).

The patch fails the loading process in such a scenario.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
index 28757df..c421009 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
@@ -128,7 +128,7 @@ static int bnx2x_send_msg2pf(struct bnx2x *bp, u8 *done, dma_addr_t msg_mapping)
 	if (bp->old_bulletin.valid_bitmap & 1 << CHANNEL_DOWN) {
 		DP(BNX2X_MSG_IOV, "detecting channel down. Aborting message\n");
 		*done = PFVF_STATUS_SUCCESS;
-		return 0;
+		return -EINVAL;
 	}
 
 	/* Write message address */
-- 
1.8.1.227.g44fe835

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net 4/4] bnx2x: Prevent "timeout waiting for state X"
  2013-11-17  6:59 [PATCH net 0/4] bnx2x: Bug fixes patch series Yuval Mintz
                   ` (2 preceding siblings ...)
  2013-11-17  6:59 ` [PATCH net 3/4] bnx2x: prevent CFC attention Yuval Mintz
@ 2013-11-17  6:59 ` Yuval Mintz
  2013-11-18 20:46 ` [PATCH net 0/4] bnx2x: Bug fixes patch series David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: Yuval Mintz @ 2013-11-17  6:59 UTC (permalink / raw)
  To: davem, netdev; +Cc: ariele, dmitry, Yuval Mintz

From: Dmitry Kravkov <dmitry@broadcom.com>

Current driver release rtnl lock in between DCB re-configuration.
As a result, other flows (e.g., mtu config) may enter in between and fail
due to halted tx path for dcb configuration.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x.h      | 1 -
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c  | 5 -----
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 9 ++++-----
 3 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index c5e375d..8471478 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -1376,7 +1376,6 @@ enum {
 	BNX2X_SP_RTNL_RX_MODE,
 	BNX2X_SP_RTNL_HYPERVISOR_VLAN,
 	BNX2X_SP_RTNL_TX_STOP,
-	BNX2X_SP_RTNL_TX_RESUME,
 };
 
 struct bnx2x_prev_path_list {
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
index fcf2761..fdace20 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
@@ -778,11 +778,6 @@ void bnx2x_dcbx_set_params(struct bnx2x *bp, u32 state)
 
 		/* ets may affect cmng configuration: reinit it in hw */
 		bnx2x_set_local_cmng(bp);
-
-		set_bit(BNX2X_SP_RTNL_TX_RESUME, &bp->sp_rtnl_state);
-
-		schedule_delayed_work(&bp->sp_rtnl_task, 0);
-
 		return;
 	case BNX2X_DCBX_STATE_TX_RELEASED:
 		DP(BNX2X_MSG_DCB, "BNX2X_DCBX_STATE_TX_RELEASED\n");
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 1d799ee..0fb1677 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -5235,18 +5235,18 @@ static void bnx2x_eq_int(struct bnx2x *bp)
 
 		case EVENT_RING_OPCODE_STOP_TRAFFIC:
 			DP(BNX2X_MSG_SP | BNX2X_MSG_DCB, "got STOP TRAFFIC\n");
+			bnx2x_dcbx_set_params(bp, BNX2X_DCBX_STATE_TX_PAUSED);
 			if (f_obj->complete_cmd(bp, f_obj,
 						BNX2X_F_CMD_TX_STOP))
 				break;
-			bnx2x_dcbx_set_params(bp, BNX2X_DCBX_STATE_TX_PAUSED);
 			goto next_spqe;
 
 		case EVENT_RING_OPCODE_START_TRAFFIC:
 			DP(BNX2X_MSG_SP | BNX2X_MSG_DCB, "got START TRAFFIC\n");
+			bnx2x_dcbx_set_params(bp, BNX2X_DCBX_STATE_TX_RELEASED);
 			if (f_obj->complete_cmd(bp, f_obj,
 						BNX2X_F_CMD_TX_START))
 				break;
-			bnx2x_dcbx_set_params(bp, BNX2X_DCBX_STATE_TX_RELEASED);
 			goto next_spqe;
 
 		case EVENT_RING_OPCODE_FUNCTION_UPDATE:
@@ -9714,11 +9714,10 @@ sp_rtnl_not_reset:
 			       &bp->sp_rtnl_state))
 		bnx2x_pf_set_vfs_vlan(bp);
 
-	if (test_and_clear_bit(BNX2X_SP_RTNL_TX_STOP, &bp->sp_rtnl_state))
+	if (test_and_clear_bit(BNX2X_SP_RTNL_TX_STOP, &bp->sp_rtnl_state)) {
 		bnx2x_dcbx_stop_hw_tx(bp);
-
-	if (test_and_clear_bit(BNX2X_SP_RTNL_TX_RESUME, &bp->sp_rtnl_state))
 		bnx2x_dcbx_resume_hw_tx(bp);
+	}
 
 	/* work which needs rtnl lock not-taken (as it takes the lock itself and
 	 * can be called from other contexts as well)
-- 
1.8.1.227.g44fe835

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net 0/4] bnx2x: Bug fixes patch series
  2013-11-17  6:59 [PATCH net 0/4] bnx2x: Bug fixes patch series Yuval Mintz
                   ` (3 preceding siblings ...)
  2013-11-17  6:59 ` [PATCH net 4/4] bnx2x: Prevent "timeout waiting for state X" Yuval Mintz
@ 2013-11-18 20:46 ` David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2013-11-18 20:46 UTC (permalink / raw)
  To: yuvalmin; +Cc: netdev, ariele, dmitry

From: "Yuval Mintz" <yuvalmin@broadcom.com>
Date: Sun, 17 Nov 2013 08:59:25 +0200

> This series contains several fixes, relating either to SR-IOV flows
> or to critical sections protected by the rtnl lock.
> 
> Please consider applying these patches to `net'.

Series applied, thanks Yuval.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-11-18 20:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-11-17  6:59 [PATCH net 0/4] bnx2x: Bug fixes patch series Yuval Mintz
2013-11-17  6:59 ` [PATCH net 1/4] bnx2x: Clean the sp rtnl task upon unload Yuval Mintz
2013-11-17  6:59 ` [PATCH net 2/4] bnx2x: Prevent panic during DMAE timeout Yuval Mintz
2013-11-17  6:59 ` [PATCH net 3/4] bnx2x: prevent CFC attention Yuval Mintz
2013-11-17  6:59 ` [PATCH net 4/4] bnx2x: Prevent "timeout waiting for state X" Yuval Mintz
2013-11-18 20:46 ` [PATCH net 0/4] bnx2x: Bug fixes patch series David Miller

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.