qcacmn: Disable DP interrupts in force MLO teardown

In force teardown case disable the interrupts before
going down. As target may be still active, we may
still continue to receive traffic. Disabling
interrupts to nsure we dont process interrupts while
cleaning up partner SOC

Change-Id: I7092d398c039302234206cb72f7453b6dc0cbcb7
CRs-Fixed: 3332961
This commit is contained in:
Chaithanya Garrepalli
2022-11-11 17:42:28 +05:30
committed by Madan Koyyalamudi
父節點 f1f6845bfb
當前提交 16e9e30d49
共有 6 個文件被更改,包括 30 次插入7 次删除

查看文件

@@ -56,7 +56,8 @@ static inline void cdp_soc_mlo_soc_setup(ol_txrx_soc_handle soc,
}
static inline void cdp_soc_mlo_soc_teardown(ol_txrx_soc_handle soc,
struct cdp_mlo_ctxt *mlo_ctx)
struct cdp_mlo_ctxt *mlo_ctx,
bool is_force_down)
{
if (!soc || !soc->ops) {
QDF_BUG(0);
@@ -67,7 +68,7 @@ static inline void cdp_soc_mlo_soc_teardown(ol_txrx_soc_handle soc,
!soc->ops->mlo_ops->mlo_soc_teardown)
return;
soc->ops->mlo_ops->mlo_soc_teardown(soc, mlo_ctx);
soc->ops->mlo_ops->mlo_soc_teardown(soc, mlo_ctx, is_force_down);
}
/*

查看文件

@@ -154,7 +154,8 @@ struct cdp_mlo_ops {
void (*mlo_soc_setup)(struct cdp_soc_t *cdp_soc,
struct cdp_mlo_ctxt *mlo_ctxt);
void (*mlo_soc_teardown)(struct cdp_soc_t *cdp_soc,
struct cdp_mlo_ctxt *mlo_ctxt);
struct cdp_mlo_ctxt *mlo_ctxt,
bool is_force_down);
QDF_STATUS (*update_mlo_ptnr_list)(struct cdp_soc_t *soc_hdl,
int8_t *vdev_ids, uint8_t num_vdevs,
uint8_t vdev_id);

查看文件

@@ -182,7 +182,8 @@ static void dp_mlo_soc_setup(struct cdp_soc_t *soc_hdl,
}
static void dp_mlo_soc_teardown(struct cdp_soc_t *soc_hdl,
struct cdp_mlo_ctxt *cdp_ml_ctxt)
struct cdp_mlo_ctxt *cdp_ml_ctxt,
bool is_force_down)
{
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
struct dp_mlo_ctxt *mlo_ctxt = cdp_mlo_ctx_to_dp(cdp_ml_ctxt);
@@ -192,6 +193,16 @@ static void dp_mlo_soc_teardown(struct cdp_soc_t *soc_hdl,
return;
dp_mlo_set_soc_by_chip_id(mlo_ctxt, NULL, be_soc->mlo_chip_id);
/*
* In force teardown case disable the interrupts before
* going down. As target may be still active, we may still
* continue to receive traffic. Disabling interrupts to
* ensure we dont process interrupts while clean up on
* other SOC.
*/
if (is_force_down)
dp_soc_interrupt_detach(soc_hdl);
}
static QDF_STATUS dp_mlo_add_ptnr_vdev(struct dp_vdev *vdev1,

查看文件

@@ -4311,4 +4311,12 @@ void dp_destroy_direct_link_refill_ring(struct cdp_soc_t *soc_hdl,
{
}
#endif
/*
* dp_soc_interrupt_detach() - Deregister any allocations done for interrupts
* @txrx_soc: DP SOC handle
*
* Return: none
*/
void dp_soc_interrupt_detach(struct cdp_soc_t *txrx_soc);
#endif /* #ifndef _DP_INTERNAL_H_ */

查看文件

@@ -3419,7 +3419,7 @@ static inline bool dp_skip_rx_mon_ring_mask_set(struct dp_soc *soc)
*
* Return: none
*/
static void dp_soc_interrupt_detach(struct cdp_soc_t *txrx_soc)
void dp_soc_interrupt_detach(struct cdp_soc_t *txrx_soc)
{
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
int i;

查看文件

@@ -469,7 +469,8 @@ void mlo_link_teardown_complete(struct wlan_objmgr_pdev *pdev)
soc = mlo_ctx->setup_info.soc_list[chip_idx];
if (soc)
cdp_soc_mlo_soc_teardown(wlan_psoc_get_dp_handle(soc),
mlo_ctx->dp_handle);
mlo_ctx->dp_handle,
false);
}
qdf_event_set(&mlo_ctx->setup_info.event);
@@ -494,7 +495,8 @@ static void mlo_force_teardown(void)
soc = mlo_ctx->setup_info.soc_list[chip_idx];
if (soc)
cdp_soc_mlo_soc_teardown(wlan_psoc_get_dp_handle(soc),
mlo_ctx->dp_handle);
mlo_ctx->dp_handle,
true);
}
}