From: Kalesh AP Date: Thu, 24 Oct 2019 07:44:28 +0000 (+0530) Subject: net/bnxt: add more checks during firmware reset X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=bfbfe4aaa1ebee405d497dfef7346e220c99590b;p=dpdk.git net/bnxt: add more checks during firmware reset Added check for fw reset or fw errors in few more routines. While processing the events, if it is fw fatal or non-fatal event, there is no need to process the remaining events as driver triggers recovery mechanism. Also added a check for fw reset or fatal error in bnxt_disable_int() to avoid bar access in case of fatal error. Fixes: be14720def9c ("net/bnxt: support FW reset") Signed-off-by: Kalesh AP Signed-off-by: Somnath Kotur Reviewed-by: Rahul Gupta Reviewed-by: Ajit Khaparde --- diff --git a/drivers/net/bnxt/bnxt_irq.c b/drivers/net/bnxt/bnxt_irq.c index 4feb637e22..846325ea96 100644 --- a/drivers/net/bnxt/bnxt_irq.c +++ b/drivers/net/bnxt/bnxt_irq.c @@ -37,6 +37,11 @@ void bnxt_int_handler(void *param) return; } + if (is_bnxt_in_error(bp)) { + pthread_mutex_unlock(&bp->def_cp_lock); + return; + } + cons = RING_CMP(cpr->cp_ring_struct, raw_cons); cmp = &cpr->cp_desc_ring[cons]; @@ -104,6 +109,9 @@ void bnxt_disable_int(struct bnxt *bp) if (BNXT_NUM_ASYNC_CPR(bp) == 0) return; + if (is_bnxt_in_error(bp)) + return; + if (!cpr || !cpr->cp_db.doorbell) return; diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c index 03dae571b6..ee1444c1d1 100644 --- a/drivers/net/bnxt/bnxt_rxr.c +++ b/drivers/net/bnxt/bnxt_rxr.c @@ -639,6 +639,9 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, evt = bnxt_event_hwrm_resp_handler(rxq->bp, (struct cmpl_base *)rxcmp); + /* If the async event is Fatal error, return */ + if (unlikely(is_bnxt_in_error(rxq->bp))) + goto done; } raw_cons = NEXT_RAW_CMP(raw_cons);