* [PATCH -next 1/8] bnx2: Zero out status block before chip reset.
@ 2009-08-22 2:20 Michael Chan
2009-08-22 2:20 ` [PATCH -next 2/8] bnx2: Check if_running() before touching chip registers Michael Chan
` (7 more replies)
0 siblings, 8 replies; 9+ messages in thread
From: Michael Chan @ 2009-08-22 2:20 UTC (permalink / raw)
To: davem; +Cc: netdev
In case IRQs are shared, we will not mistakenly start processing
the ring based on old status block indices.
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
drivers/net/bnx2.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 756d4b4..e75b6e9 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -4858,6 +4858,7 @@ bnx2_init_chip(struct bnx2 *bp)
bnx2_reg_wr_ind(bp, BNX2_RBUF_CONFIG2, BNX2_RBUF_CONFIG2_VAL(mtu));
bnx2_reg_wr_ind(bp, BNX2_RBUF_CONFIG3, BNX2_RBUF_CONFIG3_VAL(mtu));
+ memset(bp->bnx2_napi[0].status_blk.msi, 0, bp->status_stats_size);
for (i = 0; i < BNX2_MAX_MSIX_VEC; i++)
bp->bnx2_napi[i].last_status_idx = 0;
--
1.5.6.GIT
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH -next 2/8] bnx2: Check if_running() before touching chip registers.
2009-08-22 2:20 [PATCH -next 1/8] bnx2: Zero out status block before chip reset Michael Chan
@ 2009-08-22 2:20 ` Michael Chan
2009-08-22 2:20 ` [PATCH -next 3/8] bnx2: Close device if MTU change or ring size change fails Michael Chan
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Michael Chan @ 2009-08-22 2:20 UTC (permalink / raw)
To: davem; +Cc: netdev
Add this check to bnx2_netif_stop() and bnx2_vlan_rx_register() to
prevent bus lockups on some systems when the chip is in low power state.
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
drivers/net/bnx2.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index e75b6e9..9cfd460 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -619,6 +619,9 @@ bnx2_disable_int_sync(struct bnx2 *bp)
int i;
atomic_inc(&bp->intr_sem);
+ if (!netif_running(bp->dev))
+ return;
+
bnx2_disable_int(bp);
for (i = 0; i < bp->irq_nvecs; i++)
synchronize_irq(bp->irq_tbl[i].vector);
@@ -6254,9 +6257,14 @@ bnx2_vlan_rx_register(struct net_device *dev, struct vlan_group *vlgrp)
{
struct bnx2 *bp = netdev_priv(dev);
- bnx2_netif_stop(bp);
+ if (netif_running(dev))
+ bnx2_netif_stop(bp);
bp->vlgrp = vlgrp;
+
+ if (!netif_running(dev))
+ return;
+
bnx2_set_rx_mode(dev);
if (bp->flags & BNX2_FLAG_CAN_KEEP_VLAN)
bnx2_fw_sync(bp, BNX2_DRV_MSG_CODE_KEEP_VLAN_UPDATE, 0, 1);
--
1.5.6.GIT
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH -next 3/8] bnx2: Close device if MTU change or ring size change fails.
2009-08-22 2:20 [PATCH -next 1/8] bnx2: Zero out status block before chip reset Michael Chan
2009-08-22 2:20 ` [PATCH -next 2/8] bnx2: Check if_running() before touching chip registers Michael Chan
@ 2009-08-22 2:20 ` Michael Chan
2009-08-22 2:20 ` [PATCH -next 4/8] bnx2: Apply BROKEN_STATS workaround to 5706 and 5708 Michael Chan
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Michael Chan @ 2009-08-22 2:20 UTC (permalink / raw)
To: davem; +Cc: netdev
When unable to allocate memory for new MTU or new ring size, we need
to close the device to prevent it from crashing.
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
drivers/net/bnx2.c | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 9cfd460..1d502e6 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -6992,9 +6992,14 @@ bnx2_change_ring_size(struct bnx2 *bp, u32 rx, u32 tx)
int rc;
rc = bnx2_alloc_mem(bp);
- if (rc)
+ if (!rc)
+ rc = bnx2_init_nic(bp, 0);
+
+ if (rc) {
+ bnx2_napi_enable(bp);
+ dev_close(bp->dev);
return rc;
- bnx2_init_nic(bp, 0);
+ }
bnx2_netif_start(bp);
}
return 0;
--
1.5.6.GIT
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH -next 4/8] bnx2: Apply BROKEN_STATS workaround to 5706 and 5708.
2009-08-22 2:20 [PATCH -next 1/8] bnx2: Zero out status block before chip reset Michael Chan
2009-08-22 2:20 ` [PATCH -next 2/8] bnx2: Check if_running() before touching chip registers Michael Chan
2009-08-22 2:20 ` [PATCH -next 3/8] bnx2: Close device if MTU change or ring size change fails Michael Chan
@ 2009-08-22 2:20 ` Michael Chan
2009-08-22 2:20 ` [PATCH -next 5/8] bnx2: Report FTQ discard counter Michael Chan
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Michael Chan @ 2009-08-22 2:20 UTC (permalink / raw)
To: davem; +Cc: netdev
Add flag to expand the workaround to both chips.
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
drivers/net/bnx2.c | 7 ++++---
drivers/net/bnx2.h | 1 +
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 1d502e6..085c2dd 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -4900,7 +4900,7 @@ bnx2_init_chip(struct bnx2 *bp)
REG_WR(bp, BNX2_HC_CMD_TICKS,
(bp->cmd_ticks_int << 16) | bp->cmd_ticks);
- if (CHIP_NUM(bp) == CHIP_NUM_5708)
+ if (bp->flags & BNX2_FLAG_BROKEN_STATS)
REG_WR(bp, BNX2_HC_STATS_TICKS, 0);
else
REG_WR(bp, BNX2_HC_STATS_TICKS, bp->stats_ticks);
@@ -6025,7 +6025,7 @@ bnx2_timer(unsigned long data)
bnx2_reg_rd_ind(bp, BNX2_FW_RX_DROP_COUNT);
/* workaround occasional corrupted counters */
- if (CHIP_NUM(bp) == CHIP_NUM_5708 && bp->stats_ticks)
+ if ((bp->flags & BNX2_FLAG_BROKEN_STATS) && bp->stats_ticks)
REG_WR(bp, BNX2_HC_COMMAND, bp->hc_cmd |
BNX2_HC_COMMAND_STATS_NOW);
@@ -6941,7 +6941,7 @@ bnx2_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal)
0xff;
bp->stats_ticks = coal->stats_block_coalesce_usecs;
- if (CHIP_NUM(bp) == CHIP_NUM_5708) {
+ if (bp->flags & BNX2_FLAG_BROKEN_STATS) {
if (bp->stats_ticks != 0 && bp->stats_ticks != USEC_PER_SEC)
bp->stats_ticks = USEC_PER_SEC;
}
@@ -7722,6 +7722,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
rc = -EIO;
goto err_out_unmap;
}
+ bp->flags |= BNX2_FLAG_BROKEN_STATS;
}
if (CHIP_NUM(bp) == CHIP_NUM_5709 && CHIP_REV(bp) != CHIP_REV_Ax) {
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h
index f1edfaa..3c004b4 100644
--- a/drivers/net/bnx2.h
+++ b/drivers/net/bnx2.h
@@ -6718,6 +6718,7 @@ struct bnx2 {
BNX2_FLAG_USING_MSIX)
#define BNX2_FLAG_JUMBO_BROKEN 0x00000800
#define BNX2_FLAG_CAN_KEEP_VLAN 0x00001000
+#define BNX2_FLAG_BROKEN_STATS 0x00002000
struct bnx2_napi bnx2_napi[BNX2_MAX_MSIX_VEC];
--
1.5.6.GIT
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH -next 5/8] bnx2: Report FTQ discard counter.
2009-08-22 2:20 [PATCH -next 1/8] bnx2: Zero out status block before chip reset Michael Chan
` (2 preceding siblings ...)
2009-08-22 2:20 ` [PATCH -next 4/8] bnx2: Apply BROKEN_STATS workaround to 5706 and 5708 Michael Chan
@ 2009-08-22 2:20 ` Michael Chan
2009-08-22 2:20 ` [PATCH -next 6/8] bnx2: Refine coalescing parameters Michael Chan
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Michael Chan @ 2009-08-22 2:20 UTC (permalink / raw)
To: davem; +Cc: netdev
Report this counter to ethtool -S and include it in netstat.
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
drivers/net/bnx2.c | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 085c2dd..e025833 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -6485,7 +6485,8 @@ bnx2_get_stats(struct net_device *dev)
stats_blk->stat_EtherStatsOverrsizePkts);
net_stats->rx_over_errors =
- (unsigned long) stats_blk->stat_IfInMBUFDiscards;
+ (unsigned long) (stats_blk->stat_IfInFTQDiscards +
+ stats_blk->stat_IfInMBUFDiscards);
net_stats->rx_frame_errors =
(unsigned long) stats_blk->stat_Dot3StatsAlignmentErrors;
@@ -6518,8 +6519,8 @@ bnx2_get_stats(struct net_device *dev)
net_stats->tx_carrier_errors;
net_stats->rx_missed_errors =
- (unsigned long) (stats_blk->stat_IfInMBUFDiscards +
- stats_blk->stat_FwRxDrop);
+ (unsigned long) (stats_blk->stat_IfInFTQDiscards +
+ stats_blk->stat_IfInMBUFDiscards + stats_blk->stat_FwRxDrop);
return net_stats;
}
@@ -7090,11 +7091,9 @@ bnx2_set_tso(struct net_device *dev, u32 data)
return 0;
}
-#define BNX2_NUM_STATS 46
-
static struct {
char string[ETH_GSTRING_LEN];
-} bnx2_stats_str_arr[BNX2_NUM_STATS] = {
+} bnx2_stats_str_arr[] = {
{ "rx_bytes" },
{ "rx_error_bytes" },
{ "tx_bytes" },
@@ -7139,10 +7138,14 @@ static struct {
{ "tx_xoff_frames" },
{ "rx_mac_ctrl_frames" },
{ "rx_filtered_packets" },
+ { "rx_ftq_discards" },
{ "rx_discards" },
{ "rx_fw_discards" },
};
+#define BNX2_NUM_STATS (sizeof(bnx2_stats_str_arr)/\
+ sizeof(bnx2_stats_str_arr[0]))
+
#define STATS_OFFSET32(offset_name) (offsetof(struct statistics_block, offset_name) / 4)
static const unsigned long bnx2_stats_offset_arr[BNX2_NUM_STATS] = {
@@ -7190,6 +7193,7 @@ static const unsigned long bnx2_stats_offset_arr[BNX2_NUM_STATS] = {
STATS_OFFSET32(stat_OutXoffSent),
STATS_OFFSET32(stat_MacControlFramesReceived),
STATS_OFFSET32(stat_IfInFramesL2FilterDiscards),
+ STATS_OFFSET32(stat_IfInFTQDiscards),
STATS_OFFSET32(stat_IfInMBUFDiscards),
STATS_OFFSET32(stat_FwRxDrop),
};
@@ -7202,7 +7206,7 @@ static u8 bnx2_5706_stats_len_arr[BNX2_NUM_STATS] = {
4,0,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,
- 4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,
};
static u8 bnx2_5708_stats_len_arr[BNX2_NUM_STATS] = {
@@ -7210,7 +7214,7 @@ static u8 bnx2_5708_stats_len_arr[BNX2_NUM_STATS] = {
4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,
- 4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,
};
#define BNX2_NUM_TESTS 6
--
1.5.6.GIT
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH -next 6/8] bnx2: Refine coalescing parameters.
2009-08-22 2:20 [PATCH -next 1/8] bnx2: Zero out status block before chip reset Michael Chan
` (3 preceding siblings ...)
2009-08-22 2:20 ` [PATCH -next 5/8] bnx2: Report FTQ discard counter Michael Chan
@ 2009-08-22 2:20 ` Michael Chan
2009-08-22 2:20 ` [PATCH -next 7/8] bnx2: Use const on flash_table structure Michael Chan
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Michael Chan @ 2009-08-22 2:20 UTC (permalink / raw)
To: davem; +Cc: netdev
- Set the USE_INT_PARAM bit so the rx-frames-irq and tx-frames-irq will take
effect on 5709.
- Increase the default rx-frames to reduce interrupt count.
- Decrease the default rx-frames-irq and tx-frames-irq to catch more events
during NAPI poll.
All these will reduce interrupts without affecting latency.
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
drivers/net/bnx2.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index e025833..ea6e6b7 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -4921,7 +4921,7 @@ bnx2_init_chip(struct bnx2 *bp)
}
if (bp->flags & BNX2_FLAG_ONE_SHOT_MSI)
- val |= BNX2_HC_CONFIG_ONE_SHOT;
+ val |= BNX2_HC_CONFIG_ONE_SHOT | BNX2_HC_CONFIG_USE_INT_PARAM;
REG_WR(bp, BNX2_HC_CONFIG, val);
@@ -7858,13 +7858,13 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
bp->rx_csum = 1;
- bp->tx_quick_cons_trip_int = 20;
+ bp->tx_quick_cons_trip_int = 2;
bp->tx_quick_cons_trip = 20;
- bp->tx_ticks_int = 80;
+ bp->tx_ticks_int = 18;
bp->tx_ticks = 80;
- bp->rx_quick_cons_trip_int = 6;
- bp->rx_quick_cons_trip = 6;
+ bp->rx_quick_cons_trip_int = 2;
+ bp->rx_quick_cons_trip = 12;
bp->rx_ticks_int = 18;
bp->rx_ticks = 18;
--
1.5.6.GIT
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH -next 7/8] bnx2: Use const on flash_table structure.
2009-08-22 2:20 [PATCH -next 1/8] bnx2: Zero out status block before chip reset Michael Chan
` (4 preceding siblings ...)
2009-08-22 2:20 ` [PATCH -next 6/8] bnx2: Refine coalescing parameters Michael Chan
@ 2009-08-22 2:20 ` Michael Chan
2009-08-22 2:20 ` [PATCH -next 8/8] bnx2: Update version to 2.0.2 Michael Chan
2009-08-23 0:50 ` [PATCH -next 1/8] bnx2: Zero out status block before chip reset David Miller
7 siblings, 0 replies; 9+ messages in thread
From: Michael Chan @ 2009-08-22 2:20 UTC (permalink / raw)
To: davem; +Cc: netdev
The structure, once initialized, never changes.
Signed-off-by: Benjamin Li <benli@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
drivers/net/bnx2.c | 6 +++---
drivers/net/bnx2.h | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index ea6e6b7..58ab3f4 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -145,7 +145,7 @@ static DEFINE_PCI_DEVICE_TABLE(bnx2_pci_tbl) = {
{ 0, }
};
-static struct flash_spec flash_table[] =
+static const struct flash_spec flash_table[] =
{
#define BUFFERED_FLAGS (BNX2_NV_BUFFERED | BNX2_NV_TRANSLATE)
#define NONBUFFERED_FLAGS (BNX2_NV_WREN)
@@ -234,7 +234,7 @@ static struct flash_spec flash_table[] =
"Buffered flash (256kB)"},
};
-static struct flash_spec flash_5709 = {
+static const struct flash_spec flash_5709 = {
.flags = BNX2_NV_BUFFERED,
.page_bits = BCM5709_FLASH_PAGE_BITS,
.page_size = BCM5709_FLASH_PAGE_SIZE,
@@ -4227,7 +4227,7 @@ bnx2_init_nvram(struct bnx2 *bp)
{
u32 val;
int j, entry_count, rc = 0;
- struct flash_spec *flash;
+ const struct flash_spec *flash;
if (CHIP_NUM(bp) == CHIP_NUM_5709) {
bp->flash_info = &flash_5709;
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h
index 3c004b4..7544188 100644
--- a/drivers/net/bnx2.h
+++ b/drivers/net/bnx2.h
@@ -6889,7 +6889,7 @@ struct bnx2 {
int pm_cap;
int pcix_cap;
- struct flash_spec *flash_info;
+ const struct flash_spec *flash_info;
u32 flash_size;
int status_stats_size;
--
1.5.6.GIT
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH -next 8/8] bnx2: Update version to 2.0.2.
2009-08-22 2:20 [PATCH -next 1/8] bnx2: Zero out status block before chip reset Michael Chan
` (5 preceding siblings ...)
2009-08-22 2:20 ` [PATCH -next 7/8] bnx2: Use const on flash_table structure Michael Chan
@ 2009-08-22 2:20 ` Michael Chan
2009-08-23 0:50 ` [PATCH -next 1/8] bnx2: Zero out status block before chip reset David Miller
7 siblings, 0 replies; 9+ messages in thread
From: Michael Chan @ 2009-08-22 2:20 UTC (permalink / raw)
To: davem; +Cc: netdev
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
drivers/net/bnx2.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 58ab3f4..4450177 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -59,8 +59,8 @@
#define DRV_MODULE_NAME "bnx2"
#define PFX DRV_MODULE_NAME ": "
-#define DRV_MODULE_VERSION "2.0.1"
-#define DRV_MODULE_RELDATE "May 6, 2009"
+#define DRV_MODULE_VERSION "2.0.2"
+#define DRV_MODULE_RELDATE "Aug 21, 2009"
#define FW_MIPS_FILE_06 "bnx2/bnx2-mips-06-4.6.16.fw"
#define FW_RV2P_FILE_06 "bnx2/bnx2-rv2p-06-4.6.16.fw"
#define FW_MIPS_FILE_09 "bnx2/bnx2-mips-09-4.6.17.fw"
--
1.5.6.GIT
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH -next 1/8] bnx2: Zero out status block before chip reset.
2009-08-22 2:20 [PATCH -next 1/8] bnx2: Zero out status block before chip reset Michael Chan
` (6 preceding siblings ...)
2009-08-22 2:20 ` [PATCH -next 8/8] bnx2: Update version to 2.0.2 Michael Chan
@ 2009-08-23 0:50 ` David Miller
7 siblings, 0 replies; 9+ messages in thread
From: David Miller @ 2009-08-23 0:50 UTC (permalink / raw)
To: mchan; +Cc: netdev
All of these patches look good, applied to net-next-2.6
Thanks!
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-08-23 0:50 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-22 2:20 [PATCH -next 1/8] bnx2: Zero out status block before chip reset Michael Chan
2009-08-22 2:20 ` [PATCH -next 2/8] bnx2: Check if_running() before touching chip registers Michael Chan
2009-08-22 2:20 ` [PATCH -next 3/8] bnx2: Close device if MTU change or ring size change fails Michael Chan
2009-08-22 2:20 ` [PATCH -next 4/8] bnx2: Apply BROKEN_STATS workaround to 5706 and 5708 Michael Chan
2009-08-22 2:20 ` [PATCH -next 5/8] bnx2: Report FTQ discard counter Michael Chan
2009-08-22 2:20 ` [PATCH -next 6/8] bnx2: Refine coalescing parameters Michael Chan
2009-08-22 2:20 ` [PATCH -next 7/8] bnx2: Use const on flash_table structure Michael Chan
2009-08-22 2:20 ` [PATCH -next 8/8] bnx2: Update version to 2.0.2 Michael Chan
2009-08-23 0:50 ` [PATCH -next 1/8] bnx2: Zero out status block before chip reset David Miller
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).