* [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs
@ 2025-03-18 11:46 Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 1/7] net: mvneta: Add metadata support for xdp mode Lorenzo Bianconi
` (7 more replies)
0 siblings, 8 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2025-03-18 11:46 UTC (permalink / raw)
To: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, Lorenzo Bianconi
Cc: netdev, bpf, linux-arm-kernel, linux-mediatek, linux-hyperv,
linux-omap, Michal Kubiak
Introduce missing metadata support for some xdp drivers setting metadata
size building the skb from xdp_buff.
Please note most of the drivers are just compile tested.
---
Changes in v2:
- Improve commit logs for each patch specifying xdp headroom size for
each modified driver.
- Link to v1: https://lore.kernel.org/r/20250311-mvneta-xdp-meta-v1-0-36cf1c99790e@kernel.org
---
Lorenzo Bianconi (7):
net: mvneta: Add metadata support for xdp mode
net: mvpp2: Add metadata support for xdp mode
net: netsec: Add metadata support for xdp mode
net: octeontx2: Add metadata support for xdp mode
net: ethernet: mediatek: Add metadata support for xdp mode
net: mana: Add metadata support for xdp mode
net: ti: cpsw: Add metadata support for xdp mode
drivers/net/ethernet/marvell/mvneta.c | 5 ++++-
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 8 ++++++--
drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c | 13 +++++++++----
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 7 +++++--
drivers/net/ethernet/microsoft/mana/mana_bpf.c | 2 +-
drivers/net/ethernet/microsoft/mana/mana_en.c | 4 ++++
drivers/net/ethernet/socionext/netsec.c | 7 +++++--
drivers/net/ethernet/ti/cpsw.c | 6 +++++-
drivers/net/ethernet/ti/cpsw_new.c | 6 +++++-
9 files changed, 44 insertions(+), 14 deletions(-)
---
base-commit: aedfbe251e1c56034cb6ffd87eabe5895b31ae5d
change-id: 20250310-mvneta-xdp-meta-3e0da8ef4498
Best regards,
--
Lorenzo Bianconi <lorenzo@kernel.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH net-next v2 1/7] net: mvneta: Add metadata support for xdp mode
2025-03-18 11:46 [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs Lorenzo Bianconi
@ 2025-03-18 11:46 ` Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 2/7] net: mvpp2: " Lorenzo Bianconi
` (6 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2025-03-18 11:46 UTC (permalink / raw)
To: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, Lorenzo Bianconi
Cc: netdev, bpf, linux-arm-kernel, linux-mediatek, linux-hyperv,
linux-omap, Michal Kubiak
Set metadata size building the skb from xdp_buff in mvneta driver
mvneta sets xdp headroom to:
MVNETA_MH_SIZE + MVNETA_SKB_HEADROOM
where
MVNETA_MH_SIZE 2
MVNETA_SKB_HEADROOM max(NET_SKB_PAD, XDP_PACKET_HEADROOM)
so the headroom is large enough to contain xdp_frame and xdp metadata.
Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/marvell/mvneta.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index 44b18c57390927e37eac267632cace656bb5526e..147571fdada378e430fd96f2fb4a7e7870b784a2 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -2342,7 +2342,7 @@ mvneta_swbm_rx_frame(struct mvneta_port *pp,
prefetch(data);
xdp_buff_clear_frags_flag(xdp);
xdp_prepare_buff(xdp, data, pp->rx_offset_correction + MVNETA_MH_SIZE,
- data_len, false);
+ data_len, true);
}
static void
@@ -2396,6 +2396,7 @@ mvneta_swbm_build_skb(struct mvneta_port *pp, struct page_pool *pool,
struct xdp_buff *xdp, u32 desc_status)
{
struct skb_shared_info *sinfo = xdp_get_shared_info_from_buff(xdp);
+ u32 metasize = xdp->data - xdp->data_meta;
struct sk_buff *skb;
u8 num_frags;
@@ -2410,6 +2411,8 @@ mvneta_swbm_build_skb(struct mvneta_port *pp, struct page_pool *pool,
skb_reserve(skb, xdp->data - xdp->data_hard_start);
skb_put(skb, xdp->data_end - xdp->data);
+ if (metasize)
+ skb_metadata_set(skb, metasize);
skb->ip_summed = mvneta_rx_csum(pp, desc_status);
if (unlikely(xdp_buff_has_frags(xdp)))
--
2.48.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 2/7] net: mvpp2: Add metadata support for xdp mode
2025-03-18 11:46 [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 1/7] net: mvneta: Add metadata support for xdp mode Lorenzo Bianconi
@ 2025-03-18 11:46 ` Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 3/7] net: netsec: " Lorenzo Bianconi
` (5 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2025-03-18 11:46 UTC (permalink / raw)
To: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, Lorenzo Bianconi
Cc: netdev, bpf, linux-arm-kernel, linux-mediatek, linux-hyperv,
linux-omap, Michal Kubiak
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.kubiak@intel.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@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
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 3/7] net: netsec: Add metadata support for xdp mode
2025-03-18 11:46 [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 1/7] net: mvneta: Add metadata support for xdp mode Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 2/7] net: mvpp2: " Lorenzo Bianconi
@ 2025-03-18 11:46 ` Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 4/7] net: octeontx2: " Lorenzo Bianconi
` (4 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2025-03-18 11:46 UTC (permalink / raw)
To: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, Lorenzo Bianconi
Cc: netdev, bpf, linux-arm-kernel, linux-mediatek, linux-hyperv,
linux-omap, Michal Kubiak
Set metadata size building the skb from xdp_buff in netsec driver.
netsec driver sets xdp headroom to NETSEC_RXBUF_HEADROOM:
NETSEC_RXBUF_HEADROOM max(XDP_PACKET_HEADROOM, NET_SKB_PAD) + NET_IP_ALIGN
so the headroom is large enough to contain xdp_frame and xdp metadata.
Please note this patch is just compiled tested.
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/socionext/netsec.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/socionext/netsec.c b/drivers/net/ethernet/socionext/netsec.c
index dc99821c6226fbaece65c8ade23899f610b44a9a..ee890de69ffe795dbdcc5331e36be86769f0d9a6 100644
--- a/drivers/net/ethernet/socionext/netsec.c
+++ b/drivers/net/ethernet/socionext/netsec.c
@@ -970,7 +970,7 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)
struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);
struct netsec_desc *desc = &dring->desc[idx];
struct page *page = virt_to_page(desc->addr);
- u32 xdp_result = NETSEC_XDP_PASS;
+ u32 metasize, xdp_result = NETSEC_XDP_PASS;
struct sk_buff *skb = NULL;
u16 pkt_len, desc_len;
dma_addr_t dma_handle;
@@ -1019,7 +1019,7 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)
prefetch(desc->addr);
xdp_prepare_buff(&xdp, desc->addr, NETSEC_RXBUF_HEADROOM,
- pkt_len, false);
+ pkt_len, true);
if (xdp_prog) {
xdp_result = netsec_run_xdp(priv, xdp_prog, &xdp);
@@ -1048,6 +1048,9 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)
skb_reserve(skb, xdp.data - xdp.data_hard_start);
skb_put(skb, xdp.data_end - xdp.data);
+ metasize = xdp.data - xdp.data_meta;
+ if (metasize)
+ skb_metadata_set(skb, metasize);
skb->protocol = eth_type_trans(skb, priv->ndev);
if (priv->rx_cksum_offload_flag &&
--
2.48.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 4/7] net: octeontx2: Add metadata support for xdp mode
2025-03-18 11:46 [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs Lorenzo Bianconi
` (2 preceding siblings ...)
2025-03-18 11:46 ` [PATCH net-next v2 3/7] net: netsec: " Lorenzo Bianconi
@ 2025-03-18 11:46 ` Lorenzo Bianconi
2025-03-25 11:41 ` Jakub Kicinski
2025-03-18 11:46 ` [PATCH net-next v2 5/7] net: ethernet: mediatek: " Lorenzo Bianconi
` (3 subsequent siblings)
7 siblings, 1 reply; 11+ messages in thread
From: Lorenzo Bianconi @ 2025-03-18 11:46 UTC (permalink / raw)
To: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, Lorenzo Bianconi
Cc: netdev, bpf, linux-arm-kernel, linux-mediatek, linux-hyperv,
linux-omap, Michal Kubiak
Set metadata size building the skb from xdp_buff in octeontx2 driver.
octeontx2 driver sets xdp headroom to OTX2_HEAD_ROOM
OTX2_HEAD_ROOM OTX2_ALIGN
OTX2_ALIGN 128
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.kubiak@intel.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
index 6bc5ce5a9f61cc2830975e7cc5219344760b0e51..af8cabe828d05c8832085d24d183312f24d00330 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
@@ -41,7 +41,7 @@ static bool otx2_xdp_rcv_pkt_handler(struct otx2_nic *pfvf,
struct bpf_prog *prog,
struct nix_cqe_rx_s *cqe,
struct otx2_cq_queue *cq,
- bool *need_xdp_flush);
+ u32 *metasize, bool *need_xdp_flush);
static void otx2_sq_set_sqe_base(struct otx2_snd_queue *sq,
struct sk_buff *skb)
@@ -336,6 +336,7 @@ static void otx2_rcv_pkt_handler(struct otx2_nic *pfvf,
struct nix_rx_sg_s *sg = &cqe->sg;
struct sk_buff *skb = NULL;
void *end, *start;
+ u32 metasize = 0;
u64 *seg_addr;
u16 *seg_size;
int seg;
@@ -346,7 +347,8 @@ static void otx2_rcv_pkt_handler(struct otx2_nic *pfvf,
}
if (pfvf->xdp_prog)
- if (otx2_xdp_rcv_pkt_handler(pfvf, pfvf->xdp_prog, cqe, cq, need_xdp_flush))
+ if (otx2_xdp_rcv_pkt_handler(pfvf, pfvf->xdp_prog, cqe, cq,
+ &metasize, need_xdp_flush))
return;
skb = napi_get_frags(napi);
@@ -378,6 +380,8 @@ static void otx2_rcv_pkt_handler(struct otx2_nic *pfvf,
skb->mark = parse->match_id;
skb_mark_for_recycle(skb);
+ if (metasize)
+ skb_metadata_set(skb, metasize);
napi_gro_frags(napi);
}
@@ -1482,7 +1486,7 @@ static bool otx2_xdp_rcv_pkt_handler(struct otx2_nic *pfvf,
struct bpf_prog *prog,
struct nix_cqe_rx_s *cqe,
struct otx2_cq_queue *cq,
- bool *need_xdp_flush)
+ u32 *metasize, bool *need_xdp_flush)
{
struct xdp_buff xdp, *xsk_buff = NULL;
unsigned char *hard_start;
@@ -1514,13 +1518,14 @@ static bool otx2_xdp_rcv_pkt_handler(struct otx2_nic *pfvf,
hard_start = (unsigned char *)phys_to_virt(pa);
xdp_prepare_buff(&xdp, hard_start, OTX2_HEAD_ROOM,
- cqe->sg.seg_size, false);
+ cqe->sg.seg_size, true);
act = bpf_prog_run_xdp(prog, &xdp);
handle_xdp_verdict:
switch (act) {
case XDP_PASS:
+ *metasize = xdp.data - xdp.data_meta;
break;
case XDP_TX:
qidx += pfvf->hw.tx_queues;
--
2.48.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 5/7] net: ethernet: mediatek: Add metadata support for xdp mode
2025-03-18 11:46 [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs Lorenzo Bianconi
` (3 preceding siblings ...)
2025-03-18 11:46 ` [PATCH net-next v2 4/7] net: octeontx2: " Lorenzo Bianconi
@ 2025-03-18 11:46 ` Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 6/7] net: mana: " Lorenzo Bianconi
` (2 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2025-03-18 11:46 UTC (permalink / raw)
To: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, Lorenzo Bianconi
Cc: netdev, bpf, linux-arm-kernel, linux-mediatek, linux-hyperv,
linux-omap, Michal Kubiak
Set metadata size building the skb from xdp_buff in mediatek driver.
mtk_eth_soc driver sets xdp headroom to XDP_PACKET_HEADROOM 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.kubiak@intel.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 922330b3f4d70421276ecd3f4ab175b3ae263f71..43197b28b3e745319e974c6022a6a51b6953f60a 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2122,7 +2122,7 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
if (ring->page_pool) {
struct page *page = virt_to_head_page(data);
struct xdp_buff xdp;
- u32 ret;
+ u32 ret, metasize;
new_data = mtk_page_pool_get_buff(ring->page_pool,
&dma_addr,
@@ -2138,7 +2138,7 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
xdp_init_buff(&xdp, PAGE_SIZE, &ring->xdp_q);
xdp_prepare_buff(&xdp, data, MTK_PP_HEADROOM, pktlen,
- false);
+ true);
xdp_buff_clear_frags_flag(&xdp);
ret = mtk_xdp_run(eth, ring, &xdp, netdev);
@@ -2158,6 +2158,9 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
skb_reserve(skb, xdp.data - xdp.data_hard_start);
skb_put(skb, xdp.data_end - xdp.data);
+ metasize = xdp.data - xdp.data_meta;
+ if (metasize)
+ skb_metadata_set(skb, metasize);
skb_mark_for_recycle(skb);
} else {
if (ring->frag_size <= PAGE_SIZE)
--
2.48.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 6/7] net: mana: Add metadata support for xdp mode
2025-03-18 11:46 [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs Lorenzo Bianconi
` (4 preceding siblings ...)
2025-03-18 11:46 ` [PATCH net-next v2 5/7] net: ethernet: mediatek: " Lorenzo Bianconi
@ 2025-03-18 11:46 ` Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 7/7] net: ti: cpsw: " Lorenzo Bianconi
2025-03-25 11:50 ` [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs patchwork-bot+netdevbpf
7 siblings, 0 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2025-03-18 11:46 UTC (permalink / raw)
To: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, Lorenzo Bianconi
Cc: netdev, bpf, linux-arm-kernel, linux-mediatek, linux-hyperv,
linux-omap, Michal Kubiak
Set metadata size building the skb from xdp_buff in mana driver.
mana driver sets xdp headroom to XDP_PACKET_HEADROOM 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.kubiak@intel.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/microsoft/mana/mana_bpf.c | 2 +-
drivers/net/ethernet/microsoft/mana/mana_en.c | 4 ++++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/microsoft/mana/mana_bpf.c b/drivers/net/ethernet/microsoft/mana/mana_bpf.c
index 23b1521c0df96e7fd595daad8b49fa9be935090c..d30721d4516fc60cf8883f2b35cc561559082ccc 100644
--- a/drivers/net/ethernet/microsoft/mana/mana_bpf.c
+++ b/drivers/net/ethernet/microsoft/mana/mana_bpf.c
@@ -91,7 +91,7 @@ u32 mana_run_xdp(struct net_device *ndev, struct mana_rxq *rxq,
goto out;
xdp_init_buff(xdp, PAGE_SIZE, &rxq->xdp_rxq);
- xdp_prepare_buff(xdp, buf_va, XDP_PACKET_HEADROOM, pkt_len, false);
+ xdp_prepare_buff(xdp, buf_va, XDP_PACKET_HEADROOM, pkt_len, true);
act = bpf_prog_run_xdp(prog, xdp);
diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c
index 9a8171f099b63c6a1a6415f12718d46d5d835f97..e190d5ee51544090a703c14c76abdc23797f864a 100644
--- a/drivers/net/ethernet/microsoft/mana/mana_en.c
+++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
@@ -1559,8 +1559,12 @@ static struct sk_buff *mana_build_skb(struct mana_rxq *rxq, void *buf_va,
return NULL;
if (xdp->data_hard_start) {
+ u32 metasize = xdp->data - xdp->data_meta;
+
skb_reserve(skb, xdp->data - xdp->data_hard_start);
skb_put(skb, xdp->data_end - xdp->data);
+ if (metasize)
+ skb_metadata_set(skb, metasize);
return skb;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 7/7] net: ti: cpsw: Add metadata support for xdp mode
2025-03-18 11:46 [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs Lorenzo Bianconi
` (5 preceding siblings ...)
2025-03-18 11:46 ` [PATCH net-next v2 6/7] net: mana: " Lorenzo Bianconi
@ 2025-03-18 11:46 ` Lorenzo Bianconi
2025-03-25 11:50 ` [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs patchwork-bot+netdevbpf
7 siblings, 0 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2025-03-18 11:46 UTC (permalink / raw)
To: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, Lorenzo Bianconi
Cc: netdev, bpf, linux-arm-kernel, linux-mediatek, linux-hyperv,
linux-omap, Michal Kubiak
Set metadata size building the skb from xdp_buff in cpsw/cpsw_new
drivers. ti cpsw and cpsw_new drivers set xdp headroom at least to
CPSW_HEADROOM_NA:
CPSW_HEADROOM_NA max(XDP_PACKET_HEADROOM, NET_SKB_PAD) + NET_IP_ALIGN
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.kubiak@intel.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/ti/cpsw.c | 6 +++++-
drivers/net/ethernet/ti/cpsw_new.c | 6 +++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index 0cb6fa6e5b7d4fb9703633f0d67a7e95e6e7d8aa..a984b7d84e5e5917b83547c862924ccd30d83601 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -351,6 +351,7 @@ static void cpsw_rx_handler(void *token, int len, int status)
int ret = 0, port, ch = xmeta->ch;
int headroom = CPSW_HEADROOM_NA;
struct net_device *ndev = xmeta->ndev;
+ u32 metasize = 0;
struct cpsw_priv *priv;
struct page_pool *pool;
struct sk_buff *skb;
@@ -400,7 +401,7 @@ static void cpsw_rx_handler(void *token, int len, int status)
size -= CPSW_RX_VLAN_ENCAP_HDR_SIZE;
}
- xdp_prepare_buff(&xdp, pa, headroom, size, false);
+ xdp_prepare_buff(&xdp, pa, headroom, size, true);
port = priv->emac_port + cpsw->data.dual_emac;
ret = cpsw_run_xdp(priv, ch, &xdp, page, port, &len);
@@ -408,6 +409,7 @@ static void cpsw_rx_handler(void *token, int len, int status)
goto requeue;
headroom = xdp.data - xdp.data_hard_start;
+ metasize = xdp.data - xdp.data_meta;
/* XDP prog can modify vlan tag, so can't use encap header */
status &= ~CPDMA_RX_VLAN_ENCAP;
@@ -423,6 +425,8 @@ static void cpsw_rx_handler(void *token, int len, int status)
skb_reserve(skb, headroom);
skb_put(skb, len);
+ if (metasize)
+ skb_metadata_set(skb, metasize);
skb->dev = ndev;
if (status & CPDMA_RX_VLAN_ENCAP)
cpsw_rx_vlan_encap(skb);
diff --git a/drivers/net/ethernet/ti/cpsw_new.c b/drivers/net/ethernet/ti/cpsw_new.c
index 3da1c131335df1ff79b32ce0e3ea5200a2e53f4b..5b5b52e4e7a757a14965fe6df41935aed547111f 100644
--- a/drivers/net/ethernet/ti/cpsw_new.c
+++ b/drivers/net/ethernet/ti/cpsw_new.c
@@ -293,6 +293,7 @@ static void cpsw_rx_handler(void *token, int len, int status)
struct page_pool *pool;
struct sk_buff *skb;
struct xdp_buff xdp;
+ u32 metasize = 0;
int ret = 0;
dma_addr_t dma;
@@ -345,13 +346,14 @@ static void cpsw_rx_handler(void *token, int len, int status)
size -= CPSW_RX_VLAN_ENCAP_HDR_SIZE;
}
- xdp_prepare_buff(&xdp, pa, headroom, size, false);
+ xdp_prepare_buff(&xdp, pa, headroom, size, true);
ret = cpsw_run_xdp(priv, ch, &xdp, page, priv->emac_port, &len);
if (ret != CPSW_XDP_PASS)
goto requeue;
headroom = xdp.data - xdp.data_hard_start;
+ metasize = xdp.data - xdp.data_meta;
/* XDP prog can modify vlan tag, so can't use encap header */
status &= ~CPDMA_RX_VLAN_ENCAP;
@@ -368,6 +370,8 @@ static void cpsw_rx_handler(void *token, int len, int status)
skb->offload_fwd_mark = priv->offload_fwd_mark;
skb_reserve(skb, headroom);
skb_put(skb, len);
+ if (metasize)
+ skb_metadata_set(skb, metasize);
skb->dev = ndev;
if (status & CPDMA_RX_VLAN_ENCAP)
cpsw_rx_vlan_encap(skb);
--
2.48.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2 4/7] net: octeontx2: Add metadata support for xdp mode
2025-03-18 11:46 ` [PATCH net-next v2 4/7] net: octeontx2: " Lorenzo Bianconi
@ 2025-03-25 11:41 ` Jakub Kicinski
2025-03-25 13:28 ` Lorenzo Bianconi
0 siblings, 1 reply; 11+ messages in thread
From: Jakub Kicinski @ 2025-03-25 11:41 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, netdev, bpf, linux-arm-kernel,
linux-mediatek, linux-hyperv, linux-omap, Michal Kubiak
On Tue, 18 Mar 2025 12:46:08 +0100 Lorenzo Bianconi wrote:
> @@ -1514,13 +1518,14 @@ static bool otx2_xdp_rcv_pkt_handler(struct otx2_nic *pfvf,
>
> hard_start = (unsigned char *)phys_to_virt(pa);
> xdp_prepare_buff(&xdp, hard_start, OTX2_HEAD_ROOM,
> - cqe->sg.seg_size, false);
> + cqe->sg.seg_size, true);
>
> act = bpf_prog_run_xdp(prog, &xdp);
>
> handle_xdp_verdict:
> switch (act) {
> case XDP_PASS:
> + *metasize = xdp.data - xdp.data_meta;
> break;
> case XDP_TX:
> qidx += pfvf->hw.tx_queues;
This one handles ABORT and invalid return codes as PASS not DROP.
That should probably be fixed separately?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs
2025-03-18 11:46 [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs Lorenzo Bianconi
` (6 preceding siblings ...)
2025-03-18 11:46 ` [PATCH net-next v2 7/7] net: ti: cpsw: " Lorenzo Bianconi
@ 2025-03-25 11:50 ` patchwork-bot+netdevbpf
7 siblings, 0 replies; 11+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-03-25 11:50 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: marcin.s.wojtas, andrew+netdev, davem, edumazet, kuba, pabeni,
ast, daniel, hawk, john.fastabend, linux, ilias.apalodimas,
kojima.masahisa, sgoutham, gakula, sbhatta, hkelam, bbhushan2,
nbd, sean.wang, matthias.bgg, angelogioacchino.delregno, kys,
haiyangz, wei.liu, decui, s-vadapalli, rogerq, netdev, bpf,
linux-arm-kernel, linux-mediatek, linux-hyperv, linux-omap,
michal.kubiak
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Tue, 18 Mar 2025 12:46:04 +0100 you wrote:
> Introduce missing metadata support for some xdp drivers setting metadata
> size building the skb from xdp_buff.
> Please note most of the drivers are just compile tested.
>
> ---
> Changes in v2:
> - Improve commit logs for each patch specifying xdp headroom size for
> each modified driver.
> - Link to v1: https://lore.kernel.org/r/20250311-mvneta-xdp-meta-v1-0-36cf1c99790e@kernel.org
>
> [...]
Here is the summary with links:
- [net-next,v2,1/7] net: mvneta: Add metadata support for xdp mode
https://git.kernel.org/netdev/net-next/c/07b2fbffaaea
- [net-next,v2,2/7] net: mvpp2: Add metadata support for xdp mode
https://git.kernel.org/netdev/net-next/c/9a45e193c88a
- [net-next,v2,3/7] net: netsec: Add metadata support for xdp mode
https://git.kernel.org/netdev/net-next/c/a5fec3c88142
- [net-next,v2,4/7] net: octeontx2: Add metadata support for xdp mode
https://git.kernel.org/netdev/net-next/c/33bfff8fc8ba
- [net-next,v2,5/7] net: ethernet: mediatek: Add metadata support for xdp mode
https://git.kernel.org/netdev/net-next/c/74fb1346bc77
- [net-next,v2,6/7] net: mana: Add metadata support for xdp mode
https://git.kernel.org/netdev/net-next/c/c313d35f60c1
- [net-next,v2,7/7] net: ti: cpsw: Add metadata support for xdp mode
https://git.kernel.org/netdev/net-next/c/b3a54be70ca6
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2 4/7] net: octeontx2: Add metadata support for xdp mode
2025-03-25 11:41 ` Jakub Kicinski
@ 2025-03-25 13:28 ` Lorenzo Bianconi
0 siblings, 0 replies; 11+ messages in thread
From: Lorenzo Bianconi @ 2025-03-25 13:28 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Marcin Wojtas, Andrew Lunn, David S. Miller, Eric Dumazet,
Paolo Abeni, Alexei Starovoitov, Daniel Borkmann,
Jesper Dangaard Brouer, John Fastabend, Russell King,
Ilias Apalodimas, Masahisa Kojima, Sunil Goutham, Geetha sowjanya,
Subbaraya Sundeep, hariprasad, Bharat Bhushan, Felix Fietkau,
Sean Wang, Matthias Brugger, AngeloGioacchino Del Regno,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui,
Siddharth Vadapalli, Roger Quadros, netdev, bpf, linux-arm-kernel,
linux-mediatek, linux-hyperv, linux-omap, Michal Kubiak
[-- Attachment #1: Type: text/plain, Size: 766 bytes --]
> On Tue, 18 Mar 2025 12:46:08 +0100 Lorenzo Bianconi wrote:
> > @@ -1514,13 +1518,14 @@ static bool otx2_xdp_rcv_pkt_handler(struct otx2_nic *pfvf,
> >
> > hard_start = (unsigned char *)phys_to_virt(pa);
> > xdp_prepare_buff(&xdp, hard_start, OTX2_HEAD_ROOM,
> > - cqe->sg.seg_size, false);
> > + cqe->sg.seg_size, true);
> >
> > act = bpf_prog_run_xdp(prog, &xdp);
> >
> > handle_xdp_verdict:
> > switch (act) {
> > case XDP_PASS:
> > + *metasize = xdp.data - xdp.data_meta;
> > break;
> > case XDP_TX:
> > qidx += pfvf->hw.tx_queues;
>
> This one handles ABORT and invalid return codes as PASS not DROP.
> That should probably be fixed separately?
Yes, right. I will post a fix for it.
Regards,
Lorenzo
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-03-25 13:28 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-18 11:46 [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 1/7] net: mvneta: Add metadata support for xdp mode Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 2/7] net: mvpp2: " Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 3/7] net: netsec: " Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 4/7] net: octeontx2: " Lorenzo Bianconi
2025-03-25 11:41 ` Jakub Kicinski
2025-03-25 13:28 ` Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 5/7] net: ethernet: mediatek: " Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 6/7] net: mana: " Lorenzo Bianconi
2025-03-18 11:46 ` [PATCH net-next v2 7/7] net: ti: cpsw: " Lorenzo Bianconi
2025-03-25 11:50 ` [PATCH net-next v2 0/7] net: xdp: Add missing metadata support for some xdp drvs patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).