netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net 0/6] bnx2x: fixes
@ 2013-07-16 15:21 Dmitry Kravkov
  2013-07-16 15:21 ` [PATCH net 1/6] bnx2x: properly initialize statistic counters Dmitry Kravkov
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Dmitry Kravkov @ 2013-07-16 15:21 UTC (permalink / raw)
  To: davem, netdev

Hello Dave

Please consider applying the series of bnx2x fixes to net:
	* statistics may cause FW assert
	* missing fairness configuration in DCB flow
	* memory leak in sriov releated part
	* Illegal PTE access
	* Pagefault crash in shutdown flow with cnic

Thanks
Dmitry 

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

* [PATCH net 1/6] bnx2x: properly initialize statistic counters
  2013-07-16 15:21 [PATCH net 0/6] bnx2x: fixes Dmitry Kravkov
@ 2013-07-16 15:21 ` Dmitry Kravkov
  2013-07-16 16:24   ` Joe Perches
  2013-07-16 15:21 ` [PATCH net 2/6] bnx2x: prevent statistics update flow to act before statistics are started Dmitry Kravkov
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Dmitry Kravkov @ 2013-07-16 15:21 UTC (permalink / raw)
  To: davem, netdev

This prevent second statistics query be sent before first one is complete.
This is required since two outstanding queries may cause FW assert.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
index 98366ab..69c4cb6 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
@@ -1591,10 +1591,16 @@ void bnx2x_stats_init(struct bnx2x *bp)
 {
 	int /*abs*/port = BP_PORT(bp);
 	int mb_idx = BP_FW_MB_IDX(bp);
+	__le16 init_fw_counter = le16_to_cpu(0xFFFF);
+	struct stats_counter *counters = &bp->fw_stats_data->storm_counters;
 
 	bp->stats_pending = 0;
 	bp->executer_idx = 0;
 	bp->stats_counter = 0;
+	counters->xstats_counter = init_fw_counter;
+	counters->tstats_counter = init_fw_counter;
+	counters->ustats_counter = init_fw_counter;
+	counters->cstats_counter = init_fw_counter;
 
 	/* port and func stats for management */
 	if (!BP_NOMCP(bp)) {
-- 
1.8.1.4

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

* [PATCH net 2/6] bnx2x: prevent statistics update flow to act before statistics are started
  2013-07-16 15:21 [PATCH net 0/6] bnx2x: fixes Dmitry Kravkov
  2013-07-16 15:21 ` [PATCH net 1/6] bnx2x: properly initialize statistic counters Dmitry Kravkov
@ 2013-07-16 15:21 ` Dmitry Kravkov
  2013-07-16 18:14   ` Sergei Shtylyov
  2013-07-16 15:21 ` [PATCH net 3/6] bnx2x: update fairness parameters following DCB negotiation Dmitry Kravkov
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Dmitry Kravkov @ 2013-07-16 15:21 UTC (permalink / raw)
  To: davem, netdev

This in order to serialize statistics requests sent to FW,
otherwise two outstanding queries may cause FW assert.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x.h       | 1 +
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c  | 1 +
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c | 6 +++++-
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index dedbd76..bdbd87e 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -1830,6 +1830,7 @@ struct bnx2x {
 
 	int fp_array_size;
 	u32 dump_preset_idx;
+	atomic_t				stats_started;
 };
 
 /* Tx queues may be less or equal to Rx queues */
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index e5da078..7e9681f 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -11524,6 +11524,7 @@ static int bnx2x_init_bp(struct bnx2x *bp)
 	mutex_init(&bp->port.phy_mutex);
 	mutex_init(&bp->fw_mb_mutex);
 	spin_lock_init(&bp->stats_lock);
+	atomic_set(&bp->stats_started, 0);
 
 	INIT_DELAYED_WORK(&bp->sp_task, bnx2x_sp_task);
 	INIT_DELAYED_WORK(&bp->sp_rtnl_task, bnx2x_sp_rtnl_task);
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
index 69c4cb6..79d2d5f 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
@@ -534,6 +534,8 @@ static void bnx2x_stats_start(struct bnx2x *bp)
 
 	bnx2x_hw_stats_post(bp);
 	bnx2x_storm_stats_post(bp);
+
+	atomic_set(&bp->stats_started, 1);
 }
 
 static void bnx2x_stats_pmf_start(struct bnx2x *bp)
@@ -1227,7 +1229,7 @@ static void bnx2x_stats_update(struct bnx2x *bp)
 {
 	u32 *stats_comp = bnx2x_sp(bp, stats_comp);
 
-	if (bnx2x_edebug_stats_stopped(bp))
+	if (bnx2x_edebug_stats_stopped(bp) || !atomic_read(&bp->stats_started))
 		return;
 
 	if (IS_PF(bp)) {
@@ -1332,6 +1334,8 @@ static void bnx2x_stats_stop(struct bnx2x *bp)
 {
 	int update = 0;
 
+	atomic_set(&bp->stats_started, 0);
+
 	bnx2x_stats_comp(bp);
 
 	if (bp->port.pmf)
-- 
1.8.1.4

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

* [PATCH net 3/6] bnx2x: update fairness parameters following DCB negotiation
  2013-07-16 15:21 [PATCH net 0/6] bnx2x: fixes Dmitry Kravkov
  2013-07-16 15:21 ` [PATCH net 1/6] bnx2x: properly initialize statistic counters Dmitry Kravkov
  2013-07-16 15:21 ` [PATCH net 2/6] bnx2x: prevent statistics update flow to act before statistics are started Dmitry Kravkov
@ 2013-07-16 15:21 ` Dmitry Kravkov
  2013-07-16 15:21 ` [PATCH net 4/6] bnx2x: fix memory leak in VF Dmitry Kravkov
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Dmitry Kravkov @ 2013-07-16 15:21 UTC (permalink / raw)
  To: davem, netdev

ETS can be enabled as a result of DCB negotiation, then
fairness must be recalculated after each negotiation.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x.h      |  2 ++
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c  |  4 ++++
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 30 ++++++++++++++----------
 3 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index bdbd87e..02f914d 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -2452,4 +2452,6 @@ enum bnx2x_pci_bus_speed {
 	BNX2X_PCI_LINK_SPEED_5000 = 5000,
 	BNX2X_PCI_LINK_SPEED_8000 = 8000
 };
+
+void bnx2x_set_local_cmng(struct bnx2x *bp);
 #endif /* bnx2x.h */
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
index 0c94df4..f9122f2 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
@@ -753,6 +753,10 @@ void bnx2x_dcbx_set_params(struct bnx2x *bp, u32 state)
 		bnx2x_pfc_set_pfc(bp);
 
 		bnx2x_dcbx_update_ets_params(bp);
+
+		/* ets may affect cmng configuration: reinit it in hw */
+		bnx2x_set_local_cmng(bp);
+
 		bnx2x_dcbx_resume_hw_tx(bp);
 
 		return;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 7e9681f..0f3de02 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -2476,7 +2476,7 @@ static void bnx2x_cmng_fns_init(struct bnx2x *bp, u8 read_cfg, u8 cmng_type)
 
 	input.port_rate = bp->link_vars.line_speed;
 
-	if (cmng_type == CMNG_FNS_MINMAX) {
+	if (cmng_type == CMNG_FNS_MINMAX && input.port_rate) {
 		int vn;
 
 		/* read mf conf from shmem */
@@ -2533,6 +2533,21 @@ static void storm_memset_cmng(struct bnx2x *bp,
 	}
 }
 
+/* init cmng mode in HW according to local configuration */
+void bnx2x_set_local_cmng(struct bnx2x *bp)
+{
+	int cmng_fns = bnx2x_get_cmng_fns_mode(bp);
+
+	if (cmng_fns != CMNG_FNS_NONE) {
+		bnx2x_cmng_fns_init(bp, false, cmng_fns);
+		storm_memset_cmng(bp, &bp->cmng, BP_PORT(bp));
+	} else {
+		/* rate shaping and fairness are disabled */
+		DP(NETIF_MSG_IFUP,
+		   "single function mode without fairness\n");
+	}
+}
+
 /* This function is called upon link interrupt */
 static void bnx2x_link_attn(struct bnx2x *bp)
 {
@@ -2568,17 +2583,8 @@ static void bnx2x_link_attn(struct bnx2x *bp)
 			bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP);
 	}
 
-	if (bp->link_vars.link_up && bp->link_vars.line_speed) {
-		int cmng_fns = bnx2x_get_cmng_fns_mode(bp);
-
-		if (cmng_fns != CMNG_FNS_NONE) {
-			bnx2x_cmng_fns_init(bp, false, cmng_fns);
-			storm_memset_cmng(bp, &bp->cmng, BP_PORT(bp));
-		} else
-			/* rate shaping and fairness are disabled */
-			DP(NETIF_MSG_IFUP,
-			   "single function mode without fairness\n");
-	}
+	if (bp->link_vars.link_up && bp->link_vars.line_speed)
+		bnx2x_set_local_cmng(bp);
 
 	__bnx2x_link_report(bp);
 
-- 
1.8.1.4

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

* [PATCH net 4/6] bnx2x: fix memory leak in VF
  2013-07-16 15:21 [PATCH net 0/6] bnx2x: fixes Dmitry Kravkov
                   ` (2 preceding siblings ...)
  2013-07-16 15:21 ` [PATCH net 3/6] bnx2x: update fairness parameters following DCB negotiation Dmitry Kravkov
@ 2013-07-16 15:21 ` Dmitry Kravkov
  2013-07-16 18:12   ` Sergei Shtylyov
  2013-07-16 15:21 ` [PATCH net 5/6] bnx2x: fix PTE write access error Dmitry Kravkov
  2013-07-16 15:21 ` [PATCH net 6/6] bnx2x: prevent crash in shutdown flow with CNIC Dmitry Kravkov
  5 siblings, 1 reply; 12+ messages in thread
From: Dmitry Kravkov @ 2013-07-16 15:21 UTC (permalink / raw)
  To: davem, netdev

From: Ariel Elior <ariele@broadcom.com>

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
index 95861ef..44104fb 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
@@ -3463,7 +3463,7 @@ int bnx2x_vf_pci_alloc(struct bnx2x *bp)
 alloc_mem_err:
 	BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->vf2pf_mbox_mapping,
 		       sizeof(struct bnx2x_vf_mbx_msg));
-	BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->vf2pf_mbox_mapping,
+	BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->pf2vf_bulletin_mapping,
 		       sizeof(union pf_vf_bulletin));
 	return -ENOMEM;
 }
-- 
1.8.1.4

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

* [PATCH net 5/6] bnx2x: fix PTE write access error
  2013-07-16 15:21 [PATCH net 0/6] bnx2x: fixes Dmitry Kravkov
                   ` (3 preceding siblings ...)
  2013-07-16 15:21 ` [PATCH net 4/6] bnx2x: fix memory leak in VF Dmitry Kravkov
@ 2013-07-16 15:21 ` Dmitry Kravkov
  2013-07-16 15:21 ` [PATCH net 6/6] bnx2x: prevent crash in shutdown flow with CNIC Dmitry Kravkov
  5 siblings, 0 replies; 12+ messages in thread
From: Dmitry Kravkov @ 2013-07-16 15:21 UTC (permalink / raw)
  To: davem, netdev

From: Barak Witkowsky <barak@broadcom.com>

PTE write access error  might occur in MF_ALLOWED mode when IOMMU
is active. The patch adds rmmod HSI indicating to MFW to stop
running queries which might trigger this failure.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x.h      | 1 +
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h  | 5 +++++
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 9 +++++++++
 3 files changed, 15 insertions(+)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index 02f914d..906c7d9 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -1502,6 +1502,7 @@ struct bnx2x {
 #define BC_SUPPORTS_DCBX_MSG_NON_PMF	(1 << 21)
 #define IS_VF_FLAG			(1 << 22)
 #define INTERRUPTS_ENABLED_FLAG		(1 << 23)
+#define BC_SUPPORTS_RMMOD_CMD		(1 << 24)
 
 #define BP_NOMCP(bp)			((bp)->flags & NO_MCP_FLAG)
 
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
index 5018e52..32767f6 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
@@ -1300,6 +1300,9 @@ struct drv_func_mb {
 
 	#define DRV_MSG_CODE_EEE_RESULTS_ACK            0xda000000
 
+	#define DRV_MSG_CODE_RMMOD                      0xdb000000
+	#define REQ_BC_VER_4_RMMOD_CMD                  0x0007080f
+
 	#define DRV_MSG_CODE_SET_MF_BW                  0xe0000000
 	#define REQ_BC_VER_4_SET_MF_BW                  0x00060202
 	#define DRV_MSG_CODE_SET_MF_BW_ACK              0xe1000000
@@ -1372,6 +1375,8 @@ struct drv_func_mb {
 
 	#define FW_MSG_CODE_EEE_RESULS_ACK              0xda100000
 
+	#define FW_MSG_CODE_RMMOD_ACK                   0xdb100000
+
 	#define FW_MSG_CODE_SET_MF_BW_SENT              0xe0000000
 	#define FW_MSG_CODE_SET_MF_BW_DONE              0xe1000000
 
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 0f3de02..9394b7d 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -10368,6 +10368,10 @@ static void bnx2x_get_common_hwinfo(struct bnx2x *bp)
 
 	bp->flags |= (val >= REQ_BC_VER_4_DCBX_ADMIN_MSG_NON_PMF) ?
 			BC_SUPPORTS_DCBX_MSG_NON_PMF : 0;
+
+	bp->flags |= (val >= REQ_BC_VER_4_RMMOD_CMD) ?
+			BC_SUPPORTS_RMMOD_CMD : 0;
+
 	boot_mode = SHMEM_RD(bp,
 			dev_info.port_feature_config[BP_PORT(bp)].mba_config) &
 			PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK;
@@ -12824,6 +12828,11 @@ static void __bnx2x_remove(struct pci_dev *pdev,
 	bnx2x_dcbnl_update_applist(bp, true);
 #endif
 
+	if ((IS_PF(bp)) &&
+	    (!BP_NOMCP(bp)) &&
+	    (bp->flags & BC_SUPPORTS_RMMOD_CMD))
+		bnx2x_fw_command(bp, DRV_MSG_CODE_RMMOD, 0);
+
 	/* Close the interface - either directly or implicitly */
 	if (remove_netdev) {
 		unregister_netdev(dev);
-- 
1.8.1.4

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

* [PATCH net 6/6] bnx2x: prevent crash in shutdown flow with CNIC
  2013-07-16 15:21 [PATCH net 0/6] bnx2x: fixes Dmitry Kravkov
                   ` (4 preceding siblings ...)
  2013-07-16 15:21 ` [PATCH net 5/6] bnx2x: fix PTE write access error Dmitry Kravkov
@ 2013-07-16 15:21 ` Dmitry Kravkov
  5 siblings, 0 replies; 12+ messages in thread
From: Dmitry Kravkov @ 2013-07-16 15:21 UTC (permalink / raw)
  To: davem, netdev

From: Yuval Mintz <yuvalmin@broadcom.com>

There might be a crash as during shutdown flow CNIC might try
to access resources already freed by bnx2x.
Change bnx2x_close() into dev_close() in __bnx2x_remove (shutdown flow)
to guarantee CNIC is notified of the device's change of status.

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 9394b7d..2fdc8e6 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -12838,8 +12838,7 @@ static void __bnx2x_remove(struct pci_dev *pdev,
 		unregister_netdev(dev);
 	} else {
 		rtnl_lock();
-		if (netif_running(dev))
-			bnx2x_close(dev);
+		dev_close(dev);
 		rtnl_unlock();
 	}
 
-- 
1.8.1.4

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

* Re: [PATCH net 1/6] bnx2x: properly initialize statistic counters
  2013-07-16 15:21 ` [PATCH net 1/6] bnx2x: properly initialize statistic counters Dmitry Kravkov
@ 2013-07-16 16:24   ` Joe Perches
  2013-07-16 18:14     ` Dmitry Kravkov
  0 siblings, 1 reply; 12+ messages in thread
From: Joe Perches @ 2013-07-16 16:24 UTC (permalink / raw)
  To: Dmitry Kravkov; +Cc: davem, netdev

On Tue, 2013-07-16 at 18:21 +0300, Dmitry Kravkov wrote:
> This prevent second statistics query be sent before first one is complete.
> This is required since two outstanding queries may cause FW assert.

Please run sparse on your code before submitting patches.

> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
[]
> @@ -1591,10 +1591,16 @@ void bnx2x_stats_init(struct bnx2x *bp)
>  {
>  	int /*abs*/port = BP_PORT(bp);
>  	int mb_idx = BP_FW_MB_IDX(bp);
> +	__le16 init_fw_counter = le16_to_cpu(0xFFFF);

	__le16 init_fw_counter = cpu_to_le16(0xffff);

> +	struct stats_counter *counters = &bp->fw_stats_data->storm_counters;
>  
>  	bp->stats_pending = 0;
>  	bp->executer_idx = 0;
>  	bp->stats_counter = 0;
> +	counters->xstats_counter = init_fw_counter;
> +	counters->tstats_counter = init_fw_counter;
> +	counters->ustats_counter = init_fw_counter;
> +	counters->cstats_counter = init_fw_counter;

It might be better to remove init_fw_counter from
stack and use a #define or just use cpu_to_le16(0xffff)
in each init.

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

* Re: [PATCH net 4/6] bnx2x: fix memory leak in VF
  2013-07-16 15:21 ` [PATCH net 4/6] bnx2x: fix memory leak in VF Dmitry Kravkov
@ 2013-07-16 18:12   ` Sergei Shtylyov
  0 siblings, 0 replies; 12+ messages in thread
From: Sergei Shtylyov @ 2013-07-16 18:12 UTC (permalink / raw)
  To: Dmitry Kravkov; +Cc: davem, netdev

Hello.

On 07/16/2013 07:21 PM, Dmitry Kravkov wrote:

> From: Ariel Elior <ariele@broadcom.com>

> Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
> Signed-off-by: Eilon Greenstein <eilong@broadcom.com>

   Not signed off by the author?

WBR, Sergei

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

* Re: [PATCH net 2/6] bnx2x: prevent statistics update flow to act before statistics are started
  2013-07-16 15:21 ` [PATCH net 2/6] bnx2x: prevent statistics update flow to act before statistics are started Dmitry Kravkov
@ 2013-07-16 18:14   ` Sergei Shtylyov
  0 siblings, 0 replies; 12+ messages in thread
From: Sergei Shtylyov @ 2013-07-16 18:14 UTC (permalink / raw)
  To: Dmitry Kravkov; +Cc: davem, netdev

Hello.

On 07/16/2013 07:21 PM, Dmitry Kravkov wrote:

> This in order to serialize statistics requests sent to FW,
> otherwise two outstanding queries may cause FW assert.

> Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
> Signed-off-by: Ariel Elior <ariele@broadcom.com>
> Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
> ---
>   drivers/net/ethernet/broadcom/bnx2x/bnx2x.h       | 1 +
>   drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c  | 1 +
>   drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c | 6 +++++-
>   3 files changed, 7 insertions(+), 1 deletion(-)

> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> index dedbd76..bdbd87e 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> @@ -1830,6 +1830,7 @@ struct bnx2x {
>
>   	int fp_array_size;
>   	u32 dump_preset_idx;
> +	atomic_t				stats_started;

    Why it's so wildly indented if its neighbors are not?

>   };
>
>   /* Tx queues may be less or equal to Rx queues */

WBR, Sergei

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

* Re: [PATCH net 1/6] bnx2x: properly initialize statistic counters
  2013-07-16 16:24   ` Joe Perches
@ 2013-07-16 18:14     ` Dmitry Kravkov
  2013-07-16 18:35       ` Joe Perches
  0 siblings, 1 reply; 12+ messages in thread
From: Dmitry Kravkov @ 2013-07-16 18:14 UTC (permalink / raw)
  To: Joe Perches; +Cc: Dmitry Kravkov, Dave Miller, netdev

On Tue, Jul 16, 2013 at 7:24 PM, Joe Perches <joe@perches.com> wrote:
> On Tue, 2013-07-16 at 18:21 +0300, Dmitry Kravkov wrote:
>> This prevent second statistics query be sent before first one is complete.
>> This is required since two outstanding queries may cause FW assert.
>
> Please run sparse on your code before submitting patches.
>
>> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
> []
>> @@ -1591,10 +1591,16 @@ void bnx2x_stats_init(struct bnx2x *bp)
>>  {
>>       int /*abs*/port = BP_PORT(bp);
>>       int mb_idx = BP_FW_MB_IDX(bp);
>> +     __le16 init_fw_counter = le16_to_cpu(0xFFFF);
>
>         __le16 init_fw_counter = cpu_to_le16(0xffff);
>

Thanks Joe,  for catching this

>> +     struct stats_counter *counters = &bp->fw_stats_data->storm_counters;
>>
>>       bp->stats_pending = 0;
>>       bp->executer_idx = 0;
>>       bp->stats_counter = 0;
>> +     counters->xstats_counter = init_fw_counter;
>> +     counters->tstats_counter = init_fw_counter;
>> +     counters->ustats_counter = init_fw_counter;
>> +     counters->cstats_counter = init_fw_counter;
>
> It might be better to remove init_fw_counter from
> stack and use a #define or just use cpu_to_le16(0xffff)
> in each init.

I'm not feel well for using same value in each init, probably is better to use
multiple assignment like this:
    counters->xstats_counter =
        counters->tstats_counter =
        counters->ustats_counter =
        counters->cstats_counter = cpu_to_le16(0xffff);

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

* Re: [PATCH net 1/6] bnx2x: properly initialize statistic counters
  2013-07-16 18:14     ` Dmitry Kravkov
@ 2013-07-16 18:35       ` Joe Perches
  0 siblings, 0 replies; 12+ messages in thread
From: Joe Perches @ 2013-07-16 18:35 UTC (permalink / raw)
  To: Dmitry Kravkov; +Cc: Dmitry Kravkov, Dave Miller, netdev

On Tue, 2013-07-16 at 21:14 +0300, Dmitry Kravkov wrote:
> On Tue, Jul 16, 2013 at 7:24 PM, Joe Perches <joe@perches.com> wrote:
> > It might be better to remove init_fw_counter from
> > stack and use a #define or just use cpu_to_le16(0xffff)
> > in each init.
> 
> I'm not feel well for using same value in each init, probably is better to use
> multiple assignment like this:
>     counters->xstats_counter =
>         counters->tstats_counter =
>         counters->ustats_counter =
>         counters->cstats_counter = cpu_to_le16(0xffff);

Your choice though maybe here's a couple of things
to consider:

I do think aligning all the counter variables useful
when reading so

	count->xstats_counter =
	count->tstats_counter =
	count->ustats_counter =
	count->cstats_counter = foo;

would be better.  Unfortunately grep wouldn't show
that actual initialization where:

	count->xstats_counter = foo;
	count->tstats_counter = foo;
	count->ustats_counter = foo;
	count->cstats_counter = foo;

would and the compiler would do the same thing as
the a = b = c = d = foo; case.

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

end of thread, other threads:[~2013-07-16 18:35 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-16 15:21 [PATCH net 0/6] bnx2x: fixes Dmitry Kravkov
2013-07-16 15:21 ` [PATCH net 1/6] bnx2x: properly initialize statistic counters Dmitry Kravkov
2013-07-16 16:24   ` Joe Perches
2013-07-16 18:14     ` Dmitry Kravkov
2013-07-16 18:35       ` Joe Perches
2013-07-16 15:21 ` [PATCH net 2/6] bnx2x: prevent statistics update flow to act before statistics are started Dmitry Kravkov
2013-07-16 18:14   ` Sergei Shtylyov
2013-07-16 15:21 ` [PATCH net 3/6] bnx2x: update fairness parameters following DCB negotiation Dmitry Kravkov
2013-07-16 15:21 ` [PATCH net 4/6] bnx2x: fix memory leak in VF Dmitry Kravkov
2013-07-16 18:12   ` Sergei Shtylyov
2013-07-16 15:21 ` [PATCH net 5/6] bnx2x: fix PTE write access error Dmitry Kravkov
2013-07-16 15:21 ` [PATCH net 6/6] bnx2x: prevent crash in shutdown flow with CNIC Dmitry Kravkov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).