unsigned int buflen;
struct xdp_buff xdp;
struct sk_buff *skb;
- unsigned int delta = 0;
unsigned int metasize = 0;
- void *orig_data;
u32 act;
if (unlikely(hdr->hdr.gso_type))
xdp_init_buff(&xdp, buflen, &rq->xdp_rxq);
xdp_prepare_buff(&xdp, buf + VIRTNET_RX_PAD + vi->hdr_len,
xdp_headroom, len, true);
- orig_data = xdp.data;
act = virtnet_xdp_handler(xdp_prog, &xdp, dev, xdp_xmit, stats);
switch (act) {
case XDP_PASS:
/* Recalculate length in case bpf program changed it */
- delta = orig_data - xdp.data;
len = xdp.data_end - xdp.data;
metasize = xdp.data - xdp.data_meta;
break;
if (!skb)
goto err;
- skb_reserve(skb, headroom - delta);
+ skb_reserve(skb, xdp.data - buf);
skb_put(skb, len);
if (metasize)
skb_metadata_set(skb, metasize);