netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] be2net: fixes
@ 2013-05-08 12:05 Sathya Perla
  2013-05-08 12:05 ` [PATCH 1/4] be2net: provision VF resources before enabling SR-IOV Sathya Perla
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Sathya Perla @ 2013-05-08 12:05 UTC (permalink / raw)
  To: netdev

Pls apply.

Sathya Perla (4):
  be2net: provision VF resources before enabling SR-IOV
  be2net: fix payload_len value for GET_MAC_LIST cmd req
  be2net: fix EQ from getting full while cleaning RX CQ
  be2net: disable TX in be_close()

 drivers/net/ethernet/emulex/benet/be_cmds.c |    5 +--
 drivers/net/ethernet/emulex/benet/be_main.c |   30 ++++++++++++++------------
 2 files changed, 18 insertions(+), 17 deletions(-)

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

* [PATCH 1/4] be2net: provision VF resources before enabling SR-IOV
  2013-05-08 12:05 [PATCH 0/4] be2net: fixes Sathya Perla
@ 2013-05-08 12:05 ` Sathya Perla
  2013-05-08 12:05 ` [PATCH 2/4] be2net: fix payload_len value for GET_MAC_LIST cmd req Sathya Perla
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Sathya Perla @ 2013-05-08 12:05 UTC (permalink / raw)
  To: netdev

When the PF driver calls pci_enable_sriov(), the VFs may be probed
inline before the call returns. So, the resources required for all VFs
must be provisioned by the PF driver *before* calling pci_enable_sriov();
else, VF probe will fail.

Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
 drivers/net/ethernet/emulex/benet/be_main.c |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 6c52a60..b304b83 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2783,6 +2783,8 @@ static void be_vf_clear(struct be_adapter *adapter)
 		goto done;
 	}
 
+	pci_disable_sriov(adapter->pdev);
+
 	for_all_vfs(adapter, vf_cfg, vf) {
 		if (lancer_chip(adapter))
 			be_cmd_set_mac_list(adapter, NULL, 0, vf + 1);
@@ -2792,7 +2794,6 @@ static void be_vf_clear(struct be_adapter *adapter)
 
 		be_cmd_if_destroy(adapter, vf_cfg->if_handle, vf + 1);
 	}
-	pci_disable_sriov(adapter->pdev);
 done:
 	kfree(adapter->vf_cfg);
 	adapter->num_vfs = 0;
@@ -2889,13 +2890,8 @@ static int be_vf_setup(struct be_adapter *adapter)
 			dev_info(dev, "Device supports %d VFs and not %d\n",
 				 adapter->dev_num_vfs, num_vfs);
 		adapter->num_vfs = min_t(u16, num_vfs, adapter->dev_num_vfs);
-
-		status = pci_enable_sriov(adapter->pdev, num_vfs);
-		if (status) {
-			dev_err(dev, "SRIOV enable failed\n");
-			adapter->num_vfs = 0;
+		if (!adapter->num_vfs)
 			return 0;
-		}
 	}
 
 	status = be_vf_setup_init(adapter);
@@ -2944,6 +2940,15 @@ static int be_vf_setup(struct be_adapter *adapter)
 
 		be_cmd_enable_vf(adapter, vf + 1);
 	}
+
+	if (!old_vfs) {
+		status = pci_enable_sriov(adapter->pdev, adapter->num_vfs);
+		if (status) {
+			dev_err(dev, "SRIOV enable failed\n");
+			adapter->num_vfs = 0;
+			goto err;
+		}
+	}
 	return 0;
 err:
 	dev_err(dev, "VF setup failed\n");
@@ -3198,7 +3203,7 @@ static int be_setup(struct be_adapter *adapter)
 		be_cmd_set_flow_control(adapter, adapter->tx_fc,
 					adapter->rx_fc);
 
-	if (be_physfn(adapter) && num_vfs) {
+	if (be_physfn(adapter)) {
 		if (adapter->dev_num_vfs)
 			be_vf_setup(adapter);
 		else
-- 
1.7.1

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

* [PATCH 2/4] be2net: fix payload_len value for GET_MAC_LIST cmd req
  2013-05-08 12:05 [PATCH 0/4] be2net: fixes Sathya Perla
  2013-05-08 12:05 ` [PATCH 1/4] be2net: provision VF resources before enabling SR-IOV Sathya Perla
@ 2013-05-08 12:05 ` Sathya Perla
  2013-05-08 12:05 ` [PATCH 3/4] be2net: fix EQ from getting full while cleaning RX CQ Sathya Perla
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Sathya Perla @ 2013-05-08 12:05 UTC (permalink / raw)
  To: netdev

The buffer size for a FW cmd request must be big enough to fit the response,
else the cmd fails. For GET_MAC_LIST cmd, though the memory allocated for
the cmd is big enough to fit the response, the payload_len value in the
WRB hdr is being set to the request length only.
Fix this for GET_MAC_LIST cmd.

Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
 drivers/net/ethernet/emulex/benet/be_cmds.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
index e1e5bb9..fd7b547 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
@@ -2640,9 +2640,8 @@ int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac,
 	req = get_mac_list_cmd.va;
 
 	be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
-				OPCODE_COMMON_GET_MAC_LIST, sizeof(*req),
-				wrb, &get_mac_list_cmd);
-
+			       OPCODE_COMMON_GET_MAC_LIST,
+			       get_mac_list_cmd.size, wrb, &get_mac_list_cmd);
 	req->hdr.domain = domain;
 	req->mac_type = MAC_ADDRESS_TYPE_NETWORK;
 	req->perm_override = 1;
