From: Raslan Darawsheh <rasland@mellanox.com>
To: Slava Ovsiienko <viacheslavo@mellanox.com>,
"dev@dpdk.org" <dev@dpdk.org>
Cc: Yongseok Koh <yskoh@mellanox.com>, Shahaf Shuler <shahafs@mellanox.com>
Subject: Re: [dpdk-dev] [PATCH] net/mlx5: fix completion request for multi-segment packets
Date: Wed, 7 Aug 2019 13:29:41 +0000 [thread overview]
Message-ID: <DB3PR0502MB39649D8AC1C6F7CE272859A2C2D40@DB3PR0502MB3964.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <1565182690-10740-1-git-send-email-viacheslavo@mellanox.com>
Hi,
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Viacheslav Ovsiienko
> Sent: Wednesday, August 7, 2019 3:58 PM
> To: dev@dpdk.org
> Cc: Yongseok Koh <yskoh@mellanox.com>; Shahaf Shuler
> <shahafs@mellanox.com>
> Subject: [dpdk-dev] [PATCH] net/mlx5: fix completion request for multi-
> segment packets
>
> The copying of sent mbufs pointers might be deferred to the end of
> tx_burst() routine to be copied in one call of rte_memcpy.
> For the multi segment packets this optimization is not applicable,
> because number of packets does not match with number of mbufs and
> we do not have linear array of pointers in pkts parameter.
>
> The completion request generating routine wrongly took into account
> the inconsistent (for multi-segment packets) deferred pointer copying.
>
> Fixes: 5a93e173b874 ("net/mlx5: fix Tx completion request generation")
>
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
> ---
> drivers/net/mlx5/mlx5_rxtx.c | 23 ++++++++++++++---------
> 1 file changed, 14 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c
> index 3e51bb0..4c01187 100644
> --- a/drivers/net/mlx5/mlx5_rxtx.c
> +++ b/drivers/net/mlx5/mlx5_rxtx.c
> @@ -2130,6 +2130,9 @@ enum mlx5_txcmp_code {
> * Pointer to TX queue structure.
> * @param loc
> * Pointer to burst routine local context.
> + * @param multi,
> + * Routine is called from multi-segment sending loop,
> + * do not correct the elts_head according to the pkts_copy.
> * @param olx
> * Configured Tx offloads mask. It is fully defined at
> * compile time and may be used for optimization.
> @@ -2137,12 +2140,14 @@ enum mlx5_txcmp_code {
> static __rte_always_inline void
> mlx5_tx_request_completion(struct mlx5_txq_data *restrict txq,
> struct mlx5_txq_local *restrict loc,
> + bool multi,
> unsigned int olx)
> {
> uint16_t head = txq->elts_head;
> unsigned int part;
>
> - part = MLX5_TXOFF_CONFIG(INLINE) ? 0 : loc->pkts_sent - loc-
> >pkts_copy;
> + part = (MLX5_TXOFF_CONFIG(INLINE) || multi) ?
> + 0 : loc->pkts_sent - loc->pkts_copy;
> head += part;
> if ((uint16_t)(head - txq->elts_comp) >= MLX5_TX_COMP_THRESH
> ||
> (MLX5_TXOFF_CONFIG(INLINE) &&
> @@ -3091,7 +3096,7 @@ enum mlx5_txcmp_code {
> txq->wqe_ci += (ds + 3) / 4;
> loc->wqe_free -= (ds + 3) / 4;
> /* Request CQE generation if limits are reached. */
> - mlx5_tx_request_completion(txq, loc, olx);
> + mlx5_tx_request_completion(txq, loc, true, olx);
> return MLX5_TXCMP_CODE_MULTI;
> }
>
> @@ -3201,7 +3206,7 @@ enum mlx5_txcmp_code {
> txq->wqe_ci += (ds + 3) / 4;
> loc->wqe_free -= (ds + 3) / 4;
> /* Request CQE generation if limits are reached. */
> - mlx5_tx_request_completion(txq, loc, olx);
> + mlx5_tx_request_completion(txq, loc, true, olx);
> return MLX5_TXCMP_CODE_MULTI;
> }
>
> @@ -3359,7 +3364,7 @@ enum mlx5_txcmp_code {
> txq->wqe_ci += (ds + 3) / 4;
> loc->wqe_free -= (ds + 3) / 4;
> /* Request CQE generation if limits are reached. */
> - mlx5_tx_request_completion(txq, loc, olx);
> + mlx5_tx_request_completion(txq, loc, true, olx);
> return MLX5_TXCMP_CODE_MULTI;
> }
>
> @@ -3570,7 +3575,7 @@ enum mlx5_txcmp_code {
> ++loc->pkts_sent;
> --pkts_n;
> /* Request CQE generation if limits are reached. */
> - mlx5_tx_request_completion(txq, loc, olx);
> + mlx5_tx_request_completion(txq, loc, false, olx);
> if (unlikely(!pkts_n || !loc->elts_free || !loc->wqe_free))
> return MLX5_TXCMP_CODE_EXIT;
> loc->mbuf = *pkts++;
> @@ -3728,7 +3733,7 @@ enum mlx5_txcmp_code {
> txq->wqe_ci += (ds + 3) / 4;
> loc->wqe_free -= (ds + 3) / 4;
> /* Request CQE generation if limits are reached. */
> - mlx5_tx_request_completion(txq, loc, olx);
> + mlx5_tx_request_completion(txq, loc, false, olx);
> }
>
> /*
> @@ -3772,7 +3777,7 @@ enum mlx5_txcmp_code {
> txq->wqe_ci += (len + 3) / 4;
> loc->wqe_free -= (len + 3) / 4;
> /* Request CQE generation if limits are reached. */
> - mlx5_tx_request_completion(txq, loc, olx);
> + mlx5_tx_request_completion(txq, loc, false, olx);
> }
>
> /**
> @@ -3965,7 +3970,7 @@ enum mlx5_txcmp_code {
> loc->wqe_free -= (2 + part + 3) / 4;
> pkts_n -= part;
> /* Request CQE generation if limits are reached. */
> - mlx5_tx_request_completion(txq, loc, olx);
> + mlx5_tx_request_completion(txq, loc, false, olx);
> if (unlikely(!pkts_n || !loc->elts_free || !loc->wqe_free))
> return MLX5_TXCMP_CODE_EXIT;
> loc->mbuf = *pkts++;
> @@ -4440,7 +4445,7 @@ enum mlx5_txcmp_code {
> ++loc->pkts_sent;
> --pkts_n;
> /* Request CQE generation if limits are reached. */
> - mlx5_tx_request_completion(txq, loc, olx);
> + mlx5_tx_request_completion(txq, loc, false, olx);
> if (unlikely(!pkts_n || !loc->elts_free || !loc->wqe_free))
> return MLX5_TXCMP_CODE_EXIT;
> loc->mbuf = *pkts++;
> --
> 1.8.3.1
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
prev parent reply other threads:[~2019-08-07 13:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-07 12:58 Viacheslav Ovsiienko
2019-08-07 13:29 ` Raslan Darawsheh [this message]
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=DB3PR0502MB39649D8AC1C6F7CE272859A2C2D40@DB3PR0502MB3964.eurprd05.prod.outlook.com \
--to=rasland@mellanox.com \
--cc=dev@dpdk.org \
--cc=shahafs@mellanox.com \
--cc=viacheslavo@mellanox.com \
--cc=yskoh@mellanox.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).