DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] net/mlx5: set representor device to first PF in bonding mode
@ 2020-11-17 11:01 Xueming Li
  2020-11-17 20:53 ` Raslan Darawsheh
  0 siblings, 1 reply; 2+ messages in thread
From: Xueming Li @ 2020-11-17 11:01 UTC (permalink / raw)
  To: Matan Azrad, Viacheslav Ovsiienko; +Cc: dev, xuemingl, Asaf Penso

When the representor device was set to PF1 in bonding mode, iterating
device iterator that looking for representors by bonding device failed
to match PF0 pci address with PF1 address. So detaching PF bonding
device only detached all representors on PF0.

This patch registers all representors of PF1 with PF0 as PCI device.

Signed-off-by: Xueming Li <xuemingl@nvidia.com>
Reviewed-by: Slava Ovsiienko <viacheslavo@nvidia.com>
---
 drivers/net/mlx5/linux/mlx5_os.c | 20 ++++++++++++++++++--
 drivers/net/mlx5/mlx5.c          |  1 +
 drivers/net/mlx5/mlx5.h          |  1 +
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index ce25108b90..4b7fff4eff 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -757,7 +757,13 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
 			rte_errno = ENOMEM;
 			return NULL;
 		}
-		eth_dev->device = dpdk_dev;
+		priv = eth_dev->data->dev_private;
+		if (priv->sh->bond_dev != UINT16_MAX)
+			/* For bonding port, use primary PCI device. */
+			eth_dev->device =
+				rte_eth_devices[priv->sh->bond_dev].device;
+		else
+			eth_dev->device = dpdk_dev;
 		eth_dev->dev_ops = &mlx5_os_dev_sec_ops;
 		eth_dev->rx_descriptor_status = mlx5_rx_descriptor_status;
 		eth_dev->tx_descriptor_status = mlx5_tx_descriptor_status;
@@ -1373,7 +1379,17 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
 	eth_dev->data->dev_private = priv;
 	priv->dev_data = eth_dev->data;
 	eth_dev->data->mac_addrs = priv->mac;
-	eth_dev->device = dpdk_dev;
+	if (spawn->pf_bond < 0) {
+		eth_dev->device = dpdk_dev;
+	} else {
+		/* Use primary bond PCI as device. */
+		if (sh->bond_dev == UINT16_MAX) {
+			sh->bond_dev = eth_dev->data->port_id;
+			eth_dev->device = dpdk_dev;
+		} else {
+			eth_dev->device = rte_eth_devices[sh->bond_dev].device;
+		}
+	}
 	eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
 	/* Configure the first MAC address by default. */
 	if (mlx5_get_mac(eth_dev, &mac.addr_bytes)) {
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 31011c3a72..ede5fd44ab 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -915,6 +915,7 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn,
 		goto error;
 	}
 	sh->refcnt = 1;
+	sh->bond_dev = UINT16_MAX;
 	sh->max_port = spawn->max_port;
 	strncpy(sh->ibdev_name, mlx5_os_get_ctx_device_name(sh->ctx),
 		sizeof(sh->ibdev_name) - 1);
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 0155f5ca23..b0c3a2286d 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -705,6 +705,7 @@ struct mlx5_flex_parser_profiles {
 struct mlx5_dev_ctx_shared {
 	LIST_ENTRY(mlx5_dev_ctx_shared) next;
 	uint32_t refcnt;
+	uint16_t bond_dev; /* Bond primary device id. */
 	uint32_t devx:1; /* Opened with DV. */
 	uint32_t flow_hit_aso_en:1; /* Flow Hit ASO is supported. */
 	uint32_t eqn; /* Event Queue number. */
-- 
2.25.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [dpdk-dev] [PATCH] net/mlx5: set representor device to first PF in bonding mode
  2020-11-17 11:01 [dpdk-dev] [PATCH] net/mlx5: set representor device to first PF in bonding mode Xueming Li
@ 2020-11-17 20:53 ` Raslan Darawsheh
  0 siblings, 0 replies; 2+ messages in thread
From: Raslan Darawsheh @ 2020-11-17 20:53 UTC (permalink / raw)
  To: Xueming(Steven) Li, Matan Azrad, Slava Ovsiienko
  Cc: dev, Xueming(Steven) Li, Asaf Penso

Hi,

> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Xueming Li
> Sent: Tuesday, November 17, 2020 1:02 PM
> To: Matan Azrad <matan@nvidia.com>; Slava Ovsiienko
> <viacheslavo@nvidia.com>
> Cc: dev@dpdk.org; Xueming(Steven) Li <xuemingl@nvidia.com>; Asaf Penso
> <asafp@nvidia.com>
> Subject: [dpdk-dev] [PATCH] net/mlx5: set representor device to first PF in
> bonding mode
> 
> When the representor device was set to PF1 in bonding mode, iterating
> device iterator that looking for representors by bonding device failed
> to match PF0 pci address with PF1 address. So detaching PF bonding
> device only detached all representors on PF0.
> 
> This patch registers all representors of PF1 with PF0 as PCI device.
> 
> Signed-off-by: Xueming Li <xuemingl@nvidia.com>
> Reviewed-by: Slava Ovsiienko <viacheslavo@nvidia.com>
> ---
>  drivers/net/mlx5/linux/mlx5_os.c | 20 ++++++++++++++++++--
>  drivers/net/mlx5/mlx5.c          |  1 +
>  drivers/net/mlx5/mlx5.h          |  1 +
>  3 files changed, 20 insertions(+), 2 deletions(-)

Patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-11-17 20:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-17 11:01 [dpdk-dev] [PATCH] net/mlx5: set representor device to first PF in bonding mode Xueming Li
2020-11-17 20:53 ` Raslan Darawsheh

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git