diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h index 823c492398..ea01d9320f 100644 --- a/dp/wifi3.0/dp_rx.h +++ b/dp/wifi3.0/dp_rx.h @@ -91,12 +91,16 @@ enum dp_rx_desc_state { * @replenish_caller: name of the function that last * replenished the rx desc * @replenish_ts: last replenish timestamp + * @prev_nbuf: previous nbuf info + * @prev_nbuf_data_addr: previous nbuf data address */ struct dp_rx_desc_dbg_info { char freelist_caller[QDF_MEM_FUNC_NAME_SIZE]; uint64_t freelist_ts; char replenish_caller[QDF_MEM_FUNC_NAME_SIZE]; uint64_t replenish_ts; + qdf_nbuf_t prev_nbuf; + uint8_t *prev_nbuf_data_addr; }; #endif /* QCA_HOST_MODE_WIFI_DISABLED */ @@ -121,6 +125,7 @@ struct dp_rx_desc_dbg_info { * @unmapped used to mark rx_desc an unmapped if the corresponding * nbuf is already unmapped * @in_err_state : Nbuf sanity failed for this descriptor. + * @nbuf_data_addr : VA of nbuf data posted */ struct dp_rx_desc { qdf_nbuf_t nbuf; @@ -130,6 +135,7 @@ struct dp_rx_desc { uint8_t pool_id; #ifdef RX_DESC_DEBUG_CHECK uint32_t magic; + uint8_t *nbuf_data_addr; struct dp_rx_desc_dbg_info *dbg_info; #endif uint8_t in_use:1, @@ -806,6 +812,9 @@ void dp_rx_desc_update_dbg_info(struct dp_rx_desc *rx_desc, qdf_str_lcopy(info->freelist_caller, func_name, QDF_MEM_FUNC_NAME_SIZE); info->freelist_ts = qdf_get_log_timestamp(); + info->prev_nbuf = rx_desc->nbuf; + info->prev_nbuf_data_addr = rx_desc->nbuf_data_addr; + rx_desc->nbuf_data_addr = NULL; } } #else @@ -851,6 +860,8 @@ void __dp_rx_add_to_free_desc_list(union dp_rx_desc_list_elem_t **head, { qdf_assert(head && new); + dp_rx_desc_update_dbg_info(new, func_name, RX_DESC_IN_FREELIST); + new->nbuf = NULL; new->in_use = 0; @@ -859,8 +870,6 @@ void __dp_rx_add_to_free_desc_list(union dp_rx_desc_list_elem_t **head, /* reset tail if head->next is NULL */ if (!*tail || !(*head)->next) *tail = *head; - - dp_rx_desc_update_dbg_info(new, func_name, RX_DESC_IN_FREELIST); } uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t nbuf, @@ -1366,6 +1375,7 @@ void dp_rx_desc_prep(struct dp_rx_desc *rx_desc, rx_desc->magic = DP_RX_DESC_MAGIC; rx_desc->nbuf = (nbuf_frag_info_t->virt_addr).nbuf; rx_desc->unmapped = 0; + rx_desc->nbuf_data_addr = (uint8_t *)qdf_nbuf_data(rx_desc->nbuf); } /**