ACK: [PATCH 1/1][SRU][Bionic] net: qcom/emac: Use proper free methods during TX

Stefan Bader stefan.bader at canonical.com
Mon Aug 27 13:05:12 UTC 2018


On 24.08.2018 10:53, AceLan Kao wrote:
> From: Hemanth Puranik <hpuranik at codeaurora.org>
> 
> BugLink: https://bugs.launchpad.net/bugs/1788567
> 
> This patch fixes the warning messages/call traces seen if DMA debug is
> enabled, In case of fragmented skb's memory was allocated using
> dma_map_page but freed using dma_unmap_single. This patch modifies buffer
> allocations in TX path to use dma_map_page in all the places and
> dma_unmap_page while freeing the buffers.
> 
> Signed-off-by: Hemanth Puranik <hpuranik at codeaurora.org>
> Acked-by: Timur Tabi <timur at codeaurora.org>
> Signed-off-by: David S. Miller <davem at davemloft.net>
> (cherry picked from commit cc5db3150e87fe7f7e947bf333b6c1c97f848ecb)
> Signed-off-by: AceLan Kao <acelan.kao at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
>  drivers/net/ethernet/qualcomm/emac/emac-mac.c | 23 +++++++++++--------
>  1 file changed, 14 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/net/ethernet/qualcomm/emac/emac-mac.c b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
> index 9cbb27263742..d5a32b7c7dc5 100644
> --- a/drivers/net/ethernet/qualcomm/emac/emac-mac.c
> +++ b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
> @@ -1194,9 +1194,9 @@ void emac_mac_tx_process(struct emac_adapter *adpt, struct emac_tx_queue *tx_q)
>  	while (tx_q->tpd.consume_idx != hw_consume_idx) {
>  		tpbuf = GET_TPD_BUFFER(tx_q, tx_q->tpd.consume_idx);
>  		if (tpbuf->dma_addr) {
> -			dma_unmap_single(adpt->netdev->dev.parent,
> -					 tpbuf->dma_addr, tpbuf->length,
> -					 DMA_TO_DEVICE);
> +			dma_unmap_page(adpt->netdev->dev.parent,
> +				       tpbuf->dma_addr, tpbuf->length,
> +				       DMA_TO_DEVICE);
>  			tpbuf->dma_addr = 0;
>  		}
>  
> @@ -1353,9 +1353,11 @@ static void emac_tx_fill_tpd(struct emac_adapter *adpt,
>  
>  		tpbuf = GET_TPD_BUFFER(tx_q, tx_q->tpd.produce_idx);
>  		tpbuf->length = mapped_len;
> -		tpbuf->dma_addr = dma_map_single(adpt->netdev->dev.parent,
> -						 skb->data, tpbuf->length,
> -						 DMA_TO_DEVICE);
> +		tpbuf->dma_addr = dma_map_page(adpt->netdev->dev.parent,
> +					       virt_to_page(skb->data),
> +					       offset_in_page(skb->data),
> +					       tpbuf->length,
> +					       DMA_TO_DEVICE);
>  		ret = dma_mapping_error(adpt->netdev->dev.parent,
>  					tpbuf->dma_addr);
>  		if (ret)
> @@ -1371,9 +1373,12 @@ static void emac_tx_fill_tpd(struct emac_adapter *adpt,
>  	if (mapped_len < len) {
>  		tpbuf = GET_TPD_BUFFER(tx_q, tx_q->tpd.produce_idx);
>  		tpbuf->length = len - mapped_len;
> -		tpbuf->dma_addr = dma_map_single(adpt->netdev->dev.parent,
> -						 skb->data + mapped_len,
> -						 tpbuf->length, DMA_TO_DEVICE);
> +		tpbuf->dma_addr = dma_map_page(adpt->netdev->dev.parent,
> +					       virt_to_page(skb->data +
> +							    mapped_len),
> +					       offset_in_page(skb->data +
> +							      mapped_len),
> +					       tpbuf->length, DMA_TO_DEVICE);
>  		ret = dma_mapping_error(adpt->netdev->dev.parent,
>  					tpbuf->dma_addr);
>  		if (ret)
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20180827/10755d69/attachment.sig>


More information about the kernel-team mailing list