* [dpdk-dev] [PATCH 1/2] net/ring: refactor to reduce indentation in probe
@ 2020-10-02 22:47 Ferruh Yigit
2020-10-02 22:47 ` [dpdk-dev] [PATCH 2/2] net/ring: prevent nodeaction arg create multiple ethdev Ferruh Yigit
2021-04-20 1:10 ` [dpdk-dev] [PATCH 1/2] net/ring: refactor to reduce indentation in probe Ferruh Yigit
0 siblings, 2 replies; 3+ messages in thread
From: Ferruh Yigit @ 2020-10-02 22:47 UTC (permalink / raw)
To: Bruce Richardson; +Cc: dev
No functional change.
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
drivers/net/ring/rte_eth_ring.c | 137 +++++++++++++++-----------------
1 file changed, 66 insertions(+), 71 deletions(-)
diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
index 83c5502123..6d3deaa81a 100644
--- a/drivers/net/ring/rte_eth_ring.c
+++ b/drivers/net/ring/rte_eth_ring.c
@@ -598,85 +598,80 @@ rte_pmd_ring_probe(struct rte_vdev_device *dev)
PMD_LOG(INFO, "Initializing pmd_ring for %s", name);
if (params == NULL || params[0] == '\0') {
- ret = eth_dev_ring_create(name, dev, rte_socket_id(), DEV_CREATE,
- ð_dev);
+ ret = eth_dev_ring_create(name, dev, rte_socket_id(),
+ DEV_CREATE, ð_dev);
if (ret == -1) {
- PMD_LOG(INFO,
- "Attach to pmd_ring for %s", name);
+ PMD_LOG(INFO, "Attach to pmd_ring for %s", name);
ret = eth_dev_ring_create(name, dev, rte_socket_id(),
- DEV_ATTACH, ð_dev);
+ DEV_ATTACH, ð_dev);
}
- } else {
- kvlist = rte_kvargs_parse(params, valid_arguments);
- if (!kvlist) {
- PMD_LOG(INFO,
- "Ignoring unsupported parameters when creatingrings-backed ethernet device");
+ return ret;
+ }
+
+ kvlist = rte_kvargs_parse(params, valid_arguments);
+ if (!kvlist) {
+ PMD_LOG(INFO,
+ "Ignoring unsupported parameters when creatingrings-backed ethernet device");
+ ret = eth_dev_ring_create(name, dev, rte_socket_id(),
+ DEV_CREATE, ð_dev);
+ if (ret == -1) {
+ PMD_LOG(INFO, "Attach to pmd_ring for %s", name);
ret = eth_dev_ring_create(name, dev, rte_socket_id(),
- DEV_CREATE, ð_dev);
- if (ret == -1) {
- PMD_LOG(INFO,
- "Attach to pmd_ring for %s",
- name);
- ret = eth_dev_ring_create(name, dev, rte_socket_id(),
- DEV_ATTACH, ð_dev);
- }
-
- return ret;
+ DEV_ATTACH, ð_dev);
}
- if (rte_kvargs_count(kvlist, ETH_RING_INTERNAL_ARG) == 1) {
- ret = rte_kvargs_process(kvlist, ETH_RING_INTERNAL_ARG,
- parse_internal_args,
- &internal_args);
- if (ret < 0)
- goto out_free;
-
- ret = do_eth_dev_ring_create(name, dev,
- internal_args->rx_queues,
- internal_args->nb_rx_queues,
- internal_args->tx_queues,
- internal_args->nb_tx_queues,
- internal_args->numa_node,
- DEV_ATTACH,
+ return ret;
+ }
+
+ if (rte_kvargs_count(kvlist, ETH_RING_INTERNAL_ARG) == 1) {
+ ret = rte_kvargs_process(kvlist, ETH_RING_INTERNAL_ARG,
+ parse_internal_args,
+ &internal_args);
+ if (ret < 0)
+ goto out_free;
+
+ ret = do_eth_dev_ring_create(name, dev,
+ internal_args->rx_queues,
+ internal_args->nb_rx_queues,
+ internal_args->tx_queues,
+ internal_args->nb_tx_queues,
+ internal_args->numa_node,
+ DEV_ATTACH,
+ ð_dev);
+ if (ret >= 0)
+ ret = 0;
+ goto out_free;
+ }
+
+ ret = rte_kvargs_count(kvlist, ETH_RING_NUMA_NODE_ACTION_ARG);
+ info = rte_zmalloc("struct node_action_list",
+ sizeof(struct node_action_list) +
+ (sizeof(struct node_action_pair) * ret),
+ 0);
+ if (!info)
+ goto out_free;
+
+ info->total = ret;
+ info->list = (struct node_action_pair *)(info + 1);
+
+ ret = rte_kvargs_process(kvlist, ETH_RING_NUMA_NODE_ACTION_ARG,
+ parse_kvlist, info);
+
+ if (ret < 0)
+ goto out_free;
+
+ for (info->count = 0; info->count < info->total; info->count++) {
+ ret = eth_dev_ring_create(info->list[info->count].name, dev,
+ info->list[info->count].node,
+ info->list[info->count].action,
ð_dev);
- if (ret >= 0)
- ret = 0;
- } else {
- ret = rte_kvargs_count(kvlist, ETH_RING_NUMA_NODE_ACTION_ARG);
- info = rte_zmalloc("struct node_action_list",
- sizeof(struct node_action_list) +
- (sizeof(struct node_action_pair) * ret),
- 0);
- if (!info)
- goto out_free;
-
- info->total = ret;
- info->list = (struct node_action_pair *)(info + 1);
-
- ret = rte_kvargs_process(kvlist, ETH_RING_NUMA_NODE_ACTION_ARG,
- parse_kvlist, info);
-
- if (ret < 0)
- goto out_free;
-
- for (info->count = 0; info->count < info->total; info->count++) {
- ret = eth_dev_ring_create(info->list[info->count].name,
- dev,
- info->list[info->count].node,
- info->list[info->count].action,
- ð_dev);
- if ((ret == -1) &&
- (info->list[info->count].action == DEV_CREATE)) {
- PMD_LOG(INFO,
- "Attach to pmd_ring for %s",
- name);
- ret = eth_dev_ring_create(name, dev,
- info->list[info->count].node,
- DEV_ATTACH,
- ð_dev);
- }
- }
+ if ((ret == -1) && (info->list[info->count].action == DEV_CREATE)) {
+ PMD_LOG(INFO, "Attach to pmd_ring for %s", name);
+ ret = eth_dev_ring_create(name, dev,
+ info->list[info->count].node,
+ DEV_ATTACH,
+ ð_dev);
}
}
--
2.26.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* [dpdk-dev] [PATCH 2/2] net/ring: prevent nodeaction arg create multiple ethdev
2020-10-02 22:47 [dpdk-dev] [PATCH 1/2] net/ring: refactor to reduce indentation in probe Ferruh Yigit
@ 2020-10-02 22:47 ` Ferruh Yigit
2021-04-20 1:10 ` [dpdk-dev] [PATCH 1/2] net/ring: refactor to reduce indentation in probe Ferruh Yigit
1 sibling, 0 replies; 3+ messages in thread
From: Ferruh Yigit @ 2020-10-02 22:47 UTC (permalink / raw)
To: Bruce Richardson; +Cc: dev
PMD accepts multiple 'nodeaction' arguments per vdev, for each instance
of the devarg an ethdev is created.
Like:
"--vdev net_ring0,nodeaction=r1:0:CREATE,nodeaction=r2:0:CREATE"
allocates two ethdevs.
Here ethdev names will be 'r1' and 'r2' respectively (each ethdev with
hardcoded number of queues).
If multiple ring ethdev is required, this can already be achieved by
providing multiple '--vdev'.
This patch updates the multiple 'nodeaction' arguments behavior, it now
creates single ethdev per a '--vdev' and each 'nodeaction' argument used
to define a queue of the ethdev. Number of 'nodeaction' argument defines
number of the queues in device.
Like for above sample:
"--vdev net_ring0,nodeaction=r1:0:CREATE,nodeaction=r2:0:CREATE",
creates an ethdev named 'net_ring0' with two queues from newly created
rings. Ring names are 'r1' and 'r2'.
For ethdev device 'node' and 'action' values are used from first
instance of the 'nodeaction' argument.
The behavior of the single 'nodeaction' argument behavior is slightly
changed, it now allocates (create or attach) single queue, instead of
hardcoded number of queues as done before.
The behavior without 'nodeaction' argument, "--vdev net_ring0", has not
been changed at all.
This also allows following, which was broken before:
"--vdev net_ring0,nodeaction=r1:0:CREATE,nodeaction=r2:0:CREATE \
--vdev net_ring1,nodeaction=r1:0:ATTACH,nodeaction=r2:0:ATTACH"
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
drivers/net/ring/rte_eth_ring.c | 53 +++++++++++++++++++++++++--------
1 file changed, 40 insertions(+), 13 deletions(-)
diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
index 6d3deaa81a..fd02c06c56 100644
--- a/drivers/net/ring/rte_eth_ring.c
+++ b/drivers/net/ring/rte_eth_ring.c
@@ -495,6 +495,38 @@ struct node_action_list {
struct node_action_pair *list;
};
+static int
+eth_dev_ring_create_nodeaction(const char *name,
+ struct rte_vdev_device *vdev,
+ const unsigned int numa_node,
+ enum dev_action action,
+ struct rte_eth_dev **eth_dev,
+ struct node_action_list *info)
+{
+ struct rte_ring *rxtx[RTE_PMD_RING_MAX_RX_RINGS];
+ unsigned int num_rings;
+ unsigned int i;
+
+ num_rings = info->total;
+
+ for (i = 0; i < num_rings; i++) {
+ if (action == DEV_CREATE)
+ rxtx[i] = rte_ring_create(info->list[i].name, 1024,
+ numa_node,
+ RING_F_SP_ENQ|RING_F_SC_DEQ);
+ else
+ rxtx[i] = rte_ring_lookup(info->list[i].name);
+ if (rxtx[i] == NULL)
+ return -1;
+ }
+
+ if (do_eth_dev_ring_create(name, vdev, rxtx, num_rings, rxtx,
+ num_rings, numa_node, action, eth_dev) < 0)
+ return -1;
+
+ return 0;
+}
+
static int parse_kvlist(const char *key __rte_unused,
const char *value, void *data)
{
@@ -657,22 +689,17 @@ rte_pmd_ring_probe(struct rte_vdev_device *dev)
ret = rte_kvargs_process(kvlist, ETH_RING_NUMA_NODE_ACTION_ARG,
parse_kvlist, info);
-
if (ret < 0)
goto out_free;
- for (info->count = 0; info->count < info->total; info->count++) {
- ret = eth_dev_ring_create(info->list[info->count].name, dev,
- info->list[info->count].node,
- info->list[info->count].action,
- ð_dev);
- if ((ret == -1) && (info->list[info->count].action == DEV_CREATE)) {
- PMD_LOG(INFO, "Attach to pmd_ring for %s", name);
- ret = eth_dev_ring_create(name, dev,
- info->list[info->count].node,
- DEV_ATTACH,
- ð_dev);
- }
+ ret = eth_dev_ring_create_nodeaction(name, dev,
+ info->list[0].node,
+ info->list[0].action, ð_dev, info);
+ if ((ret == -1) && (info->list[0].action == DEV_CREATE)) {
+ PMD_LOG(INFO, "Attach to pmd_ring for %s", name);
+ ret = eth_dev_ring_create_nodeaction(name, dev,
+ info->list[0].node,
+ DEV_ATTACH, ð_dev, info);
}
out_free:
--
2.26.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-dev] [PATCH 1/2] net/ring: refactor to reduce indentation in probe
2020-10-02 22:47 [dpdk-dev] [PATCH 1/2] net/ring: refactor to reduce indentation in probe Ferruh Yigit
2020-10-02 22:47 ` [dpdk-dev] [PATCH 2/2] net/ring: prevent nodeaction arg create multiple ethdev Ferruh Yigit
@ 2021-04-20 1:10 ` Ferruh Yigit
1 sibling, 0 replies; 3+ messages in thread
From: Ferruh Yigit @ 2021-04-20 1:10 UTC (permalink / raw)
To: Bruce Richardson; +Cc: dev
On 10/2/2020 11:47 PM, Ferruh Yigit wrote:
> No functional change.
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
self nack. This patch is was just refactoring without functional change, but
missing reviews, dropping it for now.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-04-20 1:10 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-02 22:47 [dpdk-dev] [PATCH 1/2] net/ring: refactor to reduce indentation in probe Ferruh Yigit
2020-10-02 22:47 ` [dpdk-dev] [PATCH 2/2] net/ring: prevent nodeaction arg create multiple ethdev Ferruh Yigit
2021-04-20 1:10 ` [dpdk-dev] [PATCH 1/2] net/ring: refactor to reduce indentation in probe Ferruh Yigit
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).