qcacmn: Add API for unmap with physical and virtual addr of nbuf

Tx data transfer in host mode with nbuf map_unmap debug frmwk
enabled and enhanced stats disabled results in an assert.
This is because on Tx completion path, nbuf unmap is done using API
qdf_mem_unmap_nbytes_single which takes physical address of nbuf
for unmap and does not remove nbuf from map_unmap tracking list and
when nbuf is freed, it results in assert as the tracking list still
contains that nbuf entry.

In order to fix this, define a new API for nbuf unmap passing physical
and virtual address of nbuf as arguments. Physical address is passed
as an argument in order to avoid cache miss in per packet path which
eventually helps in improving the KPI.

Change-Id: I77ab6ac3ac98556b9caff8aa3ee82bc23cd26de7
CRs-Fixed: 3006671
This commit is contained in:
Harsh Kumar Bijlani
2021-08-03 19:53:05 +05:30
committed by Madan Koyyalamudi
parent c96d5d2592
commit 43da5b8892
3 changed files with 36 additions and 4 deletions

View File

@@ -4310,10 +4310,11 @@ dp_tx_comp_process_desc_list(struct dp_soc *soc,
next = desc->next;
dp_tx_desc_history_add(soc, desc->dma_addr, desc->nbuf,
desc->id, DP_TX_COMP_UNMAP);
qdf_mem_unmap_nbytes_single(soc->osdev,
desc->dma_addr,
QDF_DMA_TO_DEVICE,
desc->length);
qdf_nbuf_unmap_nbytes_single_paddr(soc->osdev,
desc->nbuf,
desc->dma_addr,
QDF_DMA_TO_DEVICE,
desc->length);
qdf_nbuf_free(desc->nbuf);
dp_tx_desc_free(soc, desc, desc->pool_id);
desc = next;