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 b61e0ad0978afd2ca5dfb2ffc4c2e1f1633ebc44..c66943219e1b1f7a8f7a90294aa8576216b1ec42 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;