浏览代码

qcacmn: Change nbuf unmap API when free rx nbuf

The DMA Map/Unmap was restricted to buffer size in rx process.
But the Unmap API was not changed when free nbuf in rx desc,
apply the new unmap API.

Change-Id: Id10d746776aa9e41ef3425e166ba0207851358d6
CRs-Fixed: 2716690
Guisen Yang 5 年之前
父节点
当前提交
4676e72c02
共有 2 个文件被更改,包括 26 次插入9 次删除
  1. 16 7
      dp/wifi3.0/dp_rx_desc.c
  2. 10 2
      dp/wifi3.0/dp_rx_mon_dest.c

+ 16 - 7
dp/wifi3.0/dp_rx_desc.c

@@ -174,8 +174,12 @@ static QDF_STATUS __dp_rx_desc_nbuf_free(struct dp_soc *soc,
 			if (!rx_desc->unmapped) {
 				dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf,
 								  false);
-				qdf_nbuf_unmap_single(soc->osdev, nbuf,
-						      QDF_DMA_BIDIRECTIONAL);
+				qdf_nbuf_unmap_nbytes_single(
+							soc->osdev,
+							rx_desc->nbuf,
+							QDF_DMA_BIDIRECTIONAL,
+							rx_desc_pool->buf_size);
+				rx_desc->unmapped = 1;
 			}
 			qdf_nbuf_free(nbuf);
 		}
@@ -324,9 +328,11 @@ void dp_rx_desc_nbuf_and_pool_free(struct dp_soc *soc, uint32_t pool_id,
 			if (!(rx_desc_pool->array[i].rx_desc.unmapped)) {
 				dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf,
 								  false);
-
-				qdf_nbuf_unmap_single(soc->osdev, nbuf,
-						      QDF_DMA_FROM_DEVICE);
+				qdf_nbuf_unmap_nbytes_single(
+							soc->osdev, nbuf,
+							QDF_DMA_FROM_DEVICE,
+							rx_desc_pool->buf_size);
+				rx_desc_pool->array[i].rx_desc.unmapped = 1;
 			}
 			qdf_nbuf_free(nbuf);
 		}
@@ -351,8 +357,11 @@ void dp_rx_desc_nbuf_free(struct dp_soc *soc,
 				dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf,
 								  false);
 
-				qdf_nbuf_unmap_single(soc->osdev, nbuf,
-						      QDF_DMA_FROM_DEVICE);
+				qdf_nbuf_unmap_nbytes_single(
+							soc->osdev, nbuf,
+							QDF_DMA_FROM_DEVICE,
+							rx_desc_pool->buf_size);
+				rx_desc_pool->array[i].rx_desc.unmapped = 1;
 			}
 			qdf_nbuf_free(nbuf);
 		}

+ 10 - 2
dp/wifi3.0/dp_rx_mon_dest.c

@@ -234,6 +234,7 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
 		for (i = 0; i < num_msdus; i++) {
 			uint32_t l2_hdr_offset;
 			struct dp_rx_desc *rx_desc = NULL;
+			struct rx_desc_pool *rx_desc_pool;
 
 			rx_desc = dp_rx_get_mon_desc(soc,
 						     msdu_list.sw_cookie[i]);
@@ -260,8 +261,15 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
 			}
 
 			if (rx_desc->unmapped == 0) {
-				qdf_nbuf_unmap_single(soc->osdev, msdu,
-						      QDF_DMA_FROM_DEVICE);
+				rx_desc_pool = dp_rx_get_mon_desc_pool(
+							soc,
+							mac_id,
+							dp_pdev->pdev_id);
+				qdf_nbuf_unmap_nbytes_single(
+							soc->osdev,
+							rx_desc->nbuf,
+							QDF_DMA_FROM_DEVICE,
+							rx_desc_pool->buf_size);
 				rx_desc->unmapped = 1;
 			}