All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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: link
Be 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.