-- 
1.7.1

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

* [PATCH 3/4] be2net: fix EQ from getting full while cleaning RX CQ
  2013-05-08 12:05 [PATCH 0/4] be2net: fixes Sathya Perla
  2013-05-08 12:05 ` [PATCH 1/4] be2net: provision VF resources before enabling SR-IOV Sathya Perla
  2013-05-08 12:05 ` [PATCH 2/4] be2net: fix payload_len value for GET_MAC_LIST cmd req Sathya Perla
@ 2013-05-08 12:05 ` Sathya Perla
  2013-05-08 12:05 ` [PATCH 4/4] be2net: disable TX in be_close() Sathya Perla
  2013-05-08 18:59 ` [PATCH 0/4] be2net: fixes David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: Sathya Perla @ 2013-05-08 12:05 UTC (permalink / raw)
  To: netdev

While cleaning RX queues, the CQ DB may be rung several times (with rearm)
while waiting for the flush compl. Each CQ-notify with rearm can result in
an event. The EQ may get full resulting in a HW error.

Fix this by not re-arming the CQ while notifying a valid completion.
Also, there's no need to wait for 1ms after destroying RXQ, as the code in
be_rx_cq_clean() waits for the flush compl to arrive.

Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
 drivers/net/ethernet/emulex/benet/be_main.c |    7 +------
 1 files changed, 1 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index b304b83..792d838 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -1827,7 +1827,7 @@ static void be_rx_cq_clean(struct be_rx_obj *rxo)
 			mdelay(1);
 		} else {
 			be_rx_compl_discard(rxo, rxcp);
-			be_cq_notify(adapter, rx_cq->id, true, 1);
+			be_cq_notify(adapter, rx_cq->id, false, 1);
 			if (rxcp->num_rcvd == 0)
 				break;
 		}
@@ -2533,11 +2533,6 @@ static void be_rx_qs_destroy(struct be_adapter *adapter)
 		q = &rxo->q;
 		if (q->created) {
 			be_cmd_rxq_destroy(adapter, q);
-			/* After the rxq is invalidated, wait for a grace time
-			 * of 1ms for all dma to end and the flush compl to
-			 * arrive
-			 */
-			mdelay(1);
 			be_rx_cq_clean(rxo);
 		}
 		be_queue_free(adapter, q);
-- 
1.7.1

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

* [PATCH 4/4] be2net: disable TX in be_close()
  2013-05-08 12:05 [PATCH 0/4] be2net: fixes Sathya Perla
                   ` (2 preceding siblings ...)
  2013-05-08 12:05 ` [PATCH 3/4] be2net: fix EQ from getting full while cleaning RX CQ Sathya Perla
@ 2013-05-08 12:05 ` Sathya Perla
  2013-05-08 18:59 ` [PATCH 0/4] be2net: fixes David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: Sathya Perla @ 2013-05-08 12:05 UTC (permalink / raw)
  To: netdev

be_close() followed by be_clear() is called as a part of cleanup in the
EEH/AER flow.  This patch stops TX in be_close() before cleaning/freeing
up the TX queues in be_clear(). This prevents be_xmit() from being called
while TX queues no longer exist.

Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
 drivers/net/ethernet/emulex/benet/be_main.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 792d838..a444110 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2559,6 +2559,7 @@ static int be_close(struct net_device *netdev)
 	 * all tx skbs are freed.
 	 */
 	be_tx_compl_clean(adapter);
+	netif_tx_disable(netdev);
 
 	be_rx_qs_destroy(adapter);
 
@@ -2667,6 +2668,7 @@ static int be_open(struct net_device *netdev)
 	if (!status)
 		be_link_status_update(adapter, link_status);
 
+	netif_tx_start_all_queues(netdev);
 	be_roce_dev_open(adapter);
 	return 0;
 err:
-- 
1.7.1

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

* Re: [PATCH 0/4] be2net: fixes
  2013-05-08 12:05 [PATCH 0/4] be2net: fixes Sathya Perla
                   ` (3 preceding siblings ...)
  2013-05-08 12:05 ` [PATCH 4/4] be2net: disable TX in be_close() Sathya Perla
@ 2013-05-08 18:59 ` David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2013-05-08 18:59 UTC (permalink / raw)
  To: sathya.perla; +Cc: netdev

From: Sathya Perla <sathya.perla@emulex.com>
Date: Wed, 8 May 2013 17:35:46 +0530

> Pls apply.
> 
> Sathya Perla (4):
>   be2net: provision VF resources before enabling SR-IOV
>   be2net: fix payload_len value for GET_MAC_LIST cmd req
>   be2net: fix EQ from getting full while cleaning RX CQ
>   be2net: disable TX in be_close()

Series applied, thanks.

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

end of thread, other threads:[~2013-05-08 19:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-08 12:05 [PATCH 0/4] be2net: fixes Sathya Perla
2013-05-08 12:05 ` [PATCH 1/4] be2net: provision VF resources before enabling SR-IOV Sathya Perla
2013-05-08 12:05 ` [PATCH 2/4] be2net: fix payload_len value for GET_MAC_LIST cmd req Sathya Perla
2013-05-08 12:05 ` [PATCH 3/4] be2net: fix EQ from getting full while cleaning RX CQ Sathya Perla
2013-05-08 12:05 ` [PATCH 4/4] be2net: disable TX in be_close() Sathya Perla
2013-05-08 18:59 ` [PATCH 0/4] 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).