qcacmn: introduce simple nbuf_free API in RX path

simple Alloc is being used in RX path which avoids
certain debug logic. during free of nbuf we should
avoid this debug logic else it will report it as
double free, this will be triggered only when debug
is enabled

Change-Id: Iadb40071fb733cc4de3291784df5075d5a099a8e
这个提交包含在:
Tallapragada Kalyan
2022-01-23 05:03:48 +05:30
提交者 Madan Koyyalamudi
父节点 e4d9b0c2d7
当前提交 b265fdd7fc
修改 9 个文件,包含 124 行新增180 行删除

查看文件

@@ -260,23 +260,8 @@ more_data:
if (QDF_IS_STATUS_ERROR(status)) {
if (qdf_unlikely(rx_desc && rx_desc->nbuf)) {
qdf_assert_always(!rx_desc->unmapped);
dp_ipa_reo_ctx_buf_mapping_lock(
soc,
reo_ring_num);
dp_ipa_handle_rx_buf_smmu_mapping(
soc,
rx_desc->nbuf,
RX_DATA_BUFFER_SIZE,
false);
qdf_nbuf_unmap_nbytes_single(
soc->osdev,
rx_desc->nbuf,
QDF_DMA_FROM_DEVICE,
RX_DATA_BUFFER_SIZE);
dp_rx_nbuf_unmap(soc, rx_desc, reo_ring_num);
rx_desc->unmapped = 1;
dp_ipa_reo_ctx_buf_mapping_unlock(
soc,
reo_ring_num);
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf,
rx_desc->pool_id);
dp_rx_add_to_free_desc_list(
@@ -436,15 +421,8 @@ more_data:
* in case double skb unmap happened.
*/
rx_desc_pool = &soc->rx_desc_buf[rx_desc->pool_id];
dp_ipa_reo_ctx_buf_mapping_lock(soc, reo_ring_num);
dp_ipa_handle_rx_buf_smmu_mapping(soc, rx_desc->nbuf,
rx_desc_pool->buf_size,
false);
qdf_nbuf_unmap_nbytes_single(soc->osdev, rx_desc->nbuf,
QDF_DMA_FROM_DEVICE,
rx_desc_pool->buf_size);
dp_rx_nbuf_unmap(soc, rx_desc, reo_ring_num);
rx_desc->unmapped = 1;
dp_ipa_reo_ctx_buf_mapping_unlock(soc, reo_ring_num);
DP_RX_PROCESS_NBUF(soc, nbuf_head, nbuf_tail, ebuf_head,
ebuf_tail, rx_desc);
/*
@@ -559,7 +537,7 @@ done:
}
if (qdf_unlikely(!vdev)) {
qdf_nbuf_free(nbuf);
dp_rx_nbuf_free(nbuf);
nbuf = next;
DP_STATS_INC(soc, rx.err.invalid_vdev, 1);
continue;
@@ -596,7 +574,7 @@ done:
hal_rx_dump_pkt_tlvs(hal_soc, rx_tlv_hdr,
QDF_TRACE_LEVEL_INFO);
tid_stats->fail_cnt[MSDU_DONE_FAILURE]++;
qdf_nbuf_free(nbuf);
dp_rx_nbuf_free(nbuf);
qdf_assert(0);
nbuf = next;
continue;
@@ -655,7 +633,7 @@ done:
DP_STATS_INC(vdev->pdev, rx_raw_pkts, 1);
DP_STATS_INC_PKT(peer, rx.raw, 1, msdu_len);
} else {
qdf_nbuf_free(nbuf);
dp_rx_nbuf_free(nbuf);
DP_STATS_INC(soc, rx.err.scatter_msdu, 1);
dp_info_rl("scatter msdu len %d, dropped",
msdu_len);
@@ -678,7 +656,7 @@ done:
if (qdf_unlikely(vdev->multipass_en)) {
if (dp_rx_multipass_process(peer, nbuf, tid) == false) {
DP_STATS_INC(peer, rx.multipass_rx_pkt_drop, 1);
qdf_nbuf_free(nbuf);
dp_rx_nbuf_free(nbuf);
nbuf = next;
continue;
}
@@ -689,7 +667,7 @@ done:
DP_STATS_INC(peer, rx.policy_check_drop, 1);
tid_stats->fail_cnt[POLICY_CHECK_DROP]++;
/* Drop & free packet */
qdf_nbuf_free(nbuf);
dp_rx_nbuf_free(nbuf);
/* Statistics */
nbuf = next;
continue;
@@ -702,7 +680,7 @@ done:
false))) {
tid_stats->fail_cnt[NAWDS_MCAST_DROP]++;
DP_STATS_INC(peer, rx.nawds_mcast_drop, 1);
qdf_nbuf_free(nbuf);
dp_rx_nbuf_free(nbuf);
nbuf = next;
continue;
}
@@ -718,7 +696,7 @@ done:
if (!is_eapol) {
DP_STATS_INC(peer,
rx.peer_unauth_rx_pkt_drop, 1);
qdf_nbuf_free(nbuf);
dp_rx_nbuf_free(nbuf);
nbuf = next;
continue;
}
@@ -745,7 +723,7 @@ done:
DP_STATS_INC(vdev->pdev, dropped.mesh_filter,
1);
qdf_nbuf_free(nbuf);
dp_rx_nbuf_free(nbuf);
nbuf = next;
continue;
}