Commit e1921168 authored by Matteo Croce's avatar Matteo Croce Committed by David S. Miller
Browse files

mvpp2: sync only the received frame



In the RX path we always sync against the maximum frame size for that pool.
Do the DMA sync and the unmap separately, so we can only sync by the
size of the received frame.

Signed-off-by: default avatarMatteo Croce <mcroce@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7f7183af
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -2959,6 +2959,10 @@ static int mvpp2_rx(struct mvpp2_port *port, struct napi_struct *napi,
		if (rx_status & MVPP2_RXD_ERR_SUMMARY)
			goto err_drop_frame;

		dma_sync_single_for_cpu(dev->dev.parent, dma_addr,
					rx_bytes + MVPP2_MH_SIZE,
					DMA_FROM_DEVICE);

		if (bm_pool->frag_size > PAGE_SIZE)
			frag_size = 0;
		else
@@ -2976,8 +2980,9 @@ static int mvpp2_rx(struct mvpp2_port *port, struct napi_struct *napi,
			goto err_drop_frame;
		}

		dma_unmap_single(dev->dev.parent, dma_addr,
				 bm_pool->buf_size, DMA_FROM_DEVICE);
		dma_unmap_single_attrs(dev->dev.parent, dma_addr,
				       bm_pool->buf_size, DMA_FROM_DEVICE,
				       DMA_ATTR_SKIP_CPU_SYNC);

		rcvd_pkts++;
		rcvd_bytes += rx_bytes;