From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BE9D9431BB; Fri, 20 Oct 2023 12:10:58 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A8B7D40697; Fri, 20 Oct 2023 12:10:58 +0200 (CEST) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id C694840283 for ; Fri, 20 Oct 2023 12:10:57 +0200 (CEST) Received: from dggpeml100024.china.huawei.com (unknown [172.30.72.54]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4SBgJT1p6YzrT5j; Fri, 20 Oct 2023 18:08:09 +0800 (CST) Received: from localhost.localdomain (10.50.163.32) by dggpeml100024.china.huawei.com (7.185.36.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Fri, 20 Oct 2023 18:10:55 +0800 From: Chengwen Feng To: , , , , Somnath Kotur , Kalesh AP CC: , , Subject: [PATCH v2 3/7] net/bnxt: fix race-condition when report error recovery Date: Fri, 20 Oct 2023 10:07:42 +0000 Message-ID: <20231020100746.31520-4-fengchengwen@huawei.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20231020100746.31520-1-fengchengwen@huawei.com> References: <20230301030610.49468-1-fengchengwen@huawei.com> <20231020100746.31520-1-fengchengwen@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.50.163.32] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpeml100024.china.huawei.com (7.185.36.115) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org If set data path functions to dummy functions before reports error recovering event, there maybe a race-condition with data path threads, this patch fixes it by setting data path functions to dummy functions only after reports such event. Fixes: e11052f3a46f ("net/bnxt: support proactive error handling mode") Cc: stable@dpdk.org Signed-off-by: Chengwen Feng Acked-by: Konstantin Ananyev --- drivers/net/bnxt/bnxt_cpr.c | 13 +++++++------ drivers/net/bnxt/bnxt_ethdev.c | 4 ++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c index 0733cf4df2..d8947d5b5f 100644 --- a/drivers/net/bnxt/bnxt_cpr.c +++ b/drivers/net/bnxt/bnxt_cpr.c @@ -168,14 +168,9 @@ 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: - /* - * Avoid any rx/tx packet processing during firmware reset - * operation. - */ - bnxt_stop_rxtx(bp->eth_dev); - /* Ignore reset notify async events when stopping the port */ if (!bp->eth_dev->data->dev_started) { + bnxt_stop_rxtx(bp->eth_dev); bp->flags |= BNXT_FLAG_FATAL_ERROR; return; } @@ -184,6 +179,12 @@ void bnxt_handle_async_event(struct bnxt *bp, RTE_ETH_EVENT_ERR_RECOVERING, NULL); + /* + * Avoid any rx/tx packet processing during firmware reset + * operation. + */ + bnxt_stop_rxtx(bp->eth_dev); + pthread_mutex_lock(&bp->err_recovery_lock); event_data = data1; /* timestamp_lo/hi values are in units of 100ms */ diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 5c4d96d4b1..003a6eec11 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -4616,14 +4616,14 @@ static void bnxt_check_fw_health(void *arg) bp->flags |= BNXT_FLAG_FATAL_ERROR; bp->flags |= BNXT_FLAG_FW_RESET; - bnxt_stop_rxtx(bp->eth_dev); - PMD_DRV_LOG(ERR, "Detected FW dead condition\n"); rte_eth_dev_callback_process(bp->eth_dev, RTE_ETH_EVENT_ERR_RECOVERING, NULL); + bnxt_stop_rxtx(bp->eth_dev); + if (bnxt_is_primary_func(bp)) wait_msec = info->primary_func_wait_period; else -- 2.17.1