From: Thomas Monjalon <thomas@monjalon.net>
To: dev@dpdk.org
Cc: gaetan.rivet@6wind.com, ophirmu@mellanox.com,
ferruh.yigit@intel.com, arybchenko@solarflare.com,
olivier.matz@6wind.com, remy.horton@intel.com
Subject: [dpdk-dev] [PATCH 4/4] ethdev: support representor id for iterating ports
Date: Tue, 9 Oct 2018 04:18:58 +0200 [thread overview]
Message-ID: <20181009021858.19216-5-thomas@monjalon.net> (raw)
In-Reply-To: <20181009021858.19216-1-thomas@monjalon.net>
The representor id is added in rte_eth_dev_data in order to be able
to match a port with its representor id in devargs.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/net/i40e/i40e_vf_representor.c | 1 +
drivers/net/ixgbe/ixgbe_vf_representor.c | 1 +
drivers/net/mlx5/mlx5.c | 4 ++-
lib/librte_ethdev/rte_class_eth.c | 44 ++++++++++++++++++++++++
lib/librte_ethdev/rte_ethdev_core.h | 2 ++
5 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/drivers/net/i40e/i40e_vf_representor.c b/drivers/net/i40e/i40e_vf_representor.c
index 24751d13c..a377c1064 100644
--- a/drivers/net/i40e/i40e_vf_representor.c
+++ b/drivers/net/i40e/i40e_vf_representor.c
@@ -504,6 +504,7 @@ i40e_vf_representor_init(struct rte_eth_dev *ethdev, void *init_params)
}
ethdev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR;
+ ethdev->data->representor_id = representor->vf_id;
/* Setting the number queues allocated to the VF */
ethdev->data->nb_rx_queues = vf->vsi->nb_qps;
diff --git a/drivers/net/ixgbe/ixgbe_vf_representor.c b/drivers/net/ixgbe/ixgbe_vf_representor.c
index b0fbbc49f..26e2af4f8 100644
--- a/drivers/net/ixgbe/ixgbe_vf_representor.c
+++ b/drivers/net/ixgbe/ixgbe_vf_representor.c
@@ -192,6 +192,7 @@ ixgbe_vf_representor_init(struct rte_eth_dev *ethdev, void *init_params)
return -ENODEV;
ethdev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR;
+ ethdev->data->representor_id = representor->vf_id;
/* Set representor device ops */
ethdev->dev_ops = &ixgbe_vf_representor_dev_ops;
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index cf258345f..de8bab342 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -1075,8 +1075,10 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
err = ENOMEM;
goto error;
}
- if (priv->representor)
+ if (priv->representor) {
eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR;
+ eth_dev->data->representor_id = priv->representor_id;
+ }
eth_dev->data->dev_private = priv;
priv->dev_data = eth_dev->data;
eth_dev->data->mac_addrs = priv->mac;
diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/librte_ethdev/rte_class_eth.c
index 58fed694b..fef431f33 100644
--- a/lib/librte_ethdev/rte_class_eth.c
+++ b/lib/librte_ethdev/rte_class_eth.c
@@ -12,13 +12,16 @@
#include "rte_ethdev.h"
#include "rte_ethdev_core.h"
+#include "rte_ethdev_driver.h"
#include "ethdev_private.h"
enum eth_params {
+ RTE_ETH_PARAM_REPRESENTOR,
RTE_ETH_PARAM_MAX,
};
static const char * const eth_params_keys[] = {
+ [RTE_ETH_PARAM_REPRESENTOR] = "representor",
[RTE_ETH_PARAM_MAX] = NULL,
};
@@ -33,10 +36,44 @@ struct eth_dev_match_arg {
.kvlist = (k), \
})
+static int
+eth_representor_cmp(const char *key __rte_unused,
+ const char *value, void *opaque)
+{
+ int ret;
+ char *values;
+ const struct rte_eth_dev_data *data = opaque;
+ struct rte_eth_devargs representors;
+ int index;
+
+ if ((data->dev_flags & RTE_ETH_DEV_REPRESENTOR) == 0)
+ return -1; /* not a representor port */
+
+ /* Parse devargs representor values. */
+ values = strdup(value);
+ if (values == NULL)
+ return -1;
+ memset(&representors, 0, sizeof(representors));
+ ret = rte_eth_devargs_parse_list(values,
+ rte_eth_devargs_parse_representor_ports,
+ &representors);
+ free(values);
+ if (ret != 0)
+ return -1; /* invalid devargs value */
+
+ /* Return 0 if representor id is matching one of the values. */
+ for (index = 0; index < representors.nb_representor_ports; index++)
+ if (data->representor_id ==
+ representors.representor_ports[index])
+ return 0;
+ return -1; /* no match */
+}
+
static int
eth_dev_match(const struct rte_eth_dev *edev,
const void *_arg)
{
+ int ret;
const struct eth_dev_match_arg *arg = _arg;
const struct rte_kvargs *kvlist = arg->kvlist;
@@ -47,6 +84,13 @@ eth_dev_match(const struct rte_eth_dev *edev,
if (kvlist == NULL)
/* Empty string matches everything. */
return 0;
+
+ ret = rte_kvargs_process(kvlist,
+ eth_params_keys[RTE_ETH_PARAM_REPRESENTOR],
+ eth_representor_cmp, edev->data);
+ if (ret != 0)
+ return -1;
+
return 0;
}
diff --git a/lib/librte_ethdev/rte_ethdev_core.h b/lib/librte_ethdev/rte_ethdev_core.h
index 33d12b3a2..ac67fde28 100644
--- a/lib/librte_ethdev/rte_ethdev_core.h
+++ b/lib/librte_ethdev/rte_ethdev_core.h
@@ -613,6 +613,8 @@ struct rte_eth_dev_data {
struct rte_vlan_filter_conf vlan_filter_conf;
/**< VLAN filter configuration. */
struct rte_eth_dev_owner owner; /**< The port owner. */
+ uint16_t representor_id;
+ /**< switch specific identifier - valid if RTE_ETH_DEV_REPRESENTOR */
} __rte_cache_aligned;
/**
--
2.19.0
next prev parent reply other threads:[~2018-10-09 2:19 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-09 2:18 [dpdk-dev] [PATCH 0/4] support more ethdev iterator filters Thomas Monjalon
2018-10-09 2:18 ` [dpdk-dev] [PATCH 1/4] kvargs: support list value Thomas Monjalon
2018-10-09 14:14 ` Gaëtan Rivet
2018-10-09 14:31 ` Thomas Monjalon
2018-10-09 15:11 ` Stephen Hemminger
2018-10-09 17:11 ` Thomas Monjalon
2018-10-10 13:12 ` Remy Horton
2018-10-09 2:18 ` [dpdk-dev] [PATCH 2/4] mk: remove broken check Thomas Monjalon
2018-10-09 11:43 ` Neil Horman
2018-10-09 11:53 ` Thomas Monjalon
2018-10-09 18:11 ` Neil Horman
2018-10-09 2:18 ` [dpdk-dev] [PATCH 3/4] ethdev: move representor parsing functions Thomas Monjalon
2018-10-09 9:06 ` Andrew Rybchenko
2018-10-09 12:38 ` Remy Horton
2018-10-09 13:25 ` Thomas Monjalon
2018-10-09 2:18 ` Thomas Monjalon [this message]
2018-10-09 9:14 ` [dpdk-dev] [PATCH 4/4] ethdev: support representor id for iterating ports Andrew Rybchenko
2018-10-10 19:23 ` [dpdk-dev] [PATCH v2 0/4] support more ethdev iterator filters Thomas Monjalon
2018-10-10 19:23 ` [dpdk-dev] [PATCH v2 1/4] kvargs: support list value Thomas Monjalon
2018-10-10 19:23 ` [dpdk-dev] [PATCH v2 2/4] ethdev: move representor parsing functions Thomas Monjalon
2018-10-10 19:23 ` [dpdk-dev] [PATCH v2 3/4] ethdev: support representor id as iterator filter Thomas Monjalon
2018-10-10 19:23 ` [dpdk-dev] [PATCH v2 4/4] ethdev: support MAC address " Thomas Monjalon
2018-10-22 13:15 ` [dpdk-dev] [PATCH v3 0/4] support more ethdev iterator filters Thomas Monjalon
2018-10-22 13:15 ` [dpdk-dev] [PATCH v3 1/4] kvargs: support list value Thomas Monjalon
2018-10-22 13:15 ` [dpdk-dev] [PATCH v3 2/4] ethdev: move representor parsing functions Thomas Monjalon
2018-10-22 13:15 ` [dpdk-dev] [PATCH v3 3/4] ethdev: support representor id as iterator filter Thomas Monjalon
2018-10-22 13:15 ` [dpdk-dev] [PATCH v3 4/4] ethdev: support MAC address " Thomas Monjalon
2018-10-22 13:37 ` Andrew Rybchenko
2018-10-22 14:02 ` Thomas Monjalon
2018-10-22 14:18 ` Andrew Rybchenko
2018-10-22 21:24 ` Ananyev, Konstantin
2018-10-23 7:20 ` Thomas Monjalon
2018-10-23 8:33 ` Ananyev, Konstantin
2018-10-23 8:53 ` Thomas Monjalon
2018-10-23 21:45 ` Ananyev, Konstantin
2018-10-22 14:25 ` Andrew Rybchenko
2018-10-24 8:27 ` [dpdk-dev] [PATCH v3 0/4] support more ethdev iterator filters Ferruh Yigit
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=20181009021858.19216-5-thomas@monjalon.net \
--to=thomas@monjalon.net \
--cc=arybchenko@solarflare.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=gaetan.rivet@6wind.com \
--cc=olivier.matz@6wind.com \
--cc=ophirmu@mellanox.com \
--cc=remy.horton@intel.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).