|
@@ -593,6 +593,20 @@ void hif_latency_profile_start(struct hif_exec_context *hif_ext_group)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef FEATURE_NAPI
|
|
#ifdef FEATURE_NAPI
|
|
|
|
+#ifdef FEATURE_IRQ_AFFINITY
|
|
|
|
+static inline int32_t
|
|
|
|
+hif_is_force_napi_complete_required(struct hif_exec_context *hif_ext_group)
|
|
|
|
+{
|
|
|
|
+ return qdf_atomic_inc_not_zero(&hif_ext_group->force_napi_complete);
|
|
|
|
+}
|
|
|
|
+#else
|
|
|
|
+static inline int32_t
|
|
|
|
+hif_is_force_napi_complete_required(struct hif_exec_context *hif_ext_group)
|
|
|
|
+{
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* hif_exec_poll() - napi poll
|
|
* hif_exec_poll() - napi poll
|
|
* napi: napi struct
|
|
* napi: napi struct
|
|
@@ -628,7 +642,7 @@ static int hif_exec_poll(struct napi_struct *napi, int budget)
|
|
|
|
|
|
actual_dones = work_done;
|
|
actual_dones = work_done;
|
|
|
|
|
|
- if (qdf_atomic_inc_not_zero(&hif_ext_group->force_napi_complete) ||
|
|
|
|
|
|
+ if (hif_is_force_napi_complete_required(hif_ext_group) ||
|
|
(!hif_ext_group->force_break && work_done < normalized_budget)) {
|
|
(!hif_ext_group->force_break && work_done < normalized_budget)) {
|
|
hif_record_event(hif_ext_group->hif, hif_ext_group->grp_id,
|
|
hif_record_event(hif_ext_group->hif, hif_ext_group->grp_id,
|
|
0, 0, 0, HIF_EVENT_BH_COMPLETE);
|
|
0, 0, 0, HIF_EVENT_BH_COMPLETE);
|
|
@@ -967,6 +981,19 @@ void hif_exec_kill(struct hif_opaque_softc *hif_ctx)
|
|
qdf_atomic_set(&hif_state->ol_sc.active_grp_tasklet_cnt, 0);
|
|
qdf_atomic_set(&hif_state->ol_sc.active_grp_tasklet_cnt, 0);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifdef FEATURE_IRQ_AFFINITY
|
|
|
|
+static inline void
|
|
|
|
+hif_init_force_napi_complete(struct hif_exec_context *hif_ext_group)
|
|
|
|
+{
|
|
|
|
+ qdf_atomic_init(&hif_ext_group->force_napi_complete);
|
|
|
|
+}
|
|
|
|
+#else
|
|
|
|
+static inline void
|
|
|
|
+hif_init_force_napi_complete(struct hif_exec_context *hif_ext_group)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* hif_register_ext_group() - API to register external group
|
|
* hif_register_ext_group() - API to register external group
|
|
* interrupt handler.
|
|
* interrupt handler.
|
|
@@ -1020,7 +1047,7 @@ QDF_STATUS hif_register_ext_group(struct hif_opaque_softc *hif_ctx,
|
|
hif_ext_group->hif = hif_ctx;
|
|
hif_ext_group->hif = hif_ctx;
|
|
hif_ext_group->context_name = context_name;
|
|
hif_ext_group->context_name = context_name;
|
|
hif_ext_group->type = type;
|
|
hif_ext_group->type = type;
|
|
- qdf_atomic_init(&hif_ext_group->force_napi_complete);
|
|
|
|
|
|
+ hif_init_force_napi_complete(hif_ext_group);
|
|
|
|
|
|
hif_state->hif_num_extgroup++;
|
|
hif_state->hif_num_extgroup++;
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|