* [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