|
@@ -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);
|
|
|
}
|
|
|
|
|
|
/**
|