* [net-next PATCH 0/5] be2net: fixes
@ 2012-02-24 4:50 Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 1/5] be2net: cancel be_worker during EEH recovery Sathya Perla
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Sathya Perla @ 2012-02-24 4:50 UTC (permalink / raw)
To: netdev
Pls apply the following fixes. Thanks.
Sathya Perla (5):
be2net: cancel be_worker during EEH recovery
be2net: fix tx completion cleanup
be2net: reset queue address after freeing
be2net: enable RSS for ipv6 pkts
be2net: update driver version
drivers/net/ethernet/emulex/benet/be.h | 3 +-
drivers/net/ethernet/emulex/benet/be_cmds.c | 3 +-
drivers/net/ethernet/emulex/benet/be_main.c | 92 +++++++++++++++-----------
3 files changed, 57 insertions(+), 41 deletions(-)
--
1.7.4
^ permalink raw reply [flat|nested] 7+ messages in thread
* [net-next PATCH 1/5] be2net: cancel be_worker during EEH recovery
2012-02-24 4:50 [net-next PATCH 0/5] be2net: fixes Sathya Perla
@ 2012-02-24 4:50 ` Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 2/5] be2net: fix tx completion cleanup Sathya Perla
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Sathya Perla @ 2012-02-24 4:50 UTC (permalink / raw)
To: netdev
EEH recovery involves ring cleanup and re-creation. The worker
thread must not run during EEH cleanup/resume.
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
drivers/net/ethernet/emulex/benet/be.h | 1 +
drivers/net/ethernet/emulex/benet/be_main.c | 13 ++++++++-----
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
index 86f51de..4b1994d 100644
--- a/drivers/net/ethernet/emulex/benet/be.h
+++ b/drivers/net/ethernet/emulex/benet/be.h
@@ -304,6 +304,7 @@ struct be_vf_cfg {
};
#define BE_FLAGS_LINK_STATUS_INIT 1
+#define BE_FLAGS_WORKER_SCHEDULED (1 << 3)
struct be_adapter {
struct pci_dev *pdev;
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 28f2b25..68408d5 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2447,6 +2447,11 @@ static void be_vf_clear(struct be_adapter *adapter)
static int be_clear(struct be_adapter *adapter)
{
+ if (adapter->flags & BE_FLAGS_WORKER_SCHEDULED) {
+ cancel_delayed_work_sync(&adapter->work);
+ adapter->flags &= ~BE_FLAGS_WORKER_SCHEDULED;
+ }
+
if (sriov_enabled(adapter))
be_vf_clear(adapter);
@@ -2648,6 +2653,9 @@ static int be_setup(struct be_adapter *adapter)
goto err;
}
+ schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
+ adapter->flags |= BE_FLAGS_WORKER_SCHEDULED;
+
return 0;
err:
be_clear(adapter);
@@ -3208,8 +3216,6 @@ static void __devexit be_remove(struct pci_dev *pdev)
if (!adapter)
return;
- cancel_delayed_work_sync(&adapter->work);
-
unregister_netdev(adapter->netdev);
be_clear(adapter);
@@ -3533,7 +3539,6 @@ static int __devinit be_probe(struct pci_dev *pdev,
dev_info(&pdev->dev, "%s: %s port %d\n", netdev->name, nic_name(pdev),
adapter->port_num);
- schedule_delayed_work(&adapter->work, msecs_to_jiffies(100));
return 0;
unsetup:
@@ -3563,7 +3568,6 @@ static int be_suspend(struct pci_dev *pdev, pm_message_t state)
struct be_adapter *adapter = pci_get_drvdata(pdev);
struct net_device *netdev = adapter->netdev;
- cancel_delayed_work_sync(&adapter->work);
if (adapter->wol)
be_setup_wol(adapter, true);
@@ -3612,7 +3616,6 @@ static int be_resume(struct pci_dev *pdev)
if (adapter->wol)
be_setup_wol(adapter, false);
- schedule_delayed_work(&adapter->work, msecs_to_jiffies(100));
return 0;
}
--
1.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [net-next PATCH 2/5] be2net: fix tx completion cleanup
2012-02-24 4:50 [net-next PATCH 0/5] be2net: fixes Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 1/5] be2net: cancel be_worker during EEH recovery Sathya Perla
@ 2012-02-24 4:50 ` Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 3/5] be2net: reset queue address after freeing Sathya Perla
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Sathya Perla @ 2012-02-24 4:50 UTC (permalink / raw)
To: netdev
As a part of be_close(), instead of waiting for a max of 200ms for each TXQ,
wait for a total of 200ms for completions from all TXQs to arrive.
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
drivers/net/ethernet/emulex/benet/be_main.c | 73 +++++++++++++++------------
1 files changed, 41 insertions(+), 32 deletions(-)
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 68408d5..36ad9a7 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -1563,51 +1563,62 @@ static void be_rx_cq_clean(struct be_rx_obj *rxo)
rxq->tail = rxq->head = 0;
}
-static void be_tx_compl_clean(struct be_adapter *adapter,
- struct be_tx_obj *txo)
+static void be_tx_compl_clean(struct be_adapter *adapter)
{
- struct be_queue_info *tx_cq = &txo->cq;
- struct be_queue_info *txq = &txo->q;
+ struct be_tx_obj *txo;
+ struct be_queue_info *txq;
struct be_eth_tx_compl *txcp;
u16 end_idx, cmpl = 0, timeo = 0, num_wrbs = 0;
- struct sk_buff **sent_skbs = txo->sent_skb_list;
struct sk_buff *sent_skb;
bool dummy_wrb;
+ int i, pending_txqs;
/* Wait for a max of 200ms for all the tx-completions to arrive. */
do {
- while ((txcp = be_tx_compl_get(tx_cq))) {
- end_idx = AMAP_GET_BITS(struct amap_eth_tx_compl,
- wrb_index, txcp);
- num_wrbs += be_tx_compl_process(adapter, txo, end_idx);
- cmpl++;
- }
- if (cmpl) {
- be_cq_notify(adapter, tx_cq->id, false, cmpl);
- atomic_sub(num_wrbs, &txq->used);
- cmpl = 0;
- num_wrbs = 0;
+ pending_txqs = adapter->num_tx_qs;
+
+ for_all_tx_queues(adapter, txo, i) {
+ txq = &txo->q;
+ while ((txcp = be_tx_compl_get(&txo->cq))) {
+ end_idx =
+ AMAP_GET_BITS(struct amap_eth_tx_compl,
+ wrb_index, txcp);
+ num_wrbs += be_tx_compl_process(adapter, txo,
+ end_idx);
+ cmpl++;
+ }
+ if (cmpl) {
+ be_cq_notify(adapter, txo->cq.id, false, cmpl);
+ atomic_sub(num_wrbs, &txq->used);
+ cmpl = 0;
+ num_wrbs = 0;
+ }
+ if (atomic_read(&txq->used) == 0)
+ pending_txqs--;
}
- if (atomic_read(&txq->used) == 0 || ++timeo > 200)
+ if (pending_txqs == 0 || ++timeo > 200)
break;
mdelay(1);
} while (true);
- if (atomic_read(&txq->used))
- dev_err(&adapter->pdev->dev, "%d pending tx-completions\n",
- atomic_read(&txq->used));
+ for_all_tx_queues(adapter, txo, i) {
+ txq = &txo->q;
+ if (atomic_read(&txq->used))
+ dev_err(&adapter->pdev->dev, "%d pending tx-compls\n",
+ atomic_read(&txq->used));
- /* free posted tx for which compls will never arrive */
- while (atomic_read(&txq->used)) {
- sent_skb = sent_skbs[txq->tail];
- end_idx = txq->tail;
- index_adv(&end_idx,
- wrb_cnt_for_skb(adapter, sent_skb, &dummy_wrb) - 1,
- txq->len);
- num_wrbs = be_tx_compl_process(adapter, txo, end_idx);
- atomic_sub(num_wrbs, &txq->used);
+ /* free posted tx for which compls will never arrive */
+ while (atomic_read(&txq->used)) {
+ sent_skb = txo->sent_skb_list[txq->tail];
+ end_idx = txq->tail;
+ num_wrbs = wrb_cnt_for_skb(adapter, sent_skb,
+ &dummy_wrb);
+ index_adv(&end_idx, num_wrbs - 1, txq->len);
+ num_wrbs = be_tx_compl_process(adapter, txo, end_idx);
+ atomic_sub(num_wrbs, &txq->used);
+ }
}
}
@@ -2236,7 +2247,6 @@ static void be_rx_qs_destroy(struct be_adapter *adapter)
static int be_close(struct net_device *netdev)
{
struct be_adapter *adapter = netdev_priv(netdev);
- struct be_tx_obj *txo;
struct be_eq_obj *eqo;
int i;
@@ -2259,8 +2269,7 @@ static int be_close(struct net_device *netdev)
/* Wait for all pending tx completions to arrive so that
* all tx skbs are freed.
*/
- for_all_tx_queues(adapter, txo, i)
- be_tx_compl_clean(adapter, txo);
+ be_tx_compl_clean(adapter);
be_rx_qs_destroy(adapter);
return 0;
--
1.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [net-next PATCH 3/5] be2net: reset queue address after freeing
2012-02-24 4:50 [net-next PATCH 0/5] be2net: fixes Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 1/5] be2net: cancel be_worker during EEH recovery Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 2/5] be2net: fix tx completion cleanup Sathya Perla
@ 2012-02-24 4:50 ` Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 4/5] be2net: enable RSS for ipv6 pkts Sathya Perla
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Sathya Perla @ 2012-02-24 4:50 UTC (permalink / raw)
To: netdev
This will prevent double free in some cases where be_clear() is called
for cleanup when be_setup() fails half-way.
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
drivers/net/ethernet/emulex/benet/be_main.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 36ad9a7..e382278 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -127,9 +127,11 @@ static inline bool be_is_mc(struct be_adapter *adapter) {
static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q)
{
struct be_dma_mem *mem = &q->dma_mem;
- if (mem->va)
+ if (mem->va) {
dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
mem->dma);
+ mem->va = NULL;
+ }
}
static int be_queue_alloc(struct be_adapter *adapter, struct be_queue_info *q,
@@ -1660,7 +1662,7 @@ static int be_evt_queues_create(struct be_adapter *adapter)
if (rc)
return rc;
}
- return rc;
+ return 0;
}
static void be_mcc_queues_destroy(struct be_adapter *adapter)
--
1.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [net-next PATCH 4/5] be2net: enable RSS for ipv6 pkts
2012-02-24 4:50 [net-next PATCH 0/5] be2net: fixes Sathya Perla
` (2 preceding siblings ...)
2012-02-24 4:50 ` [net-next PATCH 3/5] be2net: reset queue address after freeing Sathya Perla
@ 2012-02-24 4:50 ` Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 5/5] be2net: update driver version Sathya Perla
2012-02-24 6:51 ` [net-next PATCH 0/5] be2net: fixes David Miller
5 siblings, 0 replies; 7+ messages in thread
From: Sathya Perla @ 2012-02-24 4:50 UTC (permalink / raw)
To: netdev
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
drivers/net/ethernet/emulex/benet/be_cmds.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
index 6432efa..398fb5c 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
@@ -1694,7 +1694,8 @@ int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, u16 table_size)
OPCODE_ETH_RSS_CONFIG, sizeof(*req), wrb, NULL);
req->if_id = cpu_to_le32(adapter->if_handle);
- req->enable_rss = cpu_to_le16(RSS_ENABLE_TCP_IPV4 | RSS_ENABLE_IPV4);
+ req->enable_rss = cpu_to_le16(RSS_ENABLE_TCP_IPV4 | RSS_ENABLE_IPV4 |
+ RSS_ENABLE_TCP_IPV6 | RSS_ENABLE_IPV6);
req->cpu_table_size_log2 = cpu_to_le16(fls(table_size) - 1);
memcpy(req->cpu_table, rsstable, table_size);
memcpy(req->hash, myhash, sizeof(myhash));
--
1.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [net-next PATCH 5/5] be2net: update driver version
2012-02-24 4:50 [net-next PATCH 0/5] be2net: fixes Sathya Perla
` (3 preceding siblings ...)
2012-02-24 4:50 ` [net-next PATCH 4/5] be2net: enable RSS for ipv6 pkts Sathya Perla
@ 2012-02-24 4:50 ` Sathya Perla
2012-02-24 6:51 ` [net-next PATCH 0/5] be2net: fixes David Miller
5 siblings, 0 replies; 7+ messages in thread
From: Sathya Perla @ 2012-02-24 4:50 UTC (permalink / raw)
To: netdev
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
drivers/net/ethernet/emulex/benet/be.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
index 4b1994d..c357172 100644
--- a/drivers/net/ethernet/emulex/benet/be.h
+++ b/drivers/net/ethernet/emulex/benet/be.h
@@ -33,7 +33,7 @@
#include "be_hw.h"
-#define DRV_VER "4.0.100u"
+#define DRV_VER "4.2.116u"
#define DRV_NAME "be2net"
#define BE_NAME "ServerEngines BladeEngine2 10Gbps NIC"
#define BE3_NAME "ServerEngines BladeEngine3 10Gbps NIC"
--
1.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [net-next PATCH 0/5] be2net: fixes
2012-02-24 4:50 [net-next PATCH 0/5] be2net: fixes Sathya Perla
` (4 preceding siblings ...)
2012-02-24 4:50 ` [net-next PATCH 5/5] be2net: update driver version Sathya Perla
@ 2012-02-24 6:51 ` David Miller
5 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2012-02-24 6:51 UTC (permalink / raw)
To: sathya.perla; +Cc: netdev
From: Sathya Perla <sathya.perla@emulex.com>
Date: Fri, 24 Feb 2012 10:20:12 +0530
> Pls apply the following fixes. Thanks.
>
> Sathya Perla (5):
> be2net: cancel be_worker during EEH recovery
> be2net: fix tx completion cleanup
> be2net: reset queue address after freeing
> be2net: enable RSS for ipv6 pkts
> be2net: update driver version
All applied, thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-02-24 6:51 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-24 4:50 [net-next PATCH 0/5] be2net: fixes Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 1/5] be2net: cancel be_worker during EEH recovery Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 2/5] be2net: fix tx completion cleanup Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 3/5] be2net: reset queue address after freeing Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 4/5] be2net: enable RSS for ipv6 pkts Sathya Perla
2012-02-24 4:50 ` [net-next PATCH 5/5] be2net: update driver version Sathya Perla
2012-02-24 6:51 ` [net-next PATCH 0/5] be2net: fixes 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).