From: Andy Gospodarek <andrew.gospodarek@broadcom.com>
To: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Cc: Andy Gospodarek <andrew.gospodarek@broadcom.com>,
Lorenzo Bianconi <lorenzo@kernel.org>,
BPF-dev-list <bpf@vger.kernel.org>,
Network Development <netdev@vger.kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
"Agroskin, Shay" <shayagr@amazon.com>,
John Fastabend <john.fastabend@gmail.com>,
David Ahern <dsahern@kernel.org>,
Jesper Brouer <brouer@redhat.com>,
Eelco Chaudron <echaudro@redhat.com>,
Jason Wang <jasowang@redhat.com>,
Alexander Duyck <alexander.duyck@gmail.com>,
Saeed Mahameed <saeed@kernel.org>,
Maciej Fijalkowski <maciej.fijalkowski@intel.com>,
"Karlsson, Magnus" <magnus.karlsson@intel.com>,
"Sarkar, Tirthendu" <tirthendu.sarkar@intel.com>,
Toke Hoiland Jorgensen <toke@redhat.com>,
andy@greyhouse.net
Subject: Re: [PATCH v21 bpf-next 06/23] net: marvell: rely on xdp_update_skb_shared_info utility routine
Date: Tue, 11 Jan 2022 09:29:52 -0500 [thread overview]
Message-ID: <Yd2UYHT2KGN7aY8H@C02YVCJELVCG> (raw)
In-Reply-To: <CAJ0CqmXaeJkJ8SDjTA1u_JNsqpxS8GA4J29S9wGPH0qOmqjp0w@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4890 bytes --]
On Tue, Jan 11, 2022 at 02:05:23PM +0100, Lorenzo Bianconi wrote:
> >
> > On Sat, Jan 08, 2022 at 12:53:09PM +0100, Lorenzo Bianconi wrote:
> > > Rely on xdp_update_skb_shared_info routine in order to avoid
> > > resetting frags array in skb_shared_info structure building
> > > the skb in mvneta_swbm_build_skb(). Frags array is expected to
> > > be initialized by the receiving driver building the xdp_buff
> > > and here we just need to update memory metadata.
> > >
> > > Acked-by: Toke Hoiland-Jorgensen <toke@redhat.com>
> > > Acked-by: John Fastabend <john.fastabend@gmail.com>
> > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > > ---
> > > drivers/net/ethernet/marvell/mvneta.c | 23 ++++++++++-------------
> > > 1 file changed, 10 insertions(+), 13 deletions(-)
> > >
> > > diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
> > > index 775ffd91b741..267a306d9c75 100644
> > > --- a/drivers/net/ethernet/marvell/mvneta.c
> > > +++ b/drivers/net/ethernet/marvell/mvneta.c
> > > @@ -2332,8 +2332,12 @@ mvneta_swbm_add_rx_fragment(struct mvneta_port *pp,
> > > skb_frag_size_set(frag, data_len);
> > > __skb_frag_set_page(frag, page);
> > >
> > > - if (!xdp_buff_is_mb(xdp))
> > > + if (!xdp_buff_is_mb(xdp)) {
> > > + sinfo->xdp_frags_size = *size;
> > > xdp_buff_set_mb(xdp);
> > > + }
> > > + if (page_is_pfmemalloc(page))
> > > + xdp_buff_set_frag_pfmemalloc(xdp);
> > > } else {
> > > page_pool_put_full_page(rxq->page_pool, page, true);
> > > }
> > > @@ -2347,7 +2351,6 @@ mvneta_swbm_build_skb(struct mvneta_port *pp, struct page_pool *pool,
> > > struct skb_shared_info *sinfo = xdp_get_shared_info_from_buff(xdp);
> > > struct sk_buff *skb;
> > > u8 num_frags;
> > > - int i;
> > >
> > > if (unlikely(xdp_buff_is_mb(xdp)))
> > > num_frags = sinfo->nr_frags;
> > > @@ -2362,18 +2365,12 @@ mvneta_swbm_build_skb(struct mvneta_port *pp, struct page_pool *pool,
> > > skb_put(skb, xdp->data_end - xdp->data);
> > > skb->ip_summed = mvneta_rx_csum(pp, desc_status);
> > >
> > > - if (likely(!xdp_buff_is_mb(xdp)))
> > > - goto out;
> > > -
> > > - for (i = 0; i < num_frags; i++) {
> > > - skb_frag_t *frag = &sinfo->frags[i];
> > > -
> > > - skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
> > > - skb_frag_page(frag), skb_frag_off(frag),
> > > - skb_frag_size(frag), PAGE_SIZE);
> >
> > Maybe I'm missing something but I'm not sure you have a suitable
> > replacement for the 3 lines above this in your proposed change.
> >
>
> Hi Andy,
>
> mvneta_swbm_add_rx_fragment() initializes frags array in
> skb_shared_info for xdp whenever we receive a multi-descriptors frame.
> Since frags array is at the same offset for the xdp_buff and for the
> new skb and build_skb() in mvneta_swbm_build_skb() does not overwrite
> it, we do not need to initialize it again allocating the skb, just
> account metadata info running xdp_update_skb_shared_info(). Agree?
>
Lorenzo,
Thanks for the explanation; I do agree. I was thinking about this last night
and suspected this was the case. My current implementation doesn't use
build_skb to reuse the DMA buffer; it allocates a new skb->data area for
passing up the stack. This is why I needed the skb_frag_set_page calls and you
did not. That may change, but the first implementation will probably continue
on that path.
Overall this set looks pretty solid to me. Thanks to you and other
contributors for all the work on this!
-andy
> > > - }
> > > + if (unlikely(xdp_buff_is_mb(xdp)))
> > > + xdp_update_skb_shared_info(skb, num_frags,
> > > + sinfo->xdp_frags_size,
> > > + num_frags * xdp->frame_sz,
> > > + xdp_buff_is_frag_pfmemalloc(xdp));
> > >
> >
> > When I did an implementation of this on a different driver I also needed
> > to add:
> >
> > for (i = 0; i < num_frags; i++)
> > skb_frag_set_page(skb, i, skb_frag_page(&sinfo->frags[i]));
> >
> > to make sure that frames that were given XDP_PASS were formatted
> > correctly so they could be handled by the stack. Don't you need
> > something similar to make sure frags are properly set?
> >
> > Thanks,
> >
> > -andy
> >
> > P.S. Sorry for noticing this so late in the process; I realize this version
> > was just a rebase of v20 and this would have been useful information
> > earlier if I'm correct.
> >
>
> no worries :)
>
> Regards,
> Lorenzo
>
> > > -out:
> > > return skb;
> > > }
> > >
> > > --
> > > 2.33.1
> > >
>
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4222 bytes --]
next prev parent reply other threads:[~2022-01-11 14:30 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-08 11:53 [PATCH v21 bpf-next 00/23] mvneta: introduce XDP multi-buffer support Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 01/23] net: skbuff: add size metadata to skb_shared_info for xdp Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 02/23] xdp: introduce flags field in xdp_buff/xdp_frame Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 03/23] net: mvneta: update mb bit before passing the xdp buffer to eBPF layer Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 04/23] net: mvneta: simplify mvneta_swbm_add_rx_fragment management Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 05/23] net: xdp: add xdp_update_skb_shared_info utility routine Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 06/23] net: marvell: rely on " Lorenzo Bianconi
2022-01-10 16:37 ` Andy Gospodarek
2022-01-11 13:05 ` Lorenzo Bianconi
2022-01-11 14:29 ` Andy Gospodarek [this message]
2022-01-08 11:53 ` [PATCH v21 bpf-next 07/23] xdp: add multi-buff support to xdp_return_{buff/frame} Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 08/23] net: mvneta: add multi buffer support to XDP_TX Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 09/23] bpf: introduce BPF_F_XDP_MB flag in prog_flags loading the ebpf program Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 10/23] net: mvneta: enable jumbo frames if the loaded XDP program support mb Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 11/23] bpf: introduce bpf_xdp_get_buff_len helper Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 12/23] bpf: add multi-buff support to the bpf_xdp_adjust_tail() API Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 13/23] bpf: add multi-buffer support to xdp copy helpers Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 14/23] bpf: move user_size out of bpf_test_init Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 15/23] bpf: introduce multibuff support to bpf_prog_test_run_xdp() Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 16/23] bpf: test_run: add xdp_shared_info pointer in bpf_test_finish signature Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 17/23] bpf: selftests: update xdp_adjust_tail selftest to include multi-buffer Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 18/23] libbpf: Add SEC name for xdp_mb programs Lorenzo Bianconi
2022-01-10 2:16 ` Andrii Nakryiko
2022-01-12 18:17 ` Lorenzo Bianconi
2022-01-12 18:24 ` Andrii Nakryiko
2022-01-12 18:35 ` Lorenzo Bianconi
2022-01-12 19:16 ` Alexei Starovoitov
2022-01-12 19:20 ` Andrii Nakryiko
2022-01-12 19:47 ` Alexei Starovoitov
2022-01-12 20:04 ` Zvi Effron
2022-01-12 20:12 ` Lorenzo Bianconi
2022-01-12 22:04 ` Toke Høiland-Jørgensen
2022-01-13 9:38 ` Jesper Dangaard Brouer
2022-01-13 10:22 ` Lorenzo Bianconi
2022-01-13 20:19 ` Alexei Starovoitov
2022-01-13 23:58 ` Lorenzo Bianconi
2022-01-14 2:09 ` Alexei Starovoitov
2022-01-14 16:50 ` Jesper Dangaard Brouer
2022-01-14 18:55 ` Zvi Effron
2022-01-14 19:36 ` Andrii Nakryiko
2022-01-14 16:35 ` Lorenzo Bianconi
2022-01-14 19:35 ` Andrii Nakryiko
2022-01-08 11:53 ` [PATCH v21 bpf-next 19/23] bpf: generalise tail call map compatibility check Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 20/23] net: xdp: introduce bpf_xdp_pointer utility routine Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 21/23] bpf: selftests: introduce bpf_xdp_{load,store}_bytes selftest Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 22/23] bpf: selftests: add CPUMAP/DEVMAP selftests for xdp multi-buff Lorenzo Bianconi
2022-01-08 11:53 ` [PATCH v21 bpf-next 23/23] xdp: disable XDP_REDIRECT " Lorenzo Bianconi
2022-01-12 18:55 ` [PATCH v21 bpf-next 00/23] mvneta: introduce XDP multi-buffer support Lorenzo Bianconi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Yd2UYHT2KGN7aY8H@C02YVCJELVCG \
--to=andrew.gospodarek@broadcom.com \
--cc=alexander.duyck@gmail.com \
--cc=andy@greyhouse.net \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=brouer@redhat.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=echaudro@redhat.com \
--cc=jasowang@redhat.com \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=lorenzo.bianconi@redhat.com \
--cc=lorenzo@kernel.org \
--cc=maciej.fijalkowski@intel.com \
--cc=magnus.karlsson@intel.com \
--cc=netdev@vger.kernel.org \
--cc=saeed@kernel.org \
--cc=shayagr@amazon.com \
--cc=tirthendu.sarkar@intel.com \
--cc=toke@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).