DPDK patches and discussions
 help / color / mirror / Atom feed
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
To: Matan Azrad <matan@nvidia.com>,
	Viacheslav Ovsiienko <viacheslavo@nvidia.com>,
	Ori Kam <orika@nvidia.com>, Suanming Mou <suanmingm@nvidia.com>,
	Jiawei Wang <jiaweiw@nvidia.com>
Cc: <dev@dpdk.org>
Subject: [PATCH] net/mlx5: fix bond resource release
Date: Fri, 4 Aug 2023 20:15:36 +0300	[thread overview]
Message-ID: <20230804171536.1724554-1-dsosnowski@nvidia.com> (raw)

When a port is spawned on top of mlx5 bonding device,
the following TIS objects are created:

- TIS with index 0 - for default HW hash bonding mode,
- TIS with index 1 - for sending packets on 1st physical port,
- TIS with index 2 - for sending packets on 2nd physical port,
- and so on.

These TIS objects are used according to configured Tx queue affinity,
which was set up using rte_eth_dev_map_aggr_tx_affinity() API.

Before this patch, when DPDK was compiled in debug mode and
RTE_LIBRTE_MLX5_DEBUG macro was declared, applications were asserting
on failed call to destroy the TD object (on which TIS objects
are dependent) during closing of the ports.
Failure was caused by the fact that when TD object was destroyed, not
all TIS objects were destroyed yet. This was caused by "off-by-one"
issue in mlx5_free_shared_dev_ctx().
This function was releasing n TIS objects, but it should
release n + 1 objects, where n is number of aggregated ports.
(n + 1, because there are n TIS objects for each physical port
and 1 TIS object for default HW hash mode).

This patch fixes this issue in resource release of TIS objects.

Fixes: ce306af6341b ("net/mlx5: enhance Tx queue affinity")
Cc: jiaweiw@nvidia.com

Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
 drivers/net/mlx5/mlx5.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index b373306f98..7d044bcd75 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -1720,7 +1720,7 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn,
 	do {
 		if (sh->tis[i])
 			claim_zero(mlx5_devx_cmd_destroy(sh->tis[i]));
-	} while (++i < (uint32_t)sh->bond.n_port);
+	} while (++i <= (uint32_t)sh->bond.n_port);
 	if (sh->td)
 		claim_zero(mlx5_devx_cmd_destroy(sh->td));
 	mlx5_free(sh);
@@ -1864,7 +1864,7 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh)
 	do {
 		if (sh->tis[i])
 			claim_zero(mlx5_devx_cmd_destroy(sh->tis[i]));
-	} while (++i < sh->bond.n_port);
+	} while (++i <= sh->bond.n_port);
 	if (sh->td)
 		claim_zero(mlx5_devx_cmd_destroy(sh->td));
 #ifdef HAVE_MLX5_HWS_SUPPORT
-- 
2.25.1


             reply	other threads:[~2023-08-04 17:16 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-04 17:15 Dariusz Sosnowski [this message]
2023-08-18 10:04 ` Slava Ovsiienko
2023-08-31  8:39 ` Raslan Darawsheh

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=20230804171536.1724554-1-dsosnowski@nvidia.com \
    --to=dsosnowski@nvidia.com \
    --cc=dev@dpdk.org \
    --cc=jiaweiw@nvidia.com \
    --cc=matan@nvidia.com \
    --cc=orika@nvidia.com \
    --cc=suanmingm@nvidia.com \
    --cc=viacheslavo@nvidia.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).