net/bnxt: fix ULP context list deadlock
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 a deadlock. The fix is to correctly clear the list. Fixes: 3184b1ef666a ("net/bnxt: add HA support in ULP") Cc: stable@dpdk.org Signed-off-by: Kishore Padmanabha <kishore.padmanabha@broadcom.com> Signed-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com> Reviewed-by: Mike Baucom <michael.baucom@broadcom.com> Reviewed-by: Randy Schacher <stuart.schacher@broadcom.com> Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
This commit is contained in:
parent
bf59878630
commit
ba6fa50aae
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user