From: Kalesh AP Date: Thu, 20 Feb 2020 04:12:14 +0000 (+0530) Subject: net/bnxt: fix race condition when port is stopped X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=c696cc659337c682f1055e646600ab3dca733b0e;p=dpdk.git net/bnxt: fix race condition when port is stopped 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 Reviewed-by: Rahul Gupta Reviewed-by: Ajit Khaparde --- diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c index 0f7b5e96ca..21565b1e24 100644 --- a/drivers/net/bnxt/bnxt_cpr.c +++ b/drivers/net/bnxt/bnxt_cpr.c @@ -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 ?