diff --git a/hif/src/ce/ce_tasklet.c b/hif/src/ce/ce_tasklet.c index e566d8885a..5ee2d07487 100644 --- a/hif/src/ce/ce_tasklet.c +++ b/hif/src/ce/ce_tasklet.c @@ -534,6 +534,33 @@ void ce_tasklet_kill(struct hif_softc *scn) qdf_atomic_set(&scn->active_tasklet_cnt, 0); } +/** + * ce_tasklet_entry_dump() - dump tasklet entries info + * @hif_ce_state: ce state + * + * This function will dump all tasklet entries info + * + * Return: None + */ +static void ce_tasklet_entry_dump(struct HIF_CE_state *hif_ce_state) +{ + struct ce_tasklet_entry *tasklet_entry; + int i; + + if (hif_ce_state) { + for (i = 0; i < CE_COUNT_MAX; i++) { + tasklet_entry = &hif_ce_state->tasklets[i]; + + hif_info("%02d: ce_id=%d, inited=%d, hi_tasklet_ce=%d hif_ce_state=%pK", + i, + tasklet_entry->ce_id, + tasklet_entry->inited, + tasklet_entry->hi_tasklet_ce, + tasklet_entry->hif_ce_state); + } + } +} + #define HIF_CE_DRAIN_WAIT_CNT 20 /** * hif_drain_tasklets(): wait until no tasklet is pending @@ -800,8 +827,16 @@ irqreturn_t ce_dispatch_interrupt(int ce_id, struct hif_opaque_softc *hif_hdl = GET_HIF_OPAQUE_HDL(scn); if (tasklet_entry->ce_id != ce_id) { - hif_err("ce_id (expect %d, received %d) does not match", - tasklet_entry->ce_id, ce_id); + bool rl; + + rl = hif_err_rl("ce_id (expect %d, received %d) does not match, inited=%d, ce_count=%u", + tasklet_entry->ce_id, ce_id, + tasklet_entry->inited, + scn->ce_count); + + if (!rl) + ce_tasklet_entry_dump(hif_ce_state); + return IRQ_NONE; } if (unlikely(ce_id >= CE_COUNT_MAX)) {