* [PATCH 0/2] be2net: patch set
@ 2014-04-14 10:42 Sathya Perla
2014-04-14 10:42 ` [PATCH 1/2] be2net: Fix to reap TX compls till HW doesn't respond for some time Sathya Perla
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Sathya Perla @ 2014-04-14 10:42 UTC (permalink / raw)
To: netdev
Patch 1/2 is a v2 of a patch that was submitted earlier (as a part of a
different patch-set). v2 incorporates a suggestion given by David Laight
for how long to poll for pending TX completions while disabling a device.
Patch 2/2 fixes a crash in be_remove()->be_close()
path after be2net has aborted an EEH error recovery
due to a permanant failure.
Kalesh AP (1):
be2net: Fix invocation of be_close() after be_clear()
Vasundhara Volam (1):
be2net: Fix to reap TX compls till HW doesn't respond for some time
drivers/net/ethernet/emulex/benet/be.h | 1 +
drivers/net/ethernet/emulex/benet/be_main.c | 17 +++++++++++++----
2 files changed, 14 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] be2net: Fix to reap TX compls till HW doesn't respond for some time
2014-04-14 10:42 [PATCH 0/2] be2net: patch set Sathya Perla
@ 2014-04-14 10:42 ` Sathya Perla
2014-04-14 10:42 ` [PATCH 2/2] be2net: Fix invocation of be_close() after be_clear() Sathya Perla
2014-04-14 17:42 ` [PATCH 0/2] be2net: patch set David Miller
2 siblings, 0 replies; 6+ messages in thread
From: Sathya Perla @ 2014-04-14 10:42 UTC (permalink / raw)
To: netdev
From: Vasundhara Volam <vasundhara.volam@emulex.com>
be_close() currently waits for a max of 200ms to receive all pending
TX compls. This timeout value was roughly calculated based on 10G
transmission speeds and the TX queue depth. This timeout may not be
enough when the link is operating at lower speeds or in multi-channel/SR-IOV
configs with TX-rate limiting setting.
It is hard to calculate a "proper timeout value" that works in all
configurations. This patch solves this problem by continuing to reap
TX completions till the HW is completely silent for a period of 10ms or
a HW error is detected.
v2: implements the new scheme (as suggested by David Laight) instead of
just waiting longer than 200ms for reaping all completions.
Signed-off-by: Vasundhara Volam <vasundhara.volam@emulex.com>
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
drivers/net/ethernet/emulex/benet/be_main.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 3e6df47..80f754d 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2033,11 +2033,13 @@ static void be_tx_compl_clean(struct be_adapter *adapter)
bool dummy_wrb;
int i, pending_txqs;
- /* Wait for a max of 200ms for all the tx-completions to arrive. */
+ /* Stop polling for compls when HW has been silent for 10ms */
do {
pending_txqs = adapter->num_tx_qs;
for_all_tx_queues(adapter, txo, i) {
+ cmpl = 0;
+ num_wrbs = 0;
txq = &txo->q;
while ((txcp = be_tx_compl_get(&txo->cq))) {
end_idx =
@@ -2050,14 +2052,13 @@ static void be_tx_compl_clean(struct be_adapter *adapter)
if (cmpl) {
be_cq_notify(adapter, txo->cq.id, false, cmpl);
atomic_sub(num_wrbs, &txq->used);
- cmpl = 0;
- num_wrbs = 0;
+ timeo = 0;
}
if (atomic_read(&txq->used) == 0)
pending_txqs--;
}
- if (pending_txqs == 0 || ++timeo > 200)
+ if (pending_txqs == 0 || ++timeo > 10 || be_hw_error(adapter))
break;
mdelay(1);
--
1.7.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] be2net: Fix invocation of be_close() after be_clear()
2014-04-14 10:42 [PATCH 0/2] be2net: patch set Sathya Perla
2014-04-14 10:42 ` [PATCH 1/2] be2net: Fix to reap TX compls till HW doesn't respond for some time Sathya Perla
@ 2014-04-14 10:42 ` Sathya Perla
2014-04-14 17:42 ` [PATCH 0/2] be2net: patch set David Miller
2 siblings, 0 replies; 6+ messages in thread
From: Sathya Perla @ 2014-04-14 10:42 UTC (permalink / raw)
To: netdev
From: Kalesh AP <kalesh.purayil@emulex.com>
In the EEH error recovery path, when a permanent failure occurs,
we clean up adapter structure (i.e. destroy queues etc) by calling
be_clear() and return PCI_ERS_RESULT_DISCONNECT.
After this the stack tries to remove device from bus and calls
be_remove() which invokes netdev_unregister()->be_close().
be_close() operating on destroyed queues results in a
NULL dereference.
This patch fixes this problem by introducing a flag to keep track
of the setup state.
Signed-off-by: Kalesh AP <kalesh.purayil@emulex.com>
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 | 8 ++++++++
2 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
index 8ccaa25..97db5a7 100644
--- a/drivers/net/ethernet/emulex/benet/be.h
+++ b/drivers/net/ethernet/emulex/benet/be.h
@@ -374,6 +374,7 @@ enum vf_state {
#define BE_FLAGS_NAPI_ENABLED (1 << 9)
#define BE_FLAGS_QNQ_ASYNC_EVT_RCVD (1 << 11)
#define BE_FLAGS_VXLAN_OFFLOADS (1 << 12)
+#define BE_FLAGS_SETUP_DONE (1 << 13)
#define BE_UC_PMAC_COUNT 30
#define BE_VF_UC_PMAC_COUNT 2
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 80f754d..a186454 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2726,6 +2726,12 @@ static int be_close(struct net_device *netdev)
struct be_eq_obj *eqo;
int i;
+ /* This protection is needed as be_close() may be called even when the
+ * adapter is in cleared state (after eeh perm failure)
+ */
+ if (!(adapter->flags & BE_FLAGS_SETUP_DONE))
+ return 0;
+
be_roce_dev_close(adapter);
if (adapter->flags & BE_FLAGS_NAPI_ENABLED) {
@@ -3056,6 +3062,7 @@ static int be_clear(struct be_adapter *adapter)
be_clear_queues(adapter);
be_msix_disable(adapter);
+ adapter->flags &= ~BE_FLAGS_SETUP_DONE;
return 0;
}
@@ -3560,6 +3567,7 @@ static int be_setup(struct be_adapter *adapter)
adapter->phy.fc_autoneg = 1;
be_schedule_worker(adapter);
+ adapter->flags |= BE_FLAGS_SETUP_DONE;
return 0;
err:
be_clear(adapter);
--
1.7.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/2] be2net: patch set
2014-04-14 10:42 [PATCH 0/2] be2net: patch set Sathya Perla
2014-04-14 10:42 ` [PATCH 1/2] be2net: Fix to reap TX compls till HW doesn't respond for some time Sathya Perla
2014-04-14 10:42 ` [PATCH 2/2] be2net: Fix invocation of be_close() after be_clear() Sathya Perla
@ 2014-04-14 17:42 ` David Miller
2 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2014-04-14 17:42 UTC (permalink / raw)
To: sathya.perla; +Cc: netdev
From: Sathya Perla <sathya.perla@emulex.com>
Date: Mon, 14 Apr 2014 16:12:39 +0530
> Patch 1/2 is a v2 of a patch that was submitted earlier (as a part of a
> different patch-set). v2 incorporates a suggestion given by David Laight
> for how long to poll for pending TX completions while disabling a device.
>
> Patch 2/2 fixes a crash in be_remove()->be_close()
> path after be2net has aborted an EEH error recovery
> due to a permanant failure.
Series applied, thank you.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 0/2] be2net: patch set
@ 2013-10-15 11:51 Sathya Perla
2013-10-17 6:00 ` Sathya Perla
0 siblings, 1 reply; 6+ messages in thread
From: Sathya Perla @ 2013-10-15 11:51 UTC (permalink / raw)
To: netdev
Pls apply the following fixes to the net tree. Thanks.
Vasundhara Volam (2):
be2net: pass if_id for v1 and V2 versions of TX_CREATE cmd
be2net: drop non-tso frames longer than mtu
drivers/net/ethernet/emulex/benet/be_cmds.c | 3 ++-
drivers/net/ethernet/emulex/benet/be_main.c | 9 +++++++--
2 files changed, 9 insertions(+), 3 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH 0/2] be2net: patch set
2013-10-15 11:51 Sathya Perla
@ 2013-10-17 6:00 ` Sathya Perla
0 siblings, 0 replies; 6+ messages in thread
From: Sathya Perla @ 2013-10-17 6:00 UTC (permalink / raw)
To: Sathya Perla, netdev@vger.kernel.org
> -----Original Message-----
> From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] On Behalf
> Of Sathya Perla
>
> Pls apply the following fixes to the net tree. Thanks.
>
> Vasundhara Volam (2):
> be2net: pass if_id for v1 and V2 versions of TX_CREATE cmd
> be2net: drop non-tso frames longer than mtu
>
Dave, I'll re-send this patch-set without the "drop non-tso frames" patch.
Based on Eric's comments, it seems better to place the mtu checks in pktgen and
before ndo_start_xmit() invocation so that all drivers/devices may benefit from the check.
thanks,
-Sathya
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-04-14 17:42 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-14 10:42 [PATCH 0/2] be2net: patch set Sathya Perla
2014-04-14 10:42 ` [PATCH 1/2] be2net: Fix to reap TX compls till HW doesn't respond for some time Sathya Perla
2014-04-14 10:42 ` [PATCH 2/2] be2net: Fix invocation of be_close() after be_clear() Sathya Perla
2014-04-14 17:42 ` [PATCH 0/2] be2net: patch set David Miller
-- strict thread matches above, loose matches on Subject: below --
2013-10-15 11:51 Sathya Perla
2013-10-17 6:00 ` 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).