net: qcom/emac: Use proper free methods during TX
[ Upstream commit cc5db3150e87fe7f7e947bf333b6c1c97f848ecb ] 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@codeaurora.org> Acked-by: Timur Tabi <timur@codeaurora.org> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
65518c6e64
commit
ae19aaa6fc
@ -1250,9 +1250,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;
|
||||
}
|
||||
|
||||
@ -1409,9 +1409,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)
|
||||
@ -1427,9 +1429,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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user