[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200904011358.kbdxf4awugi3qwjl@ast-mbp.dhcp.thefacebook.com>
Date: Thu, 3 Sep 2020 18:13:58 -0700
From: Alexei Starovoitov <alexei.starovoitov@...il.com>
To: Lorenzo Bianconi <lorenzo@...nel.org>
Cc: netdev@...r.kernel.org, bpf@...r.kernel.org, davem@...emloft.net,
lorenzo.bianconi@...hat.com, brouer@...hat.com,
echaudro@...hat.com, sameehj@...zon.com, kuba@...nel.org,
john.fastabend@...il.com, daniel@...earbox.net, ast@...nel.org,
shayagr@...zon.com
Subject: Re: [PATCH v2 net-next 6/9] bpf: helpers: add
bpf_xdp_adjust_mb_header helper
On Thu, Sep 03, 2020 at 10:58:50PM +0200, Lorenzo Bianconi wrote:
> +BPF_CALL_2(bpf_xdp_adjust_mb_header, struct xdp_buff *, xdp,
> + int, offset)
> +{
> + void *data_hard_end, *data_end;
> + struct skb_shared_info *sinfo;
> + int frag_offset, frag_len;
> + u8 *addr;
> +
> + if (!xdp->mb)
> + return -EOPNOTSUPP;
> +
> + sinfo = xdp_get_shared_info_from_buff(xdp);
> +
> + frag_len = skb_frag_size(&sinfo->frags[0]);
> + if (offset > frag_len)
> + return -EINVAL;
> +
> + frag_offset = skb_frag_off(&sinfo->frags[0]);
> + data_end = xdp->data_end + offset;
> +
> + if (offset < 0 && (-offset > frag_offset ||
> + data_end < xdp->data + ETH_HLEN))
> + return -EINVAL;
> +
> + data_hard_end = xdp_data_hard_end(xdp); /* use xdp->frame_sz */
> + if (data_end > data_hard_end)
> + return -EINVAL;
> +
> + addr = page_address(skb_frag_page(&sinfo->frags[0])) + frag_offset;
> + if (offset > 0) {
> + memcpy(xdp->data_end, addr, offset);
> + } else {
> + memcpy(addr + offset, xdp->data_end + offset, -offset);
> + memset(xdp->data_end + offset, 0, -offset);
> + }
> +
> + skb_frag_size_sub(&sinfo->frags[0], offset);
> + skb_frag_off_add(&sinfo->frags[0], offset);
> + xdp->data_end = data_end;
> +
> + return 0;
> +}
wait a sec. Are you saying that multi buffer XDP actually should be skb based?
If that's what mvneta driver is doing that's fine, but that is not a
reasonable requirement to put on all other drivers.
Powered by blists - more mailing lists