linux: mvebu: backport mvneta XDP support
[openwrt/staging/luka.git] / target / linux / mvebu / patches-5.4 / 014-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch
diff --git a/target/linux/mvebu/patches-5.4/014-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch b/target/linux/mvebu/patches-5.4/014-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch
new file mode 100644 (file)
index 0000000..f9d2702
--- /dev/null
@@ -0,0 +1,43 @@
+From 8abaeebfa7ef9a5600f4f596d2e94aa253f47553 Mon Sep 17 00:00:00 2001
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Sat, 19 Oct 2019 10:13:25 +0200
+Subject: [PATCH 5/7] net: mvneta: move header prefetch in mvneta_swbm_rx_frame
+
+Move data buffer prefetch in mvneta_swbm_rx_frame after
+dma_sync_single_range_for_cpu
+
+Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
+Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/ethernet/marvell/mvneta.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/ethernet/marvell/mvneta.c
++++ b/drivers/net/ethernet/marvell/mvneta.c
+@@ -2036,6 +2036,9 @@ mvneta_swbm_rx_frame(struct mvneta_port
+                               rx_desc->buf_phys_addr,
+                               len, dma_dir);
++      /* Prefetch header */
++      prefetch(data);
++
+       xdp->data_hard_start = data;
+       xdp->data = data + MVNETA_SKB_HEADROOM + MVNETA_MH_SIZE;
+       xdp->data_end = xdp->data + data_len;
+@@ -2133,14 +2136,10 @@ static int mvneta_rx_swbm(struct napi_st
+       while (rx_proc < budget && rx_proc < rx_todo) {
+               struct mvneta_rx_desc *rx_desc = mvneta_rxq_next_desc_get(rxq);
+               u32 rx_status, index;
+-              unsigned char *data;
+               struct page *page;
+               index = rx_desc - rxq->descs;
+               page = (struct page *)rxq->buf_virt_addr[index];
+-              data = page_address(page);
+-              /* Prefetch header */
+-              prefetch(data);
+               rx_status = rx_desc->status;
+               rx_proc++;