qcacmn: Free the raw mode mpdus in REO error ring
Raw mode mpdus in REO end up resulting in NULL_QUEUE_DESCRIPTOR error. Raw mode mpdus are not expected in REO, free them without further processing. Change-Id: Ica920caecf90a1107ce17836051e1019c9dfc994 CRs-Fixed: 3282836
This commit is contained in:

committed by
Madan Koyyalamudi

parent
499b2deb3b
commit
60c0c089cd
@@ -2650,6 +2650,7 @@ struct cdp_soc_stats {
|
|||||||
uint32_t rx_hw_err_msdu_buf_rcved;
|
uint32_t rx_hw_err_msdu_buf_rcved;
|
||||||
uint32_t rx_hw_err_msdu_buf_invalid_cookie;
|
uint32_t rx_hw_err_msdu_buf_invalid_cookie;
|
||||||
uint32_t rx_hw_err_oor_drop;
|
uint32_t rx_hw_err_oor_drop;
|
||||||
|
uint32_t rx_hw_err_raw_mpdu_drop;
|
||||||
uint32_t rx_hw_err_oor_to_stack;
|
uint32_t rx_hw_err_oor_to_stack;
|
||||||
uint32_t rx_hw_err_oor_sg_count;
|
uint32_t rx_hw_err_oor_sg_count;
|
||||||
uint32_t msdu_count_mismatch;
|
uint32_t msdu_count_mismatch;
|
||||||
|
@@ -1505,12 +1505,6 @@ out:
|
|||||||
if (soc->cdp_soc.ol_ops->rx_invalid_peer)
|
if (soc->cdp_soc.ol_ops->rx_invalid_peer)
|
||||||
soc->cdp_soc.ol_ops->rx_invalid_peer(vdev->vdev_id, wh);
|
soc->cdp_soc.ol_ops->rx_invalid_peer(vdev->vdev_id, wh);
|
||||||
free:
|
free:
|
||||||
/* reset the head and tail pointers */
|
|
||||||
pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
|
|
||||||
if (pdev) {
|
|
||||||
pdev->invalid_peer_head_msdu = NULL;
|
|
||||||
pdev->invalid_peer_tail_msdu = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Drop and free packet */
|
/* Drop and free packet */
|
||||||
curr_nbuf = mpdu;
|
curr_nbuf = mpdu;
|
||||||
|
@@ -1557,6 +1557,17 @@ more_msdu_link_desc:
|
|||||||
goto process_next_msdu;
|
goto process_next_msdu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hal_rx_tlv_populate_mpdu_desc_info(soc->hal_soc,
|
||||||
|
qdf_nbuf_data(head_nbuf),
|
||||||
|
mpdu_desc_info);
|
||||||
|
if (qdf_unlikely(mpdu_desc_info->mpdu_flags &
|
||||||
|
HAL_MPDU_F_RAW_AMPDU)) {
|
||||||
|
dp_err_rl("RAW ampdu in REO error not expected");
|
||||||
|
DP_STATS_INC(soc, rx.err.reo_err_raw_mpdu_drop, 1);
|
||||||
|
qdf_nbuf_list_free(head_nbuf);
|
||||||
|
goto process_next_msdu;
|
||||||
|
}
|
||||||
|
|
||||||
rx_tlv_hdr_first = qdf_nbuf_data(head_nbuf);
|
rx_tlv_hdr_first = qdf_nbuf_data(head_nbuf);
|
||||||
rx_tlv_hdr_last = qdf_nbuf_data(tail_nbuf);
|
rx_tlv_hdr_last = qdf_nbuf_data(tail_nbuf);
|
||||||
|
|
||||||
|
@@ -7262,6 +7262,8 @@ void dp_txrx_path_stats(struct dp_soc *soc)
|
|||||||
pdev->soc->stats.rx.err.reo_err_oor_to_stack);
|
pdev->soc->stats.rx.err.reo_err_oor_to_stack);
|
||||||
DP_PRINT_STATS("REO err oor msdu drop: %u",
|
DP_PRINT_STATS("REO err oor msdu drop: %u",
|
||||||
pdev->soc->stats.rx.err.reo_err_oor_drop);
|
pdev->soc->stats.rx.err.reo_err_oor_drop);
|
||||||
|
DP_PRINT_STATS("REO err raw mpdu drop: %u",
|
||||||
|
pdev->soc->stats.rx.err.reo_err_raw_mpdu_drop);
|
||||||
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
||||||
soc->stats.rx.err.rejected);
|
soc->stats.rx.err.rejected);
|
||||||
DP_PRINT_STATS("Rx raw frame dropped: %d",
|
DP_PRINT_STATS("Rx raw frame dropped: %d",
|
||||||
@@ -7928,6 +7930,9 @@ dp_print_soc_rx_stats(struct dp_soc *soc)
|
|||||||
DP_PRINT_STATS("REO err oor msdu drop: %d",
|
DP_PRINT_STATS("REO err oor msdu drop: %d",
|
||||||
soc->stats.rx.err.reo_err_oor_drop);
|
soc->stats.rx.err.reo_err_oor_drop);
|
||||||
|
|
||||||
|
DP_PRINT_STATS("REO err raw ampdu drop: %d",
|
||||||
|
soc->stats.rx.err.reo_err_raw_mpdu_drop);
|
||||||
|
|
||||||
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
||||||
soc->stats.rx.err.rejected);
|
soc->stats.rx.err.rejected);
|
||||||
|
|
||||||
@@ -8910,6 +8915,8 @@ QDF_STATUS dp_txrx_get_soc_stats(struct cdp_soc_t *soc_hdl,
|
|||||||
soc->stats.rx.err.reo_err_msdu_buf_invalid_cookie;
|
soc->stats.rx.err.reo_err_msdu_buf_invalid_cookie;
|
||||||
soc_stats->rx.err.rx_hw_err_oor_drop =
|
soc_stats->rx.err.rx_hw_err_oor_drop =
|
||||||
soc->stats.rx.err.reo_err_oor_drop;
|
soc->stats.rx.err.reo_err_oor_drop;
|
||||||
|
soc_stats->rx.err.rx_hw_err_raw_mpdu_drop =
|
||||||
|
soc->stats.rx.err.reo_err_raw_mpdu_drop;
|
||||||
soc_stats->rx.err.rx_hw_err_oor_to_stack =
|
soc_stats->rx.err.rx_hw_err_oor_to_stack =
|
||||||
soc->stats.rx.err.reo_err_oor_to_stack;
|
soc->stats.rx.err.reo_err_oor_to_stack;
|
||||||
soc_stats->rx.err.rx_hw_err_oor_sg_count =
|
soc_stats->rx.err.rx_hw_err_oor_sg_count =
|
||||||
|
@@ -1217,6 +1217,8 @@ struct dp_soc_stats {
|
|||||||
uint32_t reo_err_oor_to_stack;
|
uint32_t reo_err_oor_to_stack;
|
||||||
/* REO OOR scattered msdu count */
|
/* REO OOR scattered msdu count */
|
||||||
uint32_t reo_err_oor_sg_count;
|
uint32_t reo_err_oor_sg_count;
|
||||||
|
/* REO ERR RAW mpdu drops */
|
||||||
|
uint32_t reo_err_raw_mpdu_drop;
|
||||||
/* RX msdu rejected count on delivery to vdev stack_fn*/
|
/* RX msdu rejected count on delivery to vdev stack_fn*/
|
||||||
uint32_t rejected;
|
uint32_t rejected;
|
||||||
/* Incorrect msdu count in MPDU desc info */
|
/* Incorrect msdu count in MPDU desc info */
|
||||||
|
@@ -1109,6 +1109,36 @@ static void hal_rx_dump_pkt_tlvs_kiwi(hal_soc_handle_t hal_soc_hdl,
|
|||||||
hal_rx_dump_pkt_hdr_tlv_kiwi(pkt_tlvs, dbg_level);
|
hal_rx_dump_pkt_hdr_tlv_kiwi(pkt_tlvs, dbg_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hal_rx_get_mpdu_flags_from_tlv() - Populate the local mpdu_flags elements
|
||||||
|
* from the rx tlvs
|
||||||
|
* @mpdu_info: buf address to rx_mpdu_info
|
||||||
|
*
|
||||||
|
* Return: mpdu_flags.
|
||||||
|
*/
|
||||||
|
static inline uint32_t
|
||||||
|
hal_rx_get_mpdu_flags_from_tlv(struct rx_mpdu_info *mpdu_info)
|
||||||
|
{
|
||||||
|
uint32_t mpdu_flags = 0;
|
||||||
|
|
||||||
|
if (mpdu_info->fragment_flag)
|
||||||
|
mpdu_flags |= HAL_MPDU_F_FRAGMENT;
|
||||||
|
|
||||||
|
if (mpdu_info->mpdu_retry)
|
||||||
|
mpdu_flags |= HAL_MPDU_F_RETRY_BIT;
|
||||||
|
|
||||||
|
if (mpdu_info->ampdu_flag)
|
||||||
|
mpdu_flags |= HAL_MPDU_F_AMPDU_FLAG;
|
||||||
|
|
||||||
|
if (mpdu_info->raw_mpdu)
|
||||||
|
mpdu_flags |= HAL_MPDU_F_RAW_AMPDU;
|
||||||
|
|
||||||
|
if (mpdu_info->mpdu_qos_control_valid)
|
||||||
|
mpdu_flags |= HAL_MPDU_F_QOS_CONTROL_VALID;
|
||||||
|
|
||||||
|
return mpdu_flags;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hal_rx_tlv_populate_mpdu_desc_info_kiwi() - Populate the local mpdu_desc_info
|
* hal_rx_tlv_populate_mpdu_desc_info_kiwi() - Populate the local mpdu_desc_info
|
||||||
* elements from the rx tlvs
|
* elements from the rx tlvs
|
||||||
@@ -1130,8 +1160,7 @@ hal_rx_tlv_populate_mpdu_desc_info_kiwi(uint8_t *buf,
|
|||||||
struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
|
struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
|
||||||
|
|
||||||
mpdu_desc_info->mpdu_seq = mpdu_info->mpdu_sequence_number;
|
mpdu_desc_info->mpdu_seq = mpdu_info->mpdu_sequence_number;
|
||||||
mpdu_desc_info->mpdu_flags = hal_rx_get_mpdu_flags((uint32_t *)
|
mpdu_desc_info->mpdu_flags = hal_rx_get_mpdu_flags_from_tlv(mpdu_info);
|
||||||
mpdu_info);
|
|
||||||
mpdu_desc_info->peer_meta_data = mpdu_info->peer_meta_data;
|
mpdu_desc_info->peer_meta_data = mpdu_info->peer_meta_data;
|
||||||
mpdu_desc_info->bar_frame = mpdu_info->bar_frame;
|
mpdu_desc_info->bar_frame = mpdu_info->bar_frame;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user