qcacmn: qref debug memory tracker
add multiple history array to keep track of mem allocation and deallocation for qref table. Change-Id: I9fa97fbe5a5c36509cbb5a458851a152200318a5 CRs-Fixed: 3475981
このコミットが含まれているのは:
@@ -48,6 +48,84 @@
|
||||
__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)
|
||||
|
||||
void check_free_list_for_invalid_flush(struct dp_soc *soc);
|
||||
|
||||
static inline
|
||||
void add_entry_alloc_list(struct dp_soc *soc, struct dp_rx_tid *rx_tid,
|
||||
struct dp_peer *peer, void *hw_qdesc_vaddr)
|
||||
{
|
||||
uint32_t max_list_size;
|
||||
unsigned long curr_ts = qdf_get_system_timestamp();
|
||||
uint32_t qref_index = soc->free_addr_list_idx;
|
||||
|
||||
max_list_size = soc->wlan_cfg_ctx->qref_control_size;
|
||||
|
||||
if (max_list_size == 0)
|
||||
return;
|
||||
|
||||
soc->list_qdesc_addr_alloc[qref_index].hw_qdesc_paddr =
|
||||
rx_tid->hw_qdesc_paddr;
|
||||
soc->list_qdesc_addr_alloc[qref_index].ts_qdesc_mem_hdl = curr_ts;
|
||||
soc->list_qdesc_addr_alloc[qref_index].hw_qdesc_vaddr_align =
|
||||
hw_qdesc_vaddr;
|
||||
soc->list_qdesc_addr_alloc[qref_index].hw_qdesc_vaddr_unalign =
|
||||
rx_tid->hw_qdesc_vaddr_unaligned;
|
||||
soc->list_qdesc_addr_alloc[qref_index].peer_id = peer->peer_id;
|
||||
soc->list_qdesc_addr_alloc[qref_index].tid = rx_tid->tid;
|
||||
soc->alloc_addr_list_idx++;
|
||||
|
||||
if (soc->alloc_addr_list_idx == max_list_size)
|
||||
soc->alloc_addr_list_idx = 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
void add_entry_free_list(struct dp_soc *soc, struct dp_rx_tid *rx_tid)
|
||||
{
|
||||
uint32_t max_list_size;
|
||||
unsigned long curr_ts = qdf_get_system_timestamp();
|
||||
uint32_t qref_index = soc->free_addr_list_idx;
|
||||
|
||||
max_list_size = soc->wlan_cfg_ctx->qref_control_size;
|
||||
|
||||
if (max_list_size == 0)
|
||||
return;
|
||||
|
||||
soc->list_qdesc_addr_free[qref_index].ts_qdesc_mem_hdl = curr_ts;
|
||||
soc->list_qdesc_addr_free[qref_index].hw_qdesc_paddr =
|
||||
rx_tid->hw_qdesc_paddr;
|
||||
soc->list_qdesc_addr_free[qref_index].hw_qdesc_vaddr_align =
|
||||
rx_tid->hw_qdesc_vaddr_aligned;
|
||||
soc->list_qdesc_addr_free[qref_index].hw_qdesc_vaddr_unalign =
|
||||
rx_tid->hw_qdesc_vaddr_unaligned;
|
||||
soc->free_addr_list_idx++;
|
||||
|
||||
if (soc->free_addr_list_idx == max_list_size)
|
||||
soc->free_addr_list_idx = 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
void add_entry_write_list(struct dp_soc *soc, struct dp_peer *peer,
|
||||
uint32_t tid)
|
||||
{
|
||||
uint32_t max_list_size;
|
||||
unsigned long curr_ts = qdf_get_system_timestamp();
|
||||
|
||||
max_list_size = soc->wlan_cfg_ctx->qref_control_size;
|
||||
|
||||
if (max_list_size == 0)
|
||||
return;
|
||||
|
||||
soc->reo_write_list[soc->write_paddr_list_idx].ts_qaddr_del = curr_ts;
|
||||
soc->reo_write_list[soc->write_paddr_list_idx].peer_id = peer->peer_id;
|
||||
soc->reo_write_list[soc->write_paddr_list_idx].paddr =
|
||||
peer->rx_tid[tid].hw_qdesc_paddr;
|
||||
soc->reo_write_list[soc->write_paddr_list_idx].tid = tid;
|
||||
soc->write_paddr_list_idx++;
|
||||
|
||||
if (soc->write_paddr_list_idx == max_list_size)
|
||||
soc->write_paddr_list_idx = 0;
|
||||
}
|
||||
|
||||
#ifdef REO_QDESC_HISTORY
|
||||
enum reo_qdesc_event_type {
|
||||
REO_QDESC_UPDATE_CB = 0,
|
||||
|
新しいイシューから参照
ユーザーをブロックする