|
@@ -1992,6 +1992,10 @@ more_data:
|
|
|
more_comp_cnt = 0;
|
|
|
goto more_data;
|
|
|
}
|
|
|
+
|
|
|
+ hif_update_napi_max_poll_time(ce_state, scn->napi_data.napis[ce_id],
|
|
|
+ qdf_get_cpu());
|
|
|
+
|
|
|
qdf_atomic_set(&ce_state->rx_pending, 0);
|
|
|
if (TARGET_REGISTER_ACCESS_ALLOWED(scn)) {
|
|
|
CE_ENGINE_INT_STATUS_CLEAR(scn, ctrl_addr,
|
|
@@ -2025,11 +2029,6 @@ static void ce_per_engine_service_fast(struct hif_softc *scn, int ce_id)
|
|
|
}
|
|
|
#endif /* WLAN_FEATURE_FASTPATH */
|
|
|
|
|
|
-/* Maximum amount of time in nano seconds before which the CE per engine service
|
|
|
- * should yield. ~1 jiffie.
|
|
|
- */
|
|
|
-#define CE_PER_ENGINE_SERVICE_MAX_YIELD_TIME_NS (10 * 1000 * 1000)
|
|
|
-
|
|
|
/*
|
|
|
* Guts of interrupt handler for per-engine interrupts on a particular CE.
|
|
|
*
|
|
@@ -2066,10 +2065,11 @@ int ce_per_engine_service(struct hif_softc *scn, unsigned int CE_id)
|
|
|
/* Clear force_break flag and re-initialize receive_count to 0 */
|
|
|
CE_state->receive_count = 0;
|
|
|
CE_state->force_break = 0;
|
|
|
+ CE_state->ce_service_start_time = sched_clock();
|
|
|
CE_state->ce_service_yield_time =
|
|
|
- sched_clock() +
|
|
|
- (unsigned long long)CE_PER_ENGINE_SERVICE_MAX_YIELD_TIME_NS;
|
|
|
-
|
|
|
+ CE_state->ce_service_start_time +
|
|
|
+ hif_get_ce_service_max_yield_time(
|
|
|
+ (struct hif_opaque_softc *)scn);
|
|
|
|
|
|
qdf_spin_lock(&CE_state->ce_index_lock);
|
|
|
/*
|