qcacmn: Fix Rx packet logging issue
Currently while sending nbuf to rx fate logs we are not removing rx tlv before sending nbuf to logger which is causing issue of incorrect packet type issue. To Fix issue make changes to make sure that rx tlv is removed and nbuf length is set Change-Id: Ib56c8e009398b3410c43be910feb4048bfb06b54 CRs-Fixed: 3241828
This commit is contained in:

committed by
Madan Koyyalamudi

parent
82fd1e58e2
commit
7e799fcbae
@@ -594,8 +594,6 @@ done:
|
|||||||
tid_stats =
|
tid_stats =
|
||||||
&rx_pdev->stats.tid_stats.tid_rx_stats[reo_ring_num][tid];
|
&rx_pdev->stats.tid_stats.tid_rx_stats[reo_ring_num][tid];
|
||||||
|
|
||||||
dp_rx_send_pktlog(soc, rx_pdev, nbuf, QDF_TX_RX_STATUS_OK);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if DMA completed -- msdu_done is the last bit
|
* Check if DMA completed -- msdu_done is the last bit
|
||||||
* to be written
|
* to be written
|
||||||
@@ -686,6 +684,8 @@ done:
|
|||||||
dp_rx_skip_tlvs(soc, nbuf, msdu_metadata.l3_hdr_pad);
|
dp_rx_skip_tlvs(soc, nbuf, msdu_metadata.l3_hdr_pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dp_rx_send_pktlog(soc, rx_pdev, nbuf, QDF_TX_RX_STATUS_OK);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* process frame for mulitpass phrase processing
|
* process frame for mulitpass phrase processing
|
||||||
*/
|
*/
|
||||||
|
@@ -3829,6 +3829,65 @@ void dp_rx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
|||||||
nbuf, status, QDF_RX_DATA_PKT);
|
nbuf, status, QDF_RX_DATA_PKT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dp_rx_err_send_pktlog() - send rx error packet log
|
||||||
|
* @soc: soc handle
|
||||||
|
* @pdev: pdev handle
|
||||||
|
* @mpdu_desc_info: MPDU descriptor info
|
||||||
|
* @nbuf: nbuf
|
||||||
|
* @status: status of rx packet
|
||||||
|
* @set_pktlen: weither to set packet length
|
||||||
|
*
|
||||||
|
* This API should only be called when we have not removed
|
||||||
|
* Rx TLV from head, and head is pointing to rx_tlv
|
||||||
|
*
|
||||||
|
* This function is used to send rx packet from erro path
|
||||||
|
* for logging for which rx packet tlv is not removed.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
void dp_rx_err_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
||||||
|
struct hal_rx_mpdu_desc_info *mpdu_desc_info,
|
||||||
|
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status,
|
||||||
|
bool set_pktlen)
|
||||||
|
{
|
||||||
|
ol_txrx_pktdump_cb packetdump_cb = pdev->dp_rx_packetdump_cb;
|
||||||
|
qdf_size_t skip_size;
|
||||||
|
uint16_t msdu_len, nbuf_len;
|
||||||
|
uint8_t *rx_tlv_hdr;
|
||||||
|
struct hal_rx_msdu_metadata msdu_metadata;
|
||||||
|
|
||||||
|
if (qdf_unlikely(packetdump_cb)) {
|
||||||
|
rx_tlv_hdr = qdf_nbuf_data(nbuf);
|
||||||
|
nbuf_len = hal_rx_msdu_start_msdu_len_get(soc->hal_soc,
|
||||||
|
rx_tlv_hdr);
|
||||||
|
hal_rx_msdu_metadata_get(soc->hal_soc, rx_tlv_hdr,
|
||||||
|
&msdu_metadata);
|
||||||
|
|
||||||
|
if (mpdu_desc_info->bar_frame ||
|
||||||
|
(mpdu_desc_info->mpdu_flags & HAL_MPDU_F_FRAGMENT))
|
||||||
|
skip_size = soc->rx_pkt_tlv_size;
|
||||||
|
else
|
||||||
|
skip_size = soc->rx_pkt_tlv_size +
|
||||||
|
msdu_metadata.l3_hdr_pad;
|
||||||
|
|
||||||
|
if (set_pktlen) {
|
||||||
|
msdu_len = nbuf_len + skip_size;
|
||||||
|
qdf_nbuf_set_pktlen(nbuf, qdf_min(msdu_len,
|
||||||
|
(uint16_t)RX_DATA_BUFFER_SIZE));
|
||||||
|
}
|
||||||
|
|
||||||
|
qdf_nbuf_pull_head(nbuf, skip_size);
|
||||||
|
packetdump_cb((ol_txrx_soc_handle)soc, pdev->pdev_id,
|
||||||
|
QDF_NBUF_CB_RX_VDEV_ID(nbuf),
|
||||||
|
nbuf, status, QDF_RX_DATA_PKT);
|
||||||
|
qdf_nbuf_push_head(nbuf, skip_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
static inline
|
static inline
|
||||||
void dp_tx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
void dp_tx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
||||||
@@ -3842,5 +3901,13 @@ void dp_rx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
|||||||
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
|
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void dp_rx_err_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
||||||
|
struct hal_rx_mpdu_desc_info *mpdu_desc_info,
|
||||||
|
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status,
|
||||||
|
bool set_pktlen)
|
||||||
|
{
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* #ifndef _DP_INTERNAL_H_ */
|
#endif /* #ifndef _DP_INTERNAL_H_ */
|
||||||
|
@@ -3078,6 +3078,11 @@ bool dp_rx_deliver_special_frame(struct dp_soc *soc,
|
|||||||
dp_rx_set_hdr_pad(nbuf, l2_hdr_offset);
|
dp_rx_set_hdr_pad(nbuf, l2_hdr_offset);
|
||||||
qdf_nbuf_pull_head(nbuf, skip_len);
|
qdf_nbuf_pull_head(nbuf, skip_len);
|
||||||
|
|
||||||
|
if (txrx_peer->vdev) {
|
||||||
|
dp_rx_send_pktlog(soc, txrx_peer->vdev->pdev, nbuf,
|
||||||
|
QDF_TX_RX_STATUS_OK);
|
||||||
|
}
|
||||||
|
|
||||||
if (dp_rx_is_special_frame(nbuf, frame_mask)) {
|
if (dp_rx_is_special_frame(nbuf, frame_mask)) {
|
||||||
dp_info("special frame, mpdu sn 0x%x",
|
dp_info("special frame, mpdu sn 0x%x",
|
||||||
hal_rx_get_rx_sequence(soc->hal_soc, rx_tlv_hdr));
|
hal_rx_get_rx_sequence(soc->hal_soc, rx_tlv_hdr));
|
||||||
|
@@ -1790,6 +1790,9 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc,
|
|||||||
pdev = txrx_peer->vdev->pdev;
|
pdev = txrx_peer->vdev->pdev;
|
||||||
rx_tid = &txrx_peer->rx_tid[tid];
|
rx_tid = &txrx_peer->rx_tid[tid];
|
||||||
|
|
||||||
|
dp_rx_err_send_pktlog(soc, pdev, mpdu_desc_info, frag,
|
||||||
|
QDF_TX_RX_STATUS_OK, false);
|
||||||
|
|
||||||
qdf_spin_lock_bh(&rx_tid->defrag_tid_lock);
|
qdf_spin_lock_bh(&rx_tid->defrag_tid_lock);
|
||||||
rx_reorder_array_elem = txrx_peer->rx_tid[tid].array;
|
rx_reorder_array_elem = txrx_peer->rx_tid[tid].array;
|
||||||
if (!rx_reorder_array_elem) {
|
if (!rx_reorder_array_elem) {
|
||||||
@@ -2044,7 +2047,6 @@ uint32_t dp_rx_frag_handle(struct dp_soc *soc, hal_ring_desc_t ring_desc,
|
|||||||
if (rx_desc->unmapped)
|
if (rx_desc->unmapped)
|
||||||
return rx_bufs_used;
|
return rx_bufs_used;
|
||||||
|
|
||||||
dp_rx_send_pktlog(soc, pdev, msdu, QDF_TX_RX_STATUS_OK);
|
|
||||||
dp_ipa_rx_buf_smmu_mapping_lock(soc);
|
dp_ipa_rx_buf_smmu_mapping_lock(soc);
|
||||||
dp_rx_nbuf_unmap_pool(soc, rx_desc_pool, rx_desc->nbuf);
|
dp_rx_nbuf_unmap_pool(soc, rx_desc_pool, rx_desc->nbuf);
|
||||||
rx_desc->unmapped = 1;
|
rx_desc->unmapped = 1;
|
||||||
|
@@ -370,9 +370,9 @@ more_msdu_link_desc:
|
|||||||
if (hal_rx_encryption_info_valid(soc->hal_soc, rx_tlv_hdr))
|
if (hal_rx_encryption_info_valid(soc->hal_soc, rx_tlv_hdr))
|
||||||
hal_rx_print_pn(soc->hal_soc, rx_tlv_hdr);
|
hal_rx_print_pn(soc->hal_soc, rx_tlv_hdr);
|
||||||
|
|
||||||
dp_rx_send_pktlog(soc, pdev, rx_desc->nbuf,
|
dp_rx_err_send_pktlog(soc, pdev, mpdu_desc_info,
|
||||||
QDF_TX_RX_STATUS_DROP);
|
rx_desc->nbuf,
|
||||||
|
QDF_TX_RX_STATUS_DROP, true);
|
||||||
/* Just free the buffers */
|
/* Just free the buffers */
|
||||||
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf, *mac_id);
|
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf, *mac_id);
|
||||||
|
|
||||||
@@ -863,7 +863,8 @@ dp_rx_bar_frame_handle(struct dp_soc *soc,
|
|||||||
|
|
||||||
_dp_rx_bar_frame_handle(soc, nbuf, mpdu_desc_info, tid, err_status,
|
_dp_rx_bar_frame_handle(soc, nbuf, mpdu_desc_info, tid, err_status,
|
||||||
err_code);
|
err_code);
|
||||||
dp_rx_send_pktlog(soc, pdev, nbuf, QDF_TX_RX_STATUS_DROP);
|
dp_rx_err_send_pktlog(soc, pdev, mpdu_desc_info, nbuf,
|
||||||
|
QDF_TX_RX_STATUS_DROP, true);
|
||||||
dp_rx_link_desc_return(soc, ring_desc,
|
dp_rx_link_desc_return(soc, ring_desc,
|
||||||
HAL_BM_ACTION_PUT_IN_IDLE_LIST);
|
HAL_BM_ACTION_PUT_IN_IDLE_LIST);
|
||||||
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf,
|
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf,
|
||||||
@@ -1541,7 +1542,6 @@ more_msdu_link_desc:
|
|||||||
/* all buffers from a MSDU link belong to same pdev */
|
/* all buffers from a MSDU link belong to same pdev */
|
||||||
pdev = dp_get_pdev_for_lmac_id(soc, rx_desc_pool_id);
|
pdev = dp_get_pdev_for_lmac_id(soc, rx_desc_pool_id);
|
||||||
|
|
||||||
dp_rx_send_pktlog(soc, pdev, nbuf, QDF_TX_RX_STATUS_OK);
|
|
||||||
rx_desc_pool = &soc->rx_desc_buf[rx_desc_pool_id];
|
rx_desc_pool = &soc->rx_desc_buf[rx_desc_pool_id];
|
||||||
dp_ipa_rx_buf_smmu_mapping_lock(soc);
|
dp_ipa_rx_buf_smmu_mapping_lock(soc);
|
||||||
dp_rx_nbuf_unmap_pool(soc, rx_desc_pool, nbuf);
|
dp_rx_nbuf_unmap_pool(soc, rx_desc_pool, nbuf);
|
||||||
|
@@ -658,8 +658,6 @@ done:
|
|||||||
old_tid = tid;
|
old_tid = tid;
|
||||||
}
|
}
|
||||||
|
|
||||||
dp_rx_send_pktlog(soc, rx_pdev, nbuf, QDF_TX_RX_STATUS_OK);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if DMA completed -- msdu_done is the last bit
|
* Check if DMA completed -- msdu_done is the last bit
|
||||||
* to be written
|
* to be written
|
||||||
@@ -757,6 +755,8 @@ done:
|
|||||||
dp_rx_skip_tlvs(soc, nbuf, msdu_metadata.l3_hdr_pad);
|
dp_rx_skip_tlvs(soc, nbuf, msdu_metadata.l3_hdr_pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dp_rx_send_pktlog(soc, rx_pdev, nbuf, QDF_TX_RX_STATUS_OK);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* process frame for mulitpass phrase processing
|
* process frame for mulitpass phrase processing
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user