netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Björn Töpel" <bjorn.topel@gmail.com>
To: Maxim Mikityanskiy <maximmi@mellanox.com>
Cc: "Alexei Starovoitov" <ast@kernel.org>,
	"Daniel Borkmann" <daniel@iogearbox.net>,
	"Björn Töpel" <bjorn.topel@intel.com>,
	"Magnus Karlsson" <magnus.karlsson@intel.com>,
	"bpf@vger.kernel.org" <bpf@vger.kernel.org>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	"Saeed Mahameed" <saeedm@mellanox.com>,
	"Jonathan Lemon" <bsd@fb.com>,
	"Tariq Toukan" <tariqt@mellanox.com>,
	"Martin KaFai Lau" <kafai@fb.com>,
	"Song Liu" <songliubraving@fb.com>, "Yonghong Song" <yhs@fb.com>,
	"Jakub Kicinski" <jakub.kicinski@netronome.com>,
	"Maciej Fijalkowski" <maciejromanfijalkowski@gmail.com>
Subject: Re: [PATCH bpf-next v4 06/17] xsk: Return the whole xdp_desc from xsk_umem_consume_tx
Date: Thu, 13 Jun 2019 14:48:16 +0200	[thread overview]
Message-ID: <CAJ+HfNhsjsCoDx5NCEu=AqrT-ENRb8JnqzJfo2m8kD2xraHc+w@mail.gmail.com> (raw)
In-Reply-To: <20190612155605.22450-7-maximmi@mellanox.com>

On Wed, 12 Jun 2019 at 20:05, Maxim Mikityanskiy <maximmi@mellanox.com> wrote:
>
> Some drivers want to access the data transmitted in order to implement
> acceleration features of the NICs. It is also useful in AF_XDP TX flow.
>
> Change the xsk_umem_consume_tx API to return the whole xdp_desc, that
> contains the data pointer, length and DMA address, instead of only the
> latter two. Adapt the implementation of i40e and ixgbe to this change.
>

Acked-by: Björn Töpel <bjorn.topel@intel.com>

> Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
> Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
> Acked-by: Saeed Mahameed <saeedm@mellanox.com>
> Cc: Björn Töpel <bjorn.topel@intel.com>
> Cc: Magnus Karlsson <magnus.karlsson@intel.com>
> ---
>  drivers/net/ethernet/intel/i40e/i40e_xsk.c   | 12 +++++++-----
>  drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 15 +++++++++------
>  include/net/xdp_sock.h                       |  6 +++---
>  net/xdp/xsk.c                                | 10 +++-------
>  4 files changed, 22 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
> index 1b17486543ac..eae6fafad1b8 100644
> --- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c
> +++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
> @@ -640,8 +640,8 @@ static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget)
>         struct i40e_tx_desc *tx_desc = NULL;
>         struct i40e_tx_buffer *tx_bi;
>         bool work_done = true;
> +       struct xdp_desc desc;
>         dma_addr_t dma;
> -       u32 len;
>
>         while (budget-- > 0) {
>                 if (!unlikely(I40E_DESC_UNUSED(xdp_ring))) {
> @@ -650,21 +650,23 @@ static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget)
>                         break;
>                 }
>
> -               if (!xsk_umem_consume_tx(xdp_ring->xsk_umem, &dma, &len))
> +               if (!xsk_umem_consume_tx(xdp_ring->xsk_umem, &desc))
>                         break;
>
> -               dma_sync_single_for_device(xdp_ring->dev, dma, len,
> +               dma = xdp_umem_get_dma(xdp_ring->xsk_umem, desc.addr);
> +
> +               dma_sync_single_for_device(xdp_ring->dev, dma, desc.len,
>                                            DMA_BIDIRECTIONAL);
>
>                 tx_bi = &xdp_ring->tx_bi[xdp_ring->next_to_use];
> -               tx_bi->bytecount = len;
> +               tx_bi->bytecount = desc.len;
>
>                 tx_desc = I40E_TX_DESC(xdp_ring, xdp_ring->next_to_use);
>                 tx_desc->buffer_addr = cpu_to_le64(dma);
>                 tx_desc->cmd_type_offset_bsz =
>                         build_ctob(I40E_TX_DESC_CMD_ICRC
>                                    | I40E_TX_DESC_CMD_EOP,
> -                                  0, len, 0);
> +                                  0, desc.len, 0);
>
>                 xdp_ring->next_to_use++;
>                 if (xdp_ring->next_to_use == xdp_ring->count)
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
> index bfe95ce0bd7f..0297a70a4e2d 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
> @@ -621,8 +621,9 @@ static bool ixgbe_xmit_zc(struct ixgbe_ring *xdp_ring, unsigned int budget)
>         union ixgbe_adv_tx_desc *tx_desc = NULL;
>         struct ixgbe_tx_buffer *tx_bi;
>         bool work_done = true;
> -       u32 len, cmd_type;
> +       struct xdp_desc desc;
>         dma_addr_t dma;
> +       u32 cmd_type;
>
>         while (budget-- > 0) {
>                 if (unlikely(!ixgbe_desc_unused(xdp_ring)) ||
> @@ -631,14 +632,16 @@ static bool ixgbe_xmit_zc(struct ixgbe_ring *xdp_ring, unsigned int budget)
>                         break;
>                 }
>
> -               if (!xsk_umem_consume_tx(xdp_ring->xsk_umem, &dma, &len))
> +               if (!xsk_umem_consume_tx(xdp_ring->xsk_umem, &desc))
>                         break;
>
> -               dma_sync_single_for_device(xdp_ring->dev, dma, len,
> +               dma = xdp_umem_get_dma(xdp_ring->xsk_umem, desc.addr);
> +
> +               dma_sync_single_for_device(xdp_ring->dev, dma, desc.len,
>                                            DMA_BIDIRECTIONAL);
>
>                 tx_bi = &xdp_ring->tx_buffer_info[xdp_ring->next_to_use];
> -               tx_bi->bytecount = len;
> +               tx_bi->bytecount = desc.len;
>                 tx_bi->xdpf = NULL;
>
>                 tx_desc = IXGBE_TX_DESC(xdp_ring, xdp_ring->next_to_use);
> @@ -648,10 +651,10 @@ static bool ixgbe_xmit_zc(struct ixgbe_ring *xdp_ring, unsigned int budget)
>                 cmd_type = IXGBE_ADVTXD_DTYP_DATA |
>                            IXGBE_ADVTXD_DCMD_DEXT |
>                            IXGBE_ADVTXD_DCMD_IFCS;
> -               cmd_type |= len | IXGBE_TXD_CMD;
> +               cmd_type |= desc.len | IXGBE_TXD_CMD;
>                 tx_desc->read.cmd_type_len = cpu_to_le32(cmd_type);
>                 tx_desc->read.olinfo_status =
> -                       cpu_to_le32(len << IXGBE_ADVTXD_PAYLEN_SHIFT);
> +                       cpu_to_le32(desc.len << IXGBE_ADVTXD_PAYLEN_SHIFT);
>
>                 xdp_ring->next_to_use++;
>                 if (xdp_ring->next_to_use == xdp_ring->count)
> diff --git a/include/net/xdp_sock.h b/include/net/xdp_sock.h
> index b6f5ebae43a1..057b159ff8b9 100644
> --- a/include/net/xdp_sock.h
> +++ b/include/net/xdp_sock.h
> @@ -81,7 +81,7 @@ bool xsk_umem_has_addrs(struct xdp_umem *umem, u32 cnt);
>  u64 *xsk_umem_peek_addr(struct xdp_umem *umem, u64 *addr);
>  void xsk_umem_discard_addr(struct xdp_umem *umem);
>  void xsk_umem_complete_tx(struct xdp_umem *umem, u32 nb_entries);
> -bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, u32 *len);
> +bool xsk_umem_consume_tx(struct xdp_umem *umem, struct xdp_desc *desc);
>  void xsk_umem_consume_tx_done(struct xdp_umem *umem);
>  struct xdp_umem_fq_reuse *xsk_reuseq_prepare(u32 nentries);
>  struct xdp_umem_fq_reuse *xsk_reuseq_swap(struct xdp_umem *umem,
> @@ -175,8 +175,8 @@ static inline void xsk_umem_complete_tx(struct xdp_umem *umem, u32 nb_entries)
>  {
>  }
>
> -static inline bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma,
> -                                      u32 *len)
> +static inline bool xsk_umem_consume_tx(struct xdp_umem *umem,
> +                                      struct xdp_desc *desc)
>  {
>         return false;
>  }
> diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
> index 35ca531ac74e..74417a851ed5 100644
> --- a/net/xdp/xsk.c
> +++ b/net/xdp/xsk.c
> @@ -172,22 +172,18 @@ void xsk_umem_consume_tx_done(struct xdp_umem *umem)
>  }
>  EXPORT_SYMBOL(xsk_umem_consume_tx_done);
>
> -bool xsk_umem_consume_tx(struct xdp_umem *umem, dma_addr_t *dma, u32 *len)
> +bool xsk_umem_consume_tx(struct xdp_umem *umem, struct xdp_desc *desc)
>  {
> -       struct xdp_desc desc;
>         struct xdp_sock *xs;
>
>         rcu_read_lock();
>         list_for_each_entry_rcu(xs, &umem->xsk_list, list) {
> -               if (!xskq_peek_desc(xs->tx, &desc))
> +               if (!xskq_peek_desc(xs->tx, desc))
>                         continue;
>
> -               if (xskq_produce_addr_lazy(umem->cq, desc.addr))
> +               if (xskq_produce_addr_lazy(umem->cq, desc->addr))
>                         goto out;
>
> -               *dma = xdp_umem_get_dma(umem, desc.addr);
> -               *len = desc.len;
> -
>                 xskq_discard_desc(xs->tx);
>                 rcu_read_unlock();
>                 return true;
> --
> 2.19.1
>

  reply	other threads:[~2019-06-13 15:22 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-12 15:56 [PATCH bpf-next v4 00/17] AF_XDP infrastructure improvements and mlx5e support Maxim Mikityanskiy
2019-06-12 15:56 ` [PATCH bpf-next v4 01/17] net/mlx5e: Attach/detach XDP program safely Maxim Mikityanskiy
2019-06-12 15:56 ` [PATCH bpf-next v4 02/17] xsk: Add API to check for available entries in FQ Maxim Mikityanskiy
2019-06-13 12:50   ` Björn Töpel
2019-06-12 15:56 ` [PATCH bpf-next v4 03/17] xsk: Add getsockopt XDP_OPTIONS Maxim Mikityanskiy
2019-06-13 12:50   ` Björn Töpel
2019-06-12 15:56 ` [PATCH bpf-next v4 04/17] libbpf: Support " Maxim Mikityanskiy
2019-06-13 12:51   ` Björn Töpel
2019-06-12 15:56 ` [PATCH bpf-next v4 05/17] xsk: Change the default frame size to 4096 and allow controlling it Maxim Mikityanskiy
2019-06-12 20:10   ` Jakub Kicinski
2019-06-13 14:01     ` Maxim Mikityanskiy
2019-06-13 17:29       ` Jakub Kicinski
2019-06-14 13:25         ` Maxim Mikityanskiy
2019-06-15  1:40           ` Jakub Kicinski
2019-06-18 12:00             ` Maxim Mikityanskiy
2019-06-12 15:56 ` [PATCH bpf-next v4 06/17] xsk: Return the whole xdp_desc from xsk_umem_consume_tx Maxim Mikityanskiy
2019-06-13 12:48   ` Björn Töpel [this message]
2019-06-12 15:56 ` [PATCH bpf-next v4 07/17] libbpf: Support drivers with non-combined channels Maxim Mikityanskiy
2019-06-12 20:23   ` Jakub Kicinski
2019-06-13 12:41     ` Björn Töpel
2019-06-13 17:34       ` Jakub Kicinski
2019-06-13 14:01     ` Maxim Mikityanskiy
2019-06-13 14:45       ` Maciej Fijalkowski
2019-06-14 13:25         ` Maxim Mikityanskiy
2019-06-14 17:15           ` Maciej Fijalkowski
2019-06-14 19:50             ` Björn Töpel
2019-06-18 12:00             ` Maxim Mikityanskiy
2019-06-13 18:09       ` Jakub Kicinski
2019-06-14 13:25         ` Maxim Mikityanskiy
2019-06-15  2:12           ` Jakub Kicinski
2019-06-12 15:56 ` [PATCH bpf-next v4 08/17] net/mlx5e: Replace deprecated PCI_DMA_TODEVICE Maxim Mikityanskiy
2019-06-12 15:56 ` [PATCH bpf-next v4 09/17] net/mlx5e: Calculate linear RX frag size considering XSK Maxim Mikityanskiy
2019-06-12 15:56 ` [PATCH bpf-next v4 10/17] net/mlx5e: Allow ICO SQ to be used by multiple RQs Maxim Mikityanskiy
2019-06-12 15:56 ` [PATCH bpf-next v4 11/17] net/mlx5e: Refactor struct mlx5e_xdp_info Maxim Mikityanskiy
2019-06-12 15:56 ` [PATCH bpf-next v4 12/17] net/mlx5e: Share the XDP SQ for XDP_TX between RQs Maxim Mikityanskiy
2019-06-12 15:57 ` [PATCH bpf-next v4 13/17] net/mlx5e: XDP_TX from UMEM support Maxim Mikityanskiy
2019-06-12 15:57 ` [PATCH bpf-next v4 14/17] net/mlx5e: Consider XSK in XDP MTU limit calculation Maxim Mikityanskiy
2019-06-12 15:57 ` [PATCH bpf-next v4 15/17] net/mlx5e: Encapsulate open/close queues into a function Maxim Mikityanskiy
2019-06-12 15:57 ` [PATCH bpf-next v4 16/17] net/mlx5e: Move queue param structs to en/params.h Maxim Mikityanskiy
2019-06-12 15:57 ` [PATCH bpf-next v4 17/17] net/mlx5e: Add XSK zero-copy support Maxim Mikityanskiy
2019-06-15 15:42   ` Jakub Kicinski
2019-06-18 12:00     ` Maxim Mikityanskiy
2019-06-12 19:10 ` [PATCH bpf-next v4 00/17] AF_XDP infrastructure improvements and mlx5e support Jonathan Lemon
2019-06-12 20:48 ` Jakub Kicinski
2019-06-13 12:58   ` Björn Töpel
2019-06-13 14:01     ` Maxim Mikityanskiy
2019-06-13 14:11       ` Björn Töpel
2019-06-13 14:53         ` Björn Töpel
2019-06-13 14:01   ` Maxim Mikityanskiy

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+HfNhsjsCoDx5NCEu=AqrT-ENRb8JnqzJfo2m8kD2xraHc+w@mail.gmail.com' \
    --to=bjorn.topel@gmail.com \
    --cc=ast@kernel.org \
    --cc=bjorn.topel@intel.com \
    --cc=bpf@vger.kernel.org \
    --cc=bsd@fb.com \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=jakub.kicinski@netronome.com \
    --cc=kafai@fb.com \
    --cc=maciejromanfijalkowski@gmail.com \
    --cc=magnus.karlsson@intel.com \
    --cc=maximmi@mellanox.com \
    --cc=netdev@vger.kernel.org \
    --cc=saeedm@mellanox.com \
    --cc=songliubraving@fb.com \
    --cc=tariqt@mellanox.com \
    --cc=yhs@fb.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).