Commit 3f5dffe6 authored by Sathya Perla's avatar Sathya Perla Committed by David S. Miller

be2net: fix EQ from getting full while cleaning RX CQ

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: default avatarSathya Perla <sathya.perla@emulex.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bf591f51
...@@ -1827,7 +1827,7 @@ static void be_rx_cq_clean(struct be_rx_obj *rxo) ...@@ -1827,7 +1827,7 @@ static void be_rx_cq_clean(struct be_rx_obj *rxo)
mdelay(1); mdelay(1);
} else { } else {
be_rx_compl_discard(rxo, rxcp); 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) if (rxcp->num_rcvd == 0)
break; break;
} }
...@@ -2533,11 +2533,6 @@ static void be_rx_qs_destroy(struct be_adapter *adapter) ...@@ -2533,11 +2533,6 @@ static void be_rx_qs_destroy(struct be_adapter *adapter)
q = &rxo->q; q = &rxo->q;
if (q->created) { if (q->created) {
be_cmd_rxq_destroy(adapter, q); 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_rx_cq_clean(rxo);
} }
be_queue_free(adapter, q); be_queue_free(adapter, q);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment