qcacmn: Pass hang reason to qdf_trigger_self_recovery

To identify the reason for recovery, add parameter
"reason" for qdf_trigger_self_recovery.

And revise comment for qdf_hang_reason, replace "CDS"
with "QDF".

Change-Id: I8b388b5e83dbbdf29246c264ada56290f0dd3bfc
CRs-Fixed: 2431282
This commit is contained in:
Jingxiang Ge
2019-04-10 14:49:57 +08:00
committed by nshrivas
parent 0577a01ab2
commit 4218f02cef
4 changed files with 21 additions and 16 deletions

View File

@@ -69,6 +69,7 @@ void qdf_register_self_recovery_callback(qdf_self_recovery_callback callback);
/** /**
* qdf_trigger_self_recovery () - trigger self recovery * qdf_trigger_self_recovery () - trigger self recovery
* @reason: the reason for the recovery request
* *
* Call API only in case of fatal error, * Call API only in case of fatal error,
* if self_recovery_cb callback is registered, injcets fw crash and recovers * if self_recovery_cb callback is registered, injcets fw crash and recovers
@@ -76,9 +77,10 @@ void qdf_register_self_recovery_callback(qdf_self_recovery_callback callback);
* *
* Return: None * Return: None
*/ */
#define qdf_trigger_self_recovery() \ #define qdf_trigger_self_recovery(reason) \
__qdf_trigger_self_recovery(__func__, __LINE__) __qdf_trigger_self_recovery(reason, __func__, __LINE__)
void __qdf_trigger_self_recovery(const char *func, const uint32_t line); void __qdf_trigger_self_recovery(enum qdf_hang_reason reason,
const char *func, const uint32_t line);
/** /**
* qdf_is_recovering_callback() - callback to get driver recovering in progress * qdf_is_recovering_callback() - callback to get driver recovering in progress

View File

@@ -1164,16 +1164,17 @@ enum qdf_suspend_type {
/** /**
* enum qdf_hang_reason - host hang/ssr reason * enum qdf_hang_reason - host hang/ssr reason
* @CDS_REASON_UNSPECIFIED: Unspecified reason * @QDF_REASON_UNSPECIFIED: Unspecified reason
* @CDS_RX_HASH_NO_ENTRY_FOUND: No Map for the MAC entry for the received frame * @QDF_RX_HASH_NO_ENTRY_FOUND: No Map for the MAC entry for the received frame
* @CDS_PEER_DELETION_TIMEDOUT: peer deletion timeout happened * @QDF_PEER_DELETION_TIMEDOUT: peer deletion timeout happened
* @CDS_PEER_UNMAP_TIMEDOUT: peer unmap timeout * @QDF_PEER_UNMAP_TIMEDOUT: peer unmap timeout
* @CDS_SCAN_REQ_EXPIRED: Scan request timed out * @QDF_SCAN_REQ_EXPIRED: Scan request timed out
* @CDS_SCAN_ATTEMPT_FAILURES: Consecutive Scan attempt failures * @QDF_SCAN_ATTEMPT_FAILURES: Consecutive Scan attempt failures
* @CDS_GET_MSG_BUFF_FAILURE: Unable to get the message buffer * @QDF_GET_MSG_BUFF_FAILURE: Unable to get the message buffer
* @CDS_ACTIVE_LIST_TIMEOUT: Current command processing is timedout * @QDF_ACTIVE_LIST_TIMEOUT: Current command processing is timedout
* @CDS_SUSPEND_TIMEOUT: Timeout for an ACK from FW for suspend request * @QDF_SUSPEND_TIMEOUT: Timeout for an ACK from FW for suspend request
* @CDS_RESUME_TIMEOUT: Timeout for an ACK from FW for resume request * @QDF_RESUME_TIMEOUT: Timeout for an ACK from FW for resume request
* @QDF_WMI_EXCEED_MAX_PENDING_CMDS: wmi exceed max pending cmd
*/ */
enum qdf_hang_reason { enum qdf_hang_reason {
QDF_REASON_UNSPECIFIED = 0, QDF_REASON_UNSPECIFIED = 0,
@@ -1186,6 +1187,7 @@ enum qdf_hang_reason {
QDF_ACTIVE_LIST_TIMEOUT = 7, QDF_ACTIVE_LIST_TIMEOUT = 7,
QDF_SUSPEND_TIMEOUT = 8, QDF_SUSPEND_TIMEOUT = 8,
QDF_RESUME_TIMEOUT = 9, QDF_RESUME_TIMEOUT = 9,
QDF_WMI_EXCEED_MAX_PENDING_CMDS = 10,
}; };
/** /**

View File

@@ -55,10 +55,11 @@ void qdf_register_self_recovery_callback(qdf_self_recovery_callback callback)
qdf_export_symbol(qdf_register_self_recovery_callback); qdf_export_symbol(qdf_register_self_recovery_callback);
void __qdf_trigger_self_recovery(const char *func, const uint32_t line) void __qdf_trigger_self_recovery(enum qdf_hang_reason reason,
const char *func, const uint32_t line)
{ {
if (self_recovery_cb) if (self_recovery_cb)
self_recovery_cb(QDF_REASON_UNSPECIFIED, func, line); self_recovery_cb(reason, func, line);
else else
QDF_DEBUG_PANIC_FL(func, line, ""); QDF_DEBUG_PANIC_FL(func, line, "");
} }

View File

@@ -1719,7 +1719,7 @@ QDF_STATUS wmi_unified_cmd_send_fl(wmi_unified_t wmi_handle, wmi_buf_t buf,
wmi_nofl_err("%s:%d, MAX %d WMI Pending cmds reached", wmi_nofl_err("%s:%d, MAX %d WMI Pending cmds reached",
func, line, wmi_handle->wmi_max_cmds); func, line, wmi_handle->wmi_max_cmds);
wmi_unified_debug_dump(wmi_handle); wmi_unified_debug_dump(wmi_handle);
qdf_trigger_self_recovery(); qdf_trigger_self_recovery(QDF_WMI_EXCEED_MAX_PENDING_CMDS);
return QDF_STATUS_E_BUSY; return QDF_STATUS_E_BUSY;
} }