Przeglądaj źródła

qcacld-3.0: Record polled completion processing

Since the wmi tx copy engine's completions can be
processed in both its tasklet context and through
ce_per_engine_servicereap on a polled basis, we
wish to be able to distinguish the when each is used.

Change-Id: I5892eeeab4e1c7e4c35b958d98db7ad0293ec24f
CRs-Fixed: 951569
Houston Hoffman 9 lat temu
rodzic
commit
c9f2a429a0
2 zmienionych plików z 12 dodań i 3 usunięć
  1. 4 0
      core/hif/src/ce/ce_internal.h
  2. 8 3
      core/hif/src/ce/ce_service.c

+ 4 - 0
core/hif/src/ce/ce_internal.h

@@ -298,6 +298,8 @@ union ce_desc {
  * @HIF_CE_TASKLET_ENTRY: records the start of the ce_tasklet
  * @HIF_CE_TASKLET_RESCHEDULE: records the rescheduling of the wlan_tasklet
  * @HIF_CE_TASKLET_EXIT: records the exit of the wlan tasklet without reschedule
+ * @HIF_CE_REAP_ENTRY: records when we process completion outside of a bh
+ * @HIF_CE_REAP_EXIT:  records when we process completion outside of a bh
  */
 enum hif_ce_event_type {
 	HIF_RX_DESC_POST,
@@ -309,6 +311,8 @@ enum hif_ce_event_type {
 	HIF_CE_TASKLET_ENTRY,
 	HIF_CE_TASKLET_RESCHEDULE,
 	HIF_CE_TASKLET_EXIT,
+	HIF_CE_REAP_ENTRY,
+	HIF_CE_REAP_EXIT,
 };
 
 void ce_init_ce_desc_event_log(int ce_id, int size);

+ 8 - 3
core/hif/src/ce/ce_service.c

@@ -1181,7 +1181,7 @@ ce_completed_send_next(struct CE_handle *copyeng,
  * within it .
  */
 
-void ce_per_engine_servicereap(struct ol_softc *scn, unsigned int CE_id)
+void ce_per_engine_servicereap(struct ol_softc *scn, unsigned int ce_id)
 {
 	void *CE_context;
 	void *transfer_context;
@@ -1190,9 +1190,11 @@ void ce_per_engine_servicereap(struct ol_softc *scn, unsigned int CE_id)
 	unsigned int id;
 	unsigned int sw_idx, hw_idx;
 	uint32_t toeplitz_hash_result;
-	struct CE_state *CE_state = scn->ce_id_to_state[CE_id];
+	struct CE_state *CE_state = scn->ce_id_to_state[ce_id];
 
 	A_TARGET_ACCESS_BEGIN(scn);
+	hif_record_ce_desc_event(ce_id, HIF_CE_REAP_ENTRY,
+			NULL, NULL, 0);
 
 	/* Since this function is called from both user context and
 	 * tasklet context the spinlock has to lock the bottom halves.
@@ -1220,7 +1222,7 @@ void ce_per_engine_servicereap(struct ol_softc *scn, unsigned int CE_id)
 				  &nbytes, &id, &sw_idx, &hw_idx,
 				  &toeplitz_hash_result) ==
 				  CDF_STATUS_SUCCESS) {
-				if (CE_id != CE_HTT_H2T_MSG) {
+				if (ce_id != CE_HTT_H2T_MSG) {
 					cdf_spin_unlock_bh(
 						&CE_state->ce_index_lock);
 					CE_state->send_cb(
@@ -1247,6 +1249,9 @@ void ce_per_engine_servicereap(struct ol_softc *scn, unsigned int CE_id)
 	}
 
 	cdf_spin_unlock_bh(&CE_state->ce_index_lock);
+
+	hif_record_ce_desc_event(ce_id, HIF_CE_REAP_EXIT,
+			NULL, NULL, 0);
 	A_TARGET_ACCESS_END(scn);
 }