netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ 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; 10+ 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] 10+ messages in thread

* [net-next PATCH 0/5] be2net: fixes
@ 2012-09-27  6:32 Sathya Perla
  0 siblings, 0 replies; 10+ messages in thread
From: Sathya Perla @ 2012-09-27  6:32 UTC (permalink / raw)
  To: netdev; +Cc: Sathya Perla

Pls apply. Thanks.

Sathya Perla (5):
  be2net: remove type argument of be_cmd_mac_addr_query()
  be2net: fix wrong handling of be_setup() failure in be_probe()
  be2net: cleanup code related to be_link_status_query()
  be2net: get rid of AMAP_SET/GET macros in TX path
  be2net: fixup log messages

 drivers/net/ethernet/emulex/benet/be.h         |    1 -
 drivers/net/ethernet/emulex/benet/be_cmds.c    |   53 ++++++++---
 drivers/net/ethernet/emulex/benet/be_cmds.h    |    6 +-
 drivers/net/ethernet/emulex/benet/be_ethtool.c |   57 +++---------
 drivers/net/ethernet/emulex/benet/be_hw.h      |   62 ++++---------
 drivers/net/ethernet/emulex/benet/be_main.c    |  118 ++++++++++++------------
 6 files changed, 130 insertions(+), 167 deletions(-)

-- 
1.7.4

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

* Re: [net-next PATCH 0/5] be2net fixes
  2012-08-29  6:37 [net-next PATCH 0/5] be2net fixes Sathya Perla
@ 2012-08-30 17:27 ` David Miller
  0 siblings, 0 replies; 10+ messages in thread
From: David Miller @ 2012-08-30 17:27 UTC (permalink / raw)
  To: sathya.perla; +Cc: netdev

From: Sathya Perla <sathya.perla@emulex.com>
Date: Wed, 29 Aug 2012 12:07:39 +0530

> Pls apply.
> 
> Sathya Perla (2):
>   be2net: create RSS rings even in multi-channel configs
>   be2net: fixup malloc/free of adapter->pmac_id
> 
> Vasundhara Volam (3):
>   be2net: fix max VFs reported by HW
>   be2net: fix FW default for VF tx-rate
>   be2net: modify log msg for lack of privilege error

All applied to net-next, thanks.

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

* [net-next PATCH 0/5] be2net fixes
@ 2012-08-29  6:37 Sathya Perla
  2012-08-30 17:27 ` David Miller
  0 siblings, 1 reply; 10+ messages in thread
From: Sathya Perla @ 2012-08-29  6:37 UTC (permalink / raw)
  To: netdev; +Cc: Sathya Perla

Pls apply.

Sathya Perla (2):
  be2net: create RSS rings even in multi-channel configs
  be2net: fixup malloc/free of adapter->pmac_id

Vasundhara Volam (3):
  be2net: fix max VFs reported by HW
  be2net: fix FW default for VF tx-rate
  be2net: modify log msg for lack of privilege error

 drivers/net/ethernet/emulex/benet/be.h      |    1 +
 drivers/net/ethernet/emulex/benet/be_cmds.c |    2 +-
 drivers/net/ethernet/emulex/benet/be_main.c |   22 ++++++++++++----------
 3 files changed, 14 insertions(+), 11 deletions(-)

-- 
1.7.4

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

end of thread, other threads:[~2012-09-27  6:56 UTC | newest]

Thread overview: 10+ 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
2012-08-29  6:37 [net-next PATCH 0/5] be2net fixes Sathya Perla
2012-08-30 17:27 ` David Miller
2012-09-27  6:32 [net-next PATCH 0/5] be2net: fixes Sathya Perla

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).