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
Cette révision appartient à :
Chaithanya Garrepalli
2022-11-11 17:42:28 +05:30
révisé par Madan Koyyalamudi
Parent f1f6845bfb
révision 16e9e30d49
6 fichiers modifiés avec 30 ajouts et 7 suppressions

Voir le fichier

@@ -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);
}
/*

Voir le fichier

@@ -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);

Voir le fichier

@@ -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,

Voir le fichier

@@ -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_ */

Voir le fichier

@@ -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;

Voir le fichier

@@ -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);
}
}