Set metadata size building the skb from xdp_buff in mvpp2 driver
mvpp2 driver sets xdp headroom to:

MVPP2_MH_SIZE + MVPP2_SKB_HEADROOM

where

MVPP2_MH_SIZE 2
MVPP2_SKB_HEADROOM min(max(XDP_PACKET_HEADROOM, NET_SKB_PAD), 224)

so the headroom is large enough to contain xdp_frame and xdp metadata.
Please note this patch is just compiled tested.

Reviewed-by: Michal Kubiak <michal.kub...@intel.com>
Signed-off-by: Lorenzo Bianconi <lore...@kernel.org>
---
 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c 
b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index 
f166dc4e650372d66e248601a5c948819e1dcd79..54a235366a01bdba526a1956f27836bcdee210ae
 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -3915,13 +3915,13 @@ static int mvpp2_rx(struct mvpp2_port *port, struct 
napi_struct *napi,
 
        while (rx_done < rx_todo) {
                struct mvpp2_rx_desc *rx_desc = mvpp2_rxq_next_desc_get(rxq);
+               u32 rx_status, timestamp, metasize = 0;
                struct mvpp2_bm_pool *bm_pool;
                struct page_pool *pp = NULL;
                struct sk_buff *skb;
                unsigned int frag_size;
                dma_addr_t dma_addr;
                phys_addr_t phys_addr;
-               u32 rx_status, timestamp;
                int pool, rx_bytes, err, ret;
                struct page *page;
                void *data;
@@ -3983,7 +3983,7 @@ static int mvpp2_rx(struct mvpp2_port *port, struct 
napi_struct *napi,
                        xdp_init_buff(&xdp, PAGE_SIZE, xdp_rxq);
                        xdp_prepare_buff(&xdp, data,
                                         MVPP2_MH_SIZE + MVPP2_SKB_HEADROOM,
-                                        rx_bytes, false);
+                                        rx_bytes, true);
 
                        ret = mvpp2_run_xdp(port, xdp_prog, &xdp, pp, &ps);
 
@@ -3999,6 +3999,8 @@ static int mvpp2_rx(struct mvpp2_port *port, struct 
napi_struct *napi,
                                ps.rx_bytes += rx_bytes;
                                continue;
                        }
+
+                       metasize = xdp.data - xdp.data_meta;
                }
 
                if (frag_size)
@@ -4038,6 +4040,8 @@ static int mvpp2_rx(struct mvpp2_port *port, struct 
napi_struct *napi,
 
                skb_reserve(skb, MVPP2_MH_SIZE + MVPP2_SKB_HEADROOM);
                skb_put(skb, rx_bytes);
+               if (metasize)
+                       skb_metadata_set(skb, metasize);
                skb->ip_summed = mvpp2_rx_csum(port, rx_status);
                skb->protocol = eth_type_trans(skb, dev);
 

-- 
2.48.1


Reply via email to