From patchwork Tue Nov 16 13:04:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Venkat Duvvuru X-Patchwork-Id: 104403 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5C155A0032; Tue, 16 Nov 2021 14:05:10 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B6CFE41180; Tue, 16 Nov 2021 14:04:49 +0100 (CET) Received: from relay.smtp-ext.broadcom.com (relay.smtp-ext.broadcom.com [192.19.166.231]) by mails.dpdk.org (Postfix) with ESMTP id 9580E41171 for ; Tue, 16 Nov 2021 14:04:48 +0100 (CET) Received: from S60.dhcp.broadcom.net (unknown [10.123.66.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by relay.smtp-ext.broadcom.com (Postfix) with ESMTPS id E1F1E80D8; Tue, 16 Nov 2021 05:04:46 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com E1F1E80D8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1637067888; bh=lrwSG1FrPZF4B8zCQrzlTuFkvDl43WjnYt3gkwPsvqM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o/GMfwTwb+r77SdJEDSSXpowGUDiGpWEzE6lCHharZ630/cI+rrR2zZBOyVXWnbMv WCVIoKqQrbllxqj/dob1aEWqV3+tKd5+13Oeck9TrNrumOsm4YJhLJ8CTEJHMUHt9V 01V+CEWjQJhFX9bUhMSDzdyzbDnLWqTsoalAJuo0= From: Venkat Duvvuru To: dev@dpdk.org Cc: Kishore Padmanabha , Venkat Duvvuru Subject: [PATCH 4/4] net/bnxt: fix ULP context list deadlock Date: Tue, 16 Nov 2021 18:34:37 +0530 Message-Id: <20211116130437.2022-5-venkatkumar.duvvuru@broadcom.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20211116130437.2022-1-venkatkumar.duvvuru@broadcom.com> References: <20211116130437.2022-1-venkatkumar.duvvuru@broadcom.com> 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 From: Kishore Padmanabha The ulp context list was not updated when high availability feature was deinitialized. This caused the ulp context list to acquire the lock when it is not supposed to causing the deadlock. The fix is to correctly clear the list. Fixes: 3184b1ef666a ("net/bnxt: add HA support in ULP") Signed-off-by: Kishore Padmanabha Signed-off-by: Venkat Duvvuru Reviewed-by: Michael Baucom Reviewed-by: Randy Schacher --- drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 7 ++++--- drivers/net/bnxt/tf_ulp/ulp_ha_mgr.c | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c index b1b8679aa6..1ee21fceef 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c @@ -1546,9 +1546,6 @@ bnxt_ulp_port_deinit(struct bnxt *bp) BNXT_TF_DBG(DEBUG, "BNXT Port:%d ULP port deinit\n", bp->eth_dev->data->port_id); - /* Free the ulp context in the context entry list */ - bnxt_ulp_cntxt_list_del(bp->ulp_ctx); - /* Get the session details */ pci_dev = RTE_DEV_TO_PCI(bp->eth_dev->device); pci_addr = &pci_dev->addr; @@ -1587,6 +1584,9 @@ bnxt_ulp_port_deinit(struct bnxt *bp) } } + /* Free the ulp context in the context entry list */ + bnxt_ulp_cntxt_list_del(bp->ulp_ctx); + /* clean up the session */ ulp_session_deinit(session); @@ -2062,6 +2062,7 @@ bnxt_ulp_cntxt_entry_acquire(void *arg) TAILQ_FOREACH(entry, &ulp_cntx_list, next) if (entry->ulp_ctx->cfg_data == arg) return entry->ulp_ctx; + rte_spinlock_unlock(&bnxt_ulp_ctxt_lock); } return NULL; } diff --git a/drivers/net/bnxt/tf_ulp/ulp_ha_mgr.c b/drivers/net/bnxt/tf_ulp/ulp_ha_mgr.c index 1325986aba..0030a487f5 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_ha_mgr.c +++ b/drivers/net/bnxt/tf_ulp/ulp_ha_mgr.c @@ -26,7 +26,7 @@ #define ULP_HA_IF_TBL_IDX 10 #define ULP_HA_CLIENT_CNT_IF_TBL_IDX 9 -static void ulp_ha_mgr_timer_cancel(void); +static void ulp_ha_mgr_timer_cancel(struct bnxt_ulp_context *ulp_ctx); static int32_t ulp_ha_mgr_timer_start(void *arg); static void ulp_ha_mgr_timer_cb(void *arg); static int32_t ulp_ha_mgr_app_type_set(struct bnxt_ulp_context *ulp_ctx, @@ -311,9 +311,9 @@ ulp_ha_mgr_timer_start(void *arg) } static void -ulp_ha_mgr_timer_cancel(void) +ulp_ha_mgr_timer_cancel(struct bnxt_ulp_context *ulp_ctx) { - rte_eal_alarm_cancel(ulp_ha_mgr_timer_cb, (void *)NULL); + rte_eal_alarm_cancel(ulp_ha_mgr_timer_cb, ulp_ctx->cfg_data); } int32_t @@ -351,7 +351,7 @@ ulp_ha_mgr_deinit(struct bnxt_ulp_context *ulp_ctx) { struct bnxt_ulp_ha_mgr_info *ha_info; - ulp_ha_mgr_timer_cancel(); + ulp_ha_mgr_timer_cancel(ulp_ctx); ha_info = bnxt_ulp_cntxt_ptr2_ha_info_get(ulp_ctx); if (ha_info == NULL) {