[2/2] net/bnxt: fix race when port is stopped and async events are received
Checks
Commit Message
From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Fix a race condition between port stop and error recovery task. When io
forwarding is not started on Stingray devices, driver will not receive
the async event from FW when there is a FW reset. While exiting testpmd,
as part of port stop driver sees this event and this in turn causes a
race between port stop and error recovery task.
Fixed this by ignoring the fatal/non-fatal async event from FW while
stopping port.
Fixes: df6cd7c1f73a ("net/bnxt: handle reset notify async event from FW")
Cc: stable@dpdk.org
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Rahul Gupta <rahul.gupta@broadcom.com>
Reviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>
---
drivers/net/bnxt/bnxt_cpr.c | 6 ++++++
1 file changed, 6 insertions(+)
@@ -76,6 +76,12 @@ void bnxt_handle_async_event(struct bnxt *bp,
PMD_DRV_LOG(INFO, "Port conn async event\n");
break;
case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY:
+ /* Ignore reset notify async events when stopping the port */
+ if (!bp->eth_dev->data->dev_started) {
+ bp->flags |= BNXT_FLAG_FATAL_ERROR;
+ return;
+ }
+
event_data = rte_le_to_cpu_32(async_cmp->event_data1);
/* timestamp_lo/hi values are in units of 100ms */
bp->fw_reset_max_msecs = async_cmp->timestamp_hi ?