Просмотр исходного кода

qcacmn: Limit error logging when ce id does not match to tasklet_entry

Limit error logging when ce id does not match to tasklet_entry's ce
id. And dump all tasklet entries info to get more clue in the next
cycle.

Change-Id: Idcd9cb6ff45ef8e05fcea33cad48fa464e4f9a1e
CRs-Fixed: 3284277
Tiger Yu 2 лет назад
Родитель
Сommit
6f012336ae
1 измененных файлов с 37 добавлено и 2 удалено
  1. 37 2
      hif/src/ce/ce_tasklet.c

+ 37 - 2
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)) {