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:

committed by
Madan Koyyalamudi

parent
f1f6845bfb
commit
16e9e30d49
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user