diff options
author | Sathya Perla <sathya.perla@emulex.com> | 2011-06-29 23:33:17 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-06-30 22:32:50 -0700 |
commit | 482c9e798738dea847a5e5e0d20692fe80d48a76 (patch) | |
tree | 737fc458762b7479380fc917c02ef3039bcee4ff /drivers/net/benet/be_cmds.h | |
parent | 2b3f291bf98e7cbf76afd9b0c96c81df5f5890f9 (diff) |
be2net: create/destroy rx-queues on interface open/close
On some skews, the BE card sends pause frames (and not drop pkts) if there are
no more posted buffers available for packet reception. This behaviour has a
side effect: When an interface is disabled, buffers are no longer posted on the
corresponding RX rings. All broadcast and multicast traffic being received on
the port will quickly fill up the PMEM and cause pause push back. As the PMEM
is shared by both the ports, all traffic being received on the other (enabled)
port also gets stalled.
The fix is to destroy RX rings when the interface is disabled. If there is no
RX ring match in the RXF lookup, the packets are discarded and so don't hog the
PMEM.
The RXQ creation cmd must now use MCC instead of MBOX as they are are called
post MCC queue creation.
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/benet/be_cmds.h')
-rw-r--r-- | drivers/net/benet/be_cmds.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/benet/be_cmds.h b/drivers/net/benet/be_cmds.h index f0d745742d9..1151df6b002 100644 --- a/drivers/net/benet/be_cmds.h +++ b/drivers/net/benet/be_cmds.h @@ -1482,6 +1482,8 @@ extern int be_cmd_rxq_create(struct be_adapter *adapter, u32 rss, u8 *rss_id); extern int be_cmd_q_destroy(struct be_adapter *adapter, struct be_queue_info *q, int type); +extern int be_cmd_rxq_destroy(struct be_adapter *adapter, + struct be_queue_info *q); extern int be_cmd_link_status_query(struct be_adapter *adapter, bool *link_up, u8 *mac_speed, u16 *link_speed, u32 dom); extern int be_cmd_reset(struct be_adapter *adapter); |