qcacmn: Check for tx desc leak or corruption

Tx descriptor is not being freed and put back in tx desc
pool for a long time. As a result, system is not going
into suspended state.
To find this descriptor, during dp_bus_suspend and
dp_runtime_suspend, parse through the descriptor pool to
check for any descriptors not freed for a long and trigger
self recovery when found.

Change-Id: Id97c5c8537c9bec922f4e254b5bf094505ee61ff
CRs-Fixed: 3109868
This commit is contained in:
Ananya Gupta
2022-01-14 08:20:37 +05:30
committed by Madan Koyyalamudi
parent d3e9c9ca97
commit 940984c6a6
8 changed files with 169 additions and 6 deletions

View File

@@ -942,4 +942,40 @@ bool dp_tx_pkt_tracepoints_enabled(void)
qdf_trace_dp_tx_comp_udp_pkt_enabled() ||
qdf_trace_dp_tx_comp_pkt_enabled());
}
#ifdef DP_TX_TRACKING
/**
* dp_tx_desc_set_timestamp() - set timestamp in tx descriptor
* @tx_desc - tx descriptor
*
* Return: None
*/
static inline
void dp_tx_desc_set_timestamp(struct dp_tx_desc_s *tx_desc)
{
tx_desc->timestamp = qdf_system_ticks();
}
/**
* dp_tx_desc_check_corruption() - Verify magic pattern in tx descriptor
* @tx_desc: tx descriptor
*
* Check for corruption in tx descriptor, if magic pattern is not matching
* trigger self recovery
*
* Return: none
*/
void dp_tx_desc_check_corruption(struct dp_tx_desc_s *tx_desc);
#else
static inline
void dp_tx_desc_set_timestamp(struct dp_tx_desc_s *tx_desc)
{
}
static inline
void dp_tx_desc_check_corruption(struct dp_tx_desc_s *tx_desc)
{
}
#endif
#endif