qcacmn: Add history for REO queue descriptor events
Add history to log REO queue desc update and free events. Change-Id: If2992ff1256fad49ea4ea6bd90b6dfe4a63d2bc4 CRs-Fixed: 2926919
This commit is contained in:

committed by
Madan Koyyalamudi

parent
5d097b9e40
commit
26086e7971
@@ -41,6 +41,12 @@
|
|||||||
#include "dp_hist.h"
|
#include "dp_hist.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef REO_QDESC_HISTORY
|
||||||
|
#define REO_QDESC_HISTORY_SIZE 512
|
||||||
|
uint64_t reo_qdesc_history_idx;
|
||||||
|
struct reo_qdesc_event reo_qdesc_history[REO_QDESC_HISTORY_SIZE];
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FEATURE_WDS
|
#ifdef FEATURE_WDS
|
||||||
static inline bool
|
static inline bool
|
||||||
dp_peer_ast_free_in_unmap_supported(struct dp_soc *soc,
|
dp_peer_ast_free_in_unmap_supported(struct dp_soc *soc,
|
||||||
@@ -77,6 +83,42 @@ static void dp_soc_wds_detach(struct dp_soc *soc)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef REO_QDESC_HISTORY
|
||||||
|
static inline void
|
||||||
|
dp_rx_reo_qdesc_history_add(struct reo_desc_list_node *free_desc,
|
||||||
|
enum reo_qdesc_event_type type)
|
||||||
|
{
|
||||||
|
struct reo_qdesc_event *evt;
|
||||||
|
struct dp_rx_tid *rx_tid = &free_desc->rx_tid;
|
||||||
|
uint32_t idx;
|
||||||
|
|
||||||
|
reo_qdesc_history_idx++;
|
||||||
|
idx = (reo_qdesc_history_idx & (REO_QDESC_HISTORY_SIZE - 1));
|
||||||
|
|
||||||
|
evt = &reo_qdesc_history[idx];
|
||||||
|
|
||||||
|
qdf_mem_copy(evt->peer_mac, free_desc->peer_mac, QDF_MAC_ADDR_SIZE);
|
||||||
|
evt->qdesc_addr = rx_tid->hw_qdesc_paddr;
|
||||||
|
evt->ts = qdf_get_log_timestamp();
|
||||||
|
evt->type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DP_RX_REO_QDESC_GET_MAC(freedesc, peer) \
|
||||||
|
qdf_mem_copy(freedesc->peer_mac, peer->mac_addr.raw, QDF_MAC_ADDR_SIZE)
|
||||||
|
|
||||||
|
#define DP_RX_REO_QDESC_UPDATE_EVT(free_desc) \
|
||||||
|
dp_rx_reo_qdesc_history_add((free_desc), REO_QDESC_UPDATE_CB)
|
||||||
|
|
||||||
|
#define DP_RX_REO_QDESC_FREE_EVT(free_desc) \
|
||||||
|
dp_rx_reo_qdesc_history_add((free_desc), REO_QDESC_FREE)
|
||||||
|
#else
|
||||||
|
#define DP_RX_REO_QDESC_GET_MAC(freedesc, peer)
|
||||||
|
|
||||||
|
#define DP_RX_REO_QDESC_UPDATE_EVT(free_desc)
|
||||||
|
|
||||||
|
#define DP_RX_REO_QDESC_FREE_EVT(free_desc)
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
dp_set_ssn_valid_flag(struct hal_reo_cmd_params *params,
|
dp_set_ssn_valid_flag(struct hal_reo_cmd_params *params,
|
||||||
uint8_t valid)
|
uint8_t valid)
|
||||||
@@ -2492,6 +2534,9 @@ static void dp_reo_desc_free(struct dp_soc *soc, void *cb_ctxt,
|
|||||||
dp_peer_info("%pK: %lu hw_qdesc_paddr: %pK, tid:%d", soc,
|
dp_peer_info("%pK: %lu hw_qdesc_paddr: %pK, tid:%d", soc,
|
||||||
curr_ts, (void *)(rx_tid->hw_qdesc_paddr),
|
curr_ts, (void *)(rx_tid->hw_qdesc_paddr),
|
||||||
rx_tid->tid);
|
rx_tid->tid);
|
||||||
|
|
||||||
|
DP_RX_REO_QDESC_FREE_EVT(freedesc);
|
||||||
|
|
||||||
qdf_mem_unmap_nbytes_single(soc->osdev,
|
qdf_mem_unmap_nbytes_single(soc->osdev,
|
||||||
rx_tid->hw_qdesc_paddr,
|
rx_tid->hw_qdesc_paddr,
|
||||||
QDF_DMA_BIDIRECTIONAL,
|
QDF_DMA_BIDIRECTIONAL,
|
||||||
@@ -2831,6 +2876,8 @@ void dp_rx_tid_delete_cb(struct dp_soc *soc, void *cb_ctxt,
|
|||||||
struct hal_reo_cmd_params params;
|
struct hal_reo_cmd_params params;
|
||||||
bool flush_failure = false;
|
bool flush_failure = false;
|
||||||
|
|
||||||
|
DP_RX_REO_QDESC_UPDATE_EVT(freedesc);
|
||||||
|
|
||||||
if (reo_status->rx_queue_status.header.status == HAL_REO_CMD_DRAIN) {
|
if (reo_status->rx_queue_status.header.status == HAL_REO_CMD_DRAIN) {
|
||||||
qdf_mem_zero(reo_status, sizeof(*reo_status));
|
qdf_mem_zero(reo_status, sizeof(*reo_status));
|
||||||
reo_status->fl_cache_status.header.status = HAL_REO_CMD_DRAIN;
|
reo_status->fl_cache_status.header.status = HAL_REO_CMD_DRAIN;
|
||||||
@@ -2982,6 +3029,8 @@ static int dp_rx_tid_delete_wifi3(struct dp_peer *peer, int tid)
|
|||||||
|
|
||||||
qdf_mem_zero(¶ms, sizeof(params));
|
qdf_mem_zero(¶ms, sizeof(params));
|
||||||
|
|
||||||
|
DP_RX_REO_QDESC_GET_MAC(freedesc, peer);
|
||||||
|
|
||||||
params.std.need_status = 1;
|
params.std.need_status = 1;
|
||||||
params.std.addr_lo = rx_tid->hw_qdesc_paddr & 0xffffffff;
|
params.std.addr_lo = rx_tid->hw_qdesc_paddr & 0xffffffff;
|
||||||
params.std.addr_hi = (uint64_t)(rx_tid->hw_qdesc_paddr) >> 32;
|
params.std.addr_hi = (uint64_t)(rx_tid->hw_qdesc_paddr) >> 32;
|
||||||
|
@@ -40,6 +40,20 @@
|
|||||||
__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP_PEER, ## params)
|
__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP_PEER, ## params)
|
||||||
#define dp_peer_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_PEER, params)
|
#define dp_peer_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_PEER, params)
|
||||||
|
|
||||||
|
#ifdef REO_QDESC_HISTORY
|
||||||
|
enum reo_qdesc_event_type {
|
||||||
|
REO_QDESC_UPDATE_CB = 0,
|
||||||
|
REO_QDESC_FREE,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct reo_qdesc_event {
|
||||||
|
qdf_dma_addr_t qdesc_addr;
|
||||||
|
uint64_t ts;
|
||||||
|
enum reo_qdesc_event_type type;
|
||||||
|
uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef void dp_peer_iter_func(struct dp_soc *soc, struct dp_peer *peer,
|
typedef void dp_peer_iter_func(struct dp_soc *soc, struct dp_peer *peer,
|
||||||
void *arg);
|
void *arg);
|
||||||
void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id id);
|
void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id id);
|
||||||
|
@@ -821,6 +821,9 @@ struct reo_desc_list_node {
|
|||||||
struct dp_rx_tid rx_tid;
|
struct dp_rx_tid rx_tid;
|
||||||
bool resend_update_reo_cmd;
|
bool resend_update_reo_cmd;
|
||||||
uint32_t pending_ext_desc_size;
|
uint32_t pending_ext_desc_size;
|
||||||
|
#ifdef REO_QDESC_HISTORY
|
||||||
|
uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_DP_EVENT_HISTORY
|
#ifdef WLAN_FEATURE_DP_EVENT_HISTORY
|
||||||
|
Reference in New Issue
Block a user