Explorar o código

qcacmn: trigger panic if completing tasks takes too long

Trigger panic if it takes too long in completing
the tasks. And also modify the maximum retry count
if PANIC_ON_BUG is enabled to avoid false alarms.
It makes debug easier for tasklet stuck and schedule
latency related issues.

Change-Id: I521661c656d227ffb3f4c87ecd56bbfa938c9c25
CRs-Fixed: 3441248
Yu Wang %!s(int64=2) %!d(string=hai) anos
pai
achega
c46d796117
Modificáronse 2 ficheiros con 7 adicións e 0 borrados
  1. 3 0
      hif/src/hif_main.c
  2. 4 0
      hif/src/hif_main.h

+ 3 - 0
hif/src/hif_main.c

@@ -1258,6 +1258,9 @@ QDF_STATUS hif_try_complete_tasks(struct hif_softc *scn)
 		if (++task_drain_wait_cnt > HIF_TASK_DRAIN_WAIT_CNT) {
 			hif_err("pending tasklets %d grp tasklets %d work %d",
 				tasklet, grp_tasklet, work);
+			QDF_DEBUG_PANIC("Complete tasks takes more than %u ms: tasklets %d grp tasklets %d work %d",
+					HIF_TASK_DRAIN_WAIT_CNT * 10,
+					tasklet, grp_tasklet, work);
 			return QDF_STATUS_E_FAULT;
 		}
 		hif_info("waiting for tasklets %d grp tasklets %d work %d",

+ 4 - 0
hif/src/hif_main.h

@@ -437,7 +437,11 @@ static inline int hif_get_num_active_tasklets(struct hif_softc *scn)
  * Max waiting time during Runtime PM suspend to finish all
  * the tasks. This is in the multiple of 10ms.
  */
+#ifdef PANIC_ON_BUG
+#define HIF_TASK_DRAIN_WAIT_CNT 200
+#else
 #define HIF_TASK_DRAIN_WAIT_CNT 25
+#endif
 
 /**
  * hif_try_complete_tasks() - Try to complete all the pending tasks