qcacmn: Enabled asserts in Rx error path
Enable qdf_assert on rx error path to detect corruption issues. Also add a magic word in rx_desc and compare on rx indications to detect any corruption issues early in the path Change-Id: I4df1220f19c891928f9687f40de6f2118b530db2 CRs-Fixed: 2004658
Этот коммит содержится в:

коммит произвёл
snandini

родитель
93f633c394
Коммит
5379474f69
@@ -29,6 +29,19 @@
|
||||
#include "dp_internal.h"
|
||||
#include "dp_rx_mon.h"
|
||||
|
||||
#ifdef RX_DESC_DEBUG_CHECK
|
||||
static inline void dp_rx_desc_prep(struct dp_rx_desc *rx_desc, qdf_nbuf_t nbuf)
|
||||
{
|
||||
rx_desc->magic = DP_RX_DESC_MAGIC;
|
||||
rx_desc->nbuf = nbuf;
|
||||
}
|
||||
#else
|
||||
static inline void dp_rx_desc_prep(struct dp_rx_desc *rx_desc, qdf_nbuf_t nbuf)
|
||||
{
|
||||
rx_desc->nbuf = nbuf;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* dp_rx_buffers_replenish() - replenish rxdma ring with rx nbufs
|
||||
* called during dp rx initialization
|
||||
@@ -160,7 +173,7 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
||||
|
||||
next = (*desc_list)->next;
|
||||
|
||||
(*desc_list)->rx_desc.nbuf = rx_netbuf;
|
||||
dp_rx_desc_prep(&((*desc_list)->rx_desc), rx_netbuf);
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||
"rx_netbuf=%p, buf=%p, paddr=0x%llx, cookie=%d\n",
|
||||
|
@@ -45,6 +45,8 @@
|
||||
(((_peer_metadata) & DP_PEER_METADATA_VDEV_ID_MASK) \
|
||||
>> DP_PEER_METADATA_VDEV_ID_SHIFT)
|
||||
|
||||
#define DP_RX_DESC_MAGIC 0xdec0de
|
||||
|
||||
/**
|
||||
* struct dp_rx_desc
|
||||
*
|
||||
@@ -65,6 +67,9 @@ struct dp_rx_desc {
|
||||
uint8_t *rx_buf_start;
|
||||
uint32_t cookie;
|
||||
uint8_t pool_id;
|
||||
#ifdef RX_DESC_DEBUG_CHECK
|
||||
uint32_t magic;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define RX_DESC_COOKIE_INDEX_SHIFT 0
|
||||
|
@@ -31,6 +31,22 @@
|
||||
#include "dp_rx_defrag.h"
|
||||
#include <enet.h> /* LLC_SNAP_HDR_LEN */
|
||||
|
||||
#ifdef RX_DESC_DEBUG_CHECK
|
||||
static inline bool dp_rx_desc_check_magic(struct dp_rx_desc *rx_desc)
|
||||
{
|
||||
if (qdf_unlikely(rx_desc->magic != DP_RX_DESC_MAGIC)) {
|
||||
return false;
|
||||
}
|
||||
rx_desc->magic = 0;
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
static inline bool dp_rx_desc_check_magic(struct dp_rx_desc *rx_desc)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* dp_rx_msdus_drop() - Drops all MSDU's per MPDU
|
||||
*
|
||||
@@ -46,10 +62,10 @@
|
||||
* Return: uint32_t: No. of elements processed
|
||||
*/
|
||||
static uint32_t dp_rx_msdus_drop(struct dp_soc *soc, void *ring_desc,
|
||||
struct hal_rx_mpdu_desc_info *mpdu_desc_info,
|
||||
union dp_rx_desc_list_elem_t **head,
|
||||
union dp_rx_desc_list_elem_t **tail,
|
||||
uint32_t quota)
|
||||
struct hal_rx_mpdu_desc_info *mpdu_desc_info,
|
||||
union dp_rx_desc_list_elem_t **head,
|
||||
union dp_rx_desc_list_elem_t **tail,
|
||||
uint32_t quota)
|
||||
{
|
||||
uint32_t rx_bufs_used = 0;
|
||||
void *link_desc_va;
|
||||
@@ -72,6 +88,13 @@ static uint32_t dp_rx_msdus_drop(struct dp_soc *soc, void *ring_desc,
|
||||
|
||||
qdf_assert(rx_desc);
|
||||
|
||||
if (!dp_rx_desc_check_magic(rx_desc)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("Invalid rx_desc cookie=%d"),
|
||||
msdu_list.sw_cookie[i]);
|
||||
return rx_bufs_used;
|
||||
}
|
||||
|
||||
rx_bufs_used++;
|
||||
|
||||
/* Just free the buffers */
|
||||
@@ -653,12 +676,20 @@ dp_rx_wbm_err_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
||||
rx_desc = dp_rx_cookie_2_va_rxdma_buf(soc, rx_buf_cookie);
|
||||
qdf_assert(rx_desc);
|
||||
|
||||
if (!dp_rx_desc_check_magic(rx_desc)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("Invalid rx_desc cookie=%d"),
|
||||
rx_buf_cookie);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* XXX */
|
||||
buf_type = HAL_RX_WBM_BUF_TYPE_GET(ring_desc);
|
||||
|
||||
/*
|
||||
* For WBM ring, expect only MSDU buffers
|
||||
*/
|
||||
qdf_assert(buf_type == HAL_RX_WBM_BUF_TYPE_REL_BUF);
|
||||
qdf_assert_always(buf_type == HAL_RX_WBM_BUF_TYPE_REL_BUF);
|
||||
|
||||
if (wbm_err_src == HAL_RX_WBM_ERR_SRC_REO) {
|
||||
|
||||
@@ -726,18 +757,6 @@ dp_rx_wbm_err_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
||||
}
|
||||
} else {
|
||||
/* Should not come here */
|
||||
rx_buf_cookie = HAL_RX_WBM_BUF_COOKIE_GET(ring_desc);
|
||||
rx_desc = dp_rx_cookie_2_va_rxdma_buf(soc, rx_buf_cookie);
|
||||
|
||||
qdf_assert(rx_desc);
|
||||
|
||||
qdf_nbuf_unmap_single(soc->osdev, rx_desc->nbuf,
|
||||
QDF_DMA_BIDIRECTIONAL);
|
||||
|
||||
rx_desc->rx_buf_start = qdf_nbuf_data(rx_desc->nbuf);
|
||||
hal_rx_dump_pkt_tlvs(rx_desc->rx_buf_start,
|
||||
QDF_TRACE_LEVEL_INFO);
|
||||
|
||||
qdf_assert(0);
|
||||
}
|
||||
|
||||
|
@@ -1957,10 +1957,6 @@ enum hal_rx_wbm_rxdma_push_reason {
|
||||
HAL_RX_BUF_COOKIE_GET(&((struct wbm_release_ring *) \
|
||||
wbm_desc)->released_buff_or_desc_addr_info)
|
||||
|
||||
#define HAL_RX_WBM_BUF_COOKIE_GET(wbm_desc) \
|
||||
HAL_RX_BUF_COOKIE_GET(&((struct wbm_release_ring *) \
|
||||
wbm_desc)->released_buff_or_desc_addr_info)
|
||||
|
||||
/**
|
||||
* hal_rx_dump_rx_attention_tlv: dump RX attention TLV in structured
|
||||
* humman readable format.
|
||||
|
Ссылка в новой задаче
Block a user