Wlan: Add debug in case WDA TX frame takes more than 1 sec to transmit
No logs are present to indicate if management frame takes
more than 1 sec.
This change adds debug logs to know if WDA_TXPacket takes more than
WDA_TX_TIME_THRESHOLD msec to transmit the frame.
Also do SSR if TX timeout continuously happens for
WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
Change-Id: I954a0894b82cd931f67c89cb30dda184f27a1599
CRs-Fixed: 944467
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 88eefe1..d9501a6 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -85,6 +85,13 @@
#define CONVERT_WDI2SIR_STATUS(x) \
((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
+/* Threshold to print tx time taken in ms*/
+#define WDA_TX_TIME_THRESHOLD 1000
+/* Recover with ssr if tx timeouts continuously
+ * for threshold number of times.
+ */
+#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 3
+
#define IS_WDI_STATUS_FAILURE(status) \
((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
#define CONVERT_WDI2VOS_STATUS(x) \
@@ -13926,6 +13933,7 @@
tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
tpAniSirGlobal pMac;
tpSirTxBdStatus txBdStatus = {0};
+ v_TIME_t time_snapshot;
if((NULL == pWDA)||(NULL == pFrmBuf))
{
@@ -14084,6 +14092,7 @@
}
return VOS_STATUS_E_FAILURE;
}
+ time_snapshot = vos_timer_get_system_time();
/*
* Wait for the event to be set by the TL, to get the response of TX
* complete, this event should be set by the Callback function called by TL
@@ -14132,8 +14141,19 @@
"Tx Complete timeout Timer Stop Failed ");
}
}
+ pWDA->mgmtTxfailureCnt++;
+
+ /* SSR if timeout continously for
+ * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
+ */
+ if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
+ pWDA->mgmtTxfailureCnt)
+ {
+ vos_wlanRestart();
+ }
status = VOS_STATUS_E_FAILURE;
}
+
#ifdef WLAN_DUMP_MGMTFRAMES
if (VOS_IS_STATUS_SUCCESS(status))
{
@@ -14146,6 +14166,15 @@
if (VOS_IS_STATUS_SUCCESS(status))
{
+ pWDA->mgmtTxfailureCnt = 0;
+ if ((vos_timer_get_system_time() - time_snapshot) >=
+ WDA_TX_TIME_THRESHOLD)
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Tx Complete took %lu ms",
+ vos_timer_get_system_time() - time_snapshot);
+ }
+
if (pMac->fEnableDebugLog & 0x1)
{
if ((pFc->type == SIR_MAC_MGMT_FRAME) &&