ソースを参照

qcacmn: Add HIF events to track NAPI POLL exit time

Add HIF events to track NAPI POLL exit time, this gives
information about actual time spent by wlan host in napi softirq.

Change-Id: I7548fd05f2f7db714ac9bcf79171ffb3d478e936
CRs-Fixed: 3052902
Karthik Kantamneni 3 年 前
コミット
4c00b017c8
2 ファイル変更14 行追加1 行削除
  1. 5 1
      hif/inc/hif.h
  2. 9 0
      hif/src/hif_exec.c

+ 5 - 1
hif/inc/hif.h

@@ -341,6 +341,8 @@ struct hif_opaque_softc {
  * @HIF_EVENT_BH_SCHED: NAPI POLL scheduled event
  * @HIF_EVENT_SRNG_ACCESS_START: hal ring access start event
  * @HIF_EVENT_SRNG_ACCESS_END: hal ring access end event
+ * @HIF_EVENT_BH_COMPLETE: NAPI POLL completion event
+ * @HIF_EVENT_BH_FORCE_BREAK: NAPI POLL force break event
  */
 enum hif_event_type {
 	HIF_EVENT_IRQ_TRIGGER,
@@ -349,6 +351,8 @@ enum hif_event_type {
 	HIF_EVENT_BH_SCHED,
 	HIF_EVENT_SRNG_ACCESS_START,
 	HIF_EVENT_SRNG_ACCESS_END,
+	HIF_EVENT_BH_COMPLETE,
+	HIF_EVENT_BH_FORCE_BREAK,
 	/* Do check hif_hist_skip_event_record when adding new events */
 };
 
@@ -375,7 +379,7 @@ enum hif_system_pm_state {
 /* HIF_EVENT_HIST_MAX should always be power of 2 */
 #define HIF_EVENT_HIST_MAX		512
 
-#define HIF_EVENT_HIST_ENABLE_MASK	0x3F
+#define HIF_EVENT_HIST_ENABLE_MASK	0xFF
 
 static inline uint64_t hif_get_log_timestamp(void)
 {

+ 9 - 0
hif/src/hif_exec.c

@@ -119,6 +119,11 @@ hif_hist_skip_event_record(struct hif_event_history *hist_ev,
 		if (rec->type != HIF_EVENT_SRNG_ACCESS_START)
 			return true;
 		break;
+	case HIF_EVENT_BH_COMPLETE:
+	case HIF_EVENT_BH_FORCE_BREAK:
+		if (rec->type != HIF_EVENT_SRNG_ACCESS_END)
+			return true;
+		break;
 	default:
 		break;
 	}
@@ -623,6 +628,8 @@ static int hif_exec_poll(struct napi_struct *napi, int budget)
 	actual_dones = work_done;
 
 	if (!hif_ext_group->force_break && work_done < normalized_budget) {
+		hif_record_event(hif_ext_group->hif, hif_ext_group->grp_id,
+				 0, 0, 0, HIF_EVENT_BH_COMPLETE);
 		napi_complete(napi);
 		qdf_atomic_dec(&scn->active_grp_tasklet_cnt);
 		hif_ext_group->irq_enable(hif_ext_group);
@@ -630,6 +637,8 @@ static int hif_exec_poll(struct napi_struct *napi, int budget)
 	} else {
 		/* if the ext_group supports time based yield, claim full work
 		 * done anyways */
+		hif_record_event(hif_ext_group->hif, hif_ext_group->grp_id,
+				 0, 0, 0, HIF_EVENT_BH_FORCE_BREAK);
 		work_done = normalized_budget;
 	}