On Tue, 2023-03-28 at 20:04 +0800, Xuan Zhuo wrote: > @@ -949,15 +1042,11 @@ static struct sk_buff *receive_small(struct net_device *dev, > { > struct sk_buff *skb; > struct bpf_prog *xdp_prog; > - unsigned int xdp_headroom = (unsigned long)ctx; > - unsigned int header_offset = VIRTNET_RX_PAD + xdp_headroom; > + unsigned int header_offset = VIRTNET_RX_PAD; > unsigned int headroom = vi->hdr_len + header_offset; This changes (reduces) the headroom for non-xpd-pass skbs. [...] > + buf += header_offset; > + memcpy(skb_vnet_hdr(skb), buf, vi->hdr_len); AFAICS, that also means that receive_small(), for such packets, will look for the virtio header in a different location. Is that expected? Thanks. Paolo