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:
@@ -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
|
||||||
|
@@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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, "");
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user