mvpp2: sync only the received frame
authorMatteo Croce <mcroce@redhat.com>
Thu, 24 Oct 2019 17:24:57 +0000 (19:24 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Oct 2019 20:44:26 +0000 (13:44 -0700)
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: Matteo Croce <mcroce@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c

index b61e0ad..c669432 100644 (file)
@@ -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;