mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-02 12:10:23 -04:00
net: mvpp2: Add metadata support for xdp mode
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> Link: https://patch.msgid.link/20250318-mvneta-xdp-meta-v2-2-b6075778f61f@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
07b2fbffaa
commit
9a45e193c8
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user