From: "Björn Töpel" <bjorn.topel@gmail.com> To: Jesper Dangaard Brouer <brouer@redhat.com> Cc: "Daniel Borkmann" <borkmann@iogearbox.net>, "Alexei Starovoitov" <alexei.starovoitov@gmail.com>, Netdev <netdev@vger.kernel.org>, intel-wired-lan <intel-wired-lan@lists.osuosl.org>, dsahern@gmail.com, gospo@broadcom.com, "Björn Töpel" <bjorn.topel@intel.com>, michael.chan@broadcom.com, "Karlsson, Magnus" <magnus.karlsson@intel.com> Subject: Re: [Intel-wired-lan] [bpf-next V1-RFC PATCH 03/14] i40e: setup xdp_rxq_info Date: Mon, 18 Dec 2017 11:52:08 +0100 [thread overview] Message-ID: <CAJ+HfNgYvuHP72g04ZH1DR_svQtnSPi1Z_TqLVDvS-L9ijvh=A@mail.gmail.com> (raw) In-Reply-To: <151316397618.14967.13648763339440521538.stgit@firesoul> 2017-12-13 12:19 GMT+01:00 Jesper Dangaard Brouer <brouer@redhat.com>: > The i40e driver have a special "FDIR" RX-ring (I40E_VSI_FDIR) which is > a sideband channel for configuring/updating the flow director tables. > This (i40e_vsi_)type does not invoke XDP-ebpf code. Thus, mark this > type as a XDP RX-queue type RXQ_TYPE_SINK. > > Driver hook points for xdp_rxq_info: > * init+reg: i40e_setup_rx_descriptors (via i40e_vsi_setup_rx_resources) > * unreg : i40e_free_rx_resources (via i40e_vsi_free_rx_resources) > Firstly, thanks for working on this, Jesper. This is very valuable to the AF_PACKET V4^W^WAF_XDP work. > Tested on actual hardware with samples/bpf program. > > Cc: intel-wired-lan@lists.osuosl.org > Cc: Björn Töpel <bjorn.topel@intel.com> > Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> > --- > drivers/net/ethernet/intel/i40e/i40e_txrx.c | 18 +++++++++++++++++- > drivers/net/ethernet/intel/i40e/i40e_txrx.h | 3 +++ > 2 files changed, 20 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c > index 4566d66ffc7c..d1bfc4232ca9 100644 > --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c > +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c > @@ -27,6 +27,7 @@ > #include <linux/prefetch.h> > #include <net/busy_poll.h> > #include <linux/bpf_trace.h> > +#include <net/xdp.h> > #include "i40e.h" > #include "i40e_trace.h" > #include "i40e_prototype.h" > @@ -1236,6 +1237,7 @@ void i40e_clean_rx_ring(struct i40e_ring *rx_ring) > void i40e_free_rx_resources(struct i40e_ring *rx_ring) > { > i40e_clean_rx_ring(rx_ring); > + xdp_rxq_info_unreg(&rx_ring->xdp_rxq); > rx_ring->xdp_prog = NULL; > kfree(rx_ring->rx_bi); > rx_ring->rx_bi = NULL; > @@ -1283,6 +1285,18 @@ int i40e_setup_rx_descriptors(struct i40e_ring *rx_ring) > rx_ring->next_to_clean = 0; > rx_ring->next_to_use = 0; > > + /* XDP RX-queue info */ > + xdp_rxq_info_init(&rx_ring->xdp_rxq); > + > + /* Flow director side channel does not invoke XDP/bpf */ > + if (rx_ring->vsi->type == I40E_VSI_FDIR) > + xdp_rxq_info_type(&rx_ring->xdp_rxq, RXQ_TYPE_SINK); For me, it doesn't make sense to expose the FD Rx ring outside the scope of i40e driver. Check against VSI_MAIN in setup/cleanup so the FD ring is not exposed outside the driver. Maybe you can get rid of the RXQ_TYPE_SINK as well then. > + else > + rx_ring->xdp_rxq.dev = rx_ring->netdev; > + > + rx_ring->xdp_rxq.queue_index = rx_ring->queue_index; > + xdp_rxq_info_reg(&rx_ring->xdp_rxq); > + > rx_ring->xdp_prog = rx_ring->vsi->xdp_prog; > > return 0; > @@ -2068,11 +2082,13 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget) > struct sk_buff *skb = rx_ring->skb; > u16 cleaned_count = I40E_DESC_UNUSED(rx_ring); > bool failure = false, xdp_xmit = false; > + struct xdp_buff xdp; > + > + xdp.rxq = &rx_ring->xdp_rxq; > > while (likely(total_rx_packets < (unsigned int)budget)) { > struct i40e_rx_buffer *rx_buffer; > union i40e_rx_desc *rx_desc; > - struct xdp_buff xdp; > unsigned int size; > u16 vlan_tag; > u8 rx_ptype; > diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.h b/drivers/net/ethernet/intel/i40e/i40e_txrx.h > index fbae1182e2ea..2d08760fc4ce 100644 > --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.h > +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.h > @@ -27,6 +27,8 @@ > #ifndef _I40E_TXRX_H_ > #define _I40E_TXRX_H_ > > +#include <net/xdp.h> > + > /* Interrupt Throttling and Rate Limiting Goodies */ > > #define I40E_MAX_ITR 0x0FF0 /* reg uses 2 usec resolution */ > @@ -428,6 +430,7 @@ struct i40e_ring { > */ > > struct i40e_channel *ch; > + struct xdp_rxq_info xdp_rxq; > } ____cacheline_internodealigned_in_smp; > > static inline bool ring_uses_build_skb(struct i40e_ring *ring) > > _______________________________________________ > Intel-wired-lan mailing list > Intel-wired-lan@osuosl.org > https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
WARNING: multiple messages have this Message-ID (diff)
From: =?unknown-8bit?q?Bj=C3=B6rn_T=C3=B6pel?= <bjorn.topel@gmail.com> To: intel-wired-lan@osuosl.org Subject: [Intel-wired-lan] [bpf-next V1-RFC PATCH 03/14] i40e: setup xdp_rxq_info Date: Mon, 18 Dec 2017 11:52:08 +0100 [thread overview] Message-ID: <CAJ+HfNgYvuHP72g04ZH1DR_svQtnSPi1Z_TqLVDvS-L9ijvh=A@mail.gmail.com> (raw) In-Reply-To: <151316397618.14967.13648763339440521538.stgit@firesoul> 2017-12-13 12:19 GMT+01:00 Jesper Dangaard Brouer <brouer@redhat.com>: > The i40e driver have a special "FDIR" RX-ring (I40E_VSI_FDIR) which is > a sideband channel for configuring/updating the flow director tables. > This (i40e_vsi_)type does not invoke XDP-ebpf code. Thus, mark this > type as a XDP RX-queue type RXQ_TYPE_SINK. > > Driver hook points for xdp_rxq_info: > * init+reg: i40e_setup_rx_descriptors (via i40e_vsi_setup_rx_resources) > * unreg : i40e_free_rx_resources (via i40e_vsi_free_rx_resources) > Firstly, thanks for working on this, Jesper. This is very valuable to the AF_PACKET V4^W^WAF_XDP work. > Tested on actual hardware with samples/bpf program. > > Cc: intel-wired-lan at lists.osuosl.org > Cc: Bj?rn T?pel <bjorn.topel@intel.com> > Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> > --- > drivers/net/ethernet/intel/i40e/i40e_txrx.c | 18 +++++++++++++++++- > drivers/net/ethernet/intel/i40e/i40e_txrx.h | 3 +++ > 2 files changed, 20 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c > index 4566d66ffc7c..d1bfc4232ca9 100644 > --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c > +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c > @@ -27,6 +27,7 @@ > #include <linux/prefetch.h> > #include <net/busy_poll.h> > #include <linux/bpf_trace.h> > +#include <net/xdp.h> > #include "i40e.h" > #include "i40e_trace.h" > #include "i40e_prototype.h" > @@ -1236,6 +1237,7 @@ void i40e_clean_rx_ring(struct i40e_ring *rx_ring) > void i40e_free_rx_resources(struct i40e_ring *rx_ring) > { > i40e_clean_rx_ring(rx_ring); > + xdp_rxq_info_unreg(&rx_ring->xdp_rxq); > rx_ring->xdp_prog = NULL; > kfree(rx_ring->rx_bi); > rx_ring->rx_bi = NULL; > @@ -1283,6 +1285,18 @@ int i40e_setup_rx_descriptors(struct i40e_ring *rx_ring) > rx_ring->next_to_clean = 0; > rx_ring->next_to_use = 0; > > + /* XDP RX-queue info */ > + xdp_rxq_info_init(&rx_ring->xdp_rxq); > + > + /* Flow director side channel does not invoke XDP/bpf */ > + if (rx_ring->vsi->type == I40E_VSI_FDIR) > + xdp_rxq_info_type(&rx_ring->xdp_rxq, RXQ_TYPE_SINK); For me, it doesn't make sense to expose the FD Rx ring outside the scope of i40e driver. Check against VSI_MAIN in setup/cleanup so the FD ring is not exposed outside the driver. Maybe you can get rid of the RXQ_TYPE_SINK as well then. > + else > + rx_ring->xdp_rxq.dev = rx_ring->netdev; > + > + rx_ring->xdp_rxq.queue_index = rx_ring->queue_index; > + xdp_rxq_info_reg(&rx_ring->xdp_rxq); > + > rx_ring->xdp_prog = rx_ring->vsi->xdp_prog; > > return 0; > @@ -2068,11 +2082,13 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget) > struct sk_buff *skb = rx_ring->skb; > u16 cleaned_count = I40E_DESC_UNUSED(rx_ring); > bool failure = false, xdp_xmit = false; > + struct xdp_buff xdp; > + > + xdp.rxq = &rx_ring->xdp_rxq; > > while (likely(total_rx_packets < (unsigned int)budget)) { > struct i40e_rx_buffer *rx_buffer; > union i40e_rx_desc *rx_desc; > - struct xdp_buff xdp; > unsigned int size; > u16 vlan_tag; > u8 rx_ptype; > diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.h b/drivers/net/ethernet/intel/i40e/i40e_txrx.h > index fbae1182e2ea..2d08760fc4ce 100644 > --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.h > +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.h > @@ -27,6 +27,8 @@ > #ifndef _I40E_TXRX_H_ > #define _I40E_TXRX_H_ > > +#include <net/xdp.h> > + > /* Interrupt Throttling and Rate Limiting Goodies */ > > #define I40E_MAX_ITR 0x0FF0 /* reg uses 2 usec resolution */ > @@ -428,6 +430,7 @@ struct i40e_ring { > */ > > struct i40e_channel *ch; > + struct xdp_rxq_info xdp_rxq; > } ____cacheline_internodealigned_in_smp; > > static inline bool ring_uses_build_skb(struct i40e_ring *ring) > > _______________________________________________ > Intel-wired-lan mailing list > Intel-wired-lan at osuosl.org > https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
next prev parent reply other threads:[~2017-12-18 10:52 UTC|newest] Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-12-13 11:19 [bpf-next V1-RFC PATCH 00/14] xdp: new XDP rx-queue info concept Jesper Dangaard Brouer 2017-12-13 11:19 ` [bpf-next V1-RFC PATCH 01/14] xdp: base API for " Jesper Dangaard Brouer 2017-12-14 2:34 ` David Ahern 2017-12-18 10:55 ` Jesper Dangaard Brouer 2017-12-18 13:23 ` David Ahern 2017-12-18 15:52 ` Jesper Dangaard Brouer 2017-12-21 16:59 ` Jesper Dangaard Brouer 2017-12-13 11:19 ` [bpf-next V1-RFC PATCH 02/14] xdp/mlx5: setup xdp_rxq_info and extend with qtype Jesper Dangaard Brouer 2017-12-13 12:27 ` Tariq Toukan 2017-12-13 13:44 ` Jesper Dangaard Brouer 2017-12-13 23:03 ` Saeed Mahameed 2017-12-14 6:46 ` Jesper Dangaard Brouer 2017-12-13 11:19 ` [bpf-next V1-RFC PATCH 03/14] i40e: setup xdp_rxq_info Jesper Dangaard Brouer 2017-12-13 11:19 ` [Intel-wired-lan] " Jesper Dangaard Brouer 2017-12-18 10:52 ` Björn Töpel [this message] 2017-12-18 10:52 ` =?unknown-8bit?q?Bj=C3=B6rn_T=C3=B6pel?= 2017-12-18 13:05 ` Jesper Dangaard Brouer 2017-12-18 13:05 ` Jesper Dangaard Brouer 2017-12-13 11:19 ` [bpf-next V1-RFC PATCH 04/14] ixgbe: " Jesper Dangaard Brouer 2017-12-13 11:19 ` [Intel-wired-lan] " Jesper Dangaard Brouer 2017-12-13 11:19 ` [bpf-next V1-RFC PATCH 05/14] xdp/qede: setup xdp_rxq_info and intro xdp_rxq_info_is_reg Jesper Dangaard Brouer 2017-12-13 11:19 ` [bpf-next V1-RFC PATCH 06/14] mlx4: setup xdp_rxq_info Jesper Dangaard Brouer 2017-12-13 12:42 ` Tariq Toukan 2017-12-13 14:00 ` Jesper Dangaard Brouer 2017-12-13 11:19 ` [bpf-next V1-RFC PATCH 07/14] bnxt_en: " Jesper Dangaard Brouer 2017-12-13 11:20 ` [bpf-next V1-RFC PATCH 08/14] nfp: " Jesper Dangaard Brouer 2017-12-14 2:34 ` Jakub Kicinski 2017-12-18 20:25 ` Jesper Dangaard Brouer 2017-12-13 11:20 ` [bpf-next V1-RFC PATCH 09/14] thunderx: " Jesper Dangaard Brouer 2017-12-13 11:20 ` Jesper Dangaard Brouer 2017-12-13 11:20 ` [bpf-next V1-RFC PATCH 10/14] tun: " Jesper Dangaard Brouer 2017-12-20 7:48 ` Jason Wang 2017-12-21 15:42 ` Jesper Dangaard Brouer 2017-12-13 11:20 ` [bpf-next V1-RFC PATCH 11/14] virtio_net: " Jesper Dangaard Brouer 2017-12-13 11:20 ` [bpf-next V1-RFC PATCH 12/14] xdp: generic XDP handling of xdp_rxq_info Jesper Dangaard Brouer 2017-12-13 22:50 ` Saeed Mahameed 2017-12-18 9:47 ` Jesper Dangaard Brouer 2017-12-13 11:20 ` [bpf-next V1-RFC PATCH 13/14] bpf: finally expose xdp_rxq_info to XDP bpf-programs Jesper Dangaard Brouer 2017-12-13 11:20 ` [bpf-next V1-RFC PATCH 14/14] samples/bpf: program demonstrating access to xdp_rxq_info Jesper Dangaard Brouer
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='CAJ+HfNgYvuHP72g04ZH1DR_svQtnSPi1Z_TqLVDvS-L9ijvh=A@mail.gmail.com' \ --to=bjorn.topel@gmail.com \ --cc=alexei.starovoitov@gmail.com \ --cc=bjorn.topel@intel.com \ --cc=borkmann@iogearbox.net \ --cc=brouer@redhat.com \ --cc=dsahern@gmail.com \ --cc=gospo@broadcom.com \ --cc=intel-wired-lan@lists.osuosl.org \ --cc=magnus.karlsson@intel.com \ --cc=michael.chan@broadcom.com \ --cc=netdev@vger.kernel.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